{"version":3,"sources":["webpack:///./node_modules/surveyjs-widgets/surveyjs-widgets.js","webpack:///./node_modules/survey-vue/survey-vue.js","webpack:///./node_modules/inputmask/dist/inputmask.js","webpack:///./node_modules/core-js/modules/es.array.is-array.js","webpack:///./node_modules/bootstrap-slider/dist/bootstrap-slider.js","webpack:///./node_modules/core-js/internals/whitespaces.js","webpack:///./node_modules/core-js/internals/string-trim.js","webpack:///./node_modules/sortablejs/modular/sortable.esm.js","webpack:///./src/views/survey_view.vue?3ddb","webpack:///src/views/survey_view.vue","webpack:///./src/views/survey_view.vue?d4ac","webpack:///./src/views/survey_view.vue","webpack:///./node_modules/core-js/internals/number-parse-int.js","webpack:///./node_modules/core-js/modules/es.array.index-of.js","webpack:///./src/views/form_survey.vue?2986","webpack:///src/views/form_survey.vue","webpack:///./src/views/form_survey.vue?377e","webpack:///./src/views/form_survey.vue","webpack:///./node_modules/core-js/modules/es.parse-int.js","webpack:///./node_modules/nouislider/distribute/nouislider.js"],"names":["root","factory","module","exports","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","prototype","hasOwnProperty","p","s","__webpack_exports__","escValue","val","replace","init","Survey","$","window","widget","className","checkboxClass","radioClass","widgetIsLoaded","fn","iCheck","isFit","question","t","getType","isDefaultRender","afterRender","el","rootWidget","this","$el","getIndexByValue","arr","value","Array","isArray","length","toString","toLowerCase","find","hide","data","undefined","frozeUpdating","makeChoicesICheck","inputs","on","event","generatedVisibleRows","forEach","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","push","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","numericRadixPoint","numericAutoGroup","numericDigits","numericDigitsOptional","numericPlaceholder","autoUnmask","clearIncomplete","a","inputMask","inputFormat","findProperty","properties","visible","addProperties","applyInputMask","surveyElement","mask","options","option","groupSeparator","radixPoint","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","config","extend","placeHolder","attr","dateFormat","minDate","maxDate","renderedMin","renderedMax","dateText","fixFocusIE","onClose","inst","beforeShow","result","navigator","userAgent","match","pickerWidget","updateDate","isEmpty","Date","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","apply","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","otherPlaceHolder","hasSelectAll","isAllSelected","selectAllItemValue","isAllItemSelected","_propertyValueChangedFnSelect2","params","selectAll","select2Val","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","Promise","resolve","generateFlats","then","htmlBricks","easyAutocomplete","getCssSelectorFromClassesString","classesString","cssSelector","questionRootClasses","cssRoot","questionRoot","overflow","adjustWidth","list","sort","enabled","onChooseEvent","selectedData","getSelectedItemData","choicesByUrl","valueName","url","phrase","getValue","supportedTypes","radiogroup","rootClass","inputType","states","stateClass","addOn","boolean","iconClass","isFitByType","indexOf","supportedType","element","itemInputs","questionType","checkboxType","radiogroupType","booleanType","inChangeHandler","changeHandler","arguments","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","callback","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","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","request","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","todayHighlight","weekStart","clearBtn","autoclose","autoClose","daysOfWeekHighlighted","disableTouchKeyboard","startDate","getFullYear","endDate","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","clientX","clientY","_createPoint","lastPointGroup","lastPoint","isLastPointTooClose","_addPoint","curve","widths","_drawCurve","canDrawCurve","points","_drawDot","msTouchAction","touchAction","_lastVelocity","_lastWidth","getBoundingClientRect","unshift","_calculateCurveControlPoints","c3","_calculateCurveWidths","shift","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","defaults","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","utils","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__","CheckboxItem","_base__WEBPACK_IMPORTED_MODULE_2__","Comment","change","ActionBarItemDropdownViewModel","_action_bar_item_vue__WEBPACK_IMPORTED_MODULE_2__","ActionBarItemViewModel","ActionBarSeparatorViewModel","innerCss","ActionBarViewModel","_action_vue__WEBPACK_IMPORTED_MODULE_3__","_action_bar_item_vue__WEBPACK_IMPORTED_MODULE_4__","_action_bar_item_dropdown_vue__WEBPACK_IMPORTED_MODULE_5__","_action_bar_separator_vue__WEBPACK_IMPORTED_MODULE_6__","mounted","hasActions","initResponsivityManager","beforeDestroy","resetResponsivityManager","ActionViewModel","getComponentName","ListItem","_list_vue__WEBPACK_IMPORTED_MODULE_3__","List","_list_item_vue__WEBPACK_IMPORTED_MODULE_3__","filteredText","SurveyQuestionMatrixDetailButton","SurveyQuestionMatrixDynamicDragDropIcon","SurveyQuestionMatrixDynamicRemoveButton","PopupContainer","showModal","clickInside","onUpdated","prevIsVisible","isVisible","updateOnShowing","componentName","onApply","onCancel","cssClass","popupViewModel","popup","$destroy","destroyPopupContainer","propsData","Popup","_popup_container_vue__WEBPACK_IMPORTED_MODULE_3__","_base__WEBPACK_IMPORTED_MODULE_4__","onMounted","initializePopupContainer","popupContainer","destroyed","Skeleton","SvgIcon","onSizePropertyChanged","onWidthPropertyChanged","onHeightPropertyChanged","onIconNamePropertyChanged","svgIconElement","$refs","DefaultTitle","vue_class_component__WEBPACK_IMPORTED_MODULE_1__","vue_property_decorator__WEBPACK_IMPORTED_MODULE_2__","isCollapsed","isExpanded","changeExpanded","toggleState","getIconCss","stateChangedCallback","TitleActions","getTitleToolbar","TitleContent","TitleElement","Composite","contentPanel","Custom","contentQuestion","customWidget","getTemplate","CustomWidget","hasVueComponent","components","updated","Dropdown","hasOther","SurveyElementVue","isDefaultRendering","getContentClass","cssContent","isPanel","questionErrorLocation","ElementHeader","clickTitleFunction","Empty","Errors","Expression","File","doRemoveFile","FlowPanel","isCollapsedValue","rootNodeValue","beforeMount","onCustomHtmlProducing","onGetHtmlForQuestion","renderQuestion","setRootNode","produceHtml","doc","DOMParser","parseFromString","afterRenderPanel","renderWidth","expand","collapse","FlowPanelElement","FlowPanelElement_1","getStyle","fontWeight","fontStyle","textDecoration","elementIdValue","idValue","panel","node","hasTextChildNodesOnly","getQuestionByName","getChildDomNodes","domNodes","SurveyHeader","doAfterRenderHeader","Html","QuestionImage","ImagePicker","getItemClass","Matrix","cellClick","column","isInputReadOnly","MatrixCell","cell","showErrorOnTop","showErrorOnBottom","getHeaders","headers","getCellStyle","isDisabled","isEnabled","allowHover","itemDisabled","itemChecked","itemHover","hasQuestion","onVisibilityChanged","cellQuestion","matrixAfterCellRender","MatrixDropdown","MatrixDynamic","addRowClick","addRowUI","MatrixTable","renderedTable","MultipleText","Navigation","showPrevBtn","showNextBtn","showCompleteBtn","onCreated","updateShowButtons","onCurrentPageChanged","isShowPrevButton","isShowNextButton","isLastPage","nextButtonMouseDown","mouseDownPage","currentPage","navigationMouseDown","buttonMouseDown","prevPage","nextPage","completeLastPage","showPreview","OtherChoice","Page","isCurrentPageChanged","onPagePropertyChanged","page","afterRenderPage","$nextTick","scrollToTopOnPageChange","_showDescription","Panel","cancelPreview","requiredText","PanelDynamic","isRenderModeList","panels","currentPanel","addPanelClick","addPanel","PanelDynamicProgress","isProgressTopShowing","progressTop","progressBottom","panelCount","addPanelUI","prevPanelClick","goToPrevPanel","nextPanelClick","goToNextPanel","changeRange","PanelDynamicProgressV2","_paneldynamicprogress_vue__WEBPACK_IMPORTED_MODULE_2__","PanelDynamicRemove","removePanelClick","removePanelUI","Progress","progressValue","getProgressTextInBarCss","getProgressTextUnderBarCss","ProgressButtons","hasScroller","updateScroller","progressButtonsModel","listContainerElement","isListElementClickable","getListElementCss","clickListElement","getScrollButtonCss","isLeftScroll","clickScrollButton","Radiogroup","RadiogroupItem","getLabelClass","getControlLabelClass","RankingItem","Ranking","Rating","getRootClass","classes","Row","rowContainerDiv","startLazyRendering","isLazyRendering","SurveyStringEditor","onInput","locString","onClick","editableRenderer","SurveyStringViewer","defaultRenderer","SurveyString","currentPageId","forceUpdate","$forceUpdate","surveyOnMounted","onPageVisibleChanged","doAfterRenderSurvey","renderCallback","startTimerFromUI","stopTimer","showTitle","showCompletedPage","getProcessedCompletedHtml","hasCompletedPage","processedCompletedHtmlValue","processedCompletedHtml","getCompletedStateClasses","saveData","completedState","doTrySaveAgain","doComplete","currentType","newType","applyTheme","QuestionText","isInputTextUpdate","inputStyle","TimerPanel","timerInfoText","Window","_surveyModel__WEBPACK_IMPORTED_MODULE_2__","surveyWindow","isexpanded","closeOnCompleteTimeout","isShowing","closeWindowOnCompleteCallback","doHide","getCss","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","getItemCss","directives","rawName","checkedValue","expression","control","attrs","ariaRequired","ariaLabel","ariaInvalid","ariaDescribedBy","domProps","isIndeterminate","_i","$event","$$a","$$el","$$c","$$v","$$i","$set","_v","materialDecorator","itemDecorator","viewBox","uncheckedPath","checkedPath","indeterminatePath","staticClass","titleLocation","locDisplayLabel","_e","_withStripped","getLabelCss","onLabelClick","locLabelFalse","switch","onSwitchClick","locLabelTrue","role","_l","caption","renderedHtml","isRequired","hasErrors","describeBy","_q","decorator","iconSize","showCaption","hasColumns","columns","colIndex","getColumnClass","selectAllItem","itemControl","getItemId","getItemEnabled","checkBoxSvgPath","hideLabel","controlLabel","isOtherItem","isReadOnlyRenderDiv","getControlClass","resize","autoGrow","maxlength","getMaxLength","cols","renderedPlaceHolder","keydown","onKeyDown","_s","getActionBarItemActiveCss","tooltip","action","getActionBarItemCss","popupModel","tabindex","disableTabStop","ref","renderedActions","getActionRootCss","needSeparator","tag","getItemIndent","selectItem","needFilter","filteredTextPlaceholder","mousedown","getDetailPanelButtonCss","getIsDetailPanelShowing","detailPanelId","showHideDetailPanelClick","getDetailPanelIconCss","iconDrag","getRemoveRowButtonCss","removeRowUI","locRemoveRowText","iconRemove","styleClass","clickOutside","showPointer","pointerTarget","contentComponentName","_b","contentComponentData","isModal","cancelButtonText","applyButtonText","showIcon","contentId","_k","isPage","toolbar","isTitleOwner","isRequireTextOnStart","no","number","staticStyle","isRequireTextBeforeTitle","isRequireTextAfterTitle","hasTitle","titleTagName","cssTitle","ariaTitleId","titleTabIndex","titleAriaExpanded","hasTitleActions","customHtml","hasDefaultRender","otherText","displayValue","selectWrapper","autocomplete","autoComplete","required","$$selectedVal","selected","_value","multiple","getRootCss","hasTitleOnLeftTop","hasErrorsOnTop","hasComment","formGroup","commentText","commentClass","hasErrorsOnBottom","hasDescriptionUnderInput","descriptionUnderInput","locDescription","hasTitleOnBottom","cssHeader","hasDescriptionUnderTitle","description","hasVisibleErrors","cssError","errors","fileInput","allowMultiple","inputTitle","accept","acceptedTypes","doChange","getReadOnlyFileCss","getFileDecoratorCss","onDrop","dragover","onDragOver","dragleave","onDragLeave","dragAreaPlaceholder","wrapper","getChooseFileCss","for","chooseButtonCaption","noFileChosen","noFileChosenCaption","removeButton","doClean","cleanButtonCaption","fileList","previewValue","preview","fileSign","content","imageWidth","doDownloadFile","canPreviewImage","imageHeight","alt","defaultImage","removeFileButton","removeFile","removeFileCaption","removeFileSvg","fileSignBottom","removeButtonBottom","iconCss","innerPaddingLeft","rootNode","elNode","elementId","flexBasis","flexGrow","flexShrink","renderedHasHeader","isLogoBefore","logoClassNames","logoImage","objectFit","logoFit","locLogo","logoWidth","logoHeight","renderedHasTitle","headerText","titleMaxWidth","isLogoAfter","locHtml","contentMode","imageFit","imageLink","multiSelect","showLabel","itemText","tableWrapper","showHeader","hasRows","visibleColumns","columnIndex","headerCell","visibleRows","rowIndex","rowClasses","hasCellText","getCellDisplayLocText","itemValue","colspan","colSpans","isActionsCell","handleClick","hasPanel","isChoice","isCheckbox","horizontalScroll","showAddRowOnTop","getAddRowButtonCss","locAddRowText","iconAdd","showTable","emptyRowsSection","emptyRowsText","locEmptyRowsText","showAddRowOnBottom","table","headerRow","cells","cellIndex","showFooter","footerRow","getRows","rowindex","getItemTitleCss","cssNavigationPrev","pagePrevText","cssNavigationNext","pageNextText","isPreviewButtonVisible","cssNavigationPreview","previewText","isCompleteButtonVisible","cssNavigationComplete","completeText","autoGrowComment","getOthersMaxLength","onCommentChange","onCommentInput","showDescription","getRowCss","getFooterToolbar","separatorV2","renderedPanels","getPanelWrapperCss","separator","isProgressBottomShowing","canAddPanel","getAddButtonCss","buttonAddText","panelAddText","progressContainer","panelPrevText","getPrevButtonCss","isRangeShowing","progress","progressBar","panelNextText","getNextButtonCss","progressText","footerButtonsContainer","progressButtonSvgPath","canRemovePanel","getPanelRemoveButtonCss","buttonRemoveText","panelRemoveText","progressButtonsContainerCenter","progressButtonsContainer","progressButtonsListContainer","progressButtonsList","visiblePages","progressButtonsPageTitle","locNavigationTitle","progressButtonsPageDescription","locNavigationDescription","canShowClearButton","clearButton","clearButtonCaption","otherItem","handleKeydown","pointerdown","handlePointerDown","currentTarget","outline","itemGhostNode","itemContent","itemIconContainer","getIconHoverCss","xmlns","getIconFocusCss","itemIndex","indexText","rankingChoices","getNumberByIndex","visibleRateValues","setValueFromClick","minText","locMinRateDescription","maxText","locMaxRateDescription","visibleElements","ariaRole","skeletonComponentName","needShowPlaceholder","placeHolderText","_m","controls","contenteditable","renderAsData","onsubmit","hasLogo","isNavigationButtonsShowingOnTop","cssNavigationStart","startSurveyText","startedPage","isNavigationButtonsShowingOnBottom","isShowProgressBarOnTop","progressBarType","isTimerPanelShowingOnTop","navId","pageId","isTimerPanelShowingOnBottom","isShowProgressBarOnBottom","completedCss","completedStateText","saveAgainButton","getLocString","processedCompletedBeforeHtml","processedLoadingHtml","bodyEmpty","emptySurveyText","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","returnValue","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__","Action","_base__WEBPACK_IMPORTED_MODULE_0__","_jsonobject__WEBPACK_IMPORTED_MODULE_1__","_utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_2__","innerItem","raiseUpdate","updateCallback","onSet","AdaptiveActionContainer","_utils_responsivity_manager__WEBPACK_IMPORTED_MODULE_0__","_list__WEBPACK_IMPORTED_MODULE_1__","_popup__WEBPACK_IMPORTED_MODULE_2__","_action__WEBPACK_IMPORTED_MODULE_3__","_container__WEBPACK_IMPORTED_MODULE_4__","minVisibleItemsCount","invisibleItemsListModel","invisibleItemSelected","dotsItemPopupModel","toggleVisibility","dotsItem","hideItemsGreaterN","visibleItemsCount","invisibleItems","visibleActions","setItems","getVisibleItemsCount","availableSize","itemsSizes","minDimension","currSize","updateItemMode","itemsSize","maxDimension","actions","onPush","getRenderedActions","fit","dimension","dotsItemSize","minSize","maxSize","responsivityManager","dispose","ActionContainer","_jsonobject__WEBPACK_IMPORTED_MODULE_0__","_base__WEBPACK_IMPORTED_MODULE_1__","_action__WEBPACK_IMPORTED_MODULE_2__","isResetInitialized","onRemove","containerCss","sortItems","visibleIndex","firstItem","secondItem","sortByVisibleIndex","Bindings","Dependencies","ComputedUpdater","Base","ArrayChanges","Event","EventBase","_localizablestring__WEBPACK_IMPORTED_MODULE_0__","_helpers__WEBPACK_IMPORTED_MODULE_1__","_jsonobject__WEBPACK_IMPORTED_MODULE_2__","_settings__WEBPACK_IMPORTED_MODULE_3__","__spreadArray","pack","ar","getNames","fillProperties","getProperties","setBinding","propertyName","clearBinding","getValueNameByPropertyName","getPropertiesByValueName","getJson","setJson","objProperties","getPropertiesByObj","isBindable","currentDependency","dependencies","DependenciesCount","addDependency","dependency","registerFunctionOnPropertiesValueChanged","unRegisterFunctionOnPropertiesValueChanged","_updater","ComputedUpdaterType","setDependencies","clearDependencies","getDependencies","propertyHash","eventList","isLoadingFromJsonValue","loadingOwner","addEvent","onItemValuePropertyChanged","isCreating","bindingsValue","createProperties","onBaseCreating","finishCollectDependencies","deps","currentDependencis","startCollectDependencies","updater","collectDependency","commentPrefix","isValueEmpty","trimString","trimValue","IsPropertyEmpty","onPropertyValueChangedCallback","isDisposedValue","getSurvey","isLive","checkBindings","updateBindings","bindings","updateBindingValue","getIsLoadingFromJson","isLoadingFromJson","startLoadingFromJson","endLoadingFromJson","toJSON","toJsonObject","fromJSON","toObject","onSurveyLoad","clonedObj","createClass","getPropertyByName","isPropertyVisible","createProgressInfo","questionCount","answeredQuestionCount","requiredQuestionCount","requiredAnsweredQuestionCount","getProgressInfo","localeChanged","locStrsChanged","arraysInfo","isItemValues","getPropertyValue","itemValueLocStrChanged","localizableStrings","getLocalizableString","strChanged","getPropertyValueCore","isCustom","onGetValue","propertiesHash","getPropertyValueCoreHandler","geValueFromHash","setPropertyValueCore","setPropertyValueCoreHandler","isEditingSurveyElement","iteratePropertiesHash","setPropertyValue","isTwoValueEquals","arrayInfo","setArray","setPropertyValueDirectly","propertyValueChanged","clearPropertyValue","arrayChanges","itemValuePropertyChanged","fire","ownerPropertyName","onPropertyValueChanged","doPropertyValueChangedCallback","onPropChangeFunctions","isInternal","notifier","names","createCustomLocalizableObj","locStr","getLocale","createLocalizableString","owner","useMarkDown","hasDefaultValue","localizationName","onStrChanged","getLocalizableStringText","defaultStr","setLocalizableStringText","addUsedLocales","locales","AddLocStringToUsedLocales","searchText","founded","strs","getSearchableLocalizedStrings","setFindText","keys_1","getSearchableLocKeys","getSearchableItemValueKeys","locs","getLocales","createItemValues","createNewArray","locOwner","notifyArrayChanged","onArrayChanged","createNewArrayCore","createArrayCoreHandler","ensureArray","newArray","pop","deleteCount","getItemValueType","dest","deletedItems","createItemValue","caseInSensitive","copyObject","copyCssClasses","getValueInLowCase","itemsToAdd","callbacks","hasFunc","fireCallbackChanged","onCallbacksChanged","CalculatedValue","_helpers__WEBPACK_IMPORTED_MODULE_0__","_conditions__WEBPACK_IMPORTED_MODULE_2__","_jsonobject__WEBPACK_IMPORTED_MODULE_3__","expressionIsRunning","isCalculated","setOwner","rerunExpression","live","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","textProcessor","processedText","doEmptyResultCallback","useChangedItemsResults","sendRequest","useCachingForChoicesRestful","getIsRunning","serverResult","updateResultCallback","urlText","cacheText","noCacheText","pUrl","processTextEx","pPath","hasAllValuesOnLastRun","onProcessedUrlCallback","parseResponse","response","parsedResponse","xhr","XMLHttpRequest","setRequestHeader","loadingObjHash","beforeLoadRequest","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","isNumber","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","completedPage","navigation","complete","prev","next","edit","progressTextUnderBar","progressButtonsImageButtonLeft","progressButtonsImageButtonRight","progressButtonsImageButtonHidden","progressButtonsListElementPassed","progressButtonsListElementCurrent","progressButtonsListElementNonClickable","pageTitle","pageDescription","mainRoot","flowRoot","headerLeft","contentLeft","titleLeftRoot","titleExpandable","titleRequired","hasError","indent","titleOnError","iconExpanded","locationTop","locationBottom","itemIndeterminate","sliderText","disabledLabel","itemSelectAll","itemNone","itemInline","labelChecked","ranking","rootMobileMod","rootDragMod","itemIcon","itemIconHoverMod","itemIconFocusMod","itemGhostMod","itemDragMod","dropdown","cellText","cellTextSelected","cellLabel","matrixdropdown","rowAdditional","detailRow","detailRowText","detailCell","detailButton","detailButtonExpanded","detailIcon","detailIconExpanded","detailPanelCell","actionsCell","matrixdynamic","buttonAdd","buttonRemove","emptyRowsButton","dragDropGhostPositionTop","dragDropGhostPositionBottom","paneldynamic","buttonRemoveRight","buttonPrev","buttonNext","panelWrapper","panelWrapperInRow","multipletext","itemTitle","buttongroup","itemCaption","itemSelected","imagepicker","rating","placeholderInput","fileDecorator","signaturepad","saving","success","defaultBootstrapMaterialCss","modernCss","progressTextInBar","asCell","headerTop","headerBottom","answered","titleOnAnswer","small","rowError","cellTextDisabled","choiceCell","chooseFile","controlDisabled","surveyCss","defaultStandardCss","defaultV2Css","titleOnExpand","rowMultiple","fileDecoratorDrag","DefaultTitleModel","_utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_0__","DragDropChoices","_core__WEBPACK_IMPORTED_MODULE_0__","getShortcutText","draggedElement","createDraggedElementShortcut","draggedElementNode","draggedElementShortcut","isDeepClone","controlsNode","isDragDropMoveDown","isDragDropMoveUp","isBottom","findDropTargetNodeByDragOverNode","dragOverNode","dropTargetDataAttributeName","getDropTargetByDataAttributeValue","dataAttributeValue","dragOverChoice","getVisibleChoices","isDropTargetValid","dropTarget","dropTargetIndex","draggedElementIndex","calculateIsBottom","afterDragOver","dropTargetNode","isDropTargetDoesntChanged","ghostPositionChanged","doDrop","filteredChoices","doClear","updateVisibleChoices","updateRankingChoices","DragDropCore","_utils_utils__WEBPACK_IMPORTED_MODULE_2__","surveyValue","creator","onGhostPositionChanged","onBeforeDrop","onAfterDrop","prevDropTarget","scrollIntervalId","allowDropHere","moveShortcutElement","findDropTargetNodeFromPoint","getDropTargetByNode","doDragOver","banDropHere","newElement","handlePointerCancel","handleEscapeButton","doBanDropHere","draggedElementType","startDrag","doStartDrag","shortcutText","newIsBottom","getGhostPosition","doScroll","shortcutXOffset","shortcutYOffset","shortcutHeight","shortcutWidth","draggedIcon","rectOuter","rectInner","documentClientHeight","documentClientWidth","pageX","pageY","startScrollBoundary","hidden","scrollableParentNode","repeat","getDataAttributeValueByNode","datasetName","words","word","capitalizeFirstLetter","calculateMiddleOfHTMLElement","HTMLElement","DragDropMatrixRows","fromIndex","toIndex","moveRowByIndex","renderedRow","ghostPosition","questionValue1","questionValue0","dropTargetRow","DragDropRankingChoices","_choices__WEBPACK_IMPORTED_MODULE_0__","dropTargetNodeMove","updateDraggedElementShortcut","newIndexText","indexNode","currentDropTarget","DragDropSurveyElements","_survey_element__WEBPACK_IMPORTED_MODULE_0__","_core__WEBPACK_IMPORTED_MODULE_2__","prevIsEdge","ghostSurveyElement","removeGhostElementFromSurvey","insertRealElementIntoSurvey","startDragToolboxItem","draggedElementJson","createElementFromJson","createNewElement","calculateIsEdge","nearestDropTargetElement","ghostSurveyElementName","newGhostPage","getPageByName","elements","pages","getElementByName","panelDragInfo","getPanelDragInfo","template","nearestDropTargetPageElement","svDropTargetPage","page_1","__page","restrictDragQuestionBetweenPages","shouldRestricDragQuestionBetweenPages","middle","oldPage","newPage","questions","findDeepestDropTargetChild","edgeHeight","calculateIsRight","pageOrPanel","srcIndex","destIndex","insertGhostElementIntoSurvey","createGhostSurveyElement","isTargetRowMultiple","calcTargetRowMultiple","isDragOverInsideEmptyPanel","dragTypeOverMe","InsideEmptyPanel","dragDropStart","nestedPanelDepth","dragDropMoveTo","MultilineRight","MultilineLeft","targetRow","targetParent","templateValue","isEmptyPanel","isDragOverInside","dragDropFinish","fakeTargetElement","createFakeTargetElement","elementName","targetElement","isMultipleRowDrag","startWithNewLine","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__","_survey_error__WEBPACK_IMPORTED_MODULE_6__","_survey_element__WEBPACK_IMPORTED_MODULE_7__","_calculatedValue__WEBPACK_IMPORTED_MODULE_8__","_error__WEBPACK_IMPORTED_MODULE_9__","_localizablestring__WEBPACK_IMPORTED_MODULE_10__","_expressionItems__WEBPACK_IMPORTED_MODULE_11__","_choicesRestful__WEBPACK_IMPORTED_MODULE_12__","_functionsfactory__WEBPACK_IMPORTED_MODULE_13__","_conditions__WEBPACK_IMPORTED_MODULE_14__","_expressions_expressions__WEBPACK_IMPORTED_MODULE_15__","_conditionsParser__WEBPACK_IMPORTED_MODULE_16__","_conditionProcessValue__WEBPACK_IMPORTED_MODULE_17__","_jsonobject__WEBPACK_IMPORTED_MODULE_18__","_question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_19__","_question_matrixdropdowncolumn__WEBPACK_IMPORTED_MODULE_20__","_question_matrixdropdownrendered__WEBPACK_IMPORTED_MODULE_21__","_question_matrixdropdown__WEBPACK_IMPORTED_MODULE_22__","_question_matrixdynamic__WEBPACK_IMPORTED_MODULE_23__","_question_matrix__WEBPACK_IMPORTED_MODULE_24__","_question_multipletext__WEBPACK_IMPORTED_MODULE_25__","_panel__WEBPACK_IMPORTED_MODULE_26__","_flowpanel__WEBPACK_IMPORTED_MODULE_27__","_page__WEBPACK_IMPORTED_MODULE_28__","_defaultTitle__WEBPACK_IMPORTED_MODULE_30__","_question__WEBPACK_IMPORTED_MODULE_31__","_questionnonvalue__WEBPACK_IMPORTED_MODULE_32__","_question_empty__WEBPACK_IMPORTED_MODULE_33__","_question_baseselect__WEBPACK_IMPORTED_MODULE_34__","_question_checkbox__WEBPACK_IMPORTED_MODULE_35__","_question_ranking__WEBPACK_IMPORTED_MODULE_36__","_question_comment__WEBPACK_IMPORTED_MODULE_37__","_question_dropdown__WEBPACK_IMPORTED_MODULE_38__","_questionfactory__WEBPACK_IMPORTED_MODULE_39__","_question_file__WEBPACK_IMPORTED_MODULE_40__","_question_html__WEBPACK_IMPORTED_MODULE_41__","_question_radiogroup__WEBPACK_IMPORTED_MODULE_42__","_question_rating__WEBPACK_IMPORTED_MODULE_43__","_question_expression__WEBPACK_IMPORTED_MODULE_44__","_question_text__WEBPACK_IMPORTED_MODULE_45__","_question_boolean__WEBPACK_IMPORTED_MODULE_46__","_question_imagepicker__WEBPACK_IMPORTED_MODULE_47__","_question_image__WEBPACK_IMPORTED_MODULE_48__","_question_signaturepad__WEBPACK_IMPORTED_MODULE_49__","_question_paneldynamic__WEBPACK_IMPORTED_MODULE_50__","_surveytimer__WEBPACK_IMPORTED_MODULE_51__","_surveyProgress__WEBPACK_IMPORTED_MODULE_52__","_surveyProgressButtons__WEBPACK_IMPORTED_MODULE_53__","_survey__WEBPACK_IMPORTED_MODULE_54__","_trigger__WEBPACK_IMPORTED_MODULE_55__","_surveyWindow__WEBPACK_IMPORTED_MODULE_56__","_textPreProcessor__WEBPACK_IMPORTED_MODULE_57__","_dxSurveyService__WEBPACK_IMPORTED_MODULE_58__","_localization_english__WEBPACK_IMPORTED_MODULE_59__","_surveyStrings__WEBPACK_IMPORTED_MODULE_60__","_questionCustomWidgets__WEBPACK_IMPORTED_MODULE_61__","_question_custom__WEBPACK_IMPORTED_MODULE_62__","_stylesmanager__WEBPACK_IMPORTED_MODULE_63__","_list__WEBPACK_IMPORTED_MODULE_64__","_popup__WEBPACK_IMPORTED_MODULE_65__","_question_buttongroup__WEBPACK_IMPORTED_MODULE_66__","_utils_is_mobile__WEBPACK_IMPORTED_MODULE_67__","_utils_utils__WEBPACK_IMPORTED_MODULE_68__","_utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_69__","_defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_70__","_dragdrop_survey_elements__WEBPACK_IMPORTED_MODULE_71__","_dragdrop_choices__WEBPACK_IMPORTED_MODULE_72__","_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_defaultV2Css__WEBPACK_IMPORTED_MODULE_5__","_defaultCss_cssmodern__WEBPACK_IMPORTED_MODULE_6__","_rendererFactory__WEBPACK_IMPORTED_MODULE_7__","_utils_responsivity_manager__WEBPACK_IMPORTED_MODULE_8__","_utils_utils__WEBPACK_IMPORTED_MODULE_9__","_actions_action__WEBPACK_IMPORTED_MODULE_10__","_actions_adaptive_container__WEBPACK_IMPORTED_MODULE_11__","_actions_container__WEBPACK_IMPORTED_MODULE_12__","_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_paneldynamicprogressV2_vue__WEBPACK_IMPORTED_MODULE_40__","_vue_navigation_vue__WEBPACK_IMPORTED_MODULE_41__","_vue_progress_vue__WEBPACK_IMPORTED_MODULE_42__","_vue_progressButtons_vue__WEBPACK_IMPORTED_MODULE_43__","_vue_timerpanel_vue__WEBPACK_IMPORTED_MODULE_44__","_vue_panel_vue__WEBPACK_IMPORTED_MODULE_45__","_vue_flowpanel_vue__WEBPACK_IMPORTED_MODULE_46__","_vue_flowpanelelement_vue__WEBPACK_IMPORTED_MODULE_47__","_vue_row_vue__WEBPACK_IMPORTED_MODULE_48__","_vue_elementheader_vue__WEBPACK_IMPORTED_MODULE_49__","_vue_image_vue__WEBPACK_IMPORTED_MODULE_50__","_vue_signaturepad_vue__WEBPACK_IMPORTED_MODULE_51__","_vue_header_vue__WEBPACK_IMPORTED_MODULE_52__","_vue_custom_vue__WEBPACK_IMPORTED_MODULE_53__","_vue_composite_vue__WEBPACK_IMPORTED_MODULE_54__","_vue_components_title_title_element_vue__WEBPACK_IMPORTED_MODULE_55__","_vue_components_title_title_content_vue__WEBPACK_IMPORTED_MODULE_56__","_vue_components_title_title_actions_vue__WEBPACK_IMPORTED_MODULE_57__","_vue_components_title_default_title_vue__WEBPACK_IMPORTED_MODULE_58__","_vue_components_action_bar_action_bar_vue__WEBPACK_IMPORTED_MODULE_59__","_vue_components_svg_icon_svg_icon_vue__WEBPACK_IMPORTED_MODULE_60__","_vue_components_popup_popup_vue__WEBPACK_IMPORTED_MODULE_61__","_vue_components_list_list_vue__WEBPACK_IMPORTED_MODULE_62__","_vue_components_matrix_actions_remove_button_remove_button_vue__WEBPACK_IMPORTED_MODULE_63__","_vue_components_matrix_actions_detail_button_detail_button_vue__WEBPACK_IMPORTED_MODULE_64__","_vue_components_matrix_actions_drag_drop_icon_drag_drop_icon_vue__WEBPACK_IMPORTED_MODULE_65__","_vue_components_skeleton_vue__WEBPACK_IMPORTED_MODULE_66__","_vue_ui__WEBPACK_IMPORTED_MODULE_1__","AnswerRequiredError","OneAnswerRequiredError","RequreNumericError","ExceedSizeError","WebRequestError","WebRequestEmptyError","OtherEmptyError","UploadingFileError","RequiredInAllRowsError","MinRowCountError","KeyDuplicationError","CustomError","_surveyStrings__WEBPACK_IMPORTED_MODULE_0__","_survey_error__WEBPACK_IMPORTED_MODULE_1__","errorOwner","getErrorType","getDefaultText","getString","getText","getTextSize","fixed","minRowCount","ExpressionItem","HtmlConditionItem","UrlConditionItem","runCondition","getMarkdownHtml","getRenderer","getRendererContext","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__","isEqual","isContentEqual","areOperatorsEquals","op1","op2","operatorName","isArithmeticValue","consumer","binaryFunctions","throwInvalidOperatorError","isConjunction","bOp","operator","evaluateParam","safeToString","operatorToString","unaryFunctions","uOp","aOp","getCorrectValue","isBooleanValue","isQuote","isNumeric","cOp","variableName","useValueAsItIs","DisableConversionChar","vOp","variable","originalValue","parameters","isReadyValue","asyncProcessValue","createCopy","returnResult","asynResult","evaluateCore","isAsyncFunction","fOp","toOperandString","isSpaceString","countDecimals","plusMinus","digitsA","digitsB","opStr","signs","notempty","negate","arithmeticOp","and","or","plus","correctAfterPlusMinis","minus","mul","correctAfterMultiple","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","isDesignMode","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","getMonth","isContainerReadyCore","isContainerReady","getPanelByName","isDisplayMode","currentDate","setDate","getYear","currentYear","diffDays","date1","date2","diffTime","Helpers","isArrayContainsEqual","isArraysEqual","ignoreOrder","caseSensitive","trimStrings","xSorted","ySorted","comparator","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","locTextValue","onGetTextCallback","txt","onCreating","itemValueSeparator","createArray","setupArray","valIsEmpty","getTextOrHtmlByValue","textOrHtml","runConditionsForItems","filteredItems","runner","useItemExpression","runConditionsForItemsCore","runEnabledConditionsForItems","onItemCallBack","choiceValue","hasChanded","itemRunner","getConditionRunner","setIsVisible","setIsEnabled","locale","setLocText","pureText","calculatedText","newText","itemValueAlwaysSerializeAsObject","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","getLocStringValue","processComputedUpdater","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","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","getProperty","newProp","emptyClassPropertiesHash","findProperties","propertyNames","getAllPropertiesByName","getAllClasses","createCustomType","customTypeName","customTemplateName","getChildrenClasses","canBeCreated","fillChildrenClasses","getRequiredProperties","propertiesInfos","addCustomPropertyCore","propertyInfo","addPropertyToClass","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","_actions_container__WEBPACK_IMPORTED_MODULE_1__","_surveyStrings__WEBPACK_IMPORTED_MODULE_3__","onItemSelect","allowSelection","selectedItem","onFilteredTextChange","isItemDisabled","isItemSelected","level","INDENT","filteredTextInLow","textInLow","updateItemVisible","filterByText","MINELEMENTCOUNT","currentElement","focus","firstElementChild","refresh","LocalizableStrings","_surveyStrings__WEBPACK_IMPORTED_MODULE_1__","_settings__WEBPACK_IMPORTED_MODULE_2__","useMarkdown","htmlValues","defaultLocaleName","getIsMultiple","searchableText","calculatedTextValue","calcText","setLocaleText","defaultLocale","hasHtmlValue","getHtmlValue","getValuesKeys","getLocaleText","getLocaleTextWithDefault","onGetDefaultTextCallback","curLoc","hasOnStrChanged","deleteValuesEqualsToDefault","deleteValue","hasNonDefaultText","sharedData","serializeLocalizableStringAsObject","searchIndex","onSearchChanged","SerializeAsObject","useDefault","defLoc","onValueChanged","arabicSurveyStrings","editText","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","addRow","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","basqueSurveyStrings","minError","maxError","multipletext_itemname","signaturePlaceHolder","modalCancelButtonText","modalApplyButtonText","bulgarianStrings","catalanSurveyStrings","choices_firstItem","choices_secondItem","choices_thirdItem","croatianStrings","czechSurveyStrings","danishSurveyStrings","dutchSurveyStrings","englishStrings","fileDragAreaPlaceholder","estonianSurveyStrings","finnishSurveyStrings","frenchSurveyStrings","georgianSurveyStrings","otherRequiredEror","germanSurveyStrings","greekSurveyStrings","hebrewSurveyStrings","hindiStrings","noneItemTex","hungarianSurveyStrings","icelandicSurveyStrings","indonesianStrings","italianSurveyStrings","japaneseSurveyStrings","kazakhStrings","koreanStrings","latvianSurveyStrings","lithuaniaSurveyStrings","macedonianSurveyStrings","norwegianSurveyStrings","persianSurveyStrings","polishSurveyStrings","portugueseBrSurveyStrings","portugueseSurveyStrings","romanianSurveyStrings","russianSurveyStrings","serbianStrings","simplifiedChineseSurveyStrings","spanishSurveyStrings","swahiliStrings","swedishSurveyStrings","tajikSurveyStrings","thaiStrings","traditionalChineseSurveyStrings","turkishSurveyStrings","ukrainianSurveyStrings","vietnameseSurveyStrings","welshSurveyStrings","QuestionMatrixBaseModel","_itemvalue__WEBPACK_IMPORTED_MODULE_0__","_helpers__WEBPACK_IMPORTED_MODULE_4__","generatedTotalRow","filteredRows","filteredColumns","createColumnValues","newRows","processRowsOnSet","filterItems","getVisibleRows","runItemsCondition","areInvisibleElementsShowing","onRowsChanged","getDataFilteredValues","getDataFilteredProperties","onColumnsChanged","fireCallback","visibleRowsChangedCallback","shouldRunColumnExpression","hasRowsAsItems","oldVisibleRows","hasChanges","runConditionsForRows","hasColumnsChanged","runConditionsForColumns","isClearValueOnHidden","restoreNewVisibleRowsValues","clearGeneratedRows","showInvisibile","rowsVisibleIf","hasChanged","useColumnsExpression","columnsVisibleIf","newVal","isChanged","clearInvisibleValuesInRows","needResponsiveWidth","PageModel","hasShownValue","timeSpent","canShowTitle","showPageTitles","delete","removeSelfFromList","onFirstRendering","wasShown","canRenderFirstRows","isPageStarted","calcCssClasses","updatePageCssClasses","onNumChanged","setWasShown","els","randomizeElements","areQuestionsRandomized","questionsOrder","scrollToTop","scrollElementToTop","getPanels","visibleOnly","includingDesignTime","addPanelsIntoList","onVisibleChanged","isRandomizing","pageVisibilityChanged","dragDropInfo","correctDragDropInfo","dragDropCanDropTagert","dragDropCanDropSource","dragDropAllowFromSurvey","dragDropFindRow","updateRowsRemoveElementFromRow","dragDropAddTarget","isLayoutTypeSupported","insertAfter","dragAndDropAllow","isCancel","dragDropGetElementIndex","elementsToSetSWNL","elementsToResetSWNL","isSamePanel","supportCreatorV2","srcRow","removeElement","addElement","prevRow","prevElement","dragDropCanDropCore","dragDropCanDropNotNext","dragDropIsSameElement","pnl","containsElement","el1","el2","ensureRowsVisibility","DragDropInfo","QuestionRowModel","PanelModelBase","PanelModel","_survey_element__WEBPACK_IMPORTED_MODULE_3__","_question__WEBPACK_IMPORTED_MODULE_4__","_conditions__WEBPACK_IMPORTED_MODULE_5__","_questionfactory__WEBPACK_IMPORTED_MODULE_6__","_error__WEBPACK_IMPORTED_MODULE_7__","_settings__WEBPACK_IMPORTED_MODULE_8__","_utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__","_scrollableParent","_updateVisibility","getRowId","rowCounter","findScrollableContainer","isRowContainerDivVisible","stopLazyRendering","ensureVisibility","setIsLazyRendering","isLazyRenderingValue","updateVisible","calcVisible","setWidth","q","visCount","preSetWidthElements","setElementMaxMinWidth","getElementWidth","getRenderedWidthFromWidth","rightIndent","getRenderedCalcWidth","calcWidthEl","visElements","needToUpdateVisibleElements","isQuestionsReady","questionsValue","elementsValue","getPanelId","updateElementCss","updateVisibleIndexes","panelCounter","setSurveyImpl","isLight","markQuestionListDirty","allowShowEmptyTitleInDesignMode","allowShowEmptyDescriptionInDesignMode","questionTitlePattern","titlePattern","canRandomize","isRandom","oldElements","newElements","depth","updatePanelCssClasses","getPanel","getLayoutType","layoutType","qs","getValidName","getQuestionByValueName","getValueName","getComment","getDisplayValue","keysAsText","getComments","comments","clearErrors","getElementsInDesign","includeHidden","focusOnFirstError","rec","focuseOnFirstError","firstErrorQuestion","hasErrorsCore","hasErrorsInPanels","hasRequiredError","customError","validatePanel","beforeSettingPanelErrors","getErrorCustomText","visQuestions","addQuestionsToList","requiredErrorText","updateContainsErrors","getContainsErrors","containsErrors","updateElementVisibility","getFirstQuestionToFocus","withError","hasInput","currentErrorCount","focusFirstQuestion","focusFirstErrorQuestion","addElementsToList","addElementsToListCore","updateCustomWidgets","getQuestionTitleLocation","onGetQuestionTitleLocation","questionTitleLocation","getStartIndex","getQuestionStartIndex","questionStartIndex","getProgressInfoByElements","childVisibilityChanged","newIsVisibleValue","getIsPageVisible","oldIsVisibleValue","createRowAndSetLazy","createRow","isLazyRenderInRow","onElementVisibilityChanged","buildRows","surveyImpl","updateRowsOnElementAdded","panelAdded","questionAdded","addElementCallback","onElementStartWithNewLineChanged","updateRowsOnElementRemoved","panelRemoved","questionRemoved","removeElementCallback","updateRowsVisibility","canBuildRows","isNewRow","lazyRowsRenderingStartRow","dragDropAddTargetToRow","findRowByElement","elIndex","elementWidthChanged","getRenderedTitle","processText","isClearValueOnHiddenContainer","updateValueWithDefaults","exceptionQuestion","setVisibleIndex","resetVisibleIndexes","lastVisibleIndex","beforeSetVisibleIndex","panelStartIndex","getPanelStartIndex","panelIndex","isContinueNumbering","isParentReadOnly","isSurveyReadOnly","onReadOnlyChanged","reNew","canAddElement","insertElementAfter","insertElementBefore","addQuestion","addNewQuestion","createQuestion","addNewPanel","createNewPanel","removeQuestion","runVisibleCondition","runEnableCondition","runRequiredCondition","conditionRunner","requiredIf","onAnyValueChanged","findElement","dragDropAddTargetToEmptyPanel","destRow","dragDropAddTargetToExistingRow","dragDropAddTargetToNewRow","dragDropAddTargetToEmptyPanelCore","prevRowIndex","focusIn","whenPanelFocusIn","onIndentChanged","onSetData","getPage","setPage","moveToBase","getTitleOwner","notifySurveyOnVisibilityChanged","setNo","showNumber","showQuestionNumbers","panelVisibilityChanged","getIndentSize","innerIndent","clearOnDeletingContainer","footerToolbarValue","footerActions","hasEditButton","cssNavigationEdit","allowAdaptiveActions","cancelPreviewByPage","getCssError","builder","registerElement","PopupModel","createPopupModalViewModel","PopupBaseViewModel","_surveyStrings__WEBPACK_IMPORTED_MODULE_2__","_utils_popup__WEBPACK_IMPORTED_MODULE_3__","_utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_4__","verticalPosition","horizontalPosition","onHide","onShow","innerModel","FOCUS_INPUT_SELECTOR","scrollEventCallBack","hidePopup","_model","updateOnHiding","popupDirection","trapFocus","focusableElements","firstFocusableElement","lastFocusableElement","activeElement","prevActiveElement","updatePosition","focusFirstInput","background","scrollContent","updateVerticalPosition","calculatePopupDirection","calculatePosition","newVerticalDimensions","updateVerticalDimensions","calculatePointerTarget","createPopupContainer","mountPopupContainer","Question","_survey_element__WEBPACK_IMPORTED_MODULE_2__","_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__","_utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_11__","_utils_utils__WEBPACK_IMPORTED_MODULE_12__","onReadyChanged","parentQuestionValue","whenQuestionFocusIn","isRunningValidatorsValue","isValueChangedInSurvey","allowNotifyValueChanged","getQuestionId","validator","locCommentText","updateQuestionCss","cssClassesValue","initCommentFromSurvey","questionCounter","readOnlyCommentRenderMode","createLocTitleProperty","locTitleValue","getUpdatedQuestionTitle","locProcessedTitle","onGetSurvey","oldValueName","onValueNameChanged","questionRenamed","initDataFromSurvey","onNameChanged","choicesLoaded","notifySurveyVisibilityChanged","getUseDisplayValuesInTitle","useDisplayValuesInTitle","runConditions","areEmptyElementsHidden","questionCreated","onParentChanged","setParentQuestion","onParentQuestionChanged","getTitleLocation","isVisibilityChanged","questionVisibilityChanged","isFlowLayout","getTitleLocationCore","isAllowTitleLeft","getDefaultTitleValue","getDefaultTitleTagName","titleTags","getDescriptionLocation","descriptionLocation","questionDescriptionLocation","getAllErrors","getErrorByType","errorType","isCustomWidgetRequested","customWidgetValue","updateCustomWidget","getCustomWidget","updateCommentElement","commentElement","afterRenderQuestionElement","hasSingleInput","afterRenderQuestionInput","afterRenderQuestion","afterRenderQuestionCallback","supportComment","supportOther","getElementById","beforeDestroyQuestionElement","updateCssClasses","updateQuestionCssClasses","ensureElementCss","setCssRoot","getCssRoot","hasTitleOnLeft","isAnswered","setCssHeader","getCssHeader","hasTitleOnTop","setCssContent","getCssContent","setCssTitle","getCssTitle","setCssError","errorLocation","updateElementCssCore","objCss","getCssType","titleBuilder","rootBuilder","getFirstErrorInputElementId","getFirstInputElementId","FocusElement","focusCallback","maxOthersLength","getProcessedTextValue","textValue","isExists","TextPreprocessorValuesMap","hasOtherChanged","isDesignModeV2","runVisibleIfCondition","runEnableIfCondition","runRequiredIfCondition","conditionEnabelRunner","conditionRequiredRunner","calcNo","hideNumber","getUpdatedQuestionNo","surveyLoadCallback","onSurveyValueChanged","updateIsAnswered","updateValueFromSurvey","requireUpdateCommentValue","updateCommentFromSurvey","commentChangedCallback","setNewValue","valueToDataCallback","unbindValue","isValueSurveyElement","canClearValueAsInvisible","isParentVisible","isStarted","hasVisibleQuestionByValueName","clearValueIfInvisible","calcDisplayValue","displayValueCallback","getDisplayValueEmpty","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","trimmedValue","setQuestionComment","questionComment","setNewComment","getIsAnswered","getValidators","validators","getSupportedValidators","classValidators","supportedValidators","addSupportedValidators","addConditionObjectsByContext","objects","processedTitle","getConditionJson","oldHasErrors","checkForErrors","isOnValueChanged","beforeSettingQuestionErrors","addError","newError","removeError","qErrors","canCollectErrors","collectErrors","onCheckForErrors","canRunValidators","runValidators","fireSurveyValidation","validateValueCallback","validateQuestion","getIsRunningValidators","validatorRunner","onAsyncCompleted","doOnAsyncCompleted","raiseOnCompletedAsyncValidators","onCompletedAsyncValidators","isRunningValidators","oldAnswered","setNewValueInData","isTextValue","isUpdateValueTextOnTyping","getDataLocNotification","isSurveyInputTextUpdate","valueToData","setValueCore","setQuestionValue","canSetValueToSurvey","valueForSurvey","valueFromData","setComment","valueFromDataCallback","setQuestionVisibleIndexForHiddenTitle","setQuestionVisibleIndexForHiddenNumber","supportGoNextPageAutomatic","supportGoNextPageError","clearUnusedValues","getRendererByQuestion","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","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","checkEmptyValue","hasNone","noneItem","isValueDisabled","addIntoDependedQuestion","calcValue","calcVisibleChoices","canUseFilteredChoices","sortVisibleChoices","addToVisibleChoices","isAddDefaultItems","setCanShowOptionItemCallback","canShowOptionItemCallback","isAddAll","newItemValue","canShowOptionItem","supportNone","isItemInList","isContentElement","dataValue","choiceDataItem","getChoicesDisplayValue","isOther","getChoicesFromQuestion","isSelected","choicesFromQuestionMode","isBuiltInChoice","itemsSelected","isSupportProperty","otherErrorText","runChoicesByUrl","setSurveyCore","storeOthersAsComment","newComment","getCommentFromValue","setOtherValueIntoValue","processor","getTextProcessor","isChoicesLoaded","disableOnGettingChoicesFromWeb","enableOnLoadingChoices","newChoices","checkCachedValuesOnExisting","cachedValues","createCachedValueForUrlRequests","updateCachedValueForUrlRequests","checkOnExisting","updatedValue","updateChoicesDependedQuestions","hideIfChoicesEmpty","sortArray","mult","questionCountByValueName","clearIncorrectValuesCallback","clearIncorrectValuesCore","clearValueOnDisableItems","clearDisabledValuesCore","canClearValueAnUnknow","getItemIndex","getItemClassCore","updateChoiceItemCss","isNone","controlLabelChecked","showItemsInOrder","prevIndex","leftElementsCount","oldIsReady","loadedChoicesFromServer","getItemValueWrapperComponentName","TemplateRendererComponentName","getItemValueWrapperComponentData","colCountChangedCallback","QuestionBooleanModel","_questionfactory__WEBPACK_IMPORTED_MODULE_0__","_utils_utils__WEBPACK_IMPORTED_MODULE_5__","getValueTrue","setCheckedValue","getValueFalse","locLabel","valueTrue","valueFalse","allowClick","onSwitchClickModel","isRightClick","offsetX","isRtl","registerQuestion","ButtonGroupItemValue","QuestionButtonGroupModel","ButtonGroupItemModel","_question_baseselect__WEBPACK_IMPORTED_MODULE_2__","_utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_3__","labelClass","onChange","QuestionCheckboxModel","_questionfactory__WEBPACK_IMPORTED_MODULE_1__","_helpers__WEBPACK_IMPORTED_MODULE_3__","_surveyStrings__WEBPACK_IMPORTED_MODULE_5__","_utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_6__","invisibleOldValues","isChangingValueOnClearIncorrect","allItemCount","selectedCount","toggleSelectAll","shouldCheckMaxSelectedChoices","isSelectAllItem","prevNoneIndex","noneIndexInArray","newNoneIndex","getFirstUnknownIndex","noneValue","supportSelectAll","valStr","clearIncorrectAndDisabledValues","clearDisabled","restoredValues","restoreValuesFromInvisible","isUnkown","visItems","setDefaultValueWithOthers","hasActiveChoices","DefaultChoices","QuestionCommentModel","_question_textbase__WEBPACK_IMPORTED_MODULE_2__","_utils_utils__WEBPACK_IMPORTED_MODULE_3__","updateElement","acceptCarriageReturn","ComponentQuestionJSON","ComponentCollection","QuestionCustomModelBase","QuestionCustomModel","QuestionCompositeModel","_question__WEBPACK_IMPORTED_MODULE_0__","_textPreProcessor__WEBPACK_IMPORTED_MODULE_4__","onInit","onLoaded","onAfterRender","onAfterRenderContentElement","elementsJSON","createElements","customQuestionValues","getCustomQuestionByName","customQuestion","onAddingJson","isComposite","questionJSON","createCompositeModel","createCustomModel","onCreateComposite","onCreateCustom","CreateDisabledDesignElements","createWrapper","getElement","initElement","disableDesignActions","getSurveyData","locNotification","convertDataName","convertDataValue","getContentDisplayValueCore","questionWrapper","qType","QuestionCompositeTextProcessor","composite","settingNewValue","textProcessing","ItemVariableName","createPanel","setAfterRenderCallbacks","setIsContentElement","oldComposite","prefixName","prefixText","QuestionDropdownModel","_utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__","minMaxChoices","choicesMax","choicesMin","choicesStep","QuestionEmptyModel","QuestionExpressionModel","getCurrecyCodes","_questionfactory__WEBPACK_IMPORTED_MODULE_3__","_conditions__WEBPACK_IMPORTED_MODULE_4__","runIfReadOnly","runIfReadOnlyValue","getValueAsStr","getExpressionDisplayValue","displayStyle","toLocaleDateString","currency","useGrouping","maximumFractionDigits","minimumFractionDigits","toLocaleString","QuestionFileModel","_questionfactory__WEBPACK_IMPORTED_MODULE_2__","_utils_utils__WEBPACK_IMPORTED_MODULE_6__","isUploading","isDragging","srcElement","needConfirmRemoveFile","isConfirmed","confirmRemoveAllMessage","clearFiles","getConfirmRemoveMessage","confirmRemoveMessage","loadingFileTitle","chooseFileTitle","doneCallback","loadFiles","files","allFilesOk","stateChanged","loadFilesProc","storeDataAsText","uploadFiles","fileItem","allowImagesPreview","isFileImage","newValues","downloadFile","waitForUpload","currentState","errorLength","imagePrefix","subStr","allowCount","QuestionHtmlModel","_questionnonvalue__WEBPACK_IMPORTED_MODULE_0__","ignoreHtmlProgressing","processHtml","QuestionImageModel","ImageItemValue","QuestionImagePickerModel","convertValToArrayForMultSelect","MatrixRowModel","MatrixCells","QuestionMatrixModel","_martixBase__WEBPACK_IMPORTED_MODULE_2__","_error__WEBPACK_IMPORTED_MODULE_6__","_questionfactory__WEBPACK_IMPORTED_MODULE_7__","_localizablestring__WEBPACK_IMPORTED_MODULE_8__","_question_dropdown__WEBPACK_IMPORTED_MODULE_9__","_settings__WEBPACK_IMPORTED_MODULE_10__","onMatrixRowChanged","getCorrectedRowValue","cellsOwner","setCellText","getCellRowColumnValue","createString","setDefaultCellText","matrixDefaultRowName","getCellLocText","getDefaultCellLocText","getCellText","getDefaultCellText","getCellDisplayText","getColumns","resRow","rowValues","col","isRowChanging","emptyLocalizableString","cellsValue","updateVisibilityBasedOnRows","rowsOrder","createMatrixRow","sortVisibleRows","hasValuesInAllRows","hasErrorInRows","isAllRowRequired","onMatrixRowCreated","rowVal","newKey","rowName","rowDataItem","hideIfRowsEmpty","getColumnHeaderWrapperComponentName","SurveyModel","getElementWrapperComponentName","getColumnHeaderWrapperComponentData","getElementWrapperComponentData","getRowHeaderWrapperComponentName","getRowHeaderWrapperComponentData","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","MatrixDropdownCell","MatrixDropdownTotalCell","MatrixDropdownRowModelBase","MatrixDropdownTotalRowModel","QuestionMatrixDropdownModelBase","_martixBase__WEBPACK_IMPORTED_MODULE_1__","_itemvalue__WEBPACK_IMPORTED_MODULE_5__","_surveyStrings__WEBPACK_IMPORTED_MODULE_6__","_functionsfactory__WEBPACK_IMPORTED_MODULE_8__","_error__WEBPACK_IMPORTED_MODULE_10__","_question_matrixdropdowncolumn__WEBPACK_IMPORTED_MODULE_12__","_question_matrixdropdownrendered__WEBPACK_IMPORTED_MODULE_13__","validateCell","updateCellQuestion","getTotalExpression","totalFormat","totalCurrency","totalDisplayStyle","totalMaximumFractionDigits","totalMinimumFractionDigits","totalExpression","totalType","funName","MatrixDropdownRowTextProcessor","getValues","onCustomProcessText","IndexVariableName","RowValueVariableName","detailPanelValue","isCreatingDetailPanel","subscribeToChanges","textPreProcessor","RowVariableName","showHideDetailPanel","getId","idCounter","getCellValue","hasDetailPanel","detailPanel","setIsDetailPanelShowing","onDetailPanelShowingChanged","isDetailPanelShowing","hideDetailPanel","showDetailPanel","ensureDetailPanel","destroyPanel","createRowDetailPanel","getRowValue","getRowIndex","allValues","OwnerVariableName","getDataValueCore","valuesHash","newColumnValue","updateQuestionsValue","changedName","changedValue","changedQuestion","changingValue","onRowChanging","isValidateOnValueChanging","hasQuestonError","onRowChanged","colQuestion","getQuestionByColumnName","detailQuestion","isColQuestion","getCellByColumnName","checkIfValueInRowDuplicated","getQuestionByColumn","getCellByColumn","columnName","detailQuestions","getQuestionsByName","getSharedQuestionByName","qVal","matrixTotalValuePostFix","updateCellQuestionOnColumnChanged","updateCellOnColumnChanged","updateCellQuestionOnColumnItemValueChanged","updateCellOnColumnItemValueChanged","onQuestionReadOnlyChanged","parentIsReadOnly","panelHasError","hideErroredPanel","isSingleDetailPanel","createCell","cellValue","commentKey","val1","val2","editingObj","editingObjValue","onEditingObjPropertyChanged","updateOnSetValue","onTotalValueChanged","prevValue","lockResetRenderedTable","isDoingonAnyValueChanged","createNewDetailPanel","selectedElementInDesign","newColumns","updateColumnsAndRows","clearRowsAndResetRenderedTable","matrixDefaultCellType","colNames","colOwner","isUpdating","beginUpdate","endUpdate","updateColumnsIndexes","updateColumnsCellType","columnLayout","canRemoveRow","onStartRowAddingRemoving","onEndRowAdding","isRequireReset","onAddedRow","onEndRowRemoving","onRemovedRow","columnsChangedCallback","isUpdateLocked","renderedTableValue","onRenderedTableResetCallback","createRenderedTable","onRenderedTableCreatedCallback","onCellCreatedCallback","matrixCellCreated","defaultCellTypeChanged","setIndex","getRequiredText","onColumnPropertyChanged","updateHasFooter","isShowInMultipleColumns","onShowInMultipleColumnsChanged","onColumnItemValuePropertyChanged","onColumnCellTypeChanged","getAddRowLocation","getShowColumnsIfEmpty","updateShowTableAndAddRow","hasTotal","getCellType","cellType","getCustomCellType","matrixCellCreating","getColumnByName","createCellQuestion","prevTotalValue","totalValue","runCellsCondition","runTotalsCondition","getRowConditionValues","checkColumnsVisibility","isColumnVisibilityChanged","curVis","hasVisibleCell","hasVisCell","totalRow","getColumnName","getColumnWidth","columnMinWidth","updateValueOnRowsGeneration","createNewValue","rValue","getNewValueOnRowChanged","visibleTotalRow","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","onDetailPanelChangeVisibility","isPanelShowing","iconBuilder","buttonBuilder","onCreateDetailPanelCallback","getQuestionByValueNameFromArray","isSett","getCellTemplateData","getMatrixCellTemplateData","getCellWrapperComponentName","getCellWrapperComponentData","getColumnTypes","MatrixDropdownColumn","_question_expression__WEBPACK_IMPORTED_MODULE_2__","onUpdateSelectBaseCellQuestion","onCellQuestionUpdate","locOptionsCaption","columnColCount","colOwnerValue","indexValue","_isVisible","_hasVisibleCell","doShowInMultipleColumnsChanged","updateTemplateQuestion","templateQuestion","getClassNameProperty","calcCellQuestionType","templateQuestionValue","locRequiredErrorText","showInMultipleColumns","isSupportMultipleColumns","createNewQuestion","callOnCellQuestionUpdate","onUpdateJson","setQuestionProperties","qDefinition","getDefaultCellQuestionType","prevCellType","curCellType","removeProperties","doItemValuePropertyChanged","isEditableTemplateElement","QuestionMatrixDropdownRenderedCell","QuestionMatrixDropdownRenderedRow","QuestionMatrixDropdownRenderedTable","_actions_action__WEBPACK_IMPORTED_MODULE_4__","_actions_adaptive_container__WEBPACK_IMPORTED_MODULE_5__","_actions_container__WEBPACK_IMPORTED_MODULE_7__","isDragHandlerCell","classNameValue","showErrorOnCore","getShowErrorLocation","isFirstChoice","hideCaption","choiceIndex","calculateFinalClassName","matrixCssClasses","questionCss","isDetailRow","isAdditionalClasses","hasActionCellInRowsValues","build","hasFooter","isColumnLayoutHorizontal","hasRemoveRowsValue","hasRemoveRows","canRemoveRows","headerRowValue","footerRowValue","buildRowsActions","buildHeader","buildFooter","showAddRow","canAddRow","getRenderedDataRowCount","rowsActions","buildRowActions","addHorizontalRow","getRenderedRowIndex","removeCount","panelRowIndex","createDetailPanelRow","colHeaders","isShown","hasRowText","allowRowsDragAndDrop","createHeaderCell","hasActionCellInRows","createMutlipleColumnsHeader","createTextCell","createMutlipleColumnsFooter","createEditCell","buildHorizontalRows","buildVerticalRows","getRowActions","renderedRows","useAsHeader","createHorizontalRow","getRowDragCell","getRowActionsCell","rowActions","actionContainer","setDefaultRowActions","getUpdatedMatrixRowActions","addRowActionsCell","renderedCell","setHeaderCellWidth","createMutlipleEditCells","buttonCell","onCreateDetailPanelRenderedRowCallback","createMutlipleVerticalRows","createVerticalRow","createEndVerticalActionRow","getMultipleColumnChoices","lTitle","hCell","setRequriedToHeaderCell","rChoice","rChoiceIndex","visChoices","rCell","createEmptyCell","rRow","isFooter","setHeaderCell","createRemoveRowCell","isRemoveRow","MatrixDynamicRowModel","QuestionMatrixDynamicModel","_question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_2__","_dragdrop_matrix_rows__WEBPACK_IMPORTED_MODULE_7__","_utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_8__","_question_matrixdropdownrendered__WEBPACK_IMPORTED_MODULE_9__","initialRowCount","setRowCountValueFromData","movableRow","defaultAddRowText","dragDropMatrixRows","startDragMatrixRow","defaultRowValue","rowCount","rowCountValue","matrixMaximumRowCount","newRow","getValueForNewRow","onGetValueForNewRowCallBack","QuestionMatrixDynamicRenderedTable","maxRowCount","allowAddRows","allowRemoveRows","canRemoveRowsCallback","matrixAllowRemoveRow","oldRowCount","getQuestionToFocusOnAddingRow","matrixBeforeRowAdded","addRowCore","detailPanelShowOnAdding","prevRowCount","getDefaultRowValue","matrixRowAdded","isRowAdded","defaultValueFromLastRow","isRequireConfirmOnRowDelete","confirmDeleteText","matrixRowRemoving","removeRowCore","matrixRowRemoved","addRowLocation","hideColumnsIfEmpty","addColumnIntoaddConditionObjectsByContext","matrixMaxRowCountInCondition","hasErrorInMinRows","setRowCount","getRowValueByIndex","newRowCount","isEmptySection","MultipleTextItemModel","QuestionMultipleTextModel","_survey_element__WEBPACK_IMPORTED_MODULE_1__","_question_text__WEBPACK_IMPORTED_MODULE_3__","_jsonobject__WEBPACK_IMPORTED_MODULE_4__","_questionfactory__WEBPACK_IMPORTED_MODULE_5__","_helpers__WEBPACK_IMPORTED_MODULE_6__","_utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_7__","createEditor","questionTitleTemplateCallback","getItemDefaultValue","maxTextLength","locPlaceHolder","getMultipleTextValue","setMultipleTextValue","isMultipleItemValueChanging","updateItemsSize","addDefaultItems","DefaultMutlipleTextItems","addItem","editorsOnSurveyLoad","performForEveryEditor","updateInputSize","createTextItem","getItemByName","onItemValueChanged","itemName","getIsRequiredText","QuestionPanelDynamicItem","QuestionPanelDynamicTemplateSurveyImpl","QuestionPanelDynamicModel","_textPreProcessor__WEBPACK_IMPORTED_MODULE_3__","_jsonobject__WEBPACK_IMPORTED_MODULE_5__","QuestionPanelDynamicItemTextProcessor","panelItem","getSharedQuestionFromArray","ParentItemVariableName","parentQuestion","returnDisplayValue","panelValue","setPanelItemData","getPanelItemData","surveyValues","getRootData","loadingPanelCount","currentIndexValue","isAddingNewPanels","createAndSetupNewPanelObject","addOnPropertyChangedCallback","rebuildPanels","setPanelsState","setTemplatePanelSurveyImpl","setPanelsSurveyImpl","assignOnPropertyChangedToTemplate","isQuestion","onTemplateElementPropertyChanged","currentIndexChangedCallback","renderMode","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","isInteractiveDesignElement","getTemplateQuestionTitleLocation","templateTitleLocation","setPanelCountBasedOnValue","newPanelCount","panelUpdateValueFromSurvey","panelSurveyValueChanged","isSetPanelItemData","dynamicPanelItemValueChanged","panelDataItem","panelRemoveButtonLocation","isPrevButtonShowing","isNextButtonShowing","QuestionRadiogroupModel","showClearButton","QuestionRankingModel","sortablejs__WEBPACK_IMPORTED_MODULE_0__","_dragdrop_ranking_choices__WEBPACK_IMPORTED_MODULE_1__","_question_checkbox__WEBPACK_IMPORTED_MODULE_4__","_utils_is_mobile__WEBPACK_IMPORTED_MODULE_6__","domNode","sortableInst","addToValueByVisibleChoices","removeFromValueByVisibleChoices","fallbackToSortableJS","dragDropRankingChoices","handleArrowUp","handleArrowDown","focusItem","itemsNodes","setValueFromUI","textNodes","textNode","visibleChoice","syncNumbers","indexNodes","setGhostText","ghostNode","isItemCurrentDropTarget","valueItem","isValueItemToRemove","newRankingChoices","initSortable","onStart","QuestionRatingModel","rateValuesChangedCallback","locMinRateDescriptionValue","locMaxRateDescriptionValue","rateMax","rateStep","rateMin","rateValues","ratingMaximumRateValueCount","correctValue","fr","QuestionSignaturePadModel","_question__WEBPACK_IMPORTED_MODULE_3__","signature_pad__WEBPACK_IMPORTED_MODULE_4__","defaultWidth","defaultHeight","resizeCanvas","backingStoreRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","oldWidth","oldHeight","scale","updateValue","signaturePad","dataFormat","initSignaturePad","destroySignaturePad","buttonEl","isDrawingValue","propertyChangedHandler","QuestionTextModel","_localizablestring__WEBPACK_IMPORTED_MODULE_2__","_validator__WEBPACK_IMPORTED_MODULE_4__","_settings__WEBPACK_IMPORTED_MODULE_7__","_question_textbase__WEBPACK_IMPORTED_MODULE_8__","locDataListValue","setRenderedMinMax","calcRenderedPlaceHolder","minValueExpression","maxValueExpression","isTextInput","minMaxTypes","isValueLessMin","getMinMaxErrorText","minErrorText","getCalculatedMinMax","isValueGreaterMax","maxErrorText","isMinMaxType","errorText","minMax","isDateInputType","locDataList","correctValueType","hasPlaceHolder","readOnlyTextRenderMode","inputWidth","propertyEditor","QuestionTextBase","textUpdateMode","setRenderedPlaceHolder","QuestionFactory","ElementFactory","creatorHash","questionCreator","unregisterElement","elementType","getAllTypes","elementCreator","removeFromSerializer","QuestionNonValue","RendererFactory","renderersHash","unregisterRenderer","rendererAs","renderer","executeCompleteTriggerOnValueChanged","executeSkipTriggerOnValueChanged","confirmActionFunc","confirm","maximumConditionRunCountOnValueChanged","lazyRowsRendering","customIcons","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","SurveyElementCore","DragTypeOverMeEnum","SurveyElement","_rendererFactory__WEBPACK_IMPORTED_MODULE_1__","_actions_action__WEBPACK_IMPORTED_MODULE_3__","_actions_adaptive_container__WEBPACK_IMPORTED_MODULE_4__","getElementTitleTagName","selectedElementInDesignValue","updateVisibleErrors","childInfo","ScrollElementToTop","scrollIntoView","elemTop","GetFirstNonTextElement","removeSpaces","tEl","focusElementCore","updateTitleActions","updateExpandAction","getSkeletonComponentNameCore","getSkeletonComponentName","notifyStateChanged","elementContentVisibilityChanged","titleToolbarValue","getTitleActions","expandAction","isTitleActionRequested","titleActions","hasStateButton","getUpdatedElementTitleActions","getTitleComponentName","surveyImplValue","surveyDataValue","textProcessorValue","surveyChangedCallback","getSurveyMarkdownHtml","getRendererForString","getRendererContextForString","getProcessedHtml","SurveyError","_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__","_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__","_utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_16__","variablesHash","localeValue","completedStateValue","completedStateTextValue","isTimerStarted","onCompleting","onComplete","onShowingPreview","onNavigateToUrl","onStarted","onPartialSend","onCurrentPageChanging","onValueChanging","onVariableChanged","onPanelVisibleChanged","onQuestionCreated","onQuestionAdded","onQuestionRemoved","onPanelAdded","onPanelRemoved","onPageAdded","onValidateQuestion","onSettingQuestionErrors","onServerValidateQuestions","onValidatePanel","onErrorCustomText","onValidatedErrorsOnCurrentPage","onProcessHtml","onGetQuestionTitle","onGetTitleTagName","onGetQuestionNo","onProgressText","onTextMarkdown","onTextRenderAs","onUploadFiles","onDownloadFile","onClearFiles","onLoadChoicesFromServer","onLoadedSurveyFromService","onProcessTextValue","onUpdateQuestionCssClasses","onUpdatePanelCssClasses","onUpdatePageCssClasses","onUpdateChoiceItemCss","onAfterRenderSurvey","onAfterRenderHeader","onAfterRenderPage","onAfterRenderQuestion","onAfterRenderQuestionInput","onAfterRenderPanel","onFocusInQuestion","onFocusInPanel","onMatrixRowAdded","onMatrixBeforeRowAdded","onMatrixRowRemoving","onMatrixRowRemoved","onMatrixAllowRemoveRow","onMatrixCellCreating","onMatrixCellCreated","onMatrixAfterCellRender","onMatrixCellValueChanged","onMatrixCellValueChanging","onMatrixCellValidate","onDynamicPanelAdded","onDynamicPanelRemoved","onTimer","onTimerPanelInfoText","onDynamicPanelItemValueChanged","onIsAnswerCorrect","onDragDropAllow","onScrollingElementToTop","onGetQuestionTitleActions","onGetPanelTitleActions","onGetPageTitleActions","onGetMatrixRowActions","onElementContentVisibilityChanged","onGetExpressionDisplayValue","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","updateIsFirstLastPageState","onQuestionsOnPageModeChanged","mergeValues","getNavigationCss","main","btn","lazyRenderingValue","lazyRendering","updateLazyRenderingRowsOnRemovingElements","getNavigateToUrl","getExpressionItemOnRunCondition","navigateToUrlOnCondition","navigateToUrl","navigateTo","maakeRequiredErrorsInvisibgle","erType","removeNonExisingRootKeys","getCalculatedValueByName","includeIntoResult","currentLocale","getUsedLocales","defaultLoc","defIndex","currentPageValue","activePage","getBuiltInRendererForString","logoPosition","renderedHasLogo","logoClasses","setIsMobile","isLogoImageChoosen","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","isPageInVisibleList","pageCount","firstPageIsStarted","onContainsPageCallback","firstVisiblePage","getPageByObject","vPages","currentPageChanging","currentPageChanged","isStartedState","isFocusingQuestion","focusFirstQuestionAutomatic","isLoading","isCompletedBefore","isEditMode","onShowingPreviewChanged","setCompletedState","clearData","gotoFirstPage","passed","visiblePageCount","updateValuesWithDefaults","oldCurrentPage","newCurrentPage","allowChanging","isNextPage","isPrevPage","getProgress","visPages","navigationButtonsVisibility","showNavigationButtons","getIsNavigationButtonsShowingOn","buttonPosition","isNavigationButtonsShowing","isLast","canEdit","isShowPreviewBeforeComplete","setDesignMode","updateAllElementsVisibility","showInvisibleElements","cookieName","cookies","cookie","setCookie","deleteCookie","doCurrentPageComplete","hasErrorsOnNavigate","doCurrentPageCompleteCore","checkErrorsMode","hasCurrentPageErrors","checkForAsyncQuestionValidation","clearAsyncValidationQuesitons","q_1","onCompletedAsyncQuestionValidators","asyncValidationQuesitons","asynQuestions","i_1","checkIsCurrentPageHasErrors","onAsyncValidation","hasPageErrors","checkIsPageHasErrors","firstErrorPage","ensureUniqueNames","ensureUniqueName","ensureUniquePageName","ensureUniquePanelName","ensureUniqueQuestionName","ensureUniqueElementName","existingElement","getNewName","base","isFocuseOnFirstError","fireValidatedErrorsOnPage","questionsOnPage","isFirstPage","resetNavigationButton","doServerValidation","allowShowPreview","curPage","isValidatingOnServer","doNextPage","questionsOnPageMode","runningPages","setupPagesForPageModes","restoreOrigionalPages","currentPageNo","origionalPages","isSinglePage","originalPages","questionHashesClear","newPages","createPagesForQuestionOnPageMode","deletedLen","doElementsOnLoad","createSinglePage","createPagesForEveryQuestion","single","createNewPage","originalPage","originalElement","pageJson","questionHashesAdded","isFirst","showBtn","showPrevButton","isRun","getPageMaxTimeToFinish","lastVisiblePage","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","getUpdatedPageTitleActions","getUpdatedPanelTitleActions","getUpdatedQuestionTitleActions","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","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","calculateWidthMode","widthMode","isResponsive_1","getTimerInfoText","pageSpent","getDisplayTime","surveySpent","pageLimitSec","pageLimit","surveyLimit","maxTimeToFinish","showTimerPanelMode","getTimerInfoPageText","getTimerInfoSurveyText","pageText","surveyText","sec","startTimer","doTimer","instance","maxTimeToFinishPage","getObjects","setTriggerValue","isVariable","copyTriggerValue","fromName","focusQuestion","reason","getRowWrapperComponentName","getRowWrapperComponentData","SurveyProgressModel","SurveyProgressButtonsModel","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","prevItem","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_3__","_conditionProcessValue__WEBPACK_IMPORTED_MODULE_4__","usedNames","oldPropertiesChanged","onExpressionChanged","operatorsValue","expectedValue","exp","buildExpression","operators","isCheckRequired","perform","check","triggerResult","onSuccess","onFailure","isRequireValue","buildUsedNames","keyValue","ownerValue","onTrigger","onItemSuccess","onItemFailure","setToName","gotoName","onCompleteRunExpression","CssClassBuilder","condition","IsMobile","vendor","PopupUtils","windowHeight","newHeight","deltaTop","deltaBottom","targetPos","ResponsivityManager","VerticalResponsivityManager","itemsSelector","resizeObserver","isInitialized","minDimensionConst","separatorSize","ResizeObserver","observe","getDimensions","getAvailableSpace","space","calcItemSize","calcItemsSizes","currentAction","canShrink","getClientRects","isContainerVisible","unwrap","getSize","compareVersions","confirmAction","detectIEOrEdge","detectIEBrowser","loadFileFromBase64","isElementVisible","findScrollableParent","scrollElementByChildId","createSvg","doKey2ClickUp","doKey2ClickDown","getIconNameFromProxy","increaseHeightByContent","getOriginalEvent","preventDefaults","regExStrip0","segmentsA","segmentsB","diff","ua","oldIe","elevenIe","isIEOrEdge","msie","trident","edge","b64Data","byteString","mimeString","ab","ia","bb","elementRect","viewHeight","topWin","bottomWin","topEl","bottomEl","maxTop","minBottom","scrollableEl","proxyName","svgElem","realIconName","lastSymbol","processEsc","char","supportedCodes","elt","borderTopWidth","borderBottomWidth","ValidatorResult","SurveyValidator","ValidatorRunner","NumericValidator","TextValidator","AnswerCountValidator","RegexValidator","EmailValidator","ExpressionValidator","_error__WEBPACK_IMPORTED_MODULE_1__","_helpers__WEBPACK_IMPORTED_MODULE_5__","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","util","defineReactive","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","_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__","_action_vue_vue_type_template_id_2fe54632___WEBPACK_IMPORTED_MODULE_0__","_action_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_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_vue_vue_type_template_id_2fe54632___WEBPACK_IMPORTED_MODULE_0__","_list_item_vue_vue_type_template_id_4fffcdf8___WEBPACK_IMPORTED_MODULE_0__","_list_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_list_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_list_item_vue_vue_type_template_id_4fffcdf8___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__","_drag_drop_icon_vue_vue_type_template_id_4f55d298___WEBPACK_IMPORTED_MODULE_0__","_drag_drop_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_drag_drop_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_drag_drop_icon_vue_vue_type_template_id_4f55d298___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__","_skeleton_vue_vue_type_template_id_5bd480d4___WEBPACK_IMPORTED_MODULE_0__","_skeleton_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_skeleton_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_skeleton_vue_vue_type_template_id_5bd480d4___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__","_default_title_vue_vue_type_template_id_7aaa96c4___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_7aaa96c4___WEBPACK_IMPORTED_MODULE_0__","_title_actions_vue_vue_type_template_id_c938554c___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_c938554c___WEBPACK_IMPORTED_MODULE_0__","_title_content_vue_vue_type_template_id_24c0a2d6___WEBPACK_IMPORTED_MODULE_0__","_title_content_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_content_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_content_vue_vue_type_template_id_24c0a2d6___WEBPACK_IMPORTED_MODULE_0__","_title_element_vue_vue_type_template_id_641d93d9___WEBPACK_IMPORTED_MODULE_0__","_title_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_title_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_title_element_vue_vue_type_template_id_641d93d9___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__","_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__","_paneldynamicprogressV2_vue_vue_type_template_id_33ce4046___WEBPACK_IMPORTED_MODULE_0__","_paneldynamicprogressV2_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_paneldynamicprogressV2_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_paneldynamicprogressV2_vue_vue_type_template_id_33ce4046___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__","_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__","4528","8741","3976","_maxTestPos","optionalmarker","quantifiermarker","groupmarker","alternatormarker","escapeChar","oncomplete","onincomplete","oncleared","greedy","removeMaskOnSubmit","clearMaskOnLostFocus","insertMode","insertModeVisual","alias","onBeforeMask","onBeforePaste","onBeforeWrite","onUnMask","showMaskOnFocus","showMaskOnHover","onKeyValidation","skipOptionalPartCharacter","numericInput","rightAlign","undoOnEscape","_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","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","MAX_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","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","stat","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","_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","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","_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","uncurryThis","requireObjectCoercible","whitespaces","whitespace","ltrim","rtrim","createMethod","TYPE","$this","enumerableOnly","symbols","_objectSpread2","getOwnPropertyDescriptors","defineProperties","_unsupportedIterableToArray","_arrayLikeToArray","minLen","includeDragEl","_excluded","_ghostIsFirst","forceAutoScrollFallback","cssType","Traslation","ready","loading","survey_obj","survey_data","disabledGroup","checkSub","turul","textareaValue","inputValue","model1","selectMult","renderCorrectAnswer","prevTitle","getSurveyresultData","$apollo","query","s_id","user_id","surveyResultJsonParseData","survey_result","fails","$parseInt","ITERATOR","FORCED","radix","$IndexOf","arrayMethodIsStrict","un$IndexOf","NEGATIVE_ZERO","STRICT_METHOD","forced","searchElement","user","gotoLogin","$router","$Notice","$t","getSurveyById","VERSION","isValidFormatter","entry","isSet","unique","docElem","pageOffset","getPageOffset","clientTop","clientLeft","addClassFor","limit","asArray","numStr","pieces","supportPageOffset","pageXOffset","isCSS1Compat","compatMode","pageYOffset","getActions","pointerEnabled","move","msPointerEnabled","getSupportsPassive","supportsPassive","getSupportsTouchActionNone","CSS","supports","subRangeRatio","pa","pb","fromPercentage","startRange","isPercentage","getJ","toStepping","xVal","xPct","va","vb","fromStepping","getStep","xSteps","snap","handleEntryPoint","xHighestCompleteStep","handleStepPoint","totalSteps","xNumSteps","highestStep","Spectrum","singleStep","ordered","getDistance","distances","getAbsoluteDistance","start_factor","xPct_index","rest_factor","rest_rel_distance","range_pct","rel_range_distance","abs_distance_counter","range_counter","getDefaultStep","isDown","getNearbySteps","stepBefore","startValue","thisStep","stepAfter","countStepDecimals","stepDecimals","convert","defaultFormatter","origin","handleLower","handleUpper","touchArea","horizontal","connects","ltr","textDirectionLtr","textDirectionRtl","drag","tap","pipsHorizontal","pipsVertical","markerHorizontal","markerVertical","markerNormal","markerLarge","markerSub","valueHorizontal","valueVertical","valueNormal","valueLarge","valueSub","INTERNAL_EVENT_NS","aria","validateFormat","testStep","parsed","testKeyboardPageMultiplier","keyboardPageMultiplier","testKeyboardDefaultStep","keyboardDefaultStep","testRange","spectrum","testStart","handles","testSnap","testAnimate","testAnimationDuration","animationDuration","testConnect","testOrientation","ort","testMargin","margin","testLimit","testPadding","padding","totalPadding","firstValue","lastValue","testDirection","testBehaviour","hover","unconstrained","testTooltips","testAriaFormat","ariaFormat","testFormat","testKeyboardSupport","keyboardSupport","testDocumentElement","testCssPrefix","cssPrefix","testCssClasses","testOptions","behaviour","msPrefix","msTransform","noPrefix","transformRule","styles","scope","originalOptions","scope_Base","scope_Handles","scope_Connects","scope_Pips","scope_Tooltips","scope_Self","supportsTouchActionNone","scope_Target","scope_Spectrum","scope_Values","scope_Locations","scope_HandleNumbers","scope_ActiveHandlesCount","scope_Events","scope_Document","scope_DocumentElement","scope_Body","PIPS_NONE","PIPS_NO_VALUE","PIPS_LARGE_VALUE","PIPS_SMALL_VALUE","scope_DirOffset","addNodeTo","addTarget","addOrigin","handleNumber","eventKeydown","addConnect","addElements","connectOptions","connectBase","addSlider","textDirection","addTooltip","isSliderDisabled","hasAttribute","isHandleDisabled","handleOrigin","removeTooltips","removeEvent","bindEvent","unencoded","positions","checkHandlePosition","getGroup","stepped","interval","spread","generateSpread","safeIncrement","increment","indexes","firstInRange","lastInRange","ignoreFirst","ignoreLast","prevPct","current","newPct","pctDifference","pctPos","realSteps","stepSize","low","high","isSteps","addMarking","filterFunc","valueSizeClasses","markerSizeClasses","valueOrientationClasses","markerOrientationClasses","getClasses","orientationClasses","sizeClasses","addSpread","removePips","grid","baseSize","method","fixEvent","doNotReject","buttons","calcPoint","eventTarget","mouse","pointer","isTouchOnTarget","checkTouch","targetTouch","calcPointToPercentage","proposal","getClosestHandle","clickedPosition","smallestDifference","handlePosition","differenceWithThisHandle","clickAtEdge","isCloser","isCloserAfter","documentLeave","relatedTarget","eventEnd","eventMove","buttonsProperty","movement","startCalcPoint","moveHandles","locations","handleNumbers","setZindex","eventStart","moveEvent","endEvent","outEvent","eventTap","setHandle","eventHover","targetEvent","horizontalKeys","verticalKeys","largeStepKeys","edgeKeys","isLargeDown","isLargeUp","isUp","isMax","multiplier","getNextStepsForHandle","bindSliderEvents","handleBefore","handleAfter","eventHolders","eventHolder","namespacedEvent","isInternalNamespace","tEvent","tNamespace","lookBackward","lookForward","distance","inRuleOrder","upward","proposals","transformDirection","updateHandlePosition","translation","translateRule","updateConnect","exactInput","connectWidth","scaleRule","resolveToValue","valueSet","fireSetEvent","isInit","valueReset","valueSetHandle","valueGet","nearbySteps","decrement","getNextSteps","updateOptions","optionsToUpdate","updateAble","newOptions","setupSlider","__moveHandles","getTooltips","getOrigins","initialize","api","__spectrum"],"mappings":"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9H,EAASv8H,KAAKozF,YACbmpC,IACDA,EAAS,MACb,IAAI5zH,EAAU,CACVjC,MAAO1G,KAAKumK,aACZE,SAAUzmK,KAAKymK,SACfC,YAAa1mK,KAAK0mK,aAQtB,OANI1mK,KAAK2mK,uBAAyB,IAC9Bh+J,EAAQ,yBAA2B3I,KAAK2mK,uBAExC3mK,KAAK4mK,uBAAyB,IAC9Bj+J,EAAQ,yBAA2B3I,KAAK4mK,uBAErCjoK,EAAIkoK,eAAetqC,EAAQ5zH,GAEtC,OAAOhK,EAAI6B,YAERulK,EAhNiC,CAiN1CtxG,EAAuC,aAEzC,SAASuxG,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,MAC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C,cAAc/jF,SAAS,OAAQ,CACpE,CACI1G,KAAM,YACNoG,QAAS,OACTC,QAAS,CACL,QACA,OACA,WACA,iBACA,QACA,QACA,SACA,WACA,QACA,MACA,OACA,OACA,MACA,SAGR,CACIrG,KAAM,cACNglI,SAAU,EACV1+H,UAAW,YACXC,UAAW,SAAUC,GACjB,QAAKA,GAEEA,EAAIguL,cAGnB,CACIx0L,KAAM,iBACNoG,QAAS,UACTC,QAAS,CAAC,UAAW,SAAU,YAC/BC,UAAW,YACXC,UAAW,SAAUC,GACjB,QAAKA,GAEEA,EAAIguL,cAGnB,CACIx0L,KAAM,eACN2kF,SAAU,CACN,OACA,mBACA,aACA,kBACA,cACA,mBACA,WACA,qBACA,WACA,eACA,mBACA,eACA,iBACA,gBACA,gBACA,gBACA,iBACA,iBACA,iBACA,iBACA,UACA,eACA,cACA,UACA,gBACA,qBACA,iBACA,YACA,SACA,eACA,cACA,SACA,UACA,uBACA,qBACA,WACA,OACA,WACA,aACA,YACA,MACA,MACA,QACA,MACA,mBACA,eACA,gBACA,YACA,mBACA,mBACA,gBACA,QACA,SAGR,CACI3kF,KAAM,MACNsG,UAAW,YACXC,UAAW,SAAUC,GACjB,QAASA,GAAOA,EAAIwuL,cAExB/vD,uBAAwB,SAAUz+H,EAAKivL,GACnCA,EAAeh7K,UAAYjU,EAAIiU,YAGvC,CACIza,KAAM,MACNsG,UAAW,YACXC,UAAW,SAAUC,GACjB,QAASA,GAAOA,EAAIwuL,cAExB/vD,uBAAwB,SAAUz+H,EAAKivL,GACnCA,EAAeh7K,UAAYjU,EAAIiU,YAGvC,CACIza,KAAM,gCACN4F,SAAU,QACVU,UAAW,YACXC,UAAW,SAAUC,GACjB,QAASA,GAAOA,EAAIwuL,eAG5B,CACIh1L,KAAM,gCACN4F,SAAU,QACVU,UAAW,YACXC,UAAW,SAAUC,GACjB,QAASA,GAAOA,EAAIwuL,eAG5B,CACIh1L,KAAM,eACNkhH,sBAAuB,kBACvB56G,UAAW,YACXC,UAAW,SAAUC,GACjB,QAASA,GAAOA,EAAIwuL,eAG5B,CACIh1L,KAAM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","file":"js/form_survey.f3b4262a.js","sourcesContent":["(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 (\n question.value !== null &&\n question.value !== undefined &&\n !question.isOtherSelected\n ) {\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(\"change\", function (e) {\n setTimeout(function () {\n question.renderedValue = e.target.value;\n updateComment();\n }, 1);\n });\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 numericRadixPoint: \"\",\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.radixPoint = rootWidget.numericRadixPoint;\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).on(\"change\", function (e) {\n question.value = $(this).val();\n });\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.isEmpty()) {\n var val = question.value;\n if(typeof val === \"string\") {\n val = new Date(val);\n }\n pickerWidget.datepicker(\"setDate\", val);\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.placeholder = question.otherPlaceHolder;\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 const select2Val = e.params.data.id;\n if (isAllItemSelected(select2Val)) {\n question.clearValue();\n } else { \n const val = [].concat(question.value);\n if(Array.isArray(val)) {\n for(var i = 0; i < val.length; i ++) {\n if(val[i] == select2Val || (!!val[i] && val[i].toString() == select2Val)) {\n val.splice(i, 1);\n question.value = val;\n break;\n }\n }\n }\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 onChooseEvent: function () {\n var selectedData = $el.getSelectedItemData();\n if(!!selectedData && typeof selectedData === \"object\" \n && !!question.choicesByUrl && !!question.choicesByUrl.valueName) {\n selectedData = selectedData[question.choicesByUrl.valueName];\n }\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 const options = {\n enableOnReadonly: false,\n format: question.dateFormat,\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 if (!!question.startDate || !!question.renderedMin) {\n options.startDate = !!question.startDate\n ? question.startDate\n : question.renderedMin;\n }\n var renderedMax = question.renderedMax;\n if (!!renderedMax && new Date(renderedMax).getFullYear() >= 2999) {\n renderedMax = undefined;\n }\n if (!!question.endDate || !!renderedMax) {\n options.endDate = !!question.endDate ? question.endDate : renderedMax;\n }\n const pickerWidget = $el.bootstrapDP(options).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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCBlYzVkNTkzNWM5ZTllNzE1YTcyOSIsIndlYnBhY2s6Ly8vLi9zcmMvaWNoZWNrLmpzIiwid2VicGFjazovLy8uL3NyYy9zZWxlY3QyLmpzIiwid2VicGFjazovLy8uL3NyYy9pbnB1dG1hc2suanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcInJvb3RcIjpcIklucHV0bWFza1wiLFwiY29tbW9uanMyXCI6XCJpbnB1dG1hc2tcIixcImNvbW1vbmpzXCI6XCJpbnB1dG1hc2tcIixcImFtZFwiOlwiaW5wdXRtYXNrXCJ9Iiwid2VicGFjazovLy8uL3NyYy9qcXVlcnktYmFyLXJhdGluZy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvanF1ZXJ5LXVpLWRhdGVwaWNrZXIuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL25vdWlzbGlkZXIuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcInJvb3RcIjpcIm5vVWlTbGlkZXJcIixcImNvbW1vbmpzMlwiOlwibm91aXNsaWRlclwiLFwiY29tbW9uanNcIjpcIm5vdWlzbGlkZXJcIixcImFtZFwiOlwibm91aXNsaWRlclwifSIsIndlYnBhY2s6Ly8vLi9zcmMvc2VsZWN0Mi10YWdib3guanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3NvcnRhYmxlanMuanMiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHtcInJvb3RcIjpcIlNvcnRhYmxlXCIsXCJjb21tb25qczJcIjpcInNvcnRhYmxlanNcIixcImNvbW1vbmpzXCI6XCJzb3J0YWJsZWpzXCIsXCJhbWRcIjpcInNvcnRhYmxlanNcIn0iLCJ3ZWJwYWNrOi8vLy4vc3JjL2NrLWVkaXRvci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZWFzeS1hdXRvY29tcGxldGUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3ByZXR0eS1jaGVja2JveC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYm9vdHN0cmFwLXNsaWRlci5qcyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwge1wicm9vdFwiOlwiU2xpZGVyXCIsXCJjb21tb25qczJcIjpcImJvb3RzdHJhcC1zbGlkZXJcIixcImNvbW1vbmpzXCI6XCJib290c3RyYXAtc2xpZGVyXCIsXCJhbWRcIjpcImJvb3RzdHJhcC1zbGlkZXJcIn0iLCJ3ZWJwYWNrOi8vLy4vc3JjL21pY3JvcGhvbmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlY29yZHJ0Yy9SZWNvcmRSVEMuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwid2VicGFjazovLy8uL3NyYy9lbW90aW9uc3JhdGluZ3MuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3N1cnZleWpzLXdpZGdldHMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Jvb3RzdHJhcGRhdGVwaWNrZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87UUNWQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsS0FBSztRQUNMO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlDQUFpQyxlQUFlO1FBQ2hEO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLHNEQUFzRCwrREFBK0Q7O1FBRXJIO1FBQ0E7O1FBRUE7UUFDQTs7Ozs7Ozs7QUM3REE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRWUsbUVBQUksRUFBQzs7Ozs7Ozs7QUM1S3BCO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSx1QkFBdUIsbUJBQW1CO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVlLG1FQUFJLEVBQUM7Ozs7Ozs7O0FDdk1wQjtBQUFBO0FBQUE7QUFBa0M7O0FBRWxDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixpREFBUztBQUM3QixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsU0FBUywyQ0FBMkM7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQU0saURBQVM7O0FBRWY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLHVCQUF1QiwyQkFBMkI7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRWUsbUVBQUksRUFBQzs7Ozs7OztBQ2hNcEIsK0M7Ozs7Ozs7QUNBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsa0JBQWtCLDJCQUEyQjtBQUM3QztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG1DQUFtQztBQUM5QyxXQUFXLG9DQUFvQztBQUMvQyxXQUFXLHlDQUF5QztBQUNwRCxXQUFXLHlDQUF5QztBQUNwRCxXQUFXLCtDQUErQztBQUMxRCxXQUFXLG1DQUFtQztBQUM5QyxXQUFXLHdDQUF3QztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLEVBQUUsR0FBRyxFQUFFO0FBQ3BDO0FBQ0EsU0FBUztBQUNUO0FBQ0EsaUJBQWlCLEVBQUU7QUFDbkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVlLG1FQUFJLEVBQUM7Ozs7Ozs7O0FDdkpwQjtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsb0NBQW9DO0FBQy9DLFdBQVcsc0NBQXNDO0FBQ2pELFdBQVcsb0NBQW9DO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLHVCQUF1QjtBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUEsaURBQWlEO0FBQ2pEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVlLG1FQUFJLEVBQUM7Ozs7Ozs7O0FDeEtwQjtBQUFBO0FBQUE7QUFBb0M7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixrREFBVTtBQUM5QixLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGtEQUFVO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsYUFBYTtBQUNiLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRWUsbUVBQUksRUFBQzs7Ozs7OztBQ3BMcEIsK0M7Ozs7Ozs7QUNBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLDJEQUEyRDtBQUMzRDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyQ0FBMkM7QUFDdEQsV0FBVywrQ0FBK0M7QUFDMUQsV0FBVywwQ0FBMEM7QUFDckQsV0FBVyxvQ0FBb0M7QUFDL0MsV0FBVyx3Q0FBd0M7QUFDbkQsV0FBVyxtQ0FBbUM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLE87QUFDVDtBQUNBO0FBQ0EsMEJBQTBCLGdCQUFnQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRWUsbUVBQUksRUFBQzs7Ozs7Ozs7QUM1TXBCO0FBQUE7QUFBQTtBQUFrQzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGtEQUFRO0FBQzVCLEtBQUs7QUFDTCxrQkFBa0IsMENBQTBDO0FBQzVEO0FBQ0E7QUFDQSxpQ0FBaUMsWUFBWSxpQkFBaUIsaUJBQWlCO0FBQy9FLHlDQUF5QyxXQUFXLFdBQVcsYUFBYTtBQUM1RTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLG1DQUFtQztBQUM5QyxXQUFXLCtDQUErQztBQUMxRCxXQUFXLGtDQUFrQztBQUM3QyxXQUFXLG1DQUFtQztBQUM5QyxXQUFXLHdDQUF3QztBQUNuRCxXQUFXLHVDQUF1QztBQUNsRCxXQUFXLG1DQUFtQztBQUM5QyxXQUFXLHdDQUF3QztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixnQkFBZ0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsZ0JBQWdCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsbUNBQW1DLGtEQUFRO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLDJCQUEyQiw4QkFBOEI7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1AsbUNBQW1DLGtEQUFRO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVlLG1FQUFJLEVBQUM7Ozs7Ozs7QUNqTnBCLGdEOzs7Ozs7O0FDQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsNkNBQTZDLGFBQWE7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVlLG1FQUFJLEVBQUM7Ozs7Ozs7O0FDakdwQjtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNFQUFzRTtBQUN0RTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVlLG1FQUFJLEVBQUM7Ozs7Ozs7O0FDNUhwQjtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLDJDQUEyQztBQUM3RCxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLDJDQUEyQztBQUM3RCxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDJDQUEyQztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXO0FBQ1g7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFlBQVksc0RBQXNEO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVlLG1FQUFJLEVBQUM7Ozs7Ozs7O0FDMU1wQjtBQUFBLGFBQWEsbUJBQU8sQ0FBQyxFQUFrQjs7QUFFdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVlLG1FQUFJLEVBQUM7Ozs7Ozs7QUM1SnBCLGdEOzs7Ozs7O0FDQUE7QUFBQTtBQUFBO0FBQWtDOztBQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsaURBQVM7QUFDN0IsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLHdFQUF3RTtBQUN4RSxhQUFhLDhEQUE4RDtBQUMzRSxhQUFhO0FBQ2IsMkJBQTJCO0FBQzNCLHlCQUF5QjtBQUN6QixtQkFBbUI7QUFDbkIsZ0RBQWdEO0FBQ2hELG9EQUFvRDtBQUNwRCwyQ0FBMkM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0MsaURBQVM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVlLG1FQUFJLEVBQUM7Ozs7Ozs7O0FDdktwQix1TEFBYTs7QUFFYjs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLHVEQUF1RDtBQUMzRDtBQUNBLGFBQWE7QUFDYixZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsV0FBVyxZQUFZO0FBQ3ZCLFdBQVcsT0FBTyxXQUFXO0FBQzdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBEO0FBQzFEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhOztBQUViOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsOEVBQThFOztBQUU5RTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RCxrQ0FBa0M7QUFDekY7QUFDQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFD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YjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCLGlCQUFpQjtBQUNqQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZUFBZSxTQUFTO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsU0FBUztBQUM3QjtBQUNBO0FBQ0EsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFh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QTs7QUFFQTs7QUFFQTtBQUNBLHNCQUFzQixLQUFLO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIsdUNBQXVDO0FBQ3ZDLHdDQUF3QztBQUN4Qyw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0RkFBNEY7QUFDNUY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTOztBQUVUOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUI7QUFD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QUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNENBQTRDOztBQUU1Qzs7Ozs7OztBQ3BCQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHNCQUFzQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVlLDZEQUFJLEVBQUMiLCJmaWxlIjoic3VydmV5anMtd2lkZ2V0cy5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcImlucHV0bWFza1wiKSwgcmVxdWlyZShcIm5vdWlzbGlkZXJcIiksIHJlcXVpcmUoXCJzb3J0YWJsZWpzXCIpLCByZXF1aXJlKFwiYm9vdHN0cmFwLXNsaWRlclwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShcInN1cnZleWpzLXdpZGdldHNcIiwgW1wiaW5wdXRtYXNrXCIsIFwibm91aXNsaWRlclwiLCBcInNvcnRhYmxlanNcIiwgXCJib290c3RyYXAtc2xpZGVyXCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcInN1cnZleWpzLXdpZGdldHNcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJpbnB1dG1hc2tcIiksIHJlcXVpcmUoXCJub3Vpc2xpZGVyXCIpLCByZXF1aXJlKFwic29ydGFibGVqc1wiKSwgcmVxdWlyZShcImJvb3RzdHJhcC1zbGlkZXJcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcInN1cnZleWpzLXdpZGdldHNcIl0gPSBmYWN0b3J5KHJvb3RbXCJJbnB1dG1hc2tcIl0sIHJvb3RbXCJub1VpU2xpZGVyXCJdLCByb290W1wiU29ydGFibGVcIl0sIHJvb3RbXCJTbGlkZXJcIl0pO1xufSkodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHRoaXMsIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfM19fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzdfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8xMF9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzE1X18pIHtcbnJldHVybiBcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMjEpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIGVjNWQ1OTM1YzllOWU3MTVhNzI5IiwiZnVuY3Rpb24gZXNjVmFsdWUodmFsKSB7XG4gIGlmICh0eXBlb2YgdmFsID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuICh2YWwgfHwgXCJcIikucmVwbGFjZSgvKFsnXSkvZywgXCJcXFxcJDFcIik7XG4gIH1cbiAgcmV0dXJuIHZhbDtcbn1cblxuZnVuY3Rpb24gaW5pdChTdXJ2ZXksICQpIHtcbiAgJCA9ICQgfHwgd2luZG93LiQ7XG4gIHZhciB3aWRnZXQgPSB7XG4gICAgY2xhc3NOYW1lOiBcImlyYWRpb19zcXVhcmUtYmx1ZVwiLFxuICAgIGNoZWNrYm94Q2xhc3M6IFwiaXJhZGlvX3NxdWFyZS1ibHVlXCIsXG4gICAgcmFkaW9DbGFzczogXCJpcmFkaW9fc3F1YXJlLWJsdWVcIixcbiAgICBuYW1lOiBcImljaGVja1wiLFxuICAgIHdpZGdldElzTG9hZGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdHlwZW9mICQgPT0gXCJmdW5jdGlvblwiICYmICEhJC5mbi5pQ2hlY2s7XG4gICAgfSxcbiAgICBpc0ZpdDogZnVuY3Rpb24gKHF1ZXN0aW9uKSB7XG4gICAgICB2YXIgdCA9IHF1ZXN0aW9uLmdldFR5cGUoKTtcbiAgICAgIHJldHVybiB0ID09PSBcInJhZGlvZ3JvdXBcIiB8fCB0ID09PSBcImNoZWNrYm94XCIgfHwgdCA9PT0gXCJtYXRyaXhcIjtcbiAgICB9LFxuICAgIGlzRGVmYXVsdFJlbmRlcjogdHJ1ZSxcbiAgICBhZnRlclJlbmRlcjogZnVuY3Rpb24gKHF1ZXN0aW9uLCBlbCkge1xuICAgICAgdmFyIHJvb3RXaWRnZXQgPSB0aGlzO1xuICAgICAgdmFyICRlbCA9ICQoZWwpO1xuXG4gICAgICAkZWwuZmluZChcIi5zdi1pdGVtX19kZWNvcmF0b3JcIikuaGlkZSgpO1xuXG4gICAgICAkZWwuZmluZChcImlucHV0XCIpLmRhdGEoe1xuICAgICAgICBpQ2hlY2s6IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgICAgZnVuY3Rpb24gZ2V0SW5kZXhCeVZhbHVlKGFyciwgdmFsdWUpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHJldHVybiAtMTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJyW2ldID09IHZhbHVlKSByZXR1cm4gaTtcbiAgICAgICAgICBpZiAoISFhcnJbaV0gJiYgYXJyW2ldLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PSB2YWx1ZSkgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgdmFyIGZyb3plVXBkYXRpbmcgPSBmYWxzZTtcbiAgICAgIHZhciBtYWtlQ2hvaWNlc0lDaGVjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGlucHV0cyA9ICRlbC5maW5kKFwiaW5wdXRcIik7XG4gICAgICAgIGlucHV0cy5pQ2hlY2soe1xuICAgICAgICAgIGNoZWNrYm94Q2xhc3M6XG4gICAgICAgICAgICBxdWVzdGlvbi5jaGVja2JveENsYXNzIHx8XG4gICAgICAgICAgICByb290V2lkZ2V0LmNoZWNrYm94Q2xhc3MgfHxcbiAgICAgICAgICAgIHJvb3RXaWRnZXQuY2xhc3NOYW1lLFxuICAgICAgICAgIHJhZGlvQ2xhc3M6XG4gICAgICAgICAgICBxdWVzdGlvbi5yYWRpb0NsYXNzIHx8XG4gICAgICAgICAgICByb290V2lkZ2V0LnJhZGlvQ2xhc3MgfHxcbiAgICAgICAgICAgIHJvb3RXaWRnZXQuY2xhc3NOYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgaW5wdXRzLm9uKFwiaWZDaGVja2VkXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIGlmIChmcm96ZVVwZGF0aW5nKSByZXR1cm47XG4gICAgICAgICAgaWYgKHF1ZXN0aW9uLmdldFR5cGUoKSA9PT0gXCJtYXRyaXhcIikge1xuICAgICAgICAgICAgcXVlc3Rpb24uZ2VuZXJhdGVkVmlzaWJsZVJvd3MuZm9yRWFjaChmdW5jdGlvbiAocm93LCBpbmRleCwgcm93cykge1xuICAgICAgICAgICAgICBpZiAocm93LmZ1bGxOYW1lID09PSBldmVudC50YXJnZXQubmFtZSkge1xuICAgICAgICAgICAgICAgIHJvdy52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChxdWVzdGlvbi5nZXRUeXBlKCkgPT09IFwiY2hlY2tib3hcIikge1xuICAgICAgICAgICAgdmFyIG9sZFZhbHVlID0gcXVlc3Rpb24udmFsdWUgfHwgW107XG4gICAgICAgICAgICB2YXIgaW5kZXggPSBnZXRJbmRleEJ5VmFsdWUob2xkVmFsdWUsIGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgIHF1ZXN0aW9uLnZhbHVlID0gb2xkVmFsdWUuY29uY2F0KFtldmVudC50YXJnZXQudmFsdWVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcXVlc3Rpb24udmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpbnB1dHMub24oXCJpZlVuY2hlY2tlZFwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICBpZiAoZnJvemVVcGRhdGluZykgcmV0dXJuO1xuICAgICAgICAgIGlmIChxdWVzdGlvbi5nZXRUeXBlKCkgPT09IFwiY2hlY2tib3hcIikge1xuICAgICAgICAgICAgdmFyIG9sZFZhbHVlID0gKHF1ZXN0aW9uLnZhbHVlIHx8IFtdKS5zbGljZSgpO1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gZ2V0SW5kZXhCeVZhbHVlKG9sZFZhbHVlLCBldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgb2xkVmFsdWUuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgcXVlc3Rpb24udmFsdWUgPSBvbGRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGZ1bmN0aW9uIHVuY2hlY2tJY2hlY2soY0VsKSB7XG4gICAgICAgIGNFbC5pQ2hlY2soXCJ1bmNoZWNrXCIpO1xuICAgICAgICBjRWxbMF0ucGFyZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwiY2hlY2tlZFwiKTtcbiAgICAgIH1cbiAgICAgIHZhciBzZWxlY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZyb3plVXBkYXRpbmcgPSB0cnVlO1xuICAgICAgICBpZiAocXVlc3Rpb24uZ2V0VHlwZSgpICE9PSBcIm1hdHJpeFwiKSB7XG4gICAgICAgICAgdmFyIHZhbHVlcyA9IHF1ZXN0aW9uLnZhbHVlO1xuICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XG4gICAgICAgICAgICB2YWx1ZXMgPSBbdmFsdWVzXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHF1ZXN0aW9uLmdldFR5cGUoKSA9PSBcImNoZWNrYm94XCIpIHtcbiAgICAgICAgICAgIHZhciBxVmFsdWUgPSBxdWVzdGlvbi52YWx1ZTtcbiAgICAgICAgICAgIHF1ZXN0aW9uLnZpc2libGVDaG9pY2VzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgdmFyIGluRWwgPSAkZWwuZmluZChcbiAgICAgICAgICAgICAgICBcImlucHV0W3ZhbHVlPSdcIiArIGVzY1ZhbHVlKGl0ZW0udmFsdWUpICsgXCInXVwiXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmICghaW5FbCkgcmV0dXJuO1xuICAgICAgICAgICAgICB2YXIgaXNDaGVja2VkID0gZ2V0SW5kZXhCeVZhbHVlKHFWYWx1ZSwgaXRlbS52YWx1ZSkgPiAtMTtcbiAgICAgICAgICAgICAgaWYgKGlzQ2hlY2tlZCkge1xuICAgICAgICAgICAgICAgIGluRWwuaUNoZWNrKFwiY2hlY2tcIik7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGNFbCA9IGluRWxbMF07XG4gICAgICAgICAgICAgICAgdmFyIHdhc0NoZWNrZWQgPSAhIWNFbFtcImNoZWNrZWRcIl07XG4gICAgICAgICAgICAgICAgaWYgKHdhc0NoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgIGluRWwucmVtb3ZlQXR0cihcImNoZWNrZWRcIik7XG4gICAgICAgICAgICAgICAgICBpZiAoIWluRWwucGFyZW50KCkuaGFzQ2xhc3MoXCJjaGVja2VkXCIpKVxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICB1bmNoZWNrSWNoZWNrKGluRWwpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIGVsc2UgdW5jaGVja0ljaGVjayhpbkVsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZXMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgJGVsXG4gICAgICAgICAgICAgICAgLmZpbmQoXCJpbnB1dFt2YWx1ZT0nXCIgKyBlc2NWYWx1ZSh2YWx1ZSkgKyBcIiddXCIpXG4gICAgICAgICAgICAgICAgLmlDaGVjayhcImNoZWNrXCIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHF1ZXN0aW9uLmdlbmVyYXRlZFZpc2libGVSb3dzLmZvckVhY2goZnVuY3Rpb24gKHJvdywgaW5kZXgsIHJvd3MpIHtcbiAgICAgICAgICAgIGlmIChyb3cudmFsdWUpIHtcbiAgICAgICAgICAgICAgJChlbClcbiAgICAgICAgICAgICAgICAuZmluZChcbiAgICAgICAgICAgICAgICAgIFwiaW5wdXRbbmFtZT0nXCIgK1xuICAgICAgICAgICAgICAgICAgICByb3cuZnVsbE5hbWUgK1xuICAgICAgICAgICAgICAgICAgICBcIiddW3ZhbHVlPSdcIiArXG4gICAgICAgICAgICAgICAgICAgIGVzY1ZhbHVlKHJvdy52YWx1ZSkgK1xuICAgICAgICAgICAgICAgICAgICBcIiddXCJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmlDaGVjayhcImNoZWNrXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZyb3plVXBkYXRpbmcgPSBmYWxzZTtcbiAgICAgIH07XG4gICAgICBtYWtlQ2hvaWNlc0lDaGVjaygpO1xuXG4gICAgICBxdWVzdGlvbi52aXNpYmxlQ2hvaWNlc0NoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbWFrZUNob2ljZXNJQ2hlY2soKTtcbiAgICAgICAgJGVsLmZpbmQoXCIuc3YtaXRlbV9fZGVjb3JhdG9yXCIpLmhpZGUoKTtcbiAgICAgIH07XG4gICAgICBxdWVzdGlvbi52YWx1ZUNoYW5nZWRDYWxsYmFjayA9IHNlbGVjdDtcbiAgICAgIHNlbGVjdCgpO1xuICAgIH0sXG4gICAgd2lsbFVubW91bnQ6IGZ1bmN0aW9uIChxdWVzdGlvbiwgZWwpIHtcbiAgICAgIHZhciAkZWwgPSAkKGVsKTtcbiAgICAgICRlbC5maW5kKFwiaW5wdXRcIikuaUNoZWNrKFwiZGVzdHJveVwiKTtcbiAgICAgIHF1ZXN0aW9uLnZpc2libGVDaG9pY2VzQ2hhbmdlZENhbGxiYWNrID0gbnVsbDtcbiAgICB9LFxuICB9O1xuXG4gIFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZFByb3BlcnR5KFwicmFkaW9ncm91cFwiLCB7XG4gICAgbmFtZTogXCJyYWRpb0NsYXNzXCIsXG4gICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICB9KTtcbiAgU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuYWRkUHJvcGVydHkoXCJjaGVja2JveFwiLCB7XG4gICAgbmFtZTogXCJjaGVja2JveENsYXNzXCIsXG4gICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICB9KTtcbiAgU3VydmV5LkN1c3RvbVdpZGdldENvbGxlY3Rpb24uSW5zdGFuY2UuYWRkQ3VzdG9tV2lkZ2V0KHdpZGdldCwgXCJ0eXBlXCIpO1xufVxuXG5pZiAodHlwZW9mIFN1cnZleSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICBpbml0KFN1cnZleSwgd2luZG93LiQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpbml0O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvaWNoZWNrLmpzXG4vLyBtb2R1bGUgaWQgPSAwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxMSIsImZ1bmN0aW9uIGluaXQoU3VydmV5LCAkKSB7XG4gICQgPSAkIHx8IHdpbmRvdy4kO1xuICB2YXIgd2lkZ2V0ID0ge1xuICAgIGFjdGl2YXRlZEJ5OiBcInByb3BlcnR5XCIsXG4gICAgbmFtZTogXCJzZWxlY3QyXCIsXG4gICAgd2lkZ2V0SXNMb2FkZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgJCA9PSBcImZ1bmN0aW9uXCIgJiYgISEkLmZuLnNlbGVjdDI7XG4gICAgfSxcbiAgICBpc0ZpdDogZnVuY3Rpb24gKHF1ZXN0aW9uKSB7XG4gICAgICBpZiAod2lkZ2V0LmFjdGl2YXRlZEJ5ID09IFwicHJvcGVydHlcIilcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBxdWVzdGlvbltcInJlbmRlckFzXCJdID09PSBcInNlbGVjdDJcIiAmJlxuICAgICAgICAgIHF1ZXN0aW9uLmdldFR5cGUoKSA9PT0gXCJkcm9wZG93blwiXG4gICAgICAgICk7XG4gICAgICBpZiAod2lkZ2V0LmFjdGl2YXRlZEJ5ID09IFwidHlwZVwiKVxuICAgICAgICByZXR1cm4gcXVlc3Rpb24uZ2V0VHlwZSgpID09PSBcImRyb3Bkb3duXCI7XG4gICAgICBpZiAod2lkZ2V0LmFjdGl2YXRlZEJ5ID09IFwiY3VzdG9tdHlwZVwiKVxuICAgICAgICByZXR1cm4gcXVlc3Rpb24uZ2V0VHlwZSgpID09PSBcInNlbGVjdDJcIjtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIGFjdGl2YXRlZEJ5Q2hhbmdlZDogZnVuY3Rpb24gKGFjdGl2YXRlZEJ5KSB7XG4gICAgICBpZiAoIXRoaXMud2lkZ2V0SXNMb2FkZWQoKSkgcmV0dXJuO1xuICAgICAgd2lkZ2V0LmFjdGl2YXRlZEJ5ID0gYWN0aXZhdGVkQnk7XG4gICAgICBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5yZW1vdmVQcm9wZXJ0eShcImRyb3Bkb3duXCIsIFwicmVuZGVyQXNcIik7XG4gICAgICBpZiAoYWN0aXZhdGVkQnkgPT0gXCJwcm9wZXJ0eVwiKSB7XG4gICAgICAgIFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZFByb3BlcnR5KFwiZHJvcGRvd25cIiwge1xuICAgICAgICAgIG5hbWU6IFwicmVuZGVyQXNcIixcbiAgICAgICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgY2hvaWNlczogW1wic2VsZWN0MlwiLCBcImRlZmF1bHRcIl0sXG4gICAgICAgIH0pO1xuICAgICAgICBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRQcm9wZXJ0eShcImRyb3Bkb3duXCIsIHtcbiAgICAgICAgICBkZXBlbmRzT246IFwicmVuZGVyQXNcIixcbiAgICAgICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICAgICAgbmFtZTogXCJzZWxlY3QyQ29uZmlnXCIsXG4gICAgICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqLnJlbmRlckFzID09IFwic2VsZWN0MlwiO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGFjdGl2YXRlZEJ5ID09IFwiY3VzdG9tdHlwZVwiKSB7XG4gICAgICAgIFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwic2VsZWN0MlwiLCBbXSwgbnVsbCwgXCJkcm9wZG93blwiKTtcbiAgICAgICAgU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuYWRkUHJvcGVydHkoXCJzZWxlY3QyXCIsIHtcbiAgICAgICAgICBuYW1lOiBcInNlbGVjdDJDb25maWdcIixcbiAgICAgICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBodG1sVGVtcGxhdGU6XG4gICAgICBcIjxkaXY+PHNlbGVjdCBzdHlsZT0nd2lkdGg6IDEwMCU7Jz48L3NlbGVjdD48dGV4dGFyZWE+PC90ZXh0YXJlYT48L2Rpdj5cIixcbiAgICBhZnRlclJlbmRlcjogZnVuY3Rpb24gKHF1ZXN0aW9uLCBlbCkge1xuICAgICAgdmFyIHNlbGVjdDJDb25maWcgPSBxdWVzdGlvbi5zZWxlY3QyQ29uZmlnO1xuICAgICAgdmFyIHNldHRpbmdzID1cbiAgICAgICAgc2VsZWN0MkNvbmZpZyAmJiB0eXBlb2Ygc2VsZWN0MkNvbmZpZyA9PSBcInN0cmluZ1wiXG4gICAgICAgICAgPyBKU09OLnBhcnNlKHNlbGVjdDJDb25maWcpXG4gICAgICAgICAgOiBzZWxlY3QyQ29uZmlnO1xuICAgICAgaWYgKCFzZXR0aW5ncykgc2V0dGluZ3MgPSB7fTtcbiAgICAgIHZhciAkZWwgPSAkKGVsKS5pcyhcInNlbGVjdFwiKSA/ICQoZWwpIDogJChlbCkuZmluZChcInNlbGVjdFwiKTtcbiAgICAgIHZhciAkb3RoZXJFbGVtZW50ID0gJChlbCkuZmluZChcInRleHRhcmVhXCIpO1xuICAgICAgJG90aGVyRWxlbWVudC5hZGRDbGFzcyhxdWVzdGlvbi5jc3NDbGFzc2VzLm90aGVyKTtcbiAgICAgICRvdGhlckVsZW1lbnQuYmluZChcImlucHV0IHByb3BlcnR5Y2hhbmdlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGlzU2V0dGluZ1ZhbHVlKSByZXR1cm47XG4gICAgICAgIHF1ZXN0aW9uLmNvbW1lbnQgPSAkb3RoZXJFbGVtZW50LnZhbCgpO1xuICAgICAgfSk7XG5cbiAgICAgIHZhciB1cGRhdGVDb21tZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAkb3RoZXJFbGVtZW50LnZhbChxdWVzdGlvbi5jb21tZW50KTtcbiAgICAgICAgaWYgKHF1ZXN0aW9uLmlzT3RoZXJTZWxlY3RlZCkge1xuICAgICAgICAgICRvdGhlckVsZW1lbnQuc2hvdygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICRvdGhlckVsZW1lbnQuaGlkZSgpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdmFyIGlzU2V0dGluZ1ZhbHVlID0gZmFsc2U7XG4gICAgICB2YXIgdXBkYXRlVmFsdWVIYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoaXNTZXR0aW5nVmFsdWUpIHJldHVybjtcbiAgICAgICAgaXNTZXR0aW5nVmFsdWUgPSB0cnVlO1xuICAgICAgICBpZiAoJGVsLmZpbmQoJ29wdGlvblt2YWx1ZT1cIicgKyAocXVlc3Rpb24udmFsdWUgfHwgXCJcIikgKyAnXCJdJykubGVuZ3RoKSB7XG4gICAgICAgICAgJGVsLnZhbChxdWVzdGlvbi52YWx1ZSkudHJpZ2dlcihcImNoYW5nZVwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBxdWVzdGlvbi52YWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgcXVlc3Rpb24udmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgIXF1ZXN0aW9uLmlzT3RoZXJTZWxlY3RlZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdmFyIG5ld09wdGlvbiA9IG5ldyBPcHRpb24oXG4gICAgICAgICAgICAgIHF1ZXN0aW9uLnZhbHVlLCAvL1RPRE8gaWYgcXVlc3Rpb24gdmFsdWUgaXMgb2JqZWN0IHRoZW4gbmVlZCB0byBpbXByb3ZlXG4gICAgICAgICAgICAgIHF1ZXN0aW9uLnZhbHVlLFxuICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgJGVsLmFwcGVuZChuZXdPcHRpb24pLnRyaWdnZXIoXCJjaGFuZ2VcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZUNvbW1lbnQoKTtcbiAgICAgICAgaXNTZXR0aW5nVmFsdWUgPSBmYWxzZTtcbiAgICAgIH07XG4gICAgICB2YXIgdXBkYXRlQ2hvaWNlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgJGVsLnNlbGVjdDIoKS5lbXB0eSgpO1xuICAgICAgICBpZiAoIXNldHRpbmdzLnBsYWNlaG9sZGVyICYmIHF1ZXN0aW9uLnNob3dPcHRpb25zQ2FwdGlvbikge1xuICAgICAgICAgIHNldHRpbmdzLnBsYWNlaG9sZGVyID0gcXVlc3Rpb24ub3B0aW9uc0NhcHRpb247XG4gICAgICAgICAgc2V0dGluZ3MuYWxsb3dDbGVhciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzZXR0aW5ncy50aGVtZSkge1xuICAgICAgICAgIHNldHRpbmdzLnRoZW1lID0gXCJjbGFzc2ljXCI7XG4gICAgICAgIH1cbiAgICAgICAgc2V0dGluZ3MuZGlzYWJsZWQgPSBxdWVzdGlvbi5pc1JlYWRPbmx5O1xuICAgICAgICBpZiAoc2V0dGluZ3MuYWpheCkge1xuICAgICAgICAgICRlbC5zZWxlY3QyKHNldHRpbmdzKTtcbiAgICAgICAgICBxdWVzdGlvbi5rZWVwSW5jb3JyZWN0VmFsdWVzID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgZGF0YSA9IFtdO1xuICAgICAgICAgIGlmICghIXNldHRpbmdzLnBsYWNlaG9sZGVyIHx8IHF1ZXN0aW9uLnNob3dPcHRpb25zQ2FwdGlvbikge1xuICAgICAgICAgICAgZGF0YS5wdXNoKHsgaWQ6IFwiXCIsIHRleHQ6IFwiXCIgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNldHRpbmdzLmRhdGEgPSBkYXRhLmNvbmNhdChcbiAgICAgICAgICAgIHF1ZXN0aW9uLnZpc2libGVDaG9pY2VzLm1hcChmdW5jdGlvbiAoY2hvaWNlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaWQ6IGNob2ljZS52YWx1ZSxcbiAgICAgICAgICAgICAgICB0ZXh0OiBjaG9pY2UudGV4dCxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgICBxdWVzdGlvbi5jbGVhckluY29ycmVjdFZhbHVlcygpO1xuICAgICAgICAgICRlbC5zZWxlY3QyKHNldHRpbmdzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBmaXhlZCB3aWR0aCBhY2Nyb3JkaW5nIHRvIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQ1Mjc2Nzc4L3NlbGVjdDItbm90LXJlc3BvbnNpdmUtd2lkdGgtbGFyZ2VyLXRoYW4tY29udGFpbmVyXG4gICAgICAgIGlmICghIWVsLnF1ZXJ5U2VsZWN0b3IoXCIuc2VsZWN0MlwiKSkge1xuICAgICAgICAgIGVsLnF1ZXJ5U2VsZWN0b3IoXCIuc2VsZWN0MlwiKS5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xuICAgICAgICB9XG4gICAgICAgIGlmICghIWVsLm5leHRFbGVtZW50U2libGluZykge1xuICAgICAgICAgIGVsLm5leHRFbGVtZW50U2libGluZy5zdHlsZS5tYXJnaW5Cb3R0b20gPSBcIjFweFwiO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZVZhbHVlSGFuZGxlcigpO1xuICAgICAgfTtcblxuICAgICAgJG90aGVyRWxlbWVudC5wcm9wKFwiZGlzYWJsZWRcIiwgcXVlc3Rpb24uaXNSZWFkT25seSk7XG4gICAgICBxdWVzdGlvbi5yZWFkT25seUNoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgJGVsLnByb3AoXCJkaXNhYmxlZFwiLCBxdWVzdGlvbi5pc1JlYWRPbmx5KTtcbiAgICAgICAgJG90aGVyRWxlbWVudC5wcm9wKFwiZGlzYWJsZWRcIiwgcXVlc3Rpb24uaXNSZWFkT25seSk7XG4gICAgICB9O1xuXG4gICAgICBxdWVzdGlvbi5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcbiAgICAgICAgXCJ2aXNpYmxlQ2hvaWNlc1wiLFxuICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdXBkYXRlQ2hvaWNlcygpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgICAgdXBkYXRlQ2hvaWNlcygpO1xuICAgICAgJGVsLm9uKFwiY2hhbmdlXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUgPSBlLnRhcmdldC52YWx1ZTtcbiAgICAgICAgICB1cGRhdGVDb21tZW50KCk7XG4gICAgICAgIH0sIDEpO1xuICAgICAgfSk7XG4gICAgICAkZWwub24oXCJzZWxlY3QyOnNlbGVjdFwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBxdWVzdGlvbi5yZW5kZXJlZFZhbHVlID0gZS50YXJnZXQudmFsdWU7XG4gICAgICAgICAgdXBkYXRlQ29tbWVudCgpO1xuICAgICAgICB9LCAxKTtcbiAgICAgIH0pO1xuICAgICAgJGVsLm9uKFwic2VsZWN0MjpvcGVuaW5nXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGlmICgkKHRoaXMpLmRhdGEoXCJ1bnNlbGVjdGluZ1wiKSkge1xuICAgICAgICAgICQodGhpcykucmVtb3ZlRGF0YShcInVuc2VsZWN0aW5nXCIpO1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAkZWwub24oXCJzZWxlY3QyOnVuc2VsZWN0aW5nXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICQodGhpcykuZGF0YShcInVuc2VsZWN0aW5nXCIsIHRydWUpO1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBxdWVzdGlvbi5yZW5kZXJlZFZhbHVlID0gbnVsbDtcbiAgICAgICAgICB1cGRhdGVDb21tZW50KCk7XG4gICAgICAgIH0sIDEpO1xuICAgICAgfSk7XG4gICAgICBxdWVzdGlvbi52YWx1ZUNoYW5nZWRDYWxsYmFjayA9IHVwZGF0ZVZhbHVlSGFuZGxlcjtcbiAgICAgIHVwZGF0ZVZhbHVlSGFuZGxlcigpO1xuICAgIH0sXG4gICAgd2lsbFVubW91bnQ6IGZ1bmN0aW9uIChxdWVzdGlvbiwgZWwpIHtcbiAgICAgIHF1ZXN0aW9uLnJlYWRPbmx5Q2hhbmdlZENhbGxiYWNrID0gbnVsbDtcbiAgICAgIHF1ZXN0aW9uLnZhbHVlQ2hhbmdlZENhbGxiYWNrID0gbnVsbDtcbiAgICAgIHZhciAkc2VsZWN0MiA9ICQoZWwpLmZpbmQoXCJzZWxlY3RcIik7XG4gICAgICBpZiAoISEkc2VsZWN0Mi5kYXRhKFwic2VsZWN0MlwiKSkge1xuICAgICAgICAkc2VsZWN0MlxuICAgICAgICAgIC5vZmYoXCJzZWxlY3QyOnNlbGVjdFwiKVxuICAgICAgICAgIC5vZmYoXCJzZWxlY3QyOnVuc2VsZWN0aW5nXCIpXG4gICAgICAgICAgLm9mZihcInNlbGVjdDI6b3BlbmluZ1wiKVxuICAgICAgICAgIC5zZWxlY3QyKFwiZGVzdHJveVwiKTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xuXG4gIFN1cnZleS5DdXN0b21XaWRnZXRDb2xsZWN0aW9uLkluc3RhbmNlLmFkZEN1c3RvbVdpZGdldCh3aWRnZXQpO1xufVxuXG5pZiAodHlwZW9mIFN1cnZleSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICBpbml0KFN1cnZleSwgd2luZG93LiQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpbml0O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvc2VsZWN0Mi5qc1xuLy8gbW9kdWxlIGlkID0gMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAgNiIsImltcG9ydCBJbnB1dG1hc2sgZnJvbSBcImlucHV0bWFza1wiO1xuXG5mdW5jdGlvbiBpbml0KFN1cnZleSkge1xuICB2YXIgd2lkZ2V0ID0ge1xuICAgIG5hbWU6IFwibWFza2VkaXRcIixcbiAgICBudW1lcmljR3JvdXBTZXBhcmF0b3I6IFwiLFwiLFxuICAgIG51bWVyaWNSYWRpeFBvaW50OiBcIlwiLFxuICAgIG51bWVyaWNBdXRvR3JvdXA6IHRydWUsXG4gICAgbnVtZXJpY0RpZ2l0czogMixcbiAgICBudW1lcmljRGlnaXRzT3B0aW9uYWw6IGZhbHNlLFxuICAgIG51bWVyaWNQbGFjZWhvbGRlcjogXCIwXCIsXG4gICAgYXV0b1VubWFzazogdHJ1ZSxcbiAgICBjbGVhckluY29tcGxldGU6IHRydWUsXG4gICAgd2lkZ2V0SXNMb2FkZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgSW5wdXRtYXNrICE9IFwidW5kZWZpbmVkXCI7XG4gICAgfSxcbiAgICBpc0ZpdDogZnVuY3Rpb24gKHF1ZXN0aW9uKSB7XG4gICAgICBpZiAocXVlc3Rpb24uZ2V0VHlwZSgpID09IFwibXVsdGlwbGV0ZXh0XCIpIHJldHVybiB0cnVlO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgcXVlc3Rpb24uZ2V0VHlwZSgpID09IFwidGV4dFwiICYmXG4gICAgICAgIChxdWVzdGlvbi5pbnB1dE1hc2sgIT0gXCJub25lXCIgfHwgcXVlc3Rpb24uaW5wdXRGb3JtYXQpXG4gICAgICApO1xuICAgIH0sXG4gICAgaXNEZWZhdWx0UmVuZGVyOiB0cnVlLFxuICAgIGFjdGl2YXRlZEJ5Q2hhbmdlZDogZnVuY3Rpb24gKGFjdGl2YXRlZEJ5KSB7XG4gICAgICBpZiAoU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuZmluZFByb3BlcnR5KFwidGV4dFwiLCBcImlucHV0TWFza1wiKSkgcmV0dXJuO1xuICAgICAgdmFyIHByb3BlcnRpZXMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImF1dG9Vbm1hc2s6Ym9vbGVhblwiLFxuICAgICAgICAgIGNhdGVnb3J5OiBcImdlbmVyYWxcIixcbiAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJjbGVhckluY29tcGxldGU6Ym9vbGVhblwiLFxuICAgICAgICAgIGNhdGVnb3J5OiBcImdlbmVyYWxcIixcbiAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB7IG5hbWU6IFwiaW5wdXRGb3JtYXRcIiwgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImlucHV0TWFza1wiLFxuICAgICAgICAgIGNhdGVnb3J5OiBcImdlbmVyYWxcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIm5vbmVcIixcbiAgICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgICBcIm5vbmVcIixcbiAgICAgICAgICAgIFwiZGF0ZXRpbWVcIixcbiAgICAgICAgICAgIFwiY3VycmVuY3lcIixcbiAgICAgICAgICAgIFwiZGVjaW1hbFwiLFxuICAgICAgICAgICAgXCJlbWFpbFwiLFxuICAgICAgICAgICAgXCJwaG9uZVwiLFxuICAgICAgICAgICAgXCJpcFwiLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIm51bWVyaWNEaWdpdHNcIixcbiAgICAgICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIm9wdGlvbnNcIixcbiAgICAgICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInByZWZpeFwiLFxuICAgICAgICAgIGNhdGVnb3J5OiBcImdlbmVyYWxcIixcbiAgICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwic3VmZml4XCIsXG4gICAgICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZFByb3BlcnRpZXMoXCJ0ZXh0XCIsIHByb3BlcnRpZXMpO1xuICAgICAgU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuYWRkUHJvcGVydGllcyhcbiAgICAgICAgXCJtYXRyaXhkcm9wZG93bmNvbHVtblwiLFxuICAgICAgICBwcm9wZXJ0aWVzXG4gICAgICApO1xuICAgICAgU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuYWRkUHJvcGVydGllcyhcIm11bHRpcGxldGV4dGl0ZW1cIiwgcHJvcGVydGllcyk7XG4gICAgfSxcbiAgICBhcHBseUlucHV0TWFzazogZnVuY3Rpb24gKHN1cnZleUVsZW1lbnQsIGVsKSB7XG4gICAgICB2YXIgcm9vdFdpZGdldCA9IHRoaXM7XG4gICAgICB2YXIgbWFzayA9XG4gICAgICAgIHN1cnZleUVsZW1lbnQuaW5wdXRNYXNrICE9PSBcIm5vbmVcIlxuICAgICAgICAgID8gc3VydmV5RWxlbWVudC5pbnB1dE1hc2tcbiAgICAgICAgICA6IHN1cnZleUVsZW1lbnQuaW5wdXRGb3JtYXQ7XG4gICAgICB2YXIgb3B0aW9ucyA9IHt9O1xuICAgICAgaWYgKHR5cGVvZiBzdXJ2ZXlFbGVtZW50Lm9wdGlvbnMgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgZm9yICh2YXIgb3B0aW9uIGluIHN1cnZleUVsZW1lbnQub3B0aW9ucykge1xuICAgICAgICAgIG9wdGlvbnNbb3B0aW9uXSA9IHN1cnZleUVsZW1lbnQub3B0aW9uc1tvcHRpb25dO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBvcHRpb25zLmF1dG9Vbm1hc2sgPSB0eXBlb2Ygc3VydmV5RWxlbWVudC5hdXRvVW5tYXNrICE9PSBcInVuZGVmaW5lZFwiXG4gICAgICAgID8gc3VydmV5RWxlbWVudC5hdXRvVW5tYXNrXG4gICAgICAgIDogcm9vdFdpZGdldC5hdXRvVW5tYXNrO1xuICAgICAgb3B0aW9ucy5jbGVhckluY29tcGxldGUgPSB0eXBlb2Ygc3VydmV5RWxlbWVudC5jbGVhckluY29tcGxldGUgIT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgPyBzdXJ2ZXlFbGVtZW50LmNsZWFySW5jb21wbGV0ZVxuICAgICAgICA6IHJvb3RXaWRnZXQuY2xlYXJJbmNvbXBsZXRlO1xuICAgICAgaWYgKHN1cnZleUVsZW1lbnQuaW5wdXRNYXNrICE9PSBcIm5vbmVcIikge1xuICAgICAgICBvcHRpb25zLmlucHV0Rm9ybWF0ID0gc3VydmV5RWxlbWVudC5pbnB1dEZvcm1hdDtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgc3VydmV5RWxlbWVudC5pbnB1dE1hc2sgPT09IFwiY3VycmVuY3lcIiB8fFxuICAgICAgICBzdXJ2ZXlFbGVtZW50LmlucHV0TWFzayA9PT0gXCJkZWNpbWFsXCJcbiAgICAgICkge1xuICAgICAgICBvcHRpb25zLmdyb3VwU2VwYXJhdG9yID0gcm9vdFdpZGdldC5udW1lcmljR3JvdXBTZXBhcmF0b3I7XG4gICAgICAgIG9wdGlvbnMucmFkaXhQb2ludCA9IHJvb3RXaWRnZXQubnVtZXJpY1JhZGl4UG9pbnQ7XG4gICAgICAgIG9wdGlvbnMuYXV0b0dyb3VwID0gcm9vdFdpZGdldC5udW1lcmljQXV0b0dyb3VwO1xuICAgICAgfVxuICAgICAgaWYgKHN1cnZleUVsZW1lbnQuaW5wdXRNYXNrID09PSBcImN1cnJlbmN5XCIpIHtcbiAgICAgICAgb3B0aW9ucy5kaWdpdHMgPSBzdXJ2ZXlFbGVtZW50Lm51bWVyaWNEaWdpdHMgfHwgcm9vdFdpZGdldC5udW1lcmljRGlnaXRzO1xuICAgICAgICBvcHRpb25zLmRpZ2l0c09wdGlvbmFsID0gcm9vdFdpZGdldC5udW1lcmljRGlnaXRzT3B0aW9uYWw7XG4gICAgICAgIG9wdGlvbnMucHJlZml4ID0gc3VydmV5RWxlbWVudC5wcmVmaXggfHwgXCJcIjtcbiAgICAgICAgb3B0aW9ucy5zdWZmaXggPSBzdXJ2ZXlFbGVtZW50LnN1ZmZpeCB8fCBcIlwiO1xuICAgICAgICBvcHRpb25zLnBsYWNlaG9sZGVyID0gcm9vdFdpZGdldC5udW1lcmljUGxhY2Vob2xkZXI7XG4gICAgICB9XG4gICAgICAvLyBpZiAoc3VydmV5RWxlbWVudC5pbnB1dE1hc2sgPT0gXCJkYXRldGltZVwiKSB7XG4gICAgICAvLyAgIG1hc2sgPSBzdXJ2ZXlFbGVtZW50LmlucHV0Rm9ybWF0O1xuICAgICAgLy8gfVxuICAgICAgaWYgKHN1cnZleUVsZW1lbnQuaW5wdXRNYXNrID09PSBcInBob25lXCIgJiYgISFzdXJ2ZXlFbGVtZW50LmlucHV0Rm9ybWF0KSB7XG4gICAgICAgIG1hc2sgPSBzdXJ2ZXlFbGVtZW50LmlucHV0Rm9ybWF0O1xuICAgICAgfVxuXG4gICAgICBJbnB1dG1hc2sobWFzaywgb3B0aW9ucykubWFzayhlbCk7XG5cbiAgICAgIGVsLm9uYmx1ciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFlbC5pbnB1dG1hc2spIHJldHVybjtcbiAgICAgICAgaWYgKHN1cnZleUVsZW1lbnQudmFsdWUgPT09IGVsLmlucHV0bWFzay5nZXRlbXB0eW1hc2soKSkge1xuICAgICAgICAgIHN1cnZleUVsZW1lbnQudmFsdWUgPSBcIlwiO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB2YXIgY3VzdG9tV2lkZ2V0RGF0YSA9XG4gICAgICAgIHN1cnZleUVsZW1lbnQuZ2V0VHlwZSgpID09PSBcIm11bHRpcGxldGV4dGl0ZW1cIlxuICAgICAgICAgID8gc3VydmV5RWxlbWVudC5lZGl0b3JWYWx1ZS5jdXN0b21XaWRnZXREYXRhXG4gICAgICAgICAgOiBzdXJ2ZXlFbGVtZW50LmN1c3RvbVdpZGdldERhdGE7XG4gICAgICBlbC5vbmlucHV0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBjdXN0b21XaWRnZXREYXRhLmlzTmVlZFJlbmRlciA9IHRydWU7XG4gICAgICB9O1xuXG4gICAgICB2YXIgcHVzaFZhbHVlSGFuZGxlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFlbC5pbnB1dG1hc2spIHJldHVybjtcbiAgICAgICAgaWYgKGVsLmlucHV0bWFzay5pc0NvbXBsZXRlKCkpIHtcbiAgICAgICAgICBzdXJ2ZXlFbGVtZW50LnZhbHVlID0gb3B0aW9ucy5hdXRvVW5tYXNrXG4gICAgICAgICAgICA/IGVsLmlucHV0bWFzay51bm1hc2tlZHZhbHVlKClcbiAgICAgICAgICAgIDogZWwudmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3VydmV5RWxlbWVudC52YWx1ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBlbC5vbmZvY3Vzb3V0ID0gZWwub25jaGFuZ2UgPSBwdXNoVmFsdWVIYW5kbGVyO1xuXG4gICAgICB2YXIgdXBkYXRlSGFuZGxlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZWwudmFsdWUgPVxuICAgICAgICAgIHN1cnZleUVsZW1lbnQudmFsdWUgPT09IHVuZGVmaW5lZCB8fCBzdXJ2ZXlFbGVtZW50LnZhbHVlID09PSBudWxsXG4gICAgICAgICAgICA/IFwiXCJcbiAgICAgICAgICAgIDogc3VydmV5RWxlbWVudC52YWx1ZTtcbiAgICAgIH07XG4gICAgICBzdXJ2ZXlFbGVtZW50LnZhbHVlQ2hhbmdlZENhbGxiYWNrID0gdXBkYXRlSGFuZGxlcjtcbiAgICAgIHVwZGF0ZUhhbmRsZXIoKTtcbiAgICB9LFxuICAgIGFmdGVyUmVuZGVyOiBmdW5jdGlvbiAocXVlc3Rpb24sIGVsKSB7XG4gICAgICBpZiAocXVlc3Rpb24uZ2V0VHlwZSgpICE9IFwibXVsdGlwbGV0ZXh0XCIpIHtcbiAgICAgICAgdmFyIGlucHV0ID0gZWwucXVlcnlTZWxlY3RvcihcImlucHV0XCIpIHx8IGVsO1xuICAgICAgICB0aGlzLmFwcGx5SW5wdXRNYXNrKHF1ZXN0aW9uLCBpbnB1dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9uLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGl0ZW0gPSBxdWVzdGlvbi5pdGVtc1tpXTtcbiAgICAgICAgICBpZiAoaXRlbS5pbnB1dE1hc2sgIT0gXCJub25lXCIgfHwgaXRlbS5pbnB1dEZvcm1hdCkge1xuICAgICAgICAgICAgdmFyIGlucHV0ID0gZWwucXVlcnlTZWxlY3RvcihcIiNcIiArIGl0ZW0uZWRpdG9yLmlucHV0SWQpO1xuICAgICAgICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgICAgICAgIHRoaXMuYXBwbHlJbnB1dE1hc2soaXRlbSwgaW5wdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgd2lsbFVubW91bnQ6IGZ1bmN0aW9uIChxdWVzdGlvbiwgZWwpIHtcbiAgICAgIHZhciBpbnB1dCA9IGVsLnF1ZXJ5U2VsZWN0b3IoXCJpbnB1dFwiKSB8fCBlbDtcbiAgICAgIGlmICghIWlucHV0ICYmICEhaW5wdXQuaW5wdXRtYXNrKSB7XG4gICAgICAgIGlucHV0LmlucHV0bWFzay5yZW1vdmUoKTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xuXG4gIFN1cnZleS5DdXN0b21XaWRnZXRDb2xsZWN0aW9uLkluc3RhbmNlLmFkZEN1c3RvbVdpZGdldCh3aWRnZXQpO1xufVxuXG5pZiAodHlwZW9mIFN1cnZleSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICBpbml0KFN1cnZleSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGluaXQ7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9pbnB1dG1hc2suanNcbi8vIG1vZHVsZSBpZCA9IDJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDQiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfM19fO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcInJvb3RcIjpcIklucHV0bWFza1wiLFwiY29tbW9uanMyXCI6XCJpbnB1dG1hc2tcIixcImNvbW1vbmpzXCI6XCJpbnB1dG1hc2tcIixcImFtZFwiOlwiaW5wdXRtYXNrXCJ9XG4vLyBtb2R1bGUgaWQgPSAzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCA0IiwiZnVuY3Rpb24gaW5pdChTdXJ2ZXksICQpIHtcbiAgJCA9ICQgfHwgd2luZG93LiQ7XG4gIHZhciB3aWRnZXQgPSB7XG4gICAgbmFtZTogXCJiYXJyYXRpbmdcIixcbiAgICB0aXRsZTogXCJCYXIgcmF0aW5nXCIsXG4gICAgaWNvbk5hbWU6IFwiaWNvbi1iYXJyYXRpbmdcIixcbiAgICB3aWRnZXRJc0xvYWRlZDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHR5cGVvZiAkID09IFwiZnVuY3Rpb25cIiAmJiAhISQuZm4uYmFycmF0aW5nO1xuICAgIH0sXG4gICAgZGVmYXVsdEpTT046IHsgY2hvaWNlczogWzEsIDIsIDMsIDQsIDVdIH0sXG4gICAgaXNGaXQ6IGZ1bmN0aW9uIChxdWVzdGlvbikge1xuICAgICAgcmV0dXJuIHF1ZXN0aW9uLmdldFR5cGUoKSA9PT0gXCJiYXJyYXRpbmdcIjtcbiAgICB9LFxuICAgIGlzRGVmYXVsdFJlbmRlcjogdHJ1ZSxcbiAgICBhY3RpdmF0ZWRCeUNoYW5nZWQ6IGZ1bmN0aW9uIChhY3RpdmF0ZWRCeSkge1xuICAgICAgU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXG4gICAgICAgIFwiYmFycmF0aW5nXCIsXG4gICAgICAgIFtcbiAgICAgICAgICB7IG5hbWU6IFwiaGFzT3RoZXJcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICAgICAgICB7IG5hbWU6IFwib3RoZXJUZXh0XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgICAgICAgeyBuYW1lOiBcIm9wdGlvbnNDYXB0aW9uXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgICAgICAgeyBuYW1lOiBcIm90aGVyRXJyb3JUZXh0XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgICAgICAgeyBuYW1lOiBcInN0b3JlT3RoZXJzQXNDb21tZW50XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgICAgICAgeyBuYW1lOiBcInJlbmRlckFzXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgICAgICAgeyBuYW1lOiBcInNlbGVjdDJDb25maWdcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICAgICAgXSxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgXCJkcm9wZG93blwiXG4gICAgICApO1xuICAgICAgU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuYWRkUHJvcGVydHkoXCJiYXJyYXRpbmdcIiwge1xuICAgICAgICBuYW1lOiBcInNob3dWYWx1ZXM6Ym9vbGVhblwiLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgfSk7XG4gICAgICBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRQcm9wZXJ0eShcImJhcnJhdGluZ1wiLCB7XG4gICAgICAgIG5hbWU6IFwicmF0aW5nVGhlbWVcIixcbiAgICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgICBkZWZhdWx0OiBcImNzcy1zdGFyc1wiLFxuICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgXCJmb250YXdlc29tZS1zdGFyc1wiLFxuICAgICAgICAgIFwiY3NzLXN0YXJzXCIsXG4gICAgICAgICAgXCJiYXJzLXBpbGxcIixcbiAgICAgICAgICBcImJhcnMtMXRvMTBcIixcbiAgICAgICAgICBcImJhcnMtbW92aWVcIixcbiAgICAgICAgICBcImJhcnMtcmV2ZXJzZWRcIixcbiAgICAgICAgICBcImJhcnMtaG9yaXpvbnRhbFwiLFxuICAgICAgICAgIFwiZm9udGF3ZXNvbWUtc3RhcnMtb1wiLFxuICAgICAgICBdLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBhZnRlclJlbmRlcjogZnVuY3Rpb24gKHF1ZXN0aW9uLCBlbCkge1xuICAgICAgdmFyICRjdXN0b21TZWxlY3Q7XG4gICAgICB2YXIgJHF1ZXN0aW9uSW5wdXQ7XG4gICAgICB2YXIgY29udGVudENvbnRhaW5lciA9ICQoZWwpLmlzKFwic2VsZWN0XCIpXG4gICAgICAgID8gJChlbCkucGFyZW50KCkucGFyZW50KClbMF1cbiAgICAgICAgOiAkKGVsKS5wYXJlbnQoKVswXTtcbiAgICAgIHZhciByZW5kZXJDdXN0b21TZWxlY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICRjdXN0b21TZWxlY3QgPSAkKFwiPHNlbGVjdCBjbGFzcz0nc3Ytd2lkZ2V0LXNlbGVjdCc+PC9zZWxlY3Q+XCIpO1xuICAgICAgICBxdWVzdGlvbi52aXNpYmxlQ2hvaWNlcy5mb3JFYWNoKGZ1bmN0aW9uIChjaG9pY2UpIHtcbiAgICAgICAgICAkY3VzdG9tU2VsZWN0LmFwcGVuZChcbiAgICAgICAgICAgICc8b3B0aW9uIHZhbHVlPVwiezB9XCI+ezF9PC9vcHRpb24+Jy5mb3JtYXQoY2hvaWNlLnZhbHVlLCBjaG9pY2UudGV4dClcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgJHF1ZXN0aW9uSW5wdXQgPSAkKGNvbnRlbnRDb250YWluZXIpLmZpbmQoXG4gICAgICAgICAgJ1tpZD1cInswfVwiXScuZm9ybWF0KHF1ZXN0aW9uLmlucHV0SWQpXG4gICAgICAgICk7XG5cbiAgICAgICAgJHF1ZXN0aW9uSW5wdXQuY3NzKFwiZGlzcGxheVwiLCBcIm5vbmVcIik7XG4gICAgICAgICRxdWVzdGlvbklucHV0LmFmdGVyKCRjdXN0b21TZWxlY3QpO1xuICAgICAgICAkY3VzdG9tU2VsZWN0WzBdLnNlbGVjdGVkSW5kZXggPSAtMTtcbiAgICAgIH07XG4gICAgICB2YXIgcmVtb3ZlQ3VzdG9tU2VsZWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAkcXVlc3Rpb25JbnB1dC5jc3MoXCJkaXNwbGF5XCIsIFwiXCIpO1xuICAgICAgICAkY3VzdG9tU2VsZWN0LmJhcnJhdGluZyhcImRlc3Ryb3lcIik7XG4gICAgICAgICRjdXN0b21TZWxlY3QucmVtb3ZlKCk7XG4gICAgICB9O1xuICAgICAgdmFyIHJlbmRlckJhcnJhdGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgJGN1c3RvbVNlbGVjdC5iYXJyYXRpbmcoXCJzaG93XCIsIHtcbiAgICAgICAgICB0aGVtZTogcXVlc3Rpb24ucmF0aW5nVGhlbWUsXG4gICAgICAgICAgaW5pdGlhbFJhdGluZzogcXVlc3Rpb24udmFsdWUsXG4gICAgICAgICAgc2hvd1ZhbHVlczogcXVlc3Rpb24uc2hvd1ZhbHVlcyxcbiAgICAgICAgICBzaG93U2VsZWN0ZWRSYXRpbmc6IGZhbHNlLFxuICAgICAgICAgIHJlYWRvbmx5OiBxdWVzdGlvbi5pc1JlYWRPbmx5LFxuICAgICAgICAgIG9uU2VsZWN0OiBmdW5jdGlvbiAodmFsdWUsIHRleHQpIHtcbiAgICAgICAgICAgIHZhbHVlQ2hhbmdpbmdCeVdpZGdldCA9IHRydWU7XG4gICAgICAgICAgICBxdWVzdGlvbi52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdmFsdWVDaGFuZ2luZ0J5V2lkZ2V0ID0gZmFsc2U7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgcmVuZGVyQ3VzdG9tU2VsZWN0KCk7XG4gICAgICByZW5kZXJCYXJyYXRpbmcoKTtcbiAgICAgIGlmICghISRjdXN0b21TZWxlY3QucGFyZW50cygpWzBdKVxuICAgICAgICAkY3VzdG9tU2VsZWN0LnBhcmVudHMoKVswXS5zdHlsZS5tYXJnaW5Cb3R0b20gPSBcIjNweFwiO1xuICAgICAgdmFyIHZhbHVlQ2hhbmdpbmdCeVdpZGdldCA9IGZhbHNlO1xuXG4gICAgICBxdWVzdGlvbi52YWx1ZUNoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICF2YWx1ZUNoYW5naW5nQnlXaWRnZXQgJiZcbiAgICAgICAgICAkKGNvbnRlbnRDb250YWluZXIpLmZpbmQoXCJzZWxlY3Quc3Ytd2lkZ2V0LXNlbGVjdFwiKVswXS52YWx1ZSAhPT1cbiAgICAgICAgICAgIHF1ZXN0aW9uLnZhbHVlXG4gICAgICAgICkge1xuICAgICAgICAgICQoY29udGVudENvbnRhaW5lcilcbiAgICAgICAgICAgIC5maW5kKFwic2VsZWN0LnN2LXdpZGdldC1zZWxlY3RcIilcbiAgICAgICAgICAgIC5iYXJyYXRpbmcoXCJzZXRcIiwgcXVlc3Rpb24udmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcXVlc3Rpb24uX19iYXJyYXRpbmdPblByb3BlcnR5Q2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKFxuICAgICAgICBzZW5kZXIsXG4gICAgICAgIG9wdGlvbnNcbiAgICAgICkge1xuICAgICAgICBpZiAob3B0aW9ucy5uYW1lID09IFwicmF0aW5nVGhlbWVcIikge1xuICAgICAgICAgICRjdXN0b21TZWxlY3QuYmFycmF0aW5nKFwiZGVzdHJveVwiKTtcbiAgICAgICAgICByZW5kZXJCYXJyYXRpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHF1ZXN0aW9uLm9uUHJvcGVydHlDaGFuZ2VkLmFkZChcbiAgICAgICAgcXVlc3Rpb24uX19iYXJyYXRpbmdPblByb3BlcnR5Q2hhbmdlZENhbGxiYWNrXG4gICAgICApO1xuICAgICAgcXVlc3Rpb24ucmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJlbW92ZUN1c3RvbVNlbGVjdCgpO1xuICAgICAgICByZW5kZXJDdXN0b21TZWxlY3QoKTtcbiAgICAgICAgcmVuZGVyQmFycmF0aW5nKCk7XG4gICAgICB9O1xuICAgICAgcXVlc3Rpb24udmlzaWJsZUNob2ljZXNDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJlbmRlckJhcnJhdGluZygpO1xuICAgICAgfTtcbiAgICB9LFxuICAgIHdpbGxVbm1vdW50OiBmdW5jdGlvbiAocXVlc3Rpb24sIGVsKSB7XG4gICAgICB2YXIgJGNvbnRlbnRDb250YWluZXIgPSAkKGVsKS5pcyhcInNlbGVjdFwiKVxuICAgICAgICA/ICQoZWwpLnBhcmVudCgpLnBhcmVudCgpXG4gICAgICAgIDogJChlbCkucGFyZW50KCk7XG4gICAgICB2YXIgJGVsID0gJGNvbnRlbnRDb250YWluZXIuZmluZChcInNlbGVjdC5zdi13aWRnZXQtc2VsZWN0XCIpO1xuICAgICAgJGVsLmJhcnJhdGluZyhcImRlc3Ryb3lcIik7XG4gICAgICAkZWwucmVtb3ZlKCk7XG4gICAgICBxdWVzdGlvbi52YWx1ZUNoYW5nZWRDYWxsYmFjayA9IHVuZGVmaW5lZDtcbiAgICAgIHF1ZXN0aW9uLm9uUHJvcGVydHlDaGFuZ2VkLnJlbW92ZShcbiAgICAgICAgcXVlc3Rpb24uX19iYXJyYXRpbmdPblByb3BlcnR5Q2hhbmdlZENhbGxiYWNrXG4gICAgICApO1xuICAgICAgcXVlc3Rpb24uX19iYXJyYXRpbmdPblByb3BlcnR5Q2hhbmdlZENhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgIH0sXG4gICAgcGRmUXVlc3Rpb25UeXBlOiBcImRyb3Bkb3duXCIsXG4gIH07XG5cbiAgU3VydmV5LkN1c3RvbVdpZGdldENvbGxlY3Rpb24uSW5zdGFuY2UuYWRkQ3VzdG9tV2lkZ2V0KHdpZGdldCwgXCJjdXN0b210eXBlXCIpO1xufVxuXG5pZiAodHlwZW9mIFN1cnZleSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICBpbml0KFN1cnZleSwgd2luZG93LiQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpbml0O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvanF1ZXJ5LWJhci1yYXRpbmcuanNcbi8vIG1vZHVsZSBpZCA9IDRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEwIiwiZnVuY3Rpb24gaW5pdChTdXJ2ZXksICQpIHtcbiAgJCA9ICQgfHwgd2luZG93LiQ7XG4gIGlmIChcbiAgICAhISQgJiZcbiAgICAhJC5mbi5ib290c3RyYXBEUCAmJlxuICAgICEhJC5mbi5kYXRlcGlja2VyICYmXG4gICAgISEkLmZuLmRhdGVwaWNrZXIubm9Db25mbGljdFxuICApIHtcbiAgICAkLmZuLmJvb3RzdHJhcERQID0gJC5mbi5kYXRlcGlja2VyLm5vQ29uZmxpY3QoKTtcbiAgICBpZiAoISQuZm4uZGF0ZXBpY2tlcikge1xuICAgICAgJC5mbi5kYXRlcGlja2VyID0gJC5mbi5ib290c3RyYXBEUDtcbiAgICB9XG4gIH1cbiAgdmFyIHdpZGdldCA9IHtcbiAgICBuYW1lOiBcImRhdGVwaWNrZXJcIixcbiAgICB0aXRsZTogXCJEYXRlIHBpY2tlclwiLFxuICAgIGljb25OYW1lOiBcImljb24tZGF0ZXBpY2tlclwiLFxuICAgIHdpZGdldElzTG9hZGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gISEkICYmICEhJC5mbi5kYXRlcGlja2VyICYmICEkLmZuLmRhdGVwaWNrZXIubm9Db25mbGljdDtcbiAgICB9LFxuICAgIGlzRml0OiBmdW5jdGlvbiAocXVlc3Rpb24pIHtcbiAgICAgIHJldHVybiBxdWVzdGlvbi5nZXRUeXBlKCkgPT09IFwiZGF0ZXBpY2tlclwiO1xuICAgIH0sXG4gICAgaHRtbFRlbXBsYXRlOiBcIjxpbnB1dCBjbGFzcz0nZm9ybS1jb250cm9sIHdpZGdldC1kYXRlcGlja2VyJyB0eXBlPSd0ZXh0Jz5cIixcbiAgICBhY3RpdmF0ZWRCeUNoYW5nZWQ6IGZ1bmN0aW9uIChhY3RpdmF0ZWRCeSkge1xuICAgICAgU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXG4gICAgICAgIFwiZGF0ZXBpY2tlclwiLFxuICAgICAgICBbXG4gICAgICAgICAgeyBuYW1lOiBcImlucHV0VHlwZVwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgICAgICAgIHsgbmFtZTogXCJpbnB1dEZvcm1hdFwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgICAgICAgIHsgbmFtZTogXCJpbnB1dE1hc2tcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICAgICAgXSxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgXCJ0ZXh0XCJcbiAgICAgICk7XG4gICAgICBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRQcm9wZXJ0eShcImRhdGVwaWNrZXJcIiwge1xuICAgICAgICBuYW1lOiBcImRhdGVGb3JtYXRcIixcbiAgICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgfSk7XG4gICAgICBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRQcm9wZXJ0eShcImRhdGVwaWNrZXJcIiwge1xuICAgICAgICBuYW1lOiBcImNvbmZpZ1wiLFxuICAgICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgfSk7XG4gICAgICBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRQcm9wZXJ0eShcImRhdGVwaWNrZXJcIiwge1xuICAgICAgICBuYW1lOiBcIm1heERhdGVcIixcbiAgICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgfSk7XG4gICAgICBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRQcm9wZXJ0eShcImRhdGVwaWNrZXJcIiwge1xuICAgICAgICBuYW1lOiBcIm1pbkRhdGVcIixcbiAgICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBhZnRlclJlbmRlcjogZnVuY3Rpb24gKHF1ZXN0aW9uLCBlbCkge1xuICAgICAgdmFyICRlbCA9ICQoZWwpLmlzKFwiLndpZGdldC1kYXRlcGlja2VyXCIpXG4gICAgICAgID8gJChlbClcbiAgICAgICAgOiAkKGVsKS5maW5kKFwiLndpZGdldC1kYXRlcGlja2VyXCIpO1xuICAgICAgJGVsLmFkZENsYXNzKHF1ZXN0aW9uLmNzcy50ZXh0LnJvb3QpO1xuICAgICAgdmFyIGlzU2VsZWN0aW5nID0gZmFsc2U7XG4gICAgICB2YXIgY29uZmlnID0gJC5leHRlbmQodHJ1ZSwge30sIHF1ZXN0aW9uLmNvbmZpZyB8fCB7fSk7XG4gICAgICBpZiAoISFxdWVzdGlvbi5wbGFjZUhvbGRlcikge1xuICAgICAgICAkZWwuYXR0cihcInBsYWNlaG9sZGVyXCIsIHF1ZXN0aW9uLnBsYWNlSG9sZGVyKTtcbiAgICAgIH1cbiAgICAgIGlmIChjb25maWcuZGF0ZUZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbmZpZy5kYXRlRm9ybWF0ID0gISFxdWVzdGlvbi5kYXRlRm9ybWF0XG4gICAgICAgICAgPyBxdWVzdGlvbi5kYXRlRm9ybWF0XG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAoY29uZmlnLm9wdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbmZpZy5vcHRpb24gPSB7XG4gICAgICAgICAgbWluRGF0ZTogbnVsbCxcbiAgICAgICAgICBtYXhEYXRlOiBudWxsLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKCEhcXVlc3Rpb24ubWluRGF0ZSkge1xuICAgICAgICBjb25maWcubWluRGF0ZSA9IHF1ZXN0aW9uLm1pbkRhdGU7XG4gICAgICB9XG4gICAgICBpZiAoISFxdWVzdGlvbi5tYXhEYXRlKSB7XG4gICAgICAgIGNvbmZpZy5tYXhEYXRlID0gcXVlc3Rpb24ubWF4RGF0ZTtcbiAgICAgIH1cbiAgICAgIGlmICghIXF1ZXN0aW9uLnJlbmRlcmVkTWluKSB7XG4gICAgICAgIGNvbmZpZy5taW5EYXRlID0gcXVlc3Rpb24ucmVuZGVyZWRNaW47XG4gICAgICB9XG4gICAgICBpZiAoISFxdWVzdGlvbi5yZW5kZXJlZE1heCkge1xuICAgICAgICBjb25maWcubWF4RGF0ZSA9IHF1ZXN0aW9uLnJlbmRlcmVkTWF4O1xuICAgICAgfVxuICAgICAgY29uZmlnLmRpc2FibGVkID0gcXVlc3Rpb24uaXNSZWFkT25seTtcbiAgICAgIGlmIChjb25maWcub25TZWxlY3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25maWcub25TZWxlY3QgPSBmdW5jdGlvbiAoZGF0ZVRleHQpIHtcbiAgICAgICAgICBpc1NlbGVjdGluZyA9IHRydWU7XG4gICAgICAgICAgcXVlc3Rpb24udmFsdWUgPSBkYXRlVGV4dDtcbiAgICAgICAgICBpc1NlbGVjdGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZml4Rm9jdXNJRSA9IHRydWU7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25maWcuZml4Rm9jdXNJRSA9IGZhbHNlO1xuICAgICAgY29uZmlnLm9uQ2xvc2UgPSBmdW5jdGlvbiAoZGF0ZVRleHQsIGluc3QpIHtcbiAgICAgICAgdGhpcy5maXhGb2N1c0lFID0gdHJ1ZTtcbiAgICAgIH07XG4gICAgICBjb25maWcuYmVmb3JlU2hvdyA9IGZ1bmN0aW9uIChpbnB1dCwgaW5zdCkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gISFuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9UcmlkZW50XFwvN1xcLi8pXG4gICAgICAgICAgPyAhdGhpcy5maXhGb2N1c0lFXG4gICAgICAgICAgOiB0cnVlO1xuICAgICAgICB0aGlzLmZpeEZvY3VzSUUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH07XG4gICAgICB2YXIgcGlja2VyV2lkZ2V0ID0gJGVsLmRhdGVwaWNrZXIoY29uZmlnKS5vbihcImNoYW5nZVwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICBxdWVzdGlvbi52YWx1ZSA9ICQodGhpcykudmFsKCk7XG4gICAgICB9KTtcblxuICAgICAgJGVsLmtleXVwKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGlmIChlLmtleUNvZGUgPT0gOCB8fCBlLmtleUNvZGUgPT0gNDYpIHtcbiAgICAgICAgICAkLmRhdGVwaWNrZXIuX2NsZWFyRGF0ZSh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHF1ZXN0aW9uLnJlYWRPbmx5Q2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAkZWwuZGF0ZXBpY2tlcihcIm9wdGlvblwiLCBcImRpc2FibGVkXCIsIHF1ZXN0aW9uLmlzUmVhZE9ubHkpO1xuICAgICAgfTtcbiAgICAgIGZ1bmN0aW9uIHVwZGF0ZURhdGUoKSB7XG4gICAgICAgIGlmICghcXVlc3Rpb24uaXNFbXB0eSgpKSB7XG4gICAgICAgICAgdmFyIHZhbCA9IHF1ZXN0aW9uLnZhbHVlO1xuICAgICAgICAgIGlmKHR5cGVvZiB2YWwgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHZhbCA9IG5ldyBEYXRlKHZhbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBpY2tlcldpZGdldC5kYXRlcGlja2VyKFwic2V0RGF0ZVwiLCB2YWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBpY2tlcldpZGdldC5kYXRlcGlja2VyKFwic2V0RGF0ZVwiLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcXVlc3Rpb24ucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXG4gICAgICAgIFwiZGF0ZUZvcm1hdFwiLFxuICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcXVlc3Rpb24uZGF0ZUZvcm1hdCAmJlxuICAgICAgICAgICAgcGlja2VyV2lkZ2V0LmRhdGVwaWNrZXIoXG4gICAgICAgICAgICAgIFwib3B0aW9uXCIsXG4gICAgICAgICAgICAgIFwiZGF0ZUZvcm1hdFwiLFxuICAgICAgICAgICAgICBxdWVzdGlvbi5kYXRlRm9ybWF0XG4gICAgICAgICAgICApO1xuICAgICAgICAgIHVwZGF0ZURhdGUoKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHF1ZXN0aW9uLnZhbHVlQ2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWlzU2VsZWN0aW5nKSB7XG4gICAgICAgICAgdXBkYXRlRGF0ZSgpO1xuICAgICAgICAgICRlbC5ibHVyKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBxdWVzdGlvbi52YWx1ZUNoYW5nZWRDYWxsYmFjaygpO1xuICAgIH0sXG4gICAgd2lsbFVubW91bnQ6IGZ1bmN0aW9uIChxdWVzdGlvbiwgZWwpIHtcbiAgICAgIHZhciAkZWwgPSAkKGVsKS5pcyhcIi53aWRnZXQtZGF0ZXBpY2tlclwiKVxuICAgICAgICA/ICQoZWwpXG4gICAgICAgIDogJChlbCkuZmluZChcIi53aWRnZXQtZGF0ZXBpY2tlclwiKTtcbiAgICAgICRlbC5kYXRlcGlja2VyKFwiZGVzdHJveVwiKTtcbiAgICB9LFxuICAgIHBkZlF1ZXN0aW9uVHlwZTogXCJ0ZXh0XCIsXG4gIH07XG5cbiAgU3VydmV5Lm1hdHJpeERyb3Bkb3duQ29sdW1uVHlwZXMuZGF0ZXBpY2tlciA9IHsgcHJvcGVydGllczogW1wicGxhY2VIb2xkZXJcIl0gfTtcbiAgU3VydmV5LkN1c3RvbVdpZGdldENvbGxlY3Rpb24uSW5zdGFuY2UuYWRkQ3VzdG9tV2lkZ2V0KHdpZGdldCwgXCJjdXN0b210eXBlXCIpO1xufVxuXG5pZiAodHlwZW9mIFN1cnZleSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICBpbml0KFN1cnZleSwgd2luZG93LiQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpbml0O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvanF1ZXJ5LXVpLWRhdGVwaWNrZXIuanNcbi8vIG1vZHVsZSBpZCA9IDVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDkiLCJpbXBvcnQgbm9VaVNsaWRlciBmcm9tIFwibm91aXNsaWRlclwiO1xuXG5mdW5jdGlvbiBpbml0KFN1cnZleSkge1xuICB2YXIgd2lkZ2V0ID0ge1xuICAgIG5hbWU6IFwibm91aXNsaWRlclwiLFxuICAgIHRpdGxlOiBcIm5vVWlTbGlkZXJcIixcbiAgICBpY29uTmFtZTogXCJpY29uLW5vdWlzbGlkZXJcIixcbiAgICB3aWRnZXRJc0xvYWRlZDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHR5cGVvZiBub1VpU2xpZGVyICE9IFwidW5kZWZpbmVkXCI7XG4gICAgfSxcbiAgICBpc0ZpdDogZnVuY3Rpb24gKHF1ZXN0aW9uKSB7XG4gICAgICByZXR1cm4gcXVlc3Rpb24uZ2V0VHlwZSgpID09PSBcIm5vdWlzbGlkZXJcIjtcbiAgICB9LFxuICAgIGh0bWxUZW1wbGF0ZTpcbiAgICAgIFwiPGRpdj48ZGl2PjwvZGl2PjwvZGl2PlwiLFxuICAgIGFjdGl2YXRlZEJ5Q2hhbmdlZDogZnVuY3Rpb24gKGFjdGl2YXRlZEJ5KSB7XG4gICAgICBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcIm5vdWlzbGlkZXJcIiwgW10sIG51bGwsIFwiZW1wdHlcIik7XG4gICAgICBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRQcm9wZXJ0aWVzKFwibm91aXNsaWRlclwiLCBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInN0ZXA6bnVtYmVyXCIsXG4gICAgICAgICAgY2F0ZWdvcnk6IFwic2xpZGVyXCIsXG4gICAgICAgICAgY2F0ZWdvcnlJbmRleDogMSxcbiAgICAgICAgICBkZWZhdWx0OiAxLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJyYW5nZU1pbjpudW1iZXJcIixcbiAgICAgICAgICBjYXRlZ29yeTogXCJzbGlkZXJcIixcbiAgICAgICAgICBkZWZhdWx0OiAwLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJyYW5nZU1heDpudW1iZXJcIixcbiAgICAgICAgICBjYXRlZ29yeTogXCJzbGlkZXJcIixcbiAgICAgICAgICBkZWZhdWx0OiAxMDAsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInBpcHNNb2RlXCIsXG4gICAgICAgICAgY2F0ZWdvcnk6IFwic2xpZGVyXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJwb3NpdGlvbnNcIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwicGlwc1ZhbHVlczppdGVtdmFsdWVzXCIsXG4gICAgICAgICAgY2F0ZWdvcnk6IFwic2xpZGVyXCIsXG4gICAgICAgICAgZGVmYXVsdDogWzAsIDI1LCA1MCwgNzUsIDEwMF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInBpcHNUZXh0Oml0ZW12YWx1ZXNcIixcbiAgICAgICAgICBjYXRlZ29yeTogXCJzbGlkZXJcIixcbiAgICAgICAgICBkZWZhdWx0OiBbMCwgMjUsIDUwLCA3NSwgMTAwXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwicGlwc0RlbnNpdHk6bnVtYmVyXCIsXG4gICAgICAgICAgY2F0ZWdvcnk6IFwic2xpZGVyXCIsXG4gICAgICAgICAgZGVmYXVsdDogNSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwib3JpZW50YXRpb25cIixcbiAgICAgICAgICBjYXRlZ29yeTogXCJzbGlkZXJcIixcbiAgICAgICAgICBkZWZhdWx0OiBcImhvcml6b250YWxcIixcbiAgICAgICAgICBjaG9pY2VzOiBbXCJob3Jpem9udGFsXCIsIFwidmVydGljYWxcIl1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiZGlyZWN0aW9uOnN0cmluZ1wiLFxuICAgICAgICAgIGNhdGVnb3J5OiBcInNsaWRlclwiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwibHRyXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInRvb2x0aXBzOmJvb2xlYW5cIixcbiAgICAgICAgICBjYXRlZ29yeTogXCJzbGlkZXJcIixcbiAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgXSk7XG4gICAgfSxcbiAgICBhZnRlclJlbmRlcjogZnVuY3Rpb24gKHF1ZXN0aW9uLCBlbCkge1xuICAgICAgZWwuc3R5bGUucGFkZGluZ0JvdHRvbSA9IFwiMTlweFwiO1xuICAgICAgZWwuc3R5bGUucGFkZGluZ0xlZnQgPSBcIjIwcHhcIjtcbiAgICAgIGVsLnN0eWxlLnBhZGRpbmdSaWdodCA9IFwiMjBweFwiO1xuICAgICAgZWwuc3R5bGUucGFkZGluZ1RvcCA9IFwiNDRweFwiO1xuICAgICAgZWwgPSBlbC5jaGlsZHJlblswXTtcbiAgICAgIGVsLnN0eWxlLm1hcmdpbkJvdHRvbSA9IFwiNjBweFwiO1xuICAgICAgaWYgKHF1ZXN0aW9uLm9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gXCIyNTBweFwiO1xuICAgICAgfVxuICAgICAgdmFyIHNsaWRlciA9IG5vVWlTbGlkZXIuY3JlYXRlKGVsLCB7XG4gICAgICAgIHN0YXJ0OiBxdWVzdGlvbi52YWx1ZSB8fCAocXVlc3Rpb24ucmFuZ2VNaW4gKyBxdWVzdGlvbi5yYW5nZU1heCkgLyAyLFxuICAgICAgICBjb25uZWN0OiBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICBzdGVwOiBxdWVzdGlvbi5zdGVwLFxuICAgICAgICB0b29sdGlwczogcXVlc3Rpb24udG9vbHRpcHMsXG4gICAgICAgIHBpcHM6IHtcbiAgICAgICAgICBtb2RlOiBxdWVzdGlvbi5waXBzTW9kZSB8fCBcInBvc2l0aW9uc1wiLFxuICAgICAgICAgIHZhbHVlczogcXVlc3Rpb24ucGlwc1ZhbHVlcy5tYXAoZnVuY3Rpb24gKHBWYWwpIHtcbiAgICAgICAgICAgIHZhciBwaXBWYWx1ZSA9IHBWYWw7XG4gICAgICAgICAgICBpZiAocFZhbC52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHBpcFZhbHVlID0gcFZhbC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludChwaXBWYWx1ZSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgZGVuc2l0eTogcXVlc3Rpb24ucGlwc0RlbnNpdHkgfHwgNSxcbiAgICAgICAgICBmb3JtYXQ6IHtcbiAgICAgICAgICAgIHRvOiBmdW5jdGlvbiAocFZhbCkge1xuICAgICAgICAgICAgICB2YXIgcGlwVGV4dCA9IHBWYWw7XG4gICAgICAgICAgICAgIHF1ZXN0aW9uLnBpcHNUZXh0Lm1hcChmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgICAgICAgICBpZiAoZWwudGV4dCAhPT0gdW5kZWZpbmVkICYmIHBWYWwgPT09IGVsLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICBwaXBUZXh0ID0gZWwudGV4dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXR1cm4gcGlwVGV4dDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgcmFuZ2U6IHtcbiAgICAgICAgICBtaW46IHF1ZXN0aW9uLnJhbmdlTWluLFxuICAgICAgICAgIG1heDogcXVlc3Rpb24ucmFuZ2VNYXgsXG4gICAgICAgIH0sXG4gICAgICAgIG9yaWVudGF0aW9uOiBxdWVzdGlvbi5vcmllbnRhdGlvbixcbiAgICAgICAgZGlyZWN0aW9uOiBxdWVzdGlvbi5kaXJlY3Rpb24sXG4gICAgICB9KTtcbiAgICAgIHNsaWRlci5vbihcImNoYW5nZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHF1ZXN0aW9uLnZhbHVlID0gTnVtYmVyKHNsaWRlci5nZXQoKSk7XG4gICAgICB9KTtcbiAgICAgIHZhciB1cGRhdGVWYWx1ZUhhbmRsZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNsaWRlci5zZXQocXVlc3Rpb24udmFsdWUpO1xuICAgICAgfTtcbiAgICAgIGlmIChxdWVzdGlvbi5pc1JlYWRPbmx5KSB7XG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsIHRydWUpO1xuICAgICAgfVxuICAgICAgdXBkYXRlVmFsdWVIYW5kbGVyKCk7XG4gICAgICBxdWVzdGlvbi5ub1VpU2xpZGVyID0gc2xpZGVyO1xuICAgICAgcXVlc3Rpb24udmFsdWVDaGFuZ2VkQ2FsbGJhY2sgPSB1cGRhdGVWYWx1ZUhhbmRsZXI7XG4gICAgICBxdWVzdGlvbi5yZWFkT25seUNoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHF1ZXN0aW9uLmlzUmVhZE9ubHkpIHtcbiAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9LFxuICAgIHdpbGxVbm1vdW50OiBmdW5jdGlvbiAocXVlc3Rpb24sIGVsKSB7XG4gICAgICBpZiAoISFxdWVzdGlvbi5ub1VpU2xpZGVyKSB7XG4gICAgICAgIHF1ZXN0aW9uLm5vVWlTbGlkZXIuZGVzdHJveSgpO1xuICAgICAgICBxdWVzdGlvbi5ub1VpU2xpZGVyID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHF1ZXN0aW9uLnJlYWRPbmx5Q2hhbmdlZENhbGxiYWNrID0gbnVsbDtcbiAgICB9LFxuICAgIHBkZlJlbmRlcjogZnVuY3Rpb24gKF8sIG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLnF1ZXN0aW9uLmdldFR5cGUoKSA9PT0gXCJub3Vpc2xpZGVyXCIpIHtcbiAgICAgICAgdmFyIHBvaW50ID0gb3B0aW9ucy5tb2R1bGUuU3VydmV5SGVscGVyLmNyZWF0ZVBvaW50KFxuICAgICAgICAgIG9wdGlvbnMubW9kdWxlLlN1cnZleUhlbHBlci5tZXJnZVJlY3RzLmFwcGx5KG51bGwsIG9wdGlvbnMuYnJpY2tzKVxuICAgICAgICApO1xuICAgICAgICBwb2ludC54TGVmdCArPSBvcHRpb25zLmNvbnRyb2xsZXIudW5pdFdpZHRoO1xuICAgICAgICBwb2ludC55VG9wICs9XG4gICAgICAgICAgb3B0aW9ucy5jb250cm9sbGVyLnVuaXRIZWlnaHQgKlxuICAgICAgICAgIG9wdGlvbnMubW9kdWxlLkZsYXRRdWVzdGlvbi5DT05URU5UX0dBUF9WRVJUX1NDQUxFO1xuICAgICAgICB2YXIgcmVjdCA9IG9wdGlvbnMubW9kdWxlLlN1cnZleUhlbHBlci5jcmVhdGVUZXh0RmllbGRSZWN0KFxuICAgICAgICAgIHBvaW50LFxuICAgICAgICAgIG9wdGlvbnMuY29udHJvbGxlclxuICAgICAgICApO1xuICAgICAgICB2YXIgdGV4dGJveEJyaWNrID0gbmV3IG9wdGlvbnMubW9kdWxlLlRleHRGaWVsZEJyaWNrKFxuICAgICAgICAgIG9wdGlvbnMucXVlc3Rpb24sXG4gICAgICAgICAgb3B0aW9ucy5jb250cm9sbGVyLFxuICAgICAgICAgIHJlY3QsXG4gICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICBvcHRpb25zLnF1ZXN0aW9uLmlkLFxuICAgICAgICAgIG9wdGlvbnMucXVlc3Rpb24udmFsdWUgfHwgb3B0aW9ucy5xdWVzdGlvbi5kZWZhdWx0VmFsdWUgfHwgXCJcIixcbiAgICAgICAgICBcIlwiLFxuICAgICAgICAgIG9wdGlvbnMucXVlc3Rpb24uaXNSZWFkT25seSxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICBcInRleHRcIlxuICAgICAgICApO1xuICAgICAgICBvcHRpb25zLmJyaWNrcy5wdXNoKHRleHRib3hCcmljayk7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcblxuICBTdXJ2ZXkuQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvbi5JbnN0YW5jZS5hZGRDdXN0b21XaWRnZXQod2lkZ2V0LCBcImN1c3RvbXR5cGVcIik7XG59XG5cbmlmICh0eXBlb2YgU3VydmV5ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gIGluaXQoU3VydmV5KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaW5pdDtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL25vdWlzbGlkZXIuanNcbi8vIG1vZHVsZSBpZCA9IDZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDMiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfN19fO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcInJvb3RcIjpcIm5vVWlTbGlkZXJcIixcImNvbW1vbmpzMlwiOlwibm91aXNsaWRlclwiLFwiY29tbW9uanNcIjpcIm5vdWlzbGlkZXJcIixcImFtZFwiOlwibm91aXNsaWRlclwifVxuLy8gbW9kdWxlIGlkID0gN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAgMyIsImZ1bmN0aW9uIGluaXQoU3VydmV5LCAkKSB7XG4gICQgPSAkIHx8IHdpbmRvdy4kO1xuICB2YXIgd2lkZ2V0ID0ge1xuICAgIG5hbWU6IFwidGFnYm94XCIsXG4gICAgdGl0bGU6IFwiVGFnIGJveFwiLFxuICAgIGljb25OYW1lOiBcImljb24tdGFnYm94XCIsXG4gICAgd2lkZ2V0SXNMb2FkZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgJCA9PSBcImZ1bmN0aW9uXCIgJiYgISEkLmZuLnNlbGVjdDI7XG4gICAgfSxcbiAgICBkZWZhdWx0SlNPTjoge1xuICAgICAgY2hvaWNlczogW1wiSXRlbSAxXCIsIFwiSXRlbSAyXCIsIFwiSXRlbSAzXCJdLFxuICAgIH0sXG4gICAgaHRtbFRlbXBsYXRlOlxuICAgICAgXCI8ZGl2PjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJyBzdHlsZT0nd2lkdGg6IDEwMCU7Jz48L3NlbGVjdD48dGV4dGFyZWE+PC90ZXh0YXJlYT48L2Rpdj5cIixcbiAgICBpc0ZpdDogZnVuY3Rpb24gKHF1ZXN0aW9uKSB7XG4gICAgICByZXR1cm4gcXVlc3Rpb24uZ2V0VHlwZSgpID09PSBcInRhZ2JveFwiO1xuICAgIH0sXG4gICAgYWN0aXZhdGVkQnlDaGFuZ2VkOiBmdW5jdGlvbiAoYWN0aXZhdGVkQnkpIHtcbiAgICAgIFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFxuICAgICAgICBcInRhZ2JveFwiLFxuICAgICAgICBbXG4gICAgICAgICAgeyBuYW1lOiBcImhhc090aGVyOmJvb2xlYW5cIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICAgICAgICB7IG5hbWU6IFwiaGFzU2VsZWN0QWxsOmJvb2xlYW5cIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICAgICAgICB7IG5hbWU6IFwiaGFzTm9uZTpib29sZWFuXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgICAgICAgeyBuYW1lOiBcIm90aGVyVGV4dFwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgICAgICAgIHsgbmFtZTogXCJzZWxlY3RBbGxUZXh0XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgICAgICAgeyBuYW1lOiBcIm5vbmVUZXh0XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG51bGwsXG4gICAgICAgIFwiY2hlY2tib3hcIlxuICAgICAgKTtcbiAgICAgIFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZFByb3BlcnR5KFwidGFnYm94XCIsIHtcbiAgICAgICAgbmFtZTogXCJzZWxlY3QyQ29uZmlnXCIsXG4gICAgICAgIGNhdGVnb3J5OiBcImdlbmVyYWxcIixcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIH0pO1xuICAgICAgU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuYWRkUHJvcGVydHkoXCJ0YWdib3hcIiwge1xuICAgICAgICBuYW1lOiBcInBsYWNlaG9sZGVyXCIsXG4gICAgICAgIGNhdGVnb3J5OiBcImdlbmVyYWxcIixcbiAgICAgICAgZGVmYXVsdDogXCJcIixcbiAgICAgIH0pO1xuICAgICAgU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuYWRkUHJvcGVydHkoXCJ0YWdib3hcIiwge1xuICAgICAgICBuYW1lOiBcImFsbG93QWRkTmV3VGFnOmJvb2xlYW5cIixcbiAgICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgU3VydmV5Lm1hdHJpeERyb3Bkb3duQ29sdW1uVHlwZXMudGFnYm94ID0ge1xuICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgXCJjaG9pY2VzXCIsXG4gICAgICAgICAgXCJjaG9pY2VzT3JkZXJcIixcbiAgICAgICAgICBcImNob2ljZXNCeVVybFwiLFxuICAgICAgICAgIFwib3B0aW9uc0NhcHRpb25cIixcbiAgICAgICAgICBcIm90aGVyVGV4dFwiLFxuICAgICAgICAgIFwiY2hvaWNlc1Zpc2libGVJZlwiLFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9LFxuICAgIGZpeFN0eWxlczogZnVuY3Rpb24gKGVsKSB7XG4gICAgICBlbC5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuc2VsZWN0Mi1zZWFyY2hfX2ZpZWxkXCIpLnN0eWxlLmJvcmRlciA9XG4gICAgICAgIFwibm9uZVwiO1xuICAgIH0sXG4gICAgYWZ0ZXJSZW5kZXI6IGZ1bmN0aW9uIChxdWVzdGlvbiwgZWwpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIHZhciBzZWxlY3QyQ29uZmlnID0gcXVlc3Rpb24uc2VsZWN0MkNvbmZpZztcbiAgICAgIHZhciBzZXR0aW5ncyA9XG4gICAgICAgIHNlbGVjdDJDb25maWcgJiYgdHlwZW9mIHNlbGVjdDJDb25maWcgPT0gXCJzdHJpbmdcIlxuICAgICAgICAgID8gSlNPTi5wYXJzZShzZWxlY3QyQ29uZmlnKVxuICAgICAgICAgIDogc2VsZWN0MkNvbmZpZztcbiAgICAgIHZhciAkZWwgPSAkKGVsKS5pcyhcInNlbGVjdFwiKSA/ICQoZWwpIDogJChlbCkuZmluZChcInNlbGVjdFwiKTtcblxuICAgICAgc2VsZi53aWxsVW5tb3VudChxdWVzdGlvbiwgZWwpO1xuXG4gICAgICBpZiAoIXNldHRpbmdzKSBzZXR0aW5ncyA9IHt9O1xuICAgICAgc2V0dGluZ3MucGxhY2Vob2xkZXIgPSBxdWVzdGlvbi5wbGFjZWhvbGRlcjtcbiAgICAgIHNldHRpbmdzLnRhZ3MgPSBxdWVzdGlvbi5hbGxvd0FkZE5ld1RhZztcbiAgICAgIHNldHRpbmdzLmRpc2FibGVkID0gcXVlc3Rpb24uaXNSZWFkT25seTtcbiAgICAgIHNldHRpbmdzLnRoZW1lID0gXCJjbGFzc2ljXCI7XG4gICAgICBpZiAoISFxdWVzdGlvbi5tYXhTZWxlY3RlZENob2ljZXMpIHtcbiAgICAgICAgc2V0dGluZ3MubWF4aW11bVNlbGVjdGlvbkxlbmd0aCA9IHF1ZXN0aW9uLm1heFNlbGVjdGVkQ2hvaWNlcztcbiAgICAgIH1cblxuICAgICAgJGVsLnNlbGVjdDIoc2V0dGluZ3MpO1xuXG4gICAgICB2YXIgJG90aGVyRWxlbWVudCA9ICQoZWwpLmZpbmQoXCJ0ZXh0YXJlYVwiKTtcbiAgICAgIGlmIChcbiAgICAgICAgISFxdWVzdGlvbi5zdXJ2ZXkgJiZcbiAgICAgICAgISFxdWVzdGlvbi5zdXJ2ZXkuY3NzICYmXG4gICAgICAgICEhcXVlc3Rpb24uc3VydmV5LmNzcy5jaGVja2JveFxuICAgICAgKSB7XG4gICAgICAgICRvdGhlckVsZW1lbnQuYWRkQ2xhc3MocXVlc3Rpb24uc3VydmV5LmNzcy5jaGVja2JveC5vdGhlcik7XG4gICAgICB9XG4gICAgICAkb3RoZXJFbGVtZW50LnBsYWNlaG9sZGVyID0gcXVlc3Rpb24ub3RoZXJQbGFjZUhvbGRlcjtcbiAgICAgICRvdGhlckVsZW1lbnQuYmluZChcImlucHV0IHByb3BlcnR5Y2hhbmdlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcXVlc3Rpb24uY29tbWVudCA9ICRvdGhlckVsZW1lbnQudmFsKCk7XG4gICAgICB9KTtcbiAgICAgIHZhciB1cGRhdGVDb21tZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAkb3RoZXJFbGVtZW50LnZhbChxdWVzdGlvbi5jb21tZW50KTtcbiAgICAgICAgaWYgKHF1ZXN0aW9uLmlzT3RoZXJTZWxlY3RlZCkge1xuICAgICAgICAgICRvdGhlckVsZW1lbnQuc2hvdygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICRvdGhlckVsZW1lbnQuaGlkZSgpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBzZWxmLmZpeFN0eWxlcyhlbCk7XG4gICAgICB2YXIgcXVlc3Rpb247XG4gICAgICB2YXIgdXBkYXRlVmFsdWVIYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAocXVlc3Rpb24uaGFzU2VsZWN0QWxsICYmIHF1ZXN0aW9uLmlzQWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAkZWxcbiAgICAgICAgICAgIC52YWwoW3F1ZXN0aW9uLnNlbGVjdEFsbEl0ZW1WYWx1ZS52YWx1ZV0uY29uY2F0KHF1ZXN0aW9uLnZhbHVlKSlcbiAgICAgICAgICAgIC50cmlnZ2VyKFwiY2hhbmdlXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICRlbC52YWwocXVlc3Rpb24udmFsdWUpLnRyaWdnZXIoXCJjaGFuZ2VcIik7XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5maXhTdHlsZXMoZWwpO1xuICAgICAgICB1cGRhdGVDb21tZW50KCk7XG4gICAgICB9O1xuICAgICAgdmFyIHVwZGF0ZUNob2ljZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICRlbC5zZWxlY3QyKCkuZW1wdHkoKTtcbiAgICAgICAgaWYgKHNldHRpbmdzLmFqYXgpIHtcbiAgICAgICAgICAkZWwuc2VsZWN0MihzZXR0aW5ncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0dGluZ3MuZGF0YSA9IHF1ZXN0aW9uLnZpc2libGVDaG9pY2VzLm1hcChmdW5jdGlvbiAoY2hvaWNlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBpZDogY2hvaWNlLnZhbHVlLFxuICAgICAgICAgICAgICB0ZXh0OiBjaG9pY2UudGV4dCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgJGVsLnNlbGVjdDIoc2V0dGluZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZVZhbHVlSGFuZGxlcigpO1xuICAgICAgfTtcbiAgICAgIHZhciBpc0FsbEl0ZW1TZWxlY3RlZCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHF1ZXN0aW9uLmhhc1NlbGVjdEFsbCAmJiB2YWx1ZSA9PT0gcXVlc3Rpb24uc2VsZWN0QWxsSXRlbVZhbHVlLnZhbHVlXG4gICAgICAgICk7XG4gICAgICB9O1xuICAgICAgcXVlc3Rpb24uX3Byb3BlcnR5VmFsdWVDaGFuZ2VkRm5TZWxlY3QyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB1cGRhdGVDaG9pY2VzKCk7XG4gICAgICB9O1xuXG4gICAgICAkb3RoZXJFbGVtZW50LnByb3AoXCJkaXNhYmxlZFwiLCBxdWVzdGlvbi5pc1JlYWRPbmx5KTtcbiAgICAgIHF1ZXN0aW9uLnJlYWRPbmx5Q2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAkZWwucHJvcChcImRpc2FibGVkXCIsIHF1ZXN0aW9uLmlzUmVhZE9ubHkpO1xuICAgICAgICAkb3RoZXJFbGVtZW50LnByb3AoXCJkaXNhYmxlZFwiLCBxdWVzdGlvbi5pc1JlYWRPbmx5KTtcbiAgICAgIH07XG4gICAgICBxdWVzdGlvbi5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcbiAgICAgICAgXCJ2aXNpYmxlQ2hvaWNlc1wiLFxuICAgICAgICBxdWVzdGlvbi5fcHJvcGVydHlWYWx1ZUNoYW5nZWRGblNlbGVjdDJcbiAgICAgICk7XG4gICAgICBxdWVzdGlvbi52YWx1ZUNoYW5nZWRDYWxsYmFjayA9IHVwZGF0ZVZhbHVlSGFuZGxlcjtcbiAgICAgICRlbC5vbihcInNlbGVjdDI6c2VsZWN0XCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGlmIChpc0FsbEl0ZW1TZWxlY3RlZChlLnBhcmFtcy5kYXRhLmlkKSkge1xuICAgICAgICAgIHF1ZXN0aW9uLnNlbGVjdEFsbCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHF1ZXN0aW9uLnZhbHVlID0gKHF1ZXN0aW9uLnZhbHVlIHx8IFtdKS5jb25jYXQoZS5wYXJhbXMuZGF0YS5pZCk7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlQ29tbWVudCgpO1xuICAgICAgfSk7XG4gICAgICAkZWwub24oXCJzZWxlY3QyOnVuc2VsZWN0XCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdDJWYWwgPSBlLnBhcmFtcy5kYXRhLmlkO1xuICAgICAgICBpZiAoaXNBbGxJdGVtU2VsZWN0ZWQoc2VsZWN0MlZhbCkpIHtcbiAgICAgICAgICBxdWVzdGlvbi5jbGVhclZhbHVlKCk7XG4gICAgICAgIH0gZWxzZSB7ICAgICAgICBcbiAgICAgICAgICBjb25zdCB2YWwgPSBbXS5jb25jYXQocXVlc3Rpb24udmFsdWUpO1xuICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkgKyspIHtcbiAgICAgICAgICAgICAgaWYodmFsW2ldID09IHNlbGVjdDJWYWwgfHwgKCEhdmFsW2ldICYmIHZhbFtpXS50b1N0cmluZygpID09IHNlbGVjdDJWYWwpKSB7XG4gICAgICAgICAgICAgICAgdmFsLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICBxdWVzdGlvbi52YWx1ZSA9IHZhbDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVDb21tZW50KCk7XG4gICAgICB9KTtcbiAgICAgIHVwZGF0ZUNob2ljZXMoKTtcbiAgICB9LFxuICAgIHdpbGxVbm1vdW50OiBmdW5jdGlvbiAocXVlc3Rpb24sIGVsKSB7XG4gICAgICBpZiAoIXF1ZXN0aW9uLl9wcm9wZXJ0eVZhbHVlQ2hhbmdlZEZuU2VsZWN0MikgcmV0dXJuO1xuXG4gICAgICB2YXIgJHNlbGVjdDIgPSAkKGVsKS5maW5kKFwic2VsZWN0XCIpO1xuICAgICAgaWYgKCEhJHNlbGVjdDIuZGF0YShcInNlbGVjdDJcIikpIHtcbiAgICAgICAgJHNlbGVjdDIub2ZmKFwic2VsZWN0MjpzZWxlY3RcIikuc2VsZWN0MihcImRlc3Ryb3lcIik7XG4gICAgICB9XG4gICAgICBxdWVzdGlvbi5yZWFkT25seUNoYW5nZWRDYWxsYmFjayA9IG51bGw7XG4gICAgICBxdWVzdGlvbi52YWx1ZUNoYW5nZWRDYWxsYmFjayA9IG51bGw7XG4gICAgICBxdWVzdGlvbi51blJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFxuICAgICAgICBcInZpc2libGVDaG9pY2VzXCIsXG4gICAgICAgIHF1ZXN0aW9uLl9wcm9wZXJ0eVZhbHVlQ2hhbmdlZEZuU2VsZWN0MlxuICAgICAgKTtcbiAgICAgIHF1ZXN0aW9uLl9wcm9wZXJ0eVZhbHVlQ2hhbmdlZEZuU2VsZWN0MiA9IHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIHBkZlF1ZXN0aW9uVHlwZTogXCJjaGVja2JveFwiLFxuICB9O1xuXG4gIFN1cnZleS5DdXN0b21XaWRnZXRDb2xsZWN0aW9uLkluc3RhbmNlLmFkZEN1c3RvbVdpZGdldCh3aWRnZXQsIFwiY3VzdG9tdHlwZVwiKTtcbn1cblxuaWYgKHR5cGVvZiBTdXJ2ZXkgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgaW5pdChTdXJ2ZXksIHdpbmRvdy4kKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaW5pdDtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL3NlbGVjdDItdGFnYm94LmpzXG4vLyBtb2R1bGUgaWQgPSA4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCA3IiwiaW1wb3J0IFNvcnRhYmxlIGZyb20gXCJzb3J0YWJsZWpzXCI7XG5cbmZ1bmN0aW9uIGluaXQoU3VydmV5KSB7XG4gIHZhciB3aWRnZXQgPSB7XG4gICAgbmFtZTogXCJzb3J0YWJsZWxpc3RcIixcbiAgICB0aXRsZTogXCJTb3J0YWJsZSBsaXN0XCIsXG4gICAgaWNvbk5hbWU6IFwiaWNvbi1zb3J0YWJsZWpzXCIsXG4gICAgd2lkZ2V0SXNMb2FkZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgU29ydGFibGUgIT0gXCJ1bmRlZmluZWRcIjtcbiAgICB9LFxuICAgIGRlZmF1bHRKU09OOiB7IGNob2ljZXM6IFtcIkl0ZW0gMVwiLCBcIkl0ZW0gMlwiLCBcIkl0ZW0gM1wiXSB9LFxuICAgIHJvb3RTdHlsZTogXCJ3aWR0aDoxMDAlOlwiLFxuICAgIGFyZWFTdHlsZTpcbiAgICAgIFwiYm9yZGVyOiAxcHggc29saWQgIzFhYjM5NDsgd2lkdGg6MTAwJTsgbWluLWhlaWdodDo1MHB4OyBtYXJnaW4tdG9wOjEwcHg7XCIsXG4gICAgaXRlbVN0eWxlOiBcImJhY2tncm91bmQtY29sb3I6IzFhYjM5NDtjb2xvcjojZmZmO21hcmdpbjo1cHg7cGFkZGluZzoxMHB4O1wiLFxuICAgIGlzRml0OiBmdW5jdGlvbiAocXVlc3Rpb24pIHtcbiAgICAgIHJldHVybiBxdWVzdGlvbi5nZXRUeXBlKCkgPT09IFwic29ydGFibGVsaXN0XCI7XG4gICAgfSxcbiAgICBodG1sVGVtcGxhdGU6IFwiPGRpdj48L2Rpdj5cIixcbiAgICBhY3RpdmF0ZWRCeUNoYW5nZWQ6IGZ1bmN0aW9uIChhY3RpdmF0ZWRCeSkge1xuICAgICAgU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXG4gICAgICAgIFwic29ydGFibGVsaXN0XCIsXG4gICAgICAgIFtcbiAgICAgICAgICB7IG5hbWU6IFwiaGFzT3RoZXJcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICAgICAgICB7IG5hbWU6IFwic3RvcmVPdGhlcnNBc0NvbW1lbnRcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICAgICAgICB7IG5hbWU6IFwiaGFzTm9uZVwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgICAgICAgIHsgbmFtZTogXCJyZW5kZXJBc1wiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgICAgICAgIHsgbmFtZTogXCJjaGVja2JveENsYXNzXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgICAgICAgeyBuYW1lOiBcImhhc1NlbGVjdEFsbFwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgICAgICAgIHsgbmFtZTogXCJub25lVGV4dFwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgICAgICAgIHsgbmFtZTogXCJzZWxlY3RBbGxUZXh0XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG51bGwsXG4gICAgICAgIFwiY2hlY2tib3hcIlxuICAgICAgKTtcbiAgICAgIFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZFByb3BlcnR5KFwic29ydGFibGVsaXN0XCIsIHtcbiAgICAgICAgbmFtZTogXCJlbXB0eVRleHRcIixcbiAgICAgICAgZGVmYXVsdDogXCJNb3ZlIGl0ZW1zIGhlcmUuXCIsXG4gICAgICAgIGNhdGVnb3J5OiBcImdlbmVyYWxcIixcbiAgICAgIH0pO1xuICAgICAgU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuYWRkUHJvcGVydHkoXCJzb3J0YWJsZWxpc3RcIiwge1xuICAgICAgICBuYW1lOiBcInVzZURlZmF1bHRUaGVtZTpzd2l0Y2hcIixcbiAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgfSk7XG4gICAgICBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRQcm9wZXJ0eShcInNvcnRhYmxlbGlzdFwiLCB7XG4gICAgICAgIG5hbWU6IFwibWF4QW5zd2Vyc0NvdW50Om51bWJlclwiLFxuICAgICAgICBkZWZhdWx0OiAtMSxcbiAgICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBhZnRlclJlbmRlcjogZnVuY3Rpb24gKHF1ZXN0aW9uLCBlbCkge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgICBpZiAoIXF1ZXN0aW9uLnVzZURlZmF1bHRUaGVtZSkge1xuICAgICAgICBzZWxmLnJvb3RTdHlsZSA9IFwiXCI7XG4gICAgICAgIHNlbGYuaXRlbVN0eWxlID0gXCJcIjtcbiAgICAgICAgc2VsZi5hcmVhU3R5bGUgPSBcIlwiO1xuICAgICAgfVxuICAgICAgZWwuc3R5bGUuY3NzVGV4dCA9IHNlbGYucm9vdFN0eWxlO1xuICAgICAgZWwuY2xhc3NOYW1lID0gXCJzanMtc29ydGFibGVqcy1yb290XCI7XG4gICAgICB2YXIgc291cmNlLCByZXN1bHQ7XG4gICAgICB2YXIgcmVzdWx0RWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgdmFyIGVtcHR5RWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcbiAgICAgIHZhciBzb3VyY2VFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgICAgIHJlc3VsdEVsLnN0eWxlLmNzc1RleHQgPSBzZWxmLmFyZWFTdHlsZTtcbiAgICAgIHJlc3VsdEVsLnN0eWxlLmJveFNpemluZyA9IFwiYm9yZGVyLWJveFwiO1xuICAgICAgcmVzdWx0RWwuY2xhc3NOYW1lID0gXCJzanMtc29ydGFibGVqcy1yZXN1bHRcIjtcblxuICAgICAgZW1wdHlFbC5pbm5lckhUTUwgPSBxdWVzdGlvbi5lbXB0eVRleHQ7XG4gICAgICByZXN1bHRFbC5hcHBlbmRDaGlsZChlbXB0eUVsKTtcblxuICAgICAgc291cmNlRWwuc3R5bGUuY3NzVGV4dCA9IHNlbGYuYXJlYVN0eWxlO1xuICAgICAgc291cmNlRWwuc3R5bGUuYm94U2l6aW5nID0gXCJib3JkZXItYm94XCI7XG4gICAgICBzb3VyY2VFbC5jbGFzc05hbWUgPSBcInNqcy1zb3J0YWJsZWpzLXNvdXJjZVwiO1xuICAgICAgZWwuYXBwZW5kQ2hpbGQocmVzdWx0RWwpO1xuICAgICAgZWwuYXBwZW5kQ2hpbGQoc291cmNlRWwpO1xuICAgICAgdmFyIGhhc1ZhbHVlSW5SZXN1bHRzID0gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICB2YXIgcmVzID0gcXVlc3Rpb24udmFsdWU7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyZXMpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHJlc1tpXSA9PSB2YWwpIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH07XG4gICAgICB2YXIgYWRkQ2hvaWNlVG9XaWRnZXQgPSBmdW5jdGlvbiAoY2hvaWNlLCBpblJlc3VsdHMpIHtcbiAgICAgICAgdmFyIHNyY0VsID0gaW5SZXN1bHRzID8gcmVzdWx0RWwgOiBzb3VyY2VFbDtcbiAgICAgICAgdmFyIG5ld0VsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgbmV3RWwuY2xhc3NOYW1lID0gXCJzanMtc29ydGFibGVqcy1pdGVtXCI7XG4gICAgICAgIG5ld0VsLnN0eWxlLmNzc1RleHQgPSBzZWxmLml0ZW1TdHlsZTtcbiAgICAgICAgbmV3RWwuaW5uZXJUZXh0ID0gY2hvaWNlLnRleHQ7XG4gICAgICAgIG5ld0VsLmRhdGFzZXRbXCJ2YWx1ZVwiXSA9IGNob2ljZS52YWx1ZTtcbiAgICAgICAgc3JjRWwuYXBwZW5kQ2hpbGQobmV3RWwpO1xuICAgICAgICBjaG9pY2Uub25Qcm9wZXJ0eUNoYW5nZWQuYWRkKGZ1bmN0aW9uIChzZW5kZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgICBuZXdFbC5pbm5lclRleHQgPSBzZW5kZXIudGV4dDtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgdmFyIGdldENob2ljZXNOb3RJblJlc3VsdHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciByZXMgPSBbXTtcbiAgICAgICAgcXVlc3Rpb24udmlzaWJsZUNob2ljZXMuZm9yRWFjaChmdW5jdGlvbiAoY2hvaWNlKSB7XG4gICAgICAgICAgaWYgKCFoYXNWYWx1ZUluUmVzdWx0cyhjaG9pY2UudmFsdWUpKSB7XG4gICAgICAgICAgICByZXMucHVzaChjaG9pY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9O1xuICAgICAgdmFyIGdldENob2ljZXNJblJlc3VsdHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciByZXMgPSBbXTtcbiAgICAgICAgdmFyIHZhbCA9IHF1ZXN0aW9uLnZhbHVlO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSkgcmV0dXJuIHJlcztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgaXRlbSA9IFN1cnZleS5JdGVtVmFsdWUuZ2V0SXRlbUJ5VmFsdWUoXG4gICAgICAgICAgICBxdWVzdGlvbi52aXNpYmxlQ2hvaWNlcyxcbiAgICAgICAgICAgIHZhbFtpXVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCEhaXRlbSkge1xuICAgICAgICAgICAgcmVzLnB1c2goaXRlbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9O1xuICAgICAgdmFyIGlzVXBkYXRpbmdRdWVzdGlvblZhbHVlID0gZmFsc2U7XG4gICAgICB2YXIgdXBkYXRlVmFsdWVIYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoaXNVcGRhdGluZ1F1ZXN0aW9uVmFsdWUpIHJldHVybjtcbiAgICAgICAgcmVzdWx0RWwuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgcmVzdWx0RWwuYXBwZW5kQ2hpbGQoZW1wdHlFbCk7XG4gICAgICAgIHNvdXJjZUVsLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIHZhciBub3RJblJlc3VsdHMgPSBnZXRDaG9pY2VzTm90SW5SZXN1bHRzKCk7XG4gICAgICAgIHZhciBpblJlc3VsdHMgPSBnZXRDaG9pY2VzSW5SZXN1bHRzKCk7XG4gICAgICAgIGVtcHR5RWwuc3R5bGUuZGlzcGxheSA9IGluUmVzdWx0cy5sZW5ndGggPiAwID8gXCJub25lXCIgOiBcIlwiO1xuICAgICAgICBpblJlc3VsdHMuZm9yRWFjaChmdW5jdGlvbiAoY2hvaWNlKSB7XG4gICAgICAgICAgYWRkQ2hvaWNlVG9XaWRnZXQoY2hvaWNlLCB0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG5vdEluUmVzdWx0cy5mb3JFYWNoKGZ1bmN0aW9uIChjaG9pY2UpIHtcbiAgICAgICAgICBhZGRDaG9pY2VUb1dpZGdldChjaG9pY2UsIGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgcmVzdWx0ID0gcXVlc3Rpb24ucmVzdWx0RWwgPSBTb3J0YWJsZS5jcmVhdGUocmVzdWx0RWwsIHtcbiAgICAgICAgYW5pbWF0aW9uOiAxNTAsXG4gICAgICAgIGRpc2FibGVkOiBxdWVzdGlvbi5pc1JlYWRPbmx5LFxuICAgICAgICBncm91cDoge1xuICAgICAgICAgIG5hbWU6IHF1ZXN0aW9uLm5hbWUsXG4gICAgICAgICAgcHV0OiBmdW5jdGlvbiAodG8sIGZyb20pIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIHRvLm9wdGlvbnMuZ3JvdXAgJiYgZnJvbS5vcHRpb25zLmdyb3VwICYmIHRvLm9wdGlvbnMuZ3JvdXAubmFtZSA9PT0gZnJvbS5vcHRpb25zLmdyb3VwLm5hbWUgJiZcbiAgICAgICAgICAgICAgKHF1ZXN0aW9uLm1heEFuc3dlcnNDb3VudCA8IDAgfHxcbiAgICAgICAgICAgICAgdG8uZWwuY2hpbGRyZW4ubGVuZ3RoIDw9IHF1ZXN0aW9uLm1heEFuc3dlcnNDb3VudClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgb25Tb3J0OiBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgICAgIGlmIChyZXN1bHRFbC5jaGlsZHJlbi5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGVtcHR5RWwuc3R5bGUuZGlzcGxheSA9IFwiXCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVtcHR5RWwuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRFbC5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc3VsdEVsLmNoaWxkcmVuW2ldLmRhdGFzZXQudmFsdWUgPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHJlc3VsdEVsLmNoaWxkcmVuW2ldLmRhdGFzZXQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpc1VwZGF0aW5nUXVlc3Rpb25WYWx1ZSA9IHRydWU7XG4gICAgICAgICAgcXVlc3Rpb24udmFsdWUgPSByZXN1bHQ7XG4gICAgICAgICAgaXNVcGRhdGluZ1F1ZXN0aW9uVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgc291cmNlID0gcXVlc3Rpb24uc291cmNlRWwgPSBTb3J0YWJsZS5jcmVhdGUoc291cmNlRWwsIHtcbiAgICAgICAgYW5pbWF0aW9uOiAxNTAsXG4gICAgICAgIGRpc2FibGVkOiBxdWVzdGlvbi5pc1JlYWRPbmx5LFxuICAgICAgICBncm91cDogcXVlc3Rpb24ubmFtZSxcbiAgICAgIH0pO1xuICAgICAgcXVlc3Rpb24udmFsdWVDaGFuZ2VkQ2FsbGJhY2sgPSB1cGRhdGVWYWx1ZUhhbmRsZXI7XG4gICAgICBxdWVzdGlvbi5vblByb3BlcnR5Q2hhbmdlZC5hZGQoZnVuY3Rpb24gKHNlbmRlciwgb3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucy5uYW1lID09IFwiZW1wdHlUZXh0XCIpIHtcbiAgICAgICAgICBlbXB0eUVsLmlubmVySFRNTCA9IHF1ZXN0aW9uLmVtcHR5VGV4dDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBxdWVzdGlvbi5yZWFkT25seUNoYW5nZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHF1ZXN0aW9uLmlzUmVhZE9ubHkpIHtcbiAgICAgICAgICByZXN1bHQub3B0aW9ucy5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgc291cmNlLm9wdGlvbnMuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdC5vcHRpb25zLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgc291cmNlLm9wdGlvbnMuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHF1ZXN0aW9uLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFxuICAgICAgICBcInZpc2libGVDaG9pY2VzXCIsXG4gICAgICAgIHVwZGF0ZVZhbHVlSGFuZGxlclxuICAgICAgKTtcbiAgICAgIHVwZGF0ZVZhbHVlSGFuZGxlcigpO1xuICAgIH0sXG4gICAgd2lsbFVubW91bnQ6IGZ1bmN0aW9uIChxdWVzdGlvbiwgZWwpIHtcbiAgICAgIHF1ZXN0aW9uLnJlc3VsdEVsLmRlc3Ryb3koKTtcbiAgICAgIHF1ZXN0aW9uLnNvdXJjZUVsLmRlc3Ryb3koKTtcbiAgICAgIHF1ZXN0aW9uLnJlYWRPbmx5Q2hhbmdlZENhbGxiYWNrID0gbnVsbDtcbiAgICB9LFxuICAgIHBkZlF1ZXN0aW9uVHlwZTogXCJjaGVja2JveFwiLFxuICB9O1xuXG4gIFN1cnZleS5DdXN0b21XaWRnZXRDb2xsZWN0aW9uLkluc3RhbmNlLmFkZEN1c3RvbVdpZGdldCh3aWRnZXQsIFwiY3VzdG9tdHlwZVwiKTtcbn1cblxuaWYgKHR5cGVvZiBTdXJ2ZXkgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgaW5pdChTdXJ2ZXkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpbml0O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvc29ydGFibGVqcy5qc1xuLy8gbW9kdWxlIGlkID0gOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMiIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8xMF9fO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIHtcInJvb3RcIjpcIlNvcnRhYmxlXCIsXCJjb21tb25qczJcIjpcInNvcnRhYmxlanNcIixcImNvbW1vbmpzXCI6XCJzb3J0YWJsZWpzXCIsXCJhbWRcIjpcInNvcnRhYmxlanNcIn1cbi8vIG1vZHVsZSBpZCA9IDEwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAyIiwiZnVuY3Rpb24gaW5pdChTdXJ2ZXkpIHtcbiAgdmFyIHdpZGdldCA9IHtcbiAgICBuYW1lOiBcImVkaXRvclwiLFxuICAgIHRpdGxlOiBcIkVkaXRvclwiLFxuICAgIGljb25OYW1lOiBcImljb24tZWRpdG9yXCIsXG4gICAgd2lkZ2V0SXNMb2FkZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgQ0tFRElUT1IgIT0gXCJ1bmRlZmluZWRcIjtcbiAgICB9LFxuICAgIGlzRml0OiBmdW5jdGlvbiAocXVlc3Rpb24pIHtcbiAgICAgIHJldHVybiBxdWVzdGlvbi5nZXRUeXBlKCkgPT09IFwiZWRpdG9yXCI7XG4gICAgfSxcbiAgICBodG1sVGVtcGxhdGU6XG4gICAgICBcIjx0ZXh0YXJlYSByb3dzPScxMCcgY29scz0nODAnIHN0eWxlOiB7d2lkdGg6JzEwMCUnfT48L3RleHRhcmVhPlwiLFxuICAgIGFjdGl2YXRlZEJ5Q2hhbmdlZDogZnVuY3Rpb24gKGFjdGl2YXRlZEJ5KSB7XG4gICAgICBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRDbGFzcyhcImVkaXRvclwiLCBbXSwgbnVsbCwgXCJlbXB0eVwiKTtcbiAgICAgIFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZFByb3BlcnR5KFwiZWRpdG9yXCIsIHtcbiAgICAgICAgbmFtZTogXCJoZWlnaHRcIixcbiAgICAgICAgZGVmYXVsdDogMzAwLFxuICAgICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICB9KTtcbiAgICB9LFxuICAgIGFmdGVyUmVuZGVyOiBmdW5jdGlvbiAocXVlc3Rpb24sIGVsKSB7XG4gICAgICB2YXIgbmFtZSA9IHF1ZXN0aW9uLmlucHV0SWQ7XG4gICAgICBDS0VESVRPUi5lZGl0b3JDb25maWcgPSBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5sYW5ndWFnZSA9IFwiZXNcIjtcbiAgICAgICAgY29uZmlnLmhlaWdodCA9IHF1ZXN0aW9uLmhlaWdodDtcbiAgICAgICAgY29uZmlnLnRvb2xiYXJDYW5Db2xsYXBzZSA9IHRydWU7XG4gICAgICB9O1xuICAgICAgZWwubmFtZSA9IG5hbWU7XG5cbiAgICAgIGlmIChDS0VESVRPUi5pbnN0YW5jZXNbbmFtZV0pIHtcbiAgICAgICAgQ0tFRElUT1IuaW5zdGFuY2VzW25hbWVdLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgICBDS0VESVRPUi5yZW1vdmUoQ0tFRElUT1IuaW5zdGFuY2VzW25hbWVdKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGVkaXRvciA9IENLRURJVE9SLnJlcGxhY2UoZWwpO1xuICAgICAgQ0tFRElUT1IuaW5zdGFuY2VzW25hbWVdLmNvbmZpZy5yZWFkT25seSA9IHF1ZXN0aW9uLmlzUmVhZE9ubHk7XG5cbiAgICAgIHZhciBpc1ZhbHVlQ2hhbmdpbmcgPSBmYWxzZTtcbiAgICAgIHZhciB1cGRhdGVWYWx1ZUhhbmRsZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc1ZhbHVlQ2hhbmdpbmcgfHwgdHlwZW9mIHF1ZXN0aW9uLnZhbHVlID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XG4gICAgICAgIGVkaXRvci5zZXREYXRhKHF1ZXN0aW9uLnZhbHVlKTtcbiAgICAgIH07XG4gICAgICBlZGl0b3Iub24oXCJjaGFuZ2VcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICBpc1ZhbHVlQ2hhbmdpbmcgPSB0cnVlO1xuICAgICAgICBxdWVzdGlvbi52YWx1ZSA9IGVkaXRvci5nZXREYXRhKCk7XG4gICAgICAgIGlzVmFsdWVDaGFuZ2luZyA9IGZhbHNlO1xuICAgICAgfSk7XG5cbiAgICAgIHF1ZXN0aW9uLnZhbHVlQ2hhbmdlZENhbGxiYWNrID0gdXBkYXRlVmFsdWVIYW5kbGVyO1xuICAgICAgcXVlc3Rpb24ucmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChxdWVzdGlvbi5pc1JlYWRPbmx5KSB7XG4gICAgICAgICAgZWRpdG9yLnNldFJlYWRPbmx5KHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVkaXRvci5zZXRSZWFkT25seShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB1cGRhdGVWYWx1ZUhhbmRsZXIoKTtcbiAgICB9LFxuICAgIHdpbGxVbm1vdW50OiBmdW5jdGlvbiAocXVlc3Rpb24sIGVsKSB7XG4gICAgICBxdWVzdGlvbi5yZWFkT25seUNoYW5nZWRDYWxsYmFjayA9IG51bGw7XG4gICAgICBDS0VESVRPUi5pbnN0YW5jZXNbcXVlc3Rpb24uaW5wdXRJZF0uZGVzdHJveShmYWxzZSk7XG4gICAgfSxcbiAgICBwZGZSZW5kZXI6IGZ1bmN0aW9uIChzdXJ2ZXksIG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLnF1ZXN0aW9uLmdldFR5cGUoKSA9PT0gXCJlZGl0b3JcIikge1xuICAgICAgICBjb25zdCBsb2MgPSBuZXcgU3VydmV5LkxvY2FsaXphYmxlU3RyaW5nKHN1cnZleSwgdHJ1ZSk7XG4gICAgICAgIGxvYy50ZXh0ID0gb3B0aW9ucy5xdWVzdGlvbi52YWx1ZSB8fCBvcHRpb25zLnF1ZXN0aW9uLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgb3B0aW9ucy5xdWVzdGlvbltcImxvY0h0bWxcIl0gPSBsb2M7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBvcHRpb25zLnF1ZXN0aW9uLnJlbmRlckFzID09PSBcInN0YW5kYXJkXCIgfHxcbiAgICAgICAgICBvcHRpb25zLnF1ZXN0aW9uLnJlbmRlckFzID09PSBcImltYWdlXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgb3B0aW9ucy5xdWVzdGlvbltcInJlbmRlckFzXCJdID0gb3B0aW9ucy5xdWVzdGlvbi5yZW5kZXJBcztcbiAgICAgICAgfSBlbHNlIG9wdGlvbnMucXVlc3Rpb25bXCJyZW5kZXJBc1wiXSA9IFwiYXV0b1wiO1xuICAgICAgICBjb25zdCBmbGF0SHRtbCA9IG9wdGlvbnMucmVwb3NpdG9yeS5jcmVhdGUoXG4gICAgICAgICAgc3VydmV5LFxuICAgICAgICAgIG9wdGlvbnMucXVlc3Rpb24sXG4gICAgICAgICAgb3B0aW9ucy5jb250cm9sbGVyLFxuICAgICAgICAgIFwiaHRtbFwiXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgIGZsYXRIdG1sLmdlbmVyYXRlRmxhdHMob3B0aW9ucy5wb2ludCkudGhlbihmdW5jdGlvbiAoaHRtbEJyaWNrcykge1xuICAgICAgICAgICAgb3B0aW9ucy5icmlja3MgPSBodG1sQnJpY2tzO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xuXG4gIFN1cnZleS5DdXN0b21XaWRnZXRDb2xsZWN0aW9uLkluc3RhbmNlLmFkZEN1c3RvbVdpZGdldCh3aWRnZXQsIFwiY3VzdG9tdHlwZVwiKTtcbn1cblxuaWYgKHR5cGVvZiBTdXJ2ZXkgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgaW5pdChTdXJ2ZXkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpbml0O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvY2stZWRpdG9yLmpzXG4vLyBtb2R1bGUgaWQgPSAxMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMTQiLCJmdW5jdGlvbiBpbml0KFN1cnZleSwgJCkge1xuICAkID0gJCB8fCB3aW5kb3cuJDtcbiAgdmFyIHdpZGdldCA9IHtcbiAgICBuYW1lOiBcImF1dG9jb21wbGV0ZVwiLFxuICAgIHdpZGdldElzTG9hZGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdHlwZW9mICQgPT0gXCJmdW5jdGlvblwiICYmICEhJC5mbi5lYXN5QXV0b2NvbXBsZXRlO1xuICAgIH0sXG4gICAgaXNGaXQ6IGZ1bmN0aW9uIChxdWVzdGlvbikge1xuICAgICAgcmV0dXJuIHF1ZXN0aW9uLmdldFR5cGUoKSA9PT0gXCJ0ZXh0XCI7XG4gICAgfSxcbiAgICBpc0RlZmF1bHRSZW5kZXI6IHRydWUsXG4gICAgYWN0aXZhdGVkQnlDaGFuZ2VkOiBmdW5jdGlvbiAoYWN0aXZhdGVkQnkpIHtcbiAgICAgIGlmIChcbiAgICAgICAgU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuZmluZFByb3BlcnR5KFwidGV4dFwiLCBcImNob2ljZXNcIikgIT09IG51bGwgfHxcbiAgICAgICAgU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuZmluZFByb3BlcnR5KFwidGV4dFwiLCBcImNob2ljZXNCeVVybFwiKSAhPT0gbnVsbFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZFByb3BlcnR5KFwidGV4dFwiLCB7XG4gICAgICAgIG5hbWU6IFwiY2hvaWNlczppdGVtdmFsdWVzXCIsXG4gICAgICAgIGNhdGVnb3J5OiBcImNob2ljZXNcIixcbiAgICAgICAgY2F0ZWdvcnlJbmRleDogMSxcbiAgICAgIH0pO1xuICAgICAgU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuYWRkUHJvcGVydHkoXCJ0ZXh0XCIsIHtcbiAgICAgICAgbmFtZTogXCJjaG9pY2VzQnlVcmw6cmVzdGZ1bGxcIixcbiAgICAgICAgY2xhc3NOYW1lOiBcIkNob2ljZXNSZXN0ZnVsbFwiLFxuICAgICAgICBjYXRlZ29yeTogXCJjaG9pY2VzQnlVcmxcIixcbiAgICAgICAgY2F0ZWdvcnlJbmRleDogMixcbiAgICAgIH0pO1xuICAgICAgU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuYWRkUHJvcGVydHkoXCJ0ZXh0XCIsIHtcbiAgICAgICAgbmFtZTogXCJjb25maWdcIixcbiAgICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgfSk7XG4gICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShcbiAgICAgICAgU3VydmV5Lm1hdHJpeERyb3Bkb3duQ29sdW1uVHlwZXMudGV4dC5wcm9wZXJ0aWVzLFxuICAgICAgICBbXCJjaG9pY2VzXCIsIFwiY2hvaWNlc09yZGVyXCIsIFwiY2hvaWNlc0J5VXJsXCIsIFwib3RoZXJUZXh0XCJdXG4gICAgICApO1xuICAgIH0sXG4gICAgYWZ0ZXJSZW5kZXI6IGZ1bmN0aW9uIChxdWVzdGlvbiwgZWwpIHtcbiAgICAgIHZhciAkZWwgPSAkKGVsKS5pcyhcImlucHV0XCIpID8gJChlbCkgOiAkKGVsKS5maW5kKFwiaW5wdXRcIik7XG5cbiAgICAgIHZhciBnZXRDc3NTZWxlY3RvckZyb21DbGFzc2VzU3RyaW5nID0gZnVuY3Rpb24gKGNsYXNzZXNTdHJpbmcpIHtcbiAgICAgICAgaWYgKCFjbGFzc2VzU3RyaW5nKSByZXR1cm4gXCJcIjtcbiAgICAgICAgdmFyIGNzc1NlbGVjdG9yID0gY2xhc3Nlc1N0cmluZy5yZXBsYWNlKC8oXlxccyopfChcXHMrKS9nLCBcIi5cIik7IC8vIHJlcGxhY2Ugd2hpdGVzcGFjZXMgd2l0aCAnLidcbiAgICAgICAgcmV0dXJuIGNzc1NlbGVjdG9yO1xuICAgICAgfTtcblxuICAgICAgdmFyIHF1ZXN0aW9uUm9vdENsYXNzZXMgPSBnZXRDc3NTZWxlY3RvckZyb21DbGFzc2VzU3RyaW5nKFxuICAgICAgICBxdWVzdGlvbi5jc3NSb290XG4gICAgICApO1xuXG4gICAgICB2YXIgcXVlc3Rpb25Sb290ID0gJGVsLnBhcmVudHMocXVlc3Rpb25Sb290Q2xhc3NlcylbMF07XG4gICAgICBpZiAoISFxdWVzdGlvblJvb3RDbGFzc2VzICYmICEhcXVlc3Rpb25Sb290KSB7XG4gICAgICAgIHF1ZXN0aW9uUm9vdC5zdHlsZS5vdmVyZmxvdyA9IFwidmlzaWJsZVwiO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29uZmlnID0gcXVlc3Rpb24uY29uZmlnO1xuICAgICAgdmFyIG9wdGlvbnMgPVxuICAgICAgICBjb25maWcgJiYgdHlwZW9mIGNvbmZpZyA9PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZShjb25maWcpIDogY29uZmlnO1xuICAgICAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG5cbiAgICAgIG9wdGlvbnMuZGF0YSA9IChxdWVzdGlvbi5jaG9pY2VzIHx8IFtdKS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udGV4dDtcbiAgICAgIH0pO1xuICAgICAgaWYgKG9wdGlvbnMuYWRqdXN0V2lkdGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvcHRpb25zLmFkanVzdFdpZHRoID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoIW9wdGlvbnMubGlzdCkge1xuICAgICAgICBvcHRpb25zLmxpc3QgPSB7XG4gICAgICAgICAgc29ydDoge1xuICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1hdGNoOiB7XG4gICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25DaG9vc2VFdmVudDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHNlbGVjdGVkRGF0YSA9ICRlbC5nZXRTZWxlY3RlZEl0ZW1EYXRhKCk7XG4gICAgICAgICAgICBpZighIXNlbGVjdGVkRGF0YSAmJiB0eXBlb2Ygc2VsZWN0ZWREYXRhID09PSBcIm9iamVjdFwiIFxuICAgICAgICAgICAgICAmJiAhIXF1ZXN0aW9uLmNob2ljZXNCeVVybCAmJiAhIXF1ZXN0aW9uLmNob2ljZXNCeVVybC52YWx1ZU5hbWUpIHtcbiAgICAgICAgICAgICAgc2VsZWN0ZWREYXRhID0gc2VsZWN0ZWREYXRhW3F1ZXN0aW9uLmNob2ljZXNCeVVybC52YWx1ZU5hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcXVlc3Rpb24udmFsdWUgPSBzZWxlY3RlZERhdGE7XG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmICghb3B0aW9ucy5wbGFjZWhvbGRlcikge1xuICAgICAgICBvcHRpb25zLnBsYWNlaG9sZGVyID0gcXVlc3Rpb24ucGxhY2Vob2xkZXI7XG4gICAgICB9XG5cbiAgICAgIGlmICghIXF1ZXN0aW9uLmNob2ljZXNCeVVybCkge1xuICAgICAgICBvcHRpb25zLnVybCA9IGZ1bmN0aW9uIChwaHJhc2UpIHtcbiAgICAgICAgICByZXR1cm4gcXVlc3Rpb24uY2hvaWNlc0J5VXJsLnVybDtcbiAgICAgICAgfTtcbiAgICAgICAgb3B0aW9ucy5nZXRWYWx1ZSA9IHF1ZXN0aW9uLmNob2ljZXNCeVVybC52YWx1ZU5hbWU7XG4gICAgICAgIC8vIG9wdGlvbnMuYWpheFNldHRpbmdzID0ge1xuICAgICAgICAvLyAgIGRhdGFUeXBlOiBcImpzb25wXCJcbiAgICAgICAgLy8gfTtcbiAgICAgIH1cbiAgICAgICRlbC5lYXN5QXV0b2NvbXBsZXRlKG9wdGlvbnMpO1xuXG4gICAgICAkZWxbMF0ub25pbnB1dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcXVlc3Rpb24uY3VzdG9tV2lkZ2V0RGF0YS5pc05lZWRSZW5kZXIgPSB0cnVlO1xuICAgICAgfTtcbiAgICAgIHZhciB1cGRhdGVIYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAkZWxbMF0udmFsdWUgPVxuICAgICAgICAgIHR5cGVvZiBxdWVzdGlvbi52YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIiA/IFwiXCIgOiBxdWVzdGlvbi52YWx1ZTtcbiAgICAgIH07XG4gICAgICBxdWVzdGlvbi52YWx1ZUNoYW5nZWRDYWxsYmFjayA9IHVwZGF0ZUhhbmRsZXI7XG4gICAgICB1cGRhdGVIYW5kbGVyKCk7XG4gICAgfSxcbiAgICB3aWxsVW5tb3VudDogZnVuY3Rpb24gKHF1ZXN0aW9uLCBlbCkge1xuICAgICAgLy8gdmFyICRlbCA9ICQoZWwpLmZpbmQoXCJpbnB1dFwiKTtcbiAgICAgIC8vICRlbC5hdXRvY29tcGxldGUoXCJkZXN0cm95XCIpO1xuICAgIH0sXG4gIH07XG5cbiAgU3VydmV5LkN1c3RvbVdpZGdldENvbGxlY3Rpb24uSW5zdGFuY2UuYWRkQ3VzdG9tV2lkZ2V0KHdpZGdldCwgXCJ0eXBlXCIpO1xufVxuXG5pZiAodHlwZW9mIFN1cnZleSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICBpbml0KFN1cnZleSwgd2luZG93LiQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpbml0O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvZWFzeS1hdXRvY29tcGxldGUuanNcbi8vIG1vZHVsZSBpZCA9IDEyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxMyIsImZ1bmN0aW9uIGluaXQoU3VydmV5KSB7XG4gIHZhciB3aWRnZXQgPSB7XG4gICAgc2V0dGluZ3M6IHtcbiAgICAgIHN1cHBvcnRlZFR5cGVzOiBbXCJyYWRpb2dyb3VwXCIsIFwiY2hlY2tib3hcIiwgXCJib29sZWFuXCJdLFxuICAgICAgcmFkaW9ncm91cDoge1xuICAgICAgICByb290Q2xhc3M6IFwicHJldHR5IHAtZGVmYXVsdCBwLXJvdW5kXCIsXG4gICAgICAgIGlucHV0VHlwZTogXCJyYWRpb1wiLFxuICAgICAgICBzdGF0ZXM6IFt7IHN0YXRlQ2xhc3M6IFwic3RhdGUgcC1zdWNjZXNzXCIsIGFkZE9uOiBcIlwiIH1dLFxuICAgICAgfSxcbiAgICAgIGNoZWNrYm94OiB7XG4gICAgICAgIHJvb3RDbGFzczogXCJwcmV0dHkgcC1kZWZhdWx0XCIsXG4gICAgICAgIGlucHV0VHlwZTogXCJjaGVja2JveFwiLFxuICAgICAgICBzdGF0ZXM6IFt7IHN0YXRlQ2xhc3M6IFwic3RhdGUgcC1zdWNjZXNzXCIsIGFkZE9uOiBcIlwiIH1dLFxuICAgICAgfSxcbiAgICAgIGJvb2xlYW46IHtcbiAgICAgICAgcm9vdENsYXNzOiBcInByZXR0eSBwLWljb24gcC1kZWZhdWx0IHAtaGFzLWluZGV0ZXJtaW5hdGVcIixcbiAgICAgICAgaW5wdXRUeXBlOiBcImNoZWNrYm94XCIsXG4gICAgICAgIHN0YXRlczogW1xuICAgICAgICAgIHsgc3RhdGVDbGFzczogXCJzdGF0ZSBwLXN1Y2Nlc3NcIiwgYWRkT246IFwiXCIgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdGF0ZUNsYXNzOiBcInN0YXRlIHAtc3VjY2VzcyBwLWlzLWluZGV0ZXJtaW5hdGVcIixcbiAgICAgICAgICAgIGljb25DbGFzczogXCJpY29uIG1kaSBtZGktbWludXNcIixcbiAgICAgICAgICAgIGFkZE9uOiBcIlwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgbmFtZTogXCJwcmV0dHktY2hlY2tib3hcIixcbiAgICBhY3RpdmF0ZWRCeTogXCJwcm9wZXJ0eVwiLFxuICAgIHdpZGdldElzTG9hZGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIGh0bWxUZW1wbGF0ZTogXCI8ZmllbGRzZXQ+PC9maWVsZHNldD5cIixcbiAgICBpc0ZpdDogZnVuY3Rpb24gKHF1ZXN0aW9uKSB7XG4gICAgICB2YXIgaXNGaXRCeVR5cGUgPVxuICAgICAgICB3aWRnZXQuc2V0dGluZ3Muc3VwcG9ydGVkVHlwZXMuaW5kZXhPZihxdWVzdGlvbi5nZXRUeXBlKCkpICE9PSAtMTtcblxuICAgICAgaWYgKHdpZGdldC5hY3RpdmF0ZWRCeSA9PT0gXCJwcm9wZXJ0eVwiKSB7XG4gICAgICAgIHJldHVybiBxdWVzdGlvbltcInJlbmRlckFzXCJdID09PSBcInByZXR0eWNoZWNrYm94XCIgJiYgaXNGaXRCeVR5cGU7XG4gICAgICB9IGVsc2UgaWYgKHdpZGdldC5hY3RpdmF0ZWRCeSA9PT0gXCJ0eXBlXCIpIHtcbiAgICAgICAgcmV0dXJuIGlzRml0QnlUeXBlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBhY3RpdmF0ZWRCeUNoYW5nZWQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKHRoaXMud2lkZ2V0SXNMb2FkZWQoKSkge1xuICAgICAgICB3aWRnZXQuYWN0aXZhdGVkQnkgPSB2YWx1ZTtcbiAgICAgICAgd2lkZ2V0LnNldHRpbmdzLnN1cHBvcnRlZFR5cGVzLmZvckVhY2goZnVuY3Rpb24gKHN1cHBvcnRlZFR5cGUpIHtcbiAgICAgICAgICBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5yZW1vdmVQcm9wZXJ0eShzdXBwb3J0ZWRUeXBlLCBcInJlbmRlckFzXCIpO1xuXG4gICAgICAgICAgaWYgKHZhbHVlID09PSBcInByb3BlcnR5XCIpIHtcbiAgICAgICAgICAgIFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZFByb3BlcnR5KHN1cHBvcnRlZFR5cGUsIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJyZW5kZXJBc1wiLFxuICAgICAgICAgICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLFxuICAgICAgICAgICAgICBjaG9pY2VzOiBbXCJkZWZhdWx0XCIsIFwicHJldHR5Y2hlY2tib3hcIl0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgaXNEZWZhdWx0UmVuZGVyOiBmYWxzZSxcbiAgICBhZnRlclJlbmRlcjogZnVuY3Rpb24gKHF1ZXN0aW9uLCBlbGVtZW50KSB7XG4gICAgICB2YXIgaXRlbUlucHV0cyA9IHt9O1xuICAgICAgdmFyIHF1ZXN0aW9uVHlwZSA9IHF1ZXN0aW9uLmdldFR5cGUoKTtcbiAgICAgIHZhciBvcHRpb25zID0gdGhpcy5zZXR0aW5nc1txdWVzdGlvblR5cGVdO1xuICAgICAgdmFyIGNoZWNrYm94VHlwZSA9IHF1ZXN0aW9uVHlwZSA9PT0gXCJjaGVja2JveFwiO1xuICAgICAgdmFyIHJhZGlvZ3JvdXBUeXBlID0gcXVlc3Rpb25UeXBlID09PSBcInJhZGlvZ3JvdXBcIjtcbiAgICAgIHZhciBib29sZWFuVHlwZSA9IHF1ZXN0aW9uVHlwZSA9PT0gXCJib29sZWFuXCI7XG5cbiAgICAgIHZhciBpbkNoYW5nZUhhbmRsZXIgPSBmYWxzZTtcbiAgICAgIHZhciBjaGFuZ2VIYW5kbGVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGluQ2hhbmdlSGFuZGxlciA9IHRydWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFyIHRhcmdldCA9IGFyZ3VtZW50c1swXS50YXJnZXQ7XG4gICAgICAgICAgdmFyIHRhcmdldFZhbHVlID0gdGFyZ2V0LnZhbHVlO1xuICAgICAgICAgIHZhciB0YXJnZXRDaGVja2VkID0gdGFyZ2V0LmNoZWNrZWQ7XG5cbiAgICAgICAgICBpZiAoY2hlY2tib3hUeXBlKSB7XG4gICAgICAgICAgICB2YXIgcXVlc3Rpb25WYWx1ZSA9IHF1ZXN0aW9uLmNyZWF0ZVZhbHVlQ29weSgpIHx8IFtdO1xuICAgICAgICAgICAgdmFyIHZhbHVlSW5kZXggPSBxdWVzdGlvblZhbHVlLmluZGV4T2YodGFyZ2V0VmFsdWUpO1xuICAgICAgICAgICAgaWYgKHRhcmdldENoZWNrZWQpIHtcbiAgICAgICAgICAgICAgaWYgKHZhbHVlSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcXVlc3Rpb25WYWx1ZS5wdXNoKHRhcmdldFZhbHVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKHZhbHVlSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcXVlc3Rpb25WYWx1ZS5zcGxpY2UodmFsdWVJbmRleCwgMSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcXVlc3Rpb24udmFsdWUgPSBxdWVzdGlvblZhbHVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAocmFkaW9ncm91cFR5cGUpIHtcbiAgICAgICAgICAgIHF1ZXN0aW9uLnZhbHVlID0gdGFyZ2V0VmFsdWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHF1ZXN0aW9uLnZhbHVlID0gdGFyZ2V0Q2hlY2tlZDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaW5DaGFuZ2VIYW5kbGVyID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHZhciBpdGVtV2lkdGggPVxuICAgICAgICBxdWVzdGlvbi5jb2xDb3VudCA+IDAgPyAxMDAgLyBxdWVzdGlvbi5jb2xDb3VudCArIFwiJVwiIDogXCJcIjtcblxuICAgICAgdmFyIGNob2ljZXMgPSBib29sZWFuVHlwZVxuICAgICAgICA/IFt7IGxvY1RleHQ6IHF1ZXN0aW9uLmxvY1RpdGxlLCB2YWx1ZTogISFxdWVzdGlvbi52YWx1ZSB9XVxuICAgICAgICA6IHF1ZXN0aW9uLnZpc2libGVDaG9pY2VzO1xuICAgICAgY2hvaWNlcy5mb3JFYWNoKGZ1bmN0aW9uIChjaG9pY2VJdGVtLCBpbmRleCkge1xuICAgICAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgICAgIGlucHV0LnR5cGUgPSBvcHRpb25zLmlucHV0VHlwZTtcbiAgICAgICAgaW5wdXQubmFtZSA9IHF1ZXN0aW9uLm5hbWUgKyAoY2hlY2tib3hUeXBlID8gXCJcIiArIGluZGV4IDogXCJcIik7XG4gICAgICAgIGlucHV0Lm9uY2hhbmdlID0gY2hhbmdlSGFuZGxlcjtcbiAgICAgICAgaW5wdXQudmFsdWUgPSBjaG9pY2VJdGVtLnZhbHVlO1xuXG4gICAgICAgIGlmIChib29sZWFuVHlwZSAmJiBxdWVzdGlvbi52YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIGlucHV0LmluZGV0ZXJtaW5hdGUgPSBxdWVzdGlvbi5kZWZhdWx0VmFsdWUgPT09IFwiaW5kZXRlcm1pbmF0ZVwiO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNvbnRyb2xSb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgY29udHJvbFJvb3QuY2xhc3NOYW1lID0gb3B0aW9ucy5yb290Q2xhc3M7XG4gICAgICAgIGNvbnRyb2xSb290LmFwcGVuZENoaWxkKGlucHV0KTtcblxuICAgICAgICBvcHRpb25zLnN0YXRlcy5mb3JFYWNoKGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgICAgIHZhciBzdGF0ZVJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICAgIHN0YXRlUm9vdC5jbGFzc05hbWUgPSBzdGF0ZS5zdGF0ZUNsYXNzO1xuICAgICAgICAgIGlmICghIXN0YXRlLmljb25DbGFzcykge1xuICAgICAgICAgICAgdmFyIGljb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaVwiKTtcbiAgICAgICAgICAgIGljb24uY2xhc3NOYW1lID0gc3RhdGUuaWNvbkNsYXNzO1xuICAgICAgICAgICAgc3RhdGVSb290LmFwcGVuZENoaWxkKGljb24pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBsYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsYWJlbFwiKTtcbiAgICAgICAgICBpZiAoY2hvaWNlSXRlbS5sb2NUZXh0Lmhhc0h0bWwpIHtcbiAgICAgICAgICAgIGxhYmVsLmlubmVySFRNTCA9IGNob2ljZUl0ZW0ubG9jVGV4dC5odG1sO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsYWJlbC50ZXh0Q29udGVudCA9IGNob2ljZUl0ZW0ubG9jVGV4dC5yZW5kZXJlZFRleHQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN0YXRlUm9vdC5hcHBlbmRDaGlsZChsYWJlbCk7XG5cbiAgICAgICAgICBjb250cm9sUm9vdC5hcHBlbmRDaGlsZChzdGF0ZVJvb3QpO1xuICAgICAgICAgIGlmICghIXN0YXRlLmFkZE9uKSB7XG4gICAgICAgICAgICBzdGF0ZVJvb3QuaW5zZXJ0QWRqYWNlbnRIVE1MKFwiYWZ0ZXJiZWdpblwiLCBzdGF0ZS5hZGRPbik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgaXRlbVJvb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBpdGVtUm9vdC5jbGFzc05hbWUgPSBcInN2X2N3X3ByZXR0eV9jaGVja2JveF9cIiArIHF1ZXN0aW9uVHlwZTtcbiAgICAgICAgaXRlbVJvb3Quc3R5bGUuZGlzcGxheSA9IFwiaW5saW5lLWJsb2NrXCI7XG4gICAgICAgIGl0ZW1Sb290LnN0eWxlLndpZHRoID0gaXRlbVdpZHRoO1xuICAgICAgICBpdGVtUm9vdC5hcHBlbmRDaGlsZChjb250cm9sUm9vdCk7XG5cbiAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChpdGVtUm9vdCk7XG5cbiAgICAgICAgaXRlbUlucHV0c1tjaG9pY2VJdGVtLnZhbHVlXSA9IGlucHV0O1xuICAgICAgfSk7XG5cbiAgICAgIHZhciB1cGRhdGVWYWx1ZUhhbmRsZXIgPSBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgaWYgKCFpbkNoYW5nZUhhbmRsZXIpIHtcbiAgICAgICAgICB2YXIgY2hlY2tlZEl0ZW1zID0gbmV3VmFsdWUgfHwgW107XG4gICAgICAgICAgaWYgKHJhZGlvZ3JvdXBUeXBlIHx8IGJvb2xlYW5UeXBlKSB7XG4gICAgICAgICAgICBjaGVja2VkSXRlbXMgPSBbbmV3VmFsdWUgJiYgbmV3VmFsdWUudG9TdHJpbmcoKV07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgT2JqZWN0LnZhbHVlcyhpdGVtSW5wdXRzKS5mb3JFYWNoKGZ1bmN0aW9uIChpbnB1dEl0ZW0pIHtcbiAgICAgICAgICAgIGlmIChjaGVja2VkSXRlbXMuaW5kZXhPZihpbnB1dEl0ZW0udmFsdWUpICE9PSAtMSkge1xuICAgICAgICAgICAgICBpbnB1dEl0ZW0uc2V0QXR0cmlidXRlKFwiY2hlY2tlZFwiLCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaW5wdXRJdGVtLnJlbW92ZUF0dHJpYnV0ZShcImNoZWNrZWRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB2YXIgcmVhZE9ubHlIYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBPYmplY3QudmFsdWVzKGl0ZW1JbnB1dHMpLmZvckVhY2goZnVuY3Rpb24gKGlucHV0SXRlbSkge1xuICAgICAgICAgIGlmIChxdWVzdGlvbi5pc1JlYWRPbmx5KSB7XG4gICAgICAgICAgICBpbnB1dEl0ZW0uc2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIiwgdHJ1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlucHV0SXRlbS5yZW1vdmVBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgcXVlc3Rpb24udmFsdWVDaGFuZ2VkQ2FsbGJhY2sgPSB1cGRhdGVWYWx1ZUhhbmRsZXI7XG4gICAgICBxdWVzdGlvbi5yZWFkT25seUNoYW5nZWRDYWxsYmFjayA9IHJlYWRPbmx5SGFuZGxlcjtcbiAgICAgIHVwZGF0ZVZhbHVlSGFuZGxlcihxdWVzdGlvbi52YWx1ZSk7XG4gICAgICByZWFkT25seUhhbmRsZXIoKTtcbiAgICB9LFxuICAgIHdpbGxVbm1vdW50OiBmdW5jdGlvbiAocXVlc3Rpb24sIGVsKSB7XG4gICAgICBxdWVzdGlvbi52YWx1ZUNoYW5nZWRDYWxsYmFjayA9IHVuZGVmaW5lZDtcbiAgICAgIHF1ZXN0aW9uLnJlYWRPbmx5Q2hhbmdlZENhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgIH0sXG4gIH07XG5cbiAgU3VydmV5LkN1c3RvbVdpZGdldENvbGxlY3Rpb24uSW5zdGFuY2UuYWRkQ3VzdG9tV2lkZ2V0KHdpZGdldCwgXCJwcm9wZXJ0eVwiKTtcbn1cblxuaWYgKHR5cGVvZiBTdXJ2ZXkgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgaW5pdChTdXJ2ZXkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpbml0O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvcHJldHR5LWNoZWNrYm94LmpzXG4vLyBtb2R1bGUgaWQgPSAxM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAgOCIsInZhciBTbGlkZXIgPSByZXF1aXJlKFwiYm9vdHN0cmFwLXNsaWRlclwiKTtcblxuZnVuY3Rpb24gaW5pdChTdXJ2ZXkpIHtcbiAgdmFyIHdpZGdldCA9IHtcbiAgICBuYW1lOiBcImJvb3RzdHJhcHNsaWRlclwiLFxuICAgIHRpdGxlOiBcIkJvb3RzdHJhcCBTbGlkZXJcIixcbiAgICBpY29uTmFtZTogXCJpY29uLWJvb3RzdHJhcC1zbGlkZXJcIixcbiAgICB3aWRnZXRJc0xvYWRlZDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHR5cGVvZiBTbGlkZXIgIT09IFwidW5kZWZpbmVkXCI7XG4gICAgfSxcbiAgICBpc0ZpdDogZnVuY3Rpb24gKHF1ZXN0aW9uKSB7XG4gICAgICByZXR1cm4gcXVlc3Rpb24uZ2V0VHlwZSgpID09PSBcImJvb3RzdHJhcHNsaWRlclwiO1xuICAgIH0sXG4gICAgaHRtbFRlbXBsYXRlOiBcIjxkaXY+PC9kaXY+XCIsXG4gICAgYWN0aXZhdGVkQnlDaGFuZ2VkOiBmdW5jdGlvbiAoYWN0aXZhdGVkQnkpIHtcbiAgICAgIFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwiYm9vdHN0cmFwc2xpZGVyXCIsIFtdLCBudWxsLCBcImVtcHR5XCIpO1xuICAgICAgU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuYWRkUHJvcGVydGllcyhcImJvb3RzdHJhcHNsaWRlclwiLCBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInN0ZXA6bnVtYmVyXCIsXG4gICAgICAgICAgZGVmYXVsdDogMSxcbiAgICAgICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInJhbmdlTWluOm51bWJlclwiLFxuICAgICAgICAgIGRlZmF1bHQ6IDAsXG4gICAgICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJyYW5nZU1heDpudW1iZXJcIixcbiAgICAgICAgICBkZWZhdWx0OiAxMDAsXG4gICAgICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJvcmllbnRhdGlvblwiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiaG9yaXpvbnRhbFwiLFxuICAgICAgICAgIGNob2ljZXM6IFtcImhvcml6b250YWxcIiwgXCJ2ZXJ0aWNhbFwiXSxcbiAgICAgICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCJcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuICAgICAgU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuYWRkUHJvcGVydHkoXCJib290c3RyYXBzbGlkZXJcIiwge1xuICAgICAgICBuYW1lOiBcImNvbmZpZ1wiLFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICB9KTtcbiAgICB9LFxuICAgIGFmdGVyUmVuZGVyOiBmdW5jdGlvbiAocXVlc3Rpb24sIGVsKSB7XG4gICAgICBlbC5zdHlsZS5wYWRkaW5nVG9wID0gXCIyMHB4XCI7XG4gICAgICBlbC5zdHlsZS5wYWRkaW5nQm90dG9tID0gXCIxN3B4XCI7XG4gICAgICBlbC5zdHlsZS5wYWRkaW5nTGVmdCA9IFwiMTBweFwiO1xuICAgICAgdmFyIGlucHV0RWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgICBpbnB1dEVsLmlkID0gcXVlc3Rpb24uaWQ7XG4gICAgICBpbnB1dEVsLnR5cGUgPSBcInRleHRcIjtcbiAgICAgIGlucHV0RWwuc2V0QXR0cmlidXRlKFwiZGF0YS1zbGlkZXItaWRcIiwgcXVlc3Rpb24ubmFtZSArIFwiX1wiICsgcXVlc3Rpb24uaWQpO1xuICAgICAgaW5wdXRFbC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXNsaWRlci1taW5cIiwgcXVlc3Rpb24ucmFuZ2VNaW4pO1xuICAgICAgaW5wdXRFbC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXNsaWRlci1tYXhcIiwgcXVlc3Rpb24ucmFuZ2VNYXgpO1xuICAgICAgaW5wdXRFbC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXNsaWRlci1zdGVwXCIsIHF1ZXN0aW9uLnN0ZXApO1xuICAgICAgaWYocXVlc3Rpb24ub3JpZW50YXRpb24gPT0gXCJ2ZXJ0aWNhbFwiKSB7XG4gICAgICAgIGlucHV0RWwuc2V0QXR0cmlidXRlKFwiZGF0YS1zbGlkZXItb3JpZW50YXRpb25cIiwgXCJ2ZXJ0aWNhbFwiKTtcbiAgICAgIH1cbiAgICAgIGlucHV0RWwuc2V0QXR0cmlidXRlKFwiZGF0YS1zbGlkZXItc3RlcFwiLCBxdWVzdGlvbi5zdGVwKTtcbiAgICAgIGlucHV0RWwuc2V0QXR0cmlidXRlKFxuICAgICAgICBcImRhdGEtc2xpZGVyLXZhbHVlXCIsXG4gICAgICAgIHF1ZXN0aW9uLnZhbHVlIHx8IHF1ZXN0aW9uLnJhbmdlTWluXG4gICAgICApO1xuICAgICAgZWwuYXBwZW5kQ2hpbGQoaW5wdXRFbCk7XG5cbiAgICAgIHZhciBjb25maWcgPSBxdWVzdGlvbi5jb25maWcgfHwge307XG5cbiAgICAgIGlmIChjb25maWcuaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25maWcuaWQgPSBxdWVzdGlvbi5uYW1lICsgXCJfXCIgKyBxdWVzdGlvbi5pZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5taW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25maWcubWluID0gcXVlc3Rpb24ucmFuZ2VNaW47XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcubWF4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uZmlnLm1heCA9IHF1ZXN0aW9uLnJhbmdlTWF4O1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLnN0ZXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25maWcuc3RlcCA9IHF1ZXN0aW9uLnN0ZXA7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcuZW5hYmxlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbmZpZy5lbmFibGVkID0gIXF1ZXN0aW9uLmlzUmVhZE9ubHk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25maWcudmFsdWUgPSBxdWVzdGlvbi52YWx1ZSB8fCBxdWVzdGlvbi5yYW5nZU1pbjtcbiAgICAgIH1cblxuICAgICAgdmFyIHNsaWRlciA9IG5ldyBTbGlkZXIoaW5wdXRFbCwgY29uZmlnKTtcblxuICAgICAgc2xpZGVyLm9uKFwiY2hhbmdlXCIsIGZ1bmN0aW9uICh2YWx1ZU9iaikge1xuICAgICAgICBxdWVzdGlvbi52YWx1ZSA9IHNsaWRlci5nZXRWYWx1ZSgpO1xuICAgICAgfSk7XG4gICAgICB2YXIgdXBkYXRlVmFsdWVIYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBzbGlkZXIuc2V0VmFsdWUocXVlc3Rpb24udmFsdWUgfHwgcXVlc3Rpb24ucmFuZ2VNaW4pO1xuICAgICAgfTtcbiAgICAgIHF1ZXN0aW9uLnJlYWRPbmx5Q2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAocXVlc3Rpb24uaXNSZWFkT25seSkge1xuICAgICAgICAgIHNsaWRlci5kaXNhYmxlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2xpZGVyLmVuYWJsZSgpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcXVlc3Rpb24uYm9vdHN0cmFwU2xpZGVyID0gc2xpZGVyO1xuICAgICAgcXVlc3Rpb24udmFsdWVDaGFuZ2VkQ2FsbGJhY2sgPSB1cGRhdGVWYWx1ZUhhbmRsZXI7XG4gICAgfSxcbiAgICB3aWxsVW5tb3VudDogZnVuY3Rpb24gKHF1ZXN0aW9uLCBlbCkge1xuICAgICAgcXVlc3Rpb24uYm9vdHN0cmFwU2xpZGVyICYmIHF1ZXN0aW9uLmJvb3RzdHJhcFNsaWRlci5kZXN0cm95KCk7XG4gICAgICBxdWVzdGlvbi5ib290c3RyYXBTbGlkZXIgPSBudWxsO1xuICAgICAgcXVlc3Rpb24ucmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2sgPSBudWxsO1xuICAgIH0sXG4gICAgcGRmUmVuZGVyOiBmdW5jdGlvbiAoXywgb3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMucXVlc3Rpb24uZ2V0VHlwZSgpID09PSBcImJvb3RzdHJhcHNsaWRlclwiKSB7XG4gICAgICAgIHZhciBwb2ludCA9IG9wdGlvbnMubW9kdWxlLlN1cnZleUhlbHBlci5jcmVhdGVQb2ludChcbiAgICAgICAgICBvcHRpb25zLm1vZHVsZS5TdXJ2ZXlIZWxwZXIubWVyZ2VSZWN0cy5hcHBseShudWxsLCBvcHRpb25zLmJyaWNrcylcbiAgICAgICAgKTtcbiAgICAgICAgcG9pbnQueExlZnQgKz0gb3B0aW9ucy5jb250cm9sbGVyLnVuaXRXaWR0aDtcbiAgICAgICAgcG9pbnQueVRvcCArPVxuICAgICAgICAgIG9wdGlvbnMuY29udHJvbGxlci51bml0SGVpZ2h0ICpcbiAgICAgICAgICBvcHRpb25zLm1vZHVsZS5GbGF0UXVlc3Rpb24uQ09OVEVOVF9HQVBfVkVSVF9TQ0FMRTtcbiAgICAgICAgdmFyIHJlY3QgPSBvcHRpb25zLm1vZHVsZS5TdXJ2ZXlIZWxwZXIuY3JlYXRlVGV4dEZpZWxkUmVjdChcbiAgICAgICAgICBwb2ludCxcbiAgICAgICAgICBvcHRpb25zLmNvbnRyb2xsZXJcbiAgICAgICAgKTtcbiAgICAgICAgdmFyIHRleHRib3hCcmljayA9IG5ldyBvcHRpb25zLm1vZHVsZS5UZXh0RmllbGRCcmljayhcbiAgICAgICAgICBvcHRpb25zLnF1ZXN0aW9uLFxuICAgICAgICAgIG9wdGlvbnMuY29udHJvbGxlcixcbiAgICAgICAgICByZWN0LFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICAgb3B0aW9ucy5xdWVzdGlvbi5pZCxcbiAgICAgICAgICAoXG4gICAgICAgICAgICBvcHRpb25zLnF1ZXN0aW9uLnZhbHVlIHx8XG4gICAgICAgICAgICBvcHRpb25zLnF1ZXN0aW9uLmRlZmF1bHRWYWx1ZSB8fFxuICAgICAgICAgICAgXCJcIlxuICAgICAgICAgICkudG9TdHJpbmcoKSxcbiAgICAgICAgICBcIlwiLFxuICAgICAgICAgIG9wdGlvbnMucXVlc3Rpb24uaXNSZWFkT25seSxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICBcInRleHRcIlxuICAgICAgICApO1xuICAgICAgICBvcHRpb25zLmJyaWNrcy5wdXNoKHRleHRib3hCcmljayk7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcblxuICBTdXJ2ZXkuQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvbi5JbnN0YW5jZS5hZGRDdXN0b21XaWRnZXQod2lkZ2V0LCBcImN1c3RvbXR5cGVcIik7XG59XG5cbmlmICh0eXBlb2YgU3VydmV5ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gIGluaXQoU3VydmV5KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaW5pdDtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL2Jvb3RzdHJhcC1zbGlkZXIuanNcbi8vIG1vZHVsZSBpZCA9IDE0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCA1IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzE1X187XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwge1wicm9vdFwiOlwiU2xpZGVyXCIsXCJjb21tb25qczJcIjpcImJvb3RzdHJhcC1zbGlkZXJcIixcImNvbW1vbmpzXCI6XCJib290c3RyYXAtc2xpZGVyXCIsXCJhbWRcIjpcImJvb3RzdHJhcC1zbGlkZXJcIn1cbi8vIG1vZHVsZSBpZCA9IDE1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCA1IiwiaW1wb3J0IFJlY29yZFJUQyBmcm9tIFwicmVjb3JkcnRjXCI7XG5cbmZ1bmN0aW9uIGluaXQoU3VydmV5KSB7XG4gIHZhciB3aWRnZXQgPSB7XG4gICAgbmFtZTogXCJtaWNyb3Bob25lXCIsXG4gICAgdGl0bGU6IFwiTWljcm9waG9uZVwiLFxuICAgIGljb25OYW1lOiBcImljb24tbWljcm9waG9uZVwiLFxuICAgIHdpZGdldElzTG9hZGVkOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgUmVjb3JkUlRDICE9IFwidW5kZWZpbmVkXCI7XG4gICAgfSxcbiAgICBpc0ZpdDogZnVuY3Rpb24ocXVlc3Rpb24pIHtcbiAgICAgIHJldHVybiBxdWVzdGlvbi5nZXRUeXBlKCkgPT09IFwibWljcm9waG9uZVwiO1xuICAgIH0sXG4gICAgaHRtbFRlbXBsYXRlOlxuICAgICAgXCI8ZGl2IHN0eWxlPSdoZWlnaHQ6IDM5cHgnPlwiICtcbiAgICAgIFwiPGJ1dHRvbiB0eXBlPSdidXR0b24nICB0aXRsZT0nUmVjb3JkJyBzdHlsZT0ndmVydGljYWwtYWxpZ246IHRvcDsgbWFyZ2luLXRvcDogM3B4JyA+PGkgY2xhc3M9J2ZhIGZhLW1pY3JvcGhvbmUnIGFyaWEtaGlkZGVuPSd0cnVlJz48L2k+PC9idXR0b24+XCIgK1xuICAgICAgXCImbmJzcDs8YnV0dG9uIHR5cGU9J2J1dHRvbicgdGl0bGU9J1NhdmUnIHN0eWxlPSd2ZXJ0aWNhbC1hbGlnbjogdG9wOyBtYXJnaW4tdG9wOiAzcHgnPjxpIGNsYXNzPSdmYSBmYS1jbG91ZCcgYXJpYS1oaWRkZW49J3RydWUnID48L2k+PC9idXR0b24+XCIgK1xuICAgICAgXCImbmJzcDs8YXVkaW8gc3R5bGU9J1wiICtcbiAgICAgIFwidmVydGljYWwtYWxpZ246IHRvcDtcIiArXG4gICAgICBcIm1hcmdpbi1sZWZ0OiAxMHB4O1wiICtcbiAgICAgIFwiaGVpZ2h0OjM1cHg7XCIgK1xuICAgICAgXCItbW96LWJveC1zaGFkb3c6IDJweCAycHggNHB4IDBweCAjMDA2NzczO1wiICtcbiAgICAgIFwiLXdlYmtpdC1ib3gtc2hhZG93OiAgMnB4IDJweCA0cHggMHB4ICMwMDY3NzM7XCIgK1xuICAgICAgXCJib3gtc2hhZG93OiAycHggMnB4IDRweCAwcHggIzAwNjc3MztcIiArXG4gICAgICBcIicgXCIgK1xuICAgICAgXCJjb250cm9scz0ndHJ1ZScgPlwiICtcbiAgICAgIFwiPC9hdWRpbz5cIiArXG4gICAgICBcIjwvZGl2PlwiLFxuICAgIGFjdGl2YXRlZEJ5Q2hhbmdlZDogZnVuY3Rpb24oYWN0aXZhdGVkQnkpIHtcbiAgICAgIFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZENsYXNzKFwibWljcm9waG9uZVwiLCBbXSwgbnVsbCwgXCJlbXB0eVwiKTtcbiAgICB9LFxuXG4gICAgYWZ0ZXJSZW5kZXI6IGZ1bmN0aW9uKHF1ZXN0aW9uLCBlbCkge1xuICAgICAgdmFyIHJvb3RXaWRnZXQgPSB0aGlzO1xuICAgICAgdmFyIGJ1dHRvblN0YXJ0RWwgPSBlbC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImJ1dHRvblwiKVswXTtcbiAgICAgIHZhciBidXR0b25TdG9wRWwgPSBlbC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImJ1dHRvblwiKVsxXTtcbiAgICAgIHZhciBhdWRpb0VsID0gZWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJhdWRpb1wiKVswXTtcblxuICAgICAgLy8vLy8vLy8vLyAgUmVjb3JkUlRDIGxvZ2ljXG5cbiAgICAgIHZhciBzdWNjZXNzQ2FsbGJhY2sgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgICAgdHlwZTogXCJhdWRpb1wiLFxuICAgICAgICAgIG1pbWVUeXBlOiBcImF1ZGlvL3dlYm1cIixcbiAgICAgICAgICBhdWRpb0JpdHNQZXJTZWNvbmQ6IDQ0MTAwLFxuICAgICAgICAgIHNhbXBsZVJhdGU6IDQ0MTAwLFxuICAgICAgICAgIGJ1ZmZlclNpemU6IDE2Mzg0LFxuICAgICAgICAgIG51bWJlck9mQXVkaW9DaGFubmVsczogMVxuICAgICAgICB9O1xuICAgICAgICBjb25zb2xlLmxvZyhcInN1Y2Nlc3NDYWxsYmFja1wiKTtcbiAgICAgICAgcXVlc3Rpb24uc3VydmV5Lm15c3RyZWFtID0gc3RyZWFtO1xuICAgICAgICBxdWVzdGlvbi5zdXJ2ZXkucmVjb3JkUlRDID0gUmVjb3JkUlRDKFxuICAgICAgICAgIHF1ZXN0aW9uLnN1cnZleS5teXN0cmVhbSxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0eXBlb2YgcXVlc3Rpb24uc3VydmV5LnJlY29yZFJUQyAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJzdGFydFJlY29yZGluZ1wiKTtcbiAgICAgICAgICBxdWVzdGlvbi5zdXJ2ZXkucmVjb3JkUlRDLnN0YXJ0UmVjb3JkaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHZhciBlcnJvckNhbGxiYWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGFsZXJ0KFwiTm8gbWljcm9waG9uZVwiKTtcbiAgICAgICAgcXVlc3Rpb24uc3VydmV5LnJlY29yZFJUQyA9IHVuZGVmaW5lZDtcbiAgICAgICAgcXVlc3Rpb24uc3VydmV5Lm15c3RyZWFtID0gdW5kZWZpbmVkO1xuICAgICAgfTtcblxuICAgICAgdmFyIHByb2Nlc3NBdWRpbyA9IGZ1bmN0aW9uKGF1ZGlvVmlkZW9XZWJNVVJMKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwicHJvY2Vzc0F1ZGlvXCIpO1xuICAgICAgICB2YXIgcmVjb3JkZWRCbG9iID0gcXVlc3Rpb24uc3VydmV5LnJlY29yZFJUQy5nZXRCbG9iKCk7XG5cbiAgICAgICAgdmFyIGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICBmaWxlUmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgdmFyIGRhdGFVcmkgPSBldmVudC50YXJnZXQucmVzdWx0O1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiZGF0YVVyaTogXCIgKyBkYXRhVXJpKTtcbiAgICAgICAgICBxdWVzdGlvbi52YWx1ZSA9IGRhdGFVcmk7XG4gICAgICAgICAgYXVkaW9FbC5zcmMgPSBkYXRhVXJpO1xuXG4gICAgICAgICAgY29uc29sZS5sb2coXCJjbGVhbmluZ1wiKTtcbiAgICAgICAgICBxdWVzdGlvbi5zdXJ2ZXkucmVjb3JkUlRDID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHF1ZXN0aW9uLnN1cnZleS5teXN0cmVhbSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfTtcbiAgICAgICAgZmlsZVJlYWRlci5yZWFkQXNEYXRhVVJMKHJlY29yZGVkQmxvYik7XG4gICAgICB9O1xuXG4gICAgICB2YXIgc3RhcnRSZWNvcmRpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgLy8gZXJhc2UgcHJldmlvdXMgZGF0YVxuICAgICAgICBxdWVzdGlvbi52YWx1ZSA9IHVuZGVmaW5lZDtcblxuICAgICAgICAvLyBpZiByZWNvcmRlciBvcGVuIG9uIGFub3RoZXIgcXVlc3Rpb25cdC0gdHJ5IHRvIHN0b3AgcmVjb3JkaW5nXG4gICAgICAgIGlmICh0eXBlb2YgcXVlc3Rpb24uc3VydmV5LnJlY29yZFJUQyAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgcXVlc3Rpb24uc3VydmV5LnJlY29yZFJUQy5zdG9wUmVjb3JkaW5nKGRvTm90aGluZ0hhbmRsZXIpO1xuICAgICAgICAgIGlmICh0eXBlb2YgcXVlc3Rpb24uc3VydmV5Lm15c3RyZWFtICE9IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHF1ZXN0aW9uLnN1cnZleS5teXN0cmVhbS5nZXRBdWRpb1RyYWNrcygpLmZvckVhY2goZnVuY3Rpb24odHJhY2spIHtcbiAgICAgICAgICAgICAgdHJhY2suc3RvcCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1lZGlhQ29uc3RyYWludHMgPSB7XG4gICAgICAgICAgdmlkZW86IGZhbHNlLFxuICAgICAgICAgIGF1ZGlvOiB0cnVlXG4gICAgICAgIH07XG5cbiAgICAgICAgbmF2aWdhdG9yLm1lZGlhRGV2aWNlc1xuICAgICAgICAgIC5nZXRVc2VyTWVkaWEobWVkaWFDb25zdHJhaW50cylcbiAgICAgICAgICAudGhlbihzdWNjZXNzQ2FsbGJhY2suYmluZCh0aGlzKSwgZXJyb3JDYWxsYmFjay5iaW5kKHRoaXMpKTtcbiAgICAgIH07XG5cbiAgICAgIHZhciBzdG9wUmVjb3JkaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwic3RvcFJlY29yZGluZ1wiKTtcbiAgICAgICAgaWYgKHR5cGVvZiBxdWVzdGlvbi5zdXJ2ZXkucmVjb3JkUlRDICE9IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICBxdWVzdGlvbi5zdXJ2ZXkucmVjb3JkUlRDLnN0b3BSZWNvcmRpbmcocHJvY2Vzc0F1ZGlvLmJpbmQodGhpcykpO1xuICAgICAgICAgIGlmICh0eXBlb2YgcXVlc3Rpb24uc3VydmV5Lm15c3RyZWFtICE9IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIHF1ZXN0aW9uLnN1cnZleS5teXN0cmVhbS5nZXRBdWRpb1RyYWNrcygpLmZvckVhY2goZnVuY3Rpb24odHJhY2spIHtcbiAgICAgICAgICAgICAgdHJhY2suc3RvcCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICAvLy8vLy8vLy8vLy8vLyAgZW5kIFJUQyBsb2dpYyAvLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgICAgaWYgKCFxdWVzdGlvbi5pc1JlYWRPbmx5KSB7XG4gICAgICAgIGJ1dHRvblN0YXJ0RWwub25jbGljayA9IHN0YXJ0UmVjb3JkaW5nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnV0dG9uU3RhcnRFbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGJ1dHRvblN0YXJ0RWwpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXF1ZXN0aW9uLmlzUmVhZE9ubHkpIHtcbiAgICAgICAgYnV0dG9uU3RvcEVsLm9uY2xpY2sgPSBzdG9wUmVjb3JkaW5nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnV0dG9uU3RvcEVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYnV0dG9uU3RvcEVsKTtcbiAgICAgIH1cblxuICAgICAgYXVkaW9FbC5zcmMgPSBxdWVzdGlvbi52YWx1ZTtcblxuICAgICAgdmFyIHVwZGF0ZVZhbHVlSGFuZGxlciA9IGZ1bmN0aW9uKCkge307XG5cbiAgICAgIHZhciBkb05vdGhpbmdIYW5kbGVyID0gZnVuY3Rpb24oKSB7fTtcblxuICAgICAgcXVlc3Rpb24udmFsdWVDaGFuZ2VkQ2FsbGJhY2sgPSB1cGRhdGVWYWx1ZUhhbmRsZXI7XG4gICAgICB1cGRhdGVWYWx1ZUhhbmRsZXIoKTtcbiAgICB9LFxuICAgIHdpbGxVbm1vdW50OiBmdW5jdGlvbihxdWVzdGlvbiwgZWwpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwidW5tb3VudCBtaWNyb3Bob25lIG5vIHJlY29yZCBcIik7XG4gICAgICBpZiAodHlwZW9mIHF1ZXN0aW9uLnN1cnZleS5yZWNvcmRSVEMgIT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBxdWVzdGlvbi5zdXJ2ZXkucmVjb3JkUlRDLnN0b3BSZWNvcmRpbmcoZG9Ob3RoaW5nSGFuZGxlcik7XG4gICAgICAgIGlmICh0eXBlb2YgcXVlc3Rpb24uc3VydmV5Lm15c3RyZWFtICE9IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICBxdWVzdGlvbi5zdXJ2ZXkubXlzdHJlYW0uZ2V0QXVkaW9UcmFja3MoKS5mb3JFYWNoKGZ1bmN0aW9uKHRyYWNrKSB7XG4gICAgICAgICAgICB0cmFjay5zdG9wKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcXVlc3Rpb24udmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHF1ZXN0aW9uLnN1cnZleS5yZWNvcmRSVEMgPSB1bmRlZmluZWQ7XG4gICAgICAgIHF1ZXN0aW9uLnN1cnZleS5teXN0cmVhbSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgU3VydmV5LkN1c3RvbVdpZGdldENvbGxlY3Rpb24uSW5zdGFuY2UuYWRkQ3VzdG9tV2lkZ2V0KHdpZGdldCwgXCJjdXN0b210eXBlXCIpO1xufVxuXG5pZiAodHlwZW9mIFN1cnZleSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICBpbml0KFN1cnZleSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGluaXQ7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9taWNyb3Bob25lLmpzXG4vLyBtb2R1bGUgaWQgPSAxNlxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSIsIid1c2Ugc3RyaWN0JztcclxuXHJcbi8vIExhc3QgdGltZSB1cGRhdGVkOiAyMDIwLTAyLTI2IDE6MTE6NDcgUE0gVVRDXHJcblxyXG4vLyBfX19fX19fX19fX19fX19fXHJcbi8vIFJlY29yZFJUQyB2NS41LjlcclxuXHJcbi8vIE9wZW4tU291cmNlZDogaHR0cHM6Ly9naXRodWIuY29tL211YXota2hhbi9SZWNvcmRSVENcclxuXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8vIE11YXogS2hhbiAgICAgLSB3d3cuTXVhektoYW4uY29tXHJcbi8vIE1JVCBMaWNlbnNlICAgLSB3d3cuV2ViUlRDLUV4cGVyaW1lbnQuY29tL2xpY2VuY2VcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbi8vIF9fX19fX19fX19fX1xyXG4vLyBSZWNvcmRSVEMuanNcclxuXHJcbi8qKlxyXG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL211YXota2hhbi9SZWNvcmRSVEN8UmVjb3JkUlRDfSBpcyBhIFdlYlJUQyBKYXZhU2NyaXB0IGxpYnJhcnkgZm9yIGF1ZGlvL3ZpZGVvIGFzIHdlbGwgYXMgc2NyZWVuIGFjdGl2aXR5IHJlY29yZGluZy4gSXQgc3VwcG9ydHMgQ2hyb21lLCBGaXJlZm94LCBPcGVyYSwgQW5kcm9pZCwgYW5kIE1pY3Jvc29mdCBFZGdlLiBQbGF0Zm9ybXM6IExpbnV4LCBNYWMgYW5kIFdpbmRvd3MuIFxyXG4gKiBAc3VtbWFyeSBSZWNvcmQgYXVkaW8sIHZpZGVvIG9yIHNjcmVlbiBpbnNpZGUgdGhlIGJyb3dzZXIuXHJcbiAqIEBsaWNlbnNlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbXVhei1raGFuL1JlY29yZFJUQy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVH1cclxuICogQGF1dGhvciB7QGxpbmsgaHR0cHM6Ly9NdWF6S2hhbi5jb218TXVheiBLaGFufVxyXG4gKiBAdHlwZWRlZiBSZWNvcmRSVENcclxuICogQGNsYXNzXHJcbiAqIEBleGFtcGxlXHJcbiAqIHZhciByZWNvcmRlciA9IFJlY29yZFJUQyhtZWRpYVN0cmVhbSBvciBbYXJyYXlPZk1lZGlhU3RyZWFtXSwge1xyXG4gKiAgICAgdHlwZTogJ3ZpZGVvJywgLy8gYXVkaW8gb3IgdmlkZW8gb3IgZ2lmIG9yIGNhbnZhc1xyXG4gKiAgICAgcmVjb3JkZXJUeXBlOiBNZWRpYVN0cmVhbVJlY29yZGVyIHx8IENhbnZhc1JlY29yZGVyIHx8IFN0ZXJlb0F1ZGlvUmVjb3JkZXIgfHwgRXRjXHJcbiAqIH0pO1xyXG4gKiByZWNvcmRlci5zdGFydFJlY29yZGluZygpO1xyXG4gKiBAc2VlIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uOlxyXG4gKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbXVhei1raGFuL1JlY29yZFJUQ3xSZWNvcmRSVEMgU291cmNlIENvZGV9XHJcbiAqIEBwYXJhbSB7TWVkaWFTdHJlYW19IG1lZGlhU3RyZWFtIC0gU2luZ2xlIG1lZGlhLXN0cmVhbSBvYmplY3QsIGFycmF5IG9mIG1lZGlhLXN0cmVhbXMsIGh0bWwtY2FudmFzLWVsZW1lbnQsIGV0Yy5cclxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyAtIHt0eXBlOlwidmlkZW9cIiwgcmVjb3JkZXJUeXBlOiBNZWRpYVN0cmVhbVJlY29yZGVyLCBkaXNhYmxlTG9nczogdHJ1ZSwgbnVtYmVyT2ZBdWRpb0NoYW5uZWxzOiAxLCBidWZmZXJTaXplOiAwLCBzYW1wbGVSYXRlOiAwLCBkZXNpcmVkU2FtcFJhdGU6IDE2MDAwLCB2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgZXRjLn1cclxuICovXHJcblxyXG5mdW5jdGlvbiBSZWNvcmRSVEMobWVkaWFTdHJlYW0sIGNvbmZpZykge1xyXG4gICAgaWYgKCFtZWRpYVN0cmVhbSkge1xyXG4gICAgICAgIHRocm93ICdGaXJzdCBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQuJztcclxuICAgIH1cclxuXHJcbiAgICBjb25maWcgPSBjb25maWcgfHwge1xyXG4gICAgICAgIHR5cGU6ICd2aWRlbydcclxuICAgIH07XHJcblxyXG4gICAgY29uZmlnID0gbmV3IFJlY29yZFJUQ0NvbmZpZ3VyYXRpb24obWVkaWFTdHJlYW0sIGNvbmZpZyk7XHJcblxyXG4gICAgLy8gYSByZWZlcmVuY2UgdG8gdXNlcidzIHJlY29yZFJUQyBvYmplY3RcclxuICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICBmdW5jdGlvbiBzdGFydFJlY29yZGluZyhjb25maWcyKSB7XHJcbiAgICAgICAgaWYgKCFjb25maWcuZGlzYWJsZUxvZ3MpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1JlY29yZFJUQyB2ZXJzaW9uOiAnLCBzZWxmLnZlcnNpb24pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCEhY29uZmlnMikge1xyXG4gICAgICAgICAgICAvLyBhbGxvdyB1c2VycyB0byBzZXQgb3B0aW9ucyB1c2luZyBzdGFydFJlY29yZGluZyBtZXRob2RcclxuICAgICAgICAgICAgLy8gY29uZmlnMiBpcyBzaW1pbGFyIHRvIG1haW4gXCJjb25maWdcIiBvYmplY3QgKHNlY29uZCBwYXJhbWV0ZXIgb3ZlciBSZWNvcmRSVEMgY29uc3RydWN0b3IpXHJcbiAgICAgICAgICAgIGNvbmZpZyA9IG5ldyBSZWNvcmRSVENDb25maWd1cmF0aW9uKG1lZGlhU3RyZWFtLCBjb25maWcyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghY29uZmlnLmRpc2FibGVMb2dzKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzdGFydGVkIHJlY29yZGluZyAnICsgY29uZmlnLnR5cGUgKyAnIHN0cmVhbS4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChtZWRpYVJlY29yZGVyKSB7XHJcbiAgICAgICAgICAgIG1lZGlhUmVjb3JkZXIuY2xlYXJSZWNvcmRlZERhdGEoKTtcclxuICAgICAgICAgICAgbWVkaWFSZWNvcmRlci5yZWNvcmQoKTtcclxuXHJcbiAgICAgICAgICAgIHNldFN0YXRlKCdyZWNvcmRpbmcnKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzZWxmLnJlY29yZGluZ0R1cmF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBoYW5kbGVSZWNvcmRpbmdEdXJhdGlvbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBzZWxmO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaW5pdFJlY29yZGVyKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5yZWNvcmRpbmdEdXJhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgaGFuZGxlUmVjb3JkaW5nRHVyYXRpb24oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gc2VsZjtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBpbml0UmVjb3JkZXIoaW5pdENhbGxiYWNrKSB7XHJcbiAgICAgICAgaWYgKGluaXRDYWxsYmFjaykge1xyXG4gICAgICAgICAgICBjb25maWcuaW5pdENhbGxiYWNrID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICBpbml0Q2FsbGJhY2soKTtcclxuICAgICAgICAgICAgICAgIGluaXRDYWxsYmFjayA9IGNvbmZpZy5pbml0Q2FsbGJhY2sgPSBudWxsOyAvLyByZWNvcmRlci5pbml0UmVjb3JkZXIgc2hvdWxkIGJlIGNhbGwtYmFja2VkIG9uY2UuXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgUmVjb3JkZXIgPSBuZXcgR2V0UmVjb3JkZXJUeXBlKG1lZGlhU3RyZWFtLCBjb25maWcpO1xyXG5cclxuICAgICAgICBtZWRpYVJlY29yZGVyID0gbmV3IFJlY29yZGVyKG1lZGlhU3RyZWFtLCBjb25maWcpO1xyXG4gICAgICAgIG1lZGlhUmVjb3JkZXIucmVjb3JkKCk7XHJcblxyXG4gICAgICAgIHNldFN0YXRlKCdyZWNvcmRpbmcnKTtcclxuXHJcbiAgICAgICAgaWYgKCFjb25maWcuZGlzYWJsZUxvZ3MpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ0luaXRpYWxpemVkIHJlY29yZGVyVHlwZTonLCBtZWRpYVJlY29yZGVyLmNvbnN0cnVjdG9yLm5hbWUsICdmb3Igb3V0cHV0LXR5cGU6JywgY29uZmlnLnR5cGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBzdG9wUmVjb3JkaW5nKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xyXG5cclxuICAgICAgICBpZiAoIW1lZGlhUmVjb3JkZXIpIHtcclxuICAgICAgICAgICAgd2FybmluZ0xvZygpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2VsZi5zdGF0ZSA9PT0gJ3BhdXNlZCcpIHtcclxuICAgICAgICAgICAgc2VsZi5yZXN1bWVSZWNvcmRpbmcoKTtcclxuXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICBzdG9wUmVjb3JkaW5nKGNhbGxiYWNrKTtcclxuICAgICAgICAgICAgfSwgMSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzZWxmLnN0YXRlICE9PSAncmVjb3JkaW5nJyAmJiAhY29uZmlnLmRpc2FibGVMb2dzKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUmVjb3JkaW5nIHN0YXRlIHNob3VsZCBiZTogXCJyZWNvcmRpbmdcIiwgaG93ZXZlciBjdXJyZW50IHN0YXRlIGlzOiAnLCBzZWxmLnN0YXRlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghY29uZmlnLmRpc2FibGVMb2dzKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTdG9wcGVkIHJlY29yZGluZyAnICsgY29uZmlnLnR5cGUgKyAnIHN0cmVhbS4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjb25maWcudHlwZSAhPT0gJ2dpZicpIHtcclxuICAgICAgICAgICAgbWVkaWFSZWNvcmRlci5zdG9wKF9jYWxsYmFjayk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbWVkaWFSZWNvcmRlci5zdG9wKCk7XHJcbiAgICAgICAgICAgIF9jYWxsYmFjaygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2V0U3RhdGUoJ3N0b3BwZWQnKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gX2NhbGxiYWNrKF9fYmxvYikge1xyXG4gICAgICAgICAgICBpZiAoIW1lZGlhUmVjb3JkZXIpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2suY2FsbCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoc2VsZiwgJycpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygnJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG1lZGlhUmVjb3JkZXIpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lZGlhUmVjb3JkZXJba2V5XSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBzZWxmW2tleV0gPSBtZWRpYVJlY29yZGVyW2tleV07XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdmFyIGJsb2IgPSBtZWRpYVJlY29yZGVyLmJsb2I7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWJsb2IpIHtcclxuICAgICAgICAgICAgICAgIGlmIChfX2Jsb2IpIHtcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYVJlY29yZGVyLmJsb2IgPSBibG9iID0gX19ibG9iO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyAnUmVjb3JkaW5nIGZhaWxlZC4nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoYmxvYiAmJiAhY29uZmlnLmRpc2FibGVMb2dzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhibG9iLnR5cGUsICctPicsIGJ5dGVzVG9TaXplKGJsb2Iuc2l6ZSkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgIHZhciB1cmw7XHJcblxyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrLmNhbGwgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKHNlbGYsIHVybCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHVybCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghY29uZmlnLmF1dG9Xcml0ZVRvRGlzaykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBnZXREYXRhVVJMKGZ1bmN0aW9uKGRhdGFVUkwpIHtcclxuICAgICAgICAgICAgICAgIHZhciBwYXJhbWV0ZXIgPSB7fTtcclxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcltjb25maWcudHlwZSArICdCbG9iJ10gPSBkYXRhVVJMO1xyXG4gICAgICAgICAgICAgICAgRGlza1N0b3JhZ2UuU3RvcmUocGFyYW1ldGVyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHBhdXNlUmVjb3JkaW5nKCkge1xyXG4gICAgICAgIGlmICghbWVkaWFSZWNvcmRlcikge1xyXG4gICAgICAgICAgICB3YXJuaW5nTG9nKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzZWxmLnN0YXRlICE9PSAncmVjb3JkaW5nJykge1xyXG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5kaXNhYmxlTG9ncykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdVbmFibGUgdG8gcGF1c2UgdGhlIHJlY29yZGluZy4gUmVjb3JkaW5nIHN0YXRlOiAnLCBzZWxmLnN0YXRlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZXRTdGF0ZSgncGF1c2VkJyk7XHJcblxyXG4gICAgICAgIG1lZGlhUmVjb3JkZXIucGF1c2UoKTtcclxuXHJcbiAgICAgICAgaWYgKCFjb25maWcuZGlzYWJsZUxvZ3MpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1BhdXNlZCByZWNvcmRpbmcuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHJlc3VtZVJlY29yZGluZygpIHtcclxuICAgICAgICBpZiAoIW1lZGlhUmVjb3JkZXIpIHtcclxuICAgICAgICAgICAgd2FybmluZ0xvZygpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2VsZi5zdGF0ZSAhPT0gJ3BhdXNlZCcpIHtcclxuICAgICAgICAgICAgaWYgKCFjb25maWcuZGlzYWJsZUxvZ3MpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5hYmxlIHRvIHJlc3VtZSB0aGUgcmVjb3JkaW5nLiBSZWNvcmRpbmcgc3RhdGU6ICcsIHNlbGYuc3RhdGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNldFN0YXRlKCdyZWNvcmRpbmcnKTtcclxuXHJcbiAgICAgICAgLy8gbm90IGFsbCBsaWJzIGhhdmUgdGhpcyBtZXRob2QgeWV0XHJcbiAgICAgICAgbWVkaWFSZWNvcmRlci5yZXN1bWUoKTtcclxuXHJcbiAgICAgICAgaWYgKCFjb25maWcuZGlzYWJsZUxvZ3MpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1Jlc3VtZWQgcmVjb3JkaW5nLicpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiByZWFkRmlsZShfYmxvYikge1xyXG4gICAgICAgIHBvc3RNZXNzYWdlKG5ldyBGaWxlUmVhZGVyU3luYygpLnJlYWRBc0RhdGFVUkwoX2Jsb2IpKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXREYXRhVVJMKGNhbGxiYWNrLCBfbWVkaWFSZWNvcmRlcikge1xyXG4gICAgICAgIGlmICghY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgdGhyb3cgJ1Bhc3MgYSBjYWxsYmFjayBmdW5jdGlvbiBvdmVyIGdldERhdGFVUkwuJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBibG9iID0gX21lZGlhUmVjb3JkZXIgPyBfbWVkaWFSZWNvcmRlci5ibG9iIDogKG1lZGlhUmVjb3JkZXIgfHwge30pLmJsb2I7XHJcblxyXG4gICAgICAgIGlmICghYmxvYikge1xyXG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5kaXNhYmxlTG9ncykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdCbG9iIGVuY29kZXIgZGlkIG5vdCBmaW5pc2ggaXRzIGpvYiB5ZXQuJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICBnZXREYXRhVVJMKGNhbGxiYWNrLCBfbWVkaWFSZWNvcmRlcik7XHJcbiAgICAgICAgICAgIH0sIDEwMDApO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZW9mIFdvcmtlciAhPT0gJ3VuZGVmaW5lZCcgJiYgIW5hdmlnYXRvci5tb3pHZXRVc2VyTWVkaWEpIHtcclxuICAgICAgICAgICAgdmFyIHdlYldvcmtlciA9IHByb2Nlc3NJbldlYldvcmtlcihyZWFkRmlsZSk7XHJcblxyXG4gICAgICAgICAgICB3ZWJXb3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGV2ZW50LmRhdGEpO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgd2ViV29ya2VyLnBvc3RNZXNzYWdlKGJsb2IpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChibG9iKTtcclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhldmVudC50YXJnZXQucmVzdWx0KTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NJbldlYldvcmtlcihfZnVuY3Rpb24pIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHZhciBibG9iID0gVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbX2Z1bmN0aW9uLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICAgICAgJ3RoaXMub25tZXNzYWdlID0gIGZ1bmN0aW9uIChlZWUpIHsnICsgX2Z1bmN0aW9uLm5hbWUgKyAnKGVlZS5kYXRhKTt9J1xyXG4gICAgICAgICAgICAgICAgXSwge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdhcHBsaWNhdGlvbi9qYXZhc2NyaXB0J1xyXG4gICAgICAgICAgICAgICAgfSkpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyKGJsb2IpO1xyXG4gICAgICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChibG9iKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXI7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGhhbmRsZVJlY29yZGluZ0R1cmF0aW9uKGNvdW50ZXIpIHtcclxuICAgICAgICBjb3VudGVyID0gY291bnRlciB8fCAwO1xyXG5cclxuICAgICAgICBpZiAoc2VsZi5zdGF0ZSA9PT0gJ3BhdXNlZCcpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIGhhbmRsZVJlY29yZGluZ0R1cmF0aW9uKGNvdW50ZXIpO1xyXG4gICAgICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNlbGYuc3RhdGUgPT09ICdzdG9wcGVkJykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY291bnRlciA+PSBzZWxmLnJlY29yZGluZ0R1cmF0aW9uKSB7XHJcbiAgICAgICAgICAgIHN0b3BSZWNvcmRpbmcoc2VsZi5vblJlY29yZGluZ1N0b3BwZWQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb3VudGVyICs9IDEwMDA7IC8vIDEtc2Vjb25kXHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZVJlY29yZGluZ0R1cmF0aW9uKGNvdW50ZXIpO1xyXG4gICAgICAgIH0sIDEwMDApO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHNldFN0YXRlKHN0YXRlKSB7XHJcbiAgICAgICAgaWYgKCFzZWxmKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNlbGYuc3RhdGUgPSBzdGF0ZTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBzZWxmLm9uU3RhdGVDaGFuZ2VkLmNhbGwgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgc2VsZi5vblN0YXRlQ2hhbmdlZC5jYWxsKHNlbGYsIHN0YXRlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzZWxmLm9uU3RhdGVDaGFuZ2VkKHN0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIFdBUk5JTkcgPSAnSXQgc2VlbXMgdGhhdCByZWNvcmRlciBpcyBkZXN0cm95ZWQgb3IgXCJzdGFydFJlY29yZGluZ1wiIGlzIG5vdCBpbnZva2VkIGZvciAnICsgY29uZmlnLnR5cGUgKyAnIHJlY29yZGVyLic7XHJcblxyXG4gICAgZnVuY3Rpb24gd2FybmluZ0xvZygpIHtcclxuICAgICAgICBpZiAoY29uZmlnLmRpc2FibGVMb2dzID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnNvbGUud2FybihXQVJOSU5HKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgbWVkaWFSZWNvcmRlcjtcclxuXHJcbiAgICB2YXIgcmV0dXJuT2JqZWN0ID0ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoaXMgbWV0aG9kIHN0YXJ0cyB0aGUgcmVjb3JkaW5nLlxyXG4gICAgICAgICAqIEBtZXRob2RcclxuICAgICAgICAgKiBAbWVtYmVyb2YgUmVjb3JkUlRDXHJcbiAgICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAgICogQGV4YW1wbGVcclxuICAgICAgICAgKiB2YXIgcmVjb3JkZXIgPSBSZWNvcmRSVEMobWVkaWFTdHJlYW0sIHtcclxuICAgICAgICAgKiAgICAgdHlwZTogJ3ZpZGVvJ1xyXG4gICAgICAgICAqIH0pO1xyXG4gICAgICAgICAqIHJlY29yZGVyLnN0YXJ0UmVjb3JkaW5nKCk7XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc3RhcnRSZWNvcmRpbmc6IHN0YXJ0UmVjb3JkaW5nLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGlzIG1ldGhvZCBzdG9wcyB0aGUgcmVjb3JkaW5nLiBJdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0byBnZXQgXCJibG9iXCIgb3IgXCJVUklcIiBpbnNpZGUgdGhlIGNhbGxiYWNrIHRvIG1ha2Ugc3VyZSBhbGwgcmVjb3JkZXJzIGZpbmlzaGVkIHRoZWlyIGpvYi5cclxuICAgICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIENhbGxiYWNrIHRvIGdldCB0aGUgcmVjb3JkZWQgYmxvYi5cclxuICAgICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAgICogQG1lbWJlcm9mIFJlY29yZFJUQ1xyXG4gICAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgICAqIEBleGFtcGxlXHJcbiAgICAgICAgICogcmVjb3JkZXIuc3RvcFJlY29yZGluZyhmdW5jdGlvbigpIHtcclxuICAgICAgICAgKiAgICAgLy8gdXNlIGVpdGhlciBcInRoaXNcIiBvciBcInJlY29yZGVyXCIgb2JqZWN0OyBib3RoIGFyZSBpZGVudGljYWxcclxuICAgICAgICAgKiAgICAgdmlkZW8uc3JjID0gdGhpcy50b1VSTCgpO1xyXG4gICAgICAgICAqICAgICB2YXIgYmxvYiA9IHRoaXMuZ2V0QmxvYigpO1xyXG4gICAgICAgICAqIH0pO1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHN0b3BSZWNvcmRpbmc6IHN0b3BSZWNvcmRpbmcsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoaXMgbWV0aG9kIHBhdXNlcyB0aGUgcmVjb3JkaW5nLiBZb3UgY2FuIHJlc3VtZSByZWNvcmRpbmcgdXNpbmcgXCJyZXN1bWVSZWNvcmRpbmdcIiBtZXRob2QuXHJcbiAgICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgICAqIEBtZW1iZXJvZiBSZWNvcmRSVENcclxuICAgICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICAgKiBAdG9kbyBGaXJlZm94IGlzIHVuYWJsZSB0byBwYXVzZSB0aGUgcmVjb3JkaW5nLiBGaXggaXQuXHJcbiAgICAgICAgICogQGV4YW1wbGVcclxuICAgICAgICAgKiByZWNvcmRlci5wYXVzZVJlY29yZGluZygpOyAgLy8gcGF1c2UgdGhlIHJlY29yZGluZ1xyXG4gICAgICAgICAqIHJlY29yZGVyLnJlc3VtZVJlY29yZGluZygpOyAvLyByZXN1bWUgYWdhaW5cclxuICAgICAgICAgKi9cclxuICAgICAgICBwYXVzZVJlY29yZGluZzogcGF1c2VSZWNvcmRpbmcsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoaXMgbWV0aG9kIHJlc3VtZXMgdGhlIHJlY29yZGluZy5cclxuICAgICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAgICogQG1lbWJlcm9mIFJlY29yZFJUQ1xyXG4gICAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgICAqIEBleGFtcGxlXHJcbiAgICAgICAgICogcmVjb3JkZXIucGF1c2VSZWNvcmRpbmcoKTsgIC8vIGZpcnN0IG9mIGFsbCwgcGF1c2UgdGhlIHJlY29yZGluZ1xyXG4gICAgICAgICAqIHJlY29yZGVyLnJlc3VtZVJlY29yZGluZygpOyAvLyBub3cgcmVzdW1lIGl0XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcmVzdW1lUmVjb3JkaW5nOiByZXN1bWVSZWNvcmRpbmcsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSByZWNvcmRpbmcuXHJcbiAgICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgICAqIEBtZW1iZXJvZiBSZWNvcmRSVENcclxuICAgICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICAgKiBAdG9kbyBUaGlzIG1ldGhvZCBzaG91bGQgYmUgZGVwcmVjYXRlZC5cclxuICAgICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAgICAqIHJlY29yZGVyLmluaXRSZWNvcmRlcigpO1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGluaXRSZWNvcmRlcjogaW5pdFJlY29yZGVyLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBBc2sgUmVjb3JkUlRDIHRvIGF1dG8tc3RvcCB0aGUgcmVjb3JkaW5nIGFmdGVyIDUgbWludXRlcy5cclxuICAgICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAgICogQG1lbWJlcm9mIFJlY29yZFJUQ1xyXG4gICAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgICAqIEBleGFtcGxlXHJcbiAgICAgICAgICogdmFyIGZpdmVNaW51dGVzID0gNSAqIDEwMDAgKiA2MDtcclxuICAgICAgICAgKiByZWNvcmRlci5zZXRSZWNvcmRpbmdEdXJhdGlvbihmaXZlTWludXRlcywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICogICAgdmFyIGJsb2IgPSB0aGlzLmdldEJsb2IoKTtcclxuICAgICAgICAgKiAgICB2aWRlby5zcmMgPSB0aGlzLnRvVVJMKCk7XHJcbiAgICAgICAgICogfSk7XHJcbiAgICAgICAgICogXHJcbiAgICAgICAgICogLy8gb3Igb3RoZXJ3aXNlXHJcbiAgICAgICAgICogcmVjb3JkZXIuc2V0UmVjb3JkaW5nRHVyYXRpb24oZml2ZU1pbnV0ZXMpLm9uUmVjb3JkaW5nU3RvcHBlZChmdW5jdGlvbigpIHtcclxuICAgICAgICAgKiAgICB2YXIgYmxvYiA9IHRoaXMuZ2V0QmxvYigpO1xyXG4gICAgICAgICAqICAgIHZpZGVvLnNyYyA9IHRoaXMudG9VUkwoKTtcclxuICAgICAgICAgKiB9KTtcclxuICAgICAgICAgKi9cclxuICAgICAgICBzZXRSZWNvcmRpbmdEdXJhdGlvbjogZnVuY3Rpb24ocmVjb3JkaW5nRHVyYXRpb24sIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVjb3JkaW5nRHVyYXRpb24gPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyAncmVjb3JkaW5nRHVyYXRpb24gaXMgcmVxdWlyZWQuJztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiByZWNvcmRpbmdEdXJhdGlvbiAhPT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgICAgIHRocm93ICdyZWNvcmRpbmdEdXJhdGlvbiBtdXN0IGJlIGEgbnVtYmVyLic7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHNlbGYucmVjb3JkaW5nRHVyYXRpb24gPSByZWNvcmRpbmdEdXJhdGlvbjtcclxuICAgICAgICAgICAgc2VsZi5vblJlY29yZGluZ1N0b3BwZWQgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIG9uUmVjb3JkaW5nU3RvcHBlZDogZnVuY3Rpb24oY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLm9uUmVjb3JkaW5nU3RvcHBlZCA9IGNhbGxiYWNrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIGNsZWFyL3Jlc2V0IGFsbCB0aGUgcmVjb3JkZWQgZGF0YS5cclxuICAgICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAgICogQG1lbWJlcm9mIFJlY29yZFJUQ1xyXG4gICAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgICAqIEB0b2RvIEZpZ3VyZSBvdXQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBcInJlc2V0XCIgYW5kIFwiY2xlYXJSZWNvcmRlZERhdGFcIiBtZXRob2RzLlxyXG4gICAgICAgICAqIEBleGFtcGxlXHJcbiAgICAgICAgICogcmVjb3JkZXIuY2xlYXJSZWNvcmRlZERhdGEoKTtcclxuICAgICAgICAgKi9cclxuICAgICAgICBjbGVhclJlY29yZGVkRGF0YTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGlmICghbWVkaWFSZWNvcmRlcikge1xyXG4gICAgICAgICAgICAgICAgd2FybmluZ0xvZygpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBtZWRpYVJlY29yZGVyLmNsZWFyUmVjb3JkZWREYXRhKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5kaXNhYmxlTG9ncykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0NsZWFyZWQgb2xkIHJlY29yZGVkIGRhdGEuJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBHZXQgdGhlIHJlY29yZGVkIGJsb2IuIFVzZSB0aGlzIG1ldGhvZCBpbnNpZGUgdGhlIFwic3RvcFJlY29yZGluZ1wiIGNhbGxiYWNrLlxyXG4gICAgICAgICAqIEBtZXRob2RcclxuICAgICAgICAgKiBAbWVtYmVyb2YgUmVjb3JkUlRDXHJcbiAgICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAgICogQGV4YW1wbGVcclxuICAgICAgICAgKiByZWNvcmRlci5zdG9wUmVjb3JkaW5nKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAqICAgICB2YXIgYmxvYiA9IHRoaXMuZ2V0QmxvYigpO1xyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogICAgIHZhciBmaWxlID0gbmV3IEZpbGUoW2Jsb2JdLCAnZmlsZW5hbWUud2VibScsIHtcclxuICAgICAgICAgKiAgICAgICAgIHR5cGU6ICd2aWRlby93ZWJtJ1xyXG4gICAgICAgICAqICAgICB9KTtcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqICAgICB2YXIgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgICAgICAgKiAgICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgZmlsZSk7IC8vIHVwbG9hZCBcIkZpbGVcIiBvYmplY3QgcmF0aGVyIHRoYW4gYSBcIkJsb2JcIlxyXG4gICAgICAgICAqICAgICB1cGxvYWRUb1NlcnZlcihmb3JtRGF0YSk7XHJcbiAgICAgICAgICogfSk7XHJcbiAgICAgICAgICogQHJldHVybnMge0Jsb2J9IFJldHVybnMgcmVjb3JkZWQgZGF0YSBhcyBcIkJsb2JcIiBvYmplY3QuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZ2V0QmxvYjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGlmICghbWVkaWFSZWNvcmRlcikge1xyXG4gICAgICAgICAgICAgICAgd2FybmluZ0xvZygpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbWVkaWFSZWNvcmRlci5ibG9iO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEdldCBkYXRhLVVSSSBpbnN0ZWFkIG9mIEJsb2IuXHJcbiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBDYWxsYmFjayB0byBnZXQgdGhlIERhdGEtVVJJLlxyXG4gICAgICAgICAqIEBtZXRob2RcclxuICAgICAgICAgKiBAbWVtYmVyb2YgUmVjb3JkUlRDXHJcbiAgICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAgICogQGV4YW1wbGVcclxuICAgICAgICAgKiByZWNvcmRlci5zdG9wUmVjb3JkaW5nKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAqICAgICByZWNvcmRlci5nZXREYXRhVVJMKGZ1bmN0aW9uKGRhdGFVUkkpIHtcclxuICAgICAgICAgKiAgICAgICAgIHZpZGVvLnNyYyA9IGRhdGFVUkk7XHJcbiAgICAgICAgICogICAgIH0pO1xyXG4gICAgICAgICAqIH0pO1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGdldERhdGFVUkw6IGdldERhdGFVUkwsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEdldCB2aXJ0dWFsL3RlbXBvcmFyeSBVUkwuIFVzYWdlIG9mIHRoaXMgVVJMIGlzIGxpbWl0ZWQgdG8gY3VycmVudCB0YWIuXHJcbiAgICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgICAqIEBtZW1iZXJvZiBSZWNvcmRSVENcclxuICAgICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAgICAqIHJlY29yZGVyLnN0b3BSZWNvcmRpbmcoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICogICAgIHZpZGVvLnNyYyA9IHRoaXMudG9VUkwoKTtcclxuICAgICAgICAgKiB9KTtcclxuICAgICAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBSZXR1cm5zIGEgdmlydHVhbC90ZW1wb3JhcnkgVVJMIGZvciB0aGUgcmVjb3JkZWQgXCJCbG9iXCIuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdG9VUkw6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBpZiAoIW1lZGlhUmVjb3JkZXIpIHtcclxuICAgICAgICAgICAgICAgIHdhcm5pbmdMb2coKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIFVSTC5jcmVhdGVPYmplY3RVUkwobWVkaWFSZWNvcmRlci5ibG9iKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBHZXQgaW50ZXJuYWwgcmVjb3JkaW5nIG9iamVjdCAoaS5lLiBpbnRlcm5hbCBtb2R1bGUpIGUuZy4gTXV0bGlTdHJlYW1SZWNvcmRlciwgTWVkaWFTdHJlYW1SZWNvcmRlciwgU3RlcmVvQXVkaW9SZWNvcmRlciBvciBXaGFtbXlSZWNvcmRlciBldGMuXHJcbiAgICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgICAqIEBtZW1iZXJvZiBSZWNvcmRSVENcclxuICAgICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAgICAqIHZhciBpbnRlcm5hbFJlY29yZGVyID0gcmVjb3JkZXIuZ2V0SW50ZXJuYWxSZWNvcmRlcigpO1xyXG4gICAgICAgICAqIGlmKGludGVybmFsUmVjb3JkZXIgaW5zdGFuY2VvZiBNdWx0aVN0cmVhbVJlY29yZGVyKSB7XHJcbiAgICAgICAgICogICAgIGludGVybmFsUmVjb3JkZXIuYWRkU3RyZWFtcyhbbmV3QXVkaW9TdHJlYW1dKTtcclxuICAgICAgICAgKiAgICAgaW50ZXJuYWxSZWNvcmRlci5yZXNldFZpZGVvU3RyZWFtcyhbc2NyZWVuU3RyZWFtXSk7XHJcbiAgICAgICAgICogfVxyXG4gICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgaW50ZXJuYWwgcmVjb3JkaW5nIG9iamVjdC5cclxuICAgICAgICAgKi9cclxuICAgICAgICBnZXRJbnRlcm5hbFJlY29yZGVyOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1lZGlhUmVjb3JkZXI7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogSW52b2tlIHNhdmUtYXMgZGlhbG9nIHRvIHNhdmUgdGhlIHJlY29yZGVkIGJsb2IgaW50byB5b3VyIGRpc2suXHJcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGZpbGVOYW1lIC0gU2V0IHlvdXIgb3duIGZpbGUgbmFtZS5cclxuICAgICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAgICogQG1lbWJlcm9mIFJlY29yZFJUQ1xyXG4gICAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgICAqIEBleGFtcGxlXHJcbiAgICAgICAgICogcmVjb3JkZXIuc3RvcFJlY29yZGluZyhmdW5jdGlvbigpIHtcclxuICAgICAgICAgKiAgICAgdGhpcy5zYXZlKCdmaWxlLW5hbWUnKTtcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqICAgICAvLyBvciBtYW51YWxseTpcclxuICAgICAgICAgKiAgICAgaW52b2tlU2F2ZUFzRGlhbG9nKHRoaXMuZ2V0QmxvYigpLCAnZmlsZW5hbWUud2VibScpO1xyXG4gICAgICAgICAqIH0pO1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNhdmU6IGZ1bmN0aW9uKGZpbGVOYW1lKSB7XHJcbiAgICAgICAgICAgIGlmICghbWVkaWFSZWNvcmRlcikge1xyXG4gICAgICAgICAgICAgICAgd2FybmluZ0xvZygpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpbnZva2VTYXZlQXNEaWFsb2cobWVkaWFSZWNvcmRlci5ibG9iLCBmaWxlTmFtZSk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhpcyBtZXRob2QgZ2V0cyBhIGJsb2IgZnJvbSBpbmRleGVkLURCIHN0b3JhZ2UuXHJcbiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBDYWxsYmFjayB0byBnZXQgdGhlIHJlY29yZGVkIGJsb2IuXHJcbiAgICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgICAqIEBtZW1iZXJvZiBSZWNvcmRSVENcclxuICAgICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAgICAqIHJlY29yZGVyLmdldEZyb21EaXNrKGZ1bmN0aW9uKGRhdGFVUkwpIHtcclxuICAgICAgICAgKiAgICAgdmlkZW8uc3JjID0gZGF0YVVSTDtcclxuICAgICAgICAgKiB9KTtcclxuICAgICAgICAgKi9cclxuICAgICAgICBnZXRGcm9tRGlzazogZnVuY3Rpb24oY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgaWYgKCFtZWRpYVJlY29yZGVyKSB7XHJcbiAgICAgICAgICAgICAgICB3YXJuaW5nTG9nKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIFJlY29yZFJUQy5nZXRGcm9tRGlzayhjb25maWcudHlwZSwgY2FsbGJhY2spO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFRoaXMgbWV0aG9kIGFwcGVuZHMgYW4gYXJyYXkgb2Ygd2VicCBpbWFnZXMgdG8gdGhlIHJlY29yZGVkIHZpZGVvLWJsb2IuIEl0IHRha2VzIGFuIFwiYXJyYXlcIiBvYmplY3QuXHJcbiAgICAgICAgICogQHR5cGUge0FycmF5LjxBcnJheT59XHJcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXlPZldlYlBJbWFnZXMgLSBBcnJheSBvZiB3ZWJwIGltYWdlcy5cclxuICAgICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAgICogQG1lbWJlcm9mIFJlY29yZFJUQ1xyXG4gICAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgICAqIEB0b2RvIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBkZXByZWNhdGVkLlxyXG4gICAgICAgICAqIEBleGFtcGxlXHJcbiAgICAgICAgICogdmFyIGFycmF5T2ZXZWJQSW1hZ2VzID0gW107XHJcbiAgICAgICAgICogYXJyYXlPZldlYlBJbWFnZXMucHVzaCh7XHJcbiAgICAgICAgICogICAgIGR1cmF0aW9uOiBpbmRleCxcclxuICAgICAgICAgKiAgICAgaW1hZ2U6ICdkYXRhOmltYWdlL3dlYnA7YmFzZTY0LC4uLidcclxuICAgICAgICAgKiB9KTtcclxuICAgICAgICAgKiByZWNvcmRlci5zZXRBZHZlcnRpc2VtZW50QXJyYXkoYXJyYXlPZldlYlBJbWFnZXMpO1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNldEFkdmVydGlzZW1lbnRBcnJheTogZnVuY3Rpb24oYXJyYXlPZldlYlBJbWFnZXMpIHtcclxuICAgICAgICAgICAgY29uZmlnLmFkdmVydGlzZW1lbnQgPSBbXTtcclxuXHJcbiAgICAgICAgICAgIHZhciBsZW5ndGggPSBhcnJheU9mV2ViUEltYWdlcy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZy5hZHZlcnRpc2VtZW50LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiBpLFxyXG4gICAgICAgICAgICAgICAgICAgIGltYWdlOiBhcnJheU9mV2ViUEltYWdlc1tpXVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBJdCBpcyBlcXVpdmFsZW50IHRvIDxjb2RlIGNsYXNzPVwic3RyXCI+XCJyZWNvcmRlci5nZXRCbG9iKClcIjwvY29kZT4gbWV0aG9kLiBVc2FnZSBvZiBcImdldEJsb2JcIiBpcyByZWNvbW1lbmRlZCwgdGhvdWdoLlxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7QmxvYn0gYmxvYiAtIFJlY29yZGVkIEJsb2IgY2FuIGJlIGFjY2Vzc2VkIHVzaW5nIHRoaXMgcHJvcGVydHkuXHJcbiAgICAgICAgICogQG1lbWJlcm9mIFJlY29yZFJUQ1xyXG4gICAgICAgICAqIEBpbnN0YW5jZVxyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBleGFtcGxlXHJcbiAgICAgICAgICogcmVjb3JkZXIuc3RvcFJlY29yZGluZyhmdW5jdGlvbigpIHtcclxuICAgICAgICAgKiAgICAgdmFyIGJsb2IgPSB0aGlzLmJsb2I7XHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiAgICAgLy8gYmVsb3cgb25lIGlzIHJlY29tbWVuZGVkXHJcbiAgICAgICAgICogICAgIHZhciBibG9iID0gdGhpcy5nZXRCbG9iKCk7XHJcbiAgICAgICAgICogfSk7XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYmxvYjogbnVsbCxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogVGhpcyB3b3JrcyBvbmx5IHdpdGgge3JlY29yZGVyVHlwZTpTdGVyZW9BdWRpb1JlY29yZGVyfS4gVXNlIHRoaXMgcHJvcGVydHkgb24gXCJzdG9wUmVjb3JkaW5nXCIgdG8gdmVyaWZ5IHRoZSBlbmNvZGVyJ3Mgc2FtcGxlLXJhdGVzLlxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBidWZmZXJTaXplIC0gQnVmZmVyLXNpemUgdXNlZCB0byBlbmNvZGUgdGhlIFdBViBjb250YWluZXJcclxuICAgICAgICAgKiBAbWVtYmVyb2YgUmVjb3JkUlRDXHJcbiAgICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQGV4YW1wbGVcclxuICAgICAgICAgKiByZWNvcmRlci5zdG9wUmVjb3JkaW5nKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAqICAgICBhbGVydCgnUmVjb3JkZXIgdXNlZCB0aGlzIGJ1ZmZlci1zaXplOiAnICsgdGhpcy5idWZmZXJTaXplKTtcclxuICAgICAgICAgKiB9KTtcclxuICAgICAgICAgKi9cclxuICAgICAgICBidWZmZXJTaXplOiAwLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGlzIHdvcmtzIG9ubHkgd2l0aCB7cmVjb3JkZXJUeXBlOlN0ZXJlb0F1ZGlvUmVjb3JkZXJ9LiBVc2UgdGhpcyBwcm9wZXJ0eSBvbiBcInN0b3BSZWNvcmRpbmdcIiB0byB2ZXJpZnkgdGhlIGVuY29kZXIncyBzYW1wbGUtcmF0ZXMuXHJcbiAgICAgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IHNhbXBsZVJhdGUgLSBTYW1wbGUtcmF0ZXMgdXNlZCB0byBlbmNvZGUgdGhlIFdBViBjb250YWluZXJcclxuICAgICAgICAgKiBAbWVtYmVyb2YgUmVjb3JkUlRDXHJcbiAgICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQGV4YW1wbGVcclxuICAgICAgICAgKiByZWNvcmRlci5zdG9wUmVjb3JkaW5nKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAqICAgICBhbGVydCgnUmVjb3JkZXIgdXNlZCB0aGVzZSBzYW1wbGUtcmF0ZXM6ICcgKyB0aGlzLnNhbXBsZVJhdGUpO1xyXG4gICAgICAgICAqIH0pO1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNhbXBsZVJhdGU6IDAsXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIHtyZWNvcmRlclR5cGU6U3RlcmVvQXVkaW9SZWNvcmRlcn0gcmV0dXJucyBBcnJheUJ1ZmZlciBvYmplY3QuXHJcbiAgICAgICAgICogQHByb3BlcnR5IHtBcnJheUJ1ZmZlcn0gYnVmZmVyIC0gQXVkaW8gQXJyYXlCdWZmZXIsIHN1cHBvcnRlZCBvbmx5IGluIENocm9tZS5cclxuICAgICAgICAgKiBAbWVtYmVyb2YgUmVjb3JkUlRDXHJcbiAgICAgICAgICogQGluc3RhbmNlXHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQGV4YW1wbGVcclxuICAgICAgICAgKiByZWNvcmRlci5zdG9wUmVjb3JkaW5nKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAqICAgICB2YXIgYXJyYXlCdWZmZXIgPSB0aGlzLmJ1ZmZlcjtcclxuICAgICAgICAgKiAgICAgYWxlcnQoYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aCk7XHJcbiAgICAgICAgICogfSk7XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgYnVmZmVyOiBudWxsLFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGlzIG1ldGhvZCByZXNldHMgdGhlIHJlY29yZGVyLiBTbyB0aGF0IHlvdSBjYW4gcmV1c2Ugc2luZ2xlIHJlY29yZGVyIGluc3RhbmNlIG1hbnkgdGltZXMuXHJcbiAgICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgICAqIEBtZW1iZXJvZiBSZWNvcmRSVENcclxuICAgICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAgICAqIHJlY29yZGVyLnJlc2V0KCk7XHJcbiAgICAgICAgICogcmVjb3JkZXIuc3RhcnRSZWNvcmRpbmcoKTtcclxuICAgICAgICAgKi9cclxuICAgICAgICByZXNldDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLnN0YXRlID09PSAncmVjb3JkaW5nJyAmJiAhY29uZmlnLmRpc2FibGVMb2dzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1N0b3AgYW4gYWN0aXZlIHJlY29yZGVyLicpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobWVkaWFSZWNvcmRlciAmJiB0eXBlb2YgbWVkaWFSZWNvcmRlci5jbGVhclJlY29yZGVkRGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgbWVkaWFSZWNvcmRlci5jbGVhclJlY29yZGVkRGF0YSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG1lZGlhUmVjb3JkZXIgPSBudWxsO1xyXG4gICAgICAgICAgICBzZXRTdGF0ZSgnaW5hY3RpdmUnKTtcclxuICAgICAgICAgICAgc2VsZi5ibG9iID0gbnVsbDtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbmV2ZXIgcmVjb3JkZXIncyBzdGF0ZSBjaGFuZ2VzLiBVc2UgdGhpcyBhcyBhbiBcImV2ZW50XCIuXHJcbiAgICAgICAgICogQHByb3BlcnR5IHtTdHJpbmd9IHN0YXRlIC0gQSByZWNvcmRlcidzIHN0YXRlIGNhbiBiZTogcmVjb3JkaW5nLCBwYXVzZWQsIHN0b3BwZWQgb3IgaW5hY3RpdmUuXHJcbiAgICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgICAqIEBtZW1iZXJvZiBSZWNvcmRSVENcclxuICAgICAgICAgKiBAaW5zdGFuY2VcclxuICAgICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAgICAqIHJlY29yZGVyLm9uU3RhdGVDaGFuZ2VkID0gZnVuY3Rpb24oc3RhdGUpIHtcclxuICAgICAgICAgKiAgICAgY29uc29sZS5sb2coJ1JlY29yZGVyIHN0YXRlOiAnLCBzdGF0ZSk7XHJcbiAgICAgICAgICogfTtcclxuICAgICAgICAgKi9cclxuICAgICAgICBvblN0YXRlQ2hhbmdlZDogZnVuY3Rpb24oc3RhdGUpIHtcclxuICAgICAgICAgICAgaWYgKCFjb25maWcuZGlzYWJsZUxvZ3MpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdSZWNvcmRlciBzdGF0ZSBjaGFuZ2VkOicsIHN0YXRlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgcmVjb3JkZXIgY2FuIGhhdmUgaW5hY3RpdmUsIHJlY29yZGluZywgcGF1c2VkIG9yIHN0b3BwZWQgc3RhdGVzLlxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBzdGF0ZSAtIEEgcmVjb3JkZXIncyBzdGF0ZSBjYW4gYmU6IHJlY29yZGluZywgcGF1c2VkLCBzdG9wcGVkIG9yIGluYWN0aXZlLlxyXG4gICAgICAgICAqIEBtZW1iZXJvZiBSZWNvcmRSVENcclxuICAgICAgICAgKiBAc3RhdGljXHJcbiAgICAgICAgICogQHJlYWRvbmx5XHJcbiAgICAgICAgICogQGV4YW1wbGVcclxuICAgICAgICAgKiAvLyB0aGlzIGxvb3BlciBmdW5jdGlvbiB3aWxsIGtlZXAgeW91IHVwZGF0ZWQgYWJvdXQgdGhlIHJlY29yZGVyJ3Mgc3RhdGVzLlxyXG4gICAgICAgICAqIChmdW5jdGlvbiBsb29wZXIoKSB7XHJcbiAgICAgICAgICogICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2gxJykuaW5uZXJIVE1MID0gJ1JlY29yZGVyXFwncyBzdGF0ZSBpczogJyArIHJlY29yZGVyLnN0YXRlO1xyXG4gICAgICAgICAqICAgICBpZihyZWNvcmRlci5zdGF0ZSA9PT0gJ3N0b3BwZWQnKSByZXR1cm47IC8vIGlnbm9yZStzdG9wXHJcbiAgICAgICAgICogICAgIHNldFRpbWVvdXQobG9vcGVyLCAxMDAwKTsgLy8gdXBkYXRlIGFmdGVyIGV2ZXJ5IDMtc2Vjb25kc1xyXG4gICAgICAgICAqIH0pKCk7XHJcbiAgICAgICAgICogcmVjb3JkZXIuc3RhcnRSZWNvcmRpbmcoKTtcclxuICAgICAgICAgKi9cclxuICAgICAgICBzdGF0ZTogJ2luYWN0aXZlJyxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogR2V0IHJlY29yZGVyJ3MgcmVhZG9ubHkgc3RhdGUuXHJcbiAgICAgICAgICogQG1ldGhvZFxyXG4gICAgICAgICAqIEBtZW1iZXJvZiBSZWNvcmRSVENcclxuICAgICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAgICAqIHZhciBzdGF0ZSA9IHJlY29yZGVyLmdldFN0YXRlKCk7XHJcbiAgICAgICAgICogQHJldHVybnMge1N0cmluZ30gUmV0dXJucyByZWNvcmRpbmcgc3RhdGUuXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgZ2V0U3RhdGU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5zdGF0ZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBEZXN0cm95IFJlY29yZFJUQyBpbnN0YW5jZS4gQ2xlYXIgYWxsIHJlY29yZGVycyBhbmQgb2JqZWN0cy5cclxuICAgICAgICAgKiBAbWV0aG9kXHJcbiAgICAgICAgICogQG1lbWJlcm9mIFJlY29yZFJUQ1xyXG4gICAgICAgICAqIEBleGFtcGxlXHJcbiAgICAgICAgICogcmVjb3JkZXIuZGVzdHJveSgpO1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICB2YXIgZGlzYWJsZUxvZ3NDYWNoZSA9IGNvbmZpZy5kaXNhYmxlTG9ncztcclxuXHJcbiAgICAgICAgICAgIGNvbmZpZyA9IHtcclxuICAgICAgICAgICAgICAgIGRpc2FibGVMb2dzOiB0cnVlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHNlbGYucmVzZXQoKTtcclxuICAgICAgICAgICAgc2V0U3RhdGUoJ2Rlc3Ryb3llZCcpO1xyXG4gICAgICAgICAgICByZXR1cm5PYmplY3QgPSBzZWxmID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIGlmIChTdG9yYWdlLkF1ZGlvQ29udGV4dENvbnN0cnVjdG9yKSB7XHJcbiAgICAgICAgICAgICAgICBTdG9yYWdlLkF1ZGlvQ29udGV4dENvbnN0cnVjdG9yLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICBTdG9yYWdlLkF1ZGlvQ29udGV4dENvbnN0cnVjdG9yID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uZmlnLmRpc2FibGVMb2dzID0gZGlzYWJsZUxvZ3NDYWNoZTtcclxuXHJcbiAgICAgICAgICAgIGlmICghY29uZmlnLmRpc2FibGVMb2dzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnUmVjb3JkUlRDIGlzIGRlc3Ryb3llZC4nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFJlY29yZFJUQyB2ZXJzaW9uIG51bWJlclxyXG4gICAgICAgICAqIEBwcm9wZXJ0eSB7U3RyaW5nfSB2ZXJzaW9uIC0gUmVsZWFzZSB2ZXJzaW9uIG51bWJlci5cclxuICAgICAgICAgKiBAbWVtYmVyb2YgUmVjb3JkUlRDXHJcbiAgICAgICAgICogQHN0YXRpY1xyXG4gICAgICAgICAqIEByZWFkb25seVxyXG4gICAgICAgICAqIEBleGFtcGxlXHJcbiAgICAgICAgICogYWxlcnQocmVjb3JkZXIudmVyc2lvbik7XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdmVyc2lvbjogJzUuNS45J1xyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoIXRoaXMpIHtcclxuICAgICAgICBzZWxmID0gcmV0dXJuT2JqZWN0O1xyXG4gICAgICAgIHJldHVybiByZXR1cm5PYmplY3Q7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaWYgc29tZW9uZSB3YW50cyB0byB1c2UgUmVjb3JkUlRDIHdpdGggdGhlIFwibmV3XCIga2V5d29yZC5cclxuICAgIGZvciAodmFyIHByb3AgaW4gcmV0dXJuT2JqZWN0KSB7XHJcbiAgICAgICAgdGhpc1twcm9wXSA9IHJldHVybk9iamVjdFtwcm9wXTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxmID0gdGhpcztcclxuXHJcbiAgICByZXR1cm4gcmV0dXJuT2JqZWN0O1xyXG59XHJcblxyXG5SZWNvcmRSVEMudmVyc2lvbiA9ICc1LjUuOSc7XHJcblxyXG5pZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgLyogJiYgISFtb2R1bGUuZXhwb3J0cyovICkge1xyXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBSZWNvcmRSVEM7XHJcbn1cclxuXHJcbmlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcclxuICAgIGRlZmluZSgnUmVjb3JkUlRDJywgW10sIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBSZWNvcmRSVEM7XHJcbiAgICB9KTtcclxufVxuXHJcblJlY29yZFJUQy5nZXRGcm9tRGlzayA9IGZ1bmN0aW9uKHR5cGUsIGNhbGxiYWNrKSB7XHJcbiAgICBpZiAoIWNhbGxiYWNrKSB7XHJcbiAgICAgICAgdGhyb3cgJ2NhbGxiYWNrIGlzIG1hbmRhdG9yeS4nO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKCdHZXR0aW5nIHJlY29yZGVkICcgKyAodHlwZSA9PT0gJ2FsbCcgPyAnYmxvYnMnIDogdHlwZSArICcgYmxvYiAnKSArICcgZnJvbSBkaXNrIScpO1xyXG4gICAgRGlza1N0b3JhZ2UuRmV0Y2goZnVuY3Rpb24oZGF0YVVSTCwgX3R5cGUpIHtcclxuICAgICAgICBpZiAodHlwZSAhPT0gJ2FsbCcgJiYgX3R5cGUgPT09IHR5cGUgKyAnQmxvYicgJiYgY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgY2FsbGJhY2soZGF0YVVSTCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZSA9PT0gJ2FsbCcgJiYgY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgY2FsbGJhY2soZGF0YVVSTCwgX3R5cGUucmVwbGFjZSgnQmxvYicsICcnKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn07XHJcblxyXG4vKipcclxuICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gc3RvcmUgcmVjb3JkZWQgYmxvYnMgaW50byBJbmRleGVkREIgc3RvcmFnZS5cclxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSB7YXVkaW86IEJsb2IsIHZpZGVvOiBCbG9iLCBnaWY6IEJsb2J9XHJcbiAqIEBtZXRob2RcclxuICogQG1lbWJlcm9mIFJlY29yZFJUQ1xyXG4gKiBAZXhhbXBsZVxyXG4gKiBSZWNvcmRSVEMud3JpdGVUb0Rpc2soe1xyXG4gKiAgICAgYXVkaW86IGF1ZGlvQmxvYixcclxuICogICAgIHZpZGVvOiB2aWRlb0Jsb2IsXHJcbiAqICAgICBnaWYgIDogZ2lmQmxvYlxyXG4gKiB9KTtcclxuICovXHJcblJlY29yZFJUQy53cml0ZVRvRGlzayA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuICAgIGNvbnNvbGUubG9nKCdXcml0aW5nIHJlY29yZGVkIGJsb2IocykgdG8gZGlzayEnKTtcclxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG4gICAgaWYgKG9wdGlvbnMuYXVkaW8gJiYgb3B0aW9ucy52aWRlbyAmJiBvcHRpb25zLmdpZikge1xyXG4gICAgICAgIG9wdGlvbnMuYXVkaW8uZ2V0RGF0YVVSTChmdW5jdGlvbihhdWRpb0RhdGFVUkwpIHtcclxuICAgICAgICAgICAgb3B0aW9ucy52aWRlby5nZXREYXRhVVJMKGZ1bmN0aW9uKHZpZGVvRGF0YVVSTCkge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5naWYuZ2V0RGF0YVVSTChmdW5jdGlvbihnaWZEYXRhVVJMKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgRGlza1N0b3JhZ2UuU3RvcmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdWRpb0Jsb2I6IGF1ZGlvRGF0YVVSTCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9CbG9iOiB2aWRlb0RhdGFVUkwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdpZkJsb2I6IGdpZkRhdGFVUkxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5hdWRpbyAmJiBvcHRpb25zLnZpZGVvKSB7XHJcbiAgICAgICAgb3B0aW9ucy5hdWRpby5nZXREYXRhVVJMKGZ1bmN0aW9uKGF1ZGlvRGF0YVVSTCkge1xyXG4gICAgICAgICAgICBvcHRpb25zLnZpZGVvLmdldERhdGFVUkwoZnVuY3Rpb24odmlkZW9EYXRhVVJMKSB7XHJcbiAgICAgICAgICAgICAgICBEaXNrU3RvcmFnZS5TdG9yZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgYXVkaW9CbG9iOiBhdWRpb0RhdGFVUkwsXHJcbiAgICAgICAgICAgICAgICAgICAgdmlkZW9CbG9iOiB2aWRlb0RhdGFVUkxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5hdWRpbyAmJiBvcHRpb25zLmdpZikge1xyXG4gICAgICAgIG9wdGlvbnMuYXVkaW8uZ2V0RGF0YVVSTChmdW5jdGlvbihhdWRpb0RhdGFVUkwpIHtcclxuICAgICAgICAgICAgb3B0aW9ucy5naWYuZ2V0RGF0YVVSTChmdW5jdGlvbihnaWZEYXRhVVJMKSB7XHJcbiAgICAgICAgICAgICAgICBEaXNrU3RvcmFnZS5TdG9yZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgYXVkaW9CbG9iOiBhdWRpb0RhdGFVUkwsXHJcbiAgICAgICAgICAgICAgICAgICAgZ2lmQmxvYjogZ2lmRGF0YVVSTFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChvcHRpb25zLnZpZGVvICYmIG9wdGlvbnMuZ2lmKSB7XHJcbiAgICAgICAgb3B0aW9ucy52aWRlby5nZXREYXRhVVJMKGZ1bmN0aW9uKHZpZGVvRGF0YVVSTCkge1xyXG4gICAgICAgICAgICBvcHRpb25zLmdpZi5nZXREYXRhVVJMKGZ1bmN0aW9uKGdpZkRhdGFVUkwpIHtcclxuICAgICAgICAgICAgICAgIERpc2tTdG9yYWdlLlN0b3JlKHtcclxuICAgICAgICAgICAgICAgICAgICB2aWRlb0Jsb2I6IHZpZGVvRGF0YVVSTCxcclxuICAgICAgICAgICAgICAgICAgICBnaWZCbG9iOiBnaWZEYXRhVVJMXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuYXVkaW8pIHtcclxuICAgICAgICBvcHRpb25zLmF1ZGlvLmdldERhdGFVUkwoZnVuY3Rpb24oYXVkaW9EYXRhVVJMKSB7XHJcbiAgICAgICAgICAgIERpc2tTdG9yYWdlLlN0b3JlKHtcclxuICAgICAgICAgICAgICAgIGF1ZGlvQmxvYjogYXVkaW9EYXRhVVJMXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChvcHRpb25zLnZpZGVvKSB7XHJcbiAgICAgICAgb3B0aW9ucy52aWRlby5nZXREYXRhVVJMKGZ1bmN0aW9uKHZpZGVvRGF0YVVSTCkge1xyXG4gICAgICAgICAgICBEaXNrU3RvcmFnZS5TdG9yZSh7XHJcbiAgICAgICAgICAgICAgICB2aWRlb0Jsb2I6IHZpZGVvRGF0YVVSTFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5naWYpIHtcclxuICAgICAgICBvcHRpb25zLmdpZi5nZXREYXRhVVJMKGZ1bmN0aW9uKGdpZkRhdGFVUkwpIHtcclxuICAgICAgICAgICAgRGlza1N0b3JhZ2UuU3RvcmUoe1xyXG4gICAgICAgICAgICAgICAgZ2lmQmxvYjogZ2lmRGF0YVVSTFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufTtcblxyXG4vLyBfX19fX19fX19fX19fX19fX19fX19fX19fX1xyXG4vLyBSZWNvcmRSVEMtQ29uZmlndXJhdGlvbi5qc1xyXG5cclxuLyoqXHJcbiAqIHtAbGluayBSZWNvcmRSVENDb25maWd1cmF0aW9ufSBpcyBhbiBpbm5lci9wcml2YXRlIGhlbHBlciBmb3Ige0BsaW5rIFJlY29yZFJUQ30uXHJcbiAqIEBzdW1tYXJ5IEl0IGNvbmZpZ3VyZXMgdGhlIDJuZCBwYXJhbWV0ZXIgcGFzc2VkIG92ZXIge0BsaW5rIFJlY29yZFJUQ30gYW5kIHJldHVybnMgYSB2YWxpZCBcImNvbmZpZ1wiIG9iamVjdC5cclxuICogQGxpY2Vuc2Uge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWF6LWtoYW4vUmVjb3JkUlRDL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUfVxyXG4gKiBAYXV0aG9yIHtAbGluayBodHRwczovL011YXpLaGFuLmNvbXxNdWF6IEtoYW59XHJcbiAqIEB0eXBlZGVmIFJlY29yZFJUQ0NvbmZpZ3VyYXRpb25cclxuICogQGNsYXNzXHJcbiAqIEBleGFtcGxlXHJcbiAqIHZhciBvcHRpb25zID0gUmVjb3JkUlRDQ29uZmlndXJhdGlvbihtZWRpYVN0cmVhbSwgb3B0aW9ucyk7XHJcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWF6LWtoYW4vUmVjb3JkUlRDfFJlY29yZFJUQyBTb3VyY2UgQ29kZX1cclxuICogQHBhcmFtIHtNZWRpYVN0cmVhbX0gbWVkaWFTdHJlYW0gLSBNZWRpYVN0cmVhbSBvYmplY3QgZmV0Y2hlZCB1c2luZyBnZXRVc2VyTWVkaWEgQVBJIG9yIGdlbmVyYXRlZCB1c2luZyBjYXB0dXJlU3RyZWFtVW50aWxFbmRlZCBvciBXZWJBdWRpbyBBUEkuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgLSB7dHlwZTpcInZpZGVvXCIsIGRpc2FibGVMb2dzOiB0cnVlLCBudW1iZXJPZkF1ZGlvQ2hhbm5lbHM6IDEsIGJ1ZmZlclNpemU6IDAsIHNhbXBsZVJhdGU6IDAsIHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBnZXROYXRpdmVCbG9iOnRydWUsIGV0Yy59XHJcbiAqL1xyXG5cclxuZnVuY3Rpb24gUmVjb3JkUlRDQ29uZmlndXJhdGlvbihtZWRpYVN0cmVhbSwgY29uZmlnKSB7XHJcbiAgICBpZiAoIWNvbmZpZy5yZWNvcmRlclR5cGUgJiYgIWNvbmZpZy50eXBlKSB7XHJcbiAgICAgICAgaWYgKCEhY29uZmlnLmF1ZGlvICYmICEhY29uZmlnLnZpZGVvKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZy50eXBlID0gJ3ZpZGVvJztcclxuICAgICAgICB9IGVsc2UgaWYgKCEhY29uZmlnLmF1ZGlvICYmICFjb25maWcudmlkZW8pIHtcclxuICAgICAgICAgICAgY29uZmlnLnR5cGUgPSAnYXVkaW8nO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29uZmlnLnJlY29yZGVyVHlwZSAmJiAhY29uZmlnLnR5cGUpIHtcclxuICAgICAgICBpZiAoY29uZmlnLnJlY29yZGVyVHlwZSA9PT0gV2hhbW15UmVjb3JkZXIgfHwgY29uZmlnLnJlY29yZGVyVHlwZSA9PT0gQ2FudmFzUmVjb3JkZXIgfHwgKHR5cGVvZiBXZWJBc3NlbWJseVJlY29yZGVyICE9PSAndW5kZWZpbmVkJyAmJiBjb25maWcucmVjb3JkZXJUeXBlID09PSBXZWJBc3NlbWJseVJlY29yZGVyKSkge1xyXG4gICAgICAgICAgICBjb25maWcudHlwZSA9ICd2aWRlbyc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb25maWcucmVjb3JkZXJUeXBlID09PSBHaWZSZWNvcmRlcikge1xyXG4gICAgICAgICAgICBjb25maWcudHlwZSA9ICdnaWYnO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLnJlY29yZGVyVHlwZSA9PT0gU3RlcmVvQXVkaW9SZWNvcmRlcikge1xyXG4gICAgICAgICAgICBjb25maWcudHlwZSA9ICdhdWRpbyc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb25maWcucmVjb3JkZXJUeXBlID09PSBNZWRpYVN0cmVhbVJlY29yZGVyKSB7XHJcbiAgICAgICAgICAgIGlmIChnZXRUcmFja3MobWVkaWFTdHJlYW0sICdhdWRpbycpLmxlbmd0aCAmJiBnZXRUcmFja3MobWVkaWFTdHJlYW0sICd2aWRlbycpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgY29uZmlnLnR5cGUgPSAndmlkZW8nO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFnZXRUcmFja3MobWVkaWFTdHJlYW0sICdhdWRpbycpLmxlbmd0aCAmJiBnZXRUcmFja3MobWVkaWFTdHJlYW0sICd2aWRlbycpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgY29uZmlnLnR5cGUgPSAndmlkZW8nO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGdldFRyYWNrcyhtZWRpYVN0cmVhbSwgJ2F1ZGlvJykubGVuZ3RoICYmICFnZXRUcmFja3MobWVkaWFTdHJlYW0sICd2aWRlbycpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgY29uZmlnLnR5cGUgPSAnYXVkaW8nO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uZmlnLnR5cGUgPSAnVW5Lbm93bic7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBNZWRpYVN0cmVhbVJlY29yZGVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgTWVkaWFSZWNvcmRlciAhPT0gJ3VuZGVmaW5lZCcgJiYgJ3JlcXVlc3REYXRhJyBpbiBNZWRpYVJlY29yZGVyLnByb3RvdHlwZSkge1xyXG4gICAgICAgIGlmICghY29uZmlnLm1pbWVUeXBlKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZy5taW1lVHlwZSA9ICd2aWRlby93ZWJtJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghY29uZmlnLnR5cGUpIHtcclxuICAgICAgICAgICAgY29uZmlnLnR5cGUgPSBjb25maWcubWltZVR5cGUuc3BsaXQoJy8nKVswXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghY29uZmlnLmJpdHNQZXJTZWNvbmQpIHtcclxuICAgICAgICAgICAgLy8gY29uZmlnLmJpdHNQZXJTZWNvbmQgPSAxMjgwMDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNvbnNpZGVyIGRlZmF1bHQgdHlwZT1hdWRpb1xyXG4gICAgaWYgKCFjb25maWcudHlwZSkge1xyXG4gICAgICAgIGlmIChjb25maWcubWltZVR5cGUpIHtcclxuICAgICAgICAgICAgY29uZmlnLnR5cGUgPSBjb25maWcubWltZVR5cGUuc3BsaXQoJy8nKVswXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFjb25maWcudHlwZSkge1xyXG4gICAgICAgICAgICBjb25maWcudHlwZSA9ICdhdWRpbyc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb25maWc7XHJcbn1cblxyXG4vLyBfX19fX19fX19fX19fX19fX19cclxuLy8gR2V0UmVjb3JkZXJUeXBlLmpzXHJcblxyXG4vKipcclxuICoge0BsaW5rIEdldFJlY29yZGVyVHlwZX0gaXMgYW4gaW5uZXIvcHJpdmF0ZSBoZWxwZXIgZm9yIHtAbGluayBSZWNvcmRSVEN9LlxyXG4gKiBAc3VtbWFyeSBJdCByZXR1cm5zIGJlc3QgcmVjb3JkZXItdHlwZSBhdmFpbGFibGUgZm9yIHlvdXIgYnJvd3Nlci5cclxuICogQGxpY2Vuc2Uge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWF6LWtoYW4vUmVjb3JkUlRDL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUfVxyXG4gKiBAYXV0aG9yIHtAbGluayBodHRwczovL011YXpLaGFuLmNvbXxNdWF6IEtoYW59XHJcbiAqIEB0eXBlZGVmIEdldFJlY29yZGVyVHlwZVxyXG4gKiBAY2xhc3NcclxuICogQGV4YW1wbGVcclxuICogdmFyIFJlY29yZGVyVHlwZSA9IEdldFJlY29yZGVyVHlwZShvcHRpb25zKTtcclxuICogdmFyIHJlY29yZGVyID0gbmV3IFJlY29yZGVyVHlwZShvcHRpb25zKTtcclxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL211YXota2hhbi9SZWNvcmRSVEN8UmVjb3JkUlRDIFNvdXJjZSBDb2RlfVxyXG4gKiBAcGFyYW0ge01lZGlhU3RyZWFtfSBtZWRpYVN0cmVhbSAtIE1lZGlhU3RyZWFtIG9iamVjdCBmZXRjaGVkIHVzaW5nIGdldFVzZXJNZWRpYSBBUEkgb3IgZ2VuZXJhdGVkIHVzaW5nIGNhcHR1cmVTdHJlYW1VbnRpbEVuZGVkIG9yIFdlYkF1ZGlvIEFQSS5cclxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyAtIHt0eXBlOlwidmlkZW9cIiwgZGlzYWJsZUxvZ3M6IHRydWUsIG51bWJlck9mQXVkaW9DaGFubmVsczogMSwgYnVmZmVyU2l6ZTogMCwgc2FtcGxlUmF0ZTogMCwgdmlkZW86IEhUTUxWaWRlb0VsZW1lbnQsIGV0Yy59XHJcbiAqL1xyXG5cclxuZnVuY3Rpb24gR2V0UmVjb3JkZXJUeXBlKG1lZGlhU3RyZWFtLCBjb25maWcpIHtcclxuICAgIHZhciByZWNvcmRlcjtcclxuXHJcbiAgICAvLyBTdGVyZW9BdWRpb1JlY29yZGVyIGNhbiB3b3JrIHdpdGggYWxsIHRocmVlOiBFZGdlLCBGaXJlZm94IGFuZCBDaHJvbWVcclxuICAgIC8vIHRvZG86IGRldGVjdCBpZiBpdCBpcyBFZGdlLCB0aGVuIGF1dG8gdXNlOiBTdGVyZW9BdWRpb1JlY29yZGVyXHJcbiAgICBpZiAoaXNDaHJvbWUgfHwgaXNFZGdlIHx8IGlzT3BlcmEpIHtcclxuICAgICAgICAvLyBNZWRpYSBTdHJlYW0gUmVjb3JkaW5nIEFQSSBoYXMgbm90IGJlZW4gaW1wbGVtZW50ZWQgaW4gY2hyb21lIHlldDtcclxuICAgICAgICAvLyBUaGF0J3Mgd2h5IHVzaW5nIFdlYkF1ZGlvIEFQSSB0byByZWNvcmQgc3RlcmVvIGF1ZGlvIGluIFdBViBmb3JtYXRcclxuICAgICAgICByZWNvcmRlciA9IFN0ZXJlb0F1ZGlvUmVjb3JkZXI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBNZWRpYVJlY29yZGVyICE9PSAndW5kZWZpbmVkJyAmJiAncmVxdWVzdERhdGEnIGluIE1lZGlhUmVjb3JkZXIucHJvdG90eXBlICYmICFpc0Nocm9tZSkge1xyXG4gICAgICAgIHJlY29yZGVyID0gTWVkaWFTdHJlYW1SZWNvcmRlcjtcclxuICAgIH1cclxuXHJcbiAgICAvLyB2aWRlbyByZWNvcmRlciAoaW4gV2ViTSBmb3JtYXQpXHJcbiAgICBpZiAoY29uZmlnLnR5cGUgPT09ICd2aWRlbycgJiYgKGlzQ2hyb21lIHx8IGlzT3BlcmEpKSB7XHJcbiAgICAgICAgcmVjb3JkZXIgPSBXaGFtbXlSZWNvcmRlcjtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBXZWJBc3NlbWJseVJlY29yZGVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgUmVhZGFibGVTdHJlYW0gIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHJlY29yZGVyID0gV2ViQXNzZW1ibHlSZWNvcmRlcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdmlkZW8gcmVjb3JkZXIgKGluIEdpZiBmb3JtYXQpXHJcbiAgICBpZiAoY29uZmlnLnR5cGUgPT09ICdnaWYnKSB7XHJcbiAgICAgICAgcmVjb3JkZXIgPSBHaWZSZWNvcmRlcjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBodG1sMmNhbnZhcyByZWNvcmRpbmchXHJcbiAgICBpZiAoY29uZmlnLnR5cGUgPT09ICdjYW52YXMnKSB7XHJcbiAgICAgICAgcmVjb3JkZXIgPSBDYW52YXNSZWNvcmRlcjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNNZWRpYVJlY29yZGVyQ29tcGF0aWJsZSgpICYmIHJlY29yZGVyICE9PSBDYW52YXNSZWNvcmRlciAmJiByZWNvcmRlciAhPT0gR2lmUmVjb3JkZXIgJiYgdHlwZW9mIE1lZGlhUmVjb3JkZXIgIT09ICd1bmRlZmluZWQnICYmICdyZXF1ZXN0RGF0YScgaW4gTWVkaWFSZWNvcmRlci5wcm90b3R5cGUpIHtcclxuICAgICAgICBpZiAoZ2V0VHJhY2tzKG1lZGlhU3RyZWFtLCAndmlkZW8nKS5sZW5ndGggfHwgZ2V0VHJhY2tzKG1lZGlhU3RyZWFtLCAnYXVkaW8nKS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgLy8gYXVkaW8tb25seSByZWNvcmRpbmdcclxuICAgICAgICAgICAgaWYgKGNvbmZpZy50eXBlID09PSAnYXVkaW8nKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIE1lZGlhUmVjb3JkZXIuaXNUeXBlU3VwcG9ydGVkID09PSAnZnVuY3Rpb24nICYmIE1lZGlhUmVjb3JkZXIuaXNUeXBlU3VwcG9ydGVkKCdhdWRpby93ZWJtJykpIHtcclxuICAgICAgICAgICAgICAgICAgICByZWNvcmRlciA9IE1lZGlhU3RyZWFtUmVjb3JkZXI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBlbHNlIHJlY29yZGVyID0gU3RlcmVvQXVkaW9SZWNvcmRlcjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIHZpZGVvIG9yIHNjcmVlbiB0cmFja3NcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgTWVkaWFSZWNvcmRlci5pc1R5cGVTdXBwb3J0ZWQgPT09ICdmdW5jdGlvbicgJiYgTWVkaWFSZWNvcmRlci5pc1R5cGVTdXBwb3J0ZWQoJ3ZpZGVvL3dlYm0nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlY29yZGVyID0gTWVkaWFTdHJlYW1SZWNvcmRlcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobWVkaWFTdHJlYW0gaW5zdGFuY2VvZiBBcnJheSAmJiBtZWRpYVN0cmVhbS5sZW5ndGgpIHtcclxuICAgICAgICByZWNvcmRlciA9IE11bHRpU3RyZWFtUmVjb3JkZXI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZy5yZWNvcmRlclR5cGUpIHtcclxuICAgICAgICByZWNvcmRlciA9IGNvbmZpZy5yZWNvcmRlclR5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFjb25maWcuZGlzYWJsZUxvZ3MgJiYgISFyZWNvcmRlciAmJiAhIXJlY29yZGVyLm5hbWUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnVXNpbmcgcmVjb3JkZXJUeXBlOicsIHJlY29yZGVyLm5hbWUgfHwgcmVjb3JkZXIuY29uc3RydWN0b3IubmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFyZWNvcmRlciAmJiBpc1NhZmFyaSkge1xyXG4gICAgICAgIHJlY29yZGVyID0gTWVkaWFTdHJlYW1SZWNvcmRlcjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVjb3JkZXI7XHJcbn1cblxyXG4vLyBfX19fX19fX19fX19fXHJcbi8vIE1SZWNvcmRSVEMuanNcclxuXHJcbi8qKlxyXG4gKiBNUmVjb3JkUlRDIHJ1bnMgb24gdG9wIG9mIHtAbGluayBSZWNvcmRSVEN9IHRvIGJyaW5nIG11bHRpcGxlIHJlY29yZGluZ3MgaW4gYSBzaW5nbGUgcGxhY2UsIGJ5IHByb3ZpZGluZyBzaW1wbGUgQVBJLlxyXG4gKiBAc3VtbWFyeSBNUmVjb3JkUlRDIHN0YW5kcyBmb3IgXCJNdWx0aXBsZS1SZWNvcmRSVENcIi5cclxuICogQGxpY2Vuc2Uge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWF6LWtoYW4vUmVjb3JkUlRDL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUfVxyXG4gKiBAYXV0aG9yIHtAbGluayBodHRwczovL011YXpLaGFuLmNvbXxNdWF6IEtoYW59XHJcbiAqIEB0eXBlZGVmIE1SZWNvcmRSVENcclxuICogQGNsYXNzXHJcbiAqIEBleGFtcGxlXHJcbiAqIHZhciByZWNvcmRlciA9IG5ldyBNUmVjb3JkUlRDKCk7XHJcbiAqIHJlY29yZGVyLmFkZFN0cmVhbShNZWRpYVN0cmVhbSk7XHJcbiAqIHJlY29yZGVyLm1lZGlhVHlwZSA9IHtcclxuICogICAgIGF1ZGlvOiB0cnVlLCAvLyBvciBTdGVyZW9BdWRpb1JlY29yZGVyIG9yIE1lZGlhU3RyZWFtUmVjb3JkZXJcclxuICogICAgIHZpZGVvOiB0cnVlLCAvLyBvciBXaGFtbXlSZWNvcmRlciBvciBNZWRpYVN0cmVhbVJlY29yZGVyIG9yIFdlYkFzc2VtYmx5UmVjb3JkZXIgb3IgQ2FudmFzUmVjb3JkZXJcclxuICogICAgIGdpZjogdHJ1ZSAgICAvLyBvciBHaWZSZWNvcmRlclxyXG4gKiB9O1xyXG4gKiAvLyBtaW1lVHlwZSBpcyBvcHRpb25hbCBhbmQgc2hvdWxkIGJlIHNldCBvbmx5IGluIGFkdmFuY2UgY2FzZXMuXHJcbiAqIHJlY29yZGVyLm1pbWVUeXBlID0ge1xyXG4gKiAgICAgYXVkaW86ICdhdWRpby93YXYnLFxyXG4gKiAgICAgdmlkZW86ICd2aWRlby93ZWJtJyxcclxuICogICAgIGdpZjogICAnaW1hZ2UvZ2lmJ1xyXG4gKiB9O1xyXG4gKiByZWNvcmRlci5zdGFydFJlY29yZGluZygpO1xyXG4gKiBAc2VlIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uOlxyXG4gKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbXVhei1raGFuL1JlY29yZFJUQy90cmVlL21hc3Rlci9NUmVjb3JkUlRDfE1SZWNvcmRSVEMgU291cmNlIENvZGV9XHJcbiAqIEBwYXJhbSB7TWVkaWFTdHJlYW19IG1lZGlhU3RyZWFtIC0gTWVkaWFTdHJlYW0gb2JqZWN0IGZldGNoZWQgdXNpbmcgZ2V0VXNlck1lZGlhIEFQSSBvciBnZW5lcmF0ZWQgdXNpbmcgY2FwdHVyZVN0cmVhbVVudGlsRW5kZWQgb3IgV2ViQXVkaW8gQVBJLlxyXG4gKiBAcmVxdWlyZXMge0BsaW5rIFJlY29yZFJUQ31cclxuICovXHJcblxyXG5mdW5jdGlvbiBNUmVjb3JkUlRDKG1lZGlhU3RyZWFtKSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBhdHRhY2hlcyBNZWRpYVN0cmVhbSBvYmplY3QgdG8ge0BsaW5rIE1SZWNvcmRSVEN9LlxyXG4gICAgICogQHBhcmFtIHtNZWRpYVN0cmVhbX0gbWVkaWFTdHJlYW0gLSBBIE1lZGlhU3RyZWFtIG9iamVjdCwgZWl0aGVyIGZldGNoZWQgdXNpbmcgZ2V0VXNlck1lZGlhIEFQSSwgb3IgZ2VuZXJhdGVkIHVzaW5nIGNhcHR1cmVTdHJlYW1VbnRpbEVuZGVkIG9yIFdlYkF1ZGlvIEFQSS5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBNUmVjb3JkUlRDXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIuYWRkU3RyZWFtKE1lZGlhU3RyZWFtKTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5hZGRTdHJlYW0gPSBmdW5jdGlvbihfbWVkaWFTdHJlYW0pIHtcclxuICAgICAgICBpZiAoX21lZGlhU3RyZWFtKSB7XHJcbiAgICAgICAgICAgIG1lZGlhU3RyZWFtID0gX21lZGlhU3RyZWFtO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgcmVjb3JkaW5nIHR5cGUgZS5nLiBhdWRpbywgb3IgdmlkZW8sIG9yIGdpZiwgb3IgY2FudmFzLlxyXG4gICAgICogQHByb3BlcnR5IHtvYmplY3R9IG1lZGlhVHlwZSAtIHthdWRpbzogdHJ1ZSwgdmlkZW86IHRydWUsIGdpZjogdHJ1ZX1cclxuICAgICAqIEBtZW1iZXJvZiBNUmVjb3JkUlRDXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogdmFyIHJlY29yZGVyID0gbmV3IE1SZWNvcmRSVEMoKTtcclxuICAgICAqIHJlY29yZGVyLm1lZGlhVHlwZSA9IHtcclxuICAgICAqICAgICBhdWRpbzogdHJ1ZSwgLy8gVFJVRSBvciBTdGVyZW9BdWRpb1JlY29yZGVyIG9yIE1lZGlhU3RyZWFtUmVjb3JkZXJcclxuICAgICAqICAgICB2aWRlbzogdHJ1ZSwgLy8gVFJVRSBvciBXaGFtbXlSZWNvcmRlciBvciBNZWRpYVN0cmVhbVJlY29yZGVyIG9yIFdlYkFzc2VtYmx5UmVjb3JkZXIgb3IgQ2FudmFzUmVjb3JkZXJcclxuICAgICAqICAgICBnaWYgIDogdHJ1ZSAgLy8gVFJVRSBvciBHaWZSZWNvcmRlclxyXG4gICAgICogfTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5tZWRpYVR5cGUgPSB7XHJcbiAgICAgICAgYXVkaW86IHRydWUsXHJcbiAgICAgICAgdmlkZW86IHRydWVcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBzdGFydHMgcmVjb3JkaW5nLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIE1SZWNvcmRSVENcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5zdGFydFJlY29yZGluZygpO1xyXG4gICAgICovXHJcbiAgICB0aGlzLnN0YXJ0UmVjb3JkaW5nID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIG1lZGlhVHlwZSA9IHRoaXMubWVkaWFUeXBlO1xyXG4gICAgICAgIHZhciByZWNvcmRlclR5cGU7XHJcbiAgICAgICAgdmFyIG1pbWVUeXBlID0gdGhpcy5taW1lVHlwZSB8fCB7XHJcbiAgICAgICAgICAgIGF1ZGlvOiBudWxsLFxyXG4gICAgICAgICAgICB2aWRlbzogbnVsbCxcclxuICAgICAgICAgICAgZ2lmOiBudWxsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBtZWRpYVR5cGUuYXVkaW8gIT09ICdmdW5jdGlvbicgJiYgaXNNZWRpYVJlY29yZGVyQ29tcGF0aWJsZSgpICYmICFnZXRUcmFja3MobWVkaWFTdHJlYW0sICdhdWRpbycpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBtZWRpYVR5cGUuYXVkaW8gPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgbWVkaWFUeXBlLnZpZGVvICE9PSAnZnVuY3Rpb24nICYmIGlzTWVkaWFSZWNvcmRlckNvbXBhdGlibGUoKSAmJiAhZ2V0VHJhY2tzKG1lZGlhU3RyZWFtLCAndmlkZW8nKS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbWVkaWFUeXBlLnZpZGVvID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG1lZGlhVHlwZS5naWYgIT09ICdmdW5jdGlvbicgJiYgaXNNZWRpYVJlY29yZGVyQ29tcGF0aWJsZSgpICYmICFnZXRUcmFja3MobWVkaWFTdHJlYW0sICd2aWRlbycpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBtZWRpYVR5cGUuZ2lmID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIW1lZGlhVHlwZS5hdWRpbyAmJiAhbWVkaWFUeXBlLnZpZGVvICYmICFtZWRpYVR5cGUuZ2lmKSB7XHJcbiAgICAgICAgICAgIHRocm93ICdNZWRpYVN0cmVhbSBtdXN0IGhhdmUgZWl0aGVyIGF1ZGlvIG9yIHZpZGVvIHRyYWNrcy4nO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCEhbWVkaWFUeXBlLmF1ZGlvKSB7XHJcbiAgICAgICAgICAgIHJlY29yZGVyVHlwZSA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbWVkaWFUeXBlLmF1ZGlvID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICByZWNvcmRlclR5cGUgPSBtZWRpYVR5cGUuYXVkaW87XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuYXVkaW9SZWNvcmRlciA9IG5ldyBSZWNvcmRSVEMobWVkaWFTdHJlYW0sIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdhdWRpbycsXHJcbiAgICAgICAgICAgICAgICBidWZmZXJTaXplOiB0aGlzLmJ1ZmZlclNpemUsXHJcbiAgICAgICAgICAgICAgICBzYW1wbGVSYXRlOiB0aGlzLnNhbXBsZVJhdGUsXHJcbiAgICAgICAgICAgICAgICBudW1iZXJPZkF1ZGlvQ2hhbm5lbHM6IHRoaXMubnVtYmVyT2ZBdWRpb0NoYW5uZWxzIHx8IDIsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlTG9nczogdGhpcy5kaXNhYmxlTG9ncyxcclxuICAgICAgICAgICAgICAgIHJlY29yZGVyVHlwZTogcmVjb3JkZXJUeXBlLFxyXG4gICAgICAgICAgICAgICAgbWltZVR5cGU6IG1pbWVUeXBlLmF1ZGlvLFxyXG4gICAgICAgICAgICAgICAgdGltZVNsaWNlOiB0aGlzLnRpbWVTbGljZSxcclxuICAgICAgICAgICAgICAgIG9uVGltZVN0YW1wOiB0aGlzLm9uVGltZVN0YW1wXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFtZWRpYVR5cGUudmlkZW8pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXVkaW9SZWNvcmRlci5zdGFydFJlY29yZGluZygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoISFtZWRpYVR5cGUudmlkZW8pIHtcclxuICAgICAgICAgICAgcmVjb3JkZXJUeXBlID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBtZWRpYVR5cGUudmlkZW8gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIHJlY29yZGVyVHlwZSA9IG1lZGlhVHlwZS52aWRlbztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIG5ld1N0cmVhbSA9IG1lZGlhU3RyZWFtO1xyXG5cclxuICAgICAgICAgICAgaWYgKGlzTWVkaWFSZWNvcmRlckNvbXBhdGlibGUoKSAmJiAhIW1lZGlhVHlwZS5hdWRpbyAmJiB0eXBlb2YgbWVkaWFUeXBlLmF1ZGlvID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmlkZW9UcmFjayA9IGdldFRyYWNrcyhtZWRpYVN0cmVhbSwgJ3ZpZGVvJylbMF07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGlzRmlyZWZveCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1N0cmVhbSA9IG5ldyBNZWRpYVN0cmVhbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1N0cmVhbS5hZGRUcmFjayh2aWRlb1RyYWNrKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlY29yZGVyVHlwZSAmJiByZWNvcmRlclR5cGUgPT09IFdoYW1teVJlY29yZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpcmVmb3ggZG9lcyBOT1Qgc3VwcG9ydHMgd2VicC1lbmNvZGluZyB5ZXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQnV0IEZpcmVmb3ggZG8gc3VwcG9ydHMgV2ViQXNzZW1ibHlSZWNvcmRlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRlclR5cGUgPSBNZWRpYVN0cmVhbVJlY29yZGVyO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3U3RyZWFtID0gbmV3IE1lZGlhU3RyZWFtKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3U3RyZWFtLmFkZFRyYWNrKHZpZGVvVHJhY2spO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnZpZGVvUmVjb3JkZXIgPSBuZXcgUmVjb3JkUlRDKG5ld1N0cmVhbSwge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ3ZpZGVvJyxcclxuICAgICAgICAgICAgICAgIHZpZGVvOiB0aGlzLnZpZGVvLFxyXG4gICAgICAgICAgICAgICAgY2FudmFzOiB0aGlzLmNhbnZhcyxcclxuICAgICAgICAgICAgICAgIGZyYW1lSW50ZXJ2YWw6IHRoaXMuZnJhbWVJbnRlcnZhbCB8fCAxMCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVMb2dzOiB0aGlzLmRpc2FibGVMb2dzLFxyXG4gICAgICAgICAgICAgICAgcmVjb3JkZXJUeXBlOiByZWNvcmRlclR5cGUsXHJcbiAgICAgICAgICAgICAgICBtaW1lVHlwZTogbWltZVR5cGUudmlkZW8sXHJcbiAgICAgICAgICAgICAgICB0aW1lU2xpY2U6IHRoaXMudGltZVNsaWNlLFxyXG4gICAgICAgICAgICAgICAgb25UaW1lU3RhbXA6IHRoaXMub25UaW1lU3RhbXAsXHJcbiAgICAgICAgICAgICAgICB3b3JrZXJQYXRoOiB0aGlzLndvcmtlclBhdGgsXHJcbiAgICAgICAgICAgICAgICB3ZWJBc3NlbWJseVBhdGg6IHRoaXMud2ViQXNzZW1ibHlQYXRoLFxyXG4gICAgICAgICAgICAgICAgZnJhbWVSYXRlOiB0aGlzLmZyYW1lUmF0ZSwgLy8gdXNlZCBieSBXZWJBc3NlbWJseVJlY29yZGVyOyB2YWx1ZXM6IHVzdWFsbHkgMzA7IGFjY2VwdHMgYW55LlxyXG4gICAgICAgICAgICAgICAgYml0cmF0ZTogdGhpcy5iaXRyYXRlIC8vIHVzZWQgYnkgV2ViQXNzZW1ibHlSZWNvcmRlcjsgdmFsdWVzOiAwIHRvIDEwMDArXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFtZWRpYVR5cGUuYXVkaW8pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmlkZW9SZWNvcmRlci5zdGFydFJlY29yZGluZygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoISFtZWRpYVR5cGUuYXVkaW8gJiYgISFtZWRpYVR5cGUudmlkZW8pIHtcclxuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICAgICAgdmFyIGlzU2luZ2xlUmVjb3JkZXIgPSBpc01lZGlhUmVjb3JkZXJDb21wYXRpYmxlKCkgPT09IHRydWU7XHJcblxyXG4gICAgICAgICAgICBpZiAobWVkaWFUeXBlLmF1ZGlvIGluc3RhbmNlb2YgU3RlcmVvQXVkaW9SZWNvcmRlciAmJiAhIW1lZGlhVHlwZS52aWRlbykge1xyXG4gICAgICAgICAgICAgICAgaXNTaW5nbGVSZWNvcmRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lZGlhVHlwZS5hdWRpbyAhPT0gdHJ1ZSAmJiBtZWRpYVR5cGUudmlkZW8gIT09IHRydWUgJiYgbWVkaWFUeXBlLmF1ZGlvICE9PSBtZWRpYVR5cGUudmlkZW8pIHtcclxuICAgICAgICAgICAgICAgIGlzU2luZ2xlUmVjb3JkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGlzU2luZ2xlUmVjb3JkZXIgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuYXVkaW9SZWNvcmRlciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnZpZGVvUmVjb3JkZXIuc3RhcnRSZWNvcmRpbmcoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNlbGYudmlkZW9SZWNvcmRlci5pbml0UmVjb3JkZXIoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5hdWRpb1JlY29yZGVyLmluaXRSZWNvcmRlcihmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQm90aCByZWNvcmRlcnMgYXJlIHJlYWR5IHRvIHJlY29yZCB0aGluZ3MgYWNjdXJhdGVseVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnZpZGVvUmVjb3JkZXIuc3RhcnRSZWNvcmRpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hdWRpb1JlY29yZGVyLnN0YXJ0UmVjb3JkaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCEhbWVkaWFUeXBlLmdpZikge1xyXG4gICAgICAgICAgICByZWNvcmRlclR5cGUgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIG1lZGlhVHlwZS5naWYgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIHJlY29yZGVyVHlwZSA9IG1lZGlhVHlwZS5naWY7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5naWZSZWNvcmRlciA9IG5ldyBSZWNvcmRSVEMobWVkaWFTdHJlYW0sIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdnaWYnLFxyXG4gICAgICAgICAgICAgICAgZnJhbWVSYXRlOiB0aGlzLmZyYW1lUmF0ZSB8fCAyMDAsXHJcbiAgICAgICAgICAgICAgICBxdWFsaXR5OiB0aGlzLnF1YWxpdHkgfHwgMTAsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlTG9nczogdGhpcy5kaXNhYmxlTG9ncyxcclxuICAgICAgICAgICAgICAgIHJlY29yZGVyVHlwZTogcmVjb3JkZXJUeXBlLFxyXG4gICAgICAgICAgICAgICAgbWltZVR5cGU6IG1pbWVUeXBlLmdpZlxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5naWZSZWNvcmRlci5zdGFydFJlY29yZGluZygpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBzdG9wcyByZWNvcmRpbmcuXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uIGlzIGludm9rZWQgd2hlbiBhbGwgZW5jb2RlcnMgZmluaXNoZWQgdGhlaXIgam9icy5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBNUmVjb3JkUlRDXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIuc3RvcFJlY29yZGluZyhmdW5jdGlvbihyZWNvcmRpbmcpe1xyXG4gICAgICogICAgIHZhciBhdWRpb0Jsb2IgPSByZWNvcmRpbmcuYXVkaW87XHJcbiAgICAgKiAgICAgdmFyIHZpZGVvQmxvYiA9IHJlY29yZGluZy52aWRlbztcclxuICAgICAqICAgICB2YXIgZ2lmQmxvYiAgID0gcmVjb3JkaW5nLmdpZjtcclxuICAgICAqIH0pO1xyXG4gICAgICovXHJcbiAgICB0aGlzLnN0b3BSZWNvcmRpbmcgPSBmdW5jdGlvbihjYWxsYmFjaykge1xyXG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYXVkaW9SZWNvcmRlcikge1xyXG4gICAgICAgICAgICB0aGlzLmF1ZGlvUmVjb3JkZXIuc3RvcFJlY29yZGluZyhmdW5jdGlvbihibG9iVVJMKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhibG9iVVJMLCAnYXVkaW8nKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy52aWRlb1JlY29yZGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlkZW9SZWNvcmRlci5zdG9wUmVjb3JkaW5nKGZ1bmN0aW9uKGJsb2JVUkwpIHtcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGJsb2JVUkwsICd2aWRlbycpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmdpZlJlY29yZGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2lmUmVjb3JkZXIuc3RvcFJlY29yZGluZyhmdW5jdGlvbihibG9iVVJMKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhibG9iVVJMLCAnZ2lmJyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBwYXVzZXMgcmVjb3JkaW5nLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIE1SZWNvcmRSVENcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5wYXVzZVJlY29yZGluZygpO1xyXG4gICAgICovXHJcbiAgICB0aGlzLnBhdXNlUmVjb3JkaW5nID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYXVkaW9SZWNvcmRlcikge1xyXG4gICAgICAgICAgICB0aGlzLmF1ZGlvUmVjb3JkZXIucGF1c2VSZWNvcmRpbmcoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnZpZGVvUmVjb3JkZXIpIHtcclxuICAgICAgICAgICAgdGhpcy52aWRlb1JlY29yZGVyLnBhdXNlUmVjb3JkaW5nKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5naWZSZWNvcmRlcikge1xyXG4gICAgICAgICAgICB0aGlzLmdpZlJlY29yZGVyLnBhdXNlUmVjb3JkaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHJlc3VtZXMgcmVjb3JkaW5nLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIE1SZWNvcmRSVENcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5yZXN1bWVSZWNvcmRpbmcoKTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5yZXN1bWVSZWNvcmRpbmcgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5hdWRpb1JlY29yZGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXVkaW9SZWNvcmRlci5yZXN1bWVSZWNvcmRpbmcoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnZpZGVvUmVjb3JkZXIpIHtcclxuICAgICAgICAgICAgdGhpcy52aWRlb1JlY29yZGVyLnJlc3VtZVJlY29yZGluZygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ2lmUmVjb3JkZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5naWZSZWNvcmRlci5yZXN1bWVSZWNvcmRpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gbWFudWFsbHkgZ2V0IGFsbCByZWNvcmRlZCBibG9icy5cclxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gQWxsIHJlY29yZGVkIGJsb2JzIGFyZSBwYXNzZWQgYmFjayB0byB0aGUgXCJjYWxsYmFja1wiIGZ1bmN0aW9uLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIE1SZWNvcmRSVENcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5nZXRCbG9iKGZ1bmN0aW9uKHJlY29yZGluZyl7XHJcbiAgICAgKiAgICAgdmFyIGF1ZGlvQmxvYiA9IHJlY29yZGluZy5hdWRpbztcclxuICAgICAqICAgICB2YXIgdmlkZW9CbG9iID0gcmVjb3JkaW5nLnZpZGVvO1xyXG4gICAgICogICAgIHZhciBnaWZCbG9iICAgPSByZWNvcmRpbmcuZ2lmO1xyXG4gICAgICogfSk7XHJcbiAgICAgKiAvLyBvclxyXG4gICAgICogdmFyIGF1ZGlvQmxvYiA9IHJlY29yZGVyLmdldEJsb2IoKS5hdWRpbztcclxuICAgICAqIHZhciB2aWRlb0Jsb2IgPSByZWNvcmRlci5nZXRCbG9iKCkudmlkZW87XHJcbiAgICAgKi9cclxuICAgIHRoaXMuZ2V0QmxvYiA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdmFyIG91dHB1dCA9IHt9O1xyXG5cclxuICAgICAgICBpZiAodGhpcy5hdWRpb1JlY29yZGVyKSB7XHJcbiAgICAgICAgICAgIG91dHB1dC5hdWRpbyA9IHRoaXMuYXVkaW9SZWNvcmRlci5nZXRCbG9iKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy52aWRlb1JlY29yZGVyKSB7XHJcbiAgICAgICAgICAgIG91dHB1dC52aWRlbyA9IHRoaXMudmlkZW9SZWNvcmRlci5nZXRCbG9iKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5naWZSZWNvcmRlcikge1xyXG4gICAgICAgICAgICBvdXRwdXQuZ2lmID0gdGhpcy5naWZSZWNvcmRlci5nZXRCbG9iKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgY2FsbGJhY2sob3V0cHV0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBvdXRwdXQ7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVzdHJveSBhbGwgcmVjb3JkZXIgaW5zdGFuY2VzLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIE1SZWNvcmRSVENcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5kZXN0cm95KCk7XHJcbiAgICAgKi9cclxuICAgIHRoaXMuZGVzdHJveSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmF1ZGlvUmVjb3JkZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5hdWRpb1JlY29yZGVyLmRlc3Ryb3koKTtcclxuICAgICAgICAgICAgdGhpcy5hdWRpb1JlY29yZGVyID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnZpZGVvUmVjb3JkZXIpIHtcclxuICAgICAgICAgICAgdGhpcy52aWRlb1JlY29yZGVyLmRlc3Ryb3koKTtcclxuICAgICAgICAgICAgdGhpcy52aWRlb1JlY29yZGVyID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmdpZlJlY29yZGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2lmUmVjb3JkZXIuZGVzdHJveSgpO1xyXG4gICAgICAgICAgICB0aGlzLmdpZlJlY29yZGVyID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gbWFudWFsbHkgZ2V0IGFsbCByZWNvcmRlZCBibG9icycgRGF0YVVSTHMuXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIEFsbCByZWNvcmRlZCBibG9icycgRGF0YVVSTHMgYXJlIHBhc3NlZCBiYWNrIHRvIHRoZSBcImNhbGxiYWNrXCIgZnVuY3Rpb24uXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgTVJlY29yZFJUQ1xyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHJlY29yZGVyLmdldERhdGFVUkwoZnVuY3Rpb24ocmVjb3JkaW5nKXtcclxuICAgICAqICAgICB2YXIgYXVkaW9EYXRhVVJMID0gcmVjb3JkaW5nLmF1ZGlvO1xyXG4gICAgICogICAgIHZhciB2aWRlb0RhdGFVUkwgPSByZWNvcmRpbmcudmlkZW87XHJcbiAgICAgKiAgICAgdmFyIGdpZkRhdGFVUkwgICA9IHJlY29yZGluZy5naWY7XHJcbiAgICAgKiB9KTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5nZXREYXRhVVJMID0gZnVuY3Rpb24oY2FsbGJhY2spIHtcclxuICAgICAgICB0aGlzLmdldEJsb2IoZnVuY3Rpb24oYmxvYikge1xyXG4gICAgICAgICAgICBpZiAoYmxvYi5hdWRpbyAmJiBibG9iLnZpZGVvKSB7XHJcbiAgICAgICAgICAgICAgICBnZXREYXRhVVJMKGJsb2IuYXVkaW8sIGZ1bmN0aW9uKF9hdWRpb0RhdGFVUkwpIHtcclxuICAgICAgICAgICAgICAgICAgICBnZXREYXRhVVJMKGJsb2IudmlkZW8sIGZ1bmN0aW9uKF92aWRlb0RhdGFVUkwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW86IF9hdWRpb0RhdGFVUkwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlbzogX3ZpZGVvRGF0YVVSTFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGJsb2IuYXVkaW8pIHtcclxuICAgICAgICAgICAgICAgIGdldERhdGFVUkwoYmxvYi5hdWRpbywgZnVuY3Rpb24oX2F1ZGlvRGF0YVVSTCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW86IF9hdWRpb0RhdGFVUkxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGJsb2IudmlkZW8pIHtcclxuICAgICAgICAgICAgICAgIGdldERhdGFVUkwoYmxvYi52aWRlbywgZnVuY3Rpb24oX3ZpZGVvRGF0YVVSTCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW86IF92aWRlb0RhdGFVUkxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGdldERhdGFVUkwoYmxvYiwgY2FsbGJhY2swMCkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIFdvcmtlciAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgICAgIHZhciB3ZWJXb3JrZXIgPSBwcm9jZXNzSW5XZWJXb3JrZXIoZnVuY3Rpb24gcmVhZEZpbGUoX2Jsb2IpIHtcclxuICAgICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZShuZXcgRmlsZVJlYWRlclN5bmMoKS5yZWFkQXNEYXRhVVJMKF9ibG9iKSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICB3ZWJXb3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazAwKGV2ZW50LmRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICB3ZWJXb3JrZXIucG9zdE1lc3NhZ2UoYmxvYik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGJsb2IpO1xyXG4gICAgICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2swMChldmVudC50YXJnZXQucmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NJbldlYldvcmtlcihfZnVuY3Rpb24pIHtcclxuICAgICAgICAgICAgdmFyIGJsb2IgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtfZnVuY3Rpb24udG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgICd0aGlzLm9ubWVzc2FnZSA9ICBmdW5jdGlvbiAoZWVlKSB7JyArIF9mdW5jdGlvbi5uYW1lICsgJyhlZWUuZGF0YSk7fSdcclxuICAgICAgICAgICAgXSwge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ2FwcGxpY2F0aW9uL2phdmFzY3JpcHQnXHJcbiAgICAgICAgICAgIH0pKTtcclxuXHJcbiAgICAgICAgICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyKGJsb2IpO1xyXG4gICAgICAgICAgICB2YXIgdXJsO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIFVSTCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgICAgIHVybCA9IFVSTDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygd2Via2l0VVJMICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICAgICAgdXJsID0gd2Via2l0VVJMO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgJ05laXRoZXIgVVJMIG5vciB3ZWJraXRVUkwgZGV0ZWN0ZWQuJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB1cmwucmV2b2tlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgICAgICAgICByZXR1cm4gd29ya2VyO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBhc2sge0BsaW5rIE1SZWNvcmRSVEN9IHRvIHdyaXRlIGFsbCByZWNvcmRlZCBibG9icyBpbnRvIEluZGV4ZWREQiBzdG9yYWdlLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIE1SZWNvcmRSVENcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci53cml0ZVRvRGlzaygpO1xyXG4gICAgICovXHJcbiAgICB0aGlzLndyaXRlVG9EaXNrID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgUmVjb3JkUlRDLndyaXRlVG9EaXNrKHtcclxuICAgICAgICAgICAgYXVkaW86IHRoaXMuYXVkaW9SZWNvcmRlcixcclxuICAgICAgICAgICAgdmlkZW86IHRoaXMudmlkZW9SZWNvcmRlcixcclxuICAgICAgICAgICAgZ2lmOiB0aGlzLmdpZlJlY29yZGVyXHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gaW52b2tlIGEgc2F2ZS1hcyBkaWFsb2cgZm9yIGFsbCByZWNvcmRlZCBibG9icy5cclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0ge2F1ZGlvOiAnYXVkaW8tbmFtZScsIHZpZGVvOiAndmlkZW8tbmFtZScsIGdpZjogJ2dpZi1uYW1lJ31cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBNUmVjb3JkUlRDXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIuc2F2ZSh7XHJcbiAgICAgKiAgICAgYXVkaW86ICdhdWRpby1maWxlLW5hbWUnLFxyXG4gICAgICogICAgIHZpZGVvOiAndmlkZW8tZmlsZS1uYW1lJyxcclxuICAgICAqICAgICBnaWYgIDogJ2dpZi1maWxlLW5hbWUnXHJcbiAgICAgKiB9KTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5zYXZlID0gZnVuY3Rpb24oYXJncykge1xyXG4gICAgICAgIGFyZ3MgPSBhcmdzIHx8IHtcclxuICAgICAgICAgICAgYXVkaW86IHRydWUsXHJcbiAgICAgICAgICAgIHZpZGVvOiB0cnVlLFxyXG4gICAgICAgICAgICBnaWY6IHRydWVcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAoISFhcmdzLmF1ZGlvICYmIHRoaXMuYXVkaW9SZWNvcmRlcikge1xyXG4gICAgICAgICAgICB0aGlzLmF1ZGlvUmVjb3JkZXIuc2F2ZSh0eXBlb2YgYXJncy5hdWRpbyA9PT0gJ3N0cmluZycgPyBhcmdzLmF1ZGlvIDogJycpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCEhYXJncy52aWRlbyAmJiB0aGlzLnZpZGVvUmVjb3JkZXIpIHtcclxuICAgICAgICAgICAgdGhpcy52aWRlb1JlY29yZGVyLnNhdmUodHlwZW9mIGFyZ3MudmlkZW8gPT09ICdzdHJpbmcnID8gYXJncy52aWRlbyA6ICcnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCEhYXJncy5naWYgJiYgdGhpcy5naWZSZWNvcmRlcikge1xyXG4gICAgICAgICAgICB0aGlzLmdpZlJlY29yZGVyLnNhdmUodHlwZW9mIGFyZ3MuZ2lmID09PSAnc3RyaW5nJyA/IGFyZ3MuZ2lmIDogJycpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBnZXQgYWxsIHJlY29yZGVkIGJsb2JzIGZyb20gSW5kZXhlZERCIHN0b3JhZ2UuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIC0gJ2FsbCcgb3IgJ2F1ZGlvJyBvciAndmlkZW8nIG9yICdnaWYnXHJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24gdG8gZ2V0IGFsbCBzdG9yZWQgYmxvYnMuXHJcbiAqIEBtZXRob2RcclxuICogQG1lbWJlcm9mIE1SZWNvcmRSVENcclxuICogQGV4YW1wbGVcclxuICogTVJlY29yZFJUQy5nZXRGcm9tRGlzaygnYWxsJywgZnVuY3Rpb24oZGF0YVVSTCwgdHlwZSl7XHJcbiAqICAgICBpZih0eXBlID09PSAnYXVkaW8nKSB7IH1cclxuICogICAgIGlmKHR5cGUgPT09ICd2aWRlbycpIHsgfVxyXG4gKiAgICAgaWYodHlwZSA9PT0gJ2dpZicpICAgeyB9XHJcbiAqIH0pO1xyXG4gKi9cclxuTVJlY29yZFJUQy5nZXRGcm9tRGlzayA9IFJlY29yZFJUQy5nZXRGcm9tRGlzaztcclxuXHJcbi8qKlxyXG4gKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBzdG9yZSByZWNvcmRlZCBibG9icyBpbnRvIEluZGV4ZWREQiBzdG9yYWdlLlxyXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIHthdWRpbzogQmxvYiwgdmlkZW86IEJsb2IsIGdpZjogQmxvYn1cclxuICogQG1ldGhvZFxyXG4gKiBAbWVtYmVyb2YgTVJlY29yZFJUQ1xyXG4gKiBAZXhhbXBsZVxyXG4gKiBNUmVjb3JkUlRDLndyaXRlVG9EaXNrKHtcclxuICogICAgIGF1ZGlvOiBhdWRpb0Jsb2IsXHJcbiAqICAgICB2aWRlbzogdmlkZW9CbG9iLFxyXG4gKiAgICAgZ2lmICA6IGdpZkJsb2JcclxuICogfSk7XHJcbiAqL1xyXG5NUmVjb3JkUlRDLndyaXRlVG9EaXNrID0gUmVjb3JkUlRDLndyaXRlVG9EaXNrO1xyXG5cclxuaWYgKHR5cGVvZiBSZWNvcmRSVEMgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBSZWNvcmRSVEMuTVJlY29yZFJUQyA9IE1SZWNvcmRSVEM7XHJcbn1cblxyXG52YXIgYnJvd3NlckZha2VVc2VyQWdlbnQgPSAnRmFrZS81LjAgKEZha2VPUykgQXBwbGVXZWJLaXQvMTIzIChLSFRNTCwgbGlrZSBHZWNrbykgRmFrZS8xMi4zLjQ1NjcuODkgRmFrZS8xMjMuNDUnO1xyXG5cclxuKGZ1bmN0aW9uKHRoYXQpIHtcclxuICAgIGlmICghdGhhdCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBnbG9iYWwgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGdsb2JhbC5uYXZpZ2F0b3IgPSB7XHJcbiAgICAgICAgdXNlckFnZW50OiBicm93c2VyRmFrZVVzZXJBZ2VudCxcclxuICAgICAgICBnZXRVc2VyTWVkaWE6IGZ1bmN0aW9uKCkge31cclxuICAgIH07XHJcblxyXG4gICAgaWYgKCFnbG9iYWwuY29uc29sZSkge1xyXG4gICAgICAgIGdsb2JhbC5jb25zb2xlID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBnbG9iYWwuY29uc29sZS5sb2cgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBnbG9iYWwuY29uc29sZS5lcnJvciA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICBnbG9iYWwuY29uc29sZS5lcnJvciA9IGdsb2JhbC5jb25zb2xlLmxvZyA9IGdsb2JhbC5jb25zb2xlLmxvZyB8fCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYXJndW1lbnRzKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgLypnbG9iYWwgZG9jdW1lbnQ6dHJ1ZSAqL1xyXG4gICAgICAgIHRoYXQuZG9jdW1lbnQgPSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50RWxlbWVudDoge1xyXG4gICAgICAgICAgICAgICAgYXBwZW5kQ2hpbGQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgPSBkb2N1bWVudC5jYXB0dXJlU3RyZWFtID0gZG9jdW1lbnQubW96Q2FwdHVyZVN0cmVhbSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICB2YXIgb2JqID0ge1xyXG4gICAgICAgICAgICAgICAgZ2V0Q29udGV4dDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iajtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBwbGF5OiBmdW5jdGlvbigpIHt9LFxyXG4gICAgICAgICAgICAgICAgcGF1c2U6IGZ1bmN0aW9uKCkge30sXHJcbiAgICAgICAgICAgICAgICBkcmF3SW1hZ2U6IGZ1bmN0aW9uKCkge30sXHJcbiAgICAgICAgICAgICAgICB0b0RhdGFVUkw6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzdHlsZToge31cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIG9iajtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGF0LkhUTUxWaWRlb0VsZW1lbnQgPSBmdW5jdGlvbigpIHt9O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgbG9jYXRpb24gPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgLypnbG9iYWwgbG9jYXRpb246dHJ1ZSAqL1xyXG4gICAgICAgIHRoYXQubG9jYXRpb24gPSB7XHJcbiAgICAgICAgICAgIHByb3RvY29sOiAnZmlsZTonLFxyXG4gICAgICAgICAgICBocmVmOiAnJyxcclxuICAgICAgICAgICAgaGFzaDogJydcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2Ygc2NyZWVuID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIC8qZ2xvYmFsIHNjcmVlbjp0cnVlICovXHJcbiAgICAgICAgdGhhdC5zY3JlZW4gPSB7XHJcbiAgICAgICAgICAgIHdpZHRoOiAwLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IDBcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgVVJMID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIC8qZ2xvYmFsIHNjcmVlbjp0cnVlICovXHJcbiAgICAgICAgdGhhdC5VUkwgPSB7XHJcbiAgICAgICAgICAgIGNyZWF0ZU9iamVjdFVSTDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJldm9rZU9iamVjdFVSTDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qZ2xvYmFsIHdpbmRvdzp0cnVlICovXHJcbiAgICB0aGF0LndpbmRvdyA9IGdsb2JhbDtcclxufSkodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiBudWxsKTtcblxyXG4vLyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX1xyXG4vLyBDcm9zcy1Ccm93c2VyLURlY2xhcmF0aW9ucy5qc1xyXG5cclxuLy8gYW5pbWF0aW9uLWZyYW1lIHVzZWQgaW4gV2ViTSByZWNvcmRpbmdcclxuXHJcbi8qanNoaW50IC1XMDc5ICovXHJcbnZhciByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xyXG5pZiAodHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIGlmICh0eXBlb2Ygd2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIC8qZ2xvYmFsIHJlcXVlc3RBbmltYXRpb25GcmFtZTp0cnVlICovXHJcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gd2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIC8qZ2xvYmFsIHJlcXVlc3RBbmltYXRpb25GcmFtZTp0cnVlICovXHJcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gbW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgLypnbG9iYWwgcmVxdWVzdEFuaW1hdGlvbkZyYW1lOnRydWUgKi9cclxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBtc1JlcXVlc3RBbmltYXRpb25GcmFtZTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAvLyB2aWE6IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3BhdWxpcmlzaC8xNTc5NjcxXHJcbiAgICAgICAgdmFyIGxhc3RUaW1lID0gMDtcclxuXHJcbiAgICAgICAgLypnbG9iYWwgcmVxdWVzdEFuaW1hdGlvbkZyYW1lOnRydWUgKi9cclxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbihjYWxsYmFjaywgZWxlbWVudCkge1xyXG4gICAgICAgICAgICB2YXIgY3VyclRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgdmFyIHRpbWVUb0NhbGwgPSBNYXRoLm1heCgwLCAxNiAtIChjdXJyVGltZSAtIGxhc3RUaW1lKSk7XHJcbiAgICAgICAgICAgIHZhciBpZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhjdXJyVGltZSArIHRpbWVUb0NhbGwpO1xyXG4gICAgICAgICAgICB9LCB0aW1lVG9DYWxsKTtcclxuICAgICAgICAgICAgbGFzdFRpbWUgPSBjdXJyVGltZSArIHRpbWVUb0NhbGw7XHJcbiAgICAgICAgICAgIHJldHVybiBpZDtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcblxyXG4vKmpzaGludCAtVzA3OSAqL1xyXG52YXIgY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWU7XHJcbmlmICh0eXBlb2YgY2FuY2VsQW5pbWF0aW9uRnJhbWUgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBpZiAodHlwZW9mIHdlYmtpdENhbmNlbEFuaW1hdGlvbkZyYW1lICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIC8qZ2xvYmFsIGNhbmNlbEFuaW1hdGlvbkZyYW1lOnRydWUgKi9cclxuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSA9IHdlYmtpdENhbmNlbEFuaW1hdGlvbkZyYW1lO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbW96Q2FuY2VsQW5pbWF0aW9uRnJhbWUgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgLypnbG9iYWwgY2FuY2VsQW5pbWF0aW9uRnJhbWU6dHJ1ZSAqL1xyXG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lID0gbW96Q2FuY2VsQW5pbWF0aW9uRnJhbWU7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtc0NhbmNlbEFuaW1hdGlvbkZyYW1lICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIC8qZ2xvYmFsIGNhbmNlbEFuaW1hdGlvbkZyYW1lOnRydWUgKi9cclxuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSA9IG1zQ2FuY2VsQW5pbWF0aW9uRnJhbWU7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjYW5jZWxBbmltYXRpb25GcmFtZSA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAvKmdsb2JhbCBjYW5jZWxBbmltYXRpb25GcmFtZTp0cnVlICovXHJcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbihpZCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoaWQpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbi8vIFdlYkF1ZGlvIEFQSSByZXByZXNlbnRlclxyXG52YXIgQXVkaW9Db250ZXh0ID0gd2luZG93LkF1ZGlvQ29udGV4dDtcclxuXHJcbmlmICh0eXBlb2YgQXVkaW9Db250ZXh0ID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgaWYgKHR5cGVvZiB3ZWJraXRBdWRpb0NvbnRleHQgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgLypnbG9iYWwgQXVkaW9Db250ZXh0OnRydWUgKi9cclxuICAgICAgICBBdWRpb0NvbnRleHQgPSB3ZWJraXRBdWRpb0NvbnRleHQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBtb3pBdWRpb0NvbnRleHQgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgLypnbG9iYWwgQXVkaW9Db250ZXh0OnRydWUgKi9cclxuICAgICAgICBBdWRpb0NvbnRleHQgPSBtb3pBdWRpb0NvbnRleHQ7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qanNoaW50IC1XMDc5ICovXHJcbnZhciBVUkwgPSB3aW5kb3cuVVJMO1xyXG5cclxuaWYgKHR5cGVvZiBVUkwgPT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3ZWJraXRVUkwgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAvKmdsb2JhbCBVUkw6dHJ1ZSAqL1xyXG4gICAgVVJMID0gd2Via2l0VVJMO1xyXG59XHJcblxyXG5pZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG5hdmlnYXRvci5nZXRVc2VyTWVkaWEgPT09ICd1bmRlZmluZWQnKSB7IC8vIG1heWJlIHdpbmRvdy5uYXZpZ2F0b3I/XHJcbiAgICBpZiAodHlwZW9mIG5hdmlnYXRvci53ZWJraXRHZXRVc2VyTWVkaWEgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgbmF2aWdhdG9yLmdldFVzZXJNZWRpYSA9IG5hdmlnYXRvci53ZWJraXRHZXRVc2VyTWVkaWE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IubW96R2V0VXNlck1lZGlhICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIG5hdmlnYXRvci5nZXRVc2VyTWVkaWEgPSBuYXZpZ2F0b3IubW96R2V0VXNlck1lZGlhO1xyXG4gICAgfVxyXG59XHJcblxyXG52YXIgaXNFZGdlID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdFZGdlJykgIT09IC0xICYmICghIW5hdmlnYXRvci5tc1NhdmVCbG9iIHx8ICEhbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IpO1xyXG52YXIgaXNPcGVyYSA9ICEhd2luZG93Lm9wZXJhIHx8IG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignT1BSLycpICE9PSAtMTtcclxudmFyIGlzRmlyZWZveCA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdmaXJlZm94JykgPiAtMSAmJiAoJ25ldHNjYXBlJyBpbiB3aW5kb3cpICYmIC8gcnY6Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xyXG52YXIgaXNDaHJvbWUgPSAoIWlzT3BlcmEgJiYgIWlzRWRnZSAmJiAhIW5hdmlnYXRvci53ZWJraXRHZXRVc2VyTWVkaWEpIHx8IGlzRWxlY3Ryb24oKSB8fCBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignY2hyb21lLycpICE9PSAtMTtcclxuXHJcbnZhciBpc1NhZmFyaSA9IC9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XHJcblxyXG5pZiAoaXNTYWZhcmkgJiYgIWlzQ2hyb21lICYmIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignQ3JpT1MnKSAhPT0gLTEpIHtcclxuICAgIGlzU2FmYXJpID0gZmFsc2U7XHJcbiAgICBpc0Nocm9tZSA9IHRydWU7XHJcbn1cclxuXHJcbnZhciBNZWRpYVN0cmVhbSA9IHdpbmRvdy5NZWRpYVN0cmVhbTtcclxuXHJcbmlmICh0eXBlb2YgTWVkaWFTdHJlYW0gPT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3ZWJraXRNZWRpYVN0cmVhbSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIE1lZGlhU3RyZWFtID0gd2Via2l0TWVkaWFTdHJlYW07XHJcbn1cclxuXHJcbi8qZ2xvYmFsIE1lZGlhU3RyZWFtOnRydWUgKi9cclxuaWYgKHR5cGVvZiBNZWRpYVN0cmVhbSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIC8vIG92ZXJyaWRlIFwic3RvcFwiIG1ldGhvZCBmb3IgYWxsIGJyb3dzZXJzXHJcbiAgICBpZiAodHlwZW9mIE1lZGlhU3RyZWFtLnByb3RvdHlwZS5zdG9wID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIE1lZGlhU3RyZWFtLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0VHJhY2tzKCkuZm9yRWFjaChmdW5jdGlvbih0cmFjaykge1xyXG4gICAgICAgICAgICAgICAgdHJhY2suc3RvcCgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcblxyXG4vLyBiZWxvdyBmdW5jdGlvbiB2aWE6IGh0dHA6Ly9nb28uZ2wvQjNhZThjXHJcbi8qKlxyXG4gKiBSZXR1cm4gaHVtYW4tcmVhZGFibGUgZmlsZSBzaXplLlxyXG4gKiBAcGFyYW0ge251bWJlcn0gYnl0ZXMgLSBQYXNzIGJ5dGVzIGFuZCBnZXQgZm9ybWF0dGVkIHN0cmluZy5cclxuICogQHJldHVybnMge3N0cmluZ30gLSBmb3JtYXR0ZWQgc3RyaW5nXHJcbiAqIEBleGFtcGxlXHJcbiAqIGJ5dGVzVG9TaXplKDEwMjQqMTAyNCo1KSA9PT0gJzUgR0InXHJcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWF6LWtoYW4vUmVjb3JkUlRDfFJlY29yZFJUQyBTb3VyY2UgQ29kZX1cclxuICovXHJcbmZ1bmN0aW9uIGJ5dGVzVG9TaXplKGJ5dGVzKSB7XHJcbiAgICB2YXIgayA9IDEwMDA7XHJcbiAgICB2YXIgc2l6ZXMgPSBbJ0J5dGVzJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJ107XHJcbiAgICBpZiAoYnl0ZXMgPT09IDApIHtcclxuICAgICAgICByZXR1cm4gJzAgQnl0ZXMnO1xyXG4gICAgfVxyXG4gICAgdmFyIGkgPSBwYXJzZUludChNYXRoLmZsb29yKE1hdGgubG9nKGJ5dGVzKSAvIE1hdGgubG9nKGspKSwgMTApO1xyXG4gICAgcmV0dXJuIChieXRlcyAvIE1hdGgucG93KGssIGkpKS50b1ByZWNpc2lvbigzKSArICcgJyArIHNpemVzW2ldO1xyXG59XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtCbG9ifSBmaWxlIC0gRmlsZSBvciBCbG9iIG9iamVjdC4gVGhpcyBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlTmFtZSAtIE9wdGlvbmFsIGZpbGUgbmFtZSBlLmcuIFwiUmVjb3JkZWQtVmlkZW8ud2VibVwiXHJcbiAqIEBleGFtcGxlXHJcbiAqIGludm9rZVNhdmVBc0RpYWxvZyhibG9iIG9yIGZpbGUsIFtvcHRpb25hbF0gZmlsZU5hbWUpO1xyXG4gKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbXVhei1raGFuL1JlY29yZFJUQ3xSZWNvcmRSVEMgU291cmNlIENvZGV9XHJcbiAqL1xyXG5mdW5jdGlvbiBpbnZva2VTYXZlQXNEaWFsb2coZmlsZSwgZmlsZU5hbWUpIHtcclxuICAgIGlmICghZmlsZSkge1xyXG4gICAgICAgIHRocm93ICdCbG9iIG9iamVjdCBpcyByZXF1aXJlZC4nO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghZmlsZS50eXBlKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZmlsZS50eXBlID0gJ3ZpZGVvL3dlYm0nO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGZpbGVFeHRlbnNpb24gPSAoZmlsZS50eXBlIHx8ICd2aWRlby93ZWJtJykuc3BsaXQoJy8nKVsxXTtcclxuXHJcbiAgICBpZiAoZmlsZU5hbWUgJiYgZmlsZU5hbWUuaW5kZXhPZignLicpICE9PSAtMSkge1xyXG4gICAgICAgIHZhciBzcGxpdHRlZCA9IGZpbGVOYW1lLnNwbGl0KCcuJyk7XHJcbiAgICAgICAgZmlsZU5hbWUgPSBzcGxpdHRlZFswXTtcclxuICAgICAgICBmaWxlRXh0ZW5zaW9uID0gc3BsaXR0ZWRbMV07XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGZpbGVGdWxsTmFtZSA9IChmaWxlTmFtZSB8fCAoTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogOTk5OTk5OTk5OSkgKyA4ODg4ODg4ODgpKSArICcuJyArIGZpbGVFeHRlbnNpb247XHJcblxyXG4gICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYiAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICByZXR1cm4gbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IoZmlsZSwgZmlsZUZ1bGxOYW1lKTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG5hdmlnYXRvci5tc1NhdmVCbG9iICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIHJldHVybiBuYXZpZ2F0b3IubXNTYXZlQmxvYihmaWxlLCBmaWxlRnVsbE5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBoeXBlcmxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICBoeXBlcmxpbmsuaHJlZiA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSk7XHJcbiAgICBoeXBlcmxpbmsuZG93bmxvYWQgPSBmaWxlRnVsbE5hbWU7XHJcblxyXG4gICAgaHlwZXJsaW5rLnN0eWxlID0gJ2Rpc3BsYXk6bm9uZTtvcGFjaXR5OjA7Y29sb3I6dHJhbnNwYXJlbnQ7JztcclxuICAgIChkb2N1bWVudC5ib2R5IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuYXBwZW5kQ2hpbGQoaHlwZXJsaW5rKTtcclxuXHJcbiAgICBpZiAodHlwZW9mIGh5cGVybGluay5jbGljayA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIGh5cGVybGluay5jbGljaygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBoeXBlcmxpbmsudGFyZ2V0ID0gJ19ibGFuayc7XHJcbiAgICAgICAgaHlwZXJsaW5rLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoJ2NsaWNrJywge1xyXG4gICAgICAgICAgICB2aWV3OiB3aW5kb3csXHJcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXHJcbiAgICAgICAgICAgIGNhbmNlbGFibGU6IHRydWVcclxuICAgICAgICB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgVVJMLnJldm9rZU9iamVjdFVSTChoeXBlcmxpbmsuaHJlZik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vY2hldG9uL2lzLWVsZWN0cm9uL2Jsb2IvbWFzdGVyL2luZGV4LmpzXHJcbiAqKi9cclxuZnVuY3Rpb24gaXNFbGVjdHJvbigpIHtcclxuICAgIC8vIFJlbmRlcmVyIHByb2Nlc3NcclxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LnByb2Nlc3MgPT09ICdvYmplY3QnICYmIHdpbmRvdy5wcm9jZXNzLnR5cGUgPT09ICdyZW5kZXJlcicpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBNYWluIHByb2Nlc3NcclxuICAgIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHByb2Nlc3MudmVyc2lvbnMgPT09ICdvYmplY3QnICYmICEhcHJvY2Vzcy52ZXJzaW9ucy5lbGVjdHJvbikge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIERldGVjdCB0aGUgdXNlciBhZ2VudCB3aGVuIHRoZSBgbm9kZUludGVncmF0aW9uYCBvcHRpb24gaXMgc2V0IHRvIHRydWVcclxuICAgIGlmICh0eXBlb2YgbmF2aWdhdG9yID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbmF2aWdhdG9yLnVzZXJBZ2VudCA9PT0gJ3N0cmluZycgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdFbGVjdHJvbicpID49IDApIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFRyYWNrcyhzdHJlYW0sIGtpbmQpIHtcclxuICAgIGlmICghc3RyZWFtIHx8ICFzdHJlYW0uZ2V0VHJhY2tzKSB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdHJlYW0uZ2V0VHJhY2tzKCkuZmlsdGVyKGZ1bmN0aW9uKHQpIHtcclxuICAgICAgICByZXR1cm4gdC5raW5kID09PSAoa2luZCB8fCAnYXVkaW8nKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZXRTcmNPYmplY3Qoc3RyZWFtLCBlbGVtZW50KSB7XHJcbiAgICBpZiAoJ3NyY09iamVjdCcgaW4gZWxlbWVudCkge1xyXG4gICAgICAgIGVsZW1lbnQuc3JjT2JqZWN0ID0gc3RyZWFtO1xyXG4gICAgfSBlbHNlIGlmICgnbW96U3JjT2JqZWN0JyBpbiBlbGVtZW50KSB7XHJcbiAgICAgICAgZWxlbWVudC5tb3pTcmNPYmplY3QgPSBzdHJlYW07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGVsZW1lbnQuc3JjT2JqZWN0ID0gc3RyZWFtO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtCbG9ifSBmaWxlIC0gRmlsZSBvciBCbG9iIG9iamVjdC5cclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbi5cclxuICogQGV4YW1wbGVcclxuICogZ2V0U2Vla2FibGVCbG9iKGJsb2Igb3IgZmlsZSwgY2FsbGJhY2spO1xyXG4gKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbXVhei1raGFuL1JlY29yZFJUQ3xSZWNvcmRSVEMgU291cmNlIENvZGV9XHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRTZWVrYWJsZUJsb2IoaW5wdXRCbG9iLCBjYWxsYmFjaykge1xyXG4gICAgLy8gRUJNTC5qcyBjb3B5cmlnaHRzIGdvZXMgdG86IGh0dHBzOi8vZ2l0aHViLmNvbS9sZWdva2ljaGkvdHMtZWJtbFxyXG4gICAgaWYgKHR5cGVvZiBFQk1MID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIGxpbms6IGh0dHBzOi8vd3d3LndlYnJ0Yy1leHBlcmltZW50LmNvbS9FQk1MLmpzJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHJlYWRlciA9IG5ldyBFQk1MLlJlYWRlcigpO1xyXG4gICAgdmFyIGRlY29kZXIgPSBuZXcgRUJNTC5EZWNvZGVyKCk7XHJcbiAgICB2YXIgdG9vbHMgPSBFQk1MLnRvb2xzO1xyXG5cclxuICAgIHZhciBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgIGZpbGVSZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZSkge1xyXG4gICAgICAgIHZhciBlYm1sRWxtcyA9IGRlY29kZXIuZGVjb2RlKHRoaXMucmVzdWx0KTtcclxuICAgICAgICBlYm1sRWxtcy5mb3JFYWNoKGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgcmVhZGVyLnJlYWQoZWxlbWVudCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmVhZGVyLnN0b3AoKTtcclxuICAgICAgICB2YXIgcmVmaW5lZE1ldGFkYXRhQnVmID0gdG9vbHMubWFrZU1ldGFkYXRhU2Vla2FibGUocmVhZGVyLm1ldGFkYXRhcywgcmVhZGVyLmR1cmF0aW9uLCByZWFkZXIuY3Vlcyk7XHJcbiAgICAgICAgdmFyIGJvZHkgPSB0aGlzLnJlc3VsdC5zbGljZShyZWFkZXIubWV0YWRhdGFTaXplKTtcclxuICAgICAgICB2YXIgbmV3QmxvYiA9IG5ldyBCbG9iKFtyZWZpbmVkTWV0YWRhdGFCdWYsIGJvZHldLCB7XHJcbiAgICAgICAgICAgIHR5cGU6ICd2aWRlby93ZWJtJ1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjYWxsYmFjayhuZXdCbG9iKTtcclxuICAgIH07XHJcbiAgICBmaWxlUmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGlucHV0QmxvYik7XHJcbn1cclxuXHJcbmlmICh0eXBlb2YgUmVjb3JkUlRDICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgUmVjb3JkUlRDLmludm9rZVNhdmVBc0RpYWxvZyA9IGludm9rZVNhdmVBc0RpYWxvZztcclxuICAgIFJlY29yZFJUQy5nZXRUcmFja3MgPSBnZXRUcmFja3M7XHJcbiAgICBSZWNvcmRSVEMuZ2V0U2Vla2FibGVCbG9iID0gZ2V0U2Vla2FibGVCbG9iO1xyXG4gICAgUmVjb3JkUlRDLmJ5dGVzVG9TaXplID0gYnl0ZXNUb1NpemU7XHJcbiAgICBSZWNvcmRSVEMuaXNFbGVjdHJvbiA9IGlzRWxlY3Ryb247XHJcbn1cblxyXG4vLyBfX19fX19fX19fICh1c2VkIHRvIGhhbmRsZSBzdHVmZiBsaWtlIGh0dHA6Ly9nb28uZ2wveG1FNWVnKSBpc3N1ZSAjMTI5XHJcbi8vIFN0b3JhZ2UuanNcclxuXHJcbi8qKlxyXG4gKiBTdG9yYWdlIGlzIGEgc3RhbmRhbG9uZSBvYmplY3QgdXNlZCBieSB7QGxpbmsgUmVjb3JkUlRDfSB0byBzdG9yZSByZXVzYWJsZSBvYmplY3RzIGUuZy4gXCJuZXcgQXVkaW9Db250ZXh0XCIuXHJcbiAqIEBsaWNlbnNlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbXVhei1raGFuL1JlY29yZFJUQy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVH1cclxuICogQGF1dGhvciB7QGxpbmsgaHR0cHM6Ly9NdWF6S2hhbi5jb218TXVheiBLaGFufVxyXG4gKiBAZXhhbXBsZVxyXG4gKiBTdG9yYWdlLkF1ZGlvQ29udGV4dCA9PT0gd2Via2l0QXVkaW9Db250ZXh0XHJcbiAqIEBwcm9wZXJ0eSB7d2Via2l0QXVkaW9Db250ZXh0fSBBdWRpb0NvbnRleHQgLSBLZWVwcyBhIHJlZmVyZW5jZSB0byBBdWRpb0NvbnRleHQgb2JqZWN0LlxyXG4gKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbXVhei1raGFuL1JlY29yZFJUQ3xSZWNvcmRSVEMgU291cmNlIENvZGV9XHJcbiAqL1xyXG5cclxudmFyIFN0b3JhZ2UgPSB7fTtcclxuXHJcbmlmICh0eXBlb2YgQXVkaW9Db250ZXh0ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgU3RvcmFnZS5BdWRpb0NvbnRleHQgPSBBdWRpb0NvbnRleHQ7XHJcbn0gZWxzZSBpZiAodHlwZW9mIHdlYmtpdEF1ZGlvQ29udGV4dCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIFN0b3JhZ2UuQXVkaW9Db250ZXh0ID0gd2Via2l0QXVkaW9Db250ZXh0O1xyXG59XHJcblxyXG5pZiAodHlwZW9mIFJlY29yZFJUQyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIFJlY29yZFJUQy5TdG9yYWdlID0gU3RvcmFnZTtcclxufVxuXHJcbmZ1bmN0aW9uIGlzTWVkaWFSZWNvcmRlckNvbXBhdGlibGUoKSB7XHJcbiAgICBpZiAoaXNGaXJlZm94IHx8IGlzU2FmYXJpIHx8IGlzRWRnZSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHZhciBuVmVyID0gbmF2aWdhdG9yLmFwcFZlcnNpb247XHJcbiAgICB2YXIgbkFndCA9IG5hdmlnYXRvci51c2VyQWdlbnQ7XHJcbiAgICB2YXIgZnVsbFZlcnNpb24gPSAnJyArIHBhcnNlRmxvYXQobmF2aWdhdG9yLmFwcFZlcnNpb24pO1xyXG4gICAgdmFyIG1ham9yVmVyc2lvbiA9IHBhcnNlSW50KG5hdmlnYXRvci5hcHBWZXJzaW9uLCAxMCk7XHJcbiAgICB2YXIgbmFtZU9mZnNldCwgdmVyT2Zmc2V0LCBpeDtcclxuXHJcbiAgICBpZiAoaXNDaHJvbWUgfHwgaXNPcGVyYSkge1xyXG4gICAgICAgIHZlck9mZnNldCA9IG5BZ3QuaW5kZXhPZignQ2hyb21lJyk7XHJcbiAgICAgICAgZnVsbFZlcnNpb24gPSBuQWd0LnN1YnN0cmluZyh2ZXJPZmZzZXQgKyA3KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyB0cmltIHRoZSBmdWxsVmVyc2lvbiBzdHJpbmcgYXQgc2VtaWNvbG9uL3NwYWNlIGlmIHByZXNlbnRcclxuICAgIGlmICgoaXggPSBmdWxsVmVyc2lvbi5pbmRleE9mKCc7JykpICE9PSAtMSkge1xyXG4gICAgICAgIGZ1bGxWZXJzaW9uID0gZnVsbFZlcnNpb24uc3Vic3RyaW5nKDAsIGl4KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoKGl4ID0gZnVsbFZlcnNpb24uaW5kZXhPZignICcpKSAhPT0gLTEpIHtcclxuICAgICAgICBmdWxsVmVyc2lvbiA9IGZ1bGxWZXJzaW9uLnN1YnN0cmluZygwLCBpeCk7XHJcbiAgICB9XHJcblxyXG4gICAgbWFqb3JWZXJzaW9uID0gcGFyc2VJbnQoJycgKyBmdWxsVmVyc2lvbiwgMTApO1xyXG5cclxuICAgIGlmIChpc05hTihtYWpvclZlcnNpb24pKSB7XHJcbiAgICAgICAgZnVsbFZlcnNpb24gPSAnJyArIHBhcnNlRmxvYXQobmF2aWdhdG9yLmFwcFZlcnNpb24pO1xyXG4gICAgICAgIG1ham9yVmVyc2lvbiA9IHBhcnNlSW50KG5hdmlnYXRvci5hcHBWZXJzaW9uLCAxMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG1ham9yVmVyc2lvbiA+PSA0OTtcclxufVxuXHJcbi8vIF9fX19fX19fX19fX19fX19fX19fX19cclxuLy8gTWVkaWFTdHJlYW1SZWNvcmRlci5qc1xyXG5cclxuLyoqXHJcbiAqIE1lZGlhU3RyZWFtUmVjb3JkZXIgaXMgYW4gYWJzdHJhY3Rpb24gbGF5ZXIgZm9yIHtAbGluayBodHRwczovL3czYy5naXRodWIuaW8vbWVkaWFjYXB0dXJlLXJlY29yZC9NZWRpYVJlY29yZGVyLmh0bWx8TWVkaWFSZWNvcmRlciBBUEl9LiBJdCBpcyB1c2VkIGJ5IHtAbGluayBSZWNvcmRSVEN9IHRvIHJlY29yZCBNZWRpYVN0cmVhbShzKSBpbiBib3RoIENocm9tZSBhbmQgRmlyZWZveC5cclxuICogQHN1bW1hcnkgUnVucyB0b3Agb3ZlciB7QGxpbmsgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL21lZGlhY2FwdHVyZS1yZWNvcmQvTWVkaWFSZWNvcmRlci5odG1sfE1lZGlhUmVjb3JkZXIgQVBJfS5cclxuICogQGxpY2Vuc2Uge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWF6LWtoYW4vUmVjb3JkUlRDL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUfVxyXG4gKiBAYXV0aG9yIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbXVhei1raGFufE11YXogS2hhbn1cclxuICogQHR5cGVkZWYgTWVkaWFTdHJlYW1SZWNvcmRlclxyXG4gKiBAY2xhc3NcclxuICogQGV4YW1wbGVcclxuICogdmFyIGNvbmZpZyA9IHtcclxuICogICAgIG1pbWVUeXBlOiAndmlkZW8vd2VibScsIC8vIHZwOCwgdnA5LCBoMjY0LCBta3YsIG9wdXMvdm9yYmlzXHJcbiAqICAgICBhdWRpb0JpdHNQZXJTZWNvbmQgOiAyNTYgKiA4ICogMTAyNCxcclxuICogICAgIHZpZGVvQml0c1BlclNlY29uZCA6IDI1NiAqIDggKiAxMDI0LFxyXG4gKiAgICAgYml0c1BlclNlY29uZDogMjU2ICogOCAqIDEwMjQsICAvLyBpZiB0aGlzIGlzIHByb3ZpZGVkLCBza2lwIGFib3ZlIHR3b1xyXG4gKiAgICAgY2hlY2tGb3JJbmFjdGl2ZVRyYWNrczogdHJ1ZSxcclxuICogICAgIHRpbWVTbGljZTogMTAwMCwgLy8gY29uY2F0ZW5hdGUgaW50ZXJ2YWxzIGJhc2VkIGJsb2JzXHJcbiAqICAgICBvbmRhdGFhdmFpbGFibGU6IGZ1bmN0aW9uKCkge30gLy8gZ2V0IGludGVydmFscyBiYXNlZCBibG9ic1xyXG4gKiB9XHJcbiAqIHZhciByZWNvcmRlciA9IG5ldyBNZWRpYVN0cmVhbVJlY29yZGVyKG1lZGlhU3RyZWFtLCBjb25maWcpO1xyXG4gKiByZWNvcmRlci5yZWNvcmQoKTtcclxuICogcmVjb3JkZXIuc3RvcChmdW5jdGlvbihibG9iKSB7XHJcbiAqICAgICB2aWRlby5zcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gKlxyXG4gKiAgICAgLy8gb3JcclxuICogICAgIHZhciBibG9iID0gcmVjb3JkZXIuYmxvYjtcclxuICogfSk7XHJcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWF6LWtoYW4vUmVjb3JkUlRDfFJlY29yZFJUQyBTb3VyY2UgQ29kZX1cclxuICogQHBhcmFtIHtNZWRpYVN0cmVhbX0gbWVkaWFTdHJlYW0gLSBNZWRpYVN0cmVhbSBvYmplY3QgZmV0Y2hlZCB1c2luZyBnZXRVc2VyTWVkaWEgQVBJIG9yIGdlbmVyYXRlZCB1c2luZyBjYXB0dXJlU3RyZWFtVW50aWxFbmRlZCBvciBXZWJBdWRpbyBBUEkuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgLSB7ZGlzYWJsZUxvZ3M6dHJ1ZSwgaW5pdENhbGxiYWNrOiBmdW5jdGlvbiwgbWltZVR5cGU6IFwidmlkZW8vd2VibVwiLCB0aW1lU2xpY2U6IDEwMDB9XHJcbiAqIEB0aHJvd3MgV2lsbCB0aHJvdyBhbiBlcnJvciBpZiBmaXJzdCBhcmd1bWVudCBcIk1lZGlhU3RyZWFtXCIgaXMgbWlzc2luZy4gQWxzbyB0aHJvd3MgZXJyb3IgaWYgXCJNZWRpYVJlY29yZGVyIEFQSVwiIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBicm93c2VyLlxyXG4gKi9cclxuXHJcbmZ1bmN0aW9uIE1lZGlhU3RyZWFtUmVjb3JkZXIobWVkaWFTdHJlYW0sIGNvbmZpZykge1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgIGlmICh0eXBlb2YgbWVkaWFTdHJlYW0gPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgdGhyb3cgJ0ZpcnN0IGFyZ3VtZW50IFwiTWVkaWFTdHJlYW1cIiBpcyByZXF1aXJlZC4nO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgTWVkaWFSZWNvcmRlciA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICB0aHJvdyAnWW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdGhlIE1lZGlhIFJlY29yZGVyIEFQSS4gUGxlYXNlIHRyeSBvdGhlciBtb2R1bGVzIGUuZy4gV2hhbW15UmVjb3JkZXIgb3IgU3RlcmVvQXVkaW9SZWNvcmRlci4nO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7XHJcbiAgICAgICAgLy8gYml0c1BlclNlY29uZDogMjU2ICogOCAqIDEwMjQsXHJcbiAgICAgICAgbWltZVR5cGU6ICd2aWRlby93ZWJtJ1xyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoY29uZmlnLnR5cGUgPT09ICdhdWRpbycpIHtcclxuICAgICAgICBpZiAoZ2V0VHJhY2tzKG1lZGlhU3RyZWFtLCAndmlkZW8nKS5sZW5ndGggJiYgZ2V0VHJhY2tzKG1lZGlhU3RyZWFtLCAnYXVkaW8nKS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdmFyIHN0cmVhbTtcclxuICAgICAgICAgICAgaWYgKCEhbmF2aWdhdG9yLm1vekdldFVzZXJNZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgc3RyZWFtID0gbmV3IE1lZGlhU3RyZWFtKCk7XHJcbiAgICAgICAgICAgICAgICBzdHJlYW0uYWRkVHJhY2soZ2V0VHJhY2tzKG1lZGlhU3RyZWFtLCAnYXVkaW8nKVswXSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyB3ZWJraXRNZWRpYVN0cmVhbVxyXG4gICAgICAgICAgICAgICAgc3RyZWFtID0gbmV3IE1lZGlhU3RyZWFtKGdldFRyYWNrcyhtZWRpYVN0cmVhbSwgJ2F1ZGlvJykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG1lZGlhU3RyZWFtID0gc3RyZWFtO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFjb25maWcubWltZVR5cGUgfHwgY29uZmlnLm1pbWVUeXBlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdhdWRpbycpID09PSAtMSkge1xyXG4gICAgICAgICAgICBjb25maWcubWltZVR5cGUgPSBpc0Nocm9tZSA/ICdhdWRpby93ZWJtJyA6ICdhdWRpby9vZ2cnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvbmZpZy5taW1lVHlwZSAmJiBjb25maWcubWltZVR5cGUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpICE9PSAnYXVkaW8vb2dnJyAmJiAhIW5hdmlnYXRvci5tb3pHZXRVc2VyTWVkaWEpIHtcclxuICAgICAgICAgICAgLy8gZm9yY2luZyBiZXR0ZXIgY29kZWNzIG9uIEZpcmVmb3ggKHZpYSAjMTY2KVxyXG4gICAgICAgICAgICBjb25maWcubWltZVR5cGUgPSAnYXVkaW8vb2dnJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGFycmF5T2ZCbG9icyA9IFtdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhcnJheSBvZiBibG9icy4gVXNlIG9ubHkgd2l0aCBcInRpbWVTbGljZVwiLiBJdHMgdXNlZnVsIHRvIHByZXZpZXcgcmVjb3JkaW5nIGFueXRpbWUsIHdpdGhvdXQgdXNpbmcgdGhlIFwic3RvcFwiIG1ldGhvZC5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBNZWRpYVN0cmVhbVJlY29yZGVyXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogdmFyIGFycmF5T2ZCbG9icyA9IHJlY29yZGVyLmdldEFycmF5T2ZCbG9icygpO1xyXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGFycmF5IG9mIHJlY29yZGVkIGJsb2JzLlxyXG4gICAgICovXHJcbiAgICB0aGlzLmdldEFycmF5T2ZCbG9icyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBhcnJheU9mQmxvYnM7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgcmVjb3JkcyBNZWRpYVN0cmVhbS5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBNZWRpYVN0cmVhbVJlY29yZGVyXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIucmVjb3JkKCk7XHJcbiAgICAgKi9cclxuICAgIHRoaXMucmVjb3JkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgLy8gc2V0IGRlZmF1bHRzXHJcbiAgICAgICAgc2VsZi5ibG9iID0gbnVsbDtcclxuICAgICAgICBzZWxmLmNsZWFyUmVjb3JkZWREYXRhKCk7XHJcbiAgICAgICAgc2VsZi50aW1lc3RhbXBzID0gW107XHJcbiAgICAgICAgYWxsU3RhdGVzID0gW107XHJcbiAgICAgICAgYXJyYXlPZkJsb2JzID0gW107XHJcblxyXG4gICAgICAgIHZhciByZWNvcmRlckhpbnRzID0gY29uZmlnO1xyXG5cclxuICAgICAgICBpZiAoIWNvbmZpZy5kaXNhYmxlTG9ncykge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnUGFzc2luZyBmb2xsb3dpbmcgY29uZmlnIG92ZXIgTWVkaWFSZWNvcmRlciBBUEkuJywgcmVjb3JkZXJIaW50cyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobWVkaWFSZWNvcmRlcikge1xyXG4gICAgICAgICAgICAvLyBtYW5kYXRvcnkgdG8gbWFrZSBzdXJlIEZpcmVmb3ggZG9lc24ndCBmYWlscyB0byByZWNvcmQgc3RyZWFtcyAzLTQgdGltZXMgd2l0aG91dCByZWxvYWRpbmcgdGhlIHBhZ2UuXHJcbiAgICAgICAgICAgIG1lZGlhUmVjb3JkZXIgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlzQ2hyb21lICYmICFpc01lZGlhUmVjb3JkZXJDb21wYXRpYmxlKCkpIHtcclxuICAgICAgICAgICAgLy8gdG8gc3VwcG9ydCB2aWRlby1vbmx5IHJlY29yZGluZyBvbiBzdGFibGVcclxuICAgICAgICAgICAgcmVjb3JkZXJIaW50cyA9ICd2aWRlby92cDgnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBNZWRpYVJlY29yZGVyLmlzVHlwZVN1cHBvcnRlZCA9PT0gJ2Z1bmN0aW9uJyAmJiByZWNvcmRlckhpbnRzLm1pbWVUeXBlKSB7XHJcbiAgICAgICAgICAgIGlmICghTWVkaWFSZWNvcmRlci5pc1R5cGVTdXBwb3J0ZWQocmVjb3JkZXJIaW50cy5taW1lVHlwZSkpIHtcclxuICAgICAgICAgICAgICAgIGlmICghY29uZmlnLmRpc2FibGVMb2dzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdNZWRpYVJlY29yZGVyIEFQSSBzZWVtcyB1bmFibGUgdG8gcmVjb3JkIG1pbWVUeXBlOicsIHJlY29yZGVySGludHMubWltZVR5cGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJlY29yZGVySGludHMubWltZVR5cGUgPSBjb25maWcudHlwZSA9PT0gJ2F1ZGlvJyA/ICdhdWRpby93ZWJtJyA6ICd2aWRlby93ZWJtJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdXNpbmcgTWVkaWFSZWNvcmRlciBBUEkgaGVyZVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIG1lZGlhUmVjb3JkZXIgPSBuZXcgTWVkaWFSZWNvcmRlcihtZWRpYVN0cmVhbSwgcmVjb3JkZXJIaW50cyk7XHJcblxyXG4gICAgICAgICAgICAvLyByZXNldFxyXG4gICAgICAgICAgICBjb25maWcubWltZVR5cGUgPSByZWNvcmRlckhpbnRzLm1pbWVUeXBlO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8gY2hyb21lLWJhc2VkIGZhbGxiYWNrXHJcbiAgICAgICAgICAgIG1lZGlhUmVjb3JkZXIgPSBuZXcgTWVkaWFSZWNvcmRlcihtZWRpYVN0cmVhbSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBvbGQgaGFjaz9cclxuICAgICAgICBpZiAocmVjb3JkZXJIaW50cy5taW1lVHlwZSAmJiAhTWVkaWFSZWNvcmRlci5pc1R5cGVTdXBwb3J0ZWQgJiYgJ2NhblJlY29yZE1pbWVUeXBlJyBpbiBtZWRpYVJlY29yZGVyICYmIG1lZGlhUmVjb3JkZXIuY2FuUmVjb3JkTWltZVR5cGUocmVjb3JkZXJIaW50cy5taW1lVHlwZSkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGlmICghY29uZmlnLmRpc2FibGVMb2dzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ01lZGlhUmVjb3JkZXIgQVBJIHNlZW1zIHVuYWJsZSB0byByZWNvcmQgbWltZVR5cGU6JywgcmVjb3JkZXJIaW50cy5taW1lVHlwZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIERpc3BhdGNoaW5nIE9uRGF0YUF2YWlsYWJsZSBIYW5kbGVyXHJcbiAgICAgICAgbWVkaWFSZWNvcmRlci5vbmRhdGFhdmFpbGFibGUgPSBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGFsbFN0YXRlcy5wdXNoKCdvbmRhdGFhdmFpbGFibGU6ICcgKyBieXRlc1RvU2l6ZShlLmRhdGEuc2l6ZSkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy50aW1lU2xpY2UgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZS5kYXRhICYmIGUuZGF0YS5zaXplICYmIGUuZGF0YS5zaXplID4gMTAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlPZkJsb2JzLnB1c2goZS5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVUaW1lU3RhbXAoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25maWcub25kYXRhYXZhaWxhYmxlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGludGVydmFscyBiYXNlZCBibG9ic1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmxvYiA9IGNvbmZpZy5nZXROYXRpdmVCbG9iID8gZS5kYXRhIDogbmV3IEJsb2IoW2UuZGF0YV0sIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGdldE1pbWVUeXBlKHJlY29yZGVySGludHMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWcub25kYXRhYXZhaWxhYmxlKGJsb2IpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFlLmRhdGEgfHwgIWUuZGF0YS5zaXplIHx8IGUuZGF0YS5zaXplIDwgMTAwIHx8IHNlbGYuYmxvYikge1xyXG4gICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgc3RvcFJlY29yZGluZyBhbHdheXMgZ2V0dGluZyBmaXJlZFxyXG4gICAgICAgICAgICAgICAgLy8gZXZlbiBpZiB0aGVyZSBpcyBpbnZhbGlkIGRhdGFcclxuICAgICAgICAgICAgICAgIGlmIChzZWxmLnJlY29yZGluZ0NhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWNvcmRpbmdDYWxsYmFjayhuZXcgQmxvYihbXSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBnZXRNaW1lVHlwZShyZWNvcmRlckhpbnRzKVxyXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLnJlY29yZGluZ0NhbGxiYWNrID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgc2VsZi5ibG9iID0gY29uZmlnLmdldE5hdGl2ZUJsb2IgPyBlLmRhdGEgOiBuZXcgQmxvYihbZS5kYXRhXSwge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogZ2V0TWltZVR5cGUocmVjb3JkZXJIaW50cylcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoc2VsZi5yZWNvcmRpbmdDYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5yZWNvcmRpbmdDYWxsYmFjayhzZWxmLmJsb2IpO1xyXG4gICAgICAgICAgICAgICAgc2VsZi5yZWNvcmRpbmdDYWxsYmFjayA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBtZWRpYVJlY29yZGVyLm9uc3RhcnQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgYWxsU3RhdGVzLnB1c2goJ3N0YXJ0ZWQnKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBtZWRpYVJlY29yZGVyLm9ucGF1c2UgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgYWxsU3RhdGVzLnB1c2goJ3BhdXNlZCcpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIG1lZGlhUmVjb3JkZXIub25yZXN1bWUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgYWxsU3RhdGVzLnB1c2goJ3Jlc3VtZWQnKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBtZWRpYVJlY29yZGVyLm9uc3RvcCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBhbGxTdGF0ZXMucHVzaCgnc3RvcHBlZCcpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIG1lZGlhUmVjb3JkZXIub25lcnJvciA9IGZ1bmN0aW9uKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmICghZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFlcnJvci5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvci5uYW1lID0gJ1Vua25vd25FcnJvcic7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGFsbFN0YXRlcy5wdXNoKCdlcnJvcjogJyArIGVycm9yKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghY29uZmlnLmRpc2FibGVMb2dzKSB7XHJcbiAgICAgICAgICAgICAgICAvLyB2aWE6IGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9tZWRpYWNhcHR1cmUtcmVjb3JkL01lZGlhUmVjb3JkZXIuaHRtbCNleGNlcHRpb24tc3VtbWFyeVxyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yLm5hbWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2ludmFsaWRzdGF0ZScpICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBNZWRpYVJlY29yZGVyIGlzIG5vdCBpbiBhIHN0YXRlIGluIHdoaWNoIHRoZSBwcm9wb3NlZCBvcGVyYXRpb24gaXMgYWxsb3dlZCB0byBiZSBleGVjdXRlZC4nLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLm5hbWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ25vdHN1cHBvcnRlZCcpICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ01JTUUgdHlwZSAoJywgcmVjb3JkZXJIaW50cy5taW1lVHlwZSwgJykgaXMgbm90IHN1cHBvcnRlZC4nLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLm5hbWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ3NlY3VyaXR5JykgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignTWVkaWFSZWNvcmRlciBzZWN1cml0eSBlcnJvcicsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBvbGRlciBjb2RlIGJlbG93XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChlcnJvci5uYW1lID09PSAnT3V0T2ZNZW1vcnknKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVGhlIFVBIGhhcyBleGhhdXNlZCB0aGUgYXZhaWxhYmxlIG1lbW9yeS4gVXNlciBhZ2VudHMgU0hPVUxEIHByb3ZpZGUgYXMgbXVjaCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFzIHBvc3NpYmxlIGluIHRoZSBtZXNzYWdlIGF0dHJpYnV0ZS4nLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLm5hbWUgPT09ICdJbGxlZ2FsU3RyZWFtTW9kaWZpY2F0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0EgbW9kaWZpY2F0aW9uIHRvIHRoZSBzdHJlYW0gaGFzIG9jY3VycmVkIHRoYXQgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBjb250aW51ZSByZWNvcmRpbmcuIEFuIGV4YW1wbGUgd291bGQgYmUgdGhlIGFkZGl0aW9uIG9mIGEgVHJhY2sgd2hpbGUgcmVjb3JkaW5nIGlzIG9jY3VycmluZy4gVXNlciBhZ2VudHMgU0hPVUxEIHByb3ZpZGUgYXMgbXVjaCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFzIHBvc3NpYmxlIGluIHRoZSBtZXNzYWdlIGF0dHJpYnV0ZS4nLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLm5hbWUgPT09ICdPdGhlclJlY29yZGluZ0Vycm9yJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VzZWQgZm9yIGFuIGZhdGFsIGVycm9yIG90aGVyIHRoYW4gdGhvc2UgbGlzdGVkIGFib3ZlLiBVc2VyIGFnZW50cyBTSE9VTEQgcHJvdmlkZSBhcyBtdWNoIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYXMgcG9zc2libGUgaW4gdGhlIG1lc3NhZ2UgYXR0cmlidXRlLicsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3IubmFtZSA9PT0gJ0dlbmVyaWNFcnJvcicpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdUaGUgVUEgY2Fubm90IHByb3ZpZGUgdGhlIGNvZGVjIG9yIHJlY29yZGluZyBvcHRpb24gdGhhdCBoYXMgYmVlbiByZXF1ZXN0ZWQuJywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdNZWRpYVJlY29yZGVyIEVycm9yJywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAoZnVuY3Rpb24obG9vcGVyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXNlbGYubWFudWFsbHlTdG9wcGVkICYmIG1lZGlhUmVjb3JkZXIgJiYgbWVkaWFSZWNvcmRlci5zdGF0ZSA9PT0gJ2luYWN0aXZlJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjb25maWcudGltZXNsaWNlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyAxMCBtaW51dGVzLCBlbm91Z2g/XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFSZWNvcmRlci5zdGFydCgxMCAqIDYwICogMTAwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQobG9vcGVyLCAxMDAwKTtcclxuICAgICAgICAgICAgfSkoKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChtZWRpYVJlY29yZGVyLnN0YXRlICE9PSAnaW5hY3RpdmUnICYmIG1lZGlhUmVjb3JkZXIuc3RhdGUgIT09ICdzdG9wcGVkJykge1xyXG4gICAgICAgICAgICAgICAgbWVkaWFSZWNvcmRlci5zdG9wKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy50aW1lU2xpY2UgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZVRpbWVTdGFtcCgpO1xyXG4gICAgICAgICAgICBtZWRpYVJlY29yZGVyLnN0YXJ0KGNvbmZpZy50aW1lU2xpY2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIGRlZmF1bHQgaXMgNjAgbWludXRlczsgZW5vdWdoP1xyXG4gICAgICAgICAgICAvLyB1c2UgY29uZmlnID0+IHt0aW1lU2xpY2U6IDEwMDB9IG90aGVyd2lzZVxyXG5cclxuICAgICAgICAgICAgbWVkaWFSZWNvcmRlci5zdGFydCgzLjZlKzYpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvbmZpZy5pbml0Q2FsbGJhY2spIHtcclxuICAgICAgICAgICAgY29uZmlnLmluaXRDYWxsYmFjaygpOyAvLyBvbGQgY29kZVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJvcGVydHkge0FycmF5fSB0aW1lc3RhbXBzIC0gQXJyYXkgb2YgdGltZSBzdGFtcHNcclxuICAgICAqIEBtZW1iZXJvZiBNZWRpYVN0cmVhbVJlY29yZGVyXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogY29uc29sZS5sb2cocmVjb3JkZXIudGltZXN0YW1wcyk7XHJcbiAgICAgKi9cclxuICAgIHRoaXMudGltZXN0YW1wcyA9IFtdO1xyXG5cclxuICAgIGZ1bmN0aW9uIHVwZGF0ZVRpbWVTdGFtcCgpIHtcclxuICAgICAgICBzZWxmLnRpbWVzdGFtcHMucHVzaChuZXcgRGF0ZSgpLmdldFRpbWUoKSk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLm9uVGltZVN0YW1wID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZy5vblRpbWVTdGFtcChzZWxmLnRpbWVzdGFtcHNbc2VsZi50aW1lc3RhbXBzLmxlbmd0aCAtIDFdLCBzZWxmLnRpbWVzdGFtcHMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRNaW1lVHlwZShzZWNvbmRPYmplY3QpIHtcclxuICAgICAgICBpZiAobWVkaWFSZWNvcmRlciAmJiBtZWRpYVJlY29yZGVyLm1pbWVUeXBlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtZWRpYVJlY29yZGVyLm1pbWVUeXBlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHNlY29uZE9iamVjdC5taW1lVHlwZSB8fCAndmlkZW8vd2VibSc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBzdG9wcyByZWNvcmRpbmcgTWVkaWFTdHJlYW0uXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLCB0aGF0IGlzIHVzZWQgdG8gcGFzcyByZWNvcmRlZCBibG9iIGJhY2sgdG8gdGhlIGNhbGxlZS5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBNZWRpYVN0cmVhbVJlY29yZGVyXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIuc3RvcChmdW5jdGlvbihibG9iKSB7XHJcbiAgICAgKiAgICAgdmlkZW8uc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgICAqIH0pO1xyXG4gICAgICovXHJcbiAgICB0aGlzLnN0b3AgPSBmdW5jdGlvbihjYWxsYmFjaykge1xyXG4gICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcclxuXHJcbiAgICAgICAgc2VsZi5tYW51YWxseVN0b3BwZWQgPSB0cnVlOyAvLyB1c2VkIGluc2lkZSB0aGUgbWVkaWFSZWNvcmRlci5vbmVycm9yXHJcblxyXG4gICAgICAgIGlmICghbWVkaWFSZWNvcmRlcikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlY29yZGluZ0NhbGxiYWNrID0gY2FsbGJhY2s7XHJcblxyXG4gICAgICAgIGlmIChtZWRpYVJlY29yZGVyLnN0YXRlID09PSAncmVjb3JkaW5nJykge1xyXG4gICAgICAgICAgICBtZWRpYVJlY29yZGVyLnN0b3AoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnLnRpbWVTbGljZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuYmxvYiA9IG5ldyBCbG9iKGFycmF5T2ZCbG9icywge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGdldE1pbWVUeXBlKGNvbmZpZylcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIHNlbGYucmVjb3JkaW5nQ2FsbGJhY2soc2VsZi5ibG9iKTtcclxuICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgcGF1c2VzIHRoZSByZWNvcmRpbmcgcHJvY2Vzcy5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBNZWRpYVN0cmVhbVJlY29yZGVyXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIucGF1c2UoKTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5wYXVzZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmICghbWVkaWFSZWNvcmRlcikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobWVkaWFSZWNvcmRlci5zdGF0ZSA9PT0gJ3JlY29yZGluZycpIHtcclxuICAgICAgICAgICAgbWVkaWFSZWNvcmRlci5wYXVzZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCByZXN1bWVzIHRoZSByZWNvcmRpbmcgcHJvY2Vzcy5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBNZWRpYVN0cmVhbVJlY29yZGVyXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIucmVzdW1lKCk7XHJcbiAgICAgKi9cclxuICAgIHRoaXMucmVzdW1lID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKCFtZWRpYVJlY29yZGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChtZWRpYVJlY29yZGVyLnN0YXRlID09PSAncGF1c2VkJykge1xyXG4gICAgICAgICAgICBtZWRpYVJlY29yZGVyLnJlc3VtZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCByZXNldHMgY3VycmVudGx5IHJlY29yZGVkIGRhdGEuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgTWVkaWFTdHJlYW1SZWNvcmRlclxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHJlY29yZGVyLmNsZWFyUmVjb3JkZWREYXRhKCk7XHJcbiAgICAgKi9cclxuICAgIHRoaXMuY2xlYXJSZWNvcmRlZERhdGEgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBpZiAobWVkaWFSZWNvcmRlciAmJiBtZWRpYVJlY29yZGVyLnN0YXRlID09PSAncmVjb3JkaW5nJykge1xyXG4gICAgICAgICAgICBzZWxmLnN0b3AoY2xlYXJSZWNvcmRlZERhdGFDQik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjbGVhclJlY29yZGVkRGF0YUNCKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGZ1bmN0aW9uIGNsZWFyUmVjb3JkZWREYXRhQ0IoKSB7XHJcbiAgICAgICAgYXJyYXlPZkJsb2JzID0gW107XHJcbiAgICAgICAgbWVkaWFSZWNvcmRlciA9IG51bGw7XHJcbiAgICAgICAgc2VsZi50aW1lc3RhbXBzID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVmZXJlbmNlIHRvIFwiTWVkaWFSZWNvcmRlclwiIG9iamVjdFxyXG4gICAgdmFyIG1lZGlhUmVjb3JkZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBY2Nlc3MgdG8gbmF0aXZlIE1lZGlhUmVjb3JkZXIgQVBJXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgTWVkaWFTdHJlYW1SZWNvcmRlclxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogdmFyIGludGVybmFsID0gcmVjb3JkZXIuZ2V0SW50ZXJuYWxSZWNvcmRlcigpO1xyXG4gICAgICogaW50ZXJuYWwub25kYXRhYXZhaWxhYmxlID0gZnVuY3Rpb24oKSB7fTsgLy8gb3ZlcnJpZGVcclxuICAgICAqIGludGVybmFsLnN0cmVhbSwgaW50ZXJuYWwub25wYXVzZSwgaW50ZXJuYWwub25zdG9wLCBldGMuXHJcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGludGVybmFsIHJlY29yZGluZyBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHRoaXMuZ2V0SW50ZXJuYWxSZWNvcmRlciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBtZWRpYVJlY29yZGVyO1xyXG4gICAgfTtcclxuXHJcbiAgICBmdW5jdGlvbiBpc01lZGlhU3RyZWFtQWN0aXZlKCkge1xyXG4gICAgICAgIGlmICgnYWN0aXZlJyBpbiBtZWRpYVN0cmVhbSkge1xyXG4gICAgICAgICAgICBpZiAoIW1lZGlhU3RyZWFtLmFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICgnZW5kZWQnIGluIG1lZGlhU3RyZWFtKSB7IC8vIG9sZCBoYWNrXHJcbiAgICAgICAgICAgIGlmIChtZWRpYVN0cmVhbS5lbmRlZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHByb3BlcnR5IHtCbG9ifSBibG9iIC0gUmVjb3JkZWQgZGF0YSBhcyBcIkJsb2JcIiBvYmplY3QuXHJcbiAgICAgKiBAbWVtYmVyb2YgTWVkaWFTdHJlYW1SZWNvcmRlclxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHJlY29yZGVyLnN0b3AoZnVuY3Rpb24oKSB7XHJcbiAgICAgKiAgICAgdmFyIGJsb2IgPSByZWNvcmRlci5ibG9iO1xyXG4gICAgICogfSk7XHJcbiAgICAgKi9cclxuICAgIHRoaXMuYmxvYiA9IG51bGw7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IE1lZGlhUmVjb3JkZXIgcmVhZG9ubHkgc3RhdGUuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgTWVkaWFTdHJlYW1SZWNvcmRlclxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHZhciBzdGF0ZSA9IHJlY29yZGVyLmdldFN0YXRlKCk7XHJcbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBSZXR1cm5zIHJlY29yZGluZyBzdGF0ZS5cclxuICAgICAqL1xyXG4gICAgdGhpcy5nZXRTdGF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmICghbWVkaWFSZWNvcmRlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gJ2luYWN0aXZlJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBtZWRpYVJlY29yZGVyLnN0YXRlIHx8ICdpbmFjdGl2ZSc7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIGxpc3Qgb2YgYWxsIHJlY29yZGluZyBzdGF0ZXNcclxuICAgIHZhciBhbGxTdGF0ZXMgPSBbXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBNZWRpYVJlY29yZGVyIGFsbCByZWNvcmRpbmcgc3RhdGVzLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIE1lZGlhU3RyZWFtUmVjb3JkZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiB2YXIgc3RhdGUgPSByZWNvcmRlci5nZXRBbGxTdGF0ZXMoKTtcclxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBhbGwgcmVjb3JkaW5nIHN0YXRlc1xyXG4gICAgICovXHJcbiAgICB0aGlzLmdldEFsbFN0YXRlcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBhbGxTdGF0ZXM7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIGlmIGFueSBUcmFjayB3aXRoaW4gdGhlIE1lZGlhU3RyZWFtIGlzIG11dGVkIG9yIG5vdCBlbmFibGVkIGF0IGFueSB0aW1lLCBcclxuICAgIC8vIHRoZSBicm93c2VyIHdpbGwgb25seSByZWNvcmQgYmxhY2sgZnJhbWVzIFxyXG4gICAgLy8gb3Igc2lsZW5jZSBzaW5jZSB0aGF0IGlzIHRoZSBjb250ZW50IHByb2R1Y2VkIGJ5IHRoZSBUcmFja1xyXG4gICAgLy8gc28gd2UgbmVlZCB0byBzdG9wUmVjb3JkaW5nIGFzIHNvb24gYXMgYW55IHNpbmdsZSB0cmFjayBlbmRzLlxyXG4gICAgaWYgKHR5cGVvZiBjb25maWcuY2hlY2tGb3JJbmFjdGl2ZVRyYWNrcyA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICBjb25maWcuY2hlY2tGb3JJbmFjdGl2ZVRyYWNrcyA9IGZhbHNlOyAvLyBkaXNhYmxlIHRvIG1pbmltaXplIENQVSB1c2FnZVxyXG4gICAgfVxyXG5cclxuICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAvLyB0aGlzIG1ldGhvZCBjaGVja3MgaWYgbWVkaWEgc3RyZWFtIGlzIHN0b3BwZWRcclxuICAgIC8vIG9yIGlmIGFueSB0cmFjayBpcyBlbmRlZC5cclxuICAgIChmdW5jdGlvbiBsb29wZXIoKSB7XHJcbiAgICAgICAgaWYgKCFtZWRpYVJlY29yZGVyIHx8IGNvbmZpZy5jaGVja0ZvckluYWN0aXZlVHJhY2tzID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaXNNZWRpYVN0cmVhbUFjdGl2ZSgpID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5kaXNhYmxlTG9ncykge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ01lZGlhU3RyZWFtIHNlZW1zIHN0b3BwZWQuJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2VsZi5zdG9wKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQobG9vcGVyLCAxMDAwKTsgLy8gY2hlY2sgZXZlcnkgc2Vjb25kXHJcbiAgICB9KSgpO1xyXG5cclxuICAgIC8vIGZvciBkZWJ1Z2dpbmdcclxuICAgIHRoaXMubmFtZSA9ICdNZWRpYVN0cmVhbVJlY29yZGVyJztcclxuICAgIHRoaXMudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5uYW1lO1xyXG4gICAgfTtcclxufVxyXG5cclxuaWYgKHR5cGVvZiBSZWNvcmRSVEMgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBSZWNvcmRSVEMuTWVkaWFTdHJlYW1SZWNvcmRlciA9IE1lZGlhU3RyZWFtUmVjb3JkZXI7XHJcbn1cblxyXG4vLyBzb3VyY2UgY29kZSBmcm9tOiBodHRwOi8vdHlwZWRhcnJheS5vcmcvd3AtY29udGVudC9wcm9qZWN0cy9XZWJBdWRpb1JlY29yZGVyL3NjcmlwdC5qc1xyXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbWF0dGRpYW1vbmQvUmVjb3JkZXJqcyNsaWNlbnNlLW1pdFxyXG4vLyBfX19fX19fX19fX19fX19fX19fX19fXHJcbi8vIFN0ZXJlb0F1ZGlvUmVjb3JkZXIuanNcclxuXHJcbi8qKlxyXG4gKiBTdGVyZW9BdWRpb1JlY29yZGVyIGlzIGEgc3RhbmRhbG9uZSBjbGFzcyB1c2VkIGJ5IHtAbGluayBSZWNvcmRSVEN9IHRvIGJyaW5nIFwic3RlcmVvXCIgYXVkaW8tcmVjb3JkaW5nIGluIGNocm9tZS5cclxuICogQHN1bW1hcnkgSmF2YVNjcmlwdCBzdGFuZGFsb25lIG9iamVjdCBmb3Igc3RlcmVvIGF1ZGlvIHJlY29yZGluZy5cclxuICogQGxpY2Vuc2Uge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWF6LWtoYW4vUmVjb3JkUlRDL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUfVxyXG4gKiBAYXV0aG9yIHtAbGluayBodHRwczovL011YXpLaGFuLmNvbXxNdWF6IEtoYW59XHJcbiAqIEB0eXBlZGVmIFN0ZXJlb0F1ZGlvUmVjb3JkZXJcclxuICogQGNsYXNzXHJcbiAqIEBleGFtcGxlXHJcbiAqIHZhciByZWNvcmRlciA9IG5ldyBTdGVyZW9BdWRpb1JlY29yZGVyKE1lZGlhU3RyZWFtLCB7XHJcbiAqICAgICBzYW1wbGVSYXRlOiA0NDEwMCxcclxuICogICAgIGJ1ZmZlclNpemU6IDQwOTZcclxuICogfSk7XHJcbiAqIHJlY29yZGVyLnJlY29yZCgpO1xyXG4gKiByZWNvcmRlci5zdG9wKGZ1bmN0aW9uKGJsb2IpIHtcclxuICogICAgIHZpZGVvLnNyYyA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAqIH0pO1xyXG4gKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbXVhei1raGFuL1JlY29yZFJUQ3xSZWNvcmRSVEMgU291cmNlIENvZGV9XHJcbiAqIEBwYXJhbSB7TWVkaWFTdHJlYW19IG1lZGlhU3RyZWFtIC0gTWVkaWFTdHJlYW0gb2JqZWN0IGZldGNoZWQgdXNpbmcgZ2V0VXNlck1lZGlhIEFQSSBvciBnZW5lcmF0ZWQgdXNpbmcgY2FwdHVyZVN0cmVhbVVudGlsRW5kZWQgb3IgV2ViQXVkaW8gQVBJLlxyXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIC0ge3NhbXBsZVJhdGU6IDQ0MTAwLCBidWZmZXJTaXplOiA0MDk2LCBudW1iZXJPZkF1ZGlvQ2hhbm5lbHM6IDEsIGV0Yy59XHJcbiAqL1xyXG5cclxuZnVuY3Rpb24gU3RlcmVvQXVkaW9SZWNvcmRlcihtZWRpYVN0cmVhbSwgY29uZmlnKSB7XHJcbiAgICBpZiAoIWdldFRyYWNrcyhtZWRpYVN0cmVhbSwgJ2F1ZGlvJykubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhyb3cgJ1lvdXIgc3RyZWFtIGhhcyBubyBhdWRpbyB0cmFja3MuJztcclxuICAgIH1cclxuXHJcbiAgICBjb25maWcgPSBjb25maWcgfHwge307XHJcblxyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgIC8vIHZhcmlhYmxlc1xyXG4gICAgdmFyIGxlZnRjaGFubmVsID0gW107XHJcbiAgICB2YXIgcmlnaHRjaGFubmVsID0gW107XHJcbiAgICB2YXIgcmVjb3JkaW5nID0gZmFsc2U7XHJcbiAgICB2YXIgcmVjb3JkaW5nTGVuZ3RoID0gMDtcclxuICAgIHZhciBqc0F1ZGlvTm9kZTtcclxuXHJcbiAgICB2YXIgbnVtYmVyT2ZBdWRpb0NoYW5uZWxzID0gMjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCBzYW1wbGUgcmF0ZXMgc3VjaCBhcyA4SyBvciAxNksuIFJlZmVyZW5jZTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjg5NzcxMzYvNTUyMTgyXHJcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gZGVzaXJlZFNhbXBSYXRlIC0gRGVzaXJlZCBCaXRzIHBlciBzYW1wbGUgKiAxMDAwXHJcbiAgICAgKiBAbWVtYmVyb2YgU3RlcmVvQXVkaW9SZWNvcmRlclxyXG4gICAgICogQGluc3RhbmNlXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogdmFyIHJlY29yZGVyID0gU3RlcmVvQXVkaW9SZWNvcmRlcihtZWRpYVN0cmVhbSwge1xyXG4gICAgICogICBkZXNpcmVkU2FtcFJhdGU6IDE2ICogMTAwMCAvLyBiaXRzLXBlci1zYW1wbGUgKiAxMDAwXHJcbiAgICAgKiB9KTtcclxuICAgICAqL1xyXG4gICAgdmFyIGRlc2lyZWRTYW1wUmF0ZSA9IGNvbmZpZy5kZXNpcmVkU2FtcFJhdGU7XHJcblxyXG4gICAgLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eVxyXG4gICAgaWYgKGNvbmZpZy5sZWZ0Q2hhbm5lbCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIG51bWJlck9mQXVkaW9DaGFubmVscyA9IDE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZy5udW1iZXJPZkF1ZGlvQ2hhbm5lbHMgPT09IDEpIHtcclxuICAgICAgICBudW1iZXJPZkF1ZGlvQ2hhbm5lbHMgPSAxO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghbnVtYmVyT2ZBdWRpb0NoYW5uZWxzIHx8IG51bWJlck9mQXVkaW9DaGFubmVscyA8IDEpIHtcclxuICAgICAgICBudW1iZXJPZkF1ZGlvQ2hhbm5lbHMgPSAyO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghY29uZmlnLmRpc2FibGVMb2dzKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1N0ZXJlb0F1ZGlvUmVjb3JkZXIgaXMgc2V0IHRvIHJlY29yZCBudW1iZXIgb2YgY2hhbm5lbHM6ICcgKyBudW1iZXJPZkF1ZGlvQ2hhbm5lbHMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmIGFueSBUcmFjayB3aXRoaW4gdGhlIE1lZGlhU3RyZWFtIGlzIG11dGVkIG9yIG5vdCBlbmFibGVkIGF0IGFueSB0aW1lLCBcclxuICAgIC8vIHRoZSBicm93c2VyIHdpbGwgb25seSByZWNvcmQgYmxhY2sgZnJhbWVzIFxyXG4gICAgLy8gb3Igc2lsZW5jZSBzaW5jZSB0aGF0IGlzIHRoZSBjb250ZW50IHByb2R1Y2VkIGJ5IHRoZSBUcmFja1xyXG4gICAgLy8gc28gd2UgbmVlZCB0byBzdG9wUmVjb3JkaW5nIGFzIHNvb24gYXMgYW55IHNpbmdsZSB0cmFjayBlbmRzLlxyXG4gICAgaWYgKHR5cGVvZiBjb25maWcuY2hlY2tGb3JJbmFjdGl2ZVRyYWNrcyA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICBjb25maWcuY2hlY2tGb3JJbmFjdGl2ZVRyYWNrcyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gaXNNZWRpYVN0cmVhbUFjdGl2ZSgpIHtcclxuICAgICAgICBpZiAoY29uZmlnLmNoZWNrRm9ySW5hY3RpdmVUcmFja3MgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIC8vIGFsd2F5cyByZXR1cm4gXCJ0cnVlXCJcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoJ2FjdGl2ZScgaW4gbWVkaWFTdHJlYW0pIHtcclxuICAgICAgICAgICAgaWYgKCFtZWRpYVN0cmVhbS5hY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoJ2VuZGVkJyBpbiBtZWRpYVN0cmVhbSkgeyAvLyBvbGQgaGFja1xyXG4gICAgICAgICAgICBpZiAobWVkaWFTdHJlYW0uZW5kZWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHJlY29yZHMgTWVkaWFTdHJlYW0uXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgU3RlcmVvQXVkaW9SZWNvcmRlclxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHJlY29yZGVyLnJlY29yZCgpO1xyXG4gICAgICovXHJcbiAgICB0aGlzLnJlY29yZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmIChpc01lZGlhU3RyZWFtQWN0aXZlKCkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHRocm93ICdQbGVhc2UgbWFrZSBzdXJlIE1lZGlhU3RyZWFtIGlzIGFjdGl2ZS4nO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVzZXRWYXJpYWJsZXMoKTtcclxuXHJcbiAgICAgICAgaXNBdWRpb1Byb2Nlc3NTdGFydGVkID0gaXNQYXVzZWQgPSBmYWxzZTtcclxuICAgICAgICByZWNvcmRpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy50aW1lU2xpY2UgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIGxvb3BlcigpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgZnVuY3Rpb24gbWVyZ2VMZWZ0UmlnaHRCdWZmZXJzKGNvbmZpZywgY2FsbGJhY2spIHtcclxuICAgICAgICBmdW5jdGlvbiBtZXJnZUF1ZGlvQnVmZmVycyhjb25maWcsIGNiKSB7XHJcbiAgICAgICAgICAgIHZhciBudW1iZXJPZkF1ZGlvQ2hhbm5lbHMgPSBjb25maWcubnVtYmVyT2ZBdWRpb0NoYW5uZWxzO1xyXG5cclxuICAgICAgICAgICAgLy8gdG9kbzogXCJzbGljZSgwKVwiIC0tLSBpcyBpdCBjYXVzZXMgbG9vcD8gU2hvdWxkIGJlIHJlbW92ZWQ/XHJcbiAgICAgICAgICAgIHZhciBsZWZ0QnVmZmVycyA9IGNvbmZpZy5sZWZ0QnVmZmVycy5zbGljZSgwKTtcclxuICAgICAgICAgICAgdmFyIHJpZ2h0QnVmZmVycyA9IGNvbmZpZy5yaWdodEJ1ZmZlcnMuc2xpY2UoMCk7XHJcbiAgICAgICAgICAgIHZhciBzYW1wbGVSYXRlID0gY29uZmlnLnNhbXBsZVJhdGU7XHJcbiAgICAgICAgICAgIHZhciBpbnRlcm5hbEludGVybGVhdmVkTGVuZ3RoID0gY29uZmlnLmludGVybmFsSW50ZXJsZWF2ZWRMZW5ndGg7XHJcbiAgICAgICAgICAgIHZhciBkZXNpcmVkU2FtcFJhdGUgPSBjb25maWcuZGVzaXJlZFNhbXBSYXRlO1xyXG5cclxuICAgICAgICAgICAgaWYgKG51bWJlck9mQXVkaW9DaGFubmVscyA9PT0gMikge1xyXG4gICAgICAgICAgICAgICAgbGVmdEJ1ZmZlcnMgPSBtZXJnZUJ1ZmZlcnMobGVmdEJ1ZmZlcnMsIGludGVybmFsSW50ZXJsZWF2ZWRMZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgcmlnaHRCdWZmZXJzID0gbWVyZ2VCdWZmZXJzKHJpZ2h0QnVmZmVycywgaW50ZXJuYWxJbnRlcmxlYXZlZExlbmd0aCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGRlc2lyZWRTYW1wUmF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZnRCdWZmZXJzID0gaW50ZXJwb2xhdGVBcnJheShsZWZ0QnVmZmVycywgZGVzaXJlZFNhbXBSYXRlLCBzYW1wbGVSYXRlKTtcclxuICAgICAgICAgICAgICAgICAgICByaWdodEJ1ZmZlcnMgPSBpbnRlcnBvbGF0ZUFycmF5KHJpZ2h0QnVmZmVycywgZGVzaXJlZFNhbXBSYXRlLCBzYW1wbGVSYXRlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKG51bWJlck9mQXVkaW9DaGFubmVscyA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgbGVmdEJ1ZmZlcnMgPSBtZXJnZUJ1ZmZlcnMobGVmdEJ1ZmZlcnMsIGludGVybmFsSW50ZXJsZWF2ZWRMZW5ndGgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChkZXNpcmVkU2FtcFJhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0QnVmZmVycyA9IGludGVycG9sYXRlQXJyYXkobGVmdEJ1ZmZlcnMsIGRlc2lyZWRTYW1wUmF0ZSwgc2FtcGxlUmF0ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIHNldCBzYW1wbGUgcmF0ZSBhcyBkZXNpcmVkIHNhbXBsZSByYXRlXHJcbiAgICAgICAgICAgIGlmIChkZXNpcmVkU2FtcFJhdGUpIHtcclxuICAgICAgICAgICAgICAgIHNhbXBsZVJhdGUgPSBkZXNpcmVkU2FtcFJhdGU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGZvciBjaGFuZ2luZyB0aGUgc2FtcGxpbmcgcmF0ZSwgcmVmZXJlbmNlOlxyXG4gICAgICAgICAgICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yODk3NzEzNi81NTIxODJcclxuICAgICAgICAgICAgZnVuY3Rpb24gaW50ZXJwb2xhdGVBcnJheShkYXRhLCBuZXdTYW1wbGVSYXRlLCBvbGRTYW1wbGVSYXRlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZml0Q291bnQgPSBNYXRoLnJvdW5kKGRhdGEubGVuZ3RoICogKG5ld1NhbXBsZVJhdGUgLyBvbGRTYW1wbGVSYXRlKSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgbmV3RGF0YSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHNwcmluZ0ZhY3RvciA9IE51bWJlcigoZGF0YS5sZW5ndGggLSAxKSAvIChmaXRDb3VudCAtIDEpKTtcclxuICAgICAgICAgICAgICAgIG5ld0RhdGFbMF0gPSBkYXRhWzBdO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBmaXRDb3VudCAtIDE7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0bXAgPSBpICogc3ByaW5nRmFjdG9yO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBiZWZvcmUgPSBOdW1iZXIoTWF0aC5mbG9vcih0bXApKS50b0ZpeGVkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFmdGVyID0gTnVtYmVyKE1hdGguY2VpbCh0bXApKS50b0ZpeGVkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGF0UG9pbnQgPSB0bXAgLSBiZWZvcmU7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3RGF0YVtpXSA9IGxpbmVhckludGVycG9sYXRlKGRhdGFbYmVmb3JlXSwgZGF0YVthZnRlcl0sIGF0UG9pbnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbmV3RGF0YVtmaXRDb3VudCAtIDFdID0gZGF0YVtkYXRhLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld0RhdGE7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGxpbmVhckludGVycG9sYXRlKGJlZm9yZSwgYWZ0ZXIsIGF0UG9pbnQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBiZWZvcmUgKyAoYWZ0ZXIgLSBiZWZvcmUpICogYXRQb2ludDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gbWVyZ2VCdWZmZXJzKGNoYW5uZWxCdWZmZXIsIHJMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBuZXcgRmxvYXQ2NEFycmF5KHJMZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IDA7XHJcbiAgICAgICAgICAgICAgICB2YXIgbG5nID0gY2hhbm5lbEJ1ZmZlci5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsbmc7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSBjaGFubmVsQnVmZmVyW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zZXQoYnVmZmVyLCBvZmZzZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBidWZmZXIubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGludGVybGVhdmUobGVmdENoYW5uZWwsIHJpZ2h0Q2hhbm5lbCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGxlZnRDaGFubmVsLmxlbmd0aCArIHJpZ2h0Q2hhbm5lbC5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBGbG9hdDY0QXJyYXkobGVuZ3RoKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgaW5wdXRJbmRleCA9IDA7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDspIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRbaW5kZXgrK10gPSBsZWZ0Q2hhbm5lbFtpbnB1dEluZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRbaW5kZXgrK10gPSByaWdodENoYW5uZWxbaW5wdXRJbmRleF07XHJcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRJbmRleCsrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24gd3JpdGVVVEZCeXRlcyh2aWV3LCBvZmZzZXQsIHN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGxuZyA9IHN0cmluZy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxuZzsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmlldy5zZXRVaW50OChvZmZzZXQgKyBpLCBzdHJpbmcuY2hhckNvZGVBdChpKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGludGVybGVhdmUgYm90aCBjaGFubmVscyB0b2dldGhlclxyXG4gICAgICAgICAgICB2YXIgaW50ZXJsZWF2ZWQ7XHJcblxyXG4gICAgICAgICAgICBpZiAobnVtYmVyT2ZBdWRpb0NoYW5uZWxzID09PSAyKSB7XHJcbiAgICAgICAgICAgICAgICBpbnRlcmxlYXZlZCA9IGludGVybGVhdmUobGVmdEJ1ZmZlcnMsIHJpZ2h0QnVmZmVycyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChudW1iZXJPZkF1ZGlvQ2hhbm5lbHMgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgIGludGVybGVhdmVkID0gbGVmdEJ1ZmZlcnM7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBpbnRlcmxlYXZlZExlbmd0aCA9IGludGVybGVhdmVkLmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSB3YXYgZmlsZVxyXG4gICAgICAgICAgICB2YXIgcmVzdWx0aW5nQnVmZmVyTGVuZ3RoID0gNDQgKyBpbnRlcmxlYXZlZExlbmd0aCAqIDI7XHJcblxyXG4gICAgICAgICAgICB2YXIgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKHJlc3VsdGluZ0J1ZmZlckxlbmd0aCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgdmlldyA9IG5ldyBEYXRhVmlldyhidWZmZXIpO1xyXG5cclxuICAgICAgICAgICAgLy8gUklGRiBjaHVuayBkZXNjcmlwdG9yL2lkZW50aWZpZXIgXHJcbiAgICAgICAgICAgIHdyaXRlVVRGQnl0ZXModmlldywgMCwgJ1JJRkYnKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFJJRkYgY2h1bmsgbGVuZ3RoXHJcbiAgICAgICAgICAgIC8vIGNoYW5nZWQgXCI0NFwiIHRvIFwiMzZcIiB2aWEgIzQwMVxyXG4gICAgICAgICAgICB2aWV3LnNldFVpbnQzMig0LCAzNiArIGludGVybGVhdmVkTGVuZ3RoICogMiwgdHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICAvLyBSSUZGIHR5cGUgXHJcbiAgICAgICAgICAgIHdyaXRlVVRGQnl0ZXModmlldywgOCwgJ1dBVkUnKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGZvcm1hdCBjaHVuayBpZGVudGlmaWVyIFxyXG4gICAgICAgICAgICAvLyBGTVQgc3ViLWNodW5rXHJcbiAgICAgICAgICAgIHdyaXRlVVRGQnl0ZXModmlldywgMTIsICdmbXQgJyk7XHJcblxyXG4gICAgICAgICAgICAvLyBmb3JtYXQgY2h1bmsgbGVuZ3RoIFxyXG4gICAgICAgICAgICB2aWV3LnNldFVpbnQzMigxNiwgMTYsIHRydWUpO1xyXG5cclxuICAgICAgICAgICAgLy8gc2FtcGxlIGZvcm1hdCAocmF3KVxyXG4gICAgICAgICAgICB2aWV3LnNldFVpbnQxNigyMCwgMSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICAvLyBzdGVyZW8gKDIgY2hhbm5lbHMpXHJcbiAgICAgICAgICAgIHZpZXcuc2V0VWludDE2KDIyLCBudW1iZXJPZkF1ZGlvQ2hhbm5lbHMsIHRydWUpO1xyXG5cclxuICAgICAgICAgICAgLy8gc2FtcGxlIHJhdGUgXHJcbiAgICAgICAgICAgIHZpZXcuc2V0VWludDMyKDI0LCBzYW1wbGVSYXRlLCB0cnVlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGJ5dGUgcmF0ZSAoc2FtcGxlIHJhdGUgKiBibG9jayBhbGlnbilcclxuICAgICAgICAgICAgdmlldy5zZXRVaW50MzIoMjgsIHNhbXBsZVJhdGUgKiAyLCB0cnVlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGJsb2NrIGFsaWduIChjaGFubmVsIGNvdW50ICogYnl0ZXMgcGVyIHNhbXBsZSkgXHJcbiAgICAgICAgICAgIHZpZXcuc2V0VWludDE2KDMyLCBudW1iZXJPZkF1ZGlvQ2hhbm5lbHMgKiAyLCB0cnVlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGJpdHMgcGVyIHNhbXBsZSBcclxuICAgICAgICAgICAgdmlldy5zZXRVaW50MTYoMzQsIDE2LCB0cnVlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGRhdGEgc3ViLWNodW5rXHJcbiAgICAgICAgICAgIC8vIGRhdGEgY2h1bmsgaWRlbnRpZmllciBcclxuICAgICAgICAgICAgd3JpdGVVVEZCeXRlcyh2aWV3LCAzNiwgJ2RhdGEnKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGRhdGEgY2h1bmsgbGVuZ3RoIFxyXG4gICAgICAgICAgICB2aWV3LnNldFVpbnQzMig0MCwgaW50ZXJsZWF2ZWRMZW5ndGggKiAyLCB0cnVlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIHdyaXRlIHRoZSBQQ00gc2FtcGxlc1xyXG4gICAgICAgICAgICB2YXIgbG5nID0gaW50ZXJsZWF2ZWRMZW5ndGg7XHJcbiAgICAgICAgICAgIHZhciBpbmRleCA9IDQ0O1xyXG4gICAgICAgICAgICB2YXIgdm9sdW1lID0gMTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsbmc7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmlldy5zZXRJbnQxNihpbmRleCwgaW50ZXJsZWF2ZWRbaV0gKiAoMHg3RkZGICogdm9sdW1lKSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBpbmRleCArPSAyO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY2IpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjYih7XHJcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyOiBidWZmZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgdmlldzogdmlld1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHBvc3RNZXNzYWdlKHtcclxuICAgICAgICAgICAgICAgIGJ1ZmZlcjogYnVmZmVyLFxyXG4gICAgICAgICAgICAgICAgdmlldzogdmlld1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjb25maWcubm9Xb3JrZXIpIHtcclxuICAgICAgICAgICAgbWVyZ2VBdWRpb0J1ZmZlcnMoY29uZmlnLCBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhkYXRhLmJ1ZmZlciwgZGF0YS52aWV3KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB2YXIgd2ViV29ya2VyID0gcHJvY2Vzc0luV2ViV29ya2VyKG1lcmdlQXVkaW9CdWZmZXJzKTtcclxuXHJcbiAgICAgICAgd2ViV29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKGV2ZW50LmRhdGEuYnVmZmVyLCBldmVudC5kYXRhLnZpZXcpO1xyXG5cclxuICAgICAgICAgICAgLy8gcmVsZWFzZSBtZW1vcnlcclxuICAgICAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh3ZWJXb3JrZXIud29ya2VyVVJMKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGtpbGwgd2Vid29ya2VyIChvciBDaHJvbWUgd2lsbCBraWxsIHlvdXIgcGFnZSBhZnRlciB+MjUgY2FsbHMpXHJcbiAgICAgICAgICAgIHdlYldvcmtlci50ZXJtaW5hdGUoKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB3ZWJXb3JrZXIucG9zdE1lc3NhZ2UoY29uZmlnKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBwcm9jZXNzSW5XZWJXb3JrZXIoX2Z1bmN0aW9uKSB7XHJcbiAgICAgICAgdmFyIHdvcmtlclVSTCA9IFVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW19mdW5jdGlvbi50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAnO3RoaXMub25tZXNzYWdlID0gIGZ1bmN0aW9uIChlZWUpIHsnICsgX2Z1bmN0aW9uLm5hbWUgKyAnKGVlZS5kYXRhKTt9J1xyXG4gICAgICAgIF0sIHtcclxuICAgICAgICAgICAgdHlwZTogJ2FwcGxpY2F0aW9uL2phdmFzY3JpcHQnXHJcbiAgICAgICAgfSkpO1xyXG5cclxuICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlcih3b3JrZXJVUkwpO1xyXG4gICAgICAgIHdvcmtlci53b3JrZXJVUkwgPSB3b3JrZXJVUkw7XHJcbiAgICAgICAgcmV0dXJuIHdvcmtlcjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHN0b3BzIHJlY29yZGluZyBNZWRpYVN0cmVhbS5cclxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24sIHRoYXQgaXMgdXNlZCB0byBwYXNzIHJlY29yZGVkIGJsb2IgYmFjayB0byB0aGUgY2FsbGVlLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIFN0ZXJlb0F1ZGlvUmVjb3JkZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5zdG9wKGZ1bmN0aW9uKGJsb2IpIHtcclxuICAgICAqICAgICB2aWRlby5zcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgICogfSk7XHJcbiAgICAgKi9cclxuICAgIHRoaXMuc3RvcCA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xyXG5cclxuICAgICAgICAvLyBzdG9wIHJlY29yZGluZ1xyXG4gICAgICAgIHJlY29yZGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBtZXJnZUxlZnRSaWdodEJ1ZmZlcnMoe1xyXG4gICAgICAgICAgICBkZXNpcmVkU2FtcFJhdGU6IGRlc2lyZWRTYW1wUmF0ZSxcclxuICAgICAgICAgICAgc2FtcGxlUmF0ZTogc2FtcGxlUmF0ZSxcclxuICAgICAgICAgICAgbnVtYmVyT2ZBdWRpb0NoYW5uZWxzOiBudW1iZXJPZkF1ZGlvQ2hhbm5lbHMsXHJcbiAgICAgICAgICAgIGludGVybmFsSW50ZXJsZWF2ZWRMZW5ndGg6IHJlY29yZGluZ0xlbmd0aCxcclxuICAgICAgICAgICAgbGVmdEJ1ZmZlcnM6IGxlZnRjaGFubmVsLFxyXG4gICAgICAgICAgICByaWdodEJ1ZmZlcnM6IG51bWJlck9mQXVkaW9DaGFubmVscyA9PT0gMSA/IFtdIDogcmlnaHRjaGFubmVsLFxyXG4gICAgICAgICAgICBub1dvcmtlcjogY29uZmlnLm5vV29ya2VyXHJcbiAgICAgICAgfSwgZnVuY3Rpb24oYnVmZmVyLCB2aWV3KSB7XHJcbiAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgKiBAcHJvcGVydHkge0Jsb2J9IGJsb2IgLSBUaGUgcmVjb3JkZWQgYmxvYiBvYmplY3QuXHJcbiAgICAgICAgICAgICAqIEBtZW1iZXJvZiBTdGVyZW9BdWRpb1JlY29yZGVyXHJcbiAgICAgICAgICAgICAqIEBleGFtcGxlXHJcbiAgICAgICAgICAgICAqIHJlY29yZGVyLnN0b3AoZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICogICAgIHZhciBibG9iID0gcmVjb3JkZXIuYmxvYjtcclxuICAgICAgICAgICAgICogfSk7XHJcbiAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBzZWxmLmJsb2IgPSBuZXcgQmxvYihbdmlld10sIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdhdWRpby93YXYnXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7QXJyYXlCdWZmZXJ9IGJ1ZmZlciAtIFRoZSByZWNvcmRlZCBidWZmZXIgb2JqZWN0LlxyXG4gICAgICAgICAgICAgKiBAbWVtYmVyb2YgU3RlcmVvQXVkaW9SZWNvcmRlclxyXG4gICAgICAgICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAgICAgICAgKiByZWNvcmRlci5zdG9wKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgICAqICAgICB2YXIgYnVmZmVyID0gcmVjb3JkZXIuYnVmZmVyO1xyXG4gICAgICAgICAgICAgKiB9KTtcclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKHZpZXcuYnVmZmVyLmJ5dGVMZW5ndGgpO1xyXG5cclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7RGF0YVZpZXd9IHZpZXcgLSBUaGUgcmVjb3JkZWQgZGF0YS12aWV3IG9iamVjdC5cclxuICAgICAgICAgICAgICogQG1lbWJlcm9mIFN0ZXJlb0F1ZGlvUmVjb3JkZXJcclxuICAgICAgICAgICAgICogQGV4YW1wbGVcclxuICAgICAgICAgICAgICogcmVjb3JkZXIuc3RvcChmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgKiAgICAgdmFyIHZpZXcgPSByZWNvcmRlci52aWV3O1xyXG4gICAgICAgICAgICAgKiB9KTtcclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIHNlbGYudmlldyA9IHZpZXc7XHJcblxyXG4gICAgICAgICAgICBzZWxmLnNhbXBsZVJhdGUgPSBkZXNpcmVkU2FtcFJhdGUgfHwgc2FtcGxlUmF0ZTtcclxuICAgICAgICAgICAgc2VsZi5idWZmZXJTaXplID0gYnVmZmVyU2l6ZTtcclxuXHJcbiAgICAgICAgICAgIC8vIHJlY29yZGVkIGF1ZGlvIGxlbmd0aFxyXG4gICAgICAgICAgICBzZWxmLmxlbmd0aCA9IHJlY29yZGluZ0xlbmd0aDtcclxuXHJcbiAgICAgICAgICAgIGlzQXVkaW9Qcm9jZXNzU3RhcnRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhzZWxmLmJsb2IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0eXBlb2YgUmVjb3JkUlRDLlN0b3JhZ2UgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgUmVjb3JkUlRDLlN0b3JhZ2UgPSB7XHJcbiAgICAgICAgICAgIEF1ZGlvQ29udGV4dENvbnN0cnVjdG9yOiBudWxsLFxyXG4gICAgICAgICAgICBBdWRpb0NvbnRleHQ6IHdpbmRvdy5BdWRpb0NvbnRleHQgfHwgd2luZG93LndlYmtpdEF1ZGlvQ29udGV4dFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFSZWNvcmRSVEMuU3RvcmFnZS5BdWRpb0NvbnRleHRDb25zdHJ1Y3RvciB8fCBSZWNvcmRSVEMuU3RvcmFnZS5BdWRpb0NvbnRleHRDb25zdHJ1Y3Rvci5zdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcclxuICAgICAgICBSZWNvcmRSVEMuU3RvcmFnZS5BdWRpb0NvbnRleHRDb25zdHJ1Y3RvciA9IG5ldyBSZWNvcmRSVEMuU3RvcmFnZS5BdWRpb0NvbnRleHQoKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgY29udGV4dCA9IFJlY29yZFJUQy5TdG9yYWdlLkF1ZGlvQ29udGV4dENvbnN0cnVjdG9yO1xyXG5cclxuICAgIC8vIGNyZWF0ZXMgYW4gYXVkaW8gbm9kZSBmcm9tIHRoZSBtaWNyb3Bob25lIGluY29taW5nIHN0cmVhbVxyXG4gICAgdmFyIGF1ZGlvSW5wdXQgPSBjb250ZXh0LmNyZWF0ZU1lZGlhU3RyZWFtU291cmNlKG1lZGlhU3RyZWFtKTtcclxuXHJcbiAgICB2YXIgbGVnYWxCdWZmZXJWYWx1ZXMgPSBbMCwgMjU2LCA1MTIsIDEwMjQsIDIwNDgsIDQwOTYsIDgxOTIsIDE2Mzg0XTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZyb20gdGhlIHNwZWM6IFRoaXMgdmFsdWUgY29udHJvbHMgaG93IGZyZXF1ZW50bHkgdGhlIGF1ZGlvcHJvY2VzcyBldmVudCBpc1xyXG4gICAgICogZGlzcGF0Y2hlZCBhbmQgaG93IG1hbnkgc2FtcGxlLWZyYW1lcyBuZWVkIHRvIGJlIHByb2Nlc3NlZCBlYWNoIGNhbGwuXHJcbiAgICAgKiBMb3dlciB2YWx1ZXMgZm9yIGJ1ZmZlciBzaXplIHdpbGwgcmVzdWx0IGluIGEgbG93ZXIgKGJldHRlcikgbGF0ZW5jeS5cclxuICAgICAqIEhpZ2hlciB2YWx1ZXMgd2lsbCBiZSBuZWNlc3NhcnkgdG8gYXZvaWQgYXVkaW8gYnJlYWt1cCBhbmQgZ2xpdGNoZXNcclxuICAgICAqIFRoZSBzaXplIG9mIHRoZSBidWZmZXIgKGluIHNhbXBsZS1mcmFtZXMpIHdoaWNoIG5lZWRzIHRvXHJcbiAgICAgKiBiZSBwcm9jZXNzZWQgZWFjaCB0aW1lIG9ucHJvY2Vzc2F1ZGlvIGlzIGNhbGxlZC5cclxuICAgICAqIExlZ2FsIHZhbHVlcyBhcmUgKDI1NiwgNTEyLCAxMDI0LCAyMDQ4LCA0MDk2LCA4MTkyLCAxNjM4NCkuXHJcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gYnVmZmVyU2l6ZSAtIEJ1ZmZlci1zaXplIGZvciBob3cgZnJlcXVlbnRseSB0aGUgYXVkaW9wcm9jZXNzIGV2ZW50IGlzIGRpc3BhdGNoZWQuXHJcbiAgICAgKiBAbWVtYmVyb2YgU3RlcmVvQXVkaW9SZWNvcmRlclxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHJlY29yZGVyID0gbmV3IFN0ZXJlb0F1ZGlvUmVjb3JkZXIobWVkaWFTdHJlYW0sIHtcclxuICAgICAqICAgICBidWZmZXJTaXplOiA0MDk2XHJcbiAgICAgKiB9KTtcclxuICAgICAqL1xyXG5cclxuICAgIC8vIFwiMFwiIG1lYW5zLCBsZXQgY2hyb21lIGRlY2lkZSB0aGUgbW9zdCBhY2N1cmF0ZSBidWZmZXItc2l6ZSBmb3IgY3VycmVudCBwbGF0Zm9ybS5cclxuICAgIHZhciBidWZmZXJTaXplID0gdHlwZW9mIGNvbmZpZy5idWZmZXJTaXplID09PSAndW5kZWZpbmVkJyA/IDQwOTYgOiBjb25maWcuYnVmZmVyU2l6ZTtcclxuXHJcbiAgICBpZiAobGVnYWxCdWZmZXJWYWx1ZXMuaW5kZXhPZihidWZmZXJTaXplKSA9PT0gLTEpIHtcclxuICAgICAgICBpZiAoIWNvbmZpZy5kaXNhYmxlTG9ncykge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnTGVnYWwgdmFsdWVzIGZvciBidWZmZXItc2l6ZSBhcmUgJyArIEpTT04uc3RyaW5naWZ5KGxlZ2FsQnVmZmVyVmFsdWVzLCBudWxsLCAnXFx0JykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29udGV4dC5jcmVhdGVKYXZhU2NyaXB0Tm9kZSkge1xyXG4gICAgICAgIGpzQXVkaW9Ob2RlID0gY29udGV4dC5jcmVhdGVKYXZhU2NyaXB0Tm9kZShidWZmZXJTaXplLCBudW1iZXJPZkF1ZGlvQ2hhbm5lbHMsIG51bWJlck9mQXVkaW9DaGFubmVscyk7XHJcbiAgICB9IGVsc2UgaWYgKGNvbnRleHQuY3JlYXRlU2NyaXB0UHJvY2Vzc29yKSB7XHJcbiAgICAgICAganNBdWRpb05vZGUgPSBjb250ZXh0LmNyZWF0ZVNjcmlwdFByb2Nlc3NvcihidWZmZXJTaXplLCBudW1iZXJPZkF1ZGlvQ2hhbm5lbHMsIG51bWJlck9mQXVkaW9DaGFubmVscyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93ICdXZWJBdWRpbyBBUEkgaGFzIG5vIHN1cHBvcnQgb24gdGhpcyBicm93c2VyLic7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY29ubmVjdCB0aGUgc3RyZWFtIHRvIHRoZSBzY3JpcHQgcHJvY2Vzc29yXHJcbiAgICBhdWRpb0lucHV0LmNvbm5lY3QoanNBdWRpb05vZGUpO1xyXG5cclxuICAgIGlmICghY29uZmlnLmJ1ZmZlclNpemUpIHtcclxuICAgICAgICBidWZmZXJTaXplID0ganNBdWRpb05vZGUuYnVmZmVyU2l6ZTsgLy8gZGV2aWNlIGJ1ZmZlci1zaXplXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc2FtcGxlIHJhdGUgKGluIHNhbXBsZS1mcmFtZXMgcGVyIHNlY29uZCkgYXQgd2hpY2ggdGhlXHJcbiAgICAgKiBBdWRpb0NvbnRleHQgaGFuZGxlcyBhdWRpby4gSXQgaXMgYXNzdW1lZCB0aGF0IGFsbCBBdWRpb05vZGVzXHJcbiAgICAgKiBpbiB0aGUgY29udGV4dCBydW4gYXQgdGhpcyByYXRlLiBJbiBtYWtpbmcgdGhpcyBhc3N1bXB0aW9uLFxyXG4gICAgICogc2FtcGxlLXJhdGUgY29udmVydGVycyBvciBcInZhcmlzcGVlZFwiIHByb2Nlc3NvcnMgYXJlIG5vdCBzdXBwb3J0ZWRcclxuICAgICAqIGluIHJlYWwtdGltZSBwcm9jZXNzaW5nLlxyXG4gICAgICogVGhlIHNhbXBsZVJhdGUgcGFyYW1ldGVyIGRlc2NyaWJlcyB0aGUgc2FtcGxlLXJhdGUgb2YgdGhlXHJcbiAgICAgKiBsaW5lYXIgUENNIGF1ZGlvIGRhdGEgaW4gdGhlIGJ1ZmZlciBpbiBzYW1wbGUtZnJhbWVzIHBlciBzZWNvbmQuXHJcbiAgICAgKiBBbiBpbXBsZW1lbnRhdGlvbiBtdXN0IHN1cHBvcnQgc2FtcGxlLXJhdGVzIGluIGF0IGxlYXN0XHJcbiAgICAgKiB0aGUgcmFuZ2UgMjIwNTAgdG8gOTYwMDAuXHJcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gc2FtcGxlUmF0ZSAtIEJ1ZmZlci1zaXplIGZvciBob3cgZnJlcXVlbnRseSB0aGUgYXVkaW9wcm9jZXNzIGV2ZW50IGlzIGRpc3BhdGNoZWQuXHJcbiAgICAgKiBAbWVtYmVyb2YgU3RlcmVvQXVkaW9SZWNvcmRlclxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHJlY29yZGVyID0gbmV3IFN0ZXJlb0F1ZGlvUmVjb3JkZXIobWVkaWFTdHJlYW0sIHtcclxuICAgICAqICAgICBzYW1wbGVSYXRlOiA0NDEwMFxyXG4gICAgICogfSk7XHJcbiAgICAgKi9cclxuICAgIHZhciBzYW1wbGVSYXRlID0gdHlwZW9mIGNvbmZpZy5zYW1wbGVSYXRlICE9PSAndW5kZWZpbmVkJyA/IGNvbmZpZy5zYW1wbGVSYXRlIDogY29udGV4dC5zYW1wbGVSYXRlIHx8IDQ0MTAwO1xyXG5cclxuICAgIGlmIChzYW1wbGVSYXRlIDwgMjIwNTAgfHwgc2FtcGxlUmF0ZSA+IDk2MDAwKSB7XHJcbiAgICAgICAgLy8gUmVmOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yNjMwMzkxOC81NTIxODJcclxuICAgICAgICBpZiAoIWNvbmZpZy5kaXNhYmxlTG9ncykge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnc2FtcGxlLXJhdGUgbXVzdCBiZSB1bmRlciByYW5nZSAyMjA1MCBhbmQgOTYwMDAuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghY29uZmlnLmRpc2FibGVMb2dzKSB7XHJcbiAgICAgICAgaWYgKGNvbmZpZy5kZXNpcmVkU2FtcFJhdGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ0Rlc2lyZWQgc2FtcGxlLXJhdGU6ICcgKyBjb25maWcuZGVzaXJlZFNhbXBSYXRlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGlzUGF1c2VkID0gZmFsc2U7XHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHBhdXNlcyB0aGUgcmVjb3JkaW5nIHByb2Nlc3MuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgU3RlcmVvQXVkaW9SZWNvcmRlclxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHJlY29yZGVyLnBhdXNlKCk7XHJcbiAgICAgKi9cclxuICAgIHRoaXMucGF1c2UgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBpc1BhdXNlZCA9IHRydWU7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgcmVzdW1lcyB0aGUgcmVjb3JkaW5nIHByb2Nlc3MuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgU3RlcmVvQXVkaW9SZWNvcmRlclxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHJlY29yZGVyLnJlc3VtZSgpO1xyXG4gICAgICovXHJcbiAgICB0aGlzLnJlc3VtZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmIChpc01lZGlhU3RyZWFtQWN0aXZlKCkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHRocm93ICdQbGVhc2UgbWFrZSBzdXJlIE1lZGlhU3RyZWFtIGlzIGFjdGl2ZS4nO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFyZWNvcmRpbmcpIHtcclxuICAgICAgICAgICAgaWYgKCFjb25maWcuZGlzYWJsZUxvZ3MpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTZWVtcyByZWNvcmRpbmcgaGFzIGJlZW4gcmVzdGFydGVkLicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucmVjb3JkKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlzUGF1c2VkID0gZmFsc2U7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgcmVzZXRzIGN1cnJlbnRseSByZWNvcmRlZCBkYXRhLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIFN0ZXJlb0F1ZGlvUmVjb3JkZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5jbGVhclJlY29yZGVkRGF0YSgpO1xyXG4gICAgICovXHJcbiAgICB0aGlzLmNsZWFyUmVjb3JkZWREYXRhID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgY29uZmlnLmNoZWNrRm9ySW5hY3RpdmVUcmFja3MgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHJlY29yZGluZykge1xyXG4gICAgICAgICAgICB0aGlzLnN0b3AoY2xlYXJSZWNvcmRlZERhdGFDQik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjbGVhclJlY29yZGVkRGF0YUNCKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGZ1bmN0aW9uIHJlc2V0VmFyaWFibGVzKCkge1xyXG4gICAgICAgIGxlZnRjaGFubmVsID0gW107XHJcbiAgICAgICAgcmlnaHRjaGFubmVsID0gW107XHJcbiAgICAgICAgcmVjb3JkaW5nTGVuZ3RoID0gMDtcclxuICAgICAgICBpc0F1ZGlvUHJvY2Vzc1N0YXJ0ZWQgPSBmYWxzZTtcclxuICAgICAgICByZWNvcmRpbmcgPSBmYWxzZTtcclxuICAgICAgICBpc1BhdXNlZCA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnRleHQgPSBudWxsO1xyXG5cclxuICAgICAgICBzZWxmLmxlZnRjaGFubmVsID0gbGVmdGNoYW5uZWw7XHJcbiAgICAgICAgc2VsZi5yaWdodGNoYW5uZWwgPSByaWdodGNoYW5uZWw7XHJcbiAgICAgICAgc2VsZi5udW1iZXJPZkF1ZGlvQ2hhbm5lbHMgPSBudW1iZXJPZkF1ZGlvQ2hhbm5lbHM7XHJcbiAgICAgICAgc2VsZi5kZXNpcmVkU2FtcFJhdGUgPSBkZXNpcmVkU2FtcFJhdGU7XHJcbiAgICAgICAgc2VsZi5zYW1wbGVSYXRlID0gc2FtcGxlUmF0ZTtcclxuICAgICAgICBzZWxmLnJlY29yZGluZ0xlbmd0aCA9IHJlY29yZGluZ0xlbmd0aDtcclxuXHJcbiAgICAgICAgaW50ZXJ2YWxzQmFzZWRCdWZmZXJzID0ge1xyXG4gICAgICAgICAgICBsZWZ0OiBbXSxcclxuICAgICAgICAgICAgcmlnaHQ6IFtdLFxyXG4gICAgICAgICAgICByZWNvcmRpbmdMZW5ndGg6IDBcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGNsZWFyUmVjb3JkZWREYXRhQ0IoKSB7XHJcbiAgICAgICAgaWYgKGpzQXVkaW9Ob2RlKSB7XHJcbiAgICAgICAgICAgIGpzQXVkaW9Ob2RlLm9uYXVkaW9wcm9jZXNzID0gbnVsbDtcclxuICAgICAgICAgICAganNBdWRpb05vZGUuZGlzY29ubmVjdCgpO1xyXG4gICAgICAgICAgICBqc0F1ZGlvTm9kZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYXVkaW9JbnB1dCkge1xyXG4gICAgICAgICAgICBhdWRpb0lucHV0LmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICAgICAgYXVkaW9JbnB1dCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXNldFZhcmlhYmxlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGZvciBkZWJ1Z2dpbmdcclxuICAgIHRoaXMubmFtZSA9ICdTdGVyZW9BdWRpb1JlY29yZGVyJztcclxuICAgIHRoaXMudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5uYW1lO1xyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgaXNBdWRpb1Byb2Nlc3NTdGFydGVkID0gZmFsc2U7XHJcblxyXG4gICAgZnVuY3Rpb24gb25BdWRpb1Byb2Nlc3NEYXRhQXZhaWxhYmxlKGUpIHtcclxuICAgICAgICBpZiAoaXNQYXVzZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlzTWVkaWFTdHJlYW1BY3RpdmUoKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgaWYgKCFjb25maWcuZGlzYWJsZUxvZ3MpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdNZWRpYVN0cmVhbSBzZWVtcyBzdG9wcGVkLicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGpzQXVkaW9Ob2RlLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICAgICAgcmVjb3JkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXJlY29yZGluZykge1xyXG4gICAgICAgICAgICBpZiAoYXVkaW9JbnB1dCkge1xyXG4gICAgICAgICAgICAgICAgYXVkaW9JbnB1dC5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgICAgICAgICBhdWRpb0lucHV0ID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gXCJvbmF1ZGlvcHJvY2Vzc1wiIGV2ZW50J3MgZmlyc3QgaW52b2NhdGlvbi5cclxuICAgICAgICAgKiBAbWV0aG9kIHtmdW5jdGlvbn0gb25BdWRpb1Byb2Nlc3NTdGFydGVkXHJcbiAgICAgICAgICogQG1lbWJlcm9mIFN0ZXJlb0F1ZGlvUmVjb3JkZXJcclxuICAgICAgICAgKiBAZXhhbXBsZVxyXG4gICAgICAgICAqIHJlY29yZGVyLm9uQXVkaW9Qcm9jZXNzU3RhcnRlZDogZnVuY3Rpb24oKSB7IH07XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgaWYgKCFpc0F1ZGlvUHJvY2Vzc1N0YXJ0ZWQpIHtcclxuICAgICAgICAgICAgaXNBdWRpb1Byb2Nlc3NTdGFydGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKGNvbmZpZy5vbkF1ZGlvUHJvY2Vzc1N0YXJ0ZWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZy5vbkF1ZGlvUHJvY2Vzc1N0YXJ0ZWQoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNvbmZpZy5pbml0Q2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZy5pbml0Q2FsbGJhY2soKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGxlZnQgPSBlLmlucHV0QnVmZmVyLmdldENoYW5uZWxEYXRhKDApO1xyXG5cclxuICAgICAgICAvLyB3ZSBjbG9uZSB0aGUgc2FtcGxlc1xyXG4gICAgICAgIHZhciBjaExlZnQgPSBuZXcgRmxvYXQzMkFycmF5KGxlZnQpO1xyXG4gICAgICAgIGxlZnRjaGFubmVsLnB1c2goY2hMZWZ0KTtcclxuXHJcbiAgICAgICAgaWYgKG51bWJlck9mQXVkaW9DaGFubmVscyA9PT0gMikge1xyXG4gICAgICAgICAgICB2YXIgcmlnaHQgPSBlLmlucHV0QnVmZmVyLmdldENoYW5uZWxEYXRhKDEpO1xyXG4gICAgICAgICAgICB2YXIgY2hSaWdodCA9IG5ldyBGbG9hdDMyQXJyYXkocmlnaHQpO1xyXG4gICAgICAgICAgICByaWdodGNoYW5uZWwucHVzaChjaFJpZ2h0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlY29yZGluZ0xlbmd0aCArPSBidWZmZXJTaXplO1xyXG5cclxuICAgICAgICAvLyBleHBvcnQgcmF3IFBDTVxyXG4gICAgICAgIHNlbGYucmVjb3JkaW5nTGVuZ3RoID0gcmVjb3JkaW5nTGVuZ3RoO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy50aW1lU2xpY2UgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIGludGVydmFsc0Jhc2VkQnVmZmVycy5yZWNvcmRpbmdMZW5ndGggKz0gYnVmZmVyU2l6ZTtcclxuICAgICAgICAgICAgaW50ZXJ2YWxzQmFzZWRCdWZmZXJzLmxlZnQucHVzaChjaExlZnQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG51bWJlck9mQXVkaW9DaGFubmVscyA9PT0gMikge1xyXG4gICAgICAgICAgICAgICAgaW50ZXJ2YWxzQmFzZWRCdWZmZXJzLnJpZ2h0LnB1c2goY2hSaWdodCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAganNBdWRpb05vZGUub25hdWRpb3Byb2Nlc3MgPSBvbkF1ZGlvUHJvY2Vzc0RhdGFBdmFpbGFibGU7XHJcblxyXG4gICAgLy8gdG8gcHJldmVudCBzZWxmIGF1ZGlvIHRvIGJlIGNvbm5lY3RlZCB3aXRoIHNwZWFrZXJzXHJcbiAgICBpZiAoY29udGV4dC5jcmVhdGVNZWRpYVN0cmVhbURlc3RpbmF0aW9uKSB7XHJcbiAgICAgICAganNBdWRpb05vZGUuY29ubmVjdChjb250ZXh0LmNyZWF0ZU1lZGlhU3RyZWFtRGVzdGluYXRpb24oKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGpzQXVkaW9Ob2RlLmNvbm5lY3QoY29udGV4dC5kZXN0aW5hdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZXhwb3J0IHJhdyBQQ01cclxuICAgIHRoaXMubGVmdGNoYW5uZWwgPSBsZWZ0Y2hhbm5lbDtcclxuICAgIHRoaXMucmlnaHRjaGFubmVsID0gcmlnaHRjaGFubmVsO1xyXG4gICAgdGhpcy5udW1iZXJPZkF1ZGlvQ2hhbm5lbHMgPSBudW1iZXJPZkF1ZGlvQ2hhbm5lbHM7XHJcbiAgICB0aGlzLmRlc2lyZWRTYW1wUmF0ZSA9IGRlc2lyZWRTYW1wUmF0ZTtcclxuICAgIHRoaXMuc2FtcGxlUmF0ZSA9IHNhbXBsZVJhdGU7XHJcbiAgICBzZWxmLnJlY29yZGluZ0xlbmd0aCA9IHJlY29yZGluZ0xlbmd0aDtcclxuXHJcbiAgICAvLyBoZWxwZXIgZm9yIGludGVydmFscyBiYXNlZCBibG9ic1xyXG4gICAgdmFyIGludGVydmFsc0Jhc2VkQnVmZmVycyA9IHtcclxuICAgICAgICBsZWZ0OiBbXSxcclxuICAgICAgICByaWdodDogW10sXHJcbiAgICAgICAgcmVjb3JkaW5nTGVuZ3RoOiAwXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIHRoaXMgbG9vcGVyIGlzIHVzZWQgdG8gc3VwcG9ydCBpbnRlcnZhbHMgYmFzZWQgYmxvYnMgKHZpYSB0aW1lU2xpY2Urb25kYXRhYXZhaWxhYmxlKVxyXG4gICAgZnVuY3Rpb24gbG9vcGVyKCkge1xyXG4gICAgICAgIGlmICghcmVjb3JkaW5nIHx8IHR5cGVvZiBjb25maWcub25kYXRhYXZhaWxhYmxlICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBjb25maWcudGltZVNsaWNlID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaW50ZXJ2YWxzQmFzZWRCdWZmZXJzLmxlZnQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIG1lcmdlTGVmdFJpZ2h0QnVmZmVycyh7XHJcbiAgICAgICAgICAgICAgICBkZXNpcmVkU2FtcFJhdGU6IGRlc2lyZWRTYW1wUmF0ZSxcclxuICAgICAgICAgICAgICAgIHNhbXBsZVJhdGU6IHNhbXBsZVJhdGUsXHJcbiAgICAgICAgICAgICAgICBudW1iZXJPZkF1ZGlvQ2hhbm5lbHM6IG51bWJlck9mQXVkaW9DaGFubmVscyxcclxuICAgICAgICAgICAgICAgIGludGVybmFsSW50ZXJsZWF2ZWRMZW5ndGg6IGludGVydmFsc0Jhc2VkQnVmZmVycy5yZWNvcmRpbmdMZW5ndGgsXHJcbiAgICAgICAgICAgICAgICBsZWZ0QnVmZmVyczogaW50ZXJ2YWxzQmFzZWRCdWZmZXJzLmxlZnQsXHJcbiAgICAgICAgICAgICAgICByaWdodEJ1ZmZlcnM6IG51bWJlck9mQXVkaW9DaGFubmVscyA9PT0gMSA/IFtdIDogaW50ZXJ2YWxzQmFzZWRCdWZmZXJzLnJpZ2h0XHJcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uKGJ1ZmZlciwgdmlldykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbdmlld10sIHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYXVkaW8vd2F2J1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBjb25maWcub25kYXRhYXZhaWxhYmxlKGJsb2IpO1xyXG5cclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQobG9vcGVyLCBjb25maWcudGltZVNsaWNlKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpbnRlcnZhbHNCYXNlZEJ1ZmZlcnMgPSB7XHJcbiAgICAgICAgICAgICAgICBsZWZ0OiBbXSxcclxuICAgICAgICAgICAgICAgIHJpZ2h0OiBbXSxcclxuICAgICAgICAgICAgICAgIHJlY29yZGluZ0xlbmd0aDogMFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQobG9vcGVyLCBjb25maWcudGltZVNsaWNlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmlmICh0eXBlb2YgUmVjb3JkUlRDICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgUmVjb3JkUlRDLlN0ZXJlb0F1ZGlvUmVjb3JkZXIgPSBTdGVyZW9BdWRpb1JlY29yZGVyO1xyXG59XHJcblxyXG4vLyBfX19fX19fX19fX19fX19fX1xyXG4vLyBDYW52YXNSZWNvcmRlci5qc1xyXG5cclxuLyoqXHJcbiAqIENhbnZhc1JlY29yZGVyIGlzIGEgc3RhbmRhbG9uZSBjbGFzcyB1c2VkIGJ5IHtAbGluayBSZWNvcmRSVEN9IHRvIGJyaW5nIEhUTUw1LUNhbnZhcyByZWNvcmRpbmcgaW50byB2aWRlbyBXZWJNLiBJdCB1c2VzIEhUTUwyQ2FudmFzIGxpYnJhcnkgYW5kIHJ1bnMgdG9wIG92ZXIge0BsaW5rIFdoYW1teX0uXHJcbiAqIEBzdW1tYXJ5IEhUTUwyQ2FudmFzIHJlY29yZGluZyBpbnRvIHZpZGVvIFdlYk0uXHJcbiAqIEBsaWNlbnNlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbXVhei1raGFuL1JlY29yZFJUQy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVH1cclxuICogQGF1dGhvciB7QGxpbmsgaHR0cHM6Ly9NdWF6S2hhbi5jb218TXVheiBLaGFufVxyXG4gKiBAdHlwZWRlZiBDYW52YXNSZWNvcmRlclxyXG4gKiBAY2xhc3NcclxuICogQGV4YW1wbGVcclxuICogdmFyIHJlY29yZGVyID0gbmV3IENhbnZhc1JlY29yZGVyKGh0bWxFbGVtZW50LCB7IGRpc2FibGVMb2dzOiB0cnVlLCB1c2VXaGFtbXlSZWNvcmRlcjogdHJ1ZSB9KTtcclxuICogcmVjb3JkZXIucmVjb3JkKCk7XHJcbiAqIHJlY29yZGVyLnN0b3AoZnVuY3Rpb24oYmxvYikge1xyXG4gKiAgICAgdmlkZW8uc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICogfSk7XHJcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWF6LWtoYW4vUmVjb3JkUlRDfFJlY29yZFJUQyBTb3VyY2UgQ29kZX1cclxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gaHRtbEVsZW1lbnQgLSBxdWVyeVNlbGVjdG9yL2dldEVsZW1lbnRCeUlkL2dldEVsZW1lbnRzQnlUYWdOYW1lWzBdL2V0Yy5cclxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyAtIHtkaXNhYmxlTG9nczp0cnVlLCBpbml0Q2FsbGJhY2s6IGZ1bmN0aW9ufVxyXG4gKi9cclxuXHJcbmZ1bmN0aW9uIENhbnZhc1JlY29yZGVyKGh0bWxFbGVtZW50LCBjb25maWcpIHtcclxuICAgIGlmICh0eXBlb2YgaHRtbDJjYW52YXMgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgdGhyb3cgJ1BsZWFzZSBsaW5rOiBodHRwczovL3d3dy53ZWJydGMtZXhwZXJpbWVudC5jb20vc2NyZWVuc2hvdC5qcyc7XHJcbiAgICB9XHJcblxyXG4gICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xyXG4gICAgaWYgKCFjb25maWcuZnJhbWVJbnRlcnZhbCkge1xyXG4gICAgICAgIGNvbmZpZy5mcmFtZUludGVydmFsID0gMTA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdmlhIERldGVjdFJUQy5qc1xyXG4gICAgdmFyIGlzQ2FudmFzU3VwcG9ydHNTdHJlYW1DYXB0dXJpbmcgPSBmYWxzZTtcclxuICAgIFsnY2FwdHVyZVN0cmVhbScsICdtb3pDYXB0dXJlU3RyZWFtJywgJ3dlYmtpdENhcHR1cmVTdHJlYW0nXS5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pIHtcclxuICAgICAgICBpZiAoaXRlbSBpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKSkge1xyXG4gICAgICAgICAgICBpc0NhbnZhc1N1cHBvcnRzU3RyZWFtQ2FwdHVyaW5nID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB2YXIgX2lzQ2hyb21lID0gKCEhd2luZG93LndlYmtpdFJUQ1BlZXJDb25uZWN0aW9uIHx8ICEhd2luZG93LndlYmtpdEdldFVzZXJNZWRpYSkgJiYgISF3aW5kb3cuY2hyb21lO1xyXG5cclxuICAgIHZhciBjaHJvbWVWZXJzaW9uID0gNTA7XHJcbiAgICB2YXIgbWF0Y2hBcnJheSA9IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0Nocm9tKGV8aXVtKVxcLyhbMC05XSspXFwuLyk7XHJcbiAgICBpZiAoX2lzQ2hyb21lICYmIG1hdGNoQXJyYXkgJiYgbWF0Y2hBcnJheVsyXSkge1xyXG4gICAgICAgIGNocm9tZVZlcnNpb24gPSBwYXJzZUludChtYXRjaEFycmF5WzJdLCAxMCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKF9pc0Nocm9tZSAmJiBjaHJvbWVWZXJzaW9uIDwgNTIpIHtcclxuICAgICAgICBpc0NhbnZhc1N1cHBvcnRzU3RyZWFtQ2FwdHVyaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZy51c2VXaGFtbXlSZWNvcmRlcikge1xyXG4gICAgICAgIGlzQ2FudmFzU3VwcG9ydHNTdHJlYW1DYXB0dXJpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZ2xvYmFsQ2FudmFzLCBtZWRpYVN0cmVhbVJlY29yZGVyO1xyXG5cclxuICAgIGlmIChpc0NhbnZhc1N1cHBvcnRzU3RyZWFtQ2FwdHVyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFjb25maWcuZGlzYWJsZUxvZ3MpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1lvdXIgYnJvd3NlciBzdXBwb3J0cyBib3RoIE1lZGlSZWNvcmRlciBBUEkgYW5kIGNhbnZhcy5jYXB0dXJlU3RyZWFtIScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGh0bWxFbGVtZW50IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQpIHtcclxuICAgICAgICAgICAgZ2xvYmFsQ2FudmFzID0gaHRtbEVsZW1lbnQ7XHJcbiAgICAgICAgfSBlbHNlIGlmIChodG1sRWxlbWVudCBpbnN0YW5jZW9mIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCkge1xyXG4gICAgICAgICAgICBnbG9iYWxDYW52YXMgPSBodG1sRWxlbWVudC5jYW52YXM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgJ1BsZWFzZSBwYXNzIGVpdGhlciBIVE1MQ2FudmFzRWxlbWVudCBvciBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuJztcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKCEhbmF2aWdhdG9yLm1vekdldFVzZXJNZWRpYSkge1xyXG4gICAgICAgIGlmICghY29uZmlnLmRpc2FibGVMb2dzKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0NhbnZhcyByZWNvcmRpbmcgaXMgTk9UIHN1cHBvcnRlZCBpbiBGaXJlZm94LicpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB2YXIgaXNSZWNvcmRpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCByZWNvcmRzIENhbnZhcy5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBDYW52YXNSZWNvcmRlclxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHJlY29yZGVyLnJlY29yZCgpO1xyXG4gICAgICovXHJcbiAgICB0aGlzLnJlY29yZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlzUmVjb3JkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKGlzQ2FudmFzU3VwcG9ydHNTdHJlYW1DYXB0dXJpbmcgJiYgIWNvbmZpZy51c2VXaGFtbXlSZWNvcmRlcikge1xyXG4gICAgICAgICAgICAvLyBDYW52YXNDYXB0dXJlTWVkaWFTdHJlYW1cclxuICAgICAgICAgICAgdmFyIGNhbnZhc01lZGlhU3RyZWFtO1xyXG4gICAgICAgICAgICBpZiAoJ2NhcHR1cmVTdHJlYW0nIGluIGdsb2JhbENhbnZhcykge1xyXG4gICAgICAgICAgICAgICAgY2FudmFzTWVkaWFTdHJlYW0gPSBnbG9iYWxDYW52YXMuY2FwdHVyZVN0cmVhbSgyNSk7IC8vIDI1IEZQU1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCdtb3pDYXB0dXJlU3RyZWFtJyBpbiBnbG9iYWxDYW52YXMpIHtcclxuICAgICAgICAgICAgICAgIGNhbnZhc01lZGlhU3RyZWFtID0gZ2xvYmFsQ2FudmFzLm1vekNhcHR1cmVTdHJlYW0oMjUpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCd3ZWJraXRDYXB0dXJlU3RyZWFtJyBpbiBnbG9iYWxDYW52YXMpIHtcclxuICAgICAgICAgICAgICAgIGNhbnZhc01lZGlhU3RyZWFtID0gZ2xvYmFsQ2FudmFzLndlYmtpdENhcHR1cmVTdHJlYW0oMjUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG1kU3RyZWFtID0gbmV3IE1lZGlhU3RyZWFtKCk7XHJcbiAgICAgICAgICAgICAgICBtZFN0cmVhbS5hZGRUcmFjayhnZXRUcmFja3MoY2FudmFzTWVkaWFTdHJlYW0sICd2aWRlbycpWzBdKTtcclxuICAgICAgICAgICAgICAgIGNhbnZhc01lZGlhU3RyZWFtID0gbWRTdHJlYW07XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XHJcblxyXG4gICAgICAgICAgICBpZiAoIWNhbnZhc01lZGlhU3RyZWFtKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyAnY2FwdHVyZVN0cmVhbSBBUEkgYXJlIE5PVCBhdmFpbGFibGUuJztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gTm90ZTogSmFuIDE4LCAyMDE2IHN0YXR1cyBpcyB0aGF0LCBcclxuICAgICAgICAgICAgLy8gRmlyZWZveCBNZWRpYVJlY29yZGVyIEFQSSBjYW4ndCByZWNvcmQgQ2FudmFzQ2FwdHVyZU1lZGlhU3RyZWFtIG9iamVjdC5cclxuICAgICAgICAgICAgbWVkaWFTdHJlYW1SZWNvcmRlciA9IG5ldyBNZWRpYVN0cmVhbVJlY29yZGVyKGNhbnZhc01lZGlhU3RyZWFtLCB7XHJcbiAgICAgICAgICAgICAgICBtaW1lVHlwZTogY29uZmlnLm1pbWVUeXBlIHx8ICd2aWRlby93ZWJtJ1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbWVkaWFTdHJlYW1SZWNvcmRlci5yZWNvcmQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB3aGFtbXkuZnJhbWVzID0gW107XHJcbiAgICAgICAgICAgIGxhc3RUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgIGRyYXdDYW52YXNGcmFtZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvbmZpZy5pbml0Q2FsbGJhY2spIHtcclxuICAgICAgICAgICAgY29uZmlnLmluaXRDYWxsYmFjaygpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5nZXRXZWJQSW1hZ2VzID0gZnVuY3Rpb24oY2FsbGJhY2spIHtcclxuICAgICAgICBpZiAoaHRtbEVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gJ2NhbnZhcycpIHtcclxuICAgICAgICAgICAgY2FsbGJhY2soKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGZyYW1lc0xlbmd0aCA9IHdoYW1teS5mcmFtZXMubGVuZ3RoO1xyXG4gICAgICAgIHdoYW1teS5mcmFtZXMuZm9yRWFjaChmdW5jdGlvbihmcmFtZSwgaWR4KSB7XHJcbiAgICAgICAgICAgIHZhciBmcmFtZXNSZW1haW5pbmcgPSBmcmFtZXNMZW5ndGggLSBpZHg7XHJcbiAgICAgICAgICAgIGlmICghY29uZmlnLmRpc2FibGVMb2dzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhmcmFtZXNSZW1haW5pbmcgKyAnLycgKyBmcmFtZXNMZW5ndGggKyAnIGZyYW1lcyByZW1haW5pbmcnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNvbmZpZy5vbkVuY29kaW5nQ2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZy5vbkVuY29kaW5nQ2FsbGJhY2soZnJhbWVzUmVtYWluaW5nLCBmcmFtZXNMZW5ndGgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgd2VicCA9IGZyYW1lLmltYWdlLnRvRGF0YVVSTCgnaW1hZ2Uvd2VicCcsIDEpO1xyXG4gICAgICAgICAgICB3aGFtbXkuZnJhbWVzW2lkeF0uaW1hZ2UgPSB3ZWJwO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoIWNvbmZpZy5kaXNhYmxlTG9ncykge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnR2VuZXJhdGluZyBXZWJNJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjYWxsYmFjaygpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHN0b3BzIHJlY29yZGluZyBDYW52YXMuXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLCB0aGF0IGlzIHVzZWQgdG8gcGFzcyByZWNvcmRlZCBibG9iIGJhY2sgdG8gdGhlIGNhbGxlZS5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBDYW52YXNSZWNvcmRlclxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHJlY29yZGVyLnN0b3AoZnVuY3Rpb24oYmxvYikge1xyXG4gICAgICogICAgIHZpZGVvLnNyYyA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICAgKiB9KTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5zdG9wID0gZnVuY3Rpb24oY2FsbGJhY2spIHtcclxuICAgICAgICBpc1JlY29yZGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XHJcblxyXG4gICAgICAgIGlmIChpc0NhbnZhc1N1cHBvcnRzU3RyZWFtQ2FwdHVyaW5nICYmIG1lZGlhU3RyZWFtUmVjb3JkZXIpIHtcclxuICAgICAgICAgICAgbWVkaWFTdHJlYW1SZWNvcmRlci5zdG9wKGNhbGxiYWNrKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5nZXRXZWJQSW1hZ2VzKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICogQHByb3BlcnR5IHtCbG9ifSBibG9iIC0gUmVjb3JkZWQgZnJhbWVzIGluIHZpZGVvL3dlYm0gYmxvYi5cclxuICAgICAgICAgICAgICogQG1lbWJlcm9mIENhbnZhc1JlY29yZGVyXHJcbiAgICAgICAgICAgICAqIEBleGFtcGxlXHJcbiAgICAgICAgICAgICAqIHJlY29yZGVyLnN0b3AoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAqICAgICB2YXIgYmxvYiA9IHJlY29yZGVyLmJsb2I7XHJcbiAgICAgICAgICAgICAqIH0pO1xyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgd2hhbW15LmNvbXBpbGUoZnVuY3Rpb24oYmxvYikge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjb25maWcuZGlzYWJsZUxvZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnUmVjb3JkaW5nIGZpbmlzaGVkIScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoYXQuYmxvYiA9IGJsb2I7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoYXQuYmxvYi5mb3JFYWNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhhdC5ibG9iID0gbmV3IEJsb2IoW10sIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3ZpZGVvL3dlYm0nXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sodGhhdC5ibG9iKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB3aGFtbXkuZnJhbWVzID0gW107XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgaXNQYXVzZWRSZWNvcmRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHBhdXNlcyB0aGUgcmVjb3JkaW5nIHByb2Nlc3MuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgQ2FudmFzUmVjb3JkZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5wYXVzZSgpO1xyXG4gICAgICovXHJcbiAgICB0aGlzLnBhdXNlID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaXNQYXVzZWRSZWNvcmRpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAobWVkaWFTdHJlYW1SZWNvcmRlciBpbnN0YW5jZW9mIE1lZGlhU3RyZWFtUmVjb3JkZXIpIHtcclxuICAgICAgICAgICAgbWVkaWFTdHJlYW1SZWNvcmRlci5wYXVzZSgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHJlc3VtZXMgdGhlIHJlY29yZGluZyBwcm9jZXNzLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIENhbnZhc1JlY29yZGVyXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIucmVzdW1lKCk7XHJcbiAgICAgKi9cclxuICAgIHRoaXMucmVzdW1lID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaXNQYXVzZWRSZWNvcmRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKG1lZGlhU3RyZWFtUmVjb3JkZXIgaW5zdGFuY2VvZiBNZWRpYVN0cmVhbVJlY29yZGVyKSB7XHJcbiAgICAgICAgICAgIG1lZGlhU3RyZWFtUmVjb3JkZXIucmVzdW1lKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghaXNSZWNvcmRpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5yZWNvcmQoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgcmVzZXRzIGN1cnJlbnRseSByZWNvcmRlZCBkYXRhLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIENhbnZhc1JlY29yZGVyXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIuY2xlYXJSZWNvcmRlZERhdGEoKTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5jbGVhclJlY29yZGVkRGF0YSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmIChpc1JlY29yZGluZykge1xyXG4gICAgICAgICAgICB0aGlzLnN0b3AoY2xlYXJSZWNvcmRlZERhdGFDQik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNsZWFyUmVjb3JkZWREYXRhQ0IoKTtcclxuICAgIH07XHJcblxyXG4gICAgZnVuY3Rpb24gY2xlYXJSZWNvcmRlZERhdGFDQigpIHtcclxuICAgICAgICB3aGFtbXkuZnJhbWVzID0gW107XHJcbiAgICAgICAgaXNSZWNvcmRpbmcgPSBmYWxzZTtcclxuICAgICAgICBpc1BhdXNlZFJlY29yZGluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGZvciBkZWJ1Z2dpbmdcclxuICAgIHRoaXMubmFtZSA9ICdDYW52YXNSZWNvcmRlcic7XHJcbiAgICB0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcclxuICAgIH07XHJcblxyXG4gICAgZnVuY3Rpb24gY2xvbmVDYW52YXMoKSB7XHJcbiAgICAgICAgLy9jcmVhdGUgYSBuZXcgY2FudmFzXHJcbiAgICAgICAgdmFyIG5ld0NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgIHZhciBjb250ZXh0ID0gbmV3Q2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcblxyXG4gICAgICAgIC8vc2V0IGRpbWVuc2lvbnNcclxuICAgICAgICBuZXdDYW52YXMud2lkdGggPSBodG1sRWxlbWVudC53aWR0aDtcclxuICAgICAgICBuZXdDYW52YXMuaGVpZ2h0ID0gaHRtbEVsZW1lbnQuaGVpZ2h0O1xyXG5cclxuICAgICAgICAvL2FwcGx5IHRoZSBvbGQgY2FudmFzIHRvIHRoZSBuZXcgb25lXHJcbiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoaHRtbEVsZW1lbnQsIDAsIDApO1xyXG5cclxuICAgICAgICAvL3JldHVybiB0aGUgbmV3IGNhbnZhc1xyXG4gICAgICAgIHJldHVybiBuZXdDYW52YXM7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZHJhd0NhbnZhc0ZyYW1lKCkge1xyXG4gICAgICAgIGlmIChpc1BhdXNlZFJlY29yZGluZykge1xyXG4gICAgICAgICAgICBsYXN0VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gc2V0VGltZW91dChkcmF3Q2FudmFzRnJhbWUsIDUwMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaHRtbEVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2NhbnZhcycpIHtcclxuICAgICAgICAgICAgdmFyIGR1cmF0aW9uID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgLSBsYXN0VGltZTtcclxuICAgICAgICAgICAgLy8gdmlhICMyMDYsIGJ5IEphY2sgaS5lLiBAU2V5bW91cnJcclxuICAgICAgICAgICAgbGFzdFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuXHJcbiAgICAgICAgICAgIHdoYW1teS5mcmFtZXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBpbWFnZTogY2xvbmVDYW52YXMoKSxcclxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvblxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpc1JlY29yZGluZykge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChkcmF3Q2FudmFzRnJhbWUsIGNvbmZpZy5mcmFtZUludGVydmFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBodG1sMmNhbnZhcyhodG1sRWxlbWVudCwge1xyXG4gICAgICAgICAgICBncmFiTW91c2U6IHR5cGVvZiBjb25maWcuc2hvd01vdXNlUG9pbnRlciA9PT0gJ3VuZGVmaW5lZCcgfHwgY29uZmlnLnNob3dNb3VzZVBvaW50ZXIsXHJcbiAgICAgICAgICAgIG9ucmVuZGVyZWQ6IGZ1bmN0aW9uKGNhbnZhcykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGR1cmF0aW9uID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgLSBsYXN0VGltZTtcclxuICAgICAgICAgICAgICAgIGlmICghZHVyYXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0VGltZW91dChkcmF3Q2FudmFzRnJhbWUsIGNvbmZpZy5mcmFtZUludGVydmFsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyB2aWEgIzIwNiwgYnkgSmFjayBpLmUuIEBTZXltb3VyclxyXG4gICAgICAgICAgICAgICAgbGFzdFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICB3aGFtbXkuZnJhbWVzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIGltYWdlOiBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS93ZWJwJywgMSksXHJcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaXNSZWNvcmRpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGRyYXdDYW52YXNGcmFtZSwgY29uZmlnLmZyYW1lSW50ZXJ2YWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGxhc3RUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcblxyXG4gICAgdmFyIHdoYW1teSA9IG5ldyBXaGFtbXkuVmlkZW8oMTAwKTtcclxufVxyXG5cclxuaWYgKHR5cGVvZiBSZWNvcmRSVEMgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBSZWNvcmRSVEMuQ2FudmFzUmVjb3JkZXIgPSBDYW52YXNSZWNvcmRlcjtcclxufVxuXHJcbi8vIF9fX19fX19fX19fX19fX19fXHJcbi8vIFdoYW1teVJlY29yZGVyLmpzXHJcblxyXG4vKipcclxuICogV2hhbW15UmVjb3JkZXIgaXMgYSBzdGFuZGFsb25lIGNsYXNzIHVzZWQgYnkge0BsaW5rIFJlY29yZFJUQ30gdG8gYnJpbmcgdmlkZW8gcmVjb3JkaW5nIGluIENocm9tZS4gSXQgcnVucyB0b3Agb3ZlciB7QGxpbmsgV2hhbW15fS5cclxuICogQHN1bW1hcnkgVmlkZW8gcmVjb3JkaW5nIGZlYXR1cmUgaW4gQ2hyb21lLlxyXG4gKiBAbGljZW5zZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL211YXota2hhbi9SZWNvcmRSVEMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVR9XHJcbiAqIEBhdXRob3Ige0BsaW5rIGh0dHBzOi8vTXVhektoYW4uY29tfE11YXogS2hhbn1cclxuICogQHR5cGVkZWYgV2hhbW15UmVjb3JkZXJcclxuICogQGNsYXNzXHJcbiAqIEBleGFtcGxlXHJcbiAqIHZhciByZWNvcmRlciA9IG5ldyBXaGFtbXlSZWNvcmRlcihtZWRpYVN0cmVhbSk7XHJcbiAqIHJlY29yZGVyLnJlY29yZCgpO1xyXG4gKiByZWNvcmRlci5zdG9wKGZ1bmN0aW9uKGJsb2IpIHtcclxuICogICAgIHZpZGVvLnNyYyA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAqIH0pO1xyXG4gKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbXVhei1raGFuL1JlY29yZFJUQ3xSZWNvcmRSVEMgU291cmNlIENvZGV9XHJcbiAqIEBwYXJhbSB7TWVkaWFTdHJlYW19IG1lZGlhU3RyZWFtIC0gTWVkaWFTdHJlYW0gb2JqZWN0IGZldGNoZWQgdXNpbmcgZ2V0VXNlck1lZGlhIEFQSSBvciBnZW5lcmF0ZWQgdXNpbmcgY2FwdHVyZVN0cmVhbVVudGlsRW5kZWQgb3IgV2ViQXVkaW8gQVBJLlxyXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIC0ge2Rpc2FibGVMb2dzOiB0cnVlLCBpbml0Q2FsbGJhY2s6IGZ1bmN0aW9uLCB2aWRlbzogSFRNTFZpZGVvRWxlbWVudCwgZXRjLn1cclxuICovXHJcblxyXG5mdW5jdGlvbiBXaGFtbXlSZWNvcmRlcihtZWRpYVN0cmVhbSwgY29uZmlnKSB7XHJcblxyXG4gICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xyXG5cclxuICAgIGlmICghY29uZmlnLmZyYW1lSW50ZXJ2YWwpIHtcclxuICAgICAgICBjb25maWcuZnJhbWVJbnRlcnZhbCA9IDEwO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghY29uZmlnLmRpc2FibGVMb2dzKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1VzaW5nIGZyYW1lcy1pbnRlcnZhbDonLCBjb25maWcuZnJhbWVJbnRlcnZhbCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCByZWNvcmRzIHZpZGVvLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIFdoYW1teVJlY29yZGVyXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIucmVjb3JkKCk7XHJcbiAgICAgKi9cclxuICAgIHRoaXMucmVjb3JkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKCFjb25maWcud2lkdGgpIHtcclxuICAgICAgICAgICAgY29uZmlnLndpZHRoID0gMzIwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFjb25maWcuaGVpZ2h0KSB7XHJcbiAgICAgICAgICAgIGNvbmZpZy5oZWlnaHQgPSAyNDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWNvbmZpZy52aWRlbykge1xyXG4gICAgICAgICAgICBjb25maWcudmlkZW8gPSB7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDogY29uZmlnLndpZHRoLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBjb25maWcuaGVpZ2h0XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWNvbmZpZy5jYW52YXMpIHtcclxuICAgICAgICAgICAgY29uZmlnLmNhbnZhcyA9IHtcclxuICAgICAgICAgICAgICAgIHdpZHRoOiBjb25maWcud2lkdGgsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGNvbmZpZy5oZWlnaHRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IGNvbmZpZy5jYW52YXMud2lkdGggfHwgMzIwO1xyXG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBjb25maWcuY2FudmFzLmhlaWdodCB8fCAyNDA7XHJcblxyXG4gICAgICAgIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuXHJcbiAgICAgICAgLy8gc2V0dGluZyBkZWZhdWx0c1xyXG4gICAgICAgIGlmIChjb25maWcudmlkZW8gJiYgY29uZmlnLnZpZGVvIGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudCkge1xyXG4gICAgICAgICAgICB2aWRlbyA9IGNvbmZpZy52aWRlby5jbG9uZU5vZGUoKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjb25maWcuaW5pdENhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25maWcuaW5pdENhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2aWRlbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7XHJcblxyXG4gICAgICAgICAgICBzZXRTcmNPYmplY3QobWVkaWFTdHJlYW0sIHZpZGVvKTtcclxuXHJcbiAgICAgICAgICAgIHZpZGVvLm9ubG9hZGVkbWV0YWRhdGEgPSBmdW5jdGlvbigpIHsgLy8gXCJvbmxvYWRlZG1ldGFkYXRhXCIgbWF5IE5PVCB3b3JrIGluIEZGP1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5pbml0Q2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25maWcuaW5pdENhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB2aWRlby53aWR0aCA9IGNvbmZpZy52aWRlby53aWR0aDtcclxuICAgICAgICAgICAgdmlkZW8uaGVpZ2h0ID0gY29uZmlnLnZpZGVvLmhlaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZpZGVvLm11dGVkID0gdHJ1ZTtcclxuICAgICAgICB2aWRlby5wbGF5KCk7XHJcblxyXG4gICAgICAgIGxhc3RUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgd2hhbW15ID0gbmV3IFdoYW1teS5WaWRlbygpO1xyXG5cclxuICAgICAgICBpZiAoIWNvbmZpZy5kaXNhYmxlTG9ncykge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnY2FudmFzIHJlc29sdXRpb25zJywgY2FudmFzLndpZHRoLCAnKicsIGNhbnZhcy5oZWlnaHQpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygndmlkZW8gd2lkdGgvaGVpZ2h0JywgdmlkZW8ud2lkdGggfHwgY2FudmFzLndpZHRoLCAnKicsIHZpZGVvLmhlaWdodCB8fCBjYW52YXMuaGVpZ2h0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRyYXdGcmFtZXMoY29uZmlnLmZyYW1lSW50ZXJ2YWwpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIERyYXcgYW5kIHB1c2ggZnJhbWVzIHRvIFdoYW1teVxyXG4gICAgICogQHBhcmFtIHtpbnRlZ2VyfSBmcmFtZUludGVydmFsIC0gc2V0IG1pbmltdW0gaW50ZXJ2YWwgKGluIG1pbGxpc2Vjb25kcykgYmV0d2VlbiBlYWNoIHRpbWUgd2UgcHVzaCBhIGZyYW1lIHRvIFdoYW1teVxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBkcmF3RnJhbWVzKGZyYW1lSW50ZXJ2YWwpIHtcclxuICAgICAgICBmcmFtZUludGVydmFsID0gdHlwZW9mIGZyYW1lSW50ZXJ2YWwgIT09ICd1bmRlZmluZWQnID8gZnJhbWVJbnRlcnZhbCA6IDEwO1xyXG5cclxuICAgICAgICB2YXIgZHVyYXRpb24gPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIGxhc3RUaW1lO1xyXG4gICAgICAgIGlmICghZHVyYXRpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZHJhd0ZyYW1lcywgZnJhbWVJbnRlcnZhbCwgZnJhbWVJbnRlcnZhbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaXNQYXVzZWRSZWNvcmRpbmcpIHtcclxuICAgICAgICAgICAgbGFzdFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZHJhd0ZyYW1lcywgMTAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHZpYSAjMjA2LCBieSBKYWNrIGkuZS4gQFNleW1vdXJyXHJcbiAgICAgICAgbGFzdFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuXHJcbiAgICAgICAgaWYgKHZpZGVvLnBhdXNlZCkge1xyXG4gICAgICAgICAgICAvLyB2aWE6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWF6LWtoYW4vV2ViUlRDLUV4cGVyaW1lbnQvcHVsbC8zMTZcclxuICAgICAgICAgICAgLy8gVHdlYWsgZm9yIEFuZHJvaWQgQ2hyb21lXHJcbiAgICAgICAgICAgIHZpZGVvLnBsYXkoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKHZpZGVvLCAwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xyXG4gICAgICAgIHdoYW1teS5mcmFtZXMucHVzaCh7XHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbixcclxuICAgICAgICAgICAgaW1hZ2U6IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL3dlYnAnKVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoIWlzU3RvcERyYXdpbmcpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dChkcmF3RnJhbWVzLCBmcmFtZUludGVydmFsLCBmcmFtZUludGVydmFsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gYXN5bmNMb29wKG8pIHtcclxuICAgICAgICB2YXIgaSA9IC0xLFxyXG4gICAgICAgICAgICBsZW5ndGggPSBvLmxlbmd0aDtcclxuXHJcbiAgICAgICAgKGZ1bmN0aW9uIGxvb3AoKSB7XHJcbiAgICAgICAgICAgIGkrKztcclxuICAgICAgICAgICAgaWYgKGkgPT09IGxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgby5jYWxsYmFjaygpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBcInNldFRpbWVvdXRcIiBhZGRlZCBieSBKaW0gTWNMZW9kXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICBvLmZ1bmN0aW9uVG9Mb29wKGxvb3AsIGkpO1xyXG4gICAgICAgICAgICB9LCAxKTtcclxuICAgICAgICB9KSgpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIHJlbW92ZSBibGFjayBmcmFtZXMgZnJvbSB0aGUgYmVnaW5uaW5nIHRvIHRoZSBzcGVjaWZpZWQgZnJhbWVcclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IF9mcmFtZXMgLSBhcnJheSBvZiBmcmFtZXMgdG8gYmUgY2hlY2tlZFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IF9mcmFtZXNUb0NoZWNrIC0gbnVtYmVyIG9mIGZyYW1lIHVudGlsIGNoZWNrIHdpbGwgYmUgZXhlY3V0ZWQgKC0xIC0gd2lsbCBkcm9wIGFsbCBmcmFtZXMgdW50aWwgZnJhbWUgbm90IG1hdGNoZWQgd2lsbCBiZSBmb3VuZClcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBfcGl4VG9sZXJhbmNlIC0gMCAtIHZlcnkgc3RyaWN0IChvbmx5IGJsYWNrIHBpeGVsIGNvbG9yKSA7IDEgLSBhbGxcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBfZnJhbWVUb2xlcmFuY2UgLSAwIC0gdmVyeSBzdHJpY3QgKG9ubHkgYmxhY2sgZnJhbWUgY29sb3IpIDsgMSAtIGFsbFxyXG4gICAgICogQHJldHVybnMge0FycmF5fSAtIGFycmF5IG9mIGZyYW1lc1xyXG4gICAgICovXHJcbiAgICAvLyBwdWxsIzI5MyBieSBAdm9sb2RhbGV4ZXlcclxuICAgIGZ1bmN0aW9uIGRyb3BCbGFja0ZyYW1lcyhfZnJhbWVzLCBfZnJhbWVzVG9DaGVjaywgX3BpeFRvbGVyYW5jZSwgX2ZyYW1lVG9sZXJhbmNlLCBjYWxsYmFjaykge1xyXG4gICAgICAgIHZhciBsb2NhbENhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgIGxvY2FsQ2FudmFzLndpZHRoID0gY2FudmFzLndpZHRoO1xyXG4gICAgICAgIGxvY2FsQ2FudmFzLmhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XHJcbiAgICAgICAgdmFyIGNvbnRleHQyZCA9IGxvY2FsQ2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgdmFyIHJlc3VsdEZyYW1lcyA9IFtdO1xyXG5cclxuICAgICAgICB2YXIgY2hlY2tVbnRpbE5vdEJsYWNrID0gX2ZyYW1lc1RvQ2hlY2sgPT09IC0xO1xyXG4gICAgICAgIHZhciBlbmRDaGVja0ZyYW1lID0gKF9mcmFtZXNUb0NoZWNrICYmIF9mcmFtZXNUb0NoZWNrID4gMCAmJiBfZnJhbWVzVG9DaGVjayA8PSBfZnJhbWVzLmxlbmd0aCkgP1xyXG4gICAgICAgICAgICBfZnJhbWVzVG9DaGVjayA6IF9mcmFtZXMubGVuZ3RoO1xyXG4gICAgICAgIHZhciBzYW1wbGVDb2xvciA9IHtcclxuICAgICAgICAgICAgcjogMCxcclxuICAgICAgICAgICAgZzogMCxcclxuICAgICAgICAgICAgYjogMFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdmFyIG1heENvbG9yRGlmZmVyZW5jZSA9IE1hdGguc3FydChcclxuICAgICAgICAgICAgTWF0aC5wb3coMjU1LCAyKSArXHJcbiAgICAgICAgICAgIE1hdGgucG93KDI1NSwgMikgK1xyXG4gICAgICAgICAgICBNYXRoLnBvdygyNTUsIDIpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB2YXIgcGl4VG9sZXJhbmNlID0gX3BpeFRvbGVyYW5jZSAmJiBfcGl4VG9sZXJhbmNlID49IDAgJiYgX3BpeFRvbGVyYW5jZSA8PSAxID8gX3BpeFRvbGVyYW5jZSA6IDA7XHJcbiAgICAgICAgdmFyIGZyYW1lVG9sZXJhbmNlID0gX2ZyYW1lVG9sZXJhbmNlICYmIF9mcmFtZVRvbGVyYW5jZSA+PSAwICYmIF9mcmFtZVRvbGVyYW5jZSA8PSAxID8gX2ZyYW1lVG9sZXJhbmNlIDogMDtcclxuICAgICAgICB2YXIgZG9Ob3RDaGVja05leHQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgYXN5bmNMb29wKHtcclxuICAgICAgICAgICAgbGVuZ3RoOiBlbmRDaGVja0ZyYW1lLFxyXG4gICAgICAgICAgICBmdW5jdGlvblRvTG9vcDogZnVuY3Rpb24obG9vcCwgZikge1xyXG4gICAgICAgICAgICAgICAgdmFyIG1hdGNoUGl4Q291bnQsIGVuZFBpeENoZWNrLCBtYXhQaXhDb3VudDtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgZmluaXNoSW1hZ2UgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWRvTm90Q2hlY2tOZXh0ICYmIG1heFBpeENvdW50IC0gbWF0Y2hQaXhDb3VudCA8PSBtYXhQaXhDb3VudCAqIGZyYW1lVG9sZXJhbmNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdyZW1vdmVkIGJsYWNrIGZyYW1lIDogJyArIGYgKyAnIDsgZnJhbWUgZHVyYXRpb24gJyArIF9mcmFtZXNbZl0uZHVyYXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdmcmFtZSBpcyBwYXNzZWQgOiAnICsgZik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGVja1VudGlsTm90QmxhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvTm90Q2hlY2tOZXh0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRGcmFtZXMucHVzaChfZnJhbWVzW2ZdKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbG9vcCgpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWRvTm90Q2hlY2tOZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2Uub25sb2FkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQyZC5kcmF3SW1hZ2UoaW1hZ2UsIDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbWFnZURhdGEgPSBjb250ZXh0MmQuZ2V0SW1hZ2VEYXRhKDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoUGl4Q291bnQgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRQaXhDaGVjayA9IGltYWdlRGF0YS5kYXRhLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4UGl4Q291bnQgPSBpbWFnZURhdGEuZGF0YS5sZW5ndGggLyA0O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgcGl4ID0gMDsgcGl4IDwgZW5kUGl4Q2hlY2s7IHBpeCArPSA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudENvbG9yID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHI6IGltYWdlRGF0YS5kYXRhW3BpeF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZzogaW1hZ2VEYXRhLmRhdGFbcGl4ICsgMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjogaW1hZ2VEYXRhLmRhdGFbcGl4ICsgMl1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3JEaWZmZXJlbmNlID0gTWF0aC5zcXJ0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgucG93KGN1cnJlbnRDb2xvci5yIC0gc2FtcGxlQ29sb3IuciwgMikgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgucG93KGN1cnJlbnRDb2xvci5nIC0gc2FtcGxlQ29sb3IuZywgMikgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgucG93KGN1cnJlbnRDb2xvci5iIC0gc2FtcGxlQ29sb3IuYiwgMilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkaWZmZXJlbmNlIGluIGNvbG9yIGl0IGlzIGRpZmZlcmVuY2UgaW4gY29sb3IgdmVjdG9ycyAocjEsZzEsYjEpIDw9PiAocjIsZzIsYjIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sb3JEaWZmZXJlbmNlIDw9IG1heENvbG9yRGlmZmVyZW5jZSAqIHBpeFRvbGVyYW5jZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoUGl4Q291bnQrKztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hJbWFnZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2Uuc3JjID0gX2ZyYW1lc1tmXS5pbWFnZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmluaXNoSW1hZ2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0RnJhbWVzID0gcmVzdWx0RnJhbWVzLmNvbmNhdChfZnJhbWVzLnNsaWNlKGVuZENoZWNrRnJhbWUpKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0RnJhbWVzLmxlbmd0aCA8PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYXQgbGVhc3Qgb25lIGxhc3QgZnJhbWUgc2hvdWxkIGJlIGF2YWlsYWJsZSBmb3IgbmV4dCBtYW5pcHVsYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAvLyBpZiB0b3RhbCBkdXJhdGlvbiBvZiBhbGwgZnJhbWVzIHdpbGwgYmUgPCAxMDAwIHRoYW4gZmZtcGVnIGRvZXNuJ3Qgd29yayB3ZWxsLi4uXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0RnJhbWVzLnB1c2goX2ZyYW1lc1tfZnJhbWVzLmxlbmd0aCAtIDFdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdEZyYW1lcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgaXNTdG9wRHJhd2luZyA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2Qgc3RvcHMgcmVjb3JkaW5nIHZpZGVvLlxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbiwgdGhhdCBpcyB1c2VkIHRvIHBhc3MgcmVjb3JkZWQgYmxvYiBiYWNrIHRvIHRoZSBjYWxsZWUuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgV2hhbW15UmVjb3JkZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5zdG9wKGZ1bmN0aW9uKGJsb2IpIHtcclxuICAgICAqICAgICB2aWRlby5zcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgICogfSk7XHJcbiAgICAgKi9cclxuICAgIHRoaXMuc3RvcCA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xyXG5cclxuICAgICAgICBpc1N0b3BEcmF3aW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICAvLyBhbmFseXNlIG9mIGFsbCBmcmFtZXMgdGFrZXMgc29tZSB0aW1lIVxyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIC8vIGUuZy4gZHJvcEJsYWNrRnJhbWVzKGZyYW1lcywgMTAsIDEsIDEpIC0gd2lsbCBjdXQgYWxsIDEwIGZyYW1lc1xyXG4gICAgICAgICAgICAvLyBlLmcuIGRyb3BCbGFja0ZyYW1lcyhmcmFtZXMsIDEwLCAwLjUsIDAuNSkgLSB3aWxsIGFuYWx5c2UgMTAgZnJhbWVzXHJcbiAgICAgICAgICAgIC8vIGUuZy4gZHJvcEJsYWNrRnJhbWVzKGZyYW1lcywgMTApID09PSBkcm9wQmxhY2tGcmFtZXMoZnJhbWVzLCAxMCwgMCwgMCkgLSB3aWxsIGFuYWx5c2UgMTAgZnJhbWVzIHdpdGggc3RyaWN0IGJsYWNrIGNvbG9yXHJcbiAgICAgICAgICAgIGRyb3BCbGFja0ZyYW1lcyh3aGFtbXkuZnJhbWVzLCAtMSwgbnVsbCwgbnVsbCwgZnVuY3Rpb24oZnJhbWVzKSB7XHJcbiAgICAgICAgICAgICAgICB3aGFtbXkuZnJhbWVzID0gZnJhbWVzO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHRvIGRpc3BsYXkgYWR2ZXJ0aXNlbWVudCBpbWFnZXMhXHJcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmFkdmVydGlzZW1lbnQgJiYgY29uZmlnLmFkdmVydGlzZW1lbnQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hhbW15LmZyYW1lcyA9IGNvbmZpZy5hZHZlcnRpc2VtZW50LmNvbmNhdCh3aGFtbXkuZnJhbWVzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIEBwcm9wZXJ0eSB7QmxvYn0gYmxvYiAtIFJlY29yZGVkIGZyYW1lcyBpbiB2aWRlby93ZWJtIGJsb2IuXHJcbiAgICAgICAgICAgICAgICAgKiBAbWVtYmVyb2YgV2hhbW15UmVjb3JkZXJcclxuICAgICAgICAgICAgICAgICAqIEBleGFtcGxlXHJcbiAgICAgICAgICAgICAgICAgKiByZWNvcmRlci5zdG9wKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICogICAgIHZhciBibG9iID0gcmVjb3JkZXIuYmxvYjtcclxuICAgICAgICAgICAgICAgICAqIH0pO1xyXG4gICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICB3aGFtbXkuY29tcGlsZShmdW5jdGlvbihibG9iKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuYmxvYiA9IGJsb2I7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5ibG9iLmZvckVhY2gpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuYmxvYiA9IG5ldyBCbG9iKFtdLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAndmlkZW8vd2VibSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soX3RoaXMuYmxvYik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sIDEwKTtcclxuICAgIH07XHJcblxyXG4gICAgdmFyIGlzUGF1c2VkUmVjb3JkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBwYXVzZXMgdGhlIHJlY29yZGluZyBwcm9jZXNzLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIFdoYW1teVJlY29yZGVyXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIucGF1c2UoKTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5wYXVzZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlzUGF1c2VkUmVjb3JkaW5nID0gdHJ1ZTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCByZXN1bWVzIHRoZSByZWNvcmRpbmcgcHJvY2Vzcy5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBXaGFtbXlSZWNvcmRlclxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHJlY29yZGVyLnJlc3VtZSgpO1xyXG4gICAgICovXHJcbiAgICB0aGlzLnJlc3VtZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlzUGF1c2VkUmVjb3JkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmIChpc1N0b3BEcmF3aW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVjb3JkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHJlc2V0cyBjdXJyZW50bHkgcmVjb3JkZWQgZGF0YS5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBXaGFtbXlSZWNvcmRlclxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHJlY29yZGVyLmNsZWFyUmVjb3JkZWREYXRhKCk7XHJcbiAgICAgKi9cclxuICAgIHRoaXMuY2xlYXJSZWNvcmRlZERhdGEgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBpZiAoIWlzU3RvcERyYXdpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9wKGNsZWFyUmVjb3JkZWREYXRhQ0IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjbGVhclJlY29yZGVkRGF0YUNCKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGZ1bmN0aW9uIGNsZWFyUmVjb3JkZWREYXRhQ0IoKSB7XHJcbiAgICAgICAgd2hhbW15LmZyYW1lcyA9IFtdO1xyXG4gICAgICAgIGlzU3RvcERyYXdpbmcgPSB0cnVlO1xyXG4gICAgICAgIGlzUGF1c2VkUmVjb3JkaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZm9yIGRlYnVnZ2luZ1xyXG4gICAgdGhpcy5uYW1lID0gJ1doYW1teVJlY29yZGVyJztcclxuICAgIHRoaXMudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5uYW1lO1xyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG5cclxuICAgIHZhciB2aWRlbztcclxuICAgIHZhciBsYXN0VGltZTtcclxuICAgIHZhciB3aGFtbXk7XHJcbn1cclxuXHJcbmlmICh0eXBlb2YgUmVjb3JkUlRDICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgUmVjb3JkUlRDLldoYW1teVJlY29yZGVyID0gV2hhbW15UmVjb3JkZXI7XHJcbn1cblxyXG4vLyBodHRwczovL2dpdGh1Yi5jb20vYW50aW1hdHRlcjE1L3doYW1teS9ibG9iL21hc3Rlci9MSUNFTlNFXHJcbi8vIF9fX19fX19fX1xyXG4vLyBXaGFtbXkuanNcclxuXHJcbi8vIHRvZG86IEZpcmVmb3ggbm93IHN1cHBvcnRzIHdlYnAgZm9yIHdlYm0gY29udGFpbmVycyFcclxuLy8gdGhlaXIgTWVkaWFSZWNvcmRlciBpbXBsZW1lbnRhdGlvbiB3b3JrcyB3ZWxsIVxyXG4vLyBzaG91bGQgd2UgcHJvdmlkZSBhbiBvcHRpb24gdG8gcmVjb3JkIHZpYSBXaGFtbXkuanMgb3IgTWVkaWFSZWNvcmRlciBBUEkgaXMgYSBiZXR0ZXIgc29sdXRpb24/XHJcblxyXG4vKipcclxuICogV2hhbW15IGlzIGEgc3RhbmRhbG9uZSBjbGFzcyB1c2VkIGJ5IHtAbGluayBSZWNvcmRSVEN9IHRvIGJyaW5nIHZpZGVvIHJlY29yZGluZyBpbiBDaHJvbWUuIEl0IGlzIHdyaXR0ZW4gYnkge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hbnRpbWF0dGVyMTV8YW50aW1hdHRlcjE1fVxyXG4gKiBAc3VtbWFyeSBBIHJlYWwgdGltZSBqYXZhc2NyaXB0IHdlYm0gZW5jb2RlciBiYXNlZCBvbiBhIGNhbnZhcyBoYWNrLlxyXG4gKiBAbGljZW5zZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL211YXota2hhbi9SZWNvcmRSVEMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVR9XHJcbiAqIEBhdXRob3Ige0BsaW5rIGh0dHBzOi8vTXVhektoYW4uY29tfE11YXogS2hhbn1cclxuICogQHR5cGVkZWYgV2hhbW15XHJcbiAqIEBjbGFzc1xyXG4gKiBAZXhhbXBsZVxyXG4gKiB2YXIgcmVjb3JkZXIgPSBuZXcgV2hhbW15KCkuVmlkZW8oMTUpO1xyXG4gKiByZWNvcmRlci5hZGQoY29udGV4dCB8fCBjYW52YXMgfHwgZGF0YVVSTCk7XHJcbiAqIHZhciBvdXRwdXQgPSByZWNvcmRlci5jb21waWxlKCk7XHJcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWF6LWtoYW4vUmVjb3JkUlRDfFJlY29yZFJUQyBTb3VyY2UgQ29kZX1cclxuICovXHJcblxyXG52YXIgV2hhbW15ID0gKGZ1bmN0aW9uKCkge1xyXG4gICAgLy8gYSBtb3JlIGFic3RyYWN0LWlzaCBBUElcclxuXHJcbiAgICBmdW5jdGlvbiBXaGFtbXlWaWRlbyhkdXJhdGlvbikge1xyXG4gICAgICAgIHRoaXMuZnJhbWVzID0gW107XHJcbiAgICAgICAgdGhpcy5kdXJhdGlvbiA9IGR1cmF0aW9uIHx8IDE7XHJcbiAgICAgICAgdGhpcy5xdWFsaXR5ID0gMC44O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFzcyBDYW52YXMgb3IgQ29udGV4dCBvciBpbWFnZS93ZWJwKHN0cmluZykgdG8ge0BsaW5rIFdoYW1teX0gZW5jb2Rlci5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBXaGFtbXlcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlciA9IG5ldyBXaGFtbXkoKS5WaWRlbygwLjgsIDEwMCk7XHJcbiAgICAgKiByZWNvcmRlci5hZGQoY2FudmFzIHx8IGNvbnRleHQgfHwgJ2ltYWdlL3dlYnAnKTtcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBmcmFtZSAtIENhbnZhcyB8fCBDb250ZXh0IHx8IGltYWdlL3dlYnBcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkdXJhdGlvbiAtIFN0aWNrIGEgZHVyYXRpb24gKGluIG1pbGxpc2Vjb25kcylcclxuICAgICAqL1xyXG4gICAgV2hhbW15VmlkZW8ucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKGZyYW1lLCBkdXJhdGlvbikge1xyXG4gICAgICAgIGlmICgnY2FudmFzJyBpbiBmcmFtZSkgeyAvL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFxyXG4gICAgICAgICAgICBmcmFtZSA9IGZyYW1lLmNhbnZhcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgndG9EYXRhVVJMJyBpbiBmcmFtZSkge1xyXG4gICAgICAgICAgICBmcmFtZSA9IGZyYW1lLnRvRGF0YVVSTCgnaW1hZ2Uvd2VicCcsIHRoaXMucXVhbGl0eSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoISgvXmRhdGE6aW1hZ2VcXC93ZWJwO2Jhc2U2NCwvaWcpLnRlc3QoZnJhbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93ICdJbnB1dCBtdXN0IGJlIGZvcm1hdHRlZCBwcm9wZXJseSBhcyBhIGJhc2U2NCBlbmNvZGVkIERhdGFVUkkgb2YgdHlwZSBpbWFnZS93ZWJwJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mcmFtZXMucHVzaCh7XHJcbiAgICAgICAgICAgIGltYWdlOiBmcmFtZSxcclxuICAgICAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uIHx8IHRoaXMuZHVyYXRpb25cclxuICAgICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgZnVuY3Rpb24gcHJvY2Vzc0luV2ViV29ya2VyKF9mdW5jdGlvbikge1xyXG4gICAgICAgIHZhciBibG9iID0gVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbX2Z1bmN0aW9uLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICd0aGlzLm9ubWVzc2FnZSA9ICBmdW5jdGlvbiAoZWVlKSB7JyArIF9mdW5jdGlvbi5uYW1lICsgJyhlZWUuZGF0YSk7fSdcclxuICAgICAgICBdLCB7XHJcbiAgICAgICAgICAgIHR5cGU6ICdhcHBsaWNhdGlvbi9qYXZhc2NyaXB0J1xyXG4gICAgICAgIH0pKTtcclxuXHJcbiAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoYmxvYik7XHJcbiAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChibG9iKTtcclxuICAgICAgICByZXR1cm4gd29ya2VyO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHdoYW1teUluV2ViV29ya2VyKGZyYW1lcykge1xyXG4gICAgICAgIGZ1bmN0aW9uIEFycmF5VG9XZWJNKGZyYW1lcykge1xyXG4gICAgICAgICAgICB2YXIgaW5mbyA9IGNoZWNrRnJhbWVzKGZyYW1lcyk7XHJcbiAgICAgICAgICAgIGlmICghaW5mbykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgY2x1c3Rlck1heER1cmF0aW9uID0gMzAwMDA7XHJcblxyXG4gICAgICAgICAgICB2YXIgRUJNTCA9IFt7XHJcbiAgICAgICAgICAgICAgICAnaWQnOiAweDFhNDVkZmEzLCAvLyBFQk1MXHJcbiAgICAgICAgICAgICAgICAnZGF0YSc6IFt7XHJcbiAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICdpZCc6IDB4NDI4NiAvLyBFQk1MVmVyc2lvblxyXG4gICAgICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgICAgICdkYXRhJzogMSxcclxuICAgICAgICAgICAgICAgICAgICAnaWQnOiAweDQyZjcgLy8gRUJNTFJlYWRWZXJzaW9uXHJcbiAgICAgICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiA0LFxyXG4gICAgICAgICAgICAgICAgICAgICdpZCc6IDB4NDJmMiAvLyBFQk1MTWF4SURMZW5ndGhcclxuICAgICAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgICAgICAnZGF0YSc6IDgsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2lkJzogMHg0MmYzIC8vIEVCTUxNYXhTaXplTGVuZ3RoXHJcbiAgICAgICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiAnd2VibScsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2lkJzogMHg0MjgyIC8vIERvY1R5cGVcclxuICAgICAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgICAgICAnZGF0YSc6IDIsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2lkJzogMHg0Mjg3IC8vIERvY1R5cGVWZXJzaW9uXHJcbiAgICAgICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiAyLFxyXG4gICAgICAgICAgICAgICAgICAgICdpZCc6IDB4NDI4NSAvLyBEb2NUeXBlUmVhZFZlcnNpb25cclxuICAgICAgICAgICAgICAgIH1dXHJcbiAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgICdpZCc6IDB4MTg1MzgwNjcsIC8vIFNlZ21lbnRcclxuICAgICAgICAgICAgICAgICdkYXRhJzogW3tcclxuICAgICAgICAgICAgICAgICAgICAnaWQnOiAweDE1NDlhOTY2LCAvLyBJbmZvXHJcbiAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiBbe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnZGF0YSc6IDFlNiwgLy9kbyB0aGluZ3MgaW4gbWlsbGlzZWNzIChudW0gb2YgbmFub3NlY3MgZm9yIGR1cmF0aW9uIHNjYWxlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnaWQnOiAweDJhZDdiMSAvLyBUaW1lY29kZVNjYWxlXHJcbiAgICAgICAgICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnZGF0YSc6ICd3aGFtbXknLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnaWQnOiAweDRkODAgLy8gTXV4aW5nQXBwXHJcbiAgICAgICAgICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnZGF0YSc6ICd3aGFtbXknLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnaWQnOiAweDU3NDEgLy8gV3JpdGluZ0FwcFxyXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiBkb3VibGVUb1N0cmluZyhpbmZvLmR1cmF0aW9uKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ2lkJzogMHg0NDg5IC8vIER1cmF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgfV1cclxuICAgICAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgICAgICAnaWQnOiAweDE2NTRhZTZiLCAvLyBUcmFja3NcclxuICAgICAgICAgICAgICAgICAgICAnZGF0YSc6IFt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdpZCc6IDB4YWUsIC8vIFRyYWNrRW50cnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiBbe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lkJzogMHhkNyAvLyBUcmFja051bWJlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0YSc6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWQnOiAweDczYzUgLy8gVHJhY2tVSURcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lkJzogMHg5YyAvLyBGbGFnTGFjaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhJzogJ3VuZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWQnOiAweDIyYjU5YyAvLyBMYW5ndWFnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0YSc6ICdWX1ZQOCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWQnOiAweDg2IC8vIENvZGVjSURcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiAnVlA4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpZCc6IDB4MjU4Njg4IC8vIENvZGVjTmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0YSc6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWQnOiAweDgzIC8vIFRyYWNrVHlwZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWQnOiAweGUwLCAvLyBWaWRlb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiBbe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhJzogaW5mby53aWR0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWQnOiAweGIwIC8vIFBpeGVsV2lkdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0YSc6IGluZm8uaGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpZCc6IDB4YmEgLy8gUGl4ZWxIZWlnaHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1dXHJcbiAgICAgICAgICAgICAgICAgICAgfV1cclxuICAgICAgICAgICAgICAgIH1dXHJcbiAgICAgICAgICAgIH1dO1xyXG5cclxuICAgICAgICAgICAgLy9HZW5lcmF0ZSBjbHVzdGVycyAobWF4IGR1cmF0aW9uKVxyXG4gICAgICAgICAgICB2YXIgZnJhbWVOdW1iZXIgPSAwO1xyXG4gICAgICAgICAgICB2YXIgY2x1c3RlclRpbWVjb2RlID0gMDtcclxuICAgICAgICAgICAgd2hpbGUgKGZyYW1lTnVtYmVyIDwgZnJhbWVzLmxlbmd0aCkge1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBjbHVzdGVyRnJhbWVzID0gW107XHJcbiAgICAgICAgICAgICAgICB2YXIgY2x1c3RlckR1cmF0aW9uID0gMDtcclxuICAgICAgICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgICAgICAgICBjbHVzdGVyRnJhbWVzLnB1c2goZnJhbWVzW2ZyYW1lTnVtYmVyXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2x1c3RlckR1cmF0aW9uICs9IGZyYW1lc1tmcmFtZU51bWJlcl0uZHVyYXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgZnJhbWVOdW1iZXIrKztcclxuICAgICAgICAgICAgICAgIH0gd2hpbGUgKGZyYW1lTnVtYmVyIDwgZnJhbWVzLmxlbmd0aCAmJiBjbHVzdGVyRHVyYXRpb24gPCBjbHVzdGVyTWF4RHVyYXRpb24pO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBjbHVzdGVyQ291bnRlciA9IDA7XHJcbiAgICAgICAgICAgICAgICB2YXIgY2x1c3RlciA9IHtcclxuICAgICAgICAgICAgICAgICAgICAnaWQnOiAweDFmNDNiNjc1LCAvLyBDbHVzdGVyXHJcbiAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiBnZXRDbHVzdGVyRGF0YShjbHVzdGVyVGltZWNvZGUsIGNsdXN0ZXJDb3VudGVyLCBjbHVzdGVyRnJhbWVzKVxyXG4gICAgICAgICAgICAgICAgfTsgLy9BZGQgY2x1c3RlciB0byBzZWdtZW50XHJcbiAgICAgICAgICAgICAgICBFQk1MWzFdLmRhdGEucHVzaChjbHVzdGVyKTtcclxuICAgICAgICAgICAgICAgIGNsdXN0ZXJUaW1lY29kZSArPSBjbHVzdGVyRHVyYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZUVCTUwoRUJNTCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBnZXRDbHVzdGVyRGF0YShjbHVzdGVyVGltZWNvZGUsIGNsdXN0ZXJDb3VudGVyLCBjbHVzdGVyRnJhbWVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbe1xyXG4gICAgICAgICAgICAgICAgJ2RhdGEnOiBjbHVzdGVyVGltZWNvZGUsXHJcbiAgICAgICAgICAgICAgICAnaWQnOiAweGU3IC8vIFRpbWVjb2RlXHJcbiAgICAgICAgICAgIH1dLmNvbmNhdChjbHVzdGVyRnJhbWVzLm1hcChmdW5jdGlvbih3ZWJwKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYmxvY2sgPSBtYWtlU2ltcGxlQmxvY2soe1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc2NhcmRhYmxlOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGZyYW1lOiB3ZWJwLmRhdGEuc2xpY2UoNCksXHJcbiAgICAgICAgICAgICAgICAgICAgaW52aXNpYmxlOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGtleWZyYW1lOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhY2luZzogMCxcclxuICAgICAgICAgICAgICAgICAgICB0cmFja051bTogMSxcclxuICAgICAgICAgICAgICAgICAgICB0aW1lY29kZTogTWF0aC5yb3VuZChjbHVzdGVyQ291bnRlcilcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgY2x1c3RlckNvdW50ZXIgKz0gd2VicC5kdXJhdGlvbjtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogYmxvY2ssXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IDB4YTNcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHN1bXMgdGhlIGxlbmd0aHMgb2YgYWxsIHRoZSBmcmFtZXMgYW5kIGdldHMgdGhlIGR1cmF0aW9uXHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrRnJhbWVzKGZyYW1lcykge1xyXG4gICAgICAgICAgICBpZiAoIWZyYW1lc1swXSkge1xyXG4gICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2Uoe1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiAnU29tZXRoaW5nIHdlbnQgd3JvbmcuIE1heWJlIFdlYlAgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIGN1cnJlbnQgYnJvd3Nlci4nXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHdpZHRoID0gZnJhbWVzWzBdLndpZHRoLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0ID0gZnJhbWVzWzBdLmhlaWdodCxcclxuICAgICAgICAgICAgICAgIGR1cmF0aW9uID0gZnJhbWVzWzBdLmR1cmF0aW9uO1xyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBmcmFtZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGR1cmF0aW9uICs9IGZyYW1lc1tpXS5kdXJhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHRcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIG51bVRvQnVmZmVyKG51bSkge1xyXG4gICAgICAgICAgICB2YXIgcGFydHMgPSBbXTtcclxuICAgICAgICAgICAgd2hpbGUgKG51bSA+IDApIHtcclxuICAgICAgICAgICAgICAgIHBhcnRzLnB1c2gobnVtICYgMHhmZik7XHJcbiAgICAgICAgICAgICAgICBudW0gPSBudW0gPj4gODtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkocGFydHMucmV2ZXJzZSgpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHN0clRvQnVmZmVyKHN0cikge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoc3RyLnNwbGl0KCcnKS5tYXAoZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGUuY2hhckNvZGVBdCgwKTtcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gYml0c1RvQnVmZmVyKGJpdHMpIHtcclxuICAgICAgICAgICAgdmFyIGRhdGEgPSBbXTtcclxuICAgICAgICAgICAgdmFyIHBhZCA9IChiaXRzLmxlbmd0aCAlIDgpID8gKG5ldyBBcnJheSgxICsgOCAtIChiaXRzLmxlbmd0aCAlIDgpKSkuam9pbignMCcpIDogJyc7XHJcbiAgICAgICAgICAgIGJpdHMgPSBwYWQgKyBiaXRzO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJpdHMubGVuZ3RoOyBpICs9IDgpIHtcclxuICAgICAgICAgICAgICAgIGRhdGEucHVzaChwYXJzZUludChiaXRzLnN1YnN0cihpLCA4KSwgMikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShkYXRhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGdlbmVyYXRlRUJNTChqc29uKSB7XHJcbiAgICAgICAgICAgIHZhciBlYm1sID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwganNvbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBqc29uW2ldLmRhdGE7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBnZW5lcmF0ZUVCTUwoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBiaXRzVG9CdWZmZXIoZGF0YS50b1N0cmluZygyKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBzdHJUb0J1ZmZlcihkYXRhKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgbGVuID0gZGF0YS5zaXplIHx8IGRhdGEuYnl0ZUxlbmd0aCB8fCBkYXRhLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIHZhciB6ZXJvZXMgPSBNYXRoLmNlaWwoTWF0aC5jZWlsKE1hdGgubG9nKGxlbikgLyBNYXRoLmxvZygyKSkgLyA4KTtcclxuICAgICAgICAgICAgICAgIHZhciBzaXplVG9TdHJpbmcgPSBsZW4udG9TdHJpbmcoMik7XHJcbiAgICAgICAgICAgICAgICB2YXIgcGFkZGVkID0gKG5ldyBBcnJheSgoemVyb2VzICogNyArIDcgKyAxKSAtIHNpemVUb1N0cmluZy5sZW5ndGgpKS5qb2luKCcwJykgKyBzaXplVG9TdHJpbmc7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IChuZXcgQXJyYXkoemVyb2VzKSkuam9pbignMCcpICsgJzEnICsgcGFkZGVkO1xyXG5cclxuICAgICAgICAgICAgICAgIGVibWwucHVzaChudW1Ub0J1ZmZlcihqc29uW2ldLmlkKSk7XHJcbiAgICAgICAgICAgICAgICBlYm1sLnB1c2goYml0c1RvQnVmZmVyKHNpemUpKTtcclxuICAgICAgICAgICAgICAgIGVibWwucHVzaChkYXRhKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBCbG9iKGVibWwsIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICd2aWRlby93ZWJtJ1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHRvQmluU3RyT2xkKGJpdHMpIHtcclxuICAgICAgICAgICAgdmFyIGRhdGEgPSAnJztcclxuICAgICAgICAgICAgdmFyIHBhZCA9IChiaXRzLmxlbmd0aCAlIDgpID8gKG5ldyBBcnJheSgxICsgOCAtIChiaXRzLmxlbmd0aCAlIDgpKSkuam9pbignMCcpIDogJyc7XHJcbiAgICAgICAgICAgIGJpdHMgPSBwYWQgKyBiaXRzO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJpdHMubGVuZ3RoOyBpICs9IDgpIHtcclxuICAgICAgICAgICAgICAgIGRhdGEgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChiaXRzLnN1YnN0cihpLCA4KSwgMikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gbWFrZVNpbXBsZUJsb2NrKGRhdGEpIHtcclxuICAgICAgICAgICAgdmFyIGZsYWdzID0gMDtcclxuXHJcbiAgICAgICAgICAgIGlmIChkYXRhLmtleWZyYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBmbGFncyB8PSAxMjg7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChkYXRhLmludmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgZmxhZ3MgfD0gODtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGRhdGEubGFjaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBmbGFncyB8PSAoZGF0YS5sYWNpbmcgPDwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChkYXRhLmRpc2NhcmRhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBmbGFncyB8PSAxO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZGF0YS50cmFja051bSA+IDEyNykge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgJ1RyYWNrTnVtYmVyID4gMTI3IG5vdCBzdXBwb3J0ZWQnO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgb3V0ID0gW2RhdGEudHJhY2tOdW0gfCAweDgwLCBkYXRhLnRpbWVjb2RlID4+IDgsIGRhdGEudGltZWNvZGUgJiAweGZmLCBmbGFnc10ubWFwKGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGUpO1xyXG4gICAgICAgICAgICB9KS5qb2luKCcnKSArIGRhdGEuZnJhbWU7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gcGFyc2VXZWJQKHJpZmYpIHtcclxuICAgICAgICAgICAgdmFyIFZQOCA9IHJpZmYuUklGRlswXS5XRUJQWzBdO1xyXG5cclxuICAgICAgICAgICAgdmFyIGZyYW1lU3RhcnQgPSBWUDguaW5kZXhPZignXFx4OWRcXHgwMVxceDJhJyk7IC8vIEEgVlA4IGtleWZyYW1lIHN0YXJ0cyB3aXRoIHRoZSAweDlkMDEyYSBoZWFkZXJcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGMgPSBbXTsgaSA8IDQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY1tpXSA9IFZQOC5jaGFyQ29kZUF0KGZyYW1lU3RhcnQgKyAzICsgaSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciB3aWR0aCwgaGVpZ2h0LCB0bXA7XHJcblxyXG4gICAgICAgICAgICAvL3RoZSBjb2RlIGJlbG93IGlzIGxpdGVyYWxseSBjb3BpZWQgdmVyYmF0aW0gZnJvbSB0aGUgYml0c3RyZWFtIHNwZWNcclxuICAgICAgICAgICAgdG1wID0gKGNbMV0gPDwgOCkgfCBjWzBdO1xyXG4gICAgICAgICAgICB3aWR0aCA9IHRtcCAmIDB4M0ZGRjtcclxuICAgICAgICAgICAgdG1wID0gKGNbM10gPDwgOCkgfCBjWzJdO1xyXG4gICAgICAgICAgICBoZWlnaHQgPSB0bXAgJiAweDNGRkY7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgICAgICAgICAgIGRhdGE6IFZQOCxcclxuICAgICAgICAgICAgICAgIHJpZmY6IHJpZmZcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGdldFN0ckxlbmd0aChzdHJpbmcsIG9mZnNldCkge1xyXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQoc3RyaW5nLnN1YnN0cihvZmZzZXQgKyA0LCA0KS5zcGxpdCgnJykubWFwKGZ1bmN0aW9uKGkpIHtcclxuICAgICAgICAgICAgICAgIHZhciB1bnBhZGRlZCA9IGkuY2hhckNvZGVBdCgwKS50b1N0cmluZygyKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiAobmV3IEFycmF5KDggLSB1bnBhZGRlZC5sZW5ndGggKyAxKSkuam9pbignMCcpICsgdW5wYWRkZWQ7XHJcbiAgICAgICAgICAgIH0pLmpvaW4oJycpLCAyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlUklGRihzdHJpbmcpIHtcclxuICAgICAgICAgICAgdmFyIG9mZnNldCA9IDA7XHJcbiAgICAgICAgICAgIHZhciBjaHVua3MgPSB7fTtcclxuXHJcbiAgICAgICAgICAgIHdoaWxlIChvZmZzZXQgPCBzdHJpbmcubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWQgPSBzdHJpbmcuc3Vic3RyKG9mZnNldCwgNCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgbGVuID0gZ2V0U3RyTGVuZ3RoKHN0cmluZywgb2Zmc2V0KTtcclxuICAgICAgICAgICAgICAgIHZhciBkYXRhID0gc3RyaW5nLnN1YnN0cihvZmZzZXQgKyA0ICsgNCwgbGVuKTtcclxuICAgICAgICAgICAgICAgIG9mZnNldCArPSA0ICsgNCArIGxlbjtcclxuICAgICAgICAgICAgICAgIGNodW5rc1tpZF0gPSBjaHVua3NbaWRdIHx8IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpZCA9PT0gJ1JJRkYnIHx8IGlkID09PSAnTElTVCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBjaHVua3NbaWRdLnB1c2gocGFyc2VSSUZGKGRhdGEpKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2h1bmtzW2lkXS5wdXNoKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBjaHVua3M7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBkb3VibGVUb1N0cmluZyhudW0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdLnNsaWNlLmNhbGwoXHJcbiAgICAgICAgICAgICAgICBuZXcgVWludDhBcnJheSgobmV3IEZsb2F0NjRBcnJheShbbnVtXSkpLmJ1ZmZlciksIDApLm1hcChmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShlKTtcclxuICAgICAgICAgICAgfSkucmV2ZXJzZSgpLmpvaW4oJycpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHdlYm0gPSBuZXcgQXJyYXlUb1dlYk0oZnJhbWVzLm1hcChmdW5jdGlvbihmcmFtZSkge1xyXG4gICAgICAgICAgICB2YXIgd2VicCA9IHBhcnNlV2ViUChwYXJzZVJJRkYoYXRvYihmcmFtZS5pbWFnZS5zbGljZSgyMykpKSk7XHJcbiAgICAgICAgICAgIHdlYnAuZHVyYXRpb24gPSBmcmFtZS5kdXJhdGlvbjtcclxuICAgICAgICAgICAgcmV0dXJuIHdlYnA7XHJcbiAgICAgICAgfSkpO1xyXG5cclxuICAgICAgICBwb3N0TWVzc2FnZSh3ZWJtKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEVuY29kZXMgZnJhbWVzIGluIFdlYk0gY29udGFpbmVyLiBJdCB1c2VzIFdlYldvcmtpbnZva2UgdG8gaW52b2tlICdBcnJheVRvV2ViTScgbWV0aG9kLlxyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBDYWxsYmFjayBmdW5jdGlvbiwgdGhhdCBpcyB1c2VkIHRvIHBhc3MgcmVjb3JkZWQgYmxvYiBiYWNrIHRvIHRoZSBjYWxsZWUuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgV2hhbW15XHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIgPSBuZXcgV2hhbW15KCkuVmlkZW8oMC44LCAxMDApO1xyXG4gICAgICogcmVjb3JkZXIuY29tcGlsZShmdW5jdGlvbihibG9iKSB7XHJcbiAgICAgKiAgICAvLyBibG9iLnNpemUgLSBibG9iLnR5cGVcclxuICAgICAqIH0pO1xyXG4gICAgICovXHJcbiAgICBXaGFtbXlWaWRlby5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdmFyIHdlYldvcmtlciA9IHByb2Nlc3NJbldlYldvcmtlcih3aGFtbXlJbldlYldvcmtlcik7XHJcblxyXG4gICAgICAgIHdlYldvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQuZGF0YS5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihldmVudC5kYXRhLmVycm9yKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYWxsYmFjayhldmVudC5kYXRhKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB3ZWJXb3JrZXIucG9zdE1lc3NhZ2UodGhpcy5mcmFtZXMpO1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEEgbW9yZSBhYnN0cmFjdC1pc2ggQVBJLlxyXG4gICAgICAgICAqIEBtZXRob2RcclxuICAgICAgICAgKiBAbWVtYmVyb2YgV2hhbW15XHJcbiAgICAgICAgICogQGV4YW1wbGVcclxuICAgICAgICAgKiByZWNvcmRlciA9IG5ldyBXaGFtbXkoKS5WaWRlbygwLjgsIDEwMCk7XHJcbiAgICAgICAgICogQHBhcmFtIHs/bnVtYmVyfSBzcGVlZCAtIDAuOFxyXG4gICAgICAgICAqIEBwYXJhbSB7P251bWJlcn0gcXVhbGl0eSAtIDEwMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIFZpZGVvOiBXaGFtbXlWaWRlb1xyXG4gICAgfTtcclxufSkoKTtcclxuXHJcbmlmICh0eXBlb2YgUmVjb3JkUlRDICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgUmVjb3JkUlRDLldoYW1teSA9IFdoYW1teTtcclxufVxuXHJcbi8vIF9fX19fX19fX19fX19fIChpbmRleGVkLWRiKVxyXG4vLyBEaXNrU3RvcmFnZS5qc1xyXG5cclxuLyoqXHJcbiAqIERpc2tTdG9yYWdlIGlzIGEgc3RhbmRhbG9uZSBvYmplY3QgdXNlZCBieSB7QGxpbmsgUmVjb3JkUlRDfSB0byBzdG9yZSByZWNvcmRlZCBibG9icyBpbiBJbmRleGVkREIgc3RvcmFnZS5cclxuICogQHN1bW1hcnkgV3JpdGluZyBibG9icyBpbnRvIEluZGV4ZWREQi5cclxuICogQGxpY2Vuc2Uge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWF6LWtoYW4vUmVjb3JkUlRDL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUfVxyXG4gKiBAYXV0aG9yIHtAbGluayBodHRwczovL011YXpLaGFuLmNvbXxNdWF6IEtoYW59XHJcbiAqIEBleGFtcGxlXHJcbiAqIERpc2tTdG9yYWdlLlN0b3JlKHtcclxuICogICAgIGF1ZGlvQmxvYjogeW91ckF1ZGlvQmxvYixcclxuICogICAgIHZpZGVvQmxvYjogeW91clZpZGVvQmxvYixcclxuICogICAgIGdpZkJsb2IgIDogeW91ckdpZkJsb2JcclxuICogfSk7XHJcbiAqIERpc2tTdG9yYWdlLkZldGNoKGZ1bmN0aW9uKGRhdGFVUkwsIHR5cGUpIHtcclxuICogICAgIGlmKHR5cGUgPT09ICdhdWRpb0Jsb2InKSB7IH1cclxuICogICAgIGlmKHR5cGUgPT09ICd2aWRlb0Jsb2InKSB7IH1cclxuICogICAgIGlmKHR5cGUgPT09ICdnaWZCbG9iJykgICB7IH1cclxuICogfSk7XHJcbiAqIC8vIERpc2tTdG9yYWdlLmRhdGFTdG9yZU5hbWUgPSAncmVjb3JkUlRDJztcclxuICogLy8gRGlza1N0b3JhZ2Uub25FcnJvciA9IGZ1bmN0aW9uKGVycm9yKSB7IH07XHJcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IGluaXQgLSBUaGlzIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCBvbmNlIHRvIGluaXRpYWxpemUgSW5kZXhlZERCIE9iamVjdFN0b3JlLiBUaG91Z2gsIGl0IGlzIGF1dG8tdXNlZCBpbnRlcm5hbGx5LlxyXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBGZXRjaCAtIFRoaXMgbWV0aG9kIGZldGNoZXMgc3RvcmVkIGJsb2JzIGZyb20gSW5kZXhlZERCLlxyXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBTdG9yZSAtIFRoaXMgbWV0aG9kIHN0b3JlcyBibG9icyBpbiBJbmRleGVkREIuXHJcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IG9uRXJyb3IgLSBUaGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgZm9yIGFueSBrbm93bi91bmtub3duIGVycm9yLlxyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZGF0YVN0b3JlTmFtZSAtIE5hbWUgb2YgdGhlIE9iamVjdFN0b3JlIGNyZWF0ZWQgaW4gSW5kZXhlZERCIHN0b3JhZ2UuXHJcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWF6LWtoYW4vUmVjb3JkUlRDfFJlY29yZFJUQyBTb3VyY2UgQ29kZX1cclxuICovXHJcblxyXG5cclxudmFyIERpc2tTdG9yYWdlID0ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCBvbmNlIHRvIGluaXRpYWxpemUgSW5kZXhlZERCIE9iamVjdFN0b3JlLiBUaG91Z2gsIGl0IGlzIGF1dG8tdXNlZCBpbnRlcm5hbGx5LlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIERpc2tTdG9yYWdlXHJcbiAgICAgKiBAaW50ZXJuYWxcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiBEaXNrU3RvcmFnZS5pbml0KCk7XHJcbiAgICAgKi9cclxuICAgIGluaXQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBpbmRleGVkREIgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBpbmRleGVkREIub3BlbiA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignSW5kZXhlZERCIEFQSSBhcmUgbm90IGF2YWlsYWJsZSBpbiB0aGlzIGJyb3dzZXIuJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBkYlZlcnNpb24gPSAxO1xyXG4gICAgICAgIHZhciBkYk5hbWUgPSB0aGlzLmRiTmFtZSB8fCBsb2NhdGlvbi5ocmVmLnJlcGxhY2UoL1xcL3w6fCN8JXxcXC58XFxbfFxcXS9nLCAnJyksXHJcbiAgICAgICAgICAgIGRiO1xyXG4gICAgICAgIHZhciByZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oZGJOYW1lLCBkYlZlcnNpb24pO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBjcmVhdGVPYmplY3RTdG9yZShkYXRhQmFzZSkge1xyXG4gICAgICAgICAgICBkYXRhQmFzZS5jcmVhdGVPYmplY3RTdG9yZShzZWxmLmRhdGFTdG9yZU5hbWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gcHV0SW5EQigpIHtcclxuICAgICAgICAgICAgdmFyIHRyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oW3NlbGYuZGF0YVN0b3JlTmFtZV0sICdyZWFkd3JpdGUnKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzZWxmLnZpZGVvQmxvYikge1xyXG4gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc2VsZi5kYXRhU3RvcmVOYW1lKS5wdXQoc2VsZi52aWRlb0Jsb2IsICd2aWRlb0Jsb2InKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHNlbGYuZ2lmQmxvYikge1xyXG4gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc2VsZi5kYXRhU3RvcmVOYW1lKS5wdXQoc2VsZi5naWZCbG9iLCAnZ2lmQmxvYicpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoc2VsZi5hdWRpb0Jsb2IpIHtcclxuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHNlbGYuZGF0YVN0b3JlTmFtZSkucHV0KHNlbGYuYXVkaW9CbG9iLCAnYXVkaW9CbG9iJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldEZyb21TdG9yZShwb3J0aW9uTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc2VsZi5kYXRhU3RvcmVOYW1lKS5nZXQocG9ydGlvbk5hbWUpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxsYmFjayhldmVudC50YXJnZXQucmVzdWx0LCBwb3J0aW9uTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZ2V0RnJvbVN0b3JlKCdhdWRpb0Jsb2InKTtcclxuICAgICAgICAgICAgZ2V0RnJvbVN0b3JlKCd2aWRlb0Jsb2InKTtcclxuICAgICAgICAgICAgZ2V0RnJvbVN0b3JlKCdnaWZCbG9iJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXF1ZXN0Lm9uZXJyb3IgPSBzZWxmLm9uRXJyb3I7XHJcblxyXG4gICAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGRiID0gcmVxdWVzdC5yZXN1bHQ7XHJcbiAgICAgICAgICAgIGRiLm9uZXJyb3IgPSBzZWxmLm9uRXJyb3I7XHJcblxyXG4gICAgICAgICAgICBpZiAoZGIuc2V0VmVyc2lvbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRiLnZlcnNpb24gIT09IGRiVmVyc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzZXRWZXJzaW9uID0gZGIuc2V0VmVyc2lvbihkYlZlcnNpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFZlcnNpb24ub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZU9iamVjdFN0b3JlKGRiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0SW5EQigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHB1dEluREIoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHB1dEluREIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICBjcmVhdGVPYmplY3RTdG9yZShldmVudC50YXJnZXQucmVzdWx0KTtcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgZmV0Y2hlcyBzdG9yZWQgYmxvYnMgZnJvbSBJbmRleGVkREIuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgRGlza1N0b3JhZ2VcclxuICAgICAqIEBpbnRlcm5hbFxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIERpc2tTdG9yYWdlLkZldGNoKGZ1bmN0aW9uKGRhdGFVUkwsIHR5cGUpIHtcclxuICAgICAqICAgICBpZih0eXBlID09PSAnYXVkaW9CbG9iJykgeyB9XHJcbiAgICAgKiAgICAgaWYodHlwZSA9PT0gJ3ZpZGVvQmxvYicpIHsgfVxyXG4gICAgICogICAgIGlmKHR5cGUgPT09ICdnaWZCbG9iJykgICB7IH1cclxuICAgICAqIH0pO1xyXG4gICAgICovXHJcbiAgICBGZXRjaDogZnVuY3Rpb24oY2FsbGJhY2spIHtcclxuICAgICAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2Qgc3RvcmVzIGJsb2JzIGluIEluZGV4ZWREQi5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBEaXNrU3RvcmFnZVxyXG4gICAgICogQGludGVybmFsXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogRGlza1N0b3JhZ2UuU3RvcmUoe1xyXG4gICAgICogICAgIGF1ZGlvQmxvYjogeW91ckF1ZGlvQmxvYixcclxuICAgICAqICAgICB2aWRlb0Jsb2I6IHlvdXJWaWRlb0Jsb2IsXHJcbiAgICAgKiAgICAgZ2lmQmxvYiAgOiB5b3VyR2lmQmxvYlxyXG4gICAgICogfSk7XHJcbiAgICAgKi9cclxuICAgIFN0b3JlOiBmdW5jdGlvbihjb25maWcpIHtcclxuICAgICAgICB0aGlzLmF1ZGlvQmxvYiA9IGNvbmZpZy5hdWRpb0Jsb2I7XHJcbiAgICAgICAgdGhpcy52aWRlb0Jsb2IgPSBjb25maWcudmlkZW9CbG9iO1xyXG4gICAgICAgIHRoaXMuZ2lmQmxvYiA9IGNvbmZpZy5naWZCbG9iO1xyXG5cclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgZm9yIGFueSBrbm93bi91bmtub3duIGVycm9yLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIERpc2tTdG9yYWdlXHJcbiAgICAgKiBAaW50ZXJuYWxcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiBEaXNrU3RvcmFnZS5vbkVycm9yID0gZnVuY3Rpb24oZXJyb3Ipe1xyXG4gICAgICogICAgIGFsZXJvdCggSlNPTi5zdHJpbmdpZnkoZXJyb3IpICk7XHJcbiAgICAgKiB9O1xyXG4gICAgICovXHJcbiAgICBvbkVycm9yOiBmdW5jdGlvbihlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoSlNPTi5zdHJpbmdpZnkoZXJyb3IsIG51bGwsICdcXHQnKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IGRhdGFTdG9yZU5hbWUgLSBOYW1lIG9mIHRoZSBPYmplY3RTdG9yZSBjcmVhdGVkIGluIEluZGV4ZWREQiBzdG9yYWdlLlxyXG4gICAgICogQG1lbWJlcm9mIERpc2tTdG9yYWdlXHJcbiAgICAgKiBAaW50ZXJuYWxcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiBEaXNrU3RvcmFnZS5kYXRhU3RvcmVOYW1lID0gJ3JlY29yZFJUQyc7XHJcbiAgICAgKi9cclxuICAgIGRhdGFTdG9yZU5hbWU6ICdyZWNvcmRSVEMnLFxyXG4gICAgZGJOYW1lOiBudWxsXHJcbn07XHJcblxyXG5pZiAodHlwZW9mIFJlY29yZFJUQyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIFJlY29yZFJUQy5EaXNrU3RvcmFnZSA9IERpc2tTdG9yYWdlO1xyXG59XG5cclxuLy8gX19fX19fX19fX19fX19cclxuLy8gR2lmUmVjb3JkZXIuanNcclxuXHJcbi8qKlxyXG4gKiBHaWZSZWNvcmRlciBpcyBzdGFuZGFsb25lIGNhbHNzIHVzZWQgYnkge0BsaW5rIFJlY29yZFJUQ30gdG8gcmVjb3JkIHZpZGVvIG9yIGNhbnZhcyBpbnRvIGFuaW1hdGVkIGdpZi5cclxuICogQGxpY2Vuc2Uge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWF6LWtoYW4vUmVjb3JkUlRDL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUfVxyXG4gKiBAYXV0aG9yIHtAbGluayBodHRwczovL011YXpLaGFuLmNvbXxNdWF6IEtoYW59XHJcbiAqIEB0eXBlZGVmIEdpZlJlY29yZGVyXHJcbiAqIEBjbGFzc1xyXG4gKiBAZXhhbXBsZVxyXG4gKiB2YXIgcmVjb3JkZXIgPSBuZXcgR2lmUmVjb3JkZXIobWVkaWFTdHJlYW0gfHwgY2FudmFzIHx8IGNvbnRleHQsIHsgb25HaWZQcmV2aWV3OiBmdW5jdGlvbiwgb25HaWZSZWNvcmRpbmdTdGFydGVkOiBmdW5jdGlvbiwgd2lkdGg6IDEyODAsIGhlaWdodDogNzIwLCBmcmFtZVJhdGU6IDIwMCwgcXVhbGl0eTogMTAgfSk7XHJcbiAqIHJlY29yZGVyLnJlY29yZCgpO1xyXG4gKiByZWNvcmRlci5zdG9wKGZ1bmN0aW9uKGJsb2IpIHtcclxuICogICAgIGltZy5zcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gKiB9KTtcclxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL211YXota2hhbi9SZWNvcmRSVEN8UmVjb3JkUlRDIFNvdXJjZSBDb2RlfVxyXG4gKiBAcGFyYW0ge01lZGlhU3RyZWFtfSBtZWRpYVN0cmVhbSAtIE1lZGlhU3RyZWFtIG9iamVjdCBvciBIVE1MQ2FudmFzRWxlbWVudCBvciBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgLSB7ZGlzYWJsZUxvZ3M6dHJ1ZSwgaW5pdENhbGxiYWNrOiBmdW5jdGlvbiwgd2lkdGg6IDMyMCwgaGVpZ2h0OiAyNDAsIGZyYW1lUmF0ZTogMjAwLCBxdWFsaXR5OiAxMH1cclxuICovXHJcblxyXG5mdW5jdGlvbiBHaWZSZWNvcmRlcihtZWRpYVN0cmVhbSwgY29uZmlnKSB7XHJcbiAgICBpZiAodHlwZW9mIEdJRkVuY29kZXIgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgdmFyIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xyXG4gICAgICAgIHNjcmlwdC5zcmMgPSAnaHR0cHM6Ly93d3cud2VicnRjLWV4cGVyaW1lbnQuY29tL2dpZi1yZWNvcmRlci5qcyc7XHJcbiAgICAgICAgKGRvY3VtZW50LmJvZHkgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5hcHBlbmRDaGlsZChzY3JpcHQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcclxuXHJcbiAgICB2YXIgaXNIVE1MT2JqZWN0ID0gbWVkaWFTdHJlYW0gaW5zdGFuY2VvZiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfHwgbWVkaWFTdHJlYW0gaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHJlY29yZHMgTWVkaWFTdHJlYW0uXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgR2lmUmVjb3JkZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5yZWNvcmQoKTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5yZWNvcmQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBpZiAodHlwZW9mIEdJRkVuY29kZXIgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoc2VsZi5yZWNvcmQsIDEwMDApO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWlzTG9hZGVkTWV0YURhdGEpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dChzZWxmLnJlY29yZCwgMTAwMCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghaXNIVE1MT2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGlmICghY29uZmlnLndpZHRoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25maWcud2lkdGggPSB2aWRlby5vZmZzZXRXaWR0aCB8fCAzMjA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghY29uZmlnLmhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgY29uZmlnLmhlaWdodCA9IHZpZGVvLm9mZnNldEhlaWdodCB8fCAyNDA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghY29uZmlnLnZpZGVvKSB7XHJcbiAgICAgICAgICAgICAgICBjb25maWcudmlkZW8gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGNvbmZpZy53aWR0aCxcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGNvbmZpZy5oZWlnaHRcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghY29uZmlnLmNhbnZhcykge1xyXG4gICAgICAgICAgICAgICAgY29uZmlnLmNhbnZhcyA9IHtcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogY29uZmlnLndpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogY29uZmlnLmhlaWdodFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2FudmFzLndpZHRoID0gY29uZmlnLmNhbnZhcy53aWR0aCB8fCAzMjA7XHJcbiAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBjb25maWcuY2FudmFzLmhlaWdodCB8fCAyNDA7XHJcblxyXG4gICAgICAgICAgICB2aWRlby53aWR0aCA9IGNvbmZpZy52aWRlby53aWR0aCB8fCAzMjA7XHJcbiAgICAgICAgICAgIHZpZGVvLmhlaWdodCA9IGNvbmZpZy52aWRlby5oZWlnaHQgfHwgMjQwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gZXh0ZXJuYWwgbGlicmFyeSB0byByZWNvcmQgYXMgR0lGIGltYWdlc1xyXG4gICAgICAgIGdpZkVuY29kZXIgPSBuZXcgR0lGRW5jb2RlcigpO1xyXG5cclxuICAgICAgICAvLyB2b2lkIHNldFJlcGVhdChpbnQgaXRlcikgXHJcbiAgICAgICAgLy8gU2V0cyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBzZXQgb2YgR0lGIGZyYW1lcyBzaG91bGQgYmUgcGxheWVkLiBcclxuICAgICAgICAvLyBEZWZhdWx0IGlzIDE7IDAgbWVhbnMgcGxheSBpbmRlZmluaXRlbHkuXHJcbiAgICAgICAgZ2lmRW5jb2Rlci5zZXRSZXBlYXQoMCk7XHJcblxyXG4gICAgICAgIC8vIHZvaWQgc2V0RnJhbWVSYXRlKE51bWJlciBmcHMpIFxyXG4gICAgICAgIC8vIFNldHMgZnJhbWUgcmF0ZSBpbiBmcmFtZXMgcGVyIHNlY29uZC4gXHJcbiAgICAgICAgLy8gRXF1aXZhbGVudCB0byBzZXREZWxheSgxMDAwL2ZwcykuXHJcbiAgICAgICAgLy8gVXNpbmcgXCJzZXREZWxheVwiIGluc3RlYWQgb2YgXCJzZXRGcmFtZVJhdGVcIlxyXG4gICAgICAgIGdpZkVuY29kZXIuc2V0RGVsYXkoY29uZmlnLmZyYW1lUmF0ZSB8fCAyMDApO1xyXG5cclxuICAgICAgICAvLyB2b2lkIHNldFF1YWxpdHkoaW50IHF1YWxpdHkpIFxyXG4gICAgICAgIC8vIFNldHMgcXVhbGl0eSBvZiBjb2xvciBxdWFudGl6YXRpb24gKGNvbnZlcnNpb24gb2YgaW1hZ2VzIHRvIHRoZSBcclxuICAgICAgICAvLyBtYXhpbXVtIDI1NiBjb2xvcnMgYWxsb3dlZCBieSB0aGUgR0lGIHNwZWNpZmljYXRpb24pLiBcclxuICAgICAgICAvLyBMb3dlciB2YWx1ZXMgKG1pbmltdW0gPSAxKSBwcm9kdWNlIGJldHRlciBjb2xvcnMsIFxyXG4gICAgICAgIC8vIGJ1dCBzbG93IHByb2Nlc3Npbmcgc2lnbmlmaWNhbnRseS4gMTAgaXMgdGhlIGRlZmF1bHQsIFxyXG4gICAgICAgIC8vIGFuZCBwcm9kdWNlcyBnb29kIGNvbG9yIG1hcHBpbmcgYXQgcmVhc29uYWJsZSBzcGVlZHMuIFxyXG4gICAgICAgIC8vIFZhbHVlcyBncmVhdGVyIHRoYW4gMjAgZG8gbm90IHlpZWxkIHNpZ25pZmljYW50IGltcHJvdmVtZW50cyBpbiBzcGVlZC5cclxuICAgICAgICBnaWZFbmNvZGVyLnNldFF1YWxpdHkoY29uZmlnLnF1YWxpdHkgfHwgMTApO1xyXG5cclxuICAgICAgICAvLyBCb29sZWFuIHN0YXJ0KCkgXHJcbiAgICAgICAgLy8gVGhpcyB3cml0ZXMgdGhlIEdJRiBIZWFkZXIgYW5kIHJldHVybnMgZmFsc2UgaWYgaXQgZmFpbHMuXHJcbiAgICAgICAgZ2lmRW5jb2Rlci5zdGFydCgpO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5vbkdpZlJlY29yZGluZ1N0YXJ0ZWQgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgY29uZmlnLm9uR2lmUmVjb3JkaW5nU3RhcnRlZCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gZHJhd1ZpZGVvRnJhbWUodGltZSkge1xyXG4gICAgICAgICAgICBpZiAoc2VsZi5jbGVhcmVkUmVjb3JkZWREYXRhID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChpc1BhdXNlZFJlY29yZGluZykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZHJhd1ZpZGVvRnJhbWUodGltZSk7XHJcbiAgICAgICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsYXN0QW5pbWF0aW9uRnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZHJhd1ZpZGVvRnJhbWUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBsYXN0RnJhbWVUaW1lID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGxhc3RGcmFtZVRpbWUgPSB0aW1lO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyB+MTAgZnBzXHJcbiAgICAgICAgICAgIGlmICh0aW1lIC0gbGFzdEZyYW1lVGltZSA8IDkwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghaXNIVE1MT2JqZWN0ICYmIHZpZGVvLnBhdXNlZCkge1xyXG4gICAgICAgICAgICAgICAgLy8gdmlhOiBodHRwczovL2dpdGh1Yi5jb20vbXVhei1raGFuL1dlYlJUQy1FeHBlcmltZW50L3B1bGwvMzE2XHJcbiAgICAgICAgICAgICAgICAvLyBUd2VhayBmb3IgQW5kcm9pZCBDaHJvbWVcclxuICAgICAgICAgICAgICAgIHZpZGVvLnBsYXkoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFpc0hUTUxPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKHZpZGVvLCAwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY29uZmlnLm9uR2lmUHJldmlldykge1xyXG4gICAgICAgICAgICAgICAgY29uZmlnLm9uR2lmUHJldmlldyhjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGdpZkVuY29kZXIuYWRkRnJhbWUoY29udGV4dCk7XHJcbiAgICAgICAgICAgIGxhc3RGcmFtZVRpbWUgPSB0aW1lO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGFzdEFuaW1hdGlvbkZyYW1lID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGRyYXdWaWRlb0ZyYW1lKTtcclxuXHJcbiAgICAgICAgaWYgKGNvbmZpZy5pbml0Q2FsbGJhY2spIHtcclxuICAgICAgICAgICAgY29uZmlnLmluaXRDYWxsYmFjaygpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBzdG9wcyByZWNvcmRpbmcgTWVkaWFTdHJlYW0uXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLCB0aGF0IGlzIHVzZWQgdG8gcGFzcyByZWNvcmRlZCBibG9iIGJhY2sgdG8gdGhlIGNhbGxlZS5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBHaWZSZWNvcmRlclxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHJlY29yZGVyLnN0b3AoZnVuY3Rpb24oYmxvYikge1xyXG4gICAgICogICAgIGltZy5zcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgICogfSk7XHJcbiAgICAgKi9cclxuICAgIHRoaXMuc3RvcCA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xyXG5cclxuICAgICAgICBpZiAobGFzdEFuaW1hdGlvbkZyYW1lKSB7XHJcbiAgICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGxhc3RBbmltYXRpb25GcmFtZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbmRUaW1lID0gRGF0ZS5ub3coKTtcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQHByb3BlcnR5IHtCbG9ifSBibG9iIC0gVGhlIHJlY29yZGVkIGJsb2Igb2JqZWN0LlxyXG4gICAgICAgICAqIEBtZW1iZXJvZiBHaWZSZWNvcmRlclxyXG4gICAgICAgICAqIEBleGFtcGxlXHJcbiAgICAgICAgICogcmVjb3JkZXIuc3RvcChmdW5jdGlvbigpe1xyXG4gICAgICAgICAqICAgICB2YXIgYmxvYiA9IHJlY29yZGVyLmJsb2I7XHJcbiAgICAgICAgICogfSk7XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5ibG9iID0gbmV3IEJsb2IoW25ldyBVaW50OEFycmF5KGdpZkVuY29kZXIuc3RyZWFtKCkuYmluKV0sIHtcclxuICAgICAgICAgICAgdHlwZTogJ2ltYWdlL2dpZidcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY2FsbGJhY2sodGhpcy5ibG9iKTtcclxuXHJcbiAgICAgICAgLy8gYnVnOiBmaW5kIGEgd2F5IHRvIGNsZWFyIG9sZCByZWNvcmRlZCBibG9ic1xyXG4gICAgICAgIGdpZkVuY29kZXIuc3RyZWFtKCkuYmluID0gW107XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBpc1BhdXNlZFJlY29yZGluZyA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgcGF1c2VzIHRoZSByZWNvcmRpbmcgcHJvY2Vzcy5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBHaWZSZWNvcmRlclxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHJlY29yZGVyLnBhdXNlKCk7XHJcbiAgICAgKi9cclxuICAgIHRoaXMucGF1c2UgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBpc1BhdXNlZFJlY29yZGluZyA9IHRydWU7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgcmVzdW1lcyB0aGUgcmVjb3JkaW5nIHByb2Nlc3MuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgR2lmUmVjb3JkZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5yZXN1bWUoKTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5yZXN1bWUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBpc1BhdXNlZFJlY29yZGluZyA9IGZhbHNlO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHJlc2V0cyBjdXJyZW50bHkgcmVjb3JkZWQgZGF0YS5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBHaWZSZWNvcmRlclxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHJlY29yZGVyLmNsZWFyUmVjb3JkZWREYXRhKCk7XHJcbiAgICAgKi9cclxuICAgIHRoaXMuY2xlYXJSZWNvcmRlZERhdGEgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBzZWxmLmNsZWFyZWRSZWNvcmRlZERhdGEgPSB0cnVlO1xyXG4gICAgICAgIGNsZWFyUmVjb3JkZWREYXRhQ0IoKTtcclxuICAgIH07XHJcblxyXG4gICAgZnVuY3Rpb24gY2xlYXJSZWNvcmRlZERhdGFDQigpIHtcclxuICAgICAgICBpZiAoZ2lmRW5jb2Rlcikge1xyXG4gICAgICAgICAgICBnaWZFbmNvZGVyLnN0cmVhbSgpLmJpbiA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgZGVidWdnaW5nXHJcbiAgICB0aGlzLm5hbWUgPSAnR2lmUmVjb3JkZXInO1xyXG4gICAgdGhpcy50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5hbWU7XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcblxyXG4gICAgaWYgKGlzSFRNTE9iamVjdCkge1xyXG4gICAgICAgIGlmIChtZWRpYVN0cmVhbSBpbnN0YW5jZW9mIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCkge1xyXG4gICAgICAgICAgICBjb250ZXh0ID0gbWVkaWFTdHJlYW07XHJcbiAgICAgICAgICAgIGNhbnZhcyA9IGNvbnRleHQuY2FudmFzO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobWVkaWFTdHJlYW0gaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCkge1xyXG4gICAgICAgICAgICBjb250ZXh0ID0gbWVkaWFTdHJlYW0uZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICAgICAgY2FudmFzID0gbWVkaWFTdHJlYW07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhciBpc0xvYWRlZE1ldGFEYXRhID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoIWlzSFRNTE9iamVjdCkge1xyXG4gICAgICAgIHZhciB2aWRlbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7XHJcbiAgICAgICAgdmlkZW8ubXV0ZWQgPSB0cnVlO1xyXG4gICAgICAgIHZpZGVvLmF1dG9wbGF5ID0gdHJ1ZTtcclxuICAgICAgICB2aWRlby5wbGF5c0lubGluZSA9IHRydWU7XHJcblxyXG4gICAgICAgIGlzTG9hZGVkTWV0YURhdGEgPSBmYWxzZTtcclxuICAgICAgICB2aWRlby5vbmxvYWRlZG1ldGFkYXRhID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGlzTG9hZGVkTWV0YURhdGEgPSB0cnVlO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHNldFNyY09iamVjdChtZWRpYVN0cmVhbSwgdmlkZW8pO1xyXG5cclxuICAgICAgICB2aWRlby5wbGF5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGxhc3RBbmltYXRpb25GcmFtZSA9IG51bGw7XHJcbiAgICB2YXIgc3RhcnRUaW1lLCBlbmRUaW1lLCBsYXN0RnJhbWVUaW1lO1xyXG5cclxuICAgIHZhciBnaWZFbmNvZGVyO1xyXG5cclxuICAgIHZhciBzZWxmID0gdGhpcztcclxufVxyXG5cclxuaWYgKHR5cGVvZiBSZWNvcmRSVEMgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBSZWNvcmRSVEMuR2lmUmVjb3JkZXIgPSBHaWZSZWNvcmRlcjtcclxufVxuXHJcbi8vIExhc3QgdGltZSB1cGRhdGVkOiAyMDE5LTA2LTIxIDQ6MDk6NDIgQU0gVVRDXHJcblxyXG4vLyBfX19fX19fX19fX19fX19fX19fX19fX19cclxuLy8gTXVsdGlTdHJlYW1zTWl4ZXIgdjEuMi4yXHJcblxyXG4vLyBPcGVuLVNvdXJjZWQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWF6LWtoYW4vTXVsdGlTdHJlYW1zTWl4ZXJcclxuXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8vIE11YXogS2hhbiAgICAgLSB3d3cuTXVhektoYW4uY29tXHJcbi8vIE1JVCBMaWNlbnNlICAgLSB3d3cuV2ViUlRDLUV4cGVyaW1lbnQuY29tL2xpY2VuY2VcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbmZ1bmN0aW9uIE11bHRpU3RyZWFtc01peGVyKGFycmF5T2ZNZWRpYVN0cmVhbXMsIGVsZW1lbnRDbGFzcykge1xyXG5cclxuICAgIHZhciBicm93c2VyRmFrZVVzZXJBZ2VudCA9ICdGYWtlLzUuMCAoRmFrZU9TKSBBcHBsZVdlYktpdC8xMjMgKEtIVE1MLCBsaWtlIEdlY2tvKSBGYWtlLzEyLjMuNDU2Ny44OSBGYWtlLzEyMy40NSc7XHJcblxyXG4gICAgKGZ1bmN0aW9uKHRoYXQpIHtcclxuICAgICAgICBpZiAodHlwZW9mIFJlY29yZFJUQyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGF0KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZW9mIGdsb2JhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2xvYmFsLm5hdmlnYXRvciA9IHtcclxuICAgICAgICAgICAgdXNlckFnZW50OiBicm93c2VyRmFrZVVzZXJBZ2VudCxcclxuICAgICAgICAgICAgZ2V0VXNlck1lZGlhOiBmdW5jdGlvbigpIHt9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKCFnbG9iYWwuY29uc29sZSkge1xyXG4gICAgICAgICAgICBnbG9iYWwuY29uc29sZSA9IHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBnbG9iYWwuY29uc29sZS5sb2cgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBnbG9iYWwuY29uc29sZS5lcnJvciA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgZ2xvYmFsLmNvbnNvbGUuZXJyb3IgPSBnbG9iYWwuY29uc29sZS5sb2cgPSBnbG9iYWwuY29uc29sZS5sb2cgfHwgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgLypnbG9iYWwgZG9jdW1lbnQ6dHJ1ZSAqL1xyXG4gICAgICAgICAgICB0aGF0LmRvY3VtZW50ID0ge1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnRFbGVtZW50OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBwZW5kQ2hpbGQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCA9IGRvY3VtZW50LmNhcHR1cmVTdHJlYW0gPSBkb2N1bWVudC5tb3pDYXB0dXJlU3RyZWFtID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgb2JqID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGdldENvbnRleHQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcGxheTogZnVuY3Rpb24oKSB7fSxcclxuICAgICAgICAgICAgICAgICAgICBwYXVzZTogZnVuY3Rpb24oKSB7fSxcclxuICAgICAgICAgICAgICAgICAgICBkcmF3SW1hZ2U6IGZ1bmN0aW9uKCkge30sXHJcbiAgICAgICAgICAgICAgICAgICAgdG9EYXRhVVJMOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHt9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iajtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHRoYXQuSFRNTFZpZGVvRWxlbWVudCA9IGZ1bmN0aW9uKCkge307XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZW9mIGxvY2F0aW9uID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICAvKmdsb2JhbCBsb2NhdGlvbjp0cnVlICovXHJcbiAgICAgICAgICAgIHRoYXQubG9jYXRpb24gPSB7XHJcbiAgICAgICAgICAgICAgICBwcm90b2NvbDogJ2ZpbGU6JyxcclxuICAgICAgICAgICAgICAgIGhyZWY6ICcnLFxyXG4gICAgICAgICAgICAgICAgaGFzaDogJydcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygc2NyZWVuID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICAvKmdsb2JhbCBzY3JlZW46dHJ1ZSAqL1xyXG4gICAgICAgICAgICB0aGF0LnNjcmVlbiA9IHtcclxuICAgICAgICAgICAgICAgIHdpZHRoOiAwLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAwXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZW9mIFVSTCA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgLypnbG9iYWwgc2NyZWVuOnRydWUgKi9cclxuICAgICAgICAgICAgdGhhdC5VUkwgPSB7XHJcbiAgICAgICAgICAgICAgICBjcmVhdGVPYmplY3RVUkw6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICByZXZva2VPYmplY3RVUkw6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qZ2xvYmFsIHdpbmRvdzp0cnVlICovXHJcbiAgICAgICAgdGhhdC53aW5kb3cgPSBnbG9iYWw7XHJcbiAgICB9KSh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6IG51bGwpO1xyXG5cclxuICAgIC8vIHJlcXVpcmVzOiBjaHJvbWU6Ly9mbGFncy8jZW5hYmxlLWV4cGVyaW1lbnRhbC13ZWItcGxhdGZvcm0tZmVhdHVyZXNcclxuXHJcbiAgICBlbGVtZW50Q2xhc3MgPSBlbGVtZW50Q2xhc3MgfHwgJ211bHRpLXN0cmVhbXMtbWl4ZXInO1xyXG5cclxuICAgIHZhciB2aWRlb3MgPSBbXTtcclxuICAgIHZhciBpc1N0b3BEcmF3aW5nRnJhbWVzID0gZmFsc2U7XHJcblxyXG4gICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgIGNhbnZhcy5zdHlsZS5vcGFjaXR5ID0gMDtcclxuICAgIGNhbnZhcy5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XHJcbiAgICBjYW52YXMuc3R5bGUuekluZGV4ID0gLTE7XHJcbiAgICBjYW52YXMuc3R5bGUudG9wID0gJy0xMDAwZW0nO1xyXG4gICAgY2FudmFzLnN0eWxlLmxlZnQgPSAnLTEwMDBlbSc7XHJcbiAgICBjYW52YXMuY2xhc3NOYW1lID0gZWxlbWVudENsYXNzO1xyXG4gICAgKGRvY3VtZW50LmJvZHkgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5hcHBlbmRDaGlsZChjYW52YXMpO1xyXG5cclxuICAgIHRoaXMuZGlzYWJsZUxvZ3MgPSBmYWxzZTtcclxuICAgIHRoaXMuZnJhbWVJbnRlcnZhbCA9IDEwO1xyXG5cclxuICAgIHRoaXMud2lkdGggPSAzNjA7XHJcbiAgICB0aGlzLmhlaWdodCA9IDI0MDtcclxuXHJcbiAgICAvLyB1c2UgZ2FpbiBub2RlIHRvIHByZXZlbnQgZWNob1xyXG4gICAgdGhpcy51c2VHYWluTm9kZSA9IHRydWU7XHJcblxyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgIC8vIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fXHJcbiAgICAvLyBDcm9zcy1Ccm93c2VyLURlY2xhcmF0aW9ucy5qc1xyXG5cclxuICAgIC8vIFdlYkF1ZGlvIEFQSSByZXByZXNlbnRlclxyXG4gICAgdmFyIEF1ZGlvQ29udGV4dCA9IHdpbmRvdy5BdWRpb0NvbnRleHQ7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBBdWRpb0NvbnRleHQgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3ZWJraXRBdWRpb0NvbnRleHQgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIC8qZ2xvYmFsIEF1ZGlvQ29udGV4dDp0cnVlICovXHJcbiAgICAgICAgICAgIEF1ZGlvQ29udGV4dCA9IHdlYmtpdEF1ZGlvQ29udGV4dDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgbW96QXVkaW9Db250ZXh0ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICAvKmdsb2JhbCBBdWRpb0NvbnRleHQ6dHJ1ZSAqL1xyXG4gICAgICAgICAgICBBdWRpb0NvbnRleHQgPSBtb3pBdWRpb0NvbnRleHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qanNoaW50IC1XMDc5ICovXHJcbiAgICB2YXIgVVJMID0gd2luZG93LlVSTDtcclxuXHJcbiAgICBpZiAodHlwZW9mIFVSTCA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdlYmtpdFVSTCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAvKmdsb2JhbCBVUkw6dHJ1ZSAqL1xyXG4gICAgICAgIFVSTCA9IHdlYmtpdFVSTDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG5hdmlnYXRvci5nZXRVc2VyTWVkaWEgPT09ICd1bmRlZmluZWQnKSB7IC8vIG1heWJlIHdpbmRvdy5uYXZpZ2F0b3I/XHJcbiAgICAgICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3Iud2Via2l0R2V0VXNlck1lZGlhICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICBuYXZpZ2F0b3IuZ2V0VXNlck1lZGlhID0gbmF2aWdhdG9yLndlYmtpdEdldFVzZXJNZWRpYTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgbmF2aWdhdG9yLm1vekdldFVzZXJNZWRpYSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgbmF2aWdhdG9yLmdldFVzZXJNZWRpYSA9IG5hdmlnYXRvci5tb3pHZXRVc2VyTWVkaWE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhciBNZWRpYVN0cmVhbSA9IHdpbmRvdy5NZWRpYVN0cmVhbTtcclxuXHJcbiAgICBpZiAodHlwZW9mIE1lZGlhU3RyZWFtID09PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2Via2l0TWVkaWFTdHJlYW0gIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgTWVkaWFTdHJlYW0gPSB3ZWJraXRNZWRpYVN0cmVhbTtcclxuICAgIH1cclxuXHJcbiAgICAvKmdsb2JhbCBNZWRpYVN0cmVhbTp0cnVlICovXHJcbiAgICBpZiAodHlwZW9mIE1lZGlhU3RyZWFtICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIC8vIG92ZXJyaWRlIFwic3RvcFwiIG1ldGhvZCBmb3IgYWxsIGJyb3dzZXJzXHJcbiAgICAgICAgaWYgKHR5cGVvZiBNZWRpYVN0cmVhbS5wcm90b3R5cGUuc3RvcCA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgTWVkaWFTdHJlYW0ucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0VHJhY2tzKCkuZm9yRWFjaChmdW5jdGlvbih0cmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyYWNrLnN0b3AoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB2YXIgU3RvcmFnZSA9IHt9O1xyXG5cclxuICAgIGlmICh0eXBlb2YgQXVkaW9Db250ZXh0ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIFN0b3JhZ2UuQXVkaW9Db250ZXh0ID0gQXVkaW9Db250ZXh0O1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygd2Via2l0QXVkaW9Db250ZXh0ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIFN0b3JhZ2UuQXVkaW9Db250ZXh0ID0gd2Via2l0QXVkaW9Db250ZXh0O1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHNldFNyY09iamVjdChzdHJlYW0sIGVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoJ3NyY09iamVjdCcgaW4gZWxlbWVudCkge1xyXG4gICAgICAgICAgICBlbGVtZW50LnNyY09iamVjdCA9IHN0cmVhbTtcclxuICAgICAgICB9IGVsc2UgaWYgKCdtb3pTcmNPYmplY3QnIGluIGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZWxlbWVudC5tb3pTcmNPYmplY3QgPSBzdHJlYW07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZWxlbWVudC5zcmNPYmplY3QgPSBzdHJlYW07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RhcnREcmF3aW5nRnJhbWVzID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgZHJhd1ZpZGVvc1RvQ2FudmFzKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGZ1bmN0aW9uIGRyYXdWaWRlb3NUb0NhbnZhcygpIHtcclxuICAgICAgICBpZiAoaXNTdG9wRHJhd2luZ0ZyYW1lcykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgdmlkZW9zTGVuZ3RoID0gdmlkZW9zLmxlbmd0aDtcclxuXHJcbiAgICAgICAgdmFyIGZ1bGxjYW52YXMgPSBmYWxzZTtcclxuICAgICAgICB2YXIgcmVtYWluaW5nID0gW107XHJcbiAgICAgICAgdmlkZW9zLmZvckVhY2goZnVuY3Rpb24odmlkZW8pIHtcclxuICAgICAgICAgICAgaWYgKCF2aWRlby5zdHJlYW0pIHtcclxuICAgICAgICAgICAgICAgIHZpZGVvLnN0cmVhbSA9IHt9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodmlkZW8uc3RyZWFtLmZ1bGxjYW52YXMpIHtcclxuICAgICAgICAgICAgICAgIGZ1bGxjYW52YXMgPSB2aWRlbztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIHRvZG86IHZpZGVvLnN0cmVhbS5hY3RpdmUgb3IgdmlkZW8uc3RyZWFtLmxpdmUgdG8gZml4IGJsYW5rIGZyYW1lcyBpc3N1ZXM/XHJcbiAgICAgICAgICAgICAgICByZW1haW5pbmcucHVzaCh2aWRlbyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKGZ1bGxjYW52YXMpIHtcclxuICAgICAgICAgICAgY2FudmFzLndpZHRoID0gZnVsbGNhbnZhcy5zdHJlYW0ud2lkdGg7XHJcbiAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBmdWxsY2FudmFzLnN0cmVhbS5oZWlnaHQ7XHJcbiAgICAgICAgfSBlbHNlIGlmIChyZW1haW5pbmcubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHZpZGVvc0xlbmd0aCA+IDEgPyByZW1haW5pbmdbMF0ud2lkdGggKiAyIDogcmVtYWluaW5nWzBdLndpZHRoO1xyXG5cclxuICAgICAgICAgICAgdmFyIGhlaWdodCA9IDE7XHJcbiAgICAgICAgICAgIGlmICh2aWRlb3NMZW5ndGggPT09IDMgfHwgdmlkZW9zTGVuZ3RoID09PSA0KSB7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSAyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh2aWRlb3NMZW5ndGggPT09IDUgfHwgdmlkZW9zTGVuZ3RoID09PSA2KSB7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSAzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh2aWRlb3NMZW5ndGggPT09IDcgfHwgdmlkZW9zTGVuZ3RoID09PSA4KSB7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSA0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh2aWRlb3NMZW5ndGggPT09IDkgfHwgdmlkZW9zTGVuZ3RoID09PSAxMCkge1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0ID0gNTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gcmVtYWluaW5nWzBdLmhlaWdodCAqIGhlaWdodDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjYW52YXMud2lkdGggPSBzZWxmLndpZHRoIHx8IDM2MDtcclxuICAgICAgICAgICAgY2FudmFzLmhlaWdodCA9IHNlbGYuaGVpZ2h0IHx8IDI0MDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmdWxsY2FudmFzICYmIGZ1bGxjYW52YXMgaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGRyYXdJbWFnZShmdWxsY2FudmFzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlbWFpbmluZy5mb3JFYWNoKGZ1bmN0aW9uKHZpZGVvLCBpZHgpIHtcclxuICAgICAgICAgICAgZHJhd0ltYWdlKHZpZGVvLCBpZHgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KGRyYXdWaWRlb3NUb0NhbnZhcywgc2VsZi5mcmFtZUludGVydmFsKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBkcmF3SW1hZ2UodmlkZW8sIGlkeCkge1xyXG4gICAgICAgIGlmIChpc1N0b3BEcmF3aW5nRnJhbWVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB4ID0gMDtcclxuICAgICAgICB2YXIgeSA9IDA7XHJcbiAgICAgICAgdmFyIHdpZHRoID0gdmlkZW8ud2lkdGg7XHJcbiAgICAgICAgdmFyIGhlaWdodCA9IHZpZGVvLmhlaWdodDtcclxuXHJcbiAgICAgICAgaWYgKGlkeCA9PT0gMSkge1xyXG4gICAgICAgICAgICB4ID0gdmlkZW8ud2lkdGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWR4ID09PSAyKSB7XHJcbiAgICAgICAgICAgIHkgPSB2aWRlby5oZWlnaHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWR4ID09PSAzKSB7XHJcbiAgICAgICAgICAgIHggPSB2aWRlby53aWR0aDtcclxuICAgICAgICAgICAgeSA9IHZpZGVvLmhlaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZHggPT09IDQpIHtcclxuICAgICAgICAgICAgeSA9IHZpZGVvLmhlaWdodCAqIDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWR4ID09PSA1KSB7XHJcbiAgICAgICAgICAgIHggPSB2aWRlby53aWR0aDtcclxuICAgICAgICAgICAgeSA9IHZpZGVvLmhlaWdodCAqIDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaWR4ID09PSA2KSB7XHJcbiAgICAgICAgICAgIHkgPSB2aWRlby5oZWlnaHQgKiAzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGlkeCA9PT0gNykge1xyXG4gICAgICAgICAgICB4ID0gdmlkZW8ud2lkdGg7XHJcbiAgICAgICAgICAgIHkgPSB2aWRlby5oZWlnaHQgKiAzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB2aWRlby5zdHJlYW0ubGVmdCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgeCA9IHZpZGVvLnN0cmVhbS5sZWZ0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB2aWRlby5zdHJlYW0udG9wICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICB5ID0gdmlkZW8uc3RyZWFtLnRvcDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgdmlkZW8uc3RyZWFtLndpZHRoICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICB3aWR0aCA9IHZpZGVvLnN0cmVhbS53aWR0aDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgdmlkZW8uc3RyZWFtLmhlaWdodCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gdmlkZW8uc3RyZWFtLmhlaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKHZpZGVvLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB2aWRlby5zdHJlYW0ub25SZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgdmlkZW8uc3RyZWFtLm9uUmVuZGVyKGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGlkeCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdldE1peGVkU3RyZWFtKCkge1xyXG4gICAgICAgIGlzU3RvcERyYXdpbmdGcmFtZXMgPSBmYWxzZTtcclxuICAgICAgICB2YXIgbWl4ZWRWaWRlb1N0cmVhbSA9IGdldE1peGVkVmlkZW9TdHJlYW0oKTtcclxuXHJcbiAgICAgICAgdmFyIG1peGVkQXVkaW9TdHJlYW0gPSBnZXRNaXhlZEF1ZGlvU3RyZWFtKCk7XHJcbiAgICAgICAgaWYgKG1peGVkQXVkaW9TdHJlYW0pIHtcclxuICAgICAgICAgICAgbWl4ZWRBdWRpb1N0cmVhbS5nZXRUcmFja3MoKS5maWx0ZXIoZnVuY3Rpb24odCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHQua2luZCA9PT0gJ2F1ZGlvJztcclxuICAgICAgICAgICAgfSkuZm9yRWFjaChmdW5jdGlvbih0cmFjaykge1xyXG4gICAgICAgICAgICAgICAgbWl4ZWRWaWRlb1N0cmVhbS5hZGRUcmFjayh0cmFjayk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGZ1bGxjYW52YXM7XHJcbiAgICAgICAgYXJyYXlPZk1lZGlhU3RyZWFtcy5mb3JFYWNoKGZ1bmN0aW9uKHN0cmVhbSkge1xyXG4gICAgICAgICAgICBpZiAoc3RyZWFtLmZ1bGxjYW52YXMpIHtcclxuICAgICAgICAgICAgICAgIGZ1bGxjYW52YXMgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIG1peGVkVmlkZW9TdHJlYW0ucHJvdG90eXBlLmFwcGVuZFN0cmVhbXMgPSBhcHBlbmRTdHJlYW1zO1xyXG4gICAgICAgIC8vIG1peGVkVmlkZW9TdHJlYW0ucHJvdG90eXBlLnJlc2V0VmlkZW9TdHJlYW1zID0gcmVzZXRWaWRlb1N0cmVhbXM7XHJcbiAgICAgICAgLy8gbWl4ZWRWaWRlb1N0cmVhbS5wcm90b3R5cGUuY2xlYXJSZWNvcmRlZERhdGEgPSBjbGVhclJlY29yZGVkRGF0YTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG1peGVkVmlkZW9TdHJlYW07XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0TWl4ZWRWaWRlb1N0cmVhbSgpIHtcclxuICAgICAgICByZXNldFZpZGVvU3RyZWFtcygpO1xyXG5cclxuICAgICAgICB2YXIgY2FwdHVyZWRTdHJlYW07XHJcblxyXG4gICAgICAgIGlmICgnY2FwdHVyZVN0cmVhbScgaW4gY2FudmFzKSB7XHJcbiAgICAgICAgICAgIGNhcHR1cmVkU3RyZWFtID0gY2FudmFzLmNhcHR1cmVTdHJlYW0oKTtcclxuICAgICAgICB9IGVsc2UgaWYgKCdtb3pDYXB0dXJlU3RyZWFtJyBpbiBjYW52YXMpIHtcclxuICAgICAgICAgICAgY2FwdHVyZWRTdHJlYW0gPSBjYW52YXMubW96Q2FwdHVyZVN0cmVhbSgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIXNlbGYuZGlzYWJsZUxvZ3MpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignVXBncmFkZSB0byBsYXRlc3QgQ2hyb21lIG9yIG90aGVyd2lzZSBlbmFibGUgdGhpcyBmbGFnOiBjaHJvbWU6Ly9mbGFncy8jZW5hYmxlLWV4cGVyaW1lbnRhbC13ZWItcGxhdGZvcm0tZmVhdHVyZXMnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB2aWRlb1N0cmVhbSA9IG5ldyBNZWRpYVN0cmVhbSgpO1xyXG5cclxuICAgICAgICBjYXB0dXJlZFN0cmVhbS5nZXRUcmFja3MoKS5maWx0ZXIoZnVuY3Rpb24odCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdC5raW5kID09PSAndmlkZW8nO1xyXG4gICAgICAgIH0pLmZvckVhY2goZnVuY3Rpb24odHJhY2spIHtcclxuICAgICAgICAgICAgdmlkZW9TdHJlYW0uYWRkVHJhY2sodHJhY2spO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjYW52YXMuc3RyZWFtID0gdmlkZW9TdHJlYW07XHJcblxyXG4gICAgICAgIHJldHVybiB2aWRlb1N0cmVhbTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRNaXhlZEF1ZGlvU3RyZWFtKCkge1xyXG4gICAgICAgIC8vIHZpYTogQHBlaHJzb25zXHJcbiAgICAgICAgaWYgKCFTdG9yYWdlLkF1ZGlvQ29udGV4dENvbnN0cnVjdG9yKSB7XHJcbiAgICAgICAgICAgIFN0b3JhZ2UuQXVkaW9Db250ZXh0Q29uc3RydWN0b3IgPSBuZXcgU3RvcmFnZS5BdWRpb0NvbnRleHQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNlbGYuYXVkaW9Db250ZXh0ID0gU3RvcmFnZS5BdWRpb0NvbnRleHRDb25zdHJ1Y3RvcjtcclxuXHJcbiAgICAgICAgc2VsZi5hdWRpb1NvdXJjZXMgPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKHNlbGYudXNlR2Fpbk5vZGUgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgc2VsZi5nYWluTm9kZSA9IHNlbGYuYXVkaW9Db250ZXh0LmNyZWF0ZUdhaW4oKTtcclxuICAgICAgICAgICAgc2VsZi5nYWluTm9kZS5jb25uZWN0KHNlbGYuYXVkaW9Db250ZXh0LmRlc3RpbmF0aW9uKTtcclxuICAgICAgICAgICAgc2VsZi5nYWluTm9kZS5nYWluLnZhbHVlID0gMDsgLy8gZG9uJ3QgaGVhciBzZWxmXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgYXVkaW9UcmFja3NMZW5ndGggPSAwO1xyXG4gICAgICAgIGFycmF5T2ZNZWRpYVN0cmVhbXMuZm9yRWFjaChmdW5jdGlvbihzdHJlYW0pIHtcclxuICAgICAgICAgICAgaWYgKCFzdHJlYW0uZ2V0VHJhY2tzKCkuZmlsdGVyKGZ1bmN0aW9uKHQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdC5raW5kID09PSAnYXVkaW8nO1xyXG4gICAgICAgICAgICAgICAgfSkubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGF1ZGlvVHJhY2tzTGVuZ3RoKys7XHJcblxyXG4gICAgICAgICAgICB2YXIgYXVkaW9Tb3VyY2UgPSBzZWxmLmF1ZGlvQ29udGV4dC5jcmVhdGVNZWRpYVN0cmVhbVNvdXJjZShzdHJlYW0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNlbGYudXNlR2Fpbk5vZGUgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgIGF1ZGlvU291cmNlLmNvbm5lY3Qoc2VsZi5nYWluTm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHNlbGYuYXVkaW9Tb3VyY2VzLnB1c2goYXVkaW9Tb3VyY2UpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoIWF1ZGlvVHJhY2tzTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIC8vIGJlY2F1c2UgXCJzZWxmLmF1ZGlvQ29udGV4dFwiIGlzIG5vdCBpbml0aWFsaXplZFxyXG4gICAgICAgICAgICAvLyB0aGF0J3Mgd2h5IHdlJ3ZlIHRvIGlnbm9yZSByZXN0IG9mIHRoZSBjb2RlXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNlbGYuYXVkaW9EZXN0aW5hdGlvbiA9IHNlbGYuYXVkaW9Db250ZXh0LmNyZWF0ZU1lZGlhU3RyZWFtRGVzdGluYXRpb24oKTtcclxuICAgICAgICBzZWxmLmF1ZGlvU291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uKGF1ZGlvU291cmNlKSB7XHJcbiAgICAgICAgICAgIGF1ZGlvU291cmNlLmNvbm5lY3Qoc2VsZi5hdWRpb0Rlc3RpbmF0aW9uKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gc2VsZi5hdWRpb0Rlc3RpbmF0aW9uLnN0cmVhbTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRWaWRlbyhzdHJlYW0pIHtcclxuICAgICAgICB2YXIgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xyXG5cclxuICAgICAgICBzZXRTcmNPYmplY3Qoc3RyZWFtLCB2aWRlbyk7XHJcblxyXG4gICAgICAgIHZpZGVvLmNsYXNzTmFtZSA9IGVsZW1lbnRDbGFzcztcclxuXHJcbiAgICAgICAgdmlkZW8ubXV0ZWQgPSB0cnVlO1xyXG4gICAgICAgIHZpZGVvLnZvbHVtZSA9IDA7XHJcblxyXG4gICAgICAgIHZpZGVvLndpZHRoID0gc3RyZWFtLndpZHRoIHx8IHNlbGYud2lkdGggfHwgMzYwO1xyXG4gICAgICAgIHZpZGVvLmhlaWdodCA9IHN0cmVhbS5oZWlnaHQgfHwgc2VsZi5oZWlnaHQgfHwgMjQwO1xyXG5cclxuICAgICAgICB2aWRlby5wbGF5KCk7XHJcblxyXG4gICAgICAgIHJldHVybiB2aWRlbztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFwcGVuZFN0cmVhbXMgPSBmdW5jdGlvbihzdHJlYW1zKSB7XHJcbiAgICAgICAgaWYgKCFzdHJlYW1zKSB7XHJcbiAgICAgICAgICAgIHRocm93ICdGaXJzdCBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQuJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghKHN0cmVhbXMgaW5zdGFuY2VvZiBBcnJheSkpIHtcclxuICAgICAgICAgICAgc3RyZWFtcyA9IFtzdHJlYW1zXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0cmVhbXMuZm9yRWFjaChmdW5jdGlvbihzdHJlYW0pIHtcclxuICAgICAgICAgICAgdmFyIG5ld1N0cmVhbSA9IG5ldyBNZWRpYVN0cmVhbSgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHN0cmVhbS5nZXRUcmFja3MoKS5maWx0ZXIoZnVuY3Rpb24odCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0LmtpbmQgPT09ICd2aWRlbyc7XHJcbiAgICAgICAgICAgICAgICB9KS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2aWRlbyA9IGdldFZpZGVvKHN0cmVhbSk7XHJcbiAgICAgICAgICAgICAgICB2aWRlby5zdHJlYW0gPSBzdHJlYW07XHJcbiAgICAgICAgICAgICAgICB2aWRlb3MucHVzaCh2aWRlbyk7XHJcblxyXG4gICAgICAgICAgICAgICAgbmV3U3RyZWFtLmFkZFRyYWNrKHN0cmVhbS5nZXRUcmFja3MoKS5maWx0ZXIoZnVuY3Rpb24odCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0LmtpbmQgPT09ICd2aWRlbyc7XHJcbiAgICAgICAgICAgICAgICB9KVswXSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzdHJlYW0uZ2V0VHJhY2tzKCkuZmlsdGVyKGZ1bmN0aW9uKHQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdC5raW5kID09PSAnYXVkaW8nO1xyXG4gICAgICAgICAgICAgICAgfSkubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYXVkaW9Tb3VyY2UgPSBzZWxmLmF1ZGlvQ29udGV4dC5jcmVhdGVNZWRpYVN0cmVhbVNvdXJjZShzdHJlYW0pO1xyXG4gICAgICAgICAgICAgICAgc2VsZi5hdWRpb0Rlc3RpbmF0aW9uID0gc2VsZi5hdWRpb0NvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1EZXN0aW5hdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgYXVkaW9Tb3VyY2UuY29ubmVjdChzZWxmLmF1ZGlvRGVzdGluYXRpb24pO1xyXG5cclxuICAgICAgICAgICAgICAgIG5ld1N0cmVhbS5hZGRUcmFjayhzZWxmLmF1ZGlvRGVzdGluYXRpb24uc3RyZWFtLmdldFRyYWNrcygpLmZpbHRlcihmdW5jdGlvbih0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHQua2luZCA9PT0gJ2F1ZGlvJztcclxuICAgICAgICAgICAgICAgIH0pWzBdKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYXJyYXlPZk1lZGlhU3RyZWFtcy5wdXNoKG5ld1N0cmVhbSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMucmVsZWFzZVN0cmVhbXMgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICB2aWRlb3MgPSBbXTtcclxuICAgICAgICBpc1N0b3BEcmF3aW5nRnJhbWVzID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHNlbGYuZ2Fpbk5vZGUpIHtcclxuICAgICAgICAgICAgc2VsZi5nYWluTm9kZS5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgICAgIHNlbGYuZ2Fpbk5vZGUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNlbGYuYXVkaW9Tb3VyY2VzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBzZWxmLmF1ZGlvU291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uKHNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgc291cmNlLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHNlbGYuYXVkaW9Tb3VyY2VzID0gW107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2VsZi5hdWRpb0Rlc3RpbmF0aW9uKSB7XHJcbiAgICAgICAgICAgIHNlbGYuYXVkaW9EZXN0aW5hdGlvbi5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgICAgIHNlbGYuYXVkaW9EZXN0aW5hdGlvbiA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2VsZi5hdWRpb0NvbnRleHQpIHtcclxuICAgICAgICAgICAgc2VsZi5hdWRpb0NvbnRleHQuY2xvc2UoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNlbGYuYXVkaW9Db250ZXh0ID0gbnVsbDtcclxuXHJcbiAgICAgICAgY29udGV4dC5jbGVhclJlY3QoMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgaWYgKGNhbnZhcy5zdHJlYW0pIHtcclxuICAgICAgICAgICAgY2FudmFzLnN0cmVhbS5zdG9wKCk7XHJcbiAgICAgICAgICAgIGNhbnZhcy5zdHJlYW0gPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5yZXNldFZpZGVvU3RyZWFtcyA9IGZ1bmN0aW9uKHN0cmVhbXMpIHtcclxuICAgICAgICBpZiAoc3RyZWFtcyAmJiAhKHN0cmVhbXMgaW5zdGFuY2VvZiBBcnJheSkpIHtcclxuICAgICAgICAgICAgc3RyZWFtcyA9IFtzdHJlYW1zXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlc2V0VmlkZW9TdHJlYW1zKHN0cmVhbXMpO1xyXG4gICAgfTtcclxuXHJcbiAgICBmdW5jdGlvbiByZXNldFZpZGVvU3RyZWFtcyhzdHJlYW1zKSB7XHJcbiAgICAgICAgdmlkZW9zID0gW107XHJcbiAgICAgICAgc3RyZWFtcyA9IHN0cmVhbXMgfHwgYXJyYXlPZk1lZGlhU3RyZWFtcztcclxuXHJcbiAgICAgICAgLy8gdmlhOiBAYWRyaWFuLWJlclxyXG4gICAgICAgIHN0cmVhbXMuZm9yRWFjaChmdW5jdGlvbihzdHJlYW0pIHtcclxuICAgICAgICAgICAgaWYgKCFzdHJlYW0uZ2V0VHJhY2tzKCkuZmlsdGVyKGZ1bmN0aW9uKHQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdC5raW5kID09PSAndmlkZW8nO1xyXG4gICAgICAgICAgICAgICAgfSkubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciB2aWRlbyA9IGdldFZpZGVvKHN0cmVhbSk7XHJcbiAgICAgICAgICAgIHZpZGVvLnN0cmVhbSA9IHN0cmVhbTtcclxuICAgICAgICAgICAgdmlkZW9zLnB1c2godmlkZW8pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGZvciBkZWJ1Z2dpbmdcclxuICAgIHRoaXMubmFtZSA9ICdNdWx0aVN0cmVhbXNNaXhlcic7XHJcbiAgICB0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5nZXRNaXhlZFN0cmVhbSA9IGdldE1peGVkU3RyZWFtO1xyXG5cclxufVxyXG5cclxuaWYgKHR5cGVvZiBSZWNvcmRSVEMgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgLyogJiYgISFtb2R1bGUuZXhwb3J0cyovICkge1xyXG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gTXVsdGlTdHJlYW1zTWl4ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xyXG4gICAgICAgIGRlZmluZSgnTXVsdGlTdHJlYW1zTWl4ZXInLCBbXSwgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBNdWx0aVN0cmVhbXNNaXhlcjtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxuXHJcbi8vIF9fX19fX19fX19fX19fX19fX19fX19cclxuLy8gTXVsdGlTdHJlYW1SZWNvcmRlci5qc1xyXG5cclxuLypcclxuICogVmlkZW8gY29uZmVyZW5jZSByZWNvcmRpbmcsIHVzaW5nIGNhcHR1cmVTdHJlYW0gQVBJIGFsb25nIHdpdGggV2ViQXVkaW8gYW5kIENhbnZhczJEIEFQSS5cclxuICovXHJcblxyXG4vKipcclxuICogTXVsdGlTdHJlYW1SZWNvcmRlciBjYW4gcmVjb3JkIG11bHRpcGxlIHZpZGVvcyBpbiBzaW5nbGUgY29udGFpbmVyLlxyXG4gKiBAc3VtbWFyeSBNdWx0aS12aWRlb3MgcmVjb3JkZXIuXHJcbiAqIEBsaWNlbnNlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbXVhei1raGFuL1JlY29yZFJUQy9ibG9iL21hc3Rlci9MSUNFTlNFfE1JVH1cclxuICogQGF1dGhvciB7QGxpbmsgaHR0cHM6Ly9NdWF6S2hhbi5jb218TXVheiBLaGFufVxyXG4gKiBAdHlwZWRlZiBNdWx0aVN0cmVhbVJlY29yZGVyXHJcbiAqIEBjbGFzc1xyXG4gKiBAZXhhbXBsZVxyXG4gKiB2YXIgb3B0aW9ucyA9IHtcclxuICogICAgIG1pbWVUeXBlOiAndmlkZW8vd2VibSdcclxuICogfVxyXG4gKiB2YXIgcmVjb3JkZXIgPSBuZXcgTXVsdGlTdHJlYW1SZWNvcmRlcihBcnJheU9mTWVkaWFTdHJlYW1zLCBvcHRpb25zKTtcclxuICogcmVjb3JkZXIucmVjb3JkKCk7XHJcbiAqIHJlY29yZGVyLnN0b3AoZnVuY3Rpb24oYmxvYikge1xyXG4gKiAgICAgdmlkZW8uc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICpcclxuICogICAgIC8vIG9yXHJcbiAqICAgICB2YXIgYmxvYiA9IHJlY29yZGVyLmJsb2I7XHJcbiAqIH0pO1xyXG4gKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbXVhei1raGFuL1JlY29yZFJUQ3xSZWNvcmRSVEMgU291cmNlIENvZGV9XHJcbiAqIEBwYXJhbSB7TWVkaWFTdHJlYW1zfSBtZWRpYVN0cmVhbXMgLSBBcnJheSBvZiBNZWRpYVN0cmVhbXMuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgLSB7ZGlzYWJsZUxvZ3M6dHJ1ZSwgZnJhbWVJbnRlcnZhbDogMSwgbWltZVR5cGU6IFwidmlkZW8vd2VibVwifVxyXG4gKi9cclxuXHJcbmZ1bmN0aW9uIE11bHRpU3RyZWFtUmVjb3JkZXIoYXJyYXlPZk1lZGlhU3RyZWFtcywgb3B0aW9ucykge1xyXG4gICAgYXJyYXlPZk1lZGlhU3RyZWFtcyA9IGFycmF5T2ZNZWRpYVN0cmVhbXMgfHwgW107XHJcbiAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgdmFyIG1peGVyO1xyXG4gICAgdmFyIG1lZGlhUmVjb3JkZXI7XHJcblxyXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge1xyXG4gICAgICAgIGVsZW1lbnRDbGFzczogJ211bHRpLXN0cmVhbXMtbWl4ZXInLFxyXG4gICAgICAgIG1pbWVUeXBlOiAndmlkZW8vd2VibScsXHJcbiAgICAgICAgdmlkZW86IHtcclxuICAgICAgICAgICAgd2lkdGg6IDM2MCxcclxuICAgICAgICAgICAgaGVpZ2h0OiAyNDBcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGlmICghb3B0aW9ucy5mcmFtZUludGVydmFsKSB7XHJcbiAgICAgICAgb3B0aW9ucy5mcmFtZUludGVydmFsID0gMTA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFvcHRpb25zLnZpZGVvKSB7XHJcbiAgICAgICAgb3B0aW9ucy52aWRlbyA9IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghb3B0aW9ucy52aWRlby53aWR0aCkge1xyXG4gICAgICAgIG9wdGlvbnMudmlkZW8ud2lkdGggPSAzNjA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFvcHRpb25zLnZpZGVvLmhlaWdodCkge1xyXG4gICAgICAgIG9wdGlvbnMudmlkZW8uaGVpZ2h0ID0gMjQwO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgcmVjb3JkcyBhbGwgTWVkaWFTdHJlYW1zLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIE11bHRpU3RyZWFtUmVjb3JkZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5yZWNvcmQoKTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5yZWNvcmQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAvLyBnaXRodWIvbXVhei1raGFuL011bHRpU3RyZWFtc01peGVyXHJcbiAgICAgICAgbWl4ZXIgPSBuZXcgTXVsdGlTdHJlYW1zTWl4ZXIoYXJyYXlPZk1lZGlhU3RyZWFtcywgb3B0aW9ucy5lbGVtZW50Q2xhc3MgfHwgJ211bHRpLXN0cmVhbXMtbWl4ZXInKTtcclxuXHJcbiAgICAgICAgaWYgKGdldEFsbFZpZGVvVHJhY2tzKCkubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIG1peGVyLmZyYW1lSW50ZXJ2YWwgPSBvcHRpb25zLmZyYW1lSW50ZXJ2YWwgfHwgMTA7XHJcbiAgICAgICAgICAgIG1peGVyLndpZHRoID0gb3B0aW9ucy52aWRlby53aWR0aCB8fCAzNjA7XHJcbiAgICAgICAgICAgIG1peGVyLmhlaWdodCA9IG9wdGlvbnMudmlkZW8uaGVpZ2h0IHx8IDI0MDtcclxuICAgICAgICAgICAgbWl4ZXIuc3RhcnREcmF3aW5nRnJhbWVzKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAob3B0aW9ucy5wcmV2aWV3U3RyZWFtICYmIHR5cGVvZiBvcHRpb25zLnByZXZpZXdTdHJlYW0gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgb3B0aW9ucy5wcmV2aWV3U3RyZWFtKG1peGVyLmdldE1peGVkU3RyZWFtKCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcmVjb3JkIHVzaW5nIE1lZGlhUmVjb3JkZXIgQVBJXHJcbiAgICAgICAgbWVkaWFSZWNvcmRlciA9IG5ldyBNZWRpYVN0cmVhbVJlY29yZGVyKG1peGVyLmdldE1peGVkU3RyZWFtKCksIG9wdGlvbnMpO1xyXG4gICAgICAgIG1lZGlhUmVjb3JkZXIucmVjb3JkKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGZ1bmN0aW9uIGdldEFsbFZpZGVvVHJhY2tzKCkge1xyXG4gICAgICAgIHZhciB0cmFja3MgPSBbXTtcclxuICAgICAgICBhcnJheU9mTWVkaWFTdHJlYW1zLmZvckVhY2goZnVuY3Rpb24oc3RyZWFtKSB7XHJcbiAgICAgICAgICAgIGdldFRyYWNrcyhzdHJlYW0sICd2aWRlbycpLmZvckVhY2goZnVuY3Rpb24odHJhY2spIHtcclxuICAgICAgICAgICAgICAgIHRyYWNrcy5wdXNoKHRyYWNrKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRyYWNrcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHN0b3BzIHJlY29yZGluZyBNZWRpYVN0cmVhbS5cclxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gQ2FsbGJhY2sgZnVuY3Rpb24sIHRoYXQgaXMgdXNlZCB0byBwYXNzIHJlY29yZGVkIGJsb2IgYmFjayB0byB0aGUgY2FsbGVlLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIE11bHRpU3RyZWFtUmVjb3JkZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5zdG9wKGZ1bmN0aW9uKGJsb2IpIHtcclxuICAgICAqICAgICB2aWRlby5zcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgICogfSk7XHJcbiAgICAgKi9cclxuICAgIHRoaXMuc3RvcCA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgaWYgKCFtZWRpYVJlY29yZGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG1lZGlhUmVjb3JkZXIuc3RvcChmdW5jdGlvbihibG9iKSB7XHJcbiAgICAgICAgICAgIHNlbGYuYmxvYiA9IGJsb2I7XHJcblxyXG4gICAgICAgICAgICBjYWxsYmFjayhibG9iKTtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuY2xlYXJSZWNvcmRlZERhdGEoKTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBwYXVzZXMgdGhlIHJlY29yZGluZyBwcm9jZXNzLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIE11bHRpU3RyZWFtUmVjb3JkZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5wYXVzZSgpO1xyXG4gICAgICovXHJcbiAgICB0aGlzLnBhdXNlID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKG1lZGlhUmVjb3JkZXIpIHtcclxuICAgICAgICAgICAgbWVkaWFSZWNvcmRlci5wYXVzZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCByZXN1bWVzIHRoZSByZWNvcmRpbmcgcHJvY2Vzcy5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBNdWx0aVN0cmVhbVJlY29yZGVyXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIucmVzdW1lKCk7XHJcbiAgICAgKi9cclxuICAgIHRoaXMucmVzdW1lID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKG1lZGlhUmVjb3JkZXIpIHtcclxuICAgICAgICAgICAgbWVkaWFSZWNvcmRlci5yZXN1bWUoKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgcmVzZXRzIGN1cnJlbnRseSByZWNvcmRlZCBkYXRhLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIE11bHRpU3RyZWFtUmVjb3JkZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5jbGVhclJlY29yZGVkRGF0YSgpO1xyXG4gICAgICovXHJcbiAgICB0aGlzLmNsZWFyUmVjb3JkZWREYXRhID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKG1lZGlhUmVjb3JkZXIpIHtcclxuICAgICAgICAgICAgbWVkaWFSZWNvcmRlci5jbGVhclJlY29yZGVkRGF0YSgpO1xyXG4gICAgICAgICAgICBtZWRpYVJlY29yZGVyID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChtaXhlcikge1xyXG4gICAgICAgICAgICBtaXhlci5yZWxlYXNlU3RyZWFtcygpO1xyXG4gICAgICAgICAgICBtaXhlciA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZCBleHRyYSBtZWRpYS1zdHJlYW1zIHRvIGV4aXN0aW5nIHJlY29yZGluZ3MuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgTXVsdGlTdHJlYW1SZWNvcmRlclxyXG4gICAgICogQHBhcmFtIHtNZWRpYVN0cmVhbXN9IG1lZGlhU3RyZWFtcyAtIEFycmF5IG9mIE1lZGlhU3RyZWFtc1xyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHJlY29yZGVyLmFkZFN0cmVhbXMoW25ld0F1ZGlvU3RyZWFtLCBuZXdWaWRlb1N0cmVhbV0pO1xyXG4gICAgICovXHJcbiAgICB0aGlzLmFkZFN0cmVhbXMgPSBmdW5jdGlvbihzdHJlYW1zKSB7XHJcbiAgICAgICAgaWYgKCFzdHJlYW1zKSB7XHJcbiAgICAgICAgICAgIHRocm93ICdGaXJzdCBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQuJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghKHN0cmVhbXMgaW5zdGFuY2VvZiBBcnJheSkpIHtcclxuICAgICAgICAgICAgc3RyZWFtcyA9IFtzdHJlYW1zXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFycmF5T2ZNZWRpYVN0cmVhbXMuY29uY2F0KHN0cmVhbXMpO1xyXG5cclxuICAgICAgICBpZiAoIW1lZGlhUmVjb3JkZXIgfHwgIW1peGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG1peGVyLmFwcGVuZFN0cmVhbXMoc3RyZWFtcyk7XHJcblxyXG4gICAgICAgIGlmIChvcHRpb25zLnByZXZpZXdTdHJlYW0gJiYgdHlwZW9mIG9wdGlvbnMucHJldmlld1N0cmVhbSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICBvcHRpb25zLnByZXZpZXdTdHJlYW0obWl4ZXIuZ2V0TWl4ZWRTdHJlYW0oKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc2V0IHZpZGVvcyBkdXJpbmcgbGl2ZSByZWNvcmRpbmcuIFJlcGxhY2Ugb2xkIHZpZGVvcyBlLmcuIHJlcGxhY2UgY2FtZXJhcyB3aXRoIGZ1bGwtc2NyZWVuLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIE11bHRpU3RyZWFtUmVjb3JkZXJcclxuICAgICAqIEBwYXJhbSB7TWVkaWFTdHJlYW1zfSBtZWRpYVN0cmVhbXMgLSBBcnJheSBvZiBNZWRpYVN0cmVhbXNcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5yZXNldFZpZGVvU3RyZWFtcyhbbmV3VmlkZW8xLCBuZXdWaWRlbzJdKTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5yZXNldFZpZGVvU3RyZWFtcyA9IGZ1bmN0aW9uKHN0cmVhbXMpIHtcclxuICAgICAgICBpZiAoIW1peGVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzdHJlYW1zICYmICEoc3RyZWFtcyBpbnN0YW5jZW9mIEFycmF5KSkge1xyXG4gICAgICAgICAgICBzdHJlYW1zID0gW3N0cmVhbXNdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWl4ZXIucmVzZXRWaWRlb1N0cmVhbXMoc3RyZWFtcyk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBNdWx0aVN0cmVhbXNNaXhlclxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIE11bHRpU3RyZWFtUmVjb3JkZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiBsZXQgbWl4ZXIgPSByZWNvcmRlci5nZXRNaXhlcigpO1xyXG4gICAgICogbWl4ZXIuYXBwZW5kU3RyZWFtcyhbbmV3U3RyZWFtXSk7XHJcbiAgICAgKi9cclxuICAgIHRoaXMuZ2V0TWl4ZXIgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbWl4ZXI7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIGZvciBkZWJ1Z2dpbmdcclxuICAgIHRoaXMubmFtZSA9ICdNdWx0aVN0cmVhbVJlY29yZGVyJztcclxuICAgIHRoaXMudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5uYW1lO1xyXG4gICAgfTtcclxufVxyXG5cclxuaWYgKHR5cGVvZiBSZWNvcmRSVEMgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBSZWNvcmRSVEMuTXVsdGlTdHJlYW1SZWNvcmRlciA9IE11bHRpU3RyZWFtUmVjb3JkZXI7XHJcbn1cblxyXG4vLyBfX19fX19fX19fX19fX19fX19fX19cclxuLy8gUmVjb3JkUlRDLnByb21pc2VzLmpzXHJcblxyXG4vKipcclxuICogUmVjb3JkUlRDUHJvbWlzZXNIYW5kbGVyIGFkZHMgcHJvbWlzZXMgc3VwcG9ydCBpbiB7QGxpbmsgUmVjb3JkUlRDfS4gVHJ5IGEge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWF6LWtoYW4vUmVjb3JkUlRDL2Jsb2IvbWFzdGVyL3NpbXBsZS1kZW1vcy9SZWNvcmRSVENQcm9taXNlc0hhbmRsZXIuaHRtbHxkZW1vIGhlcmV9XHJcbiAqIEBzdW1tYXJ5IFByb21pc2VzIGZvciB7QGxpbmsgUmVjb3JkUlRDfVxyXG4gKiBAbGljZW5zZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL211YXota2hhbi9SZWNvcmRSVEMvYmxvYi9tYXN0ZXIvTElDRU5TRXxNSVR9XHJcbiAqIEBhdXRob3Ige0BsaW5rIGh0dHBzOi8vTXVhektoYW4uY29tfE11YXogS2hhbn1cclxuICogQHR5cGVkZWYgUmVjb3JkUlRDUHJvbWlzZXNIYW5kbGVyXHJcbiAqIEBjbGFzc1xyXG4gKiBAZXhhbXBsZVxyXG4gKiB2YXIgcmVjb3JkZXIgPSBuZXcgUmVjb3JkUlRDUHJvbWlzZXNIYW5kbGVyKG1lZGlhU3RyZWFtLCBvcHRpb25zKTtcclxuICogcmVjb3JkZXIuc3RhcnRSZWNvcmRpbmcoKVxyXG4gKiAgICAgICAgIC50aGVuKHN1Y2Nlc3NDQilcclxuICogICAgICAgICAuY2F0Y2goZXJyb3JDQik7XHJcbiAqIC8vIE5vdGU6IFlvdSBjYW4gYWNjZXNzIGFsbCBSZWNvcmRSVEMgQVBJIHVzaW5nIFwicmVjb3JkZXIucmVjb3JkUlRDXCIgZS5nLiBcclxuICogcmVjb3JkZXIucmVjb3JkUlRDLm9uU3RhdGVDaGFuZ2VkID0gZnVuY3Rpb24oc3RhdGUpIHt9O1xyXG4gKiByZWNvcmRlci5yZWNvcmRSVEMuc2V0UmVjb3JkaW5nRHVyYXRpb24oNTAwMCk7XHJcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWF6LWtoYW4vUmVjb3JkUlRDfFJlY29yZFJUQyBTb3VyY2UgQ29kZX1cclxuICogQHBhcmFtIHtNZWRpYVN0cmVhbX0gbWVkaWFTdHJlYW0gLSBTaW5nbGUgbWVkaWEtc3RyZWFtIG9iamVjdCwgYXJyYXkgb2YgbWVkaWEtc3RyZWFtcywgaHRtbC1jYW52YXMtZWxlbWVudCwgZXRjLlxyXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIC0ge3R5cGU6XCJ2aWRlb1wiLCByZWNvcmRlclR5cGU6IE1lZGlhU3RyZWFtUmVjb3JkZXIsIGRpc2FibGVMb2dzOiB0cnVlLCBudW1iZXJPZkF1ZGlvQ2hhbm5lbHM6IDEsIGJ1ZmZlclNpemU6IDAsIHNhbXBsZVJhdGU6IDAsIHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50LCBldGMufVxyXG4gKiBAdGhyb3dzIFdpbGwgdGhyb3cgYW4gZXJyb3IgaWYgXCJuZXdcIiBrZXl3b3JkIGlzIG5vdCB1c2VkIHRvIGluaXRpYXRlIFwiUmVjb3JkUlRDUHJvbWlzZXNIYW5kbGVyXCIuIEFsc28gdGhyb3dzIGVycm9yIGlmIGZpcnN0IGFyZ3VtZW50IFwiTWVkaWFTdHJlYW1cIiBpcyBtaXNzaW5nLlxyXG4gKiBAcmVxdWlyZXMge0BsaW5rIFJlY29yZFJUQ31cclxuICovXHJcblxyXG5mdW5jdGlvbiBSZWNvcmRSVENQcm9taXNlc0hhbmRsZXIobWVkaWFTdHJlYW0sIG9wdGlvbnMpIHtcclxuICAgIGlmICghdGhpcykge1xyXG4gICAgICAgIHRocm93ICdVc2UgXCJuZXcgUmVjb3JkUlRDUHJvbWlzZXNIYW5kbGVyKClcIic7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBtZWRpYVN0cmVhbSA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICB0aHJvdyAnRmlyc3QgYXJndW1lbnQgXCJNZWRpYVN0cmVhbVwiIGlzIHJlcXVpcmVkLic7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHByb3BlcnR5IHtCbG9ifSBibG9iIC0gQWNjZXNzL3JlYWNoIHRoZSBuYXRpdmUge0BsaW5rIFJlY29yZFJUQ30gb2JqZWN0LlxyXG4gICAgICogQG1lbWJlcm9mIFJlY29yZFJUQ1Byb21pc2VzSGFuZGxlclxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIGxldCBpbnRlcm5hbCA9IHJlY29yZGVyLnJlY29yZFJUQy5nZXRJbnRlcm5hbFJlY29yZGVyKCk7XHJcbiAgICAgKiBhbGVydChpbnRlcm5hbCBpbnN0YW5jZW9mIE1lZGlhU3RyZWFtUmVjb3JkZXIpO1xyXG4gICAgICogcmVjb3JkZXIucmVjb3JkUlRDLm9uU3RhdGVDaGFuZ2VkID0gZnVuY3Rpb24oc3RhdGUpIHt9O1xyXG4gICAgICovXHJcbiAgICBzZWxmLnJlY29yZFJUQyA9IG5ldyBSZWNvcmRSVEMobWVkaWFTdHJlYW0sIG9wdGlvbnMpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgcmVjb3JkcyBNZWRpYVN0cmVhbS5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBSZWNvcmRSVENQcm9taXNlc0hhbmRsZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5zdGFydFJlY29yZGluZygpXHJcbiAgICAgKiAgICAgICAgIC50aGVuKHN1Y2Nlc3NDQilcclxuICAgICAqICAgICAgICAgLmNhdGNoKGVycm9yQ0IpO1xyXG4gICAgICovXHJcbiAgICB0aGlzLnN0YXJ0UmVjb3JkaW5nID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5yZWNvcmRSVEMuc3RhcnRSZWNvcmRpbmcoKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2Qgc3RvcHMgdGhlIHJlY29yZGluZy5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBSZWNvcmRSVENQcm9taXNlc0hhbmRsZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5zdG9wUmVjb3JkaW5nKCkudGhlbihmdW5jdGlvbigpIHtcclxuICAgICAqICAgICB2YXIgYmxvYiA9IHJlY29yZGVyLmdldEJsb2IoKTtcclxuICAgICAqIH0pLmNhdGNoKGVycm9yQ0IpO1xyXG4gICAgICovXHJcbiAgICB0aGlzLnN0b3BSZWNvcmRpbmcgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnJlY29yZFJUQy5zdG9wUmVjb3JkaW5nKGZ1bmN0aW9uKHVybCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuYmxvYiA9IHNlbGYucmVjb3JkUlRDLmdldEJsb2IoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWxmLmJsb2IgfHwgIXNlbGYuYmxvYi5zaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgnRW1wdHkgYmxvYi4nLCBzZWxmLmJsb2IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHVybCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgcGF1c2VzIHRoZSByZWNvcmRpbmcuIFlvdSBjYW4gcmVzdW1lIHJlY29yZGluZyB1c2luZyBcInJlc3VtZVJlY29yZGluZ1wiIG1ldGhvZC5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBSZWNvcmRSVENQcm9taXNlc0hhbmRsZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5wYXVzZVJlY29yZGluZygpXHJcbiAgICAgKiAgICAgICAgIC50aGVuKHN1Y2Nlc3NDQilcclxuICAgICAqICAgICAgICAgLmNhdGNoKGVycm9yQ0IpO1xyXG4gICAgICovXHJcbiAgICB0aGlzLnBhdXNlUmVjb3JkaW5nID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5yZWNvcmRSVEMucGF1c2VSZWNvcmRpbmcoKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgcmVzdW1lcyB0aGUgcmVjb3JkaW5nLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIFJlY29yZFJUQ1Byb21pc2VzSGFuZGxlclxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHJlY29yZGVyLnJlc3VtZVJlY29yZGluZygpXHJcbiAgICAgKiAgICAgICAgIC50aGVuKHN1Y2Nlc3NDQilcclxuICAgICAqICAgICAgICAgLmNhdGNoKGVycm9yQ0IpO1xyXG4gICAgICovXHJcbiAgICB0aGlzLnJlc3VtZVJlY29yZGluZyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHNlbGYucmVjb3JkUlRDLnJlc3VtZVJlY29yZGluZygpO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGRhdGEtdXJsIGZvciB0aGUgcmVjb3JkZWQgYmxvYi5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBSZWNvcmRSVENQcm9taXNlc0hhbmRsZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5zdG9wUmVjb3JkaW5nKCkudGhlbihmdW5jdGlvbigpIHtcclxuICAgICAqICAgICByZWNvcmRlci5nZXREYXRhVVJMKCkudGhlbihmdW5jdGlvbihkYXRhVVJMKSB7XHJcbiAgICAgKiAgICAgICAgIHdpbmRvdy5vcGVuKGRhdGFVUkwpO1xyXG4gICAgICogICAgIH0pLmNhdGNoKGVycm9yQ0IpOztcclxuICAgICAqIH0pLmNhdGNoKGVycm9yQ0IpO1xyXG4gICAgICovXHJcbiAgICB0aGlzLmdldERhdGFVUkwgPSBmdW5jdGlvbihjYWxsYmFjaykge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHNlbGYucmVjb3JkUlRDLmdldERhdGFVUkwoZnVuY3Rpb24oZGF0YVVSTCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YVVSTCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcmVjb3JkZWQgYmxvYi5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBSZWNvcmRSVENQcm9taXNlc0hhbmRsZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5zdG9wUmVjb3JkaW5nKCkudGhlbihmdW5jdGlvbigpIHtcclxuICAgICAqICAgICByZWNvcmRlci5nZXRCbG9iKCkudGhlbihmdW5jdGlvbihibG9iKSB7fSlcclxuICAgICAqIH0pLmNhdGNoKGVycm9yQ0IpO1xyXG4gICAgICovXHJcbiAgICB0aGlzLmdldEJsb2IgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHNlbGYucmVjb3JkUlRDLmdldEJsb2IoKSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGludGVybmFsIHJlY29yZGluZyBvYmplY3QuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgUmVjb3JkUlRDUHJvbWlzZXNIYW5kbGVyXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogbGV0IGludGVybmFsUmVjb3JkZXIgPSBhd2FpdCByZWNvcmRlci5nZXRJbnRlcm5hbFJlY29yZGVyKCk7XHJcbiAgICAgKiBpZihpbnRlcm5hbFJlY29yZGVyIGluc3RhbmNlb2YgTXVsdGlTdHJlYW1SZWNvcmRlcikge1xyXG4gICAgICogICAgIGludGVybmFsUmVjb3JkZXIuYWRkU3RyZWFtcyhbbmV3QXVkaW9TdHJlYW1dKTtcclxuICAgICAqICAgICBpbnRlcm5hbFJlY29yZGVyLnJlc2V0VmlkZW9TdHJlYW1zKFtzY3JlZW5TdHJlYW1dKTtcclxuICAgICAqIH1cclxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFxyXG4gICAgICovXHJcbiAgICB0aGlzLmdldEludGVybmFsUmVjb3JkZXIgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHNlbGYucmVjb3JkUlRDLmdldEludGVybmFsUmVjb3JkZXIoKSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHJlc2V0cyB0aGUgcmVjb3JkZXIuIFNvIHRoYXQgeW91IGNhbiByZXVzZSBzaW5nbGUgcmVjb3JkZXIgaW5zdGFuY2UgbWFueSB0aW1lcy5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBSZWNvcmRSVENQcm9taXNlc0hhbmRsZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiBhd2FpdCByZWNvcmRlci5yZXNldCgpO1xyXG4gICAgICogcmVjb3JkZXIuc3RhcnRSZWNvcmRpbmcoKTsgLy8gcmVjb3JkIGFnYWluXHJcbiAgICAgKi9cclxuICAgIHRoaXMucmVzZXQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHNlbGYucmVjb3JkUlRDLnJlc2V0KCkpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95IFJlY29yZFJUQyBpbnN0YW5jZS4gQ2xlYXIgYWxsIHJlY29yZGVycyBhbmQgb2JqZWN0cy5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBSZWNvcmRSVENQcm9taXNlc0hhbmRsZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5kZXN0cm95KCkudGhlbihzdWNjZXNzQ0IpLmNhdGNoKGVycm9yQ0IpO1xyXG4gICAgICovXHJcbiAgICB0aGlzLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHNlbGYucmVjb3JkUlRDLmRlc3Ryb3koKSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCByZWNvcmRlcidzIHJlYWRvbmx5IHN0YXRlLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIFJlY29yZFJUQ1Byb21pc2VzSGFuZGxlclxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIGxldCBzdGF0ZSA9IGF3YWl0IHJlY29yZGVyLmdldFN0YXRlKCk7XHJcbiAgICAgKiAvLyBvclxyXG4gICAgICogcmVjb3JkZXIuZ2V0U3RhdGUoKS50aGVuKHN0YXRlID0+IHsgY29uc29sZS5sb2coc3RhdGUpOyB9KVxyXG4gICAgICogQHJldHVybnMge1N0cmluZ30gUmV0dXJucyByZWNvcmRpbmcgc3RhdGUuXHJcbiAgICAgKi9cclxuICAgIHRoaXMuZ2V0U3RhdGUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHNlbGYucmVjb3JkUlRDLmdldFN0YXRlKCkpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJvcGVydHkge0Jsb2J9IGJsb2IgLSBSZWNvcmRlZCBkYXRhIGFzIFwiQmxvYlwiIG9iamVjdC5cclxuICAgICAqIEBtZW1iZXJvZiBSZWNvcmRSVENQcm9taXNlc0hhbmRsZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiBhd2FpdCByZWNvcmRlci5zdG9wUmVjb3JkaW5nKCk7XHJcbiAgICAgKiBsZXQgYmxvYiA9IHJlY29yZGVyLmdldEJsb2IoKTsgLy8gb3IgXCJyZWNvcmRlci5yZWNvcmRSVEMuYmxvYlwiXHJcbiAgICAgKiBpbnZva2VTYXZlQXNEaWFsb2coYmxvYik7XHJcbiAgICAgKi9cclxuICAgIHRoaXMuYmxvYiA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWNvcmRSVEMgdmVyc2lvbiBudW1iZXJcclxuICAgICAqIEBwcm9wZXJ0eSB7U3RyaW5nfSB2ZXJzaW9uIC0gUmVsZWFzZSB2ZXJzaW9uIG51bWJlci5cclxuICAgICAqIEBtZW1iZXJvZiBSZWNvcmRSVENQcm9taXNlc0hhbmRsZXJcclxuICAgICAqIEBzdGF0aWNcclxuICAgICAqIEByZWFkb25seVxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIGFsZXJ0KHJlY29yZGVyLnZlcnNpb24pO1xyXG4gICAgICovXHJcbiAgICB0aGlzLnZlcnNpb24gPSAnNS41LjknO1xyXG59XHJcblxyXG5pZiAodHlwZW9mIFJlY29yZFJUQyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgIFJlY29yZFJUQy5SZWNvcmRSVENQcm9taXNlc0hhbmRsZXIgPSBSZWNvcmRSVENQcm9taXNlc0hhbmRsZXI7XHJcbn1cblxyXG4vLyBfX19fX19fX19fX19fX19fX19fX19fXHJcbi8vIFdlYkFzc2VtYmx5UmVjb3JkZXIuanNcclxuXHJcbi8qKlxyXG4gKiBXZWJBc3NlbWJseVJlY29yZGVyIGxldHMgeW91IGNyZWF0ZSB3ZWJtIHZpZGVvcyBpbiBKYXZhU2NyaXB0IHZpYSBXZWJBc3NlbWJseS4gVGhlIGxpYnJhcnkgY29uc3VtZXMgcmF3IFJHQkEzMiBidWZmZXJzICg0IGJ5dGVzIHBlciBwaXhlbCkgYW5kIHR1cm5zIHRoZW0gaW50byBhIHdlYm0gdmlkZW8gd2l0aCB0aGUgZ2l2ZW4gZnJhbWVyYXRlIGFuZCBxdWFsaXR5LiBUaGlzIG1ha2VzIGl0IGNvbXBhdGlibGUgb3V0LW9mLXRoZS1ib3ggd2l0aCBJbWFnZURhdGEgZnJvbSBhIENBTlZBUy4gV2l0aCByZWFsdGltZSBtb2RlIHlvdSBjYW4gYWxzbyB1c2Ugd2VibS13YXNtIGZvciBzdHJlYW1pbmcgd2VibSB2aWRlb3MuXHJcbiAqIEBzdW1tYXJ5IFZpZGVvIHJlY29yZGluZyBmZWF0dXJlIGluIENocm9tZSwgRmlyZWZveCBhbmQgbWF5YmUgRWRnZS5cclxuICogQGxpY2Vuc2Uge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWF6LWtoYW4vUmVjb3JkUlRDL2Jsb2IvbWFzdGVyL0xJQ0VOU0V8TUlUfVxyXG4gKiBAYXV0aG9yIHtAbGluayBodHRwczovL011YXpLaGFuLmNvbXxNdWF6IEtoYW59XHJcbiAqIEB0eXBlZGVmIFdlYkFzc2VtYmx5UmVjb3JkZXJcclxuICogQGNsYXNzXHJcbiAqIEBleGFtcGxlXHJcbiAqIHZhciByZWNvcmRlciA9IG5ldyBXZWJBc3NlbWJseVJlY29yZGVyKG1lZGlhU3RyZWFtKTtcclxuICogcmVjb3JkZXIucmVjb3JkKCk7XHJcbiAqIHJlY29yZGVyLnN0b3AoZnVuY3Rpb24oYmxvYikge1xyXG4gKiAgICAgdmlkZW8uc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICogfSk7XHJcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWF6LWtoYW4vUmVjb3JkUlRDfFJlY29yZFJUQyBTb3VyY2UgQ29kZX1cclxuICogQHBhcmFtIHtNZWRpYVN0cmVhbX0gbWVkaWFTdHJlYW0gLSBNZWRpYVN0cmVhbSBvYmplY3QgZmV0Y2hlZCB1c2luZyBnZXRVc2VyTWVkaWEgQVBJIG9yIGdlbmVyYXRlZCB1c2luZyBjYXB0dXJlU3RyZWFtVW50aWxFbmRlZCBvciBXZWJBdWRpbyBBUEkuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgLSB7d2ViQXNzZW1ibHlQYXRoOid3ZWJtLXdhc20ud2FzbScsd29ya2VyUGF0aDogJ3dlYm0td29ya2VyLmpzJywgZnJhbWVSYXRlOiAzMCwgd2lkdGg6IDE5MjAsIGhlaWdodDogMTA4MCwgYml0cmF0ZTogMTAyNH1cclxuICovXHJcbmZ1bmN0aW9uIFdlYkFzc2VtYmx5UmVjb3JkZXIoc3RyZWFtLCBjb25maWcpIHtcclxuICAgIC8vIGJhc2VkIG9uOiBnaXRodWIuY29tL0dvb2dsZUNocm9tZUxhYnMvd2VibS13YXNtXHJcblxyXG4gICAgaWYgKHR5cGVvZiBSZWFkYWJsZVN0cmVhbSA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIFdyaXRhYmxlU3RyZWFtID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIC8vIGJlY2F1c2UgaXQgZml4ZXMgcmVhZGFibGUvd3JpdGFibGUgc3RyZWFtcyBpc3N1ZXNcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdGb2xsb3dpbmcgcG9seWZpbGwgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQ6IGh0dHBzOi8vdW5wa2cuY29tL0BtYXR0aWFzYnVlbGVucy93ZWItc3RyZWFtcy1wb2x5ZmlsbC9kaXN0L3BvbHlmaWxsLm1pbi5qcycpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcclxuXHJcbiAgICBjb25maWcud2lkdGggPSBjb25maWcud2lkdGggfHwgNjQwO1xyXG4gICAgY29uZmlnLmhlaWdodCA9IGNvbmZpZy5oZWlnaHQgfHwgNDgwO1xyXG4gICAgY29uZmlnLmZyYW1lUmF0ZSA9IGNvbmZpZy5mcmFtZVJhdGUgfHwgMzA7XHJcbiAgICBjb25maWcuYml0cmF0ZSA9IGNvbmZpZy5iaXRyYXRlIHx8IDEyMDA7XHJcblxyXG4gICAgZnVuY3Rpb24gY3JlYXRlQnVmZmVyVVJMKGJ1ZmZlciwgdHlwZSkge1xyXG4gICAgICAgIHJldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtidWZmZXJdLCB7XHJcbiAgICAgICAgICAgIHR5cGU6IHR5cGUgfHwgJydcclxuICAgICAgICB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gY2FtZXJhU3RyZWFtKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe1xyXG4gICAgICAgICAgICBzdGFydDogZnVuY3Rpb24oY29udHJvbGxlcikge1xyXG4gICAgICAgICAgICAgICAgdmFyIGN2cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHZpZGVvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTtcclxuICAgICAgICAgICAgICAgIHZpZGVvLnNyY09iamVjdCA9IHN0cmVhbTtcclxuICAgICAgICAgICAgICAgIHZpZGVvLm9ucGxheWluZyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGN2cy53aWR0aCA9IGNvbmZpZy53aWR0aDtcclxuICAgICAgICAgICAgICAgICAgICBjdnMuaGVpZ2h0ID0gY29uZmlnLmhlaWdodDtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgY3R4ID0gY3ZzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZyYW1lVGltZW91dCA9IDEwMDAgLyBjb25maWcuZnJhbWVSYXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gZigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmRyYXdJbWFnZSh2aWRlbywgMCwgMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5nZXRJbWFnZURhdGEoMCwgMCwgY29uZmlnLndpZHRoLCBjb25maWcuaGVpZ2h0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGYsIGZyYW1lVGltZW91dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgZnJhbWVUaW1lb3V0KTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB2aWRlby5wbGF5KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgd29ya2VyO1xyXG5cclxuICAgIGZ1bmN0aW9uIHN0YXJ0UmVjb3JkaW5nKHN0cmVhbSwgYnVmZmVyKSB7XHJcbiAgICAgICAgaWYgKCFjb25maWcud29ya2VyUGF0aCAmJiAhYnVmZmVyKSB7XHJcbiAgICAgICAgICAgIC8vIGlzIGl0IHNhZmUgdG8gdXNlIEBsYXRlc3QgP1xyXG4gICAgICAgICAgICBmZXRjaChcclxuICAgICAgICAgICAgICAgICdodHRwczovL3VucGtnLmNvbS93ZWJtLXdhc21AbGF0ZXN0L2Rpc3Qvd2VibS13b3JrZXIuanMnXHJcbiAgICAgICAgICAgICkudGhlbihmdW5jdGlvbihyKSB7XHJcbiAgICAgICAgICAgICAgICByLmFycmF5QnVmZmVyKCkudGhlbihmdW5jdGlvbihidWZmZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGFydFJlY29yZGluZyhzdHJlYW0sIGJ1ZmZlcik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghY29uZmlnLndvcmtlclBhdGggJiYgYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcclxuICAgICAgICAgICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ3RleHQvamF2YXNjcmlwdCdcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbmZpZy53b3JrZXJQYXRoID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghY29uZmlnLndvcmtlclBhdGgpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignd29ya2VyUGF0aCBwYXJhbWV0ZXIgaXMgbWlzc2luZy4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHdvcmtlciA9IG5ldyBXb3JrZXIoY29uZmlnLndvcmtlclBhdGgpO1xyXG5cclxuICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2UoY29uZmlnLndlYkFzc2VtYmx5UGF0aCB8fCAnaHR0cHM6Ly91bnBrZy5jb20vd2VibS13YXNtQGxhdGVzdC9kaXN0L3dlYm0td2FzbS53YXNtJyk7XHJcbiAgICAgICAgd29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQuZGF0YSA9PT0gJ1JFQURZJykge1xyXG4gICAgICAgICAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHtcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogY29uZmlnLndpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogY29uZmlnLmhlaWdodCxcclxuICAgICAgICAgICAgICAgICAgICBiaXRyYXRlOiBjb25maWcuYml0cmF0ZSB8fCAxMjAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHRpbWViYXNlRGVuOiBjb25maWcuZnJhbWVSYXRlIHx8IDMwLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlYWx0aW1lOiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBjYW1lcmFTdHJlYW0oKS5waXBlVG8obmV3IFdyaXRhYmxlU3RyZWFtKHtcclxuICAgICAgICAgICAgICAgICAgICB3cml0ZTogZnVuY3Rpb24oaW1hZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3b3JrZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKGltYWdlLmRhdGEuYnVmZmVyLCBbaW1hZ2UuZGF0YS5idWZmZXJdKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoISFldmVudC5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzUGF1c2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlPZkJ1ZmZlcnMucHVzaChldmVudC5kYXRhKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgcmVjb3JkcyB2aWRlby5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBXZWJBc3NlbWJseVJlY29yZGVyXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIucmVjb3JkKCk7XHJcbiAgICAgKi9cclxuICAgIHRoaXMucmVjb3JkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgYXJyYXlPZkJ1ZmZlcnMgPSBbXTtcclxuICAgICAgICBpc1BhdXNlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuYmxvYiA9IG51bGw7XHJcbiAgICAgICAgc3RhcnRSZWNvcmRpbmcoc3RyZWFtKTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcuaW5pdENhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZy5pbml0Q2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHZhciBpc1BhdXNlZDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHBhdXNlcyB0aGUgcmVjb3JkaW5nIHByb2Nlc3MuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgV2ViQXNzZW1ibHlSZWNvcmRlclxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHJlY29yZGVyLnBhdXNlKCk7XHJcbiAgICAgKi9cclxuICAgIHRoaXMucGF1c2UgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICBpc1BhdXNlZCA9IHRydWU7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgcmVzdW1lcyB0aGUgcmVjb3JkaW5nIHByb2Nlc3MuXHJcbiAgICAgKiBAbWV0aG9kXHJcbiAgICAgKiBAbWVtYmVyb2YgV2ViQXNzZW1ibHlSZWNvcmRlclxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHJlY29yZGVyLnJlc3VtZSgpO1xyXG4gICAgICovXHJcbiAgICB0aGlzLnJlc3VtZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlzUGF1c2VkID0gZmFsc2U7XHJcbiAgICB9O1xyXG5cclxuICAgIGZ1bmN0aW9uIHRlcm1pbmF0ZSgpIHtcclxuICAgICAgICBpZiAoIXdvcmtlcikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2UobnVsbCk7XHJcbiAgICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xyXG4gICAgICAgIHdvcmtlciA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGFycmF5T2ZCdWZmZXJzID0gW107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBzdG9wcyByZWNvcmRpbmcgdmlkZW8uXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIENhbGxiYWNrIGZ1bmN0aW9uLCB0aGF0IGlzIHVzZWQgdG8gcGFzcyByZWNvcmRlZCBibG9iIGJhY2sgdG8gdGhlIGNhbGxlZS5cclxuICAgICAqIEBtZXRob2RcclxuICAgICAqIEBtZW1iZXJvZiBXZWJBc3NlbWJseVJlY29yZGVyXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogcmVjb3JkZXIuc3RvcChmdW5jdGlvbihibG9iKSB7XHJcbiAgICAgKiAgICAgdmlkZW8uc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgICAqIH0pO1xyXG4gICAgICovXHJcbiAgICB0aGlzLnN0b3AgPSBmdW5jdGlvbihjYWxsYmFjaykge1xyXG4gICAgICAgIHRlcm1pbmF0ZSgpO1xyXG5cclxuICAgICAgICB0aGlzLmJsb2IgPSBuZXcgQmxvYihhcnJheU9mQnVmZmVycywge1xyXG4gICAgICAgICAgICB0eXBlOiAndmlkZW8vd2VibSdcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY2FsbGJhY2sodGhpcy5ibG9iKTtcclxuICAgIH07XHJcblxyXG4gICAgLy8gZm9yIGRlYnVnZ2luZ1xyXG4gICAgdGhpcy5uYW1lID0gJ1dlYkFzc2VtYmx5UmVjb3JkZXInO1xyXG4gICAgdGhpcy50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5hbWU7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgcmVzZXRzIGN1cnJlbnRseSByZWNvcmRlZCBkYXRhLlxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICogQG1lbWJlcm9mIFdlYkFzc2VtYmx5UmVjb3JkZXJcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiByZWNvcmRlci5jbGVhclJlY29yZGVkRGF0YSgpO1xyXG4gICAgICovXHJcbiAgICB0aGlzLmNsZWFyUmVjb3JkZWREYXRhID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgYXJyYXlPZkJ1ZmZlcnMgPSBbXTtcclxuICAgICAgICBpc1BhdXNlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuYmxvYiA9IG51bGw7XHJcblxyXG4gICAgICAgIC8vIHRvZG86IGlmIHJlY29yZGluZy1PTiB0aGVuIFNUT1AgaXQgZmlyc3RcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJvcGVydHkge0Jsb2J9IGJsb2IgLSBUaGUgcmVjb3JkZWQgYmxvYiBvYmplY3QuXHJcbiAgICAgKiBAbWVtYmVyb2YgV2ViQXNzZW1ibHlSZWNvcmRlclxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHJlY29yZGVyLnN0b3AoZnVuY3Rpb24oKXtcclxuICAgICAqICAgICB2YXIgYmxvYiA9IHJlY29yZGVyLmJsb2I7XHJcbiAgICAgKiB9KTtcclxuICAgICAqL1xyXG4gICAgdGhpcy5ibG9iID0gbnVsbDtcclxufVxyXG5cclxuaWYgKHR5cGVvZiBSZWNvcmRSVEMgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBSZWNvcmRSVEMuV2ViQXNzZW1ibHlSZWNvcmRlciA9IFdlYkFzc2VtYmx5UmVjb3JkZXI7XHJcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3JlY29yZHJ0Yy9SZWNvcmRSVEMuanNcbi8vIG1vZHVsZSBpZCA9IDE3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIiwidmFyIGc7XHJcblxyXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxyXG5nID0gKGZ1bmN0aW9uKCkge1xyXG5cdHJldHVybiB0aGlzO1xyXG59KSgpO1xyXG5cclxudHJ5IHtcclxuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcclxuXHRnID0gZyB8fCBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCkgfHwgKDEsZXZhbCkoXCJ0aGlzXCIpO1xyXG59IGNhdGNoKGUpIHtcclxuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxyXG5cdGlmKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpXHJcblx0XHRnID0gd2luZG93O1xyXG59XHJcblxyXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXHJcbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXHJcbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZztcclxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzXG4vLyBtb2R1bGUgaWQgPSAxOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanNcbi8vIG1vZHVsZSBpZCA9IDE5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIiwiZnVuY3Rpb24gaW5pdChTdXJ2ZXksICQpIHtcbiAgJCA9ICQgfHwgd2luZG93LiQ7XG5cbiAgdmFyIHdpZGdldCA9IHtcbiAgICBuYW1lOiBcImVtb3Rpb25zcmF0aW5nc1wiLFxuICAgIHRpdGxlOiBcIkVtb3Rpb25zIFJhdGluZ3NcIixcbiAgICBpY29uTmFtZTogXCJpY29uLWVtb3Rpb25zcmF0aW5nc1wiLFxuICAgIHdpZGdldElzTG9hZGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdHlwZW9mICQgPT0gXCJmdW5jdGlvblwiICYmICEhJC5mbi5lbW90aW9uc1JhdGluZztcbiAgICB9LFxuICAgIGRlZmF1bHRKU09OOiB7XG4gICAgICBjaG9pY2VzOiBbMSwgMiwgMywgNCwgNV0sXG4gICAgfSxcbiAgICBpc0ZpdDogZnVuY3Rpb24gKHF1ZXN0aW9uKSB7XG4gICAgICByZXR1cm4gcXVlc3Rpb24uZ2V0VHlwZSgpID09PSBcImVtb3Rpb25zcmF0aW5nc1wiO1xuICAgIH0sXG4gICAgaXNEZWZhdWx0UmVuZGVyOiBmYWxzZSxcbiAgICBodG1sVGVtcGxhdGU6IFwiPGRpdiBzdHlsZT0naGVpZ2h0OiAzM3B4Jz48L2Rpdj5cIixcbiAgICBhY3RpdmF0ZWRCeUNoYW5nZWQ6IGZ1bmN0aW9uIChhY3RpdmF0ZWRCeSkge1xuICAgICAgU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXG4gICAgICAgIFwiZW1vdGlvbnNyYXRpbmdzXCIsXG4gICAgICAgIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcImhhc090aGVyXCIsXG4gICAgICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwib3RoZXJUZXh0XCIsXG4gICAgICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwib3B0aW9uc0NhcHRpb25cIixcbiAgICAgICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJvdGhlckVycm9yVGV4dFwiLFxuICAgICAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcInN0b3JlT3RoZXJzQXNDb21tZW50XCIsXG4gICAgICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwicmVuZGVyQXNcIixcbiAgICAgICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIG51bGwsXG4gICAgICAgIFwiZHJvcGRvd25cIlxuICAgICAgKTtcbiAgICAgIFN1cnZleS5Kc29uT2JqZWN0Lm1ldGFEYXRhLmFkZFByb3BlcnRpZXMoXCJlbW90aW9uc3JhdGluZ3NcIiwgW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJlbW90aW9uczppdGVtdmFsdWVzXCIsXG4gICAgICAgICAgY2F0ZWdvcnk6IFwiZW1vdGlvbnNcIixcbiAgICAgICAgICBjYXRlZ29yeUluZGV4OiAxLFxuICAgICAgICAgIGRlZmF1bHQ6IFtcImFuZ3J5XCIsIFwiZGlzYXBwb2ludGVkXCIsIFwibWVoXCIsIFwiaGFwcHlcIiwgXCJpbkxvdmVcIl0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImVtb3Rpb25TaXplOm51bWJlclwiLFxuICAgICAgICAgIGNhdGVnb3J5OiBcImVtb3Rpb25zXCIsXG4gICAgICAgICAgZGVmYXVsdDogMzAsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImVtb3Rpb25zQ291bnQ6bnVtYmVyXCIsXG4gICAgICAgICAgY2F0ZWdvcnk6IFwiZW1vdGlvbnNcIixcbiAgICAgICAgICBkZWZhdWx0OiA1LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJiZ0Vtb3Rpb25cIixcbiAgICAgICAgICBjYXRlZ29yeTogXCJlbW90aW9uc1wiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiaGFwcHlcIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiZW1vdGlvbkNvbG9yXCIsXG4gICAgICAgICAgY2F0ZWdvcnk6IFwiZW1vdGlvbnNcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIiNGRjAwNjZcIixcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuICAgIH0sXG4gICAgYWZ0ZXJSZW5kZXI6IGZ1bmN0aW9uIChxdWVzdGlvbiwgZWwpIHtcbiAgICAgIHZhciBlbW90aW9ucyA9IChxdWVzdGlvbi5lbW90aW9ucyB8fCBbXSkubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtLnZhbHVlO1xuICAgICAgfSk7XG4gICAgICBpZiAoZW1vdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGVtb3Rpb25zID0gW1wiYW5ncnlcIiwgXCJkaXNhcHBvaW50ZWRcIiwgXCJtZWhcIiwgXCJoYXBweVwiLCBcImluTG92ZVwiXTtcbiAgICAgIH1cbiAgICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgICBlbW90aW9uU2l6ZTogcXVlc3Rpb24uZW1vdGlvblNpemUsXG4gICAgICAgIGJnRW1vdGlvbjogcXVlc3Rpb24uYmdFbW90aW9uLFxuICAgICAgICBlbW90aW9uczogZW1vdGlvbnMsXG4gICAgICAgIGluaXRpYWxSYXRpbmc6IHF1ZXN0aW9uLnZhbHVlLFxuICAgICAgICBjb2xvcjogcXVlc3Rpb24uZW1vdGlvbkNvbG9yLFxuICAgICAgICBjb3VudDogcXVlc3Rpb24uZW1vdGlvbnNDb3VudCxcbiAgICAgICAgb25VcGRhdGU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIHF1ZXN0aW9uLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgaW5pdFdpZGdldCgpO1xuXG4gICAgICBxdWVzdGlvbi52YWx1ZUNoYW5nZWRDYWxsYmFjayA9IGluaXRXaWRnZXQ7XG4gICAgICBxdWVzdGlvbi5yZWFkT25seUNoYW5nZWRDYWxsYmFjayA9IGluaXRXaWRnZXQ7XG5cbiAgICAgIGZ1bmN0aW9uIGluaXRXaWRnZXQoKSB7XG4gICAgICAgIGVsLmlubmVySFRNTCA9IFwiPGRpdj48L2Rpdj5cIjtcbiAgICAgICAgJChlbCkub2ZmKCk7XG4gICAgICAgIG9wdGlvbnMuaW5pdGlhbFJhdGluZyA9IHF1ZXN0aW9uLnZhbHVlIHx8IDA7XG4gICAgICAgIG9wdGlvbnMuZGlzYWJsZWQgPSBxdWVzdGlvbi5pc1JlYWRPbmx5O1xuICAgICAgICAkKGVsKS5maW5kKFwiZGl2XCIpLmVtb3Rpb25zUmF0aW5nKG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH0sXG4gICAgd2lsbFVubW91bnQ6IGZ1bmN0aW9uIChxdWVzdGlvbiwgZWwpIHtcbiAgICAgIGVsLmlubmVySFRNTCA9IG51bGw7XG4gICAgICAkKGVsKS5vZmYoKTtcbiAgICAgIHF1ZXN0aW9uLnJlYWRPbmx5Q2hhbmdlZENhbGxiYWNrID0gbnVsbDtcbiAgICAgIHF1ZXN0aW9uLnZhbHVlQ2hhbmdlZENhbGxiYWNrID0gbnVsbDtcbiAgICB9LFxuICAgIHBkZlF1ZXN0aW9uVHlwZTogXCJkcm9wZG93blwiLFxuICB9O1xuXG4gIFN1cnZleS5DdXN0b21XaWRnZXRDb2xsZWN0aW9uLkluc3RhbmNlLmFkZEN1c3RvbVdpZGdldCh3aWRnZXQsIFwiY3VzdG9tdHlwZVwiKTtcbn1cblxuaWYgKHR5cGVvZiBTdXJ2ZXkgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgaW5pdChTdXJ2ZXksIHdpbmRvdy4kKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaW5pdDtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL2Vtb3Rpb25zcmF0aW5ncy5qc1xuLy8gbW9kdWxlIGlkID0gMjBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEyIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBpY2hlY2sgfSBmcm9tIFwiLi9pY2hlY2suanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc2VsZWN0MiB9IGZyb20gXCIuL3NlbGVjdDIuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaW5wdXRtYXNrIH0gZnJvbSBcIi4vaW5wdXRtYXNrLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGpxdWVyeWJhcnJhdGluZyB9IGZyb20gXCIuL2pxdWVyeS1iYXItcmF0aW5nLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGpxdWVyeXVpZGF0ZXBpY2tlciB9IGZyb20gXCIuL2pxdWVyeS11aS1kYXRlcGlja2VyLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG5vdWlzbGlkZXIgfSBmcm9tIFwiLi9ub3Vpc2xpZGVyLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHNlbGVjdDJ0YWdib3ggfSBmcm9tIFwiLi9zZWxlY3QyLXRhZ2JveC5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzb3J0YWJsZWpzIH0gZnJvbSBcIi4vc29ydGFibGVqcy5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBja2VkaXRvciB9IGZyb20gXCIuL2NrLWVkaXRvci5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhdXRvY29tcGxldGUgfSBmcm9tIFwiLi9lYXN5LWF1dG9jb21wbGV0ZS5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwcmV0dHljaGVja2JveCB9IGZyb20gXCIuL3ByZXR0eS1jaGVja2JveC5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBib290c3RyYXBzbGlkZXIgfSBmcm9tIFwiLi9ib290c3RyYXAtc2xpZGVyLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG1pY3JvcGhvbmUgfSBmcm9tIFwiLi9taWNyb3Bob25lLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGVtb3Rpb25zcmF0aW5ncyB9IGZyb20gXCIuL2Vtb3Rpb25zcmF0aW5ncy5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBib290c3RyYXBkYXRlcGlja2VyIH0gZnJvbSBcIi4vYm9vdHN0cmFwZGF0ZXBpY2tlci5qc1wiO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvc3VydmV5anMtd2lkZ2V0cy5qc1xuLy8gbW9kdWxlIGlkID0gMjFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiZnVuY3Rpb24gaW5pdChTdXJ2ZXksICQpIHtcbiAgJCA9ICQgfHwgd2luZG93LiQ7XG5cbiAgaWYgKFxuICAgICEhJCAmJlxuICAgICEkLmZuLmJvb3RzdHJhcERQICYmXG4gICAgISEkLmZuLmRhdGVwaWNrZXIgJiZcbiAgICAhISQuZm4uZGF0ZXBpY2tlci5ub0NvbmZsaWN0XG4gICkge1xuICAgICQuZm4uYm9vdHN0cmFwRFAgPSAkLmZuLmRhdGVwaWNrZXIubm9Db25mbGljdCgpO1xuICAgIGlmICghJC5mbi5kYXRlcGlja2VyKSB7XG4gICAgICAkLmZuLmRhdGVwaWNrZXIgPSAkLmZuLmJvb3RzdHJhcERQO1xuICAgIH1cbiAgfVxuICB2YXIgd2lkZ2V0ID0ge1xuICAgIG5hbWU6IFwiYm9vdHN0cmFwZGF0ZXBpY2tlclwiLFxuICAgIHRpdGxlOiBcIkRhdGUgcGlja2VyXCIsXG4gICAgaWNvbk5hbWU6IFwiaWNvbi1kYXRlcGlja2VyXCIsXG4gICAgd2lkZ2V0SXNMb2FkZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAhISQgJiYgISEkLmZuLmJvb3RzdHJhcERQO1xuICAgIH0sXG4gICAgaXNGaXQ6IGZ1bmN0aW9uIChxdWVzdGlvbikge1xuICAgICAgcmV0dXJuIHF1ZXN0aW9uLmdldFR5cGUoKSA9PT0gXCJib290c3RyYXBkYXRlcGlja2VyXCI7XG4gICAgfSxcbiAgICBodG1sVGVtcGxhdGU6XG4gICAgICBcIjxpbnB1dCBjbGFzcz0nZm9ybS1jb250cm9sIHdpZGdldC1kYXRlcGlja2VyJyB0eXBlPSd0ZXh0JyBzdHlsZT0nd2lkdGg6IDEwMCU7Jz5cIixcbiAgICBhY3RpdmF0ZWRCeUNoYW5nZWQ6IGZ1bmN0aW9uIChhY3RpdmF0ZWRCeSkge1xuICAgICAgU3VydmV5Lkpzb25PYmplY3QubWV0YURhdGEuYWRkQ2xhc3MoXG4gICAgICAgIFwiYm9vdHN0cmFwZGF0ZXBpY2tlclwiLFxuICAgICAgICBbXG4gICAgICAgICAgeyBuYW1lOiBcImlucHV0VHlwZVwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgICAgICAgIHsgbmFtZTogXCJpbnB1dEZvcm1hdFwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgICAgICAgIHsgbmFtZTogXCJpbnB1dE1hc2tcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICAgICAgXSxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgXCJ0ZXh0XCJcbiAgICAgICk7XG4gICAgICBTdXJ2ZXkuSnNvbk9iamVjdC5tZXRhRGF0YS5hZGRQcm9wZXJ0aWVzKFwiYm9vdHN0cmFwZGF0ZXBpY2tlclwiLCBbXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBDYW4gdGFrZSBhIHN0cmluZyBvciBhbiBPYmplY3QuXG4gICAgICAgICAgLy8gaHR0cHM6Ly9ib290c3RyYXAtZGF0ZXBpY2tlci5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3Qvb3B0aW9ucy5odG1sI2Zvcm1hdFxuICAgICAgICAgIG5hbWU6IFwiZGF0ZUZvcm1hdFwiLFxuICAgICAgICAgIGNhdGVnb3J5OiBcImdlbmVyYWxcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIm1tL2RkL3l5eXlcIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIC8vIENhbiB0YWtlIGEgRGF0ZSBvciBhIHN0cmluZ1xuICAgICAgICAgIC8vIGh0dHBzOi8vYm9vdHN0cmFwLWRhdGVwaWNrZXIucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L29wdGlvbnMuaHRtbCNvcHRpb25zXG4gICAgICAgICAgbmFtZTogXCJzdGFydERhdGVcIixcbiAgICAgICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJcIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIC8vIENhbiB0YWtlIGEgRGF0ZSBvciBhIHN0cmluZ1xuICAgICAgICAgIC8vIGh0dHBzOi8vYm9vdHN0cmFwLWRhdGVwaWNrZXIucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L29wdGlvbnMuaHRtbCNvcHRpb25zXG4gICAgICAgICAgbmFtZTogXCJlbmREYXRlXCIsXG4gICAgICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInRvZGF5SGlnaGxpZ2h0OmJvb2xlYW5cIixcbiAgICAgICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwid2Vla1N0YXJ0Om51bWJlclwiLFxuICAgICAgICAgIGNhdGVnb3J5OiBcImdlbmVyYWxcIixcbiAgICAgICAgICBkZWZhdWx0OiAwLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJjbGVhckJ0bjpib29sZWFuXCIsXG4gICAgICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJhdXRvQ2xvc2U6Ym9vbGVhblwiLFxuICAgICAgICAgIGNhdGVnb3J5OiBcImdlbmVyYWxcIixcbiAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJkYXlzT2ZXZWVrSGlnaGxpZ2h0ZWQ6c3RyaW5nXCIsXG4gICAgICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImRpc2FibGVUb3VjaEtleWJvYXJkOmJvb2xlYW5cIixcbiAgICAgICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuICAgIH0sXG4gICAgYWZ0ZXJSZW5kZXI6IGZ1bmN0aW9uIChxdWVzdGlvbiwgZWwpIHtcbiAgICAgIHZhciAkZWwgPSAkKGVsKS5pcyhcIi53aWRnZXQtZGF0ZXBpY2tlclwiKVxuICAgICAgICA/ICQoZWwpXG4gICAgICAgIDogJChlbCkuZmluZChcIi53aWRnZXQtZGF0ZXBpY2tlclwiKTtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgIGVuYWJsZU9uUmVhZG9ubHk6IGZhbHNlLFxuICAgICAgICBmb3JtYXQ6IHF1ZXN0aW9uLmRhdGVGb3JtYXQsXG4gICAgICAgIHRvZGF5SGlnaGxpZ2h0OiBxdWVzdGlvbi50b2RheUhpZ2hsaWdodCxcbiAgICAgICAgd2Vla1N0YXJ0OiBxdWVzdGlvbi53ZWVrU3RhcnQsXG4gICAgICAgIGNsZWFyQnRuOiBxdWVzdGlvbi5jbGVhckJ0bixcbiAgICAgICAgYXV0b2Nsb3NlOiBxdWVzdGlvbi5hdXRvQ2xvc2UsXG4gICAgICAgIGRheXNPZldlZWtIaWdobGlnaHRlZDogcXVlc3Rpb24uZGF5c09mV2Vla0hpZ2hsaWdodGVkLFxuICAgICAgICBkaXNhYmxlVG91Y2hLZXlib2FyZDogcXVlc3Rpb24uZGlzYWJsZVRvdWNoS2V5Ym9hcmQsXG4gICAgICB9O1xuICAgICAgaWYgKCEhcXVlc3Rpb24uc3RhcnREYXRlIHx8ICEhcXVlc3Rpb24ucmVuZGVyZWRNaW4pIHtcbiAgICAgICAgb3B0aW9ucy5zdGFydERhdGUgPSAhIXF1ZXN0aW9uLnN0YXJ0RGF0ZVxuICAgICAgICAgID8gcXVlc3Rpb24uc3RhcnREYXRlXG4gICAgICAgICAgOiBxdWVzdGlvbi5yZW5kZXJlZE1pbjtcbiAgICAgIH1cbiAgICAgIHZhciByZW5kZXJlZE1heCA9IHF1ZXN0aW9uLnJlbmRlcmVkTWF4O1xuICAgICAgaWYgKCEhcmVuZGVyZWRNYXggJiYgbmV3IERhdGUocmVuZGVyZWRNYXgpLmdldEZ1bGxZZWFyKCkgPj0gMjk5OSkge1xuICAgICAgICByZW5kZXJlZE1heCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmICghIXF1ZXN0aW9uLmVuZERhdGUgfHwgISFyZW5kZXJlZE1heCkge1xuICAgICAgICBvcHRpb25zLmVuZERhdGUgPSAhIXF1ZXN0aW9uLmVuZERhdGUgPyBxdWVzdGlvbi5lbmREYXRlIDogcmVuZGVyZWRNYXg7XG4gICAgICB9XG4gICAgICBjb25zdCBwaWNrZXJXaWRnZXQgPSAkZWwuYm9vdHN0cmFwRFAob3B0aW9ucykub24oXCJjaGFuZ2VcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgdmFyIG5ld0RhdGUgPSBwaWNrZXJXaWRnZXQuYm9vdHN0cmFwRFAoXCJnZXRVVENEYXRlXCIpO1xuICAgICAgICB2YXIgbmV3VmFsdWUgPSBuZXdEYXRlICYmIG5ld0RhdGUudG9VVENTdHJpbmcoKTtcbiAgICAgICAgaWYgKHF1ZXN0aW9uLnZhbHVlICE9IG5ld1ZhbHVlKSB7XG4gICAgICAgICAgcXVlc3Rpb24udmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHF1ZXN0aW9uLnZhbHVlQ2hhbmdlZENhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBwaWNrZXJXaWRnZXQuYm9vdHN0cmFwRFAoXG4gICAgICAgICAgXCJzZXRVVENEYXRlXCIsXG4gICAgICAgICAgISFxdWVzdGlvbi52YWx1ZSA/IG5ldyBEYXRlKHF1ZXN0aW9uLnZhbHVlKSA6IFwiXCJcbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgICBxdWVzdGlvbi52YWx1ZUNoYW5nZWRDYWxsYmFjaygpO1xuICAgICAgcXVlc3Rpb24ucmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChxdWVzdGlvbi5pc1JlYWRPbmx5KSB7XG4gICAgICAgICAgJGVsLnByb3AoXCJyZWFkb25seVwiLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAkZWwucmVtb3ZlQXR0cihcInJlYWRvbmx5XCIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcXVlc3Rpb24ucmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgICB9LFxuICAgIHdpbGxVbm1vdW50OiBmdW5jdGlvbiAocXVlc3Rpb24sIGVsKSB7XG4gICAgICB2YXIgJGVsID0gJChlbCkuaXMoXCIud2lkZ2V0LWRhdGVwaWNrZXJcIilcbiAgICAgICAgPyAkKGVsKVxuICAgICAgICA6ICQoZWwpLmZpbmQoXCIud2lkZ2V0LWRhdGVwaWNrZXJcIik7XG4gICAgICAkZWwuYm9vdHN0cmFwRFAoXCJkZXN0cm95XCIpO1xuICAgICAgcXVlc3Rpb24ucmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgICBxdWVzdGlvbi52YWx1ZUNoYW5nZWRDYWxsYmFjayA9IHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIHBkZlF1ZXN0aW9uVHlwZTogXCJ0ZXh0XCIsXG4gIH07XG5cbiAgU3VydmV5LkN1c3RvbVdpZGdldENvbGxlY3Rpb24uSW5zdGFuY2UuYWRkQ3VzdG9tV2lkZ2V0KHdpZGdldCwgXCJjdXN0b210eXBlXCIpO1xufVxuXG5pZiAodHlwZW9mIFN1cnZleSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICBpbml0KFN1cnZleSwgd2luZG93LiQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpbml0O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvYm9vdHN0cmFwZGF0ZXBpY2tlci5qc1xuLy8gbW9kdWxlIGlkID0gMjJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==","/*!\n * surveyjs - Survey JavaScript library v1.8.76\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 = __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 __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 = __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;\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: ActionViewModel, 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 _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../base */ \"./src/vue/base.ts\");\n/* harmony import */ var _action_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./action.vue */ \"./src/vue/components/action-bar/action.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionViewModel\", function() { return _action_vue__WEBPACK_IMPORTED_MODULE_3__[\"ActionViewModel\"]; });\n\n/* harmony import */ var _action_bar_item_vue__WEBPACK_IMPORTED_MODULE_4__ = __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_4__[\"ActionBarItemViewModel\"]; });\n\n/* harmony import */ var _action_bar_item_dropdown_vue__WEBPACK_IMPORTED_MODULE_5__ = __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_5__[\"ActionBarItemDropdownViewModel\"]; });\n\n/* harmony import */ var _action_bar_separator_vue__WEBPACK_IMPORTED_MODULE_6__ = __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_6__[\"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\n\nvar ActionBarViewModel = /** @class */ (function (_super) {\n __extends(ActionBarViewModel, _super);\n function ActionBarViewModel(props) {\n return _super.call(this, props) || this;\n }\n ActionBarViewModel.prototype.getModel = function () {\n return this.model;\n };\n ActionBarViewModel.prototype.mounted = function () {\n if (!this.model.hasActions)\n return;\n var container = this.$el;\n this.model.initResponsivityManager(container);\n };\n ActionBarViewModel.prototype.beforeDestroy = function () {\n this.model.resetResponsivityManager();\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n ], ActionBarViewModel.prototype, \"model\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Prop\"])()\n ], ActionBarViewModel.prototype, \"handleClick\", void 0);\n ActionBarViewModel = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]\n ], ActionBarViewModel);\n return ActionBarViewModel;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\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/action-bar/action.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.vue?vue&type=script&lang=ts& ***!\n \\**************************************************************************************************************************************************************/\n/*! exports provided: ActionViewModel, 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__, \"ActionViewModel\", function() { return ActionViewModel; });\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 ActionViewModel = /** @class */ (function (_super) {\n __extends(ActionViewModel, _super);\n function ActionViewModel(props) {\n return _super.call(this, props) || this;\n }\n ActionViewModel.prototype.getModel = function () {\n return this.item;\n };\n ActionViewModel.prototype.getComponentName = function () {\n return this.item.component || \"sv-action-bar-item\";\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], ActionViewModel.prototype, \"item\", void 0);\n ActionViewModel = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], ActionViewModel);\n return ActionViewModel;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-action\", ActionViewModel);\n/* harmony default export */ __webpack_exports__[\"default\"] = (ActionViewModel);\n\n\n/***/ }),\n\n/***/ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/list/list-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/list/list-item.vue?vue&type=script&lang=ts& ***!\n \\***********************************************************************************************************************************************************/\n/*! exports provided: List, ListItem, 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__, \"ListItem\", function() { return ListItem; });\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\");\n/* harmony import */ var _list_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./list.vue */ \"./src/vue/components/list/list.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"List\", function() { return _list_vue__WEBPACK_IMPORTED_MODULE_3__[\"List\"]; });\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\nvar ListItem = /** @class */ (function (_super) {\n __extends(ListItem, _super);\n function ListItem() {\n return _super.call(this) || this;\n }\n ListItem.prototype.getModel = function () {\n return this.item;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], ListItem.prototype, \"item\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], ListItem.prototype, \"model\", void 0);\n ListItem = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], ListItem);\n return ListItem;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-list-item\", ListItem);\n/* harmony default export */ __webpack_exports__[\"default\"] = (ListItem);\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: ListItem, 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\");\n/* harmony import */ var _list_item_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./list-item.vue */ \"./src/vue/components/list/list-item.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ListItem\", function() { return _list_item_vue__WEBPACK_IMPORTED_MODULE_3__[\"ListItem\"]; });\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\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 List.prototype.change = function (event) {\n this.model.filteredText = event.target.value;\n };\n List.prototype.keyup = function (event) {\n this.model.filteredText = event.target.value;\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/drag-drop-icon/drag-drop-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/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************************************************************************************************************************************************/\n/*! exports provided: SurveyQuestionMatrixDynamicDragDropIcon, 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__, \"SurveyQuestionMatrixDynamicDragDropIcon\", function() { return SurveyQuestionMatrixDynamicDragDropIcon; });\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 SurveyQuestionMatrixDynamicDragDropIcon = /** @class */ (function (_super) {\n __extends(SurveyQuestionMatrixDynamicDragDropIcon, _super);\n function SurveyQuestionMatrixDynamicDragDropIcon() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(SurveyQuestionMatrixDynamicDragDropIcon.prototype, \"question\", {\n get: function () {\n return this.item.data.question;\n },\n enumerable: false,\n configurable: true\n });\n SurveyQuestionMatrixDynamicDragDropIcon.prototype.getModel = function () {\n return this.item;\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], SurveyQuestionMatrixDynamicDragDropIcon.prototype, \"item\", void 0);\n SurveyQuestionMatrixDynamicDragDropIcon = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], SurveyQuestionMatrixDynamicDragDropIcon);\n return SurveyQuestionMatrixDynamicDragDropIcon;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"default\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-matrix-drag-drop-icon\", SurveyQuestionMatrixDynamicDragDropIcon);\n/* harmony default export */ __webpack_exports__[\"default\"] = (SurveyQuestionMatrixDynamicDragDropIcon);\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) {\n this.model.updateOnShowing();\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, cssClass, title) {\n var popupViewModel = Object(survey_core__WEBPACK_IMPORTED_MODULE_2__[\"createPopupModalViewModel\"])(componentName, data, onApply, onCancel, function () {\n popup.$destroy();\n popupViewModel.destroyPopupContainer();\n }, undefined, cssClass, title);\n var popup = new PopupContainer({\n el: popupViewModel.container.appendChild(document.createElement(\"div\")),\n propsData: { model: popupViewModel },\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/skeleton.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/skeleton.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************************************************************************************************************/\n/*! exports provided: Skeleton, 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__, \"Skeleton\", function() { return Skeleton; });\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 Skeleton = /** @class */ (function (_super) {\n __extends(Skeleton, _super);\n function Skeleton() {\n return _super.call(this) || this;\n }\n Skeleton = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], Skeleton);\n return Skeleton;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"sv-skeleton\", Skeleton);\n/* harmony default export */ __webpack_exports__[\"default\"] = (Skeleton);\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/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/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\");\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 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 return survey_core__WEBPACK_IMPORTED_MODULE_3__[\"DefaultTitleModel\"].getIconCss(this.css.question, isCollapsed);\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 DefaultTitle.prototype.beforeDestroy = function () {\n this.element.stateChangedCallback = null;\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/title/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/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, \"toolbar\", {\n get: function () {\n return this.element.getTitleToolbar();\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/components/title/title-content.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/title-content.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-element-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/components/title/title-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/components/title/title-element.vue?vue&type=script&lang=ts& ***!\n \\****************************************************************************************************************************************************************/\n/*! exports provided: TitleElement, 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__, \"TitleElement\", function() { return TitleElement; });\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 TitleElement = /** @class */ (function (_super) {\n __extends(TitleElement, _super);\n function TitleElement() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n TitleElement.prototype.keyup = function (evt) {\n Object(survey_core__WEBPACK_IMPORTED_MODULE_2__[\"doKey2ClickUp\"])(evt);\n };\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], TitleElement.prototype, \"element\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], TitleElement.prototype, \"css\", void 0);\n TitleElement = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], TitleElement);\n return TitleElement;\n}(vue__WEBPACK_IMPORTED_MODULE_0___default.a));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-element-title\", TitleElement);\n/* harmony default export */ __webpack_exports__[\"default\"] = (TitleElement);\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/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\");\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 SurveyElementVue = /** @class */ (function (_super) {\n __extends(SurveyElementVue, _super);\n function SurveyElementVue() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n SurveyElementVue.prototype.getModel = function () {\n return this.element;\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.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}(_base__WEBPACK_IMPORTED_MODULE_2__[\"BaseVue\"]));\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\");\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 ElementHeader = /** @class */ (function (_super) {\n __extends(ElementHeader, _super);\n function ElementHeader() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ElementHeader.prototype.keyup = function (evt) {\n Object(survey_core__WEBPACK_IMPORTED_MODULE_2__[\"doKey2ClickUp\"])(evt);\n };\n ElementHeader.prototype.clickTitleFunction = function () {\n if (typeof this.element.clickTitleFunction === \"function\") {\n this.element.clickTitleFunction();\n }\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 __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], Errors.prototype, \"element\", 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\");\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 File = /** @class */ (function (_super) {\n __extends(File, _super);\n function File() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n File.prototype.doRemoveFile = function (data) {\n this.question.doRemoveFile(data);\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 //refactor\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 __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\");\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 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 return new survey_core__WEBPACK_IMPORTED_MODULE_2__[\"CssClassBuilder\"]()\n .append(this.cell.question.cssClasses.item)\n .append(cssClasses.itemDisabled, isDisabled)\n .append(cssClasses.itemChecked, isChecked)\n .append(cssClasses.itemHover, allowHover)\n .toString();\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.addRowUI();\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.isShowPrevButton;\n this.showNextBtn = this.survey.isShowNextButton;\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 __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, \"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 __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 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 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, \"survey\", {\n get: function () {\n return this.question.survey;\n },\n enumerable: false,\n configurable: true\n });\n Panel.prototype.keyup = function (evt) {\n Object(survey_core__WEBPACK_IMPORTED_MODULE_2__[\"doKey2ClickUp\"])(evt);\n };\n Panel.prototype.cancelPreview = function () {\n this.question.cancelPreview();\n };\n Object.defineProperty(Panel.prototype, \"requiredTextCss\", {\n get: function () {\n return (this.question.cssClasses.requiredText || 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_3__[\"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 = __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 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/paneldynamicprogressV2.vue?vue&type=script&lang=ts&\":\n/*!********************************************************************************************************************************************************!*\\\n !*** ./node_modules/ts-loader??ref--0!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/paneldynamicprogressV2.vue?vue&type=script&lang=ts& ***!\n \\********************************************************************************************************************************************************/\n/*! exports provided: PanelDynamicProgressV2, 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__, \"PanelDynamicProgressV2\", function() { return PanelDynamicProgressV2; });\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 _paneldynamicprogress_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./paneldynamicprogress.vue */ \"./src/vue/paneldynamicprogress.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 PanelDynamicProgressV2 = /** @class */ (function (_super) {\n __extends(PanelDynamicProgressV2, _super);\n function PanelDynamicProgressV2() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(PanelDynamicProgressV2.prototype, \"progressButtonSvgPath\", {\n get: function () {\n return \"M15 7.9998H4.39998L8.69998 12.2998L7.29998 13.6998L0.599976 6.9998L7.29998 0.299805L8.69998 1.6998L4.39998 5.9998H15V7.9998Z\";\n },\n enumerable: false,\n configurable: true\n });\n PanelDynamicProgressV2 = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Component\"]\n ], PanelDynamicProgressV2);\n return PanelDynamicProgressV2;\n}(_paneldynamicprogress_vue__WEBPACK_IMPORTED_MODULE_2__[\"PanelDynamicProgress\"]));\n\nvue__WEBPACK_IMPORTED_MODULE_0___default.a.component(\"survey-paneldynamicprogress-v2\", PanelDynamicProgressV2);\n/* harmony default export */ __webpack_exports__[\"default\"] = (PanelDynamicProgressV2);\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\");\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 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 Progress.prototype.getProgressTextInBarCss = function (css) {\n return survey_core__WEBPACK_IMPORTED_MODULE_2__[\"SurveyProgressModel\"].getProgressTextInBarCss(css);\n };\n Progress.prototype.getProgressTextUnderBarCss = function (css) {\n return survey_core__WEBPACK_IMPORTED_MODULE_2__[\"SurveyProgressModel\"].getProgressTextUnderBarCss(css);\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 return this.progressButtonsModel.getScrollButtonCss(hasScroller, isLeftScroll);\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, \"indexText\", 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 __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], RankingItem.prototype, \"question\", void 0);\n __decorate([\n Object(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__[\"Prop\"])()\n ], RankingItem.prototype, \"item\", 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.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\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.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 return this.question.inputStyle;\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/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.question.getItemCss() }, [\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.ariaRequired,\n \"aria-label\": _vm.question.ariaLabel,\n \"aria-invalid\": _vm.question.ariaInvalid,\n \"aria-describedby\": _vm.question.ariaDescribedBy,\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: \"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.question.getItemCss() }, [\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.ariaRequired,\n \"aria-label\": _vm.question.ariaLabel,\n \"aria-invalid\": _vm.question.ariaInvalid,\n \"aria-describedby\": _vm.question.ariaDescribedBy,\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.question.getLabelCss(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.question.getLabelCss(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 role: \"radio\",\n \"aria-required\": _vm.model.isRequired,\n \"aria-label\": _vm.model.caption.renderedHtml,\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: { role: \"checkbox\", \"aria-label\": _vm.question.ariaLabel },\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.question.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.question.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.question.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.getItemId(_vm.item),\n disabled: !_vm.question.getItemEnabled(_vm.item),\n \"aria-required\": _vm.question.ariaRequired,\n \"aria-label\": _vm.question.ariaLabel,\n \"aria-invalid\": _vm.question.ariaInvalid,\n \"aria-describedby\": _vm.question.ariaDescribedBy,\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.getItemId(_vm.item),\n disabled: !_vm.question.getItemEnabled(_vm.item),\n \"aria-required\": _vm.question.ariaRequired,\n \"aria-label\": _vm.question.ariaLabel,\n \"aria-invalid\": _vm.question.ariaInvalid,\n \"aria-describedby\": _vm.question.ariaDescribedBy,\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: _vm.question.checkBoxSvgPath } })]\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.question.isOtherItem(_vm.item)\n ? _c(\"survey-other-choice\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value:\n _vm.question.renderedValue && _vm.question.isOtherSelected,\n expression:\n \"\\n 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.getControlClass()\n : \"panel-comment-root\",\n style: { resize: _vm.question.autoGrow ? \"none\" : \"both\" },\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 rows: _vm.question.rows,\n placeholder: _vm.question.renderedPlaceHolder,\n \"aria-required\": _vm.question.ariaRequired,\n \"aria-label\": _vm.question.ariaLabel,\n \"aria-invalid\": _vm.question.ariaInvalid,\n \"aria-describedby\": _vm.question.ariaDescribedBy,\n },\n domProps: { value: _vm.question.value },\n on: {\n change: _vm.change,\n input: function (e) {\n _vm.question.onInput(e)\n },\n keydown: function (e) {\n _vm.question.onKeyDown(e)\n },\n },\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 class: _vm.item.getActionBarItemActiveCss(),\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 keyup: function (evt) {\n evt.stopPropagation()\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: _vm.item.iconSize },\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.item.showTitle === undefined ||\n _vm.item.showTitle ||\n !_vm.item.iconName\n ? _c(\"span\", { class: _vm.item.getActionBarItemCss() }, [\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 class: _vm.item.getActionBarItemActiveCss(),\n attrs: {\n type: \"button\",\n disabled: _vm.item.enabled !== undefined && !_vm.item.enabled,\n title: _vm.item.tooltip || _vm.item.title,\n tabindex: _vm.item.disableTabStop ? -1 : 0,\n },\n on: {\n click: function () {\n _vm.item.action()\n },\n keyup: function (evt) {\n evt.stopPropagation()\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: _vm.item.iconSize },\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.item.showTitle === undefined ||\n _vm.item.showTitle ||\n !_vm.item.iconName\n ? _c(\"span\", { class: _vm.item.getActionBarItemCss() }, [\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.model.hasActions\n ? _c(\n \"div\",\n {\n ref: \"container\",\n class: _vm.model.css,\n on: {\n click: function (event) {\n event.stopPropagation()\n },\n },\n },\n _vm._l(_vm.model.renderedActions, function (item) {\n return _c(\"sv-action\", { key: item.id, attrs: { item: item } })\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/components/action-bar/action.vue?vue&type=template&id=2fe54632&\":\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.vue?vue&type=template&id=2fe54632& ***!\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\", { class: _vm.item.getActionRootCss() }, [\n _c(\n \"div\",\n { staticClass: \"sv-action__content\" },\n [\n _vm.item.needSeparator ? _c(\"sv-action-bar-separator\") : _vm._e(),\n _vm._v(\" \"),\n _c(_vm.getComponentName(), {\n tag: \"component\",\n attrs: { item: _vm.item },\n }),\n ],\n 1\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/list/list-item.vue?vue&type=template&id=4fffcdf8&\":\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-item.vue?vue&type=template&id=4fffcdf8& ***!\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 \"li\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.item.visible,\n expression: \"item.visible\",\n },\n ],\n key: _vm.item.id,\n class: _vm.model.getItemClass(_vm.item),\n style: { paddingLeft: _vm.model.getItemIndent(_vm.item) },\n attrs: { tabindex: \"0\" },\n on: {\n click: function ($event) {\n return _vm.model.selectItem(_vm.item)\n },\n },\n },\n [\n _vm.item.iconName && !_vm.item.component\n ? _c(\"sv-svg-icon\", {\n staticClass: \"sv-list__item-icon\",\n attrs: { iconName: _vm.item.iconName, size: 24 },\n })\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.item.component\n ? _c(\"span\", [_vm._v(_vm._s(_vm.item.title))])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.item.component\n ? _c(_vm.item.component, {\n tag: \"component\",\n attrs: { item: _vm.item },\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/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(\"div\", [\n _vm.model.needFilter\n ? _c(\"input\", {\n staticClass: \"sv-list__input\",\n attrs: {\n type: \"text\",\n placeholder: _vm.model.filteredTextPlaceholder,\n },\n domProps: { value: _vm.model.filteredText },\n on: { change: _vm.change, keyup: _vm.keyup },\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"ul\",\n {\n staticClass: \"sv-list\",\n on: {\n mousedown: function (event) {\n event.preventDefault()\n },\n keydown: function (event) {\n _vm.model.onKeyDown(event)\n },\n },\n },\n _vm._l(_vm.model.renderedActions, function (item) {\n return _c(\"sv-list-item\", {\n key: item.id,\n attrs: { item: item, model: _vm.model },\n })\n }),\n 1\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/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/drag-drop-icon/drag-drop-icon.vue?vue&type=template&id=4f55d298&\":\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/drag-drop-icon/drag-drop-icon.vue?vue&type=template&id=4f55d298& ***!\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\", { class: _vm.question.cssClasses.iconDrag })\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: _vm.question.getRemoveRowButtonCss(),\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 attrs: { tabindex: \"-1\" },\n on: {\n keydown: function (event) {\n _vm.model.onKeyDown(event)\n },\n click: function () {\n _vm.model.clickOutside()\n },\n },\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"sv-popup__container\",\n style: {\n left: _vm.model.left,\n top: _vm.model.top,\n height: _vm.model.height,\n },\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(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !!this.model.title,\n expression: \"!!this.model.title\",\n },\n ],\n staticClass: \"sv-popup__header\",\n },\n [_vm._v(_vm._s(this.model.title))]\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"sv-popup__scrolling-content\" }, [\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 ]),\n _vm._v(\" \"),\n _vm.model.isModal\n ? _c(\"div\", { staticClass: \"sv-popup__footer\" }, [\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 : _vm._e(),\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/skeleton.vue?vue&type=template&id=5bd480d4&\":\n/*!******************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/components/skeleton.vue?vue&type=template&id=5bd480d4& ***!\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: \"sv-skeleton-element\" })\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(\"span\", [\n _c(\n \"svg\",\n { ref: \"svgIcon\", staticClass: \"sv-svg-icon\", attrs: { role: \"img\" } },\n [_c(\"use\")]\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/title/default-title.vue?vue&type=template&id=7aaa96c4&\":\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/default-title.vue?vue&type=template&id=7aaa96c4& ***!\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-element-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/title/title-actions.vue?vue&type=template&id=c938554c&\":\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/title-actions.vue?vue&type=template&id=c938554c& ***!\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-element-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: { model: _vm.toolbar },\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/title/title-content.vue?vue&type=template&id=24c0a2d6&\":\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/title-content.vue?vue&type=template&id=24c0a2d6& ***!\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.isTitleOwner\n ? _c(\"survey-string\", { attrs: { locString: _vm.element.locTitle } })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.element.isTitleOwner\n ? _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\", {\n attrs: { locString: _vm.element.locTitle },\n }),\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 : _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/title/title-element.vue?vue&type=template&id=641d93d9&\":\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/title-element.vue?vue&type=template&id=641d93d9& ***!\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.element.hasTitle\n ? _c(\n _vm.element.titleTagName,\n {\n tag: \"component\",\n class: _vm.element.cssTitle,\n attrs: {\n \"aria-label\":\n _vm.element.getType() === \"radiogroup\"\n ? \"\"\n : _vm.element.locTitle.renderedHtml,\n id: _vm.element.ariaTitleId,\n tabindex: _vm.element.titleTabIndex,\n \"aria-expanded\": _vm.element.titleAriaExpanded,\n },\n on: {\n click: function () {\n return _vm.element.toggleState()\n },\n keyup: function ($event) {\n _vm.keyup($event)\n },\n },\n },\n [\n !_vm.element.hasTitleActions\n ? _c(\"survey-element-title-content\", {\n attrs: { element: _vm.element, css: _vm.css },\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.element.hasTitleActions\n ? _c(\"sv-title-actions\", {\n attrs: { element: _vm.element, css: _vm.css },\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/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/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.getControlClass(),\n attrs: {\n id: _vm.question.inputId,\n autocomplete: _vm.question.autoComplete,\n \"aria-required\": _vm.question.ariaRequired,\n \"aria-label\": _vm.question.ariaLabel,\n \"aria-invalid\": _vm.question.ariaInvalid,\n \"aria-describedby\": _vm.question.ariaDescribedBy,\n required: _vm.question.isRequired,\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.getControlClass(),\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.element.isPanel ? _vm.element.getRootCss() : null },\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: { element: _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: { element: _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 { class: _vm.element.cssHeader, on: { click: _vm.clickTitleFunction } },\n [\n _c(\"survey-element-title\", {\n attrs: { element: _vm.element, css: _vm.css },\n }),\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 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/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.element.hasVisibleErrors,\n expression: \"element.hasVisibleErrors\",\n },\n ],\n class: _vm.element.cssError,\n attrs: {\n role: \"alert\",\n \"aria-live\": \"polite\",\n id: _vm.element.id + \"_errors\",\n },\n },\n _vm._l(_vm.element.errors, function (error, index) {\n return _c(\"div\", { key: \"error_\" + index }, [\n _c(\"span\", {\n class: _vm.element.cssClasses\n ? _vm.element.cssClasses.error.icon\n : \"panel-error-icon\",\n attrs: { \"aria-hidden\": \"true\" },\n }),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n class: _vm.element.cssClasses\n ? _vm.element.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.ariaRequired,\n \"aria-label\": _vm.question.ariaLabel,\n \"aria-invalid\": _vm.question.ariaInvalid,\n \"aria-describedby\": _vm.question.ariaDescribedBy,\n multiple: _vm.question.allowMultiple ? \"multiple\" : undefined,\n title: _vm.question.inputTitle,\n accept: _vm.question.acceptedTypes,\n },\n on: { change: _vm.question.doChange },\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.question.isReadOnly\n ? _c(\"input\", {\n class: _vm.question.getReadOnlyFileCss(),\n staticStyle: { color: \"transparent\" },\n attrs: {\n type: \"file\",\n disabled: \"\",\n placeholder: _vm.question.title,\n },\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n class: _vm.question.getFileDecoratorCss(),\n on: {\n drop: _vm.question.onDrop,\n dragover: _vm.question.onDragOver,\n dragleave: _vm.question.onDragLeave,\n },\n },\n [\n _c(\"span\", { class: _vm.question.cssClasses.dragAreaPlaceholder }, [\n _vm._v(_vm._s(_vm.question.dragAreaPlaceholder)),\n ]),\n _vm._v(\" \"),\n _c(\"div\", { class: _vm.question.cssClasses.wrapper }, [\n _c(\n \"label\",\n {\n class: _vm.question.getChooseFileCss(),\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.question.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 { class: _vm.question.cssClasses.fileList },\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.question.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 : _c(\"img\", {\n class: _vm.question.cssClasses.defaultImage,\n attrs: {\n height: _vm.question.imageHeight,\n width: _vm.question.imageWidth,\n },\n }),\n _vm._v(\" \"),\n val.name && !_vm.question.isReadOnly\n ? _c(\n \"div\",\n {\n class: _vm.question.cssClasses.removeFileButton,\n on: {\n click: function ($event) {\n return _vm.question.doRemoveFile(val)\n },\n },\n },\n [\n _c(\n \"span\",\n { class: _vm.question.cssClasses.removeFile },\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 },\n [\n _c(\"path\", {\n attrs: {\n d: \"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 )\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.question.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.question.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.question.cssTitle,\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: { element: _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.renderedHasHeader\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.renderedHasTitle\n ? _c(\n \"div\",\n {\n class: _vm.survey.css.headerText,\n style: { maxWidth: _vm.survey.titleMaxWidth },\n },\n [\n _c(\"survey-element-title\", {\n attrs: { element: _vm.survey, css: _vm.survey.css },\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 1\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 ])\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: {\n role: \"radio\",\n \"aria-label\": _vm.question.locTitle.renderedHtml,\n },\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.ariaLabel,\n \"aria-invalid\": _vm.question.ariaInvalid,\n \"aria-describedby\": _vm.question.ariaDescribedBy,\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.ariaLabel,\n \"aria-invalid\": _vm.question.ariaInvalid,\n \"aria-describedby\": _vm.question.ariaDescribedBy,\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 _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(\n _vm.question.visibleColumns,\n function (column, columnIndex) {\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 ],\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 _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(\n _vm.question.visibleColumns,\n function (column, columnIndex) {\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 ),\n _vm._v(\" \"),\n _vm._l(\n _vm.question.visibleColumns,\n function (column, columnIndex) {\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.ariaRequired,\n \"aria-label\": _vm.question.ariaLabel,\n \"aria-invalid\": _vm.question.ariaInvalid,\n \"aria-describedby\":\n _vm.question.ariaDescribedBy,\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(\n row,\n \"value\",\n column.value\n )\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 ],\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\", {\n attrs: { model: _vm.cell.item.getData(), handleClick: false },\n })\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: { element: _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: { element: _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: _vm.question.getAddRowButtonCss(),\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: _vm.question.getAddRowButtonCss(true),\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: _vm.question.getAddRowButtonCss(),\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 _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 cell.hasTitle\n ? _c(\"survey-string\", {\n attrs: { locString: cell.locTitle },\n })\n : _vm._e(),\n _vm._v(\" \"),\n !!cell.requiredText\n ? _c(\"span\", [_vm._v(_vm._s(cell.requiredText))])\n : _vm._e(),\n ],\n 1\n )\n }),\n 0\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 _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 1\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: _vm.question.getItemTitleCss(),\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.getItemCss() },\n },\n [\n _vm.hasErrorsOnTop\n ? _c(\"survey-errors\", {\n attrs: { element: 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: { element: 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 style: { resize: _vm.question.autoGrowComment ? \"none\" : \"both\" },\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.ariaLabel,\n },\n domProps: { value: _vm.question.comment },\n on: {\n change: function (e) {\n _vm.question.onCommentChange(e)\n },\n input: function (e) {\n _vm.question.onCommentInput(e)\n },\n },\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 _c(\"survey-element-title\", {\n attrs: { element: _vm.page, css: _vm.css },\n }),\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: row.getRowCss() },\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(\"survey-element-title\", {\n attrs: { element: _vm.question, css: _vm.css },\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: { element: _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: row.getRowCss(),\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 _c(\"sv-action-bar\", {\n attrs: { model: _vm.question.getFooterToolbar() },\n }),\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 _c(\"hr\", { class: _vm.question.cssClasses.separatorV2 }),\n _vm._v(\" \"),\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(\n \"button\",\n {\n class: _vm.question.getAddButtonCss(),\n attrs: { type: \"button\" },\n on: { click: _vm.addPanelClick },\n },\n [\n _c(\"span\", { class: _vm.question.cssClasses.buttonAddText }, [\n _vm._v(\n \"\\n \" + _vm._s(_vm.question.panelAddText) + \"\\n \"\n ),\n ]),\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"survey-paneldynamicprogress-v2\", {\n attrs: { question: _vm.question },\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/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.question.getPrevButtonCss(),\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.question.getNextButtonCss(),\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(\n \"button\",\n {\n class: _vm.question.getAddButtonCss(),\n attrs: { type: \"button\" },\n on: { click: _vm.addPanelClick },\n },\n [\n _c(\"span\", { class: _vm.question.cssClasses.buttonAddText }, [\n _vm._v(\"\\n \" + _vm._s(_vm.question.panelAddText) + \"\\n \"),\n ]),\n ]\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/paneldynamicprogressV2.vue?vue&type=template&id=33ce4046&\":\n/*!*********************************************************************************************************************************************************************************************************!*\\\n !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./src/vue/paneldynamicprogressV2.vue?vue&type=template&id=33ce4046& ***!\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.footer }, [\n _vm.question.isRangeShowing && _vm.question.isProgressBottomShowing\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(\"hr\", { class: _vm.question.cssClasses.separatorV2 }),\n _vm._v(\" \"),\n _c(\"div\", { class: _vm.question.cssClasses.footerButtonsContainer }, [\n _vm.question.canAddPanel\n ? _c(\n \"button\",\n {\n class: _vm.question.getAddButtonCss(),\n attrs: { type: \"button\" },\n on: { click: _vm.addPanelClick },\n },\n [\n _c(\"span\", { class: _vm.question.cssClasses.buttonAddText }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.question.panelAddText) +\n \"\\n \"\n ),\n ]),\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.question.isRenderModeList\n ? _c(\"div\", { class: _vm.question.cssClasses.progressContainer }, [\n _c(\"div\", { attrs: { title: _vm.question.panelPrevText } }, [\n _c(\n \"svg\",\n {\n class: _vm.question.getPrevButtonCss(),\n attrs: { viewBox: \"0 0 15 14\" },\n on: { click: _vm.prevPanelClick },\n },\n [_c(\"path\", { attrs: { d: _vm.progressButtonSvgPath } })]\n ),\n ]),\n _vm._v(\" \"),\n _c(\"div\", { class: _vm.question.cssClasses.progressText }, [\n _vm._v(_vm._s(_vm.question.progressText)),\n ]),\n _vm._v(\" \"),\n _c(\"div\", { attrs: { title: _vm.question.panelNextText } }, [\n _c(\n \"svg\",\n {\n class: _vm.question.getNextButtonCss(),\n attrs: { viewBox: \"0 0 15 14\" },\n on: { click: _vm.nextPanelClick },\n },\n [_c(\"path\", { attrs: { d: _vm.progressButtonSvgPath } })]\n ),\n ]),\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/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(\n \"button\",\n {\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\" },\n on: {\n click: function ($event) {\n return _vm.removePanelClick(_vm.panel)\n },\n },\n },\n [\n _c(\"span\", { class: _vm.question.cssClasses.buttonRemoveText }, [\n _vm._v(\"\\n \" + _vm._s(_vm.question.panelRemoveText) + \"\\n \"),\n ]),\n _vm._v(\" \"),\n _c(\"span\", { class: _vm.question.cssClasses.iconRemove }),\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(\"span\", { class: _vm.getProgressTextInBarCss(_vm.css) }, [\n _vm._v(_vm._s(_vm.survey.progressText)),\n ]),\n ]\n ),\n _vm._v(\" \"),\n _c(\"span\", { class: _vm.getProgressTextUnderBarCss(_vm.css) }, [\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:\n 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 },\n [\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 attrs: {\n role: \"radio\",\n \"aria-checked\":\n _vm.question.renderedValue === _vm.item.value ? \"true\" : \"false\",\n \"aria-required\": _vm.question.ariaRequired,\n \"aria-invalid\": _vm.question.ariaInvalid,\n \"aria-describedby\": _vm.question.ariaDescribedBy,\n },\n },\n [\n _c(\n \"label\",\n {\n class: _vm.getLabelClass(_vm.item),\n attrs: { \"aria-label\": _vm.item.locText.renderedHtml },\n },\n [\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 \"aria-hidden\": \"true\",\n name: _vm.question.name + \"_\" + _vm.question.id,\n id: _vm.question.inputId + \"_\" + _vm.index,\n disabled: _vm.question.isInputReadOnly || !_vm.item.isEnabled,\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 [\n _c(\"survey-string\", {\n attrs: { locString: _vm.item.locText },\n }),\n ],\n 1\n )\n : _vm._e(),\n ]\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 {\n class: _vm.question.getItemClass(_vm.item),\n attrs: { tabindex: \"0\", \"data-sv-drop-target-ranking-item\": _vm.index },\n on: {\n keydown: function (event) {\n _vm.question.handleKeydown.call(_vm.question, event, _vm.item)\n },\n pointerdown: function (event) {\n _vm.question.handlePointerDown.call(\n _vm.question,\n event,\n _vm.item,\n event.currentTarget\n )\n },\n },\n },\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: _vm.question.getIconHoverCss(),\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: \"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: _vm.question.getIconFocusCss(),\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.indexText)),\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: index,\n indexText: _vm.question.getNumberByIndex(index),\n cssClasses: _vm.question.cssClasses,\n question: _vm.question,\n item: item,\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.question.getItemClass(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.ariaRequired,\n \"aria-label\": _vm.question.ariaLabel,\n \"aria-invalid\": _vm.question.ariaInvalid,\n \"aria-describedby\": _vm.question.ariaDescribedBy,\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.visibleElements, function (element) {\n return _c(\n \"div\",\n {\n key: element.id,\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 _vm.row.isNeedRender\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 : _vm._e(),\n _vm._v(\" \"),\n !_vm.row.isNeedRender && !!element.skeletonComponentName\n ? _c(element.skeletonComponentName, {\n tag: \"component\",\n attrs: { question: element, css: _vm.css },\n })\n : _vm._e(),\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/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(\n \"div\",\n {\n class: _vm.question.cssClasses.root,\n style: {\n height: _vm.question.height + \"px\",\n width: _vm.question.width + \"px\",\n },\n },\n [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.question.needShowPlaceholder(),\n expression: \"question.needShowPlaceholder()\",\n },\n ],\n class: _vm.question.cssClasses.placeholder,\n },\n [_vm._v(\"\\n \" + _vm._s(_vm.question.placeHolderText) + \"\\n \")]\n ),\n _vm._v(\" \"),\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 )\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 staticClass: \"sv-string-viewer\",\n staticStyle: { position: \"static\" },\n domProps: { innerHTML: _vm._s(_vm.locString.renderedHtml) },\n })\n : _c(\n \"span\",\n {\n staticClass: \"sv-string-viewer\",\n staticStyle: { position: \"static\" },\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.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.renderAsData },\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 + \"top\",\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 + \"bottom\",\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.survey.completedCss,\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:\n _vm.survey.getLocString(\"saveAgainButton\"),\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: {\n innerHTML: _vm._s(_vm.survey.processedLoadingHtml),\n },\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 !_vm.question.isReadOnlyRenderDiv()\n ? _c(\"input\", {\n class: _vm.question.getControlClass(),\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: _vm.question.renderedPlaceHolder,\n autocomplete: _vm.question.autoComplete,\n \"aria-required\": _vm.question.ariaRequired,\n \"aria-label\": _vm.question.ariaLabel,\n \"aria-invalid\": _vm.question.ariaInvalid,\n \"aria-describedby\": _vm.question.ariaDescribedBy,\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.dataListId && !_vm.question.isReadOnlyRenderDiv()\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 _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/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/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/actions/action.ts\":\n/*!*******************************!*\\\n !*** ./src/actions/action.ts ***!\n \\*******************************/\n/*! exports provided: Action */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Action\", function() { return Action; });\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 _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.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 Action = /** @class */ (function (_super) {\n __extends(Action, _super);\n function Action(innerItem) {\n var _this = _super.call(this) || this;\n _this.innerItem = innerItem;\n _this.iconSize = 24;\n //Object.assign(this, item) to support IE11\n if (!!innerItem) {\n for (var key in innerItem) {\n _this[key] = innerItem[key];\n }\n }\n return _this;\n }\n Action.prototype.raiseUpdate = function () {\n this.updateCallback && this.updateCallback();\n };\n Object.defineProperty(Action.prototype, \"disabled\", {\n get: function () {\n return this.enabled !== undefined && !this.enabled;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Action.prototype, \"hasTitle\", {\n get: function () {\n return (((this.mode != \"small\" &&\n (this.showTitle || this.showTitle === undefined)) ||\n !this.iconName) &&\n !!this.title);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Action.prototype, \"isVisible\", {\n get: function () {\n return this.visible && this.mode !== \"popup\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Action.prototype, \"canShrink\", {\n get: function () {\n return !!this.iconName;\n },\n enumerable: false,\n configurable: true\n });\n Action.prototype.getActionRootCss = function () {\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_2__[\"CssClassBuilder\"]()\n .append(\"sv-action\")\n .append(this.css)\n .append(\"sv-action--hidden\", !this.isVisible)\n .toString();\n };\n Action.prototype.getActionBarItemCss = function () {\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_2__[\"CssClassBuilder\"]()\n .append(\"sv-action-bar-item__title\")\n .append(\"sv-action-bar-item__title--with-icon\", !!this.iconName)\n .toString();\n };\n Action.prototype.getActionBarItemActiveCss = function () {\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_2__[\"CssClassBuilder\"]()\n .append(\"sv-action-bar-item\")\n .append(\"sv-action-bar-item--active\", !!this.active)\n .append(this.innerCss)\n .toString();\n };\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"id\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"iconName\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"iconSize\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({\n defaultValue: true, onSet: function (_, target) {\n target.raiseUpdate();\n }\n })\n ], Action.prototype, \"visible\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"title\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"tooltip\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"enabled\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"showTitle\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"action\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"css\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"innerCss\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"data\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"popupModel\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"needSeparator\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"active\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"template\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"component\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"items\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"visibleIndex\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"large\" })\n ], Action.prototype, \"mode\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], Action.prototype, \"disableTabStop\", void 0);\n return Action;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/actions/adaptive-container.ts\":\n/*!*******************************************!*\\\n !*** ./src/actions/adaptive-container.ts ***!\n \\*******************************************/\n/*! exports provided: AdaptiveActionContainer */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AdaptiveActionContainer\", function() { return AdaptiveActionContainer; });\n/* harmony import */ var _utils_responsivity_manager__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/responsivity-manager */ \"./src/utils/responsivity-manager.ts\");\n/* harmony import */ var _list__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../list */ \"./src/list.ts\");\n/* harmony import */ var _popup__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../popup */ \"./src/popup.ts\");\n/* harmony import */ var _action__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./action */ \"./src/actions/action.ts\");\n/* harmony import */ var _container__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./container */ \"./src/actions/container.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 AdaptiveActionContainer = /** @class */ (function (_super) {\n __extends(AdaptiveActionContainer, _super);\n function AdaptiveActionContainer() {\n var _this = _super.call(this) || this;\n _this.minVisibleItemsCount = 0;\n _this.invisibleItemsListModel = new _list__WEBPACK_IMPORTED_MODULE_1__[\"ListModel\"]([], function (item) {\n _this.invisibleItemSelected(item);\n _this.dotsItemPopupModel.toggleVisibility();\n }, false);\n _this.dotsItemPopupModel = new _popup__WEBPACK_IMPORTED_MODULE_2__[\"PopupModel\"](\"sv-list\", {\n model: _this.invisibleItemsListModel\n });\n _this.dotsItem = new _action__WEBPACK_IMPORTED_MODULE_3__[\"Action\"]({\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 visible: false,\n action: function (item) {\n _this.dotsItemPopupModel.toggleVisibility();\n },\n popupModel: _this.dotsItemPopupModel\n });\n return _this;\n }\n AdaptiveActionContainer.prototype.invisibleItemSelected = function (item) {\n if (!!item && typeof item.action === \"function\") {\n item.action();\n }\n };\n AdaptiveActionContainer.prototype.hideItemsGreaterN = function (visibleItemsCount) {\n visibleItemsCount = Math.max(visibleItemsCount, this.minVisibleItemsCount);\n var invisibleItems = [];\n this.visibleActions.forEach(function (item) {\n if (visibleItemsCount <= 0) {\n item.mode = \"popup\";\n invisibleItems.push(item.innerItem);\n }\n visibleItemsCount--;\n });\n this.invisibleItemsListModel.setItems(invisibleItems);\n };\n AdaptiveActionContainer.prototype.getVisibleItemsCount = function (availableSize) {\n var itemsSizes = this.visibleActions.map(function (item) { return item.minDimension; });\n var currSize = 0;\n for (var i = 0; i < itemsSizes.length; i++) {\n currSize += itemsSizes[i];\n if (currSize > availableSize)\n return i;\n }\n return i;\n };\n AdaptiveActionContainer.prototype.updateItemMode = function (availableSize, itemsSize) {\n var items = this.visibleActions;\n for (var index = items.length - 1; index >= 0; index--) {\n if (itemsSize > availableSize) {\n itemsSize -= items[index].maxDimension - items[index].minDimension;\n items[index].mode = \"small\";\n }\n else {\n items[index].mode = \"large\";\n }\n }\n };\n AdaptiveActionContainer.prototype.onSet = function () {\n var _this = this;\n this.actions.forEach(function (action) { return action.updateCallback = function () { return _this.raiseUpdate(false); }; });\n _super.prototype.onSet.call(this);\n };\n AdaptiveActionContainer.prototype.onPush = function (item) {\n var _this = this;\n item.updateCallback = function () { return _this.raiseUpdate(false); };\n _super.prototype.onPush.call(this, item);\n };\n AdaptiveActionContainer.prototype.getRenderedActions = function () {\n return this.actions.concat([this.dotsItem]);\n };\n AdaptiveActionContainer.prototype.fit = function (dimension, dotsItemSize) {\n if (dimension <= 0)\n return;\n this.dotsItem.visible = false;\n var minSize = 0;\n var maxSize = 0;\n var items = this.visibleActions;\n items.forEach(function (item) {\n minSize += item.minDimension;\n maxSize += item.maxDimension;\n });\n if (dimension >= maxSize) {\n items.forEach(function (item) { return (item.mode = \"large\"); });\n }\n else if (dimension < minSize) {\n items.forEach(function (item) { return (item.mode = \"small\"); });\n this.hideItemsGreaterN(this.getVisibleItemsCount(dimension - dotsItemSize));\n this.dotsItem.visible = true;\n }\n else {\n this.updateItemMode(dimension, maxSize);\n }\n };\n AdaptiveActionContainer.prototype.initResponsivityManager = function (container) {\n this.responsivityManager = new _utils_responsivity_manager__WEBPACK_IMPORTED_MODULE_0__[\"ResponsivityManager\"](container, this, \".sv-action:not(.sv-dots)>.sv-action__content\");\n };\n AdaptiveActionContainer.prototype.resetResponsivityManager = function () {\n if (!!this.responsivityManager) {\n this.responsivityManager.dispose();\n this.responsivityManager = undefined;\n }\n };\n AdaptiveActionContainer.prototype.dispose = function () {\n _super.prototype.dispose.call(this);\n this.resetResponsivityManager();\n };\n return AdaptiveActionContainer;\n}(_container__WEBPACK_IMPORTED_MODULE_4__[\"ActionContainer\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/actions/container.ts\":\n/*!**********************************!*\\\n !*** ./src/actions/container.ts ***!\n \\**********************************/\n/*! exports provided: ActionContainer */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ActionContainer\", function() { return ActionContainer; });\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 _action__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./action */ \"./src/actions/action.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 ActionContainer = /** @class */ (function (_super) {\n __extends(ActionContainer, _super);\n function ActionContainer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ActionContainer.prototype.getRenderedActions = function () {\n return this.actions;\n };\n ActionContainer.prototype.raiseUpdate = function (isResetInitialized) {\n this.updateCallback && this.updateCallback(isResetInitialized);\n };\n ActionContainer.prototype.onSet = function () {\n this.raiseUpdate(true);\n };\n ActionContainer.prototype.onPush = function (item) {\n this.raiseUpdate(true);\n };\n ActionContainer.prototype.onRemove = function (item) {\n this.raiseUpdate(true);\n };\n Object.defineProperty(ActionContainer.prototype, \"hasActions\", {\n get: function () {\n return (this.actions || []).length > 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ActionContainer.prototype, \"renderedActions\", {\n get: function () {\n return this.getRenderedActions();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ActionContainer.prototype, \"visibleActions\", {\n get: function () {\n return this.actions.filter(function (action) { return action.visible !== false; });\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(ActionContainer.prototype, \"css\", {\n get: function () {\n return \"sv-action-bar\" + (!!this.containerCss ? \" \" + this.containerCss : \"\");\n },\n enumerable: false,\n configurable: true\n });\n ActionContainer.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 ActionContainer.prototype.setItems = function (items, sortByVisibleIndex) {\n if (sortByVisibleIndex === void 0) { sortByVisibleIndex = true; }\n var actions = items.map(function (item) { return (item instanceof _action__WEBPACK_IMPORTED_MODULE_2__[\"Action\"] ? item : new _action__WEBPACK_IMPORTED_MODULE_2__[\"Action\"](item)); });\n if (sortByVisibleIndex) {\n this.actions = this.sortItems(actions);\n }\n else {\n this.actions = actions;\n }\n };\n ActionContainer.prototype.initResponsivityManager = function (container) {\n return;\n };\n ActionContainer.prototype.resetResponsivityManager = function () { };\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"propertyArray\"])({\n onSet: function (_, target) {\n target.onSet();\n },\n onPush: function (item, i, target) {\n target.onPush(item);\n },\n onRemove: function (item, i, target) {\n target.onRemove(item);\n }\n })\n ], ActionContainer.prototype, \"actions\", void 0);\n return ActionContainer;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"Base\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/base.ts\":\n/*!*********************!*\\\n !*** ./src/base.ts ***!\n \\*********************/\n/*! exports provided: Bindings, Dependencies, ComputedUpdater, Base, ArrayChanges, 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__, \"Dependencies\", function() { return Dependencies; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ComputedUpdater\", function() { return ComputedUpdater; });\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__, \"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\");\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, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\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\nvar Dependencies = /** @class */ (function () {\n function Dependencies(currentDependency, target, property) {\n this.currentDependency = currentDependency;\n this.target = target;\n this.property = property;\n this.dependencies = [];\n this.id = \"\" + (++Dependencies.DependenciesCount);\n }\n Dependencies.prototype.addDependency = function (target, property) {\n if (this.target === target && this.property === property)\n return;\n if (this.dependencies.some(function (dependency) { return dependency.obj === target && dependency.prop === property; }))\n return;\n this.dependencies.push({\n obj: target,\n prop: property,\n id: this.id\n });\n target.registerFunctionOnPropertiesValueChanged([property], this.currentDependency, this.id);\n };\n Dependencies.prototype.dispose = function () {\n this.dependencies.forEach(function (dependency) {\n dependency.obj.unRegisterFunctionOnPropertiesValueChanged([dependency.prop], dependency.id);\n });\n };\n Dependencies.DependenciesCount = 0;\n return Dependencies;\n}());\n\nvar ComputedUpdater = /** @class */ (function () {\n function ComputedUpdater(_updater) {\n this._updater = _updater;\n this.dependencies = undefined;\n this.type = ComputedUpdater.ComputedUpdaterType;\n }\n Object.defineProperty(ComputedUpdater.prototype, \"updater\", {\n get: function () {\n return this._updater;\n },\n enumerable: false,\n configurable: true\n });\n ComputedUpdater.prototype.setDependencies = function (dependencies) {\n this.clearDependencies();\n this.dependencies = dependencies;\n };\n ComputedUpdater.prototype.getDependencies = function () {\n return this.dependencies;\n };\n ComputedUpdater.prototype.clearDependencies = function () {\n if (this.dependencies) {\n this.dependencies.dispose();\n this.dependencies = undefined;\n }\n };\n ComputedUpdater.prototype.dispose = function () {\n this.clearDependencies();\n };\n ComputedUpdater.ComputedUpdaterType = \"__dependency_computed\";\n return ComputedUpdater;\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.finishCollectDependencies = function () {\n var deps = Base.currentDependencis;\n Base.currentDependencis = undefined;\n return deps;\n };\n Base.startCollectDependencies = function (updater, target, property) {\n if (Base.currentDependencis !== undefined) {\n throw new Error(\"Attempt to collect nested dependencies. Nested dependencies are not supported.\");\n }\n Base.currentDependencis = new Dependencies(updater, target, property);\n };\n Base.collectDependency = function (target, property) {\n if (Base.currentDependencis === undefined)\n return;\n Base.currentDependencis.addDependency(target, property);\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 undefined, 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.onPropertyValueChangedCallback = undefined;\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.isLoadingFromJsonValue || 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 new _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"JsonObject\"]().toObject(json, this);\n this.onSurveyLoad();\n };\n Base.prototype.onSurveyLoad = function () { };\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 /**\n * Returns the serializable property that belongs to this instance by property name. It returns null if the property is not exists.\n * @param propName property name\n * @returns\n */\n Base.prototype.getPropertyByName = function (propName) {\n return _jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"Serializer\"].findProperty(this.getType(), propName);\n };\n Base.prototype.isPropertyVisible = function (propName) {\n var prop = this.getPropertyByName(propName);\n return !!prop ? prop.isVisible(\"\", this) : false;\n };\n Base.createProgressInfo = function () {\n return {\n questionCount: 0,\n answeredQuestionCount: 0,\n requiredQuestionCount: 0,\n requiredAnsweredQuestionCount: 0,\n };\n };\n Base.prototype.getProgressInfo = function () {\n return Base.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 Base.collectDependency(this, 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) {\n if (!this.isDisposedValue) {\n this.setPropertyValueCoreHandler(propertiesHash, name, val);\n }\n else {\n // eslint-disable-next-line no-console\n console.warn(\"Attempt to set property '\" + name + \"' of a disposed object '\" + this.getType() + \"'\");\n }\n }\n else\n propertiesHash[name] = val;\n };\n Object.defineProperty(Base.prototype, \"isEditingSurveyElement\", {\n get: function () {\n var survey = this.getSurvey();\n return !!survey && survey.isEditingSurveyElement;\n },\n enumerable: false,\n configurable: true\n });\n Base.prototype.iteratePropertiesHash = function (func) {\n var _this = this;\n var keys = [];\n for (var key in this.propertyHash) {\n if (key === \"value\" &&\n this.isEditingSurveyElement &&\n Array.isArray(this.value))\n continue;\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 &&\n Array.isArray(oldValue) &&\n !!this.arraysInfo &&\n (!val || Array.isArray(val))) {\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.setPropertyValueDirectly(name, val);\n if (!this.isDisposedValue && !this.isTwoValueEquals(oldValue, val)) {\n this.propertyValueChanged(name, oldValue, val);\n }\n }\n };\n Base.prototype.setPropertyValueDirectly = function (name, val) {\n this.setPropertyValueCore(this.propertyHash, name, val);\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.onPropertyValueChangedCallback) {\n notifier.onPropertyValueChangedCallback(name, oldValue, newValue, target, arrayChanges);\n }\n if (notifier !== this && !!this.onPropertyValueChangedCallback) {\n this.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, hasDefaultValue) {\n var _this = this;\n if (useMarkDown === void 0) { useMarkDown = false; }\n if (hasDefaultValue === void 0) { hasDefaultValue = false; }\n var locStr = new _localizablestring__WEBPACK_IMPORTED_MODULE_0__[\"LocalizableString\"](owner, useMarkDown, name);\n if (hasDefaultValue) {\n locStr.localizationName = name;\n }\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.shift = function () {\n var result = Object.getPrototypeOf(newArray).shift.call(newArray);\n if (!self.isDisposedValue && result) {\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.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, false));\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 return _helpers__WEBPACK_IMPORTED_MODULE_1__[\"Helpers\"].isTwoValueEquals(x, y, false, !caseInSensitive, trimString);\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 Base.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 Base.currentDependencis = undefined;\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 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 obj.isRunningValue = true;\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 res[i].isRunningValue = false;\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 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.beforeLoadRequest();\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://surveyjs.io/api/CountriesExample?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 this.isRunningValue = true;\n if (!!this.beforeSendRequestCallback) {\n this.beforeSendRequestCallback();\n }\n };\n ChoicesRestful.prototype.beforeLoadRequest = function () {\n this.isRunningValue = false;\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 sliderText: \"sv-hidden\",\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 rowAdditional: \"sv-matrix__row--additional\",\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 iconDrag: \"sv-matrixdynamic__drag-icon\",\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 dragDropGhostPositionTop: \"sv-matrix__drag-drop-ghost-position-top\",\n dragDropGhostPositionBottom: \"sv-matrix__drag-drop-ghost-position-bottom\",\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 separatorV2: \"sv-hidden\",\n footer: \"sv-hidden\"\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 itemHover: \"sv-button-group__item--hover\",\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 dragAreaPlaceholder: \"sv-hidden\",\n fileList: \"\",\n defaultImage: \"sv-hidden\"\n },\n signaturepad: {\n root: \"sv_q_signaturepad sjs_sp_container\",\n controls: \"sjs_sp_controls\",\n placeholder: \"sjs_sp_placeholder\",\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 sliderText: \"sv-hidden\",\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 rowAdditional: \"sv-matrix__row--additional\",\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 iconDrag: \"sv-matrixdynamic__drag-icon\",\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 dragDropGhostPositionTop: \"sv-matrix__drag-drop-ghost-position-top\",\n dragDropGhostPositionBottom: \"sv-matrix__drag-drop-ghost-position-bottom\",\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 separatorV2: \"sv-hidden\",\n footer: \"sv-hidden\"\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 itemHover: \"sv-button-group__item--hover\",\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 dragAreaPlaceholder: \"sv-hidden\",\n fileList: \"\",\n defaultImage: \"sv-hidden\"\n },\n signaturepad: {\n root: \"sv_q_signaturepad sjs_sp_container\",\n controls: \"sjs_sp_controls\",\n placeholder: \"sjs_sp_placeholder\",\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 separatorV2: \"sv-hidden\",\n footer: \"sv-hidden\"\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 answered: \"sv-question--answered\",\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-selectbase__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-selectbase__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 itemHover: \"sv-button-group__item--hover\",\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 sliderText: \"sv-hidden\",\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 rowAdditional: \"sv-table__row--additional\",\n detailRow: \"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 iconDrag: \"sv-matrixdynamic__drag-icon\",\n row: \"sv-table__row\",\n detailRow: \"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 dragDropGhostPositionTop: \"sv-matrix__drag-drop-ghost-position-top\",\n dragDropGhostPositionBottom: \"sv-matrix__drag-drop-ghost-position-bottom\",\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 dragAreaPlaceholder: \"sv-hidden\",\n fileList: \"\",\n defaultImage: \"sv-hidden\"\n },\n signaturepad: {\n root: \"sv-signaturepad sjs_sp_container\",\n small: \"sv-row__question--small\",\n controls: \"sjs_sp_controls\",\n placeholder: \"sjs_sp_placeholder\",\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 disabled: \"sv_q--disabled\",\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 sliderText: \"sv-hidden\",\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 rowAdditional: \"sv-matrix__row--additional\",\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 iconDrag: \"sv-matrixdynamic__drag-icon\",\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 dragDropGhostPositionTop: \"sv-matrix__drag-drop-ghost-position-top\",\n dragDropGhostPositionBottom: \"sv-matrix__drag-drop-ghost-position-bottom\",\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 separatorV2: \"sv-hidden\",\n footer: \"sv-hidden\"\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 itemHover: \"sv-button-group__item--hover\",\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 dragAreaPlaceholder: \"sv-hidden\",\n fileList: \"\",\n defaultImage: \"sv-hidden\",\n },\n signaturepad: {\n root: \"sv_q_signaturepad sjs_sp_container\",\n controls: \"sjs_sp_controls\",\n placeholder: \"sjs_sp_placeholder\",\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/defaultCss/defaultV2Css.ts\":\n/*!****************************************!*\\\n !*** ./src/defaultCss/defaultV2Css.ts ***!\n \\****************************************/\n/*! exports provided: defaultV2Css */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"defaultV2Css\", function() { return defaultV2Css; });\n/* harmony import */ var _cssstandard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./cssstandard */ \"./src/defaultCss/cssstandard.ts\");\n\nvar defaultV2Css = {\n root: \"sd-root-modern\",\n container: \"sd-container-modern\",\n header: \"sd-title sd-container-modern__title\",\n body: \"sd-body\",\n bodyEmpty: \"sd-body sd-body--empty\",\n footer: \"sd-footer sd-body__navigation sd-clearfix\",\n title: \"sd-title\",\n description: \"sd-description\",\n logo: \"sd-logo\",\n logoImage: \"sd-logo__image\",\n headerText: \"sd-header__text\",\n navigationButton: \"\",\n completedPage: \"sd-completedpage\",\n navigation: {\n complete: \"sd-btn sd-btn--action sd-navigation__complete-btn\",\n prev: \"sd-btn sd-navigation__prev-btn\",\n next: \"sd-btn sd-navigation__next-btn\",\n start: \"sd-btn sd-navigation__start-btn\",\n preview: \"sd-btn sd-navigation__preview-btn\",\n edit: \"sd-btn sd-navigation__edit-btn\"\n },\n panel: {\n title: \"sd-title sd-panel__title\",\n titleExpandable: \"sd-panel__title--expandable\",\n titleOnExpand: \"sd-panel__title--expanded\",\n titleOnError: \"sd-panel__title--error\",\n description: \"sd-description sd-panel__description\",\n container: \"sd-element-with-frame sd-panel sd-row__panel\",\n content: \"sd-panel__content\",\n icon: \"sd-panel__icon\",\n iconExpanded: \"sd-panel__icon--expanded\",\n footer: \"sd-panel__footer\",\n requiredText: \"sd-panel__required-text\"\n },\n paneldynamic: {\n mainRoot: \"sd-element-with-frame sd-element-with-frame--paneldynamic sd-question sd-row__question\",\n root: \"sd-paneldynamic\",\n navigation: \"sd-paneldynamic__navigation\",\n title: \"sd-title sd-question__title\",\n button: \"sd-paneldynamic__btn\",\n buttonRemove: \"sd-paneldynamic__remove-btn\",\n buttonAdd: \"sd-paneldynamic__add-btn\",\n progressTop: \"sd-paneldynamic__progress sd-paneldynamic__progress--top\",\n progressBottom: \"sd-paneldynamic__progress sd-paneldynamic__progress--bottom\",\n buttonPrev: \"sd-paneldynamic__prev-btn\",\n buttonNext: \"sd-paneldynamic__next-btn\",\n progressContainer: \"sd-paneldynamic__progress-container\",\n progress: \"sd-progress\",\n progressBar: \"sd-progress__bar\",\n progressText: \"sd-paneldynamic__progress-text\",\n separator: \"sd-paneldynamic__separator\",\n separatorV2: \"sd-paneldynamic__separator\",\n panelWrapper: \"sd-paneldynamic__panel-wrapper\",\n footer: \"sd-paneldynamic__footer\",\n footerButtonsContainer: \"sd-paneldynamic__buttons-container\",\n panelWrapperInRow: \"sd-paneldynamic__panel-wrapper--in-row\"\n },\n progress: \"sd-progress sd-body__progress\",\n progressBar: \"sd-progress__bar\",\n progressText: \"sd-progress__text\",\n progressTextInBar: \"sd-hidden\",\n page: {\n root: \"sd-page sd-body__page\",\n title: \"sd-title sd-page__title\",\n description: \"sd-description sd-page__description\"\n },\n pageTitle: \"sd-title sd-page__title\",\n pageDescription: \"sd-description sd-page__description\",\n row: \"sd-row sd-clearfix\",\n rowMultiple: \"sd-row--multiple\",\n question: {\n mainRoot: \"sd-element-with-frame sd-question sd-row__question\",\n flowRoot: \"sd-element-with-frame sd-question sd-row__question sd-row__question--flow\",\n asCell: \"sd-table__cell\",\n answered: \"sd-question--answered\",\n header: \"sd-question__header\",\n headerLeft: \"sd-question__header--location--left\",\n headerTop: \"sd-question__header--location--top\",\n headerBottom: \"sd-question__header--location--bottom\",\n content: \"sd-question__content\",\n contentLeft: \"sd-question__content--left\",\n titleLeftRoot: \"\",\n titleOnAnswer: \"sd-question__title--answer\",\n titleOnError: \"sd-question__title--error\",\n title: \"sd-title sd-question__title\",\n requiredText: \"sd-question__required-text\",\n number: \"sd-question__num\",\n description: \"sd-description sd-question__description\",\n descriptionUnderInput: \"sd-description sd-question__description\",\n comment: \"sd-input sd-comment\",\n other: \"sd-input sd-comment\",\n required: \"sd-question--required\",\n titleRequired: \"sd-question__title--required\",\n indent: 20,\n footer: \"sd-question__footer\",\n formGroup: \"sd-question__form-group\",\n hasError: \"\",\n disabled: \"sd-question--disabled\"\n },\n image: { root: \"sd-image\", image: \"sv_image_image\" },\n error: {\n root: \"sd-question__erbox\",\n icon: \"\",\n item: \"\",\n locationTop: \"sd-question__erbox--location--top\",\n locationBottom: \"sd-question__erbox--location--bottom\"\n },\n checkbox: {\n root: \"sd-selectbase\",\n item: \"sd-item sd-checkbox sd-selectbase__item\",\n itemSelectAll: \"sd-checkbox--selectall\",\n itemNone: \"sd-checkbox--none\",\n itemDisabled: \"sd-item--disabled sd-checkbox--disabled\",\n itemChecked: \"sd-item--checked sd-checkbox--checked\",\n itemHover: \"sd-item--allowhover sd-checkbox--allowhover\",\n itemInline: \"sd-selectbase__item--inline\",\n label: \"sd-selectbase__label\",\n labelChecked: \"\",\n itemControl: \"sd-visuallyhidden sd-item__control sd-checkbox__control\",\n itemDecorator: \"sd-item__svg sd-checkbox__svg\",\n controlLabel: \"sd-item__control-label\",\n materialDecorator: \"sd-item__decorator sd-checkbox__decorator\",\n other: \"sd-input sd-comment sd-selectbase__other\",\n column: \"sd-selectbase__column\"\n },\n radiogroup: {\n root: \"sd-selectbase\",\n item: \"sd-item sd-radio sd-selectbase__item\",\n itemInline: \"sd-selectbase__item--inline\",\n label: \"sd-selectbase__label\",\n labelChecked: \"\",\n itemDisabled: \"sd-item--disabled sd-radio--disabled\",\n itemChecked: \"sd-item--checked sd-radio--checked\",\n itemHover: \"sd-item--allowhover sd-radio--allowhover\",\n itemControl: \"sd-visuallyhidden sd-item__control sd-radio__control\",\n itemDecorator: \"sd-item__svg sd-radio__svg\",\n controlLabel: \"sd-item__control-label\",\n materialDecorator: \"sd-item__decorator sd-radio__decorator\",\n other: \"sd-input sd-comment sd-selectbase__other\",\n clearButton: \"sd-btn sd-selectbase__clear-btn\",\n column: \"sd-selectbase__column\"\n },\n boolean: {\n mainRoot: \"sd-element-with-frame sd-question sd-row__question sd-question--boolean\",\n root: \"\",\n item: \"sd-boolean\",\n control: \"sd-boolean__control sd-visuallyhidden\",\n itemChecked: \"sd-boolean--checked\",\n itemIndeterminate: \"sd-boolean--indeterminate\",\n itemDisabled: \"sd-boolean--disabled\",\n label: \"sd-boolean__label\",\n switch: \"sd-boolean__switch\",\n disabledLabel: \"sd-checkbox__label--disabled\",\n itemDecorator: \"sd-checkbox__hidden\",\n materialDecorator: \"sd-checkbox__rectangle\",\n sliderText: \"\",\n slider: \"sd-boolean__thumb\"\n },\n text: {\n root: \"sd-input sd-text\",\n small: \"sd-row__question--small\",\n controlDisabled: \"sd-input--disabled\",\n onError: \"sd-input--error\"\n },\n multipletext: {\n root: \"sd-multipletext\",\n item: \"sd-multipletext__item\",\n itemTitle: \"sd-multipletext__item-title\",\n row: \"sd-multipletext__row\",\n cell: \"sd-multipletext__cell\"\n },\n dropdown: {\n root: \"sd-selectbase\",\n small: \"sd-row__question--small\",\n control: \"sd-input sd-dropdown\",\n selectWrapper: \"\",\n other: \"sd-input sd-comment\",\n onError: \"sd-input--error\",\n label: \"sd-selectbase__label\",\n item: \"sd-item sd-radio sd-selectbase__item\",\n itemDisabled: \"sd-item--disabled sd-radio--disabled\",\n itemChecked: \"sd-item--checked sd-radio--checked\",\n itemHover: \"sd-item--allowhover sd-radio--allowhover\",\n itemControl: \"sd-visuallyhidden sd-item__control sd-radio__control\",\n itemDecorator: \"sd-item__svg sd-radio__svg\",\n controlDisabled: \"sd-input--disabled\",\n controlLabel: \"sd-item__control-label\",\n materialDecorator: \"sd-item__decorator sd-radio__decorator\"\n },\n imagepicker: {\n mainRoot: \"sd-element-with-frame sd-question sd-row__question sd-scrollable\",\n root: \"sd-imagepicker\",\n item: \"sd-imagepicker__item\",\n itemInline: \"sd-imagepicker__item--inline\",\n itemChecked: \"sd-imagepicker__item--checked\",\n itemDisabled: \"sd-imagepicker__item--disabled\",\n itemHover: \"sd-imagepicker__item--allowhover\",\n label: \"sd-imagepicker__label\",\n itemControl: \"sd-imagepicker__control\",\n image: \"sd-imagepicker__image\",\n itemText: \"sd-imagepicker__text\",\n clearButton: \"sd-btn\",\n other: \"sd-input sd-comment\"\n },\n matrix: {\n mainRoot: \"sd-element-with-frame sd-question sd-row__question sd-scrollable\",\n tableWrapper: \"sd-matrix\",\n root: \"sd-table\",\n rowError: \"sd-matrix__row--error\",\n cell: \"sd-table__cell sd-matrix__cell\",\n headerCell: \"sd-table__cell sd-table__cell--header\",\n label: \"sd-item sd-radio sd-matrix__label\",\n itemValue: \"sd-visuallyhidden sd-item__control sd-radio__control\",\n itemChecked: \"sd-item--checked sd-radio--checked\",\n itemDisabled: \"sd-item--disabled sd-radio--disabled\",\n itemHover: \"sd-radio--allowhover\",\n materialDecorator: \"sd-item__decorator sd-radio__decorator\",\n itemDecorator: \"sd-item__svg sd-radio__svg\",\n cellText: \"sd-matrix__text\",\n cellTextSelected: \"sd-matrix__text--checked\",\n cellTextDisabled: \"sd-matrix__text--disabled\"\n },\n matrixdropdown: {\n mainRoot: \"sd-element-with-frame sd-question sd-row__question sd-scrollable\",\n root: \"sd-table\",\n cell: \"sd-table__cell\",\n headerCell: \"sd-table__cell sd-table__cell--header\"\n },\n matrixdynamic: {\n mainRoot: \"sd-element-with-frame sd-question sd-row__question sd-scrollable\",\n root: \"sd-table sd-matrixdynamic\",\n cell: \"sd-table__cell\",\n headerCell: \"sd-table__cell sd-table__cell--header\",\n button: \"sd-btn\",\n detailRow: \"sd-table__row sd-table__row--detail\",\n detailButton: \"sd-table__cell--detail-button\",\n detailButtonExpanded: \"sd-table__cell--detail-button--expanded\",\n detailIcon: \"sd-detail-panel__icon\",\n detailIconExpanded: \"sd-detail-panel__icon--expanded\",\n detailPanelCell: \"sd-table__cell--detail-panel\",\n actionsCell: \"sd-table__cell sd-table__cell--actions\",\n buttonAdd: \"sd-matrixdynamic__add-btn\",\n buttonRemove: \"sd-matrixdynamic__remove-btn\",\n iconAdd: \"\",\n iconRemove: \"\"\n },\n rating: {\n root: \"sd-rating\",\n item: \"sd-rating__item\",\n itemHover: \"sd-rating__item--allowhover\",\n selected: \"sd-rating__item--selected\",\n minText: \"sd-rating__item-text sd-rating__min-text\",\n itemText: \"sd-rating__item-text\",\n maxText: \"sd-rating__item-text sd-rating__max-text\",\n itemDisabled: \"sd-rating__item--disabled\"\n },\n comment: {\n root: \"sd-input sd-comment\",\n small: \"sd-row__question--small\",\n controlDisabled: \"sd-input--disabled\",\n },\n expression: \"\",\n file: {\n root: \"sd-file\",\n other: \"sd-input sd-comment\",\n placeholderInput: \"sd-visuallyhidden\",\n preview: \"sd-file__preview\",\n fileSign: \"sd-hidden\",\n fileList: \"sd-file__list\",\n fileSignBottom: \"sd-file__sign\",\n fileDecorator: \"sd-file__decorator\",\n fileDecoratorDrag: \"sd-file__decorator--drag\",\n fileInput: \"sd-visuallyhidden\",\n noFileChosen: \"sd-description sd-file__no-file-chosen\",\n chooseFile: \"sd-file__btn sd-file__choose-btn\",\n disabled: \"sd-file__choose-btn--disabled\",\n removeButton: \"sd-hidden\",\n removeButtonBottom: \"sd-file__btn sd-file__clean-btn\",\n removeFile: \"sd-hidden\",\n removeFileSvg: \"sd-hidden\",\n wrapper: \"sd-file__wrapper\",\n defaultImage: \"sd-file__default-image\",\n removeFileButton: \"sd-file__remove-file-button\",\n dragAreaPlaceholder: \"sd-file__drag-area-placeholder\"\n },\n signaturepad: {\n root: \"sd-signaturepad sjs_sp_container\",\n small: \"sd-row__question--small\",\n controls: \"sjs_sp_controls\",\n placeholder: \"sjs_sp_placeholder\",\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\"][\"defaultV2\"] = defaultV2Css;\n\n\n/***/ }),\n\n/***/ \"./src/defaultTitle.ts\":\n/*!*****************************!*\\\n !*** ./src/defaultTitle.ts ***!\n \\*****************************/\n/*! exports provided: DefaultTitleModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DefaultTitleModel\", function() { return DefaultTitleModel; });\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n\nvar DefaultTitleModel = /** @class */ (function () {\n function DefaultTitleModel() {\n }\n DefaultTitleModel.getIconCss = function (cssClasses, isCollapsed) {\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_0__[\"CssClassBuilder\"]()\n .append(cssClasses.icon)\n .append(cssClasses.iconExpanded, !isCollapsed)\n .toString();\n };\n return DefaultTitleModel;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/dragdrop/choices.ts\":\n/*!*********************************!*\\\n !*** ./src/dragdrop/choices.ts ***!\n \\*********************************/\n/*! exports provided: DragDropChoices */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DragDropChoices\", function() { return DragDropChoices; });\n/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./core */ \"./src/dragdrop/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\nvar DragDropChoices = /** @class */ (function (_super) {\n __extends(DragDropChoices, _super);\n function DragDropChoices() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Object.defineProperty(DragDropChoices.prototype, \"draggedElementType\", {\n get: function () {\n return \"item-value\";\n },\n enumerable: false,\n configurable: true\n });\n DragDropChoices.prototype.getShortcutText = function (draggedElement) {\n return draggedElement.text;\n };\n DragDropChoices.prototype.createDraggedElementShortcut = function (text, draggedElementNode) {\n if (this.parentElement.getType() === \"imagepicker\") {\n return _super.prototype.createDraggedElementShortcut.call(this, text, draggedElementNode);\n }\n var draggedElementShortcut = document.createElement(\"div\");\n // draggedElementShortcut.innerText = text;\n draggedElementShortcut.style.cssText = \" \\n cursor: grabbing;\\n position: absolute;\\n z-index: 1000;\\n border-radius: 36px;\\n min-width: 100px;\\n box-shadow: 0px 8px 16px rgba(0, 0, 0, 0.1);\\n background-color: white;\\n padding-right: 16px;\\n padding-left: 20px;\\n font-family: \\\"Open Sans\\\";\\n \";\n var isDeepClone = true;\n var clone = (draggedElementNode\n .closest(\"[data-sv-drop-target-item-value]\")\n .cloneNode(isDeepClone));\n var controlsNode = clone.querySelector(\".svc-item-value-controls\");\n controlsNode.style.display = \"block\";\n clone.classList.remove(\"svc-item-value--moveup\");\n clone.classList.remove(\"svc-item-value--movedown\");\n this.draggedElement.isDragDropMoveDown = false;\n this.draggedElement.isDragDropMoveUp = false;\n draggedElementShortcut.appendChild(clone);\n this.isBottom = null;\n return draggedElementShortcut;\n };\n DragDropChoices.prototype.findDropTargetNodeByDragOverNode = function (dragOverNode) {\n var result = dragOverNode.closest(this.dropTargetDataAttributeName);\n return result;\n };\n DragDropChoices.prototype.getDropTargetByDataAttributeValue = function (dataAttributeValue) {\n var dragOverChoice;\n dragOverChoice = this.parentElement.choices.filter(function (choice) { return \"\" + choice.value == dataAttributeValue; })[0];\n return dragOverChoice;\n };\n DragDropChoices.prototype.getVisibleChoices = function () {\n var parent = this.parentElement;\n if (parent.getType() === \"ranking\")\n return parent.rankingChoices;\n return parent.visibleChoices;\n };\n DragDropChoices.prototype.isDropTargetValid = function (dropTarget) {\n var choices = this.getVisibleChoices();\n if (this.parentElement.getType() !== \"imagepicker\") {\n var dropTargetIndex = choices.indexOf(this.dropTarget);\n var draggedElementIndex = choices.indexOf(this.draggedElement);\n if (draggedElementIndex > dropTargetIndex && this.dropTarget.isDragDropMoveUp) {\n this.dropTarget.isDragDropMoveUp = false;\n return false;\n }\n if (draggedElementIndex < dropTargetIndex && this.dropTarget.isDragDropMoveDown) {\n this.dropTarget.isDragDropMoveDown = false;\n return false;\n }\n }\n // shouldn't allow to drop on \"adorners\" (selectall, none, other)\n if (choices.indexOf(dropTarget) === -1)\n return false;\n return true;\n };\n DragDropChoices.prototype.calculateIsBottom = function (clientY) {\n var choices = this.getVisibleChoices();\n return (choices.indexOf(this.dropTarget) - choices.indexOf(this.draggedElement) >\n 0);\n };\n DragDropChoices.prototype.afterDragOver = function (dropTargetNode) {\n if (this.isDropTargetDoesntChanged(this.isBottom))\n return;\n if (this.dropTarget === this.draggedElement)\n return;\n var choices = this.getVisibleChoices();\n var dropTargetIndex = choices.indexOf(this.dropTarget);\n var draggedElementIndex = choices.indexOf(this.draggedElement);\n choices.splice(draggedElementIndex, 1);\n choices.splice(dropTargetIndex, 0, this.draggedElement);\n if (this.parentElement.getType() === \"imagepicker\")\n return;\n if (draggedElementIndex !== dropTargetIndex) {\n dropTargetNode.classList.remove(\"svc-item-value--moveup\");\n dropTargetNode.classList.remove(\"svc-item-value--movedown\");\n this.dropTarget.isDragDropMoveDown = false;\n this.dropTarget.isDragDropMoveUp = false;\n }\n if (draggedElementIndex > dropTargetIndex) {\n this.dropTarget.isDragDropMoveDown = true;\n }\n if (draggedElementIndex < dropTargetIndex) {\n this.dropTarget.isDragDropMoveUp = true;\n }\n _super.prototype.ghostPositionChanged.call(this);\n };\n DragDropChoices.prototype.doDrop = function () {\n var choices = this.parentElement.choices;\n var filteredChoices = this.getVisibleChoices().filter(function (item) {\n return choices.indexOf(item) !== -1;\n });\n var oldIndex = choices.indexOf(this.draggedElement);\n var newIndex = filteredChoices.indexOf(this.draggedElement);\n choices.splice(oldIndex, 1);\n choices.splice(newIndex, 0, this.draggedElement);\n return this.parentElement;\n };\n DragDropChoices.prototype.doClear = function () {\n this.updateVisibleChoices();\n };\n DragDropChoices.prototype.updateVisibleChoices = function () {\n var parent = this.parentElement;\n this.parentElement.getType() === \"ranking\" ?\n parent.updateRankingChoices() :\n parent[\"updateVisibleChoices\"]();\n };\n return DragDropChoices;\n}(_core__WEBPACK_IMPORTED_MODULE_0__[\"DragDropCore\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/dragdrop/core.ts\":\n/*!******************************!*\\\n !*** ./src/dragdrop/core.ts ***!\n \\******************************/\n/*! exports provided: DragDropCore */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DragDropCore\", function() { return DragDropCore; });\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 _utils_utils__WEBPACK_IMPORTED_MODULE_2__ = __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\nvar DragDropCore = /** @class */ (function (_super) {\n __extends(DragDropCore, _super);\n function DragDropCore(surveyValue, creator) {\n var _this = _super.call(this) || this;\n _this.surveyValue = surveyValue;\n _this.creator = creator;\n _this.onGhostPositionChanged = new _base__WEBPACK_IMPORTED_MODULE_0__[\"EventBase\"]();\n _this.onBeforeDrop = new _base__WEBPACK_IMPORTED_MODULE_0__[\"EventBase\"]();\n _this.onAfterDrop = new _base__WEBPACK_IMPORTED_MODULE_0__[\"EventBase\"]();\n _this.draggedElement = null;\n _this.dropTarget = null;\n _this.prevDropTarget = null;\n _this.draggedElementShortcut = null;\n _this.scrollIntervalId = null;\n _this.allowDropHere = false;\n _this.dragOver = function (event) {\n _this.moveShortcutElement(event);\n _this.draggedElementShortcut.style.cursor = \"grabbing\";\n var dropTargetNode = _this.findDropTargetNodeFromPoint(event.clientX, event.clientY);\n if (!dropTargetNode) {\n _this.banDropHere();\n return;\n }\n _this.dropTarget = _this.getDropTargetByNode(dropTargetNode, event);\n var isDropTargetValid = _this.isDropTargetValid(_this.dropTarget, dropTargetNode);\n _this.doDragOver(dropTargetNode);\n if (!isDropTargetValid) {\n _this.banDropHere();\n return;\n }\n var isBottom = _this.calculateIsBottom(event.clientY, dropTargetNode);\n _this.allowDropHere = true;\n if (_this.isDropTargetDoesntChanged(isBottom))\n return;\n _this.isBottom = null; //TODO need for property change trigger with guarantee but it would be better not to watch on isBottom property but have some event like onValidTargetDragOver\n _this.isBottom = isBottom;\n _this.afterDragOver(dropTargetNode);\n _this.prevDropTarget = _this.dropTarget;\n };\n _this.drop = function () {\n if (_this.allowDropHere) {\n _this.onBeforeDrop.fire(_this, null);\n var newElement = _this.doDrop();\n _this.onAfterDrop.fire(_this, { draggedElement: newElement });\n }\n _this.clear();\n };\n _this.handlePointerCancel = function (event) {\n _this.clear();\n };\n _this.handleEscapeButton = function (event) {\n if (event.keyCode == 27) {\n _this.clear();\n }\n };\n _this.banDropHere = function () {\n _this.doBanDropHere();\n _this.allowDropHere = false;\n _this.dropTarget = null;\n _this.draggedElementShortcut.style.cursor = \"not-allowed\";\n _this.isBottom = null;\n };\n _this.doBanDropHere = function () { };\n _this.clear = function () {\n cancelAnimationFrame(_this.scrollIntervalId);\n document.removeEventListener(\"pointermove\", _this.dragOver);\n document.removeEventListener(\"pointercancel\", _this.handlePointerCancel);\n document.removeEventListener(\"keydown\", _this.handleEscapeButton);\n document.removeEventListener(\"pointerup\", _this.drop);\n _this.draggedElementShortcut.removeEventListener(\"pointerup\", _this.drop);\n document.body.removeChild(_this.draggedElementShortcut);\n _this.doClear();\n _this.dropTarget = null;\n _this.draggedElementShortcut = null;\n _this.draggedElement = null;\n _this.isBottom = null;\n _this.parentElement = null;\n _this.scrollIntervalId = null;\n };\n return _this;\n }\n DragDropCore.prototype.ghostPositionChanged = function () {\n this.onGhostPositionChanged.fire({}, {});\n };\n Object.defineProperty(DragDropCore.prototype, \"dropTargetDataAttributeName\", {\n get: function () {\n return \"[data-sv-drop-target-\" + this.draggedElementType + \"]\";\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(DragDropCore.prototype, \"survey\", {\n get: function () {\n return this.surveyValue || this.creator.survey;\n },\n enumerable: false,\n configurable: true\n });\n DragDropCore.prototype.startDrag = function (event, draggedElement, parentElement, draggedElementNode) {\n if (event.which === 3)\n return; //right mouse btn\n this.draggedElement = draggedElement;\n this.parentElement = parentElement;\n this.doStartDrag();\n var shortcutText = this.getShortcutText(this.draggedElement);\n this.draggedElementShortcut = this.createDraggedElementShortcut(shortcutText, draggedElementNode);\n document.body.append(this.draggedElementShortcut);\n this.moveShortcutElement(event);\n document.addEventListener(\"pointermove\", this.dragOver);\n document.addEventListener(\"pointercancel\", this.handlePointerCancel);\n document.addEventListener(\"keydown\", this.handleEscapeButton);\n document.addEventListener(\"pointerup\", this.drop);\n this.draggedElementShortcut.addEventListener(\"pointerup\", this.drop);\n };\n DragDropCore.prototype.isDropTargetDoesntChanged = function (newIsBottom) {\n return (this.dropTarget === this.prevDropTarget && newIsBottom === this.isBottom);\n };\n DragDropCore.prototype.doStartDrag = function () { };\n DragDropCore.prototype.createDraggedElementShortcut = function (text, draggedElementNode) {\n var draggedElementShortcut = document.createElement(\"div\");\n draggedElementShortcut.innerText = text;\n draggedElementShortcut.style.cssText =\n \"height: 24px; min-width: 100px; border-radius: 36px; background-color: white; padding: 16px; cursor: grabbing; position: absolute; z-index: 1000; box-shadow: 0px 8px 16px rgba(0, 0, 0, 0.1); font-family: 'Open Sans'; font-size: 16px; padding-left: 20px; line-height: 24px;\";\n return draggedElementShortcut;\n };\n DragDropCore.prototype.doDragOver = function (dropTargetNode) { };\n DragDropCore.prototype.afterDragOver = function (dropTargetNode) { };\n DragDropCore.prototype.getGhostPosition = function (item) {\n if (this.dropTarget !== item)\n return null;\n if (this.isBottom)\n return \"bottom\";\n return \"top\";\n };\n DragDropCore.prototype.moveShortcutElement = function (event) {\n this.doScroll(event.clientY, event.clientX);\n var shortcutHeight = this.draggedElementShortcut.offsetHeight;\n var shortcutWidth = this.draggedElementShortcut.offsetWidth;\n var shortcutXOffset;\n var shortcutYOffset;\n var draggedIcon = this.draggedElementShortcut.querySelector(\".svc-item-value-controls__drag .sv-svg-icon\")\n || this.draggedElementShortcut.querySelector(\".sv-ranking-item__icon\");\n if (draggedIcon) {\n var rectOuter = this.draggedElementShortcut.getBoundingClientRect();\n var rectInner = draggedIcon.getBoundingClientRect();\n shortcutXOffset = rectInner.x - rectOuter.x + rectInner.width / 2;\n shortcutYOffset = rectInner.y - rectOuter.y + rectInner.height / 2;\n }\n else {\n shortcutXOffset = shortcutWidth / 2;\n shortcutYOffset = shortcutHeight / 2;\n }\n var documentClientHeight = document.documentElement.clientHeight;\n var documentClientWidth = document.documentElement.clientWidth;\n if (event.clientX + shortcutXOffset >= documentClientWidth) {\n this.draggedElementShortcut.style.left =\n event.pageX -\n event.clientX +\n documentClientWidth -\n shortcutWidth +\n \"px\";\n this.draggedElementShortcut.style.top =\n event.pageY - shortcutYOffset + \"px\";\n return;\n }\n if (event.clientX - shortcutXOffset <= 0) {\n this.draggedElementShortcut.style.left =\n event.pageX - event.clientX + \"px\";\n this.draggedElementShortcut.style.top =\n event.pageY - shortcutYOffset + \"px\";\n return;\n }\n if (event.clientY + shortcutYOffset >= documentClientHeight) {\n this.draggedElementShortcut.style.left =\n event.pageX - shortcutXOffset + \"px\";\n this.draggedElementShortcut.style.top =\n event.pageY -\n event.clientY +\n documentClientHeight -\n shortcutHeight +\n \"px\";\n return;\n }\n if (event.clientY - shortcutYOffset <= 0) {\n this.draggedElementShortcut.style.left =\n event.pageX - shortcutXOffset + \"px\";\n this.draggedElementShortcut.style.top =\n event.pageY - event.clientY + \"px\";\n return;\n }\n this.draggedElementShortcut.style.left =\n event.pageX - shortcutXOffset + \"px\";\n this.draggedElementShortcut.style.top =\n event.pageY - shortcutYOffset + \"px\";\n };\n DragDropCore.prototype.doScroll = function (clientY, clientX) {\n var _this = this;\n cancelAnimationFrame(this.scrollIntervalId);\n var startScrollBoundary = 50;\n this.draggedElementShortcut.hidden = true;\n var dragOverNode = document.elementFromPoint(clientX, clientY);\n this.draggedElementShortcut.hidden = false;\n var scrollableParentNode = Object(_utils_utils__WEBPACK_IMPORTED_MODULE_2__[\"findScrollableParent\"])(dragOverNode);\n var top = scrollableParentNode.getBoundingClientRect().top;\n var bottom = scrollableParentNode.getBoundingClientRect().bottom;\n var left = scrollableParentNode.getBoundingClientRect().left;\n var right = scrollableParentNode.getBoundingClientRect().right;\n var repeat = function () {\n if (clientY - top <= startScrollBoundary) {\n scrollableParentNode.scrollTop -= 15;\n }\n else if (bottom - clientY <= startScrollBoundary) {\n scrollableParentNode.scrollTop += 15;\n }\n else if (right - clientX <= startScrollBoundary) {\n scrollableParentNode.scrollLeft += 15;\n }\n else if (clientX - left <= startScrollBoundary) {\n scrollableParentNode.scrollLeft -= 15;\n }\n _this.scrollIntervalId = requestAnimationFrame(repeat);\n };\n this.scrollIntervalId = requestAnimationFrame(repeat);\n };\n DragDropCore.prototype.getDataAttributeValueByNode = function (node) {\n var _this = this;\n var datasetName = \"svDropTarget\";\n var words = this.draggedElementType.split(\"-\");\n words.forEach(function (word) {\n datasetName += _this.capitalizeFirstLetter(word);\n });\n return node.dataset[datasetName];\n };\n DragDropCore.prototype.getDropTargetByNode = function (dropTargetNode, event) {\n var dataAttributeValue = this.getDataAttributeValueByNode(dropTargetNode);\n return this.getDropTargetByDataAttributeValue(dataAttributeValue, dropTargetNode, event);\n };\n DragDropCore.prototype.capitalizeFirstLetter = function (string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n };\n DragDropCore.prototype.calculateMiddleOfHTMLElement = function (HTMLElement) {\n var rect = HTMLElement.getBoundingClientRect();\n return rect.y + rect.height / 2;\n };\n DragDropCore.prototype.findDropTargetNodeFromPoint = function (clientX, clientY) {\n this.draggedElementShortcut.hidden = true;\n var dragOverNode = document.elementFromPoint(clientX, clientY);\n this.draggedElementShortcut.hidden = false;\n if (!dragOverNode)\n return null;\n return this.findDropTargetNodeByDragOverNode(dragOverNode);\n };\n DragDropCore.prototype.findDropTargetNodeByDragOverNode = function (dragOverNode) {\n var result = dragOverNode.querySelector(this.dropTargetDataAttributeName) ||\n dragOverNode.closest(this.dropTargetDataAttributeName);\n return result;\n };\n DragDropCore.prototype.doClear = function () { };\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({\n defaultValue: null,\n onSet: function (val, target) {\n target.ghostPositionChanged();\n },\n })\n ], DragDropCore.prototype, \"isBottom\", void 0);\n return DragDropCore;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/dragdrop/matrix-rows.ts\":\n/*!*************************************!*\\\n !*** ./src/dragdrop/matrix-rows.ts ***!\n \\*************************************/\n/*! exports provided: DragDropMatrixRows */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DragDropMatrixRows\", function() { return DragDropMatrixRows; });\n/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./core */ \"./src/dragdrop/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\nvar DragDropMatrixRows = /** @class */ (function (_super) {\n __extends(DragDropMatrixRows, _super);\n function DragDropMatrixRows() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.doDrop = function () {\n var matrix = _this.parentElement;\n var fromIndex = matrix.visibleRows.indexOf(_this.draggedElement);\n var toIndex = matrix.visibleRows.indexOf(_this.dropTarget);\n matrix.moveRowByIndex(fromIndex, toIndex);\n return matrix;\n };\n return _this;\n }\n Object.defineProperty(DragDropMatrixRows.prototype, \"draggedElementType\", {\n get: function () {\n return \"matrix-row\";\n },\n enumerable: false,\n configurable: true\n });\n DragDropMatrixRows.prototype.ghostPositionChanged = function () {\n var _this = this;\n this.parentElement.renderedTable.rows.forEach(function (renderedRow) {\n renderedRow.ghostPosition = _this.getGhostPosition(renderedRow.row);\n });\n _super.prototype.ghostPositionChanged.call(this);\n };\n DragDropMatrixRows.prototype.getShortcutText = function (draggedElement) {\n var matrix = this.parentElement;\n var index = matrix.visibleRows.indexOf(draggedElement) + 1;\n var questionValue1 = draggedElement.cells.length > 1 ? draggedElement.cells[1].questionValue : undefined;\n var questionValue0 = draggedElement.cells.length > 0 ? draggedElement.cells[0].questionValue : undefined;\n return (questionValue1 && questionValue1.value ||\n questionValue0 && questionValue0.value ||\n \"\" + index);\n };\n DragDropMatrixRows.prototype.getDropTargetByDataAttributeValue = function (dataAttributeValue) {\n var matrix = this.parentElement;\n var dropTargetRow;\n dropTargetRow = matrix.visibleRows.filter(function (row) { return row.id === dataAttributeValue; })[0];\n return dropTargetRow;\n };\n DragDropMatrixRows.prototype.isDropTargetValid = function (dropTarget) {\n if (this.dropTarget === this.draggedElement)\n return false;\n var rows = this.parentElement.visibleRows;\n return rows.indexOf(dropTarget) !== -1;\n };\n DragDropMatrixRows.prototype.findDropTargetNodeByDragOverNode = function (dragOverNode) {\n var result = dragOverNode.closest(this.dropTargetDataAttributeName);\n return result;\n };\n DragDropMatrixRows.prototype.calculateIsBottom = function (clientY) {\n var rows = this.parentElement.visibleRows;\n return (rows.indexOf(this.dropTarget) - rows.indexOf(this.draggedElement) > 0);\n };\n return DragDropMatrixRows;\n}(_core__WEBPACK_IMPORTED_MODULE_0__[\"DragDropCore\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/dragdrop/ranking-choices.ts\":\n/*!*****************************************!*\\\n !*** ./src/dragdrop/ranking-choices.ts ***!\n \\*****************************************/\n/*! exports provided: DragDropRankingChoices */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DragDropRankingChoices\", function() { return DragDropRankingChoices; });\n/* harmony import */ var _choices__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./choices */ \"./src/dragdrop/choices.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\nvar DragDropRankingChoices = /** @class */ (function (_super) {\n __extends(DragDropRankingChoices, _super);\n function DragDropRankingChoices() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.doDrop = function () {\n _this.parentElement.setValue();\n return _this.parentElement;\n };\n _this.handleEscapeButton = function (event) {\n if (event.keyCode == 27) {\n _this.parentElement.updateRankingChoices();\n _this.clear();\n }\n };\n _this.doClear = function () {\n _this.parentElement.dropTargetNodeMove = null;\n };\n return _this;\n }\n Object.defineProperty(DragDropRankingChoices.prototype, \"draggedElementType\", {\n get: function () {\n return \"ranking-item\";\n },\n enumerable: false,\n configurable: true\n });\n DragDropRankingChoices.prototype.createDraggedElementShortcut = function (text, draggedElementNode) {\n var draggedElementShortcut = document.createElement(\"div\");\n // draggedElementShortcut.innerText = text;\n draggedElementShortcut.style.cssText = \" \\n cursor: grabbing;\\n position: absolute;\\n z-index: 1000;\\n border-radius: 36px;\\n min-width: 100px;\\n box-shadow: 0px 8px 16px rgba(0, 0, 0, 0.1);\\n background-color: white;\\n padding-right: 16px;\\n padding-left: 20px;\\n font-family: \\\"Open Sans\\\";\\n \";\n var isDeepClone = true;\n var clone = draggedElementNode.cloneNode(isDeepClone);\n draggedElementShortcut.appendChild(clone);\n return draggedElementShortcut;\n };\n DragDropRankingChoices.prototype.getDropTargetByDataAttributeValue = function (dataAttributeValue) {\n return this.parentElement.rankingChoices[dataAttributeValue];\n };\n DragDropRankingChoices.prototype.isDropTargetValid = function (dropTarget, dropTargetNode) {\n var choices = this.parentElement.rankingChoices;\n var dropTargetIndex = choices.indexOf(this.dropTarget);\n var draggedElementIndex = choices.indexOf(this.draggedElement);\n if (draggedElementIndex > dropTargetIndex && dropTargetNode.classList.contains(\"sv-dragdrop-moveup\")) {\n this.parentElement.dropTargetNodeMove = null;\n return false;\n }\n if (draggedElementIndex < dropTargetIndex && dropTargetNode.classList.contains(\"sv-dragdrop-movedown\")) {\n this.parentElement.dropTargetNodeMove = null;\n return false;\n }\n if (choices.indexOf(dropTarget) === -1)\n // shouldn't allow to drop on \"adorners\" (selectall, none, other)\n return false;\n return true;\n };\n DragDropRankingChoices.prototype.calculateIsBottom = function (clientY) {\n var choices = this.parentElement.rankingChoices;\n return (choices.indexOf(this.dropTarget) - choices.indexOf(this.draggedElement) >\n 0);\n };\n DragDropRankingChoices.prototype.afterDragOver = function (dropTargetNode) {\n var choices = this.parentElement.rankingChoices;\n var dropTargetIndex = choices.indexOf(this.dropTarget);\n var draggedElementIndex = choices.indexOf(this.draggedElement);\n choices.splice(draggedElementIndex, 1);\n choices.splice(dropTargetIndex, 0, this.draggedElement);\n this.parentElement.setPropertyValue(\"rankingChoices\", choices);\n this.updateDraggedElementShortcut(dropTargetIndex + 1);\n if (draggedElementIndex !== dropTargetIndex) {\n dropTargetNode.classList.remove(\"sv-dragdrop-moveup\");\n dropTargetNode.classList.remove(\"sv-dragdrop-movedown\");\n this.parentElement.dropTargetNodeMove = null;\n }\n if (draggedElementIndex > dropTargetIndex) {\n this.parentElement.dropTargetNodeMove = \"down\";\n }\n if (draggedElementIndex < dropTargetIndex) {\n this.parentElement.dropTargetNodeMove = \"up\";\n }\n };\n DragDropRankingChoices.prototype.updateDraggedElementShortcut = function (newIndex) {\n var newIndexText = newIndex + \"\";\n // TODO should avoid direct DOM manipulation, do through the frameworks instead\n var indexNode = this.draggedElementShortcut.querySelector(\".sv-ranking-item__index\");\n indexNode.innerText = newIndexText;\n };\n DragDropRankingChoices.prototype.ghostPositionChanged = function () {\n this.parentElement.currentDropTarget = this.draggedElement;\n _super.prototype.ghostPositionChanged.call(this);\n };\n return DragDropRankingChoices;\n}(_choices__WEBPACK_IMPORTED_MODULE_0__[\"DragDropChoices\"]));\n\n\n\n/***/ }),\n\n/***/ \"./src/dragdrop/survey-elements.ts\":\n/*!*****************************************!*\\\n !*** ./src/dragdrop/survey-elements.ts ***!\n \\*****************************************/\n/*! exports provided: DragDropSurveyElements */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DragDropSurveyElements\", function() { return DragDropSurveyElements; });\n/* harmony import */ var _survey_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../survey-element */ \"./src/survey-element.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./core */ \"./src/dragdrop/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\nvar DragDropSurveyElements = /** @class */ (function (_super) {\n __extends(DragDropSurveyElements, _super);\n function DragDropSurveyElements() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.isEdge = false;\n _this.prevIsEdge = null;\n _this.ghostSurveyElement = null;\n _this.doBanDropHere = function () {\n _this.removeGhostElementFromSurvey();\n _this.isEdge = null;\n };\n _this.doDrop = function () {\n if (_this.dropTarget) {\n return _this.insertRealElementIntoSurvey();\n }\n return null;\n };\n _this.doClear = function () {\n _this.removeGhostElementFromSurvey();\n _this.isEdge = null;\n _this.ghostSurveyElement = null;\n };\n return _this;\n }\n Object.defineProperty(DragDropSurveyElements.prototype, \"draggedElementType\", {\n get: function () {\n return \"survey-element\";\n },\n enumerable: false,\n configurable: true\n });\n DragDropSurveyElements.prototype.startDragToolboxItem = function (event, draggedElementJson) {\n var draggedElement = this.createElementFromJson(draggedElementJson);\n this.startDrag(event, draggedElement);\n };\n DragDropSurveyElements.prototype.createElementFromJson = function (json) {\n var element = this.createNewElement(json);\n if (element[\"setSurveyImpl\"]) {\n element[\"setSurveyImpl\"](this.survey);\n }\n else {\n element[\"setData\"](this.survey);\n }\n element.renderWidth = \"100%\";\n return element;\n };\n DragDropSurveyElements.prototype.createNewElement = function (json) {\n var newElement = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].createClass(json[\"type\"]);\n new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]().toObject(json, newElement);\n return newElement;\n };\n DragDropSurveyElements.prototype.getShortcutText = function (draggedElement) {\n return draggedElement[\"title\"] || draggedElement[\"name\"];\n };\n DragDropSurveyElements.prototype.getDropTargetByDataAttributeValue = function (dataAttributeValue, dropTargetNode, event) {\n this.isEdge = this.calculateIsEdge(dropTargetNode, event.clientY);\n if (!dataAttributeValue) {\n // panel dynamic\n var nearestDropTargetElement = dropTargetNode.parentElement.closest(this.dropTargetDataAttributeName);\n dataAttributeValue = this.getDataAttributeValueByNode(nearestDropTargetElement);\n }\n if (!dataAttributeValue) {\n throw new Error(\"Can't find drop target survey element name\");\n }\n if (dataAttributeValue === DragDropSurveyElements.ghostSurveyElementName) {\n return this.prevDropTarget;\n }\n // drop to new page\n if (dataAttributeValue === \"newGhostPage\") {\n return DragDropSurveyElements.newGhostPage;\n }\n // drop to page\n var page = this.survey.getPageByName(dataAttributeValue);\n if (page) {\n if (\n // TODO we can't drop on not empty page directly for now\n page.elements.length !== 0) {\n return null;\n }\n return page;\n }\n // drop to question or panel\n var dropTarget;\n var question;\n this.survey.pages.forEach(function (page) {\n question = page.getElementByName(dataAttributeValue);\n if (question)\n dropTarget = question;\n });\n // drop to paneldynamic\n if (dropTarget.getType() === \"paneldynamic\" && !this.isEdge) {\n dropTarget = dropTarget.template;\n }\n // drop to panel\n else if (dropTarget.isPanel) {\n var panelDragInfo = this.getPanelDragInfo(dropTargetNode, dropTarget, event);\n dropTarget = panelDragInfo.dropTarget;\n this.isEdge = panelDragInfo.isEdge;\n }\n // drop to question\n //question inside paneldymanic\n if (!dropTarget.page) {\n var nearestDropTargetPageElement = dropTargetNode.parentElement.closest(\"[data-sv-drop-target-page]\");\n dataAttributeValue = nearestDropTargetPageElement.dataset.svDropTargetPage;\n var page_1 = this.survey.getPageByName(dataAttributeValue);\n dropTarget.__page = page_1;\n }\n return dropTarget;\n // EO drop to question or panel\n };\n DragDropSurveyElements.prototype.isDropTargetValid = function (dropTarget) {\n if (!dropTarget)\n return false;\n if (this.dropTarget === this.draggedElement)\n return false;\n if (DragDropSurveyElements.restrictDragQuestionBetweenPages &&\n this.shouldRestricDragQuestionBetweenPages(dropTarget)) {\n return false;\n }\n return true;\n };\n DragDropSurveyElements.prototype.calculateIsBottom = function (clientY, dropTargetNode) {\n // we shouldn't reculc isBottom if drag over ghost survey element\n if (this.getDataAttributeValueByNode(dropTargetNode) === DragDropSurveyElements.ghostSurveyElementName) {\n return this.isBottom;\n }\n var middle = this.calculateMiddleOfHTMLElement(dropTargetNode);\n return clientY >= middle;\n };\n DragDropSurveyElements.prototype.isDropTargetDoesntChanged = function (newIsBottom) {\n if (this.dropTarget === this.ghostSurveyElement)\n return true;\n return (this.dropTarget === this.prevDropTarget && newIsBottom === this.isBottom\n /*&&this.isEdge === this.prevIsEdge*/\n );\n };\n DragDropSurveyElements.prototype.shouldRestricDragQuestionBetweenPages = function (dropTarget) {\n var oldPage = this.draggedElement[\"page\"];\n var newPage = dropTarget.isPage ? dropTarget : dropTarget[\"page\"];\n // if oldPage === null then it is drom the toolbox\n return oldPage && oldPage !== newPage;\n };\n DragDropSurveyElements.prototype.getPanelDragInfo = function (HTMLElement, dropTarget, event) {\n var isEdge = this.isEdge;\n if (!isEdge && dropTarget.questions.length !== 0) {\n HTMLElement = this.findDeepestDropTargetChild(HTMLElement);\n dropTarget = this.getDropTargetByNode(HTMLElement, event);\n }\n return { dropTarget: dropTarget, isEdge: isEdge };\n };\n DragDropSurveyElements.prototype.findDeepestDropTargetChild = function (parent) {\n var selector = this.dropTargetDataAttributeName;\n var result = parent;\n while (!!parent) {\n result = parent;\n parent = parent.querySelector(selector);\n }\n return result;\n };\n DragDropSurveyElements.prototype.calculateIsEdge = function (HTMLElement, clientY) {\n var middle = this.calculateMiddleOfHTMLElement(HTMLElement);\n return Math.abs(clientY - middle) >= DragDropSurveyElements.edgeHeight;\n };\n DragDropSurveyElements.prototype.calculateIsRight = function () {\n var pageOrPanel = this.dropTarget.parent;\n var srcIndex = pageOrPanel.elements.indexOf(this.draggedElement);\n var destIndex = pageOrPanel.elements.indexOf(this.dropTarget);\n return srcIndex < destIndex;\n };\n DragDropSurveyElements.prototype.afterDragOver = function () {\n this.prevIsEdge = this.isEdge;\n this.insertGhostElementIntoSurvey();\n };\n DragDropSurveyElements.prototype.doStartDrag = function () {\n this.ghostSurveyElement = this.createGhostSurveyElement();\n };\n DragDropSurveyElements.prototype.insertGhostElementIntoSurvey = function () {\n this.removeGhostElementFromSurvey();\n var isTargetRowMultiple = this.calcTargetRowMultiple();\n this.ghostSurveyElement = this.createGhostSurveyElement(isTargetRowMultiple);\n this.ghostSurveyElement.name =\n DragDropSurveyElements.ghostSurveyElementName; // TODO why do we need setup it manually see createGhostSurveyElement method\n this.parentElement = this.dropTarget.isPage\n ? this.dropTarget\n : (this.dropTarget.page || this.dropTarget.__page);\n if (this.isDragOverInsideEmptyPanel()) {\n this.dropTarget.dragTypeOverMe = _survey_element__WEBPACK_IMPORTED_MODULE_0__[\"DragTypeOverMeEnum\"].InsideEmptyPanel;\n return;\n }\n if (!this.isEdge && isTargetRowMultiple) {\n this.dropTarget.dragTypeOverMe = this.calculateIsRight() ?\n _survey_element__WEBPACK_IMPORTED_MODULE_0__[\"DragTypeOverMeEnum\"].MultilineRight :\n _survey_element__WEBPACK_IMPORTED_MODULE_0__[\"DragTypeOverMeEnum\"].MultilineLeft;\n return;\n }\n this.parentElement.dragDropStart(this.draggedElement, this.ghostSurveyElement, DragDropSurveyElements.nestedPanelDepth);\n var result = this.parentElement.dragDropMoveTo(this.dropTarget, isTargetRowMultiple ? this.calculateIsRight() : this.isBottom, this.isEdge);\n return result;\n };\n DragDropSurveyElements.prototype.calcTargetRowMultiple = function () {\n var _this = this;\n var targetParent = this.dropTarget.isPage || this.dropTarget.isPanel ? this.dropTarget : this.dropTarget.parent;\n if (this.dropTarget.getType() === \"paneldynamic\") {\n targetParent = this.dropTarget.templateValue;\n }\n var targetRow;\n targetParent.rows.forEach(function (row) {\n if (row.elements.indexOf(_this.dropTarget) !== -1) {\n targetRow = row;\n }\n });\n var isTargetRowMultiple = targetRow && targetRow.elements.length > 1;\n if (this.isEdge && isTargetRowMultiple) {\n targetParent.__page = this.dropTarget.page;\n this.dropTarget = targetParent;\n return false;\n }\n return isTargetRowMultiple;\n };\n DragDropSurveyElements.prototype.isDragOverInsideEmptyPanel = function () {\n var isEmptyPanel = this.dropTarget.isPanel && this.dropTarget.questions.length === 0;\n var isDragOverInside = !this.isEdge;\n return isEmptyPanel && isDragOverInside;\n };\n DragDropSurveyElements.prototype.removeGhostElementFromSurvey = function () {\n var dropTarget = this.prevDropTarget || this.dropTarget;\n if (!!dropTarget) {\n dropTarget.dragTypeOverMe = null;\n }\n if (!!this.parentElement)\n this.parentElement.dragDropFinish(true);\n };\n DragDropSurveyElements.prototype.insertRealElementIntoSurvey = function () {\n this.removeGhostElementFromSurvey();\n var isTargetRowMultiple = this.calcTargetRowMultiple();\n // ghost new page\n if (this.dropTarget.isPage && this.dropTarget[\"_isGhost\"]) {\n this.dropTarget[\"_addGhostPageViewModel\"]();\n }\n // EO ghost new page\n // fake target element (need only for \"startWithNewLine:false\" feature)\n //TODO need for dragDrop helper in library\n var json = new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]().toJsonObject(this.draggedElement);\n json[\"type\"] = this.draggedElement.getType();\n var fakeTargetElement = this.createFakeTargetElement(this.draggedElement.name, json);\n // EO fake target element\n this.parentElement.dragDropStart(this.draggedElement, fakeTargetElement, DragDropSurveyElements.nestedPanelDepth);\n this.parentElement.dragDropMoveTo(this.dropTarget, isTargetRowMultiple ? this.calculateIsRight() : this.isBottom, this.isEdge);\n var newElement = this.parentElement.dragDropFinish();\n return newElement;\n };\n DragDropSurveyElements.prototype.createFakeTargetElement = function (elementName, json) {\n if (!elementName || !json)\n return null;\n var targetElement = null;\n targetElement = _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].createClass(json[\"type\"]);\n new _jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"JsonObject\"]().toObject(json, targetElement);\n targetElement.name = elementName;\n if (targetElement[\"setSurveyImpl\"]) {\n targetElement[\"setSurveyImpl\"](this.survey);\n }\n else {\n targetElement[\"setData\"](this.survey);\n }\n targetElement.renderWidth = \"100%\";\n return targetElement;\n };\n DragDropSurveyElements.prototype.createGhostSurveyElement = function (isMultipleRowDrag) {\n if (isMultipleRowDrag === void 0) { isMultipleRowDrag = false; }\n var className = \"sv-drag-drop-ghost\";\n var minWidth = \"300px\";\n if (isMultipleRowDrag) {\n minWidth = \"4px\";\n className += \" sv-drag-drop-ghost--vertical\";\n }\n var json = {\n type: \"html\",\n minWidth: minWidth,\n name: DragDropSurveyElements.ghostSurveyElementName,\n html: \"
\",\n };\n var element = this.createElementFromJson(json);\n element.startWithNewLine = !isMultipleRowDrag;\n if (isMultipleRowDrag) {\n element.maxWidth = \"4px\";\n element.renderWidth = \"0px\";\n element.paddingRight = \"0px\";\n element.paddingLeft = \"0px\";\n }\n return element;\n };\n DragDropSurveyElements.newGhostPage = null;\n DragDropSurveyElements.restrictDragQuestionBetweenPages = false;\n DragDropSurveyElements.edgeHeight = 30;\n DragDropSurveyElements.nestedPanelDepth = -1;\n DragDropSurveyElements.ghostSurveyElementName = \"sv-drag-drop-ghost-survey-element-name\"; // before renaming use globa search (we have also css selectors)\n return DragDropSurveyElements;\n}(_core__WEBPACK_IMPORTED_MODULE_2__[\"DragDropCore\"]));\n\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_basque__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../localization/basque */ \"./src/localization/basque.ts\");\n/* harmony import */ var _localization_bulgarian__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../localization/bulgarian */ \"./src/localization/bulgarian.ts\");\n/* harmony import */ var _localization_catalan__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../localization/catalan */ \"./src/localization/catalan.ts\");\n/* harmony import */ var _localization_croatian__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../localization/croatian */ \"./src/localization/croatian.ts\");\n/* harmony import */ var _localization_czech__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../localization/czech */ \"./src/localization/czech.ts\");\n/* harmony import */ var _localization_danish__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../localization/danish */ \"./src/localization/danish.ts\");\n/* harmony import */ var _localization_dutch__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../localization/dutch */ \"./src/localization/dutch.ts\");\n/* harmony import */ var _localization_estonian__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../localization/estonian */ \"./src/localization/estonian.ts\");\n/* harmony import */ var _localization_finnish__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../localization/finnish */ \"./src/localization/finnish.ts\");\n/* harmony import */ var _localization_french__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../localization/french */ \"./src/localization/french.ts\");\n/* harmony import */ var _localization_georgian__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../localization/georgian */ \"./src/localization/georgian.ts\");\n/* harmony import */ var _localization_german__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../localization/german */ \"./src/localization/german.ts\");\n/* harmony import */ var _localization_greek__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../localization/greek */ \"./src/localization/greek.ts\");\n/* harmony import */ var _localization_hebrew__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../localization/hebrew */ \"./src/localization/hebrew.ts\");\n/* harmony import */ var _localization_hindi__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../localization/hindi */ \"./src/localization/hindi.ts\");\n/* harmony import */ var _localization_hungarian__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../localization/hungarian */ \"./src/localization/hungarian.ts\");\n/* harmony import */ var _localization_icelandic__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../localization/icelandic */ \"./src/localization/icelandic.ts\");\n/* harmony import */ var _localization_indonesian__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../localization/indonesian */ \"./src/localization/indonesian.ts\");\n/* harmony import */ var _localization_italian__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../localization/italian */ \"./src/localization/italian.ts\");\n/* harmony import */ var _localization_japanese__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../localization/japanese */ \"./src/localization/japanese.ts\");\n/* harmony import */ var _localization_kazakh__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../localization/kazakh */ \"./src/localization/kazakh.ts\");\n/* harmony import */ var _localization_korean__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../../localization/korean */ \"./src/localization/korean.ts\");\n/* harmony import */ var _localization_latvian__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../../localization/latvian */ \"./src/localization/latvian.ts\");\n/* harmony import */ var _localization_lithuanian__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../../localization/lithuanian */ \"./src/localization/lithuanian.ts\");\n/* harmony import */ var _localization_macedonian__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../../localization/macedonian */ \"./src/localization/macedonian.ts\");\n/* harmony import */ var _localization_norwegian__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../../localization/norwegian */ \"./src/localization/norwegian.ts\");\n/* harmony import */ var _localization_persian__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ../../localization/persian */ \"./src/localization/persian.ts\");\n/* harmony import */ var _localization_polish__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../../localization/polish */ \"./src/localization/polish.ts\");\n/* harmony import */ var _localization_portuguese__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ../../localization/portuguese */ \"./src/localization/portuguese.ts\");\n/* harmony import */ var _localization_portuguese_br__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ../../localization/portuguese-br */ \"./src/localization/portuguese-br.ts\");\n/* harmony import */ var _localization_romanian__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ../../localization/romanian */ \"./src/localization/romanian.ts\");\n/* harmony import */ var _localization_russian__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ../../localization/russian */ \"./src/localization/russian.ts\");\n/* harmony import */ var _localization_serbian__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ../../localization/serbian */ \"./src/localization/serbian.ts\");\n/* harmony import */ var _localization_simplified_chinese__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ../../localization/simplified-chinese */ \"./src/localization/simplified-chinese.ts\");\n/* harmony import */ var _localization_spanish__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ../../localization/spanish */ \"./src/localization/spanish.ts\");\n/* harmony import */ var _localization_swahili__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ../../localization/swahili */ \"./src/localization/swahili.ts\");\n/* harmony import */ var _localization_swedish__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ../../localization/swedish */ \"./src/localization/swedish.ts\");\n/* harmony import */ var _localization_tajik__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ../../localization/tajik */ \"./src/localization/tajik.ts\");\n/* harmony import */ var _localization_thai__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ../../localization/thai */ \"./src/localization/thai.ts\");\n/* harmony import */ var _localization_traditional_chinese__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ../../localization/traditional-chinese */ \"./src/localization/traditional-chinese.ts\");\n/* harmony import */ var _localization_turkish__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ../../localization/turkish */ \"./src/localization/turkish.ts\");\n/* harmony import */ var _localization_ukrainian__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ../../localization/ukrainian */ \"./src/localization/ukrainian.ts\");\n/* harmony import */ var _localization_vietnamese__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ../../localization/vietnamese */ \"./src/localization/vietnamese.ts\");\n/* harmony import */ var _localization_welsh__WEBPACK_IMPORTED_MODULE_44__ = __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\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, ArrayChanges, ComputedUpdater, SurveyError, SurveyElementCore, SurveyElement, DragTypeOverMeEnum, 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, MatrixDropdownRowModelBase, QuestionMatrixDropdownModelBase, MatrixDropdownColumn, matrixDropdownColumnTypes, QuestionMatrixDropdownRenderedCell, QuestionMatrixDropdownRenderedRow, QuestionMatrixDropdownRenderedTable, MatrixDropdownRowModel, QuestionMatrixDropdownModel, MatrixDynamicRowModel, QuestionMatrixDynamicModel, MatrixRowModel, MatrixCells, QuestionMatrixModel, MultipleTextItemModel, QuestionMultipleTextModel, PanelModel, PanelModelBase, QuestionRowModel, FlowPanelModel, PageModel, DefaultTitleModel, 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, SurveyProgressModel, SurveyProgressButtonsModel, SurveyModel, SurveyTrigger, SurveyTriggerComplete, SurveyTriggerSetValue, SurveyTriggerVisible, SurveyTriggerCopyValue, SurveyTriggerRunExpression, Trigger, SurveyWindowModel, TextPreProcessor, dxSurveyService, englishStrings, surveyLocalization, surveyStrings, QuestionCustomWidget, CustomWidgetCollection, QuestionCustomModel, QuestionCompositeModel, ComponentQuestionJSON, ComponentCollection, StylesManager, ListModel, PopupModel, PopupBaseViewModel, createPopupModalViewModel, QuestionButtonGroupModel, ButtonGroupItemModel, ButtonGroupItemValue, IsMobile, confirmAction, detectIEOrEdge, doKey2ClickUp, doKey2ClickDown, loadFileFromBase64, increaseHeightByContent, createSvg, CssClassBuilder, surveyCss, DragDropSurveyElements, DragDropChoices */\n/***/ (function(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__, \"ArrayChanges\", function() { return _base__WEBPACK_IMPORTED_MODULE_5__[\"ArrayChanges\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ComputedUpdater\", function() { return _base__WEBPACK_IMPORTED_MODULE_5__[\"ComputedUpdater\"]; });\n\n/* harmony import */ var _survey_error__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../survey-error */ \"./src/survey-error.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyError\", function() { return _survey_error__WEBPACK_IMPORTED_MODULE_6__[\"SurveyError\"]; });\n\n/* harmony import */ var _survey_element__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../survey-element */ \"./src/survey-element.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyElementCore\", function() { return _survey_element__WEBPACK_IMPORTED_MODULE_7__[\"SurveyElementCore\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyElement\", function() { return _survey_element__WEBPACK_IMPORTED_MODULE_7__[\"SurveyElement\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DragTypeOverMeEnum\", function() { return _survey_element__WEBPACK_IMPORTED_MODULE_7__[\"DragTypeOverMeEnum\"]; });\n\n/* harmony import */ var _calculatedValue__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../calculatedValue */ \"./src/calculatedValue.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CalculatedValue\", function() { return _calculatedValue__WEBPACK_IMPORTED_MODULE_8__[\"CalculatedValue\"]; });\n\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../error */ \"./src/error.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomError\", function() { return _error__WEBPACK_IMPORTED_MODULE_9__[\"CustomError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AnswerRequiredError\", function() { return _error__WEBPACK_IMPORTED_MODULE_9__[\"AnswerRequiredError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"OneAnswerRequiredError\", function() { return _error__WEBPACK_IMPORTED_MODULE_9__[\"OneAnswerRequiredError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RequreNumericError\", function() { return _error__WEBPACK_IMPORTED_MODULE_9__[\"RequreNumericError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ExceedSizeError\", function() { return _error__WEBPACK_IMPORTED_MODULE_9__[\"ExceedSizeError\"]; });\n\n/* harmony import */ var _localizablestring__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../localizablestring */ \"./src/localizablestring.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"LocalizableString\", function() { return _localizablestring__WEBPACK_IMPORTED_MODULE_10__[\"LocalizableString\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"LocalizableStrings\", function() { return _localizablestring__WEBPACK_IMPORTED_MODULE_10__[\"LocalizableStrings\"]; });\n\n/* harmony import */ var _expressionItems__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../expressionItems */ \"./src/expressionItems.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"HtmlConditionItem\", function() { return _expressionItems__WEBPACK_IMPORTED_MODULE_11__[\"HtmlConditionItem\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"UrlConditionItem\", function() { return _expressionItems__WEBPACK_IMPORTED_MODULE_11__[\"UrlConditionItem\"]; });\n\n/* harmony import */ var _choicesRestful__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../choicesRestful */ \"./src/choicesRestful.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ChoicesRestful\", function() { return _choicesRestful__WEBPACK_IMPORTED_MODULE_12__[\"ChoicesRestful\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ChoicesRestfull\", function() { return _choicesRestful__WEBPACK_IMPORTED_MODULE_12__[\"ChoicesRestfull\"]; });\n\n/* harmony import */ var _functionsfactory__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../functionsfactory */ \"./src/functionsfactory.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FunctionFactory\", function() { return _functionsfactory__WEBPACK_IMPORTED_MODULE_13__[\"FunctionFactory\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"registerFunction\", function() { return _functionsfactory__WEBPACK_IMPORTED_MODULE_13__[\"registerFunction\"]; });\n\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../conditions */ \"./src/conditions.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConditionRunner\", function() { return _conditions__WEBPACK_IMPORTED_MODULE_14__[\"ConditionRunner\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ExpressionRunner\", function() { return _conditions__WEBPACK_IMPORTED_MODULE_14__[\"ExpressionRunner\"]; });\n\n/* harmony import */ var _expressions_expressions__WEBPACK_IMPORTED_MODULE_15__ = __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_15__[\"Operand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Const\", function() { return _expressions_expressions__WEBPACK_IMPORTED_MODULE_15__[\"Const\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BinaryOperand\", function() { return _expressions_expressions__WEBPACK_IMPORTED_MODULE_15__[\"BinaryOperand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Variable\", function() { return _expressions_expressions__WEBPACK_IMPORTED_MODULE_15__[\"Variable\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FunctionOperand\", function() { return _expressions_expressions__WEBPACK_IMPORTED_MODULE_15__[\"FunctionOperand\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ArrayOperand\", function() { return _expressions_expressions__WEBPACK_IMPORTED_MODULE_15__[\"ArrayOperand\"]; });\n\n/* harmony import */ var _conditionsParser__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../conditionsParser */ \"./src/conditionsParser.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ConditionsParser\", function() { return _conditionsParser__WEBPACK_IMPORTED_MODULE_16__[\"ConditionsParser\"]; });\n\n/* harmony import */ var _conditionProcessValue__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../conditionProcessValue */ \"./src/conditionProcessValue.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ProcessValue\", function() { return _conditionProcessValue__WEBPACK_IMPORTED_MODULE_17__[\"ProcessValue\"]; });\n\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../jsonobject */ \"./src/jsonobject.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonError\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"JsonError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonIncorrectTypeError\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"JsonIncorrectTypeError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMetadata\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"JsonMetadata\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMetadataClass\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"JsonMetadataClass\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMissingTypeError\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"JsonMissingTypeError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonMissingTypeErrorBase\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"JsonMissingTypeErrorBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonObject\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"JsonObject\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonObjectProperty\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"JsonObjectProperty\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonRequiredPropertyError\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"JsonRequiredPropertyError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"JsonUnknownPropertyError\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"JsonUnknownPropertyError\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Serializer\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"Serializer\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"property\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"property\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"propertyArray\", function() { return _jsonobject__WEBPACK_IMPORTED_MODULE_18__[\"propertyArray\"]; });\n\n/* harmony import */ var _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_19__ = __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_19__[\"MatrixDropdownCell\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownRowModelBase\", function() { return _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_19__[\"MatrixDropdownRowModelBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownModelBase\", function() { return _question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_19__[\"QuestionMatrixDropdownModelBase\"]; });\n\n/* harmony import */ var _question_matrixdropdowncolumn__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../question_matrixdropdowncolumn */ \"./src/question_matrixdropdowncolumn.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixDropdownColumn\", function() { return _question_matrixdropdowncolumn__WEBPACK_IMPORTED_MODULE_20__[\"MatrixDropdownColumn\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"matrixDropdownColumnTypes\", function() { return _question_matrixdropdowncolumn__WEBPACK_IMPORTED_MODULE_20__[\"matrixDropdownColumnTypes\"]; });\n\n/* harmony import */ var _question_matrixdropdownrendered__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../../question_matrixdropdownrendered */ \"./src/question_matrixdropdownrendered.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedCell\", function() { return _question_matrixdropdownrendered__WEBPACK_IMPORTED_MODULE_21__[\"QuestionMatrixDropdownRenderedCell\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedRow\", function() { return _question_matrixdropdownrendered__WEBPACK_IMPORTED_MODULE_21__[\"QuestionMatrixDropdownRenderedRow\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownRenderedTable\", function() { return _question_matrixdropdownrendered__WEBPACK_IMPORTED_MODULE_21__[\"QuestionMatrixDropdownRenderedTable\"]; });\n\n/* harmony import */ var _question_matrixdropdown__WEBPACK_IMPORTED_MODULE_22__ = __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_22__[\"MatrixDropdownRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDropdownModel\", function() { return _question_matrixdropdown__WEBPACK_IMPORTED_MODULE_22__[\"QuestionMatrixDropdownModel\"]; });\n\n/* harmony import */ var _question_matrixdynamic__WEBPACK_IMPORTED_MODULE_23__ = __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_23__[\"MatrixDynamicRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixDynamicModel\", function() { return _question_matrixdynamic__WEBPACK_IMPORTED_MODULE_23__[\"QuestionMatrixDynamicModel\"]; });\n\n/* harmony import */ var _question_matrix__WEBPACK_IMPORTED_MODULE_24__ = __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_24__[\"MatrixRowModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"MatrixCells\", function() { return _question_matrix__WEBPACK_IMPORTED_MODULE_24__[\"MatrixCells\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMatrixModel\", function() { return _question_matrix__WEBPACK_IMPORTED_MODULE_24__[\"QuestionMatrixModel\"]; });\n\n/* harmony import */ var _question_multipletext__WEBPACK_IMPORTED_MODULE_25__ = __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_25__[\"MultipleTextItemModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionMultipleTextModel\", function() { return _question_multipletext__WEBPACK_IMPORTED_MODULE_25__[\"QuestionMultipleTextModel\"]; });\n\n/* harmony import */ var _panel__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../../panel */ \"./src/panel.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelModel\", function() { return _panel__WEBPACK_IMPORTED_MODULE_26__[\"PanelModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelModelBase\", function() { return _panel__WEBPACK_IMPORTED_MODULE_26__[\"PanelModelBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionRowModel\", function() { return _panel__WEBPACK_IMPORTED_MODULE_26__[\"QuestionRowModel\"]; });\n\n/* harmony import */ var _flowpanel__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ../../flowpanel */ \"./src/flowpanel.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"FlowPanelModel\", function() { return _flowpanel__WEBPACK_IMPORTED_MODULE_27__[\"FlowPanelModel\"]; });\n\n/* harmony import */ var _page__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../../page */ \"./src/page.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PageModel\", function() { return _page__WEBPACK_IMPORTED_MODULE_28__[\"PageModel\"]; });\n\n/* harmony import */ var _template_renderer__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ../../template-renderer */ \"./src/template-renderer.ts\");\n/* empty/unused harmony star reexport *//* harmony import */ var _defaultTitle__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ../../defaultTitle */ \"./src/defaultTitle.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DefaultTitleModel\", function() { return _defaultTitle__WEBPACK_IMPORTED_MODULE_30__[\"DefaultTitleModel\"]; });\n\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ../../question */ \"./src/question.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Question\", function() { return _question__WEBPACK_IMPORTED_MODULE_31__[\"Question\"]; });\n\n/* harmony import */ var _questionnonvalue__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ../../questionnonvalue */ \"./src/questionnonvalue.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionNonValue\", function() { return _questionnonvalue__WEBPACK_IMPORTED_MODULE_32__[\"QuestionNonValue\"]; });\n\n/* harmony import */ var _question_empty__WEBPACK_IMPORTED_MODULE_33__ = __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_33__[\"QuestionEmptyModel\"]; });\n\n/* harmony import */ var _question_baseselect__WEBPACK_IMPORTED_MODULE_34__ = __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_34__[\"QuestionCheckboxBase\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionSelectBase\", function() { return _question_baseselect__WEBPACK_IMPORTED_MODULE_34__[\"QuestionSelectBase\"]; });\n\n/* harmony import */ var _question_checkbox__WEBPACK_IMPORTED_MODULE_35__ = __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_35__[\"QuestionCheckboxModel\"]; });\n\n/* harmony import */ var _question_ranking__WEBPACK_IMPORTED_MODULE_36__ = __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_36__[\"QuestionRankingModel\"]; });\n\n/* harmony import */ var _question_comment__WEBPACK_IMPORTED_MODULE_37__ = __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_37__[\"QuestionCommentModel\"]; });\n\n/* harmony import */ var _question_dropdown__WEBPACK_IMPORTED_MODULE_38__ = __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_38__[\"QuestionDropdownModel\"]; });\n\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ../../questionfactory */ \"./src/questionfactory.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionFactory\", function() { return _questionfactory__WEBPACK_IMPORTED_MODULE_39__[\"QuestionFactory\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ElementFactory\", function() { return _questionfactory__WEBPACK_IMPORTED_MODULE_39__[\"ElementFactory\"]; });\n\n/* harmony import */ var _question_file__WEBPACK_IMPORTED_MODULE_40__ = __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_40__[\"QuestionFileModel\"]; });\n\n/* harmony import */ var _question_html__WEBPACK_IMPORTED_MODULE_41__ = __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_41__[\"QuestionHtmlModel\"]; });\n\n/* harmony import */ var _question_radiogroup__WEBPACK_IMPORTED_MODULE_42__ = __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_42__[\"QuestionRadiogroupModel\"]; });\n\n/* harmony import */ var _question_rating__WEBPACK_IMPORTED_MODULE_43__ = __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_43__[\"QuestionRatingModel\"]; });\n\n/* harmony import */ var _question_expression__WEBPACK_IMPORTED_MODULE_44__ = __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_44__[\"QuestionExpressionModel\"]; });\n\n/* harmony import */ var _question_text__WEBPACK_IMPORTED_MODULE_45__ = __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_45__[\"QuestionTextModel\"]; });\n\n/* harmony import */ var _question_boolean__WEBPACK_IMPORTED_MODULE_46__ = __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_46__[\"QuestionBooleanModel\"]; });\n\n/* harmony import */ var _question_imagepicker__WEBPACK_IMPORTED_MODULE_47__ = __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_47__[\"QuestionImagePickerModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ImageItemValue\", function() { return _question_imagepicker__WEBPACK_IMPORTED_MODULE_47__[\"ImageItemValue\"]; });\n\n/* harmony import */ var _question_image__WEBPACK_IMPORTED_MODULE_48__ = __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_48__[\"QuestionImageModel\"]; });\n\n/* harmony import */ var _question_signaturepad__WEBPACK_IMPORTED_MODULE_49__ = __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_49__[\"QuestionSignaturePadModel\"]; });\n\n/* harmony import */ var _question_paneldynamic__WEBPACK_IMPORTED_MODULE_50__ = __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_50__[\"QuestionPanelDynamicModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionPanelDynamicItem\", function() { return _question_paneldynamic__WEBPACK_IMPORTED_MODULE_50__[\"QuestionPanelDynamicItem\"]; });\n\n/* harmony import */ var _surveytimer__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ../../surveytimer */ \"./src/surveytimer.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTimer\", function() { return _surveytimer__WEBPACK_IMPORTED_MODULE_51__[\"SurveyTimer\"]; });\n\n/* harmony import */ var _surveyProgress__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ../../surveyProgress */ \"./src/surveyProgress.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyProgressModel\", function() { return _surveyProgress__WEBPACK_IMPORTED_MODULE_52__[\"SurveyProgressModel\"]; });\n\n/* harmony import */ var _surveyProgressButtons__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ../../surveyProgressButtons */ \"./src/surveyProgressButtons.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyProgressButtonsModel\", function() { return _surveyProgressButtons__WEBPACK_IMPORTED_MODULE_53__[\"SurveyProgressButtonsModel\"]; });\n\n/* harmony import */ var _survey__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ../../survey */ \"./src/survey.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyModel\", function() { return _survey__WEBPACK_IMPORTED_MODULE_54__[\"SurveyModel\"]; });\n\n/* harmony import */ var _trigger__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ../../trigger */ \"./src/trigger.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTrigger\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_55__[\"SurveyTrigger\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerComplete\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_55__[\"SurveyTriggerComplete\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerSetValue\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_55__[\"SurveyTriggerSetValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerVisible\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_55__[\"SurveyTriggerVisible\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerCopyValue\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_55__[\"SurveyTriggerCopyValue\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyTriggerRunExpression\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_55__[\"SurveyTriggerRunExpression\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Trigger\", function() { return _trigger__WEBPACK_IMPORTED_MODULE_55__[\"Trigger\"]; });\n\n/* harmony import */ var _surveyWindow__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ../../surveyWindow */ \"./src/surveyWindow.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyWindowModel\", function() { return _surveyWindow__WEBPACK_IMPORTED_MODULE_56__[\"SurveyWindowModel\"]; });\n\n/* harmony import */ var _textPreProcessor__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ../../textPreProcessor */ \"./src/textPreProcessor.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TextPreProcessor\", function() { return _textPreProcessor__WEBPACK_IMPORTED_MODULE_57__[\"TextPreProcessor\"]; });\n\n/* harmony import */ var _dxSurveyService__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ../../dxSurveyService */ \"./src/dxSurveyService.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"dxSurveyService\", function() { return _dxSurveyService__WEBPACK_IMPORTED_MODULE_58__[\"dxSurveyService\"]; });\n\n/* harmony import */ var _localization_english__WEBPACK_IMPORTED_MODULE_59__ = __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_59__[\"englishStrings\"]; });\n\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ../../surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"surveyLocalization\", function() { return _surveyStrings__WEBPACK_IMPORTED_MODULE_60__[\"surveyLocalization\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"surveyStrings\", function() { return _surveyStrings__WEBPACK_IMPORTED_MODULE_60__[\"surveyStrings\"]; });\n\n/* harmony import */ var _questionCustomWidgets__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ../../questionCustomWidgets */ \"./src/questionCustomWidgets.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCustomWidget\", function() { return _questionCustomWidgets__WEBPACK_IMPORTED_MODULE_61__[\"QuestionCustomWidget\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CustomWidgetCollection\", function() { return _questionCustomWidgets__WEBPACK_IMPORTED_MODULE_61__[\"CustomWidgetCollection\"]; });\n\n/* harmony import */ var _question_custom__WEBPACK_IMPORTED_MODULE_62__ = __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_62__[\"QuestionCustomModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"QuestionCompositeModel\", function() { return _question_custom__WEBPACK_IMPORTED_MODULE_62__[\"QuestionCompositeModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ComponentQuestionJSON\", function() { return _question_custom__WEBPACK_IMPORTED_MODULE_62__[\"ComponentQuestionJSON\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ComponentCollection\", function() { return _question_custom__WEBPACK_IMPORTED_MODULE_62__[\"ComponentCollection\"]; });\n\n/* harmony import */ var _stylesmanager__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ../../stylesmanager */ \"./src/stylesmanager.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"StylesManager\", function() { return _stylesmanager__WEBPACK_IMPORTED_MODULE_63__[\"StylesManager\"]; });\n\n/* harmony import */ var _list__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ../../list */ \"./src/list.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ListModel\", function() { return _list__WEBPACK_IMPORTED_MODULE_64__[\"ListModel\"]; });\n\n/* harmony import */ var _popup__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ../../popup */ \"./src/popup.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PopupModel\", function() { return _popup__WEBPACK_IMPORTED_MODULE_65__[\"PopupModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PopupBaseViewModel\", function() { return _popup__WEBPACK_IMPORTED_MODULE_65__[\"PopupBaseViewModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"createPopupModalViewModel\", function() { return _popup__WEBPACK_IMPORTED_MODULE_65__[\"createPopupModalViewModel\"]; });\n\n/* harmony import */ var _question_buttongroup__WEBPACK_IMPORTED_MODULE_66__ = __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_66__[\"QuestionButtonGroupModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItemModel\", function() { return _question_buttongroup__WEBPACK_IMPORTED_MODULE_66__[\"ButtonGroupItemModel\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ButtonGroupItemValue\", function() { return _question_buttongroup__WEBPACK_IMPORTED_MODULE_66__[\"ButtonGroupItemValue\"]; });\n\n/* harmony import */ var _utils_is_mobile__WEBPACK_IMPORTED_MODULE_67__ = __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_67__[\"IsMobile\"]; });\n\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_68__ = __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_68__[\"confirmAction\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"detectIEOrEdge\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_68__[\"detectIEOrEdge\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"doKey2ClickUp\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_68__[\"doKey2ClickUp\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"doKey2ClickDown\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_68__[\"doKey2ClickDown\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"loadFileFromBase64\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_68__[\"loadFileFromBase64\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"increaseHeightByContent\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_68__[\"increaseHeightByContent\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"createSvg\", function() { return _utils_utils__WEBPACK_IMPORTED_MODULE_68__[\"createSvg\"]; });\n\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(/*! ../../utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"CssClassBuilder\", function() { return _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_69__[\"CssClassBuilder\"]; });\n\n/* harmony import */ var _defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_70__ = __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_70__[\"surveyCss\"]; });\n\n/* harmony import */ var _dragdrop_survey_elements__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(/*! ../../dragdrop/survey-elements */ \"./src/dragdrop/survey-elements.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DragDropSurveyElements\", function() { return _dragdrop_survey_elements__WEBPACK_IMPORTED_MODULE_71__[\"DragDropSurveyElements\"]; });\n\n/* harmony import */ var _dragdrop_choices__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(/*! ../../dragdrop/choices */ \"./src/dragdrop/choices.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DragDropChoices\", function() { return _dragdrop_choices__WEBPACK_IMPORTED_MODULE_72__[\"DragDropChoices\"]; });\n\n// styles\n\n//import \"../../modern.scss\";\nvar Version;\nVersion = \"\" + \"1.8.76\";\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// 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/***/ }),\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, ArrayChanges, ComputedUpdater, SurveyError, SurveyElementCore, SurveyElement, DragTypeOverMeEnum, 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, MatrixDropdownRowModelBase, QuestionMatrixDropdownModelBase, MatrixDropdownColumn, matrixDropdownColumnTypes, QuestionMatrixDropdownRenderedCell, QuestionMatrixDropdownRenderedRow, QuestionMatrixDropdownRenderedTable, MatrixDropdownRowModel, QuestionMatrixDropdownModel, MatrixDynamicRowModel, QuestionMatrixDynamicModel, MatrixRowModel, MatrixCells, QuestionMatrixModel, MultipleTextItemModel, QuestionMultipleTextModel, PanelModel, PanelModelBase, QuestionRowModel, FlowPanelModel, PageModel, DefaultTitleModel, 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, SurveyProgressModel, SurveyProgressButtonsModel, SurveyModel, SurveyTrigger, SurveyTriggerComplete, SurveyTriggerSetValue, SurveyTriggerVisible, SurveyTriggerCopyValue, SurveyTriggerRunExpression, Trigger, SurveyWindowModel, TextPreProcessor, dxSurveyService, englishStrings, surveyLocalization, surveyStrings, QuestionCustomWidget, CustomWidgetCollection, QuestionCustomModel, QuestionCompositeModel, ComponentQuestionJSON, ComponentCollection, StylesManager, ListModel, PopupModel, PopupBaseViewModel, createPopupModalViewModel, QuestionButtonGroupModel, ButtonGroupItemModel, ButtonGroupItemValue, IsMobile, confirmAction, detectIEOrEdge, doKey2ClickUp, doKey2ClickDown, loadFileFromBase64, increaseHeightByContent, createSvg, CssClassBuilder, surveyCss, DragDropSurveyElements, DragDropChoices, defaultStandardCss, defaultBootstrapCss, defaultBootstrapMaterialCss, defaultV2Css, modernCss, RendererFactory, ResponsivityManager, VerticalResponsivityManager, unwrap, Action, AdaptiveActionContainer, ActionContainer */\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__, \"ArrayChanges\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ArrayChanges\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ComputedUpdater\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"ComputedUpdater\"]; });\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__, \"SurveyElementCore\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyElementCore\"]; });\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__, \"DragTypeOverMeEnum\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"DragTypeOverMeEnum\"]; });\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__, \"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__, \"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__, \"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__, \"DefaultTitleModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"DefaultTitleModel\"]; });\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__, \"SurveyProgressModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"SurveyProgressModel\"]; });\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__, \"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__, \"createPopupModalViewModel\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"createPopupModalViewModel\"]; });\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__, \"doKey2ClickUp\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"doKey2ClickUp\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"doKey2ClickDown\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"doKey2ClickDown\"]; });\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__, \"increaseHeightByContent\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"increaseHeightByContent\"]; });\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__, \"CssClassBuilder\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"CssClassBuilder\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"surveyCss\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DragDropSurveyElements\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"DragDropSurveyElements\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DragDropChoices\", function() { return _chunks_model__WEBPACK_IMPORTED_MODULE_0__[\"DragDropChoices\"]; });\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_defaultV2Css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../defaultCss/defaultV2Css */ \"./src/defaultCss/defaultV2Css.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"defaultV2Css\", function() { return _defaultCss_defaultV2Css__WEBPACK_IMPORTED_MODULE_5__[\"defaultV2Css\"]; });\n\n/* harmony import */ var _defaultCss_cssmodern__WEBPACK_IMPORTED_MODULE_6__ = __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_6__[\"modernCss\"]; });\n\n/* harmony import */ var _rendererFactory__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../rendererFactory */ \"./src/rendererFactory.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"RendererFactory\", function() { return _rendererFactory__WEBPACK_IMPORTED_MODULE_7__[\"RendererFactory\"]; });\n\n/* harmony import */ var _utils_responsivity_manager__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/responsivity-manager */ \"./src/utils/responsivity-manager.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ResponsivityManager\", function() { return _utils_responsivity_manager__WEBPACK_IMPORTED_MODULE_8__[\"ResponsivityManager\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"VerticalResponsivityManager\", function() { return _utils_responsivity_manager__WEBPACK_IMPORTED_MODULE_8__[\"VerticalResponsivityManager\"]; });\n\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_9__ = __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_9__[\"unwrap\"]; });\n\n/* harmony import */ var _actions_action__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../actions/action */ \"./src/actions/action.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Action\", function() { return _actions_action__WEBPACK_IMPORTED_MODULE_10__[\"Action\"]; });\n\n/* harmony import */ var _actions_adaptive_container__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../actions/adaptive-container */ \"./src/actions/adaptive-container.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AdaptiveActionContainer\", function() { return _actions_adaptive_container__WEBPACK_IMPORTED_MODULE_11__[\"AdaptiveActionContainer\"]; });\n\n/* harmony import */ var _actions_container__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../actions/container */ \"./src/actions/container.ts\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionContainer\", function() { return _actions_container__WEBPACK_IMPORTED_MODULE_12__[\"ActionContainer\"]; });\n\n// model\n\n// localization\n\n// css standard classes\n\n// css bootstrap classes\n\n// css bootstrap + material classes\n\n\n// css modern classes\n\n// utils\n\n\n\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, PanelDynamicProgressV2, Navigation, Progress, ProgressButtons, TimerPanel, Panel, FlowPanel, FlowPanelElement, Row, ElementHeader, QuestionImage, SignaturePad, SurveyHeader, Custom, Composite, TitleElement, TitleContent, TitleActions, DefaultTitle, ActionBarViewModel, SvgIcon, Popup, List, SurveyQuestionMatrixDynamicRemoveButton, SurveyQuestionMatrixDetailButton, SurveyQuestionMatrixDynamicDragDropIcon, Skeleton */\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_paneldynamicprogressV2_vue__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ../vue/paneldynamicprogressV2.vue */ \"./src/vue/paneldynamicprogressV2.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamicProgressV2\", function() { return _vue_paneldynamicprogressV2_vue__WEBPACK_IMPORTED_MODULE_40__[\"PanelDynamicProgressV2\"]; });\n\n/* harmony import */ var _vue_navigation_vue__WEBPACK_IMPORTED_MODULE_41__ = __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_41__[\"Navigation\"]; });\n\n/* harmony import */ var _vue_progress_vue__WEBPACK_IMPORTED_MODULE_42__ = __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_42__[\"Progress\"]; });\n\n/* harmony import */ var _vue_progressButtons_vue__WEBPACK_IMPORTED_MODULE_43__ = __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_43__[\"ProgressButtons\"]; });\n\n/* harmony import */ var _vue_timerpanel_vue__WEBPACK_IMPORTED_MODULE_44__ = __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_44__[\"TimerPanel\"]; });\n\n/* harmony import */ var _vue_panel_vue__WEBPACK_IMPORTED_MODULE_45__ = __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_45__[\"Panel\"]; });\n\n/* harmony import */ var _vue_flowpanel_vue__WEBPACK_IMPORTED_MODULE_46__ = __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_46__[\"FlowPanel\"]; });\n\n/* harmony import */ var _vue_flowpanelelement_vue__WEBPACK_IMPORTED_MODULE_47__ = __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_47__[\"FlowPanelElement\"]; });\n\n/* harmony import */ var _vue_row_vue__WEBPACK_IMPORTED_MODULE_48__ = __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_48__[\"Row\"]; });\n\n/* harmony import */ var _vue_elementheader_vue__WEBPACK_IMPORTED_MODULE_49__ = __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_49__[\"ElementHeader\"]; });\n\n/* harmony import */ var _vue_image_vue__WEBPACK_IMPORTED_MODULE_50__ = __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_50__[\"QuestionImage\"]; });\n\n/* harmony import */ var _vue_signaturepad_vue__WEBPACK_IMPORTED_MODULE_51__ = __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_51__[\"SignaturePad\"]; });\n\n/* harmony import */ var _vue_header_vue__WEBPACK_IMPORTED_MODULE_52__ = __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_52__[\"SurveyHeader\"]; });\n\n/* harmony import */ var _vue_custom_vue__WEBPACK_IMPORTED_MODULE_53__ = __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_53__[\"Custom\"]; });\n\n/* harmony import */ var _vue_composite_vue__WEBPACK_IMPORTED_MODULE_54__ = __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_54__[\"Composite\"]; });\n\n/* harmony import */ var _vue_components_title_title_element_vue__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ../vue/components/title/title-element.vue */ \"./src/vue/components/title/title-element.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TitleElement\", function() { return _vue_components_title_title_element_vue__WEBPACK_IMPORTED_MODULE_55__[\"TitleElement\"]; });\n\n/* harmony import */ var _vue_components_title_title_content_vue__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ../vue/components/title/title-content.vue */ \"./src/vue/components/title/title-content.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TitleContent\", function() { return _vue_components_title_title_content_vue__WEBPACK_IMPORTED_MODULE_56__[\"TitleContent\"]; });\n\n/* harmony import */ var _vue_components_title_title_actions_vue__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ../vue/components/title/title-actions.vue */ \"./src/vue/components/title/title-actions.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TitleActions\", function() { return _vue_components_title_title_actions_vue__WEBPACK_IMPORTED_MODULE_57__[\"TitleActions\"]; });\n\n/* harmony import */ var _vue_components_title_default_title_vue__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ../vue/components/title/default-title.vue */ \"./src/vue/components/title/default-title.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DefaultTitle\", function() { return _vue_components_title_default_title_vue__WEBPACK_IMPORTED_MODULE_58__[\"DefaultTitle\"]; });\n\n/* harmony import */ var _vue_components_action_bar_action_bar_vue__WEBPACK_IMPORTED_MODULE_59__ = __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_59__[\"ActionBarViewModel\"]; });\n\n/* harmony import */ var _vue_components_svg_icon_svg_icon_vue__WEBPACK_IMPORTED_MODULE_60__ = __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_60__[\"SvgIcon\"]; });\n\n/* harmony import */ var _vue_components_popup_popup_vue__WEBPACK_IMPORTED_MODULE_61__ = __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_61__[\"Popup\"]; });\n\n/* harmony import */ var _vue_components_list_list_vue__WEBPACK_IMPORTED_MODULE_62__ = __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_62__[\"List\"]; });\n\n/* harmony import */ var _vue_components_matrix_actions_remove_button_remove_button_vue__WEBPACK_IMPORTED_MODULE_63__ = __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_63__[\"SurveyQuestionMatrixDynamicRemoveButton\"]; });\n\n/* harmony import */ var _vue_components_matrix_actions_detail_button_detail_button_vue__WEBPACK_IMPORTED_MODULE_64__ = __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_64__[\"SurveyQuestionMatrixDetailButton\"]; });\n\n/* harmony import */ var _vue_components_matrix_actions_drag_drop_icon_drag_drop_icon_vue__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ../vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue */ \"./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDynamicDragDropIcon\", function() { return _vue_components_matrix_actions_drag_drop_icon_drag_drop_icon_vue__WEBPACK_IMPORTED_MODULE_65__[\"SurveyQuestionMatrixDynamicDragDropIcon\"]; });\n\n/* harmony import */ var _vue_components_skeleton_vue__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ../vue/components/skeleton.vue */ \"./src/vue/components/skeleton.vue\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Skeleton\", function() { return _vue_components_skeleton_vue__WEBPACK_IMPORTED_MODULE_66__[\"Skeleton\"]; });\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\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, ArrayChanges, ComputedUpdater, SurveyError, SurveyElementCore, SurveyElement, DragTypeOverMeEnum, 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, MatrixDropdownRowModelBase, QuestionMatrixDropdownModelBase, MatrixDropdownColumn, matrixDropdownColumnTypes, QuestionMatrixDropdownRenderedCell, QuestionMatrixDropdownRenderedRow, QuestionMatrixDropdownRenderedTable, MatrixDropdownRowModel, QuestionMatrixDropdownModel, MatrixDynamicRowModel, QuestionMatrixDynamicModel, MatrixRowModel, MatrixCells, QuestionMatrixModel, MultipleTextItemModel, QuestionMultipleTextModel, PanelModel, PanelModelBase, QuestionRowModel, FlowPanelModel, PageModel, DefaultTitleModel, 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, SurveyProgressModel, SurveyProgressButtonsModel, SurveyModel, SurveyTrigger, SurveyTriggerComplete, SurveyTriggerSetValue, SurveyTriggerVisible, SurveyTriggerCopyValue, SurveyTriggerRunExpression, Trigger, SurveyWindowModel, TextPreProcessor, dxSurveyService, englishStrings, surveyLocalization, surveyStrings, QuestionCustomWidget, CustomWidgetCollection, QuestionCustomModel, QuestionCompositeModel, ComponentQuestionJSON, ComponentCollection, StylesManager, ListModel, PopupModel, PopupBaseViewModel, createPopupModalViewModel, QuestionButtonGroupModel, ButtonGroupItemModel, ButtonGroupItemValue, IsMobile, confirmAction, detectIEOrEdge, doKey2ClickUp, doKey2ClickDown, loadFileFromBase64, increaseHeightByContent, createSvg, CssClassBuilder, surveyCss, DragDropSurveyElements, DragDropChoices, defaultStandardCss, defaultBootstrapCss, defaultBootstrapMaterialCss, defaultV2Css, modernCss, RendererFactory, ResponsivityManager, VerticalResponsivityManager, unwrap, Action, AdaptiveActionContainer, ActionContainer, 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, PanelDynamicProgressV2, Navigation, Progress, ProgressButtons, TimerPanel, Panel, FlowPanel, FlowPanelElement, Row, ElementHeader, QuestionImage, SignaturePad, SurveyHeader, Custom, Composite, TitleElement, TitleContent, TitleActions, DefaultTitle, ActionBarViewModel, SvgIcon, Popup, List, SurveyQuestionMatrixDynamicRemoveButton, SurveyQuestionMatrixDetailButton, SurveyQuestionMatrixDynamicDragDropIcon, Skeleton */\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__, \"ArrayChanges\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ArrayChanges\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ComputedUpdater\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ComputedUpdater\"]; });\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__, \"SurveyElementCore\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyElementCore\"]; });\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__, \"DragTypeOverMeEnum\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"DragTypeOverMeEnum\"]; });\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__, \"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__, \"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__, \"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__, \"DefaultTitleModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"DefaultTitleModel\"]; });\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__, \"SurveyProgressModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"SurveyProgressModel\"]; });\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__, \"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__, \"createPopupModalViewModel\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"createPopupModalViewModel\"]; });\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__, \"doKey2ClickUp\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"doKey2ClickUp\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"doKey2ClickDown\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"doKey2ClickDown\"]; });\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__, \"increaseHeightByContent\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"increaseHeightByContent\"]; });\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__, \"CssClassBuilder\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"CssClassBuilder\"]; });\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__, \"DragDropSurveyElements\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"DragDropSurveyElements\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DragDropChoices\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"DragDropChoices\"]; });\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__, \"defaultV2Css\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"defaultV2Css\"]; });\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 reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Action\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"Action\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"AdaptiveActionContainer\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"AdaptiveActionContainer\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionContainer\", function() { return _core__WEBPACK_IMPORTED_MODULE_0__[\"ActionContainer\"]; });\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__, \"PanelDynamicProgressV2\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"PanelDynamicProgressV2\"]; });\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__, \"TitleElement\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"TitleElement\"]; });\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/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDynamicDragDropIcon\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"SurveyQuestionMatrixDynamicDragDropIcon\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Skeleton\", function() { return _vue_ui__WEBPACK_IMPORTED_MODULE_1__[\"Skeleton\"]; });\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 _survey_error__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./survey-error */ \"./src/survey-error.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}(_survey_error__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}(_survey_error__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}(_survey_error__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}(_survey_error__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}(_survey_error__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}(_survey_error__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}(_survey_error__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}(_survey_error__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}(_survey_error__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}(_survey_error__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}(_survey_error__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}(_survey_error__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.getRendererContext = function (locStr) {\n return !!this.locOwner ? this.locOwner.getRendererContext(locStr) : locStr;\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 // eslint-disable-next-line no-control-regex\n .replace(/[\\x00-\\x0F]/g, function (ch) { return \"\\\\x0\" + hex(ch); })\n // eslint-disable-next-line no-control-regex\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 // eslint-disable-next-line no-control-regex\n .replace(/[\\x00-\\x0F]/g, function (ch) { return \"\\\\x0\" + hex(ch); })\n // eslint-disable-next-line no-control-regex\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 Operand.prototype.isEqual = function (op) {\n return !!op && op.getType() === this.getType() && this.isContentEqual(op);\n };\n Operand.prototype.areOperatorsEquals = function (op1, op2) {\n return !op1 && !op2 || !!op1 && op1.isEqual(op2);\n };\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.isContentEqual = function (op) {\n var bOp = op;\n return bOp.operator === this.operator &&\n this.areOperatorsEquals(this.left, bOp.left) &&\n this.areOperatorsEquals(this.right, bOp.right);\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.isContentEqual = function (op) {\n var uOp = op;\n return uOp.operator == this.operator && this.areOperatorsEquals(this.expression, uOp.expression);\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 ArrayOperand.prototype.isContentEqual = function (op) {\n var aOp = op;\n if (aOp.values.length !== this.values.length)\n return false;\n for (var i = 0; i < this.values.length; i++) {\n if (!aOp.values[i].isEqual(this.values[i]))\n return false;\n }\n return true;\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.isContentEqual = function (op) {\n var cOp = op;\n return cOp.value == this.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.prototype.isContentEqual = function (op) {\n var vOp = op;\n return vOp.variable == this.variable;\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 FunctionOperand.prototype.isContentEqual = function (op) {\n var fOp = op;\n return fOp.originalValue == this.originalValue && this.areOperatorsEquals(fOp.parameters, this.parameters);\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.countDecimals = function (value) {\n if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isNumber(value) && Math.floor(value) !== value) {\n var strs = value.toString().split(\".\");\n return strs.length > 1 && strs[1].length || 0;\n }\n return 0;\n };\n OperandMaker.plusMinus = function (a, b, res) {\n var digitsA = OperandMaker.countDecimals(a);\n var digitsB = OperandMaker.countDecimals(b);\n if (digitsA > 0 || digitsB > 0) {\n var digits = Math.max(digitsA, digitsB);\n res = parseFloat(res.toFixed(digits));\n }\n return res;\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 _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].correctAfterPlusMinis(a, b, a + b);\n },\n minus: function (a, b) {\n return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].correctAfterPlusMinis(a, b, a - b);\n },\n mul: function (a, b) {\n return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].correctAfterMultiple(a, b, 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 (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(left) && _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(right))\n return true;\n if (_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(left) ||\n (!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 = _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].correctAfterPlusMinis(res, arr[i], 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 = sum(params);\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 if (val == undefined || val == null)\n return res;\n return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].correctAfterPlusMinis(res, val, 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 isContainerReadyCore(container) {\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}\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 var question = this.survey.getQuestionByName(name);\n if (!question || !Array.isArray(question.panels))\n return false;\n if (params.length > 1) {\n if (params[1] < question.panels.length) {\n container = question.panels[params[1]];\n }\n }\n else {\n for (var i = 0; i < question.panels.length; i++) {\n if (!isContainerReadyCore(question.panels[i]))\n return false;\n }\n return true;\n }\n }\n return isContainerReadyCore(container);\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 getYear(params) {\n if (params.length !== 1 || !params[0])\n return undefined;\n return new Date(params[0]).getFullYear();\n}\nFunctionFactory.Instance.register(\"getYear\", getYear);\nfunction currentYear() {\n return new Date().getFullYear();\n}\nFunctionFactory.Instance.register(\"currentYear\", currentYear);\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; });\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\n\nvar Helpers = /** @class */ (function () {\n function Helpers() {\n }\n /**\n * A static methods that returns true if a value undefined, 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, caseSensitive, trimStrings) {\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], ignoreOrder, caseSensitive, trimStrings))\n return false;\n }\n return true;\n };\n Helpers.isTwoValueEquals = function (x, y, ignoreOrder, caseSensitive, trimStrings) {\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 (trimStrings === undefined)\n trimStrings = _settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].comparator.trimStrings;\n if (caseSensitive === undefined)\n caseSensitive = _settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].comparator.caseSensitive;\n if (typeof x === \"string\" && typeof y === \"string\") {\n if (trimStrings) {\n x = x.trim();\n y = y.trim();\n }\n if (!caseSensitive) {\n x = x.toLowerCase();\n y = y.toLowerCase();\n }\n return x === y;\n }\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(), ignoreOrder, caseSensitive, trimStrings);\n }\n if (Array.isArray(x) && Array.isArray(y))\n return Helpers.isArraysEqual(x, y, ignoreOrder, caseSensitive, trimStrings);\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 Helpers.countDecimals = function (value) {\n if (Helpers.isNumber(value) && Math.floor(value) !== value) {\n var strs = value.toString().split(\".\");\n return strs.length > 1 && strs[1].length || 0;\n }\n return 0;\n };\n Helpers.correctAfterPlusMinis = function (a, b, res) {\n var digitsA = Helpers.countDecimals(a);\n var digitsB = Helpers.countDecimals(b);\n if (digitsA > 0 || digitsB > 0) {\n var digits = Math.max(digitsA, digitsB);\n res = parseFloat(res.toFixed(digits));\n }\n return res;\n };\n Helpers.correctAfterMultiple = function (a, b, res) {\n var digits = Helpers.countDecimals(a) + Helpers.countDecimals(b);\n if (digits > 0) {\n res = parseFloat(res.toFixed(digits));\n }\n return res;\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, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\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, false));\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 = [];\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 var valIsEmpty = _helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(val);\n for (var i = 0; i < items.length; i++) {\n if (valIsEmpty && _helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(items[i].value))\n return items[i];\n if (_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isTwoValueEquals(items[i].value, val, false, true, false))\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].locStrsChanged();\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 (!_settings__WEBPACK_IMPORTED_MODULE_5__[\"settings\"].itemValueAlwaysSerializeAsObject && 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 this.locText.strChanged();\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.locStrsChanged = function () {\n _super.prototype.locStrsChanged.call(this);\n this.locText.strChanged();\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 {\n name: \"enableIf:condition\",\n showMode: \"form\",\n visibleIf: function (obj) {\n return !obj || obj.ownerPropertyName !== \"rateValues\";\n },\n },\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 _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\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_2__ = __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, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n\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 getLocStringValue(target, options, key) {\n ensureLocString(target, options, key);\n var res = target.getLocalizableStringText(key);\n if (!!res)\n return res;\n if (typeof options.localizable === \"object\" && options.localizable.defaultStr)\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].getString(options.localizable.defaultStr);\n return \"\";\n}\nfunction property(options) {\n return function (target, key) {\n var processComputedUpdater = function (obj, val) {\n if (!!val && typeof val === \"object\" && val.type === _base__WEBPACK_IMPORTED_MODULE_1__[\"ComputedUpdater\"].ComputedUpdaterType) {\n _base__WEBPACK_IMPORTED_MODULE_1__[\"Base\"].startCollectDependencies(function () { return obj[key] = val.updater(); }, obj, key);\n var result = val.updater();\n var dependencies = _base__WEBPACK_IMPORTED_MODULE_1__[\"Base\"].finishCollectDependencies();\n val.setDependencies(dependencies);\n return result;\n }\n return val;\n };\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) {\n if (options.defaultValue !== undefined) {\n return options.defaultValue;\n }\n if (options.defaultSource !== undefined) {\n return this[options.defaultSource];\n }\n }\n return undefined;\n },\n set: function (val) {\n var newValue = processComputedUpdater(this, val);\n this.setPropertyValue(key, newValue);\n if (!!options && options.onSet) {\n options.onSet(newValue, this);\n }\n },\n });\n }\n else {\n Object.defineProperty(target, key, {\n get: function () {\n return getLocStringValue(this, options, key);\n },\n set: function (val) {\n ensureLocString(this, options, key);\n var newValue = processComputedUpdater(this, val);\n this.setLocalizableStringText(key, newValue);\n if (!!options && options.onSet) {\n options.onSet(newValue, this);\n }\n },\n });\n Object.defineProperty(target, typeof options.localizable === \"object\" && !!options.localizable.name ?\n options.localizable.name : \"loc\" + key.charAt(0).toUpperCase() + key.slice(1), {\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, function (item, index) {\n var handler = !!options ? options.onPush : null;\n handler && handler(item, index, target);\n }, function (item, index) {\n var handler = !!options ? options.onRemove : null;\n handler && handler(item, index, target);\n });\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 || []), false));\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_2__[\"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_2__[\"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_2__[\"Helpers\"].isValueEmpty(propInfo.default)) {\n prop.defaultValue = propInfo.default;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(propInfo.isSerializable)) {\n prop.isSerializable = propInfo.isSerializable;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(propInfo.isLightSerializable)) {\n prop.isLightSerializable = propInfo.isLightSerializable;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(propInfo.maxLength)) {\n prop.maxLength = propInfo.maxLength;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(propInfo.displayName)) {\n prop.displayName = propInfo.displayName;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(propInfo.category)) {\n prop.category = propInfo.category;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(propInfo.categoryIndex)) {\n prop.categoryIndex = propInfo.categoryIndex;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(propInfo.nextToProperty)) {\n prop.nextToProperty = propInfo.nextToProperty;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(propInfo.visibleIndex)) {\n prop.visibleIndex = propInfo.visibleIndex;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(propInfo.showMode)) {\n prop.showMode = propInfo.showMode;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(propInfo.maxValue)) {\n prop.maxValue = propInfo.maxValue;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(propInfo.minValue)) {\n prop.minValue = propInfo.minValue;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(propInfo.dataList)) {\n prop.dataList = propInfo.dataList;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(propInfo.isDynamicChoices)) {\n prop.isDynamicChoices = propInfo.isDynamicChoices;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isValueEmpty(propInfo.isBindable)) {\n prop.isBindable = propInfo.isBindable;\n }\n if (!_helpers__WEBPACK_IMPORTED_MODULE_2__[\"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] === val)\n return;\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.getProperty = function (className, propertyName) {\n var prop = this.findProperty(className, propertyName);\n if (!prop)\n return prop;\n var classInfo = this.findClass(className);\n if (prop.classInfo === classInfo)\n return prop;\n var newProp = new JsonObjectProperty(classInfo, propertyName, prop.isRequired);\n newProp.mergeWith(prop);\n classInfo.properties.push(newProp);\n this.emptyClassPropertiesHash(classInfo);\n return newProp;\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 _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _actions_container__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./actions/container */ \"./src/actions/container.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.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\nvar ListModel = /** @class */ (function (_super) {\n __extends(ListModel, _super);\n function ListModel(items, onItemSelect, allowSelection, selectedItem, onFilteredTextChange) {\n var _this = _super.call(this) || this;\n _this.onItemSelect = onItemSelect;\n _this.allowSelection = allowSelection;\n _this.onFilteredTextChange = onFilteredTextChange;\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 && _this.selectedItem.id == itemValue.id;\n };\n _this.getItemClass = function (itemValue) {\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_2__[\"CssClassBuilder\"]()\n .append(\"sv-list__item\")\n .append(\"sv-list__item--disabled\", _this.isItemDisabled(itemValue))\n .append(\"sv-list__item--selected\", _this.isItemSelected(itemValue))\n .toString();\n };\n _this.getItemIndent = function (itemValue) {\n var level = itemValue.level || 0;\n return (level + 1) * ListModel.INDENT + \"px\";\n };\n _this.setItems(items);\n _this.selectedItem = selectedItem;\n return _this;\n }\n ListModel.prototype.hasText = function (item, filteredTextInLow) {\n if (!filteredTextInLow)\n return true;\n var textInLow = (item.title || \"\").toLocaleLowerCase();\n return textInLow.indexOf(filteredTextInLow.toLocaleLowerCase()) > -1;\n };\n ListModel.prototype.updateItemVisible = function (text) {\n var _this = this;\n this.actions.forEach(function (item) {\n item.visible = _this.hasText(item, text);\n });\n };\n ListModel.prototype.filterByText = function (text) {\n if (!this.needFilter)\n return;\n if (!!this.onFilteredTextChange) {\n this.onFilteredTextChange(text);\n }\n else {\n this.updateItemVisible(text);\n }\n };\n ListModel.prototype.onSet = function () {\n this.needFilter = (this.actions || []).length > ListModel.MINELEMENTCOUNT;\n _super.prototype.onSet.call(this);\n };\n Object.defineProperty(ListModel.prototype, \"filteredTextPlaceholder\", {\n get: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(\"filteredTextPlaceholder\");\n },\n enumerable: false,\n configurable: true\n });\n ListModel.prototype.onKeyDown = function (event) {\n var currentElement = event.target;\n if (event.key === \"ArrowDown\" || event.keyCode === 40) {\n if (!!currentElement.nextElementSibling) {\n currentElement.nextElementSibling.focus();\n }\n else {\n currentElement.parentElement.firstElementChild && currentElement.parentElement.firstElementChild.focus();\n }\n event.preventDefault();\n }\n else if (event.key === \"ArrowUp\" || event.keyCode === 38) {\n if (!!currentElement.previousElementSibling) {\n currentElement.previousElementSibling.focus();\n }\n else {\n currentElement.parentElement.lastElementChild && currentElement.parentElement.lastElementChild.focus();\n }\n event.preventDefault();\n }\n };\n ListModel.prototype.refresh = function () {\n this.filteredText = \"\";\n };\n ListModel.INDENT = 16;\n ListModel.MINELEMENTCOUNT = 10;\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: false })\n ], ListModel.prototype, \"needFilter\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: false })\n ], ListModel.prototype, \"isExpanded\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])()\n ], ListModel.prototype, \"selectedItem\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({\n onSet: function (_, target) {\n target.filterByText(target.filteredText);\n }\n })\n ], ListModel.prototype, \"filteredText\", void 0);\n return ListModel;\n}(_actions_container__WEBPACK_IMPORTED_MODULE_1__[\"ActionContainer\"]));\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 LocalizableString.prototype.getIsMultiple = function () { return false; };\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.calcText();\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.calcText();\n this.calculatedTextValue = undefined;\n return this.renderedText;\n },\n enumerable: false,\n configurable: true\n });\n LocalizableString.prototype.calcText = 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 && !!this.localizationName) {\n res = _surveyStrings__WEBPACK_IMPORTED_MODULE_1__[\"surveyLocalization\"].getString(this.localizationName);\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.getLocaleTextWithDefault = function (loc) {\n var res = this.getLocaleText(loc);\n if (!res && this.onGetDefaultTextCallback) {\n return this.onGetDefaultTextCallback();\n }\n return res;\n };\n LocalizableString.prototype.setLocaleText = function (loc, value) {\n if (value == this.getLocaleTextWithDefault(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 || 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 Object.defineProperty(LocalizableString.prototype, \"renderAsData\", {\n get: function () {\n if (!this.owner || typeof this.owner.getRendererContext !== \"function\") {\n return this;\n }\n return this.owner.getRendererContext(this) || this;\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, false, true, false);\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 LocalizableStrings.prototype.getIsMultiple = function () { return true; };\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 && this.values[defLoc])\n return this.values[defLoc];\n }\n return [];\n };\n LocalizableStrings.prototype.setValue = function (loc, val) {\n loc = this.getLocale(loc);\n var oldValue = _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].createCopy(this.values);\n if (!val || val.length == 0) {\n delete this.values[loc];\n }\n else {\n this.values[loc] = val;\n }\n if (!!this.onValueChanged) {\n this.onValueChanged(oldValue, this.values);\n }\n };\n LocalizableStrings.prototype.hasValue = function (loc) {\n if (loc === void 0) { loc = \"\"; }\n return !this.isEmpty && this.getValue(loc).length > 0;\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 _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].createCopy(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/basque.ts\":\n/*!************************************!*\\\n !*** ./src/localization/basque.ts ***!\n \\************************************/\n/*! exports provided: basqueSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"basqueSurveyStrings\", function() { return basqueSurveyStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar basqueSurveyStrings = {\n pagePrevText: \"Aurrekoa\",\n pageNextText: \"Hurrengoa\",\n completeText: \"Bukatu\",\n previewText: \"Aurrebista\",\n editText: \"Editatu\",\n startSurveyText: \"Hasi\",\n otherItemText: \"Beste bat (zehaztu)\",\n noneItemText: \"Bat ere ez\",\n selectAllItemText: \"Guztia hautatu\",\n progressText: \"{1}-(e)tik {0} orrialde\",\n panelDynamicProgressText: \"{0} errigistro {1}-(e)tik\",\n questionsProgressText: \"Erantzundako galderak {0}/{1}\",\n emptySurvey: \"Ez dago orrialde bistaragarririk edo ez dago galderarik.\",\n completingSurvey: \"Eskerrik asko galdetegia erantzuteagatik!\",\n completingSurveyBefore: \"Gure datuek diote dagoeneko galdetegia erantzun duzula.\",\n loadingSurvey: \"Galdetegia kargatzen...\",\n optionsCaption: \"Hautatu...\",\n value: \"balioa\",\n requiredError: \"Mesedez, galdera erantzun.\",\n requiredErrorInPanel: \"Mesedez, gutxienez galdera bat erantzun.\",\n requiredInAllRowsError: \"Mesedez, errenkadako galdera guztiak erantzun.\",\n numericError: \"Estimazioa zenbakizkoa izan behar du.\",\n minError: \"Balioa ez da {0} baino txikiagoa izan behar\",\n maxError: \"Balioa ez da {0} baino handiagoa izan behar\",\n textMinLength: \"Mesedez, gutxienez {0} karaktere erabili behar dira.\",\n textMaxLength: \"Mesedez, gehienez {0} karaktere erabili behar dira.\",\n textMinMaxLength: \"Mesedez, gehienez {0} eta gutxienez {1} karaktere erabili behar dira.\",\n minRowCountError: \"Mesedez, gutxienez {0} errenkada bete.\",\n minSelectError: \"Mesedez, gutxienez {0} aukera hautatu.\",\n maxSelectError: \"Mesedez, {0} aukera baino gehiago ez hautatu.\",\n numericMinMax: \"El '{0}' debe de ser igual o más de {1} y igual o menos de {2}\",\n numericMin: \"'{0}' {1} baino handiagoa edo berdin izan behar da\",\n numericMax: \"'{0}' {1} baino txikiago edo berdin izan behar da\",\n invalidEmail: \"Mesedez, baliozko emaila idatz ezazu.\",\n invalidExpression: \"{0} adierazpenak 'egiazkoa' itzuli beharko luke.\",\n urlRequestError: \"Eskaerak '{0}' errorea itzuli du. {1}\",\n urlGetChoicesError: \"La solicitud regresó vacío de data o la propiedad 'trayectoria' no es correcta\",\n exceedMaxSize: \"Fitxategiaren tamaina ez da {0} baino handiagoa izan behar.\",\n otherRequiredError: \"Mesedez, beste estimazioa gehitu.\",\n uploadingFile: \"Zure fitxategia igotzen ari da. Mesedez, segundo batzuk itxaron eta saiatu berriro.\",\n loadingFile: \"Kargatzen...\",\n chooseFile: \"Fitxategia(k) hautatu...\",\n noFileChosen: \"Ez da inolako fitxategirik hautatu\",\n confirmDelete: \"¿Erregistroa borratu nahi al duzu?\",\n keyDuplicationError: \"Balio hau bakarra izan behar du.\",\n addColumn: \"Zutabe bat gehitu\",\n addRow: \"Errenkada bat gehitu\",\n removeRow: \"Errenkada bat kendu\",\n emptyRowsText: \"Ez dago errenkadarik.\",\n addPanel: \"Berria gehitu\",\n removePanel: \"Kendu\",\n choices_Item: \"artikulua\",\n matrix_column: \"Zutabea\",\n matrix_row: \"Errenkada\",\n multipletext_itemname: \"testua\",\n savingData: \"Erantzunak zerbitzarian gordetzen ari dira...\",\n savingDataError: \"Erroreren bat gertatu eta erantzunak ez dira zerbitzarian gorde ahal izan.\",\n savingDataSuccess: \"Erantzunak egoki gorde dira!\",\n saveAgainButton: \"Berriro saiatu.\",\n timerMin: \"min\",\n timerSec: \"seg\",\n timerSpentAll: \"{0} erabili duzu orrialde honetan eta orotara {1}.\",\n timerSpentPage: \"Zuk {0} erabili duzu.\",\n timerSpentSurvey: \"Orotara gastatu duzu.\",\n timerLimitAll: \"{0} gastatu duzu {1}-(e)tik orrialde honetan eta orotara {2} {3}-(e)tik.\",\n timerLimitPage: \"{0} gastatu duzu orrialde honetan {1}-(e)tik.\",\n timerLimitSurvey: \"Zuk orotara {0} gastatu duzu {1}-(e)tik.\",\n cleanCaption: \"Garbitu\",\n clearCaption: \"Hustu\",\n signaturePlaceHolder: \"Sinatu hemen\",\n chooseFileCaption: \"Fitxategia hautatu\",\n removeFileCaption: \"Fitxategi hau ezabatu\",\n booleanCheckedLabel: \"Bai\",\n booleanUncheckedLabel: \"Ez\",\n confirmRemoveFile: \"Ziur zaude hurrengo fitxategia ezabatu nahi duzula: {0}?\",\n confirmRemoveAllFiles: \"Ziur al zaude fitxategi guztiak ezabatu nahi dituzula?\",\n questionTitlePatternText: \"Galderaren izenburua\",\n modalCancelButtonText: \"Ezeztatu\",\n modalApplyButtonText: \"Ezarri\",\n};\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].locales[\"eu\"] = basqueSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"eu\"] = \"Euskara\";\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: \"Response required.\",\n requiredErrorInPanel: \"Response required: answer at least one question.\",\n requiredInAllRowsError: \"Response required: 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: \"Response required: enter another 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 fileDragAreaPlaceholder: \"Drop a file here or click the button below to load the file.\",\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 signaturePlaceHolder: \"Sign here\",\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 filteredTextPlaceholder: \"Type to search...\",\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/kazakh.ts\":\n/*!************************************!*\\\n !*** ./src/localization/kazakh.ts ***!\n \\************************************/\n/*! exports provided: kazakhStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"kazakhStrings\", function() { return kazakhStrings; });\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../surveyStrings */ \"./src/surveyStrings.ts\");\n\nvar kazakhStrings = {\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[\"kk\"] = kazakhStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"kk\"] = \"Kazakh\";\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 minError: \"La estimación no debe ser menor que {0}\",\n maxError: \"La estimación no debe ser mayor que {0}\",\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 emptyRowsText: \"No hay hileras.\",\n addPanel: \"Añadir nuevo\",\n removePanel: \"Retire\",\n choices_Item: \"artículo\",\n matrix_column: \"Columna\",\n matrix_row: \"Hilera\",\n multipletext_itemname: \"texto\",\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 signaturePlaceHolder: \"Firma aqui\",\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 modalCancelButtonText: \"Anular\",\n modalApplyButtonText: \"Aplicar\",\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/vietnamese.ts\":\n/*!****************************************!*\\\n !*** ./src/localization/vietnamese.ts ***!\n \\****************************************/\n/*! exports provided: vietnameseSurveyStrings */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"vietnameseSurveyStrings\", function() { return vietnameseSurveyStrings; });\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 vietnameseSurveyStrings = {\n pagePrevText: \"Trở về\",\n pageNextText: \"Tiếp theo\",\n completeText: \"Hoàn thành\",\n previewText: \"Xem trước\",\n editText: \"Chỉnh sửa\",\n startSurveyText: \"Bắt đầu\",\n otherItemText: \"Khác (mô tả)\",\n noneItemText: \"Trống\",\n selectAllItemText: \"Chọn tất cả\",\n progressText: \"Trang {0} / {1}\",\n panelDynamicProgressText: \"Dòng {0} / {1}\",\n questionsProgressText: \"Đã trả lời {0}/{1} câu hỏi\",\n emptySurvey: \"Không có trang hoặc câu hỏi nào được hiển thị trong cuộc khảo sát này.\",\n completingSurvey: \"Cảm ơn đã hoàn thành khảo sát!\",\n completingSurveyBefore: \"Hồ sơ chúng tôi cho thấy rằng bạn đã hoàn thành cuộc khảo sát này.\",\n loadingSurvey: \"Đang tải khảo sát...\",\n optionsCaption: \"Chọn...\",\n value: \"Giá trị\",\n requiredError: \"Vui lòng trả lời câu hỏi.\",\n requiredErrorInPanel: \"Vui lòng trả lời ít nhất một câu hỏi.\",\n requiredInAllRowsError: \"Vui lòng trả lời các câu hỏi trên tất cả các dòng.\",\n numericError: \"Giá trị nên là kiểu số.\",\n textMinLength: \"Vui lòng nhập ít nhất {0} kí tự.\",\n textMaxLength: \"Vui lòng nhập ít hơn {0} kí tự.\",\n textMinMaxLength: \"Vui lòng nhập nhiều hơn {0} hoặc ít hơn {1} kí tự.\",\n minRowCountError: \"Vui lòng nhập ít nhất {0} dòng.\",\n minSelectError: \"Vui lòng chọn ít nhất {0} loại.\",\n maxSelectError: \"Vui lòng không chọn nhiều hơn {0} loại.\",\n numericMinMax: \"Giá trị '{0}' nên bằng hoặc lớn hơn {1} và bằng hoặc nhỏ hơn {2}\",\n numericMin: \"Giá trị '{0}' nên bằng hoặc lớn hơn {1}\",\n numericMax: \"Giá trị '{0}' nên bằng hoặc nhỏ hơn {1}\",\n invalidEmail: \"Vui lòng điền địa chỉ email hợp lệ.\",\n invalidExpression: \"Biểu thức: {0} nên trả về 'true'.\",\n urlRequestError: \"Yêu cầu trả về lỗi '{0}'. {1}\",\n urlGetChoicesError: \"Yêu cầu trả về dữ liệu trống hoặc thuộc tính 'path' không đúng\",\n exceedMaxSize: \"Kích thước tập tin không nên vượt quá {0}.\",\n otherRequiredError: \"Vui lòng điền giá trị khác.\",\n uploadingFile: \"Tập tin đang được tải lên. Vui lòng chờ một lúc và thử lại.\",\n loadingFile: \"Đang tải...\",\n chooseFile: \"Chọn các tập tin...\",\n noFileChosen: \"Không có tập tin nào được chọn\",\n confirmDelete: \"Bạn muốn xóa dòng này?\",\n keyDuplicationError: \"Giá trị này không nên bị trùng lặp.\",\n addColumn: \"Thêm cột\",\n addRow: \"Thêm dòng\",\n removeRow: \"Xóa\",\n addPanel: \"Thêm mới\",\n removePanel: \"Xóa\",\n choices_Item: \"mục\",\n matrix_column: \"Cột\",\n matrix_row: \"Dòng\",\n savingData: \"Kết quả đang lưu lại trên hệ thống...\",\n savingDataError: \"Có lỗi xảy ra và chúng ta không thể lưu kết quả.\",\n savingDataSuccess: \"Kết quả đã được lưu thành công!\",\n saveAgainButton: \"Thử lại\",\n timerMin: \"phút\",\n timerSec: \"giây\",\n timerSpentAll: \"Bạn đã sử dụng {0} trên trang này và {1} trên toàn bộ.\",\n timerSpentPage: \"Bạn đã sử dụng {0} trên trang.\",\n timerSpentSurvey: \"Bạn đã sử dụng {0} trên toàn bộ.\",\n timerLimitAll: \"Bạn đã sử dụng {0} / {1} trên trang này và {2} / {3} trên toàn bộ.\",\n timerLimitPage: \"Bạn đã sử dụng {0} / {1} trên trang này.\",\n timerLimitSurvey: \"Bạn đã sử dụng {0} / {1} trên toàn bộ.\",\n cleanCaption: \"Xóa tất cả\",\n clearCaption: \"Xóa\",\n chooseFileCaption: \"Chọn tập tin\",\n removeFileCaption: \"Xóa tập tin\",\n booleanCheckedLabel: \"Có\",\n booleanUncheckedLabel: \"Không\",\n confirmRemoveFile: \"Bạn có chắc chắn muốn xóa tập tin này: {0}?\",\n confirmRemoveAllFiles: \"Bạn có chắc chắn muốn xóa toàn bộ tập tin?\",\n questionTitlePatternText: \"Tiêu đề câu hỏi\",\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[\"vi\"] = vietnameseSurveyStrings;\n_surveyStrings__WEBPACK_IMPORTED_MODULE_0__[\"surveyLocalization\"].localeNames[\"vi\"] = \"Việt Nam\";\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\");\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 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.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, \"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 (this.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.needResponsiveWidth = function () {\n //TODO: make it mor intelligent\n return true;\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], 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 _panel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./panel */ \"./src/panel.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_3__ = __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 * 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 /**\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 PageModel.prototype.canShowTitle = function () {\n return this.survey.showPageTitles;\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 PageModel.prototype.canRenderFirstRows = function () {\n return !this.isDesignMode || this.visibleIndex == 0;\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 (css) {\n var classes = { page: {}, pageTitle: \"\", pageDescription: \"\", row: \"\", rowMultiple: \"\" };\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 (!!css.rowMultiple) {\n classes.rowMultiple = css.rowMultiple;\n }\n if (this.survey) {\n this.survey.updatePageCssClasses(this, classes);\n }\n return classes;\n };\n Object.defineProperty(PageModel.prototype, \"cssTitle\", {\n get: function () {\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_2__[\"CssClassBuilder\"]()\n .append(this.cssClasses.page.title)\n .toString();\n },\n enumerable: false,\n configurable: true\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 || val !== true)\n return;\n var els = this.elements;\n for (var i = 0; i < els.length; i++) {\n if (els[i].isPanel) {\n els[i].randomizeElements(this.areQuestionsRandomized);\n }\n }\n this.randomizeElements(this.areQuestionsRandomized);\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 /**\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_1__[\"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.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 src = this.dragDropInfo.source;\n var row = this.dragDropFindRow(target);\n var targetIndex = this.dragDropGetElementIndex(target, row);\n this.updateRowsRemoveElementFromRow(target, row);\n var elementsToSetSWNL = [];\n var elementsToResetSWNL = [];\n if (!isCancel && !!row) {\n var isSamePanel = false;\n if (this.isDesignMode && _settings__WEBPACK_IMPORTED_MODULE_3__[\"settings\"].supportCreatorV2) {\n var srcRow = src && src.parent && src.parent.dragDropFindRow(src);\n if (row.panel.elements[targetIndex] && row.panel.elements[targetIndex].startWithNewLine && row.elements.length > 1) {\n elementsToSetSWNL.push(target);\n elementsToResetSWNL.push(row.panel.elements[targetIndex]);\n }\n if (target.startWithNewLine && row.elements.length > 1 && (!row.panel.elements[targetIndex] || !row.panel.elements[targetIndex].startWithNewLine)) {\n elementsToResetSWNL.push(target);\n }\n if (srcRow && srcRow.elements[0] === src && srcRow.elements[1]) {\n elementsToSetSWNL.push(srcRow.elements[1]);\n }\n if (row.elements.length <= 1) {\n elementsToSetSWNL.push(target);\n }\n }\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 elementsToSetSWNL.map(function (e) { e.startWithNewLine = true; });\n elementsToResetSWNL.map(function (e) { e.startWithNewLine = false; });\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 if (this.isDesignMode && _settings__WEBPACK_IMPORTED_MODULE_3__[\"settings\"].supportCreatorV2) {\n if (!source.startWithNewLine && destination.startWithNewLine)\n return true;\n var row = this.dragDropFindRow(destination);\n if (row && row.elements.length == 1)\n return true;\n }\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 (typeof source.parent === \"undefined\" || 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_1__[\"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 { 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 { name: \"title:text\", serializationProperty: \"locTitle\" },\n { name: \"description:text\", serializationProperty: \"locDescription\" },\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 _survey_element__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./survey-element */ \"./src/survey-element.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _conditions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./conditions */ \"./src/conditions.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\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _actions_adaptive_container__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./actions/adaptive-container */ \"./src/actions/adaptive-container.ts\");\n/* harmony import */ var _actions_container__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./actions/container */ \"./src/actions/container.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\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.visible = panel.areInvisibleElementsShowing;\n _this.createNewArray(\"elements\");\n _this.createNewArray(\"visibleElements\");\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_9__[\"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_9__[\"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 QuestionRowModel.prototype.setIsLazyRendering = function (val) {\n this.isLazyRenderingValue = val;\n this.isNeedRender = !val;\n };\n QuestionRowModel.prototype.isLazyRendering = function () {\n return this.isLazyRenderingValue === 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, \"visibleElements\", {\n get: function () {\n return this.getPropertyValue(\"visibleElements\");\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 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 var visElements = [];\n for (var i = 0; i < this.elements.length; i++) {\n if (this.elements[i].isVisible) {\n visElements.push(this.elements[i]);\n }\n }\n if (this.needToUpdateVisibleElements(visElements)) {\n this.setPropertyValue(\"visibleElements\", visElements);\n }\n return visElements.length > 0;\n };\n QuestionRowModel.prototype.needToUpdateVisibleElements = function (visElements) {\n if (visElements.length !== this.visibleElements.length)\n return true;\n for (var i = 0; i < visElements.length; i++) {\n if (visElements[i] !== this.visibleElements[i])\n return true;\n }\n return false;\n };\n QuestionRowModel.prototype.dispose = function () {\n _super.prototype.dispose.call(this);\n this.stopLazyRendering();\n };\n QuestionRowModel.prototype.getRowCss = function () {\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]()\n .append(this.panel.cssClasses.row)\n .append(this.panel.cssClasses.rowMultiple, this.visibleElements.length > 1)\n .toString();\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.isRandomizing = false;\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(\"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, isLight) {\n _super.prototype.setSurveyImpl.call(this, value, isLight);\n if (this.isDesignMode)\n this.onVisibleChanged();\n for (var i = 0; i < this.elements.length; i++) {\n this.elements[i].setSurveyImpl(value, isLight);\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, \"hasTitle\", {\n get: function () {\n return ((this.canShowTitle() && this.title.length > 0) ||\n (this.isDesignMode && _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].allowShowEmptyTitleInDesignMode));\n },\n enumerable: false,\n configurable: true\n });\n PanelModelBase.prototype.canShowTitle = function () { return true; };\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_8__[\"settings\"].allowShowEmptyTitleInDesignMode &&\n _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].allowShowEmptyDescriptionInDesignMode));\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 Object.defineProperty(PanelModelBase.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 PanelModelBase.prototype.canRandomize = function (isRandom) {\n return isRandom && (this.questionsOrder !== \"initial\") || this.questionsOrder === \"random\";\n };\n PanelModelBase.prototype.randomizeElements = function (isRandom) {\n if (!this.canRandomize(isRandom) || 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(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 PanelModelBase.prototype.calcCssClasses = function (css) {\n var classes = { panel: {}, error: {}, row: \"\", rowMultiple: \"\" };\n this.copyCssClasses(classes.panel, css.panel);\n this.copyCssClasses(classes.error, css.error);\n if (!!css.row) {\n classes.row = css.row;\n }\n if (!!css.rowMultiple) {\n classes.rowMultiple = css.rowMultiple;\n }\n if (this.survey) {\n this.survey.updatePanelCssClasses(this, classes);\n }\n return classes;\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_8__[\"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_7__[\"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 _survey_element__WEBPACK_IMPORTED_MODULE_3__[\"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.createRowAndSetLazy = function (index) {\n var row = this.createRow();\n row.setIsLazyRendering(this.isLazyRenderInRow(index));\n return row;\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 (this.isRandomizing)\n return;\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 || this.isRandomizing)\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 if (row.visible && !row.isNeedRender) {\n row.isNeedRender = true;\n }\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.createRowAndSetLazy(result.length) : 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.isLazyRenderInRow = function (rowIndex) {\n if (!this.survey || !this.survey.isLazyRendering)\n return false;\n return (rowIndex >= _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].lazyRowsRenderingStartRow ||\n !this.canRenderFirstRows());\n };\n PanelModelBase.prototype.canRenderFirstRows = function () {\n return this.isPage;\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 if (this.isRandomizing)\n return;\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 _super.prototype.updateElementCss.call(this, reNew);\n for (var i = 0; i < this.elements.length; i++) {\n var el = this.elements[i];\n el.updateElementCss(reNew);\n }\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_6__[\"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_5__[\"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_5__[\"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_5__[\"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 (_settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].supportCreatorV2 && this.isDesignMode) {\n if (destRow.elements.length > 1)\n return this.dragDropAddTargetToExistingRow(dragDropInfo, destRow, prevRow);\n else\n return this.dragDropAddTargetToNewRow(dragDropInfo, destRow, prevRow);\n }\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 if (this.isDesignMode && _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].supportCreatorV2) {\n }\n else if (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 }\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.createRowAndSetLazy(destRow.panel.rows.length);\n if (this.isDesignMode && _settings__WEBPACK_IMPORTED_MODULE_8__[\"settings\"].supportCreatorV2) {\n targetRow.setIsLazyRendering(false);\n }\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.needResponsiveWidth = function () {\n var result = false;\n this.elements.forEach(function (e) {\n if (e.needResponsiveWidth())\n result = true;\n });\n this.rows.forEach(function (r) {\n if (r.elements.length > 1)\n result = true;\n });\n return result;\n };\n Object.defineProperty(PanelModelBase.prototype, \"no\", {\n //ITitleOwner\n get: function () { return \"\"; },\n enumerable: false,\n configurable: true\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}(_survey_element__WEBPACK_IMPORTED_MODULE_3__[\"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 _this.focusIn = function () {\n _this.survey.whenPanelFocusIn(_this);\n };\n var self = _this;\n _this.createNewArray(\"footerActions\");\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 PanelModel.prototype.getTitleOwner = function () { return this; };\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\");\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\");\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\");\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\");\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, \"allowAdaptiveActions\", {\n /**\n * The Panel toolbar gets adaptive if the property is set to true.\n */\n get: function () {\n return this.getPropertyValue(\"allowAdaptiveActions\");\n },\n set: function (val) {\n this.setPropertyValue(\"allowAdaptiveActions\", 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_4__[\"Question\"] || element instanceof PanelModel) {\n element.clearOnDeletingContainer();\n }\n });\n };\n Object.defineProperty(PanelModel.prototype, \"footerActions\", {\n get: function () {\n return this.getPropertyValue(\"footerActions\");\n },\n enumerable: false,\n configurable: true\n });\n PanelModel.prototype.getFooterToolbar = function () {\n var _this = this;\n if (!this.footerToolbarValue) {\n var actions = this.footerActions;\n if (this.hasEditButton) {\n actions.push({\n id: \"cancel-preview\",\n title: this.survey.editText,\n innerCss: this.survey.cssNavigationEdit,\n action: function () { _this.cancelPreview(); }\n });\n }\n this.footerToolbarValue = this.allowAdaptiveActions ? new _actions_adaptive_container__WEBPACK_IMPORTED_MODULE_11__[\"AdaptiveActionContainer\"]() : new _actions_container__WEBPACK_IMPORTED_MODULE_12__[\"ActionContainer\"]();\n if (!!this.cssClasses.panel) {\n this.footerToolbarValue.containerCss = this.cssClasses.panel.footer;\n }\n this.footerToolbarValue.setItems(actions);\n }\n return this.footerToolbarValue;\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 Object.defineProperty(PanelModel.prototype, \"cssTitle\", {\n get: function () {\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]()\n .append(this.cssClasses.panel.title)\n .append(this.cssClasses.panel.titleExpandable, this.state !== \"default\")\n .append(this.cssClasses.panel.titleOnError, this.containsErrors)\n .toString();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PanelModel.prototype, \"cssError\", {\n get: function () {\n return this.getCssError(this.cssClasses);\n },\n enumerable: false,\n configurable: true\n });\n PanelModel.prototype.getCssError = function (cssClasses) {\n var builder = new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]().append(this.cssClasses.error.root);\n return builder.append(\"panel-error-root\", builder.isEmpty()).toString();\n };\n PanelModel.prototype.onVisibleChanged = function () {\n _super.prototype.onVisibleChanged.call(this);\n this.notifySurveyOnVisibilityChanged();\n };\n PanelModel.prototype.needResponsiveWidth = function () {\n if (this.startWithNewLine) {\n return true;\n }\n else\n _super.prototype.needResponsiveWidth.call(this);\n return false;\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:switch\", 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 {\n name: \"questionsOrder\",\n default: \"default\",\n choices: [\"default\", \"initial\", \"random\"],\n },\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:switch\",\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 { name: \"allowAdaptiveActions:boolean\", default: true, visible: false },\n], function () {\n return new PanelModel();\n}, \"panelbase\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_6__[\"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, createPopupModalViewModel, 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__, \"createPopupModalViewModel\", function() { return createPopupModalViewModel; });\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\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.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 PopupModel = /** @class */ (function (_super) {\n __extends(PopupModel, _super);\n function PopupModel(contentComponentName, contentComponentData, verticalPosition, horizontalPosition, showPointer, isModal, onCancel, onApply, onHide, onShow, cssClass, title) {\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 () { return true; }; }\n if (onHide === void 0) { onHide = function () { }; }\n if (onShow === void 0) { onShow = function () { }; }\n if (cssClass === void 0) { cssClass = \"\"; }\n if (title === void 0) { title = \"\"; }\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 _this.title = title;\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 var innerModel = this.contentComponentData[\"model\"];\n innerModel && innerModel.refresh && innerModel.refresh();\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 () { return true; } })\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 __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"\" })\n ], PopupModel.prototype, \"title\", void 0);\n return PopupModel;\n}(_base__WEBPACK_IMPORTED_MODULE_0__[\"Base\"]));\n\nfunction createPopupModalViewModel(componentName, data, onApply, onCancel, onHide, onShow, cssClass, title) {\n if (onHide === void 0) { onHide = function () { }; }\n if (onShow === void 0) { onShow = function () { }; }\n var popupModel = new PopupModel(componentName, data, \"top\", \"left\", false, true, onCancel, onApply, onHide, onShow, cssClass, title);\n var popupViewModel = new PopupBaseViewModel(popupModel, undefined);\n popupViewModel.initializePopupContainer();\n return popupViewModel;\n}\nvar FOCUS_INPUT_SELECTOR = \"input:not(:disabled):not([readonly]):not([type=hidden]),select:not(:disabled):not([readonly]),textarea:not(:disabled):not([readonly]), button:not(:disabled):not([readonly]), [tabindex]:not([tabindex^=\\\"-\\\"])\";\nvar PopupBaseViewModel = /** @class */ (function (_super) {\n __extends(PopupBaseViewModel, _super);\n function PopupBaseViewModel(model, targetElement) {\n var _this = _super.call(this) || this;\n _this.targetElement = targetElement;\n _this.scrollEventCallBack = function () { return _this.hidePopup(); };\n _this.model = model;\n return _this;\n }\n PopupBaseViewModel.prototype.hidePopup = function () {\n this.model.isVisible = false;\n };\n Object.defineProperty(PopupBaseViewModel.prototype, \"model\", {\n get: function () {\n return this._model;\n },\n set: function (model) {\n var _this = this;\n if (!!this.model) {\n this.model.unRegisterFunctionOnPropertiesValueChanged([\"isVisible\"], \"PopupBaseViewModel\");\n }\n this._model = model;\n var updater = function () {\n if (!model.isVisible) {\n _this.updateOnHiding();\n }\n _this.isVisible = model.isVisible;\n };\n model.registerFunctionOnPropertyValueChanged(\"isVisible\", updater, \"PopupBaseViewModel\");\n updater();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PopupBaseViewModel.prototype, \"title\", {\n get: function () {\n return this.model.title;\n },\n enumerable: false,\n configurable: true\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 return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_4__[\"CssClassBuilder\"]()\n .append(this.model.cssClass)\n .append(\"sv-popup--modal\", this.isModal)\n .append(\"sv-popup--show-pointer\", !this.isModal && this.showPointer)\n .append(\"sv-popup--\" + this.popupDirection, !this.isModal && this.showPointer)\n .toString();\n },\n enumerable: false,\n configurable: true\n });\n PopupBaseViewModel.prototype.onKeyDown = function (event) {\n if (event.key === \"Tab\" || event.keyCode === 9) {\n this.trapFocus(event);\n }\n else if (event.key === \"Escape\" || event.keyCode === 27) {\n if (this.isModal) {\n this.model.onCancel();\n }\n this.hidePopup();\n }\n };\n PopupBaseViewModel.prototype.trapFocus = function (event) {\n var focusableElements = this.container.querySelectorAll(FOCUS_INPUT_SELECTOR);\n var firstFocusableElement = focusableElements[0];\n var lastFocusableElement = focusableElements[focusableElements.length - 1];\n if (event.shiftKey) {\n if (document.activeElement === firstFocusableElement) {\n lastFocusableElement.focus();\n event.preventDefault();\n }\n }\n else {\n if (document.activeElement === lastFocusableElement) {\n firstFocusableElement.focus();\n event.preventDefault();\n }\n }\n };\n PopupBaseViewModel.prototype.updateOnShowing = function () {\n this.prevActiveElement = document.activeElement;\n if (!this.isModal) {\n this.updatePosition();\n }\n this.focusFirstInput();\n if (!this.isModal) {\n window.addEventListener(\"scroll\", this.scrollEventCallBack);\n }\n };\n PopupBaseViewModel.prototype.updateOnHiding = function () {\n this.prevActiveElement && this.prevActiveElement.focus();\n if (!this.isModal) {\n window.removeEventListener(\"scroll\", this.scrollEventCallBack);\n }\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 var scrollContent = background.children[0].querySelector(\".sv-popup__scrolling-content\");\n var height = popupContainer.offsetHeight -\n scrollContent.offsetHeight +\n scrollContent.scrollHeight;\n var width = popupContainer.offsetWidth;\n this.height = \"auto\";\n var verticalPosition = this.model.verticalPosition;\n if (!!window) {\n height = Math.min(height, window.innerHeight * 0.9);\n verticalPosition = _utils_popup__WEBPACK_IMPORTED_MODULE_3__[\"PopupUtils\"].updateVerticalPosition(rect, height, this.model.verticalPosition, this.model.showPointer, window.innerHeight);\n }\n this.popupDirection = _utils_popup__WEBPACK_IMPORTED_MODULE_3__[\"PopupUtils\"].calculatePopupDirection(verticalPosition, this.model.horizontalPosition);\n var pos = _utils_popup__WEBPACK_IMPORTED_MODULE_3__[\"PopupUtils\"].calculatePosition(rect, height, width, verticalPosition, this.model.horizontalPosition, this.showPointer);\n if (!!window) {\n var newVerticalDimensions = _utils_popup__WEBPACK_IMPORTED_MODULE_3__[\"PopupUtils\"].updateVerticalDimensions(pos.top, height, window.innerHeight);\n if (!!newVerticalDimensions) {\n this.height = newVerticalDimensions.height + \"px\";\n pos.top = newVerticalDimensions.top;\n }\n }\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, verticalPosition, this.model.horizontalPosition);\n }\n this.pointerTarget.top += \"px\";\n this.pointerTarget.left += \"px\";\n };\n PopupBaseViewModel.prototype.focusFirstInput = function () {\n var _this = this;\n setTimeout(function () {\n var el = _this.container.querySelector(FOCUS_INPUT_SELECTOR);\n if (!!el)\n el.focus();\n else\n _this.container.children[0].focus();\n }, 100);\n };\n PopupBaseViewModel.prototype.clickOutside = function () {\n if (this.isModal) {\n return;\n }\n this.hidePopup();\n };\n PopupBaseViewModel.prototype.cancel = function () {\n this.model.onCancel();\n this.hidePopup();\n };\n PopupBaseViewModel.prototype.apply = function () {\n if (!!this.model.onApply && !this.model.onApply())\n return;\n this.hidePopup();\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.createPopupContainer = function () {\n var container = document.createElement(\"div\");\n this.container = container;\n };\n PopupBaseViewModel.prototype.mountPopupContainer = function () {\n document.body.appendChild(this.container);\n };\n PopupBaseViewModel.prototype.initializePopupContainer = function () {\n this.createPopupContainer();\n this.mountPopupContainer();\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: \"auto\" })\n ], PopupBaseViewModel.prototype, \"height\", 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 _survey_element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./survey-element */ \"./src/survey-element.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\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_12__ = __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\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.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.focusIn = function () {\n _this.survey.whenQuestionFocusIn(_this);\n };\n _this.isRunningValidatorsValue = false;\n _this.isValueChangedInSurvey = false;\n _this.allowNotifyValueChanged = true;\n _this.id = Question.getQuestionId();\n _this.onCreating();\n _this.createNewArray(\"validators\", function (validator) {\n validator.errorOwner = _this;\n });\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.locTitle.onGetDefaultTextCallback = function () {\n return _this.name;\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.createLocTitleProperty = function () {\n var _this = this;\n var locTitleValue = _super.prototype.createLocTitleProperty.call(this);\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 return locTitleValue;\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 Object.defineProperty(Question.prototype, \"ariaRequired\", {\n /**\n * A11Y properties\n */\n get: function () {\n return this.isRequired;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"ariaLabel\", {\n get: function () {\n return this.locTitle.renderedHtml;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"ariaInvalid\", {\n get: function () {\n return this.errors.length > 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Question.prototype, \"ariaDescribedBy\", {\n get: function () {\n return this.errors.length > 0 ? this.id + \"_errors\" : null;\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\");\n },\n set: function (val) {\n this.setPropertyValue(\"useDisplayValuesInTitle\", val);\n },\n enumerable: false,\n configurable: true\n });\n Question.prototype.getUseDisplayValuesInTitle = function () { return this.useDisplayValuesInTitle; };\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\");\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 Object.defineProperty(Question.prototype, \"isQuestion\", {\n get: function () {\n return true;\n },\n enumerable: false,\n configurable: true\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, isLight) {\n _super.prototype.setSurveyImpl.call(this, value);\n if (!this.survey)\n return;\n this.survey.questionCreated(this);\n if (isLight !== true) {\n this.runConditions();\n }\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.getTitleOwner = function () { return this; };\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 Question.prototype.getDefaultTitleValue = function () { return this.name; };\n Question.prototype.getDefaultTitleTagName = function () {\n return _settings__WEBPACK_IMPORTED_MODULE_9__[\"settings\"].titleTags.question;\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 if (self.isCollapsed)\n return;\n setTimeout(function () {\n self.focus();\n }, 1);\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.updateCommentElement = function () {\n if (this.commentElement && this.autoGrowComment)\n Object(_utils_utils__WEBPACK_IMPORTED_MODULE_12__[\"increaseHeightByContent\"])(this.commentElement);\n };\n Question.prototype.onCommentInput = function (event) {\n if (this.isInputTextUpdate)\n this.comment = event.target.value;\n else\n this.updateCommentElement();\n };\n Question.prototype.onCommentChange = function (event) {\n this.comment = event.target.value;\n if (this.comment !== event.target.value) {\n event.target.value = this.comment;\n }\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 if (this.supportComment() || this.supportOther()) {\n this.commentElement = (document.getElementById(this.id) && document.getElementById(this.id).querySelector(\"textarea\")) || null;\n this.updateCommentElement();\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\");\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 Question.prototype.calcCssClasses = function (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 return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_11__[\"CssClassBuilder\"]()\n .append(this.isFlowLayout && !this.isDesignMode\n ? cssClasses.flowRoot\n : cssClasses.mainRoot)\n .append(cssClasses.titleLeftRoot, !this.isFlowLayout && this.hasTitleOnLeft)\n .append(cssClasses.hasError, this.errors.length > 0)\n .append(cssClasses.small, !this.width)\n .append(cssClasses.answered, this.isAnswered)\n .toString();\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 return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_11__[\"CssClassBuilder\"]()\n .append(cssClasses.header)\n .append(cssClasses.headerTop, this.hasTitleOnTop)\n .append(cssClasses.headerLeft, this.hasTitleOnLeft)\n .append(cssClasses.headerBottom, this.hasTitleOnBottom)\n .toString();\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 return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_11__[\"CssClassBuilder\"]()\n .append(cssClasses.content)\n .append(cssClasses.contentLeft, this.hasTitleOnLeft)\n .toString();\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 return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_11__[\"CssClassBuilder\"]()\n .append(cssClasses.title)\n .append(cssClasses.titleExpandable, this.isCollapsed || this.isExpanded)\n .append(cssClasses.titleOnError, this.containsErrors)\n .append(cssClasses.titleOnAnswer, !this.containsErrors && this.isAnswered)\n .toString();\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 Question.prototype.getCssError = function (cssClasses) {\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_11__[\"CssClassBuilder\"]()\n .append(cssClasses.error.root)\n .append(cssClasses.error.locationTop, this.errorLocation === \"top\")\n .append(cssClasses.error.locationBottom, this.errorLocation === \"bottom\")\n .toString();\n };\n Question.prototype.getRootCss = function () {\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_11__[\"CssClassBuilder\"]()\n .append(this.cssRoot)\n .append(this.cssClasses.disabled, this.isReadOnly)\n .toString();\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 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 var objCss = css[this.getCssType()];\n var titleBuilder = new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_11__[\"CssClassBuilder\"]().append(res.title)\n .append(css.question.titleRequired, this.isRequired);\n res.title = titleBuilder.toString();\n var rootBuilder = new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_11__[\"CssClassBuilder\"]().append(res.root)\n .append(objCss, this.isRequired && !!css.question.required);\n if (objCss === undefined || objCss === null) {\n res.root = rootBuilder.toString();\n }\n else if (typeof objCss === \"string\" || objCss instanceof String) {\n res.root = rootBuilder.append(objCss.toString()).toString();\n }\n else {\n res.root = rootBuilder.toString();\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, \"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\");\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\");\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\");\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 (_survey_element__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 if (!this.survey)\n return;\n this.initDataFromSurvey();\n this.onSurveyValueChanged(this.value);\n this.updateValueWithDefaults();\n this.onIndentChanged();\n this.updateQuestionCss();\n this.updateIsAnswered();\n };\n Question.prototype.initDataFromSurvey = function () {\n if (!!this.data) {\n var val = this.data.getValue(this.getValueName());\n if (!_helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].isValueEmpty(val) || !this.isLoadingFromJson) {\n this.updateValueFromSurvey(val);\n }\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, \"autoGrowComment\", {\n get: function () {\n return this.survey && this.survey.autoGrowComment;\n },\n enumerable: false,\n configurable: true\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 if (this.value !== undefined) {\n this.value = undefined;\n }\n this.comment = undefined;\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.getUnbindValue = function (value) {\n if (this.isValueSurveyElement(value))\n return value;\n return _helpers__WEBPACK_IMPORTED_MODULE_0__[\"Helpers\"].getUnbindValue(value);\n };\n Question.prototype.isValueSurveyElement = function (val) {\n if (!val)\n return false;\n if (Array.isArray(val))\n return val.length > 0 ? this.isValueSurveyElement(val[0]) : false;\n return !!val.getType && !!val.onPropertyChanged;\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 var res = this.calcDisplayValue(keysAsText, value);\n return !!this.displayValueCallback ? this.displayValueCallback(res) : res;\n };\n Question.prototype.calcDisplayValue = 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 this.getDisplayValueEmpty();\n return this.getDisplayValueCore(keysAsText, value);\n };\n Question.prototype.getDisplayValueCore = function (keyAsText, value) {\n return value;\n };\n Question.prototype.getDisplayValueEmpty = function () {\n return \"\";\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 || (!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 var trimmedValue = newValue.toString().trim();\n if (trimmedValue !== newValue) {\n newValue = trimmedValue;\n if (newValue === this.comment) {\n this.setPropertyValueDirectly(\"comment\", newValue);\n }\n }\n }\n if (this.comment == newValue)\n return;\n this.setQuestionComment(newValue);\n this.updateCommentElement();\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.canCollectErrors()) {\n this.collectErrors(qErrors, isOnValueChanged);\n }\n return qErrors;\n };\n Question.prototype.canCollectErrors = function () {\n return !this.isReadOnly;\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 var isEqual = this.isTwoValueEquals(this.questionValue, newValue);\n this.questionValue = newValue;\n !isEqual && 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 Question.prototype.getComponentName = function () {\n return _rendererFactory__WEBPACK_IMPORTED_MODULE_10__[\"RendererFactory\"].Instance.getRendererByQuestion(this);\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.prototype.needResponsiveWidth = function () {\n return false;\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\"])({ defaultValue: \"default\" })\n ], Question.prototype, \"renderAs\", void 0);\n return Question;\n}(_survey_element__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\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.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 * 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.createItemValue = function (value) {\n return _this.createItemValue(value);\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.getItemValueType = function () {\n return \"itemvalue\";\n };\n QuestionSelectBase.prototype.createItemValue = function (value) {\n return _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].createClass(this.getItemValueType(), value);\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 QuestionSelectBase.prototype.updateCommentFromSurvey = function (newValue) {\n _super.prototype.updateCommentFromSurvey.call(this, newValue);\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 var val = this.rendredValueToData(val);\n if (!this.isTwoValueEquals(val, this.value)) {\n this.value = val;\n }\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 this.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, checkEmptyValue) {\n if (includeOther === void 0) { includeOther = false; }\n if (isFilteredChoices === void 0) { isFilteredChoices = true; }\n if (checkEmptyValue === void 0) { checkEmptyValue = false; }\n if (!checkEmptyValue && 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\");\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.setCanShowOptionItemCallback = function (func) {\n this.canShowOptionItemCallback = func;\n if (!!func) {\n this.onVisibleChoicesChanged();\n }\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 if (this.canShowOptionItem(this.newItemValue)) {\n items.push(this.newItemValue);\n }\n }\n if (this.supportOther() &&\n ((isAddAll && this.canShowOptionItem(this.otherItem)) || this.hasOther)) {\n items.push(this.otherItem);\n }\n if (this.supportNone() &&\n ((isAddAll && this.canShowOptionItem(this.noneItem)) || this.hasNone)) {\n items.push(this.noneItem);\n }\n };\n QuestionSelectBase.prototype.canShowOptionItem = function (item) {\n if (!this.canShowOptionItemCallback)\n return true;\n return this.canShowOptionItemCallback(item);\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.isContentElement);\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.getDisplayValueEmpty = function () {\n return _itemvalue__WEBPACK_IMPORTED_MODULE_3__[\"ItemValue\"].getTextOrHtmlByValue(this.visibleChoices, undefined);\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 this.isSupportProperty(\"hasOther\");\n };\n QuestionSelectBase.prototype.supportNone = function () {\n return this.isSupportProperty(\"hasNone\");\n };\n QuestionSelectBase.prototype.isSupportProperty = function (propName) {\n return (!this.isDesignMode ||\n _jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].findProperty(this.getType(), propName).visible);\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, isLight) {\n _super.prototype.setSurveyImpl.call(this, value, isLight);\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 || this.choicesByUrl.allowEmptyResponse)) {\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 = !this.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 || this.isEmpty())\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, true, 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 return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]()\n .append(this.cssClasses.column)\n .append(\"sv-q-column-\" + this.colCount, this.hasColumns)\n .toString();\n };\n QuestionSelectBase.prototype.getItemIndex = function (item) {\n return this.visibleChoices.indexOf(item);\n };\n QuestionSelectBase.prototype.getItemClass = function (item) {\n var options = { item: item };\n var res = this.getItemClassCore(item, options);\n options.css = res;\n if (!!this.survey) {\n this.survey.updateChoiceItemCss(this, options);\n }\n return options.css;\n };\n QuestionSelectBase.prototype.getItemClassCore = function (item, options) {\n var builder = new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]()\n .append(this.cssClasses.item)\n .append(this.cssClasses.itemInline, !this.hasColumns && this.colCount === 0)\n .append(\"sv-q-col-\" + this.colCount, !this.hasColumns && this.colCount !== 0);\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 && !(!!this.survey && this.survey.isDesignMode);\n var isNone = item === this.noneItem;\n options.isDisabled = isDisabled;\n options.isChecked = isChecked;\n options.isNone = isNone;\n return builder.append(this.cssClasses.itemDisabled, isDisabled)\n .append(this.cssClasses.itemChecked, isChecked)\n .append(this.cssClasses.itemHover, allowHover)\n .append(this.cssClasses.itemNone, isNone)\n .toString();\n };\n QuestionSelectBase.prototype.getLabelClass = function (item) {\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]()\n .append(this.cssClasses.label)\n .append(this.cssClasses.labelChecked, this.isItemSelected(item))\n .toString();\n };\n QuestionSelectBase.prototype.getControlLabelClass = function (item) {\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]()\n .append(this.cssClasses.controlLabel)\n .append(this.cssClasses.controlLabelChecked, this.isItemSelected(item))\n .toString();\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 if (this.survey) {\n this.survey.loadedChoicesFromServer(this);\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 QuestionCheckboxBase.prototype.getItemEnabled = function (item) {\n return !this.isInputReadOnly && item.isEnabled;\n };\n QuestionCheckboxBase.prototype.isOtherItem = function (item) {\n return this.hasOther && item.value == this.otherItem.value;\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\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_5__ = __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\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 QuestionBooleanModel.prototype.supportGoNextPageAutomatic = function () {\n return this.renderAs !== \"checkbox\";\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 QuestionBooleanModel.prototype.getItemCss = function () {\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_4__[\"CssClassBuilder\"]()\n .append(this.cssClasses.item)\n .append(this.cssClasses.itemDisabled, this.isReadOnly)\n .append(this.cssClasses.itemChecked, !!this.checkedValue)\n .append(this.cssClasses.itemIndeterminate, this.checkedValue === null)\n .toString();\n };\n QuestionBooleanModel.prototype.getLabelCss = function (checked) {\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_4__[\"CssClassBuilder\"]()\n .append(this.cssClasses.label)\n .append(this.cssClasses.disabledLabel, this.checkedValue === !checked || this.isReadOnly)\n .toString();\n };\n Object.defineProperty(QuestionBooleanModel.prototype, \"allowClick\", {\n get: function () {\n return this.isIndeterminate && !this.isInputReadOnly;\n },\n enumerable: false,\n configurable: true\n });\n /* #region web-based methods */\n QuestionBooleanModel.prototype.onLabelClick = function (event, value) {\n if (this.allowClick) {\n Object(_utils_utils__WEBPACK_IMPORTED_MODULE_5__[\"preventDefaults\"])(event);\n this.checkedValue = value;\n }\n return true;\n };\n QuestionBooleanModel.prototype.onSwitchClickModel = function (event) {\n if (this.allowClick) {\n Object(_utils_utils__WEBPACK_IMPORTED_MODULE_5__[\"preventDefaults\"])(event);\n var isRightClick = event.offsetX / event.target.offsetWidth > 0.5;\n var isRtl = document.defaultView.getComputedStyle(event.target).direction == \"rtl\";\n this.checkedValue = isRtl ? !isRightClick : isRightClick;\n return;\n }\n return true;\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\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.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 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.question.isInputReadOnly || !this.item.isEnabled;\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 return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_3__[\"CssClassBuilder\"]()\n .append(this.question.cssClasses.item)\n .append(this.question.cssClasses.itemSelected, this.selected)\n .append(this.question.cssClasses.itemHover, !this.readOnly && !this.selected)\n .append(this.question.cssClasses.itemDisabled, this.question.isReadOnly || !this.item.isEnabled)\n .toString();\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\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.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 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 (this.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\");\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 Object.defineProperty(QuestionCheckboxModel.prototype, \"selectedItems\", {\n /**\n * Return the selected items in the checkbox. Returns empty array if the value is empty\n */\n get: function () {\n if (this.isEmpty())\n return [];\n var val = this.value;\n var res = [];\n for (var i = 0; i < val.length; i++) {\n res.push(_itemvalue__WEBPACK_IMPORTED_MODULE_4__[\"ItemValue\"].getItemByValue(this.visibleChoices, val[i]));\n }\n return res;\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.getItemClassCore = function (item, options) {\n var __dummy_value = this.value; //trigger dependencies from koValue for knockout\n options.isSelectAllItem = item === this.selectAllItem;\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_6__[\"CssClassBuilder\"]()\n .append(_super.prototype.getItemClassCore.call(this, item, options))\n .append(this.cssClasses.itemSelectAll, options.isSelectAllItem)\n .toString();\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 (this.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 this.isSupportProperty(\"hasSelectAll\");\n };\n QuestionCheckboxModel.prototype.addToVisibleChoices = function (items, isAddAll) {\n if (this.supportSelectAll() &&\n ((isAddAll && this.canShowOptionItem(this.selectAllItem)) ||\n 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 Object.defineProperty(QuestionCheckboxModel.prototype, \"checkBoxSvgPath\", {\n get: function () {\n return \"M5,13l2-2l3,3l7-7l2,2l-9,9L5,13z\";\n },\n enumerable: false,\n configurable: true\n });\n QuestionCheckboxModel.prototype.getItemId = function (item) {\n return this.inputId + \"_\" + this.getItemIndex(item);\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 {\n name: \"selectAllText\",\n serializationProperty: \"locSelectAllText\",\n dependsOn: \"hasSelectAll\",\n visibleIf: function (obj) {\n return obj.hasSelectAll;\n }\n }\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 _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_textbase__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question_textbase */ \"./src/question_textbase.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_3__ = __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 * A Model for a comment question\n */\nvar QuestionCommentModel = /** @class */ (function (_super) {\n __extends(QuestionCommentModel, _super);\n function QuestionCommentModel() {\n return _super !== null && _super.apply(this, arguments) || this;\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 Object.defineProperty(QuestionCommentModel.prototype, \"acceptCarriageReturn\", {\n /**\n * Accepts pressing the Enter key by end-users and accepts carriage return symbols - \\n - in the question value assigned.\n */\n get: function () {\n return this.getPropertyValue(\"acceptCarriageReturn\");\n },\n set: function (val) {\n this.setPropertyValue(\"acceptCarriageReturn\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionCommentModel.prototype, \"autoGrow\", {\n /**\n * Specifies whether the question's text area automatically expands its height to avoid the vertical scrollbar and to display the entire multi-line contents entered by respondents.\n * Default value is false.\n * @see SurveyModel.autoGrowComment\n */\n get: function () {\n return this.getPropertyValue(\"autoGrow\") || (this.survey && this.survey.autoGrowComment);\n },\n set: function (val) {\n this.setPropertyValue(\"autoGrow\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionCommentModel.prototype.getType = function () {\n return \"comment\";\n };\n QuestionCommentModel.prototype.afterRenderQuestionElement = function (el) {\n this.element = document.getElementById(this.inputId) || el;\n this.updateElement();\n _super.prototype.afterRenderQuestionElement.call(this, el);\n };\n QuestionCommentModel.prototype.updateElement = function () {\n var _this = this;\n if (this.element && this.autoGrow) {\n setTimeout(function () { return Object(_utils_utils__WEBPACK_IMPORTED_MODULE_3__[\"increaseHeightByContent\"])(_this.element); }, 1);\n }\n };\n QuestionCommentModel.prototype.onInput = function (event) {\n if (this.isInputTextUpdate)\n this.value = event.target.value;\n else\n this.updateElement();\n };\n QuestionCommentModel.prototype.onKeyDown = function (event) {\n if (!this.acceptCarriageReturn && (event.key === \"Enter\" || event.keyCode === 13)) {\n event.preventDefault();\n event.stopPropagation();\n }\n };\n QuestionCommentModel.prototype.onValueChanged = function () {\n _super.prototype.onValueChanged.call(this);\n this.updateElement();\n };\n QuestionCommentModel.prototype.setNewValue = function (newValue) {\n if (!this.acceptCarriageReturn && !!newValue) {\n // eslint-disable-next-line no-control-regex\n newValue = newValue.replace(new RegExp(\"(\\r\\n|\\n|\\r)\", \"gm\"), \"\");\n }\n _super.prototype.setNewValue.call(this, newValue);\n };\n return QuestionCommentModel;\n}(_question_textbase__WEBPACK_IMPORTED_MODULE_2__[\"QuestionTextBase\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"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 { name: \"autoGrow:boolean\" },\n { name: \"acceptCarriageReturn:boolean\", default: true, visible: false }\n], function () {\n return new QuestionCommentModel(\"\");\n}, \"textbase\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"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 _survey_element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./survey-element */ \"./src/survey-element.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 ComponentQuestionJSON.prototype.getDisplayValue = function (keyAsText, value, question) {\n if (!this.json.getDisplayValue)\n return question.getDisplayValue(keyAsText, value);\n return this.json.getDisplayValue(question);\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 _survey_element__WEBPACK_IMPORTED_MODULE_2__[\"SurveyElement\"].CreateDisabledDesignElements = true;\n _this.createWrapper();\n _survey_element__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, isLight) {\n _super.prototype.setSurveyImpl.call(this, value, isLight);\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 QuestionCustomModelBase.prototype.getContentDisplayValueCore = function (keyAsText, value, question) {\n if (!question)\n return _super.prototype.getDisplayValueCore.call(this, keyAsText, value);\n return this.customQuestion.getDisplayValue(keyAsText, value, question);\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 !this.isTwoValueEquals(this.contentQuestion.value, newValue)) {\n this.contentQuestion.value = this.getUnbindValue(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 _super.prototype.getContentDisplayValueCore.call(this, keyAsText, value, this.contentQuestion);\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 if (!!this.contentPanel) {\n var val = this.contentPanel.getValue();\n if (!_helpers__WEBPACK_IMPORTED_MODULE_3__[\"Helpers\"].isValueEmpty(val)) {\n this.value = val;\n }\n }\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 && !this.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) {\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 _super.prototype.getContentDisplayValueCore.call(this, keyAsText, value, this.contentPanel);\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\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.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 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\");\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\");\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\");\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\");\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 QuestionDropdownModel.prototype.getControlClass = function () {\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]()\n .append(this.cssClasses.control)\n .append(this.cssClasses.onError, this.errors.length > 0)\n .append(this.cssClasses.controlDisabled, this.isReadOnly)\n .toString();\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.runIfReadOnly && this.isReadOnly))\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.canCollectErrors = function () {\n return true;\n };\n QuestionExpressionModel.prototype.hasRequiredError = function () {\n return false;\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\");\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\");\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 Object.defineProperty(QuestionExpressionModel.prototype, \"runIfReadOnly\", {\n get: function () {\n return this.runIfReadOnlyValue === true;\n },\n set: function (val) {\n this.runIfReadOnlyValue = 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 var res = \"\";\n if (!this.isValueEmpty(val)) {\n var str = this.getValueAsStr(val);\n res = !this.format ? str : this.format[\"format\"](str);\n }\n if (!!this.survey) {\n res = this.survey.getExpressionDisplayValue(this, val, res);\n }\n return res;\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\");\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: \"defaultValueExpression\", 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\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_6__ = __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\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 _this.isDragging = 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 //#region\n // web-based methods\n _this.onDragOver = function (event) {\n if (_this.isInputReadOnly) {\n event.returnValue = false;\n return false;\n }\n _this.isDragging = true;\n event.dataTransfer.dropEffect = \"copy\";\n event.preventDefault();\n };\n _this.onDrop = function (event) {\n if (!_this.isInputReadOnly) {\n _this.isDragging = false;\n event.preventDefault();\n var src = event.dataTransfer;\n _this.onChange(src);\n }\n };\n _this.onDragLeave = function (event) {\n if (!_this.isInputReadOnly) {\n _this.isDragging = false;\n }\n };\n _this.doChange = function (event) {\n var src = event.target || event.srcElement;\n _this.onChange(src);\n };\n _this.doClean = function (event) {\n var src = event.target || event.srcElement;\n if (_this.needConfirmRemoveFile) {\n var isConfirmed = Object(_utils_utils__WEBPACK_IMPORTED_MODULE_6__[\"confirmAction\"])(_this.confirmRemoveAllMessage);\n if (!isConfirmed)\n return;\n }\n src.parentElement.querySelectorAll(\"input\")[0].value = \"\";\n _this.clear();\n };\n _this.doDownloadFile = function (event, data) {\n if (Object(_utils_utils__WEBPACK_IMPORTED_MODULE_6__[\"detectIEOrEdge\"])()) {\n event.preventDefault();\n Object(_utils_utils__WEBPACK_IMPORTED_MODULE_6__[\"loadFileFromBase64\"])(data.content, data.name);\n }\n };\n return _this;\n }\n QuestionFileModel.prototype.getType = function () {\n return \"file\";\n };\n QuestionFileModel.prototype.clearOnDeletingContainer = function () {\n if (!this.survey)\n return;\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\");\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\");\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 this.confirmRemoveMessage.format(fileName);\n };\n Object.defineProperty(QuestionFileModel.prototype, \"inputTitle\", {\n /**\n * The input title value.\n */\n get: function () {\n if (this.isUploading)\n return this.loadingFileTitle;\n if (this.isEmpty())\n return this.chooseFileTitle;\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 if (!this.survey)\n return;\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 if (!this.survey)\n return;\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 if (_this.survey) {\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 };\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 if (_this.survey) {\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 };\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 QuestionFileModel.prototype.getChooseFileCss = function () {\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]()\n .append(this.cssClasses.chooseFile)\n .append(this.cssClasses.controlDisabled, this.isReadOnly)\n .toString();\n };\n QuestionFileModel.prototype.getReadOnlyFileCss = function () {\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]()\n .append(\"form-control\")\n .append(this.cssClasses.placeholderInput)\n .toString();\n };\n QuestionFileModel.prototype.getFileDecoratorCss = function () {\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]()\n .append(this.cssClasses.fileDecorator)\n .append(this.cssClasses.fileDecoratorDrag, this.isDragging)\n .toString();\n };\n QuestionFileModel.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.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.loadFiles(files);\n };\n QuestionFileModel.prototype.doRemoveFile = function (data) {\n if (this.needConfirmRemoveFile) {\n var isConfirmed = Object(_utils_utils__WEBPACK_IMPORTED_MODULE_6__[\"confirmAction\"])(this.getConfirmRemoveMessage(data.name));\n if (!isConfirmed)\n return;\n }\n this.removeFile(data);\n };\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])()\n ], QuestionFileModel.prototype, \"isDragging\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ defaultValue: \"empty\" })\n ], QuestionFileModel.prototype, \"currentState\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ localizable: { defaultStr: \"confirmRemoveFile\" } })\n ], QuestionFileModel.prototype, \"confirmRemoveMessage\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ localizable: { defaultStr: \"confirmRemoveAllFiles\" } })\n ], QuestionFileModel.prototype, \"confirmRemoveAllMessage\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ localizable: { defaultStr: \"noFileChosen\" } })\n ], QuestionFileModel.prototype, \"noFileChosenCaption\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ localizable: { defaultStr: \"chooseFileCaption\" } })\n ], QuestionFileModel.prototype, \"chooseButtonCaption\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ localizable: { defaultStr: \"cleanCaption\" } })\n ], QuestionFileModel.prototype, \"cleanButtonCaption\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ localizable: { defaultStr: \"removeFileCaption\" } })\n ], QuestionFileModel.prototype, \"removeFileCaption\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ localizable: { defaultStr: \"loadingFile\" } })\n ], QuestionFileModel.prototype, \"loadingFileTitle\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ localizable: { defaultStr: \"chooseFile\" } })\n ], QuestionFileModel.prototype, \"chooseFileTitle\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"property\"])({ localizable: { defaultStr: \"fileDragAreaPlaceholder\" } })\n ], QuestionFileModel.prototype, \"dragAreaPlaceholder\", void 0);\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 { name: \"maxSize:number\", default: 0 },\n { name: \"defaultValue\", visible: false },\n { name: \"correctAnswer\", visible: false },\n { name: \"validators\", visible: false },\n { name: \"needConfirmRemoveFile:boolean\" },\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\");\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 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.getRendererContext = function (locStr) {\n return !!this.locOwner ? this.locOwner.getRendererContext(locStr) : locStr;\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 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\");\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 this.isTwoValueEquals(val, item.value);\n if (!Array.isArray(val))\n return false;\n for (var i = 0; i < val.length; i++) {\n if (this.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\");\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\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.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\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 hasError = !!this.data.getErrorByType(\"requiredinallrowserror\");\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_11__[\"CssClassBuilder\"]().append(cssClasses.row)\n .append(cssClasses.rowError, hasError && this.isValueEmpty(this.value))\n .toString();\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.addColumn = function (value, text) {\n var col = new _itemvalue__WEBPACK_IMPORTED_MODULE_1__[\"ItemValue\"](value, text);\n this.columns.push(col);\n return col;\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 return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_11__[\"CssClassBuilder\"]()\n .append(this.cssClasses.cell, this.hasCellText)\n .append(this.hasCellText ? this.cssClasses.cellText : this.cssClasses.label)\n .append(this.hasCellText ? this.cssClasses.cellTextSelected : this.cssClasses.itemChecked, isChecked)\n .append(this.hasCellText ? this.cssClasses.cellTextDisabled : this.cssClasses.itemDisabled, isDisabled)\n .append(this.cssClasses.itemHover, allowHover && !this.hasCellText)\n .toString();\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 this.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 (this.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 Object.defineProperty(QuestionMatrixModel.prototype, \"SurveyModel\", {\n get: function () {\n return this.survey;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixModel.prototype.getColumnHeaderWrapperComponentName = function (cell) {\n return this.SurveyModel.getElementWrapperComponentName({ column: cell }, \"column-header\");\n };\n QuestionMatrixModel.prototype.getColumnHeaderWrapperComponentData = function (cell) {\n return this.SurveyModel.getElementWrapperComponentData({ column: cell }, \"column-header\");\n };\n QuestionMatrixModel.prototype.getRowHeaderWrapperComponentName = function (cell) {\n return this.SurveyModel.getElementWrapperComponentName({ row: cell }, \"row-header\");\n };\n QuestionMatrixModel.prototype.getRowHeaderWrapperComponentData = function (cell) {\n return this.SurveyModel.getElementWrapperComponentData({ row: cell }, \"row-header\");\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 if (!rows)\n return res;\n for (var i = 0; i < rows.length; i++) {\n var rowValue = rows[i].rowName;\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: MatrixDropdownCell, MatrixDropdownTotalCell, MatrixDropdownRowModelBase, MatrixDropdownTotalRowModel, 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__, \"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__, \"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 _survey_element__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./survey-element */ \"./src/survey-element.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 _functionsfactory__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./functionsfactory */ \"./src/functionsfactory.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _error__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./error */ \"./src/error.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _question_matrixdropdowncolumn__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./question_matrixdropdowncolumn */ \"./src/question_matrixdropdowncolumn.ts\");\n/* harmony import */ var _question_matrixdropdownrendered__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./question_matrixdropdownrendered */ \"./src/question_matrixdropdownrendered.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\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 this.question.runIfReadOnly = true;\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_8__[\"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, \"text\", {\n get: function () {\n return this.rowName;\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_9__[\"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_9__[\"settings\"].commentPrefix]\n : \"\";\n if (comment == undefined)\n comment = \"\";\n question.updateValueFromSurvey(val);\n if (!!comment || this.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 if (!!this.onDetailPanelShowingChanged) {\n this.onDetailPanelShowingChanged();\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 this.updateQuestionsValue(name, newColumnValue, isComment);\n var newValue = this.value;\n var changedName = isComment ? name + _settings__WEBPACK_IMPORTED_MODULE_9__[\"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 !this.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.updateQuestionsValue = function (name, newColumnValue, isComment) {\n if (!this.detailPanel)\n return;\n var colQuestion = this.getQuestionByColumnName(name);\n var detailQuestion = this.detailPanel.getQuestionByName(name);\n if (!colQuestion || !detailQuestion)\n return;\n var isColQuestion = this.isTwoValueEquals(newColumnValue, isComment ? colQuestion.comment : colQuestion.value);\n var question = isColQuestion ? detailQuestion : colQuestion;\n this.isSettingValue = true;\n if (!isComment) {\n question.value = newColumnValue;\n }\n else {\n question.comment = newColumnValue;\n }\n this.isSettingValue = false;\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 var cell = this.getCellByColumn(column);\n return !!cell ? cell.question : null;\n };\n MatrixDropdownRowModelBase.prototype.getCellByColumn = function (column) {\n for (var i = 0; i < this.cells.length; i++) {\n if (this.cells[i].column == column)\n return this.cells[i];\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 (!this.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_9__[\"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.getRendererContext = function (locStr) {\n return this.data ? this.data.getRendererContext(locStr) : locStr;\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 var cell = this.getCellByColumn(column);\n if (!cell)\n return;\n this.updateCellOnColumnChanged(cell, name, newValue);\n };\n MatrixDropdownRowModelBase.prototype.updateCellQuestionOnColumnItemValueChanged = function (column, propertyName, obj, name, newValue, oldValue) {\n var cell = this.getCellByColumn(column);\n if (!cell)\n return;\n this.updateCellOnColumnItemValueChanged(cell, propertyName, obj, name, newValue, oldValue);\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 if (!!this.detailPanel) {\n this.detailPanel.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.updateCellOnColumnItemValueChanged = function (cell, propertyName, obj, name, newValue, oldValue) {\n var items = cell.question[propertyName];\n if (!Array.isArray(items))\n return;\n var val = name === \"value\" ? oldValue : obj[\"value\"];\n var item = _itemvalue__WEBPACK_IMPORTED_MODULE_5__[\"ItemValue\"].getItemByValue(items, val);\n if (!item)\n return;\n item[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_9__[\"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.isTwoValueEquals = function (val1, val2) {\n return _helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].isTwoValueEquals(val1, val2, false, true, 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\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.updateColumnsAndRows();\n });\n _this.registerFunctionOnPropertyValueChanged(\"cellType\", function () {\n _this.updateColumnsAndRows();\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_9__[\"settings\"].matrixDefaultCellType;\n },\n set: function (val) {\n _settings__WEBPACK_IMPORTED_MODULE_9__[\"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 Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"isUpdateLocked\", {\n get: function () {\n return this.isLoadingFromJson || this.isUpdating;\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownModelBase.prototype.beginUpdate = function () {\n this.isUpdating = true;\n };\n QuestionMatrixDropdownModelBase.prototype.endUpdate = function () {\n this.isUpdating = false;\n this.updateColumnsAndRows();\n };\n QuestionMatrixDropdownModelBase.prototype.updateColumnsAndRows = function () {\n this.updateColumnsIndexes(this.columns);\n this.updateColumnsCellType();\n this.generatedTotalRow = null;\n this.clearRowsAndResetRenderedTable();\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\");\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.isUpdateLocked)\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 _question_matrixdropdownrendered__WEBPACK_IMPORTED_MODULE_13__[\"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_9__[\"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\");\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 Object.defineProperty(QuestionMatrixDropdownModelBase.prototype, \"allowAdaptiveActions\", {\n /**\n * The Matrix toolbar and inner panel toolbars get adaptive if the property is set to true.\n */\n get: function () {\n return this.getPropertyValue(\"allowAdaptiveActions\");\n },\n set: function (val) {\n this.setPropertyValue(\"allowAdaptiveActions\", val);\n if (!!this.detailPanel) {\n this.detailPanel.allowAdaptiveActions = val;\n }\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.onColumnItemValuePropertyChanged = function (column, propertyName, obj, name, newValue, oldValue) {\n if (!this.generatedVisibleRows)\n return;\n for (var i = 0; i < this.generatedVisibleRows.length; i++) {\n this.generatedVisibleRows[i].updateCellQuestionOnColumnItemValueChanged(column, propertyName, obj, name, newValue, oldValue);\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.getCustomCellType = function (column, row, cellType) {\n if (!this.survey)\n return cellType;\n var options = {\n rowValue: row.value,\n row: row,\n column: column,\n columnName: column.name,\n cellType: cellType\n };\n this.survey.matrixCellCreating(this, options);\n return options.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 _question_matrixdropdowncolumn__WEBPACK_IMPORTED_MODULE_12__[\"MatrixDropdownColumn\"](name, title);\n this.columns.push(column);\n return column;\n };\n QuestionMatrixDropdownModelBase.prototype.getVisibleRows = function () {\n var _this = this;\n if (this.isUpdateLocked)\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.isUpdateLocked)\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.text,\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 _survey_element__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_10__[\"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.isUpdateLocked ||\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 builder = new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_11__[\"CssClassBuilder\"]().append(this.getPropertyValue(\"detailButtonCss\" + row.id));\n return builder.append(this.cssClasses.detailButton, builder.toString() === \"\").toString();\n };\n QuestionMatrixDropdownModelBase.prototype.getDetailPanelIconCss = function (row) {\n var builder = new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_11__[\"CssClassBuilder\"]().append(this.getPropertyValue(\"detailIconCss\" + row.id));\n return builder.append(this.cssClasses.detailIcon, builder.toString() === \"\").toString();\n };\n QuestionMatrixDropdownModelBase.prototype.updateDetailPanelButtonCss = function (row) {\n var classes = this.cssClasses;\n var isPanelShowing = this.getIsDetailPanelShowing(row);\n var iconBuilder = new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_11__[\"CssClassBuilder\"]().append(classes.detailIcon)\n .append(classes.detailIconExpanded, isPanelShowing);\n this.setPropertyValue(\"detailIconCss\" + row.id, iconBuilder.toString());\n var buttonBuilder = new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_11__[\"CssClassBuilder\"]().append(classes.detailButton)\n .append(classes.detailButtonExpanded, isPanelShowing);\n this.setPropertyValue(\"detailButtonCss\" + row.id, buttonBuilder.toString());\n };\n QuestionMatrixDropdownModelBase.prototype.createRowDetailPanel = function (row) {\n if (this.isDesignMode)\n return this.detailPanel;\n var panel = this.createNewDetailPanel();\n panel.readOnly = this.isReadOnly;\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.isUpdateLocked &&\n !this.isSett &&\n !this.isReadOnly) {\n this.data.setValue(this.getValueName() + _settings__WEBPACK_IMPORTED_MODULE_9__[\"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(\"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 _question_matrixdropdowncolumn__WEBPACK_IMPORTED_MODULE_12__[\"MatrixDropdownColumn\"].getColumnTypes();\n },\n },\n { name: \"columnColCount\", default: 0, choices: [0, 1, 2, 3, 4] },\n \"columnMinWidth\",\n { name: \"allowAdaptiveActions:boolean\", default: false, visible: false },\n], function () {\n return new QuestionMatrixDropdownModelBase(\"\");\n}, \"matrixbase\");\n\n\n/***/ }),\n\n/***/ \"./src/question_matrixdropdowncolumn.ts\":\n/*!**********************************************!*\\\n !*** ./src/question_matrixdropdowncolumn.ts ***!\n \\**********************************************/\n/*! exports provided: matrixDropdownColumnTypes, MatrixDropdownColumn */\n/***/ (function(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 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 _question_expression__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question_expression */ \"./src/question_expression.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_3__ = __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\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 }\n else {\n _this.templateQuestion.locTitle.strChanged();\n }\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(null);\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\");\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\");\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\");\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_2__[\"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\");\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.getRendererContext = function (locStr) {\n return !!this.colOwner ? this.colOwner.getRendererContext(locStr) : locStr;\n };\n MatrixDropdownColumn.prototype.getProcessedText = function (text) {\n return this.colOwner ? this.colOwner.getProcessedText(text) : text;\n };\n MatrixDropdownColumn.prototype.createCellQuestion = function (row) {\n var qType = this.calcCellQuestionType(row);\n var cellQuestion = this.createNewQuestion(qType);\n this.callOnCellQuestionUpdate(cellQuestion, row);\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 (row) {\n var cellType = this.getDefaultCellQuestionType();\n if (!!row && !!this.colOwner) {\n cellType = this.colOwner.getCustomCellType(this, row, cellType);\n }\n return cellType;\n };\n MatrixDropdownColumn.prototype.getDefaultCellQuestionType = 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_3__[\"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(null);\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 this.templateQuestion.onPropertyChanged.add(function (sender, options) {\n _this.propertyValueChanged(options.name, options.oldValue, options.newValue);\n });\n this.templateQuestion.onItemValuePropertyChanged.add(function (sender, options) {\n _this.doItemValuePropertyChanged(options.propertyName, options.obj, options.name, options.newValue, options.oldValue);\n });\n this.templateQuestion.isContentElement = true;\n if (!this.isLoadingFromJson) {\n this.templateQuestion.onGetSurvey = function () {\n return _this.getSurvey();\n };\n }\n this.templateQuestion.locTitle.strChanged();\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 question.isEditableTemplateElement = true;\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 question.isContentElement = this.templateQuestion.isContentElement;\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.doItemValuePropertyChanged = function (propertyName, obj, name, newValue, oldValue) {\n if (!_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"Serializer\"].hasOriginalProperty(obj, name))\n return;\n if (this.colOwner != null && !this.isLoadingFromJson) {\n this.colOwner.onColumnItemValuePropertyChanged(this, propertyName, obj, name, newValue, oldValue);\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_1__[\"Base\"]));\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_2__[\"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\n\n/***/ }),\n\n/***/ \"./src/question_matrixdropdownrendered.ts\":\n/*!************************************************!*\\\n !*** ./src/question_matrixdropdownrendered.ts ***!\n \\************************************************/\n/*! exports provided: QuestionMatrixDropdownRenderedCell, QuestionMatrixDropdownRenderedRow, QuestionMatrixDropdownRenderedTable */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\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 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 _itemvalue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./itemvalue */ \"./src/itemvalue.ts\");\n/* harmony import */ var _surveyStrings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _actions_action__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./actions/action */ \"./src/actions/action.ts\");\n/* harmony import */ var _actions_adaptive_container__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./actions/adaptive-container */ \"./src/actions/adaptive-container.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _actions_container__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./actions/container */ \"./src/actions/container.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\nvar QuestionMatrixDropdownRenderedCell = /** @class */ (function () {\n function QuestionMatrixDropdownRenderedCell() {\n this.minWidth = \"\";\n this.width = \"\";\n this.colSpans = 1;\n this.isActionsCell = false;\n this.isDragHandlerCell = false;\n this.classNameValue = \"\";\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, \"className\", {\n get: function () {\n var builder = new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_6__[\"CssClassBuilder\"]().append(this.classNameValue);\n if (this.hasQuestion) {\n builder\n .append(this.question.cssError, this.question.errors.length > 0)\n .append(this.question.cssClasses.answered, this.question.isAnswered);\n }\n return builder.toString();\n },\n set: function (val) {\n this.classNameValue = val;\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 // 'text-align': $data.isChoice ? 'center':\n var builder = new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_6__[\"CssClassBuilder\"]()\n .append(questionCss.itemValue, !!questionCss)\n .append(questionCss.asCell, !!questionCss);\n return builder.append(matrixCssClasses.cell, builder.isEmpty() && !!matrixCssClasses)\n .append(matrixCssClasses.choiceCell, this.isChoice)\n .toString();\n };\n QuestionMatrixDropdownRenderedCell.counter = 1;\n return QuestionMatrixDropdownRenderedCell;\n}());\n\nvar QuestionMatrixDropdownRenderedRow = /** @class */ (function (_super) {\n __extends(QuestionMatrixDropdownRenderedRow, _super);\n function QuestionMatrixDropdownRenderedRow(cssClasses, isDetailRow) {\n if (isDetailRow === void 0) { isDetailRow = false; }\n var _this = _super.call(this) || this;\n _this.cssClasses = cssClasses;\n _this.isDetailRow = isDetailRow;\n _this.cells = [];\n _this.onCreating();\n _this.idValue = QuestionMatrixDropdownRenderedRow.counter++;\n return _this;\n }\n QuestionMatrixDropdownRenderedRow.prototype.onCreating = function () { }; // need for knockout binding see QuestionMatrixDropdownRenderedRow.prototype[\"onCreating\"]\n Object.defineProperty(QuestionMatrixDropdownRenderedRow.prototype, \"id\", {\n get: function () {\n return this.idValue;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedRow.prototype, \"attributes\", {\n get: function () {\n if (!this.row)\n return {};\n return { \"data-sv-drop-target-matrix-row\": this.row.id };\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionMatrixDropdownRenderedRow.prototype, \"className\", {\n get: function () {\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_6__[\"CssClassBuilder\"]()\n .append(this.cssClasses.row)\n .append(this.cssClasses.detailRow, this.isDetailRow)\n .append(this.cssClasses.dragDropGhostPositionTop, this.ghostPosition === \"top\")\n .append(this.cssClasses.dragDropGhostPositionBottom, this.ghostPosition === \"bottom\")\n .append(this.cssClasses.rowAdditional, this.isAdditionalClasses)\n .toString();\n },\n enumerable: false,\n configurable: true\n });\n QuestionMatrixDropdownRenderedRow.counter = 1;\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: null })\n ], QuestionMatrixDropdownRenderedRow.prototype, \"ghostPosition\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: false })\n ], QuestionMatrixDropdownRenderedRow.prototype, \"isAdditionalClasses\", void 0);\n return QuestionMatrixDropdownRenderedRow;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"Base\"]));\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(this.cssClasses);\n if (this.matrix.allowRowsDragAndDrop) {\n this.headerRow.cells.push(this.createHeaderCell(null));\n }\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(this.cssClasses);\n if (this.matrix.allowRowsDragAndDrop) {\n this.footerRow.cells.push(this.createHeaderCell(null));\n }\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.getRowDragCell = function (rowIndex) {\n var cell = new QuestionMatrixDropdownRenderedCell();\n cell.isDragHandlerCell = true;\n cell.className = this.cssClasses.actionsCell;\n cell.row = this.matrix.visibleRows[rowIndex];\n return cell;\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 actionContainer = this.matrix.allowAdaptiveActions ? new _actions_adaptive_container__WEBPACK_IMPORTED_MODULE_5__[\"AdaptiveActionContainer\"]() : new _actions_container__WEBPACK_IMPORTED_MODULE_7__[\"ActionContainer\"]();\n actionContainer.setItems(rowActions);\n var itemValue = new _itemvalue__WEBPACK_IMPORTED_MODULE_2__[\"ItemValue\"](actionContainer);\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 _actions_action__WEBPACK_IMPORTED_MODULE_4__[\"Action\"]({\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 _actions_action__WEBPACK_IMPORTED_MODULE_4__[\"Action\"]({\n id: \"show-detail\",\n title: _surveyStrings__WEBPACK_IMPORTED_MODULE_3__[\"surveyLocalization\"].getString(\"editText\"),\n showTitle: false,\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(this.cssClasses);\n if (this.matrix.allowRowsDragAndDrop) {\n var rowIndex = this.matrix.visibleRows.indexOf(row);\n res.cells.push(this.getRowDragCell(rowIndex));\n }\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 renderedCell.className = new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_6__[\"CssClassBuilder\"]()\n .append(renderedCell.className)\n .append(this.cssClasses.detailRowText, row.hasPanel)\n .toString();\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 if (this.hasActionCellInRows(location)) {\n var actions = this.getRowActionsCell(rowIndex, location);\n if (!!actions) {\n renderedRow.cells.push(actions);\n }\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(this.cssClasses, true);\n res.row = row;\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(this.cssClasses);\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(this.cssClasses);\n if (this.matrix.showHeader) {\n res.cells.push(this.createEmptyCell());\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.createEmptyCell());\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 if (!!this.cssClasses.cell) {\n cell.className = this.cssClasses.cell;\n }\n return cell;\n };\n QuestionMatrixDropdownRenderedTable.prototype.createEmptyCell = function () {\n var res = this.createTextCell(null);\n res.isEmpty = true;\n return res;\n };\n return QuestionMatrixDropdownRenderedTable;\n}(_base__WEBPACK_IMPORTED_MODULE_1__[\"Base\"]));\n\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 _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_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question_matrixdropdownbase */ \"./src/question_matrixdropdownbase.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 _settings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/utils */ \"./src/utils/utils.ts\");\n/* harmony import */ var _dragdrop_matrix_rows__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./dragdrop/matrix-rows */ \"./src/dragdrop/matrix-rows.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _question_matrixdropdownrendered__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./question_matrixdropdownrendered */ \"./src/question_matrixdropdownrendered.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\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_2__[\"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 _this.moveRowByIndex = function (fromIndex, toIndex) {\n var value = _this.createNewValue();\n if (!value)\n return;\n var movableRow = value[fromIndex];\n if (!movableRow)\n return;\n value.splice(fromIndex, 1);\n value.splice(toIndex, 0, movableRow);\n _this.value = value;\n };\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 _this.registerFunctionOnPropertyValueChanged(\"allowRowsDragAndDrop\", function () {\n _this.clearRowsAndResetRenderedTable();\n });\n return _this;\n }\n QuestionMatrixDynamicModel.prototype.setSurveyImpl = function (value, isLight) {\n _super.prototype.setSurveyImpl.call(this, value, isLight);\n this.dragDropMatrixRows = new _dragdrop_matrix_rows__WEBPACK_IMPORTED_MODULE_7__[\"DragDropMatrixRows\"](this.survey);\n };\n QuestionMatrixDynamicModel.prototype.startDragMatrixRow = function (event, row) {\n this.dragDropMatrixRows.startDrag(event, row, 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 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_5__[\"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.isUpdateLocked) {\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 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, \"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 QuestionMatrixDynamicModel.prototype.createRenderedTable = function () {\n return new QuestionMatrixDynamicRenderedTable(this);\n };\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"rowCountValue\", {\n get: function () {\n return this.getPropertyValue(\"rowCount\");\n },\n set: function (val) {\n this.setPropertyValue(\"rowCount\", val);\n },\n enumerable: false,\n configurable: true\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\");\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\");\n },\n set: function (val) {\n if (val <= 0)\n return;\n if (val > _settings__WEBPACK_IMPORTED_MODULE_5__[\"settings\"].matrixMaximumRowCount)\n val = _settings__WEBPACK_IMPORTED_MODULE_5__[\"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\");\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\");\n },\n set: function (val) {\n this.setPropertyValue(\"allowRemoveRows\", val);\n if (!this.isUpdateLocked) {\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 var res = this.allowRemoveRows &&\n !this.isReadOnly &&\n this.rowCount > this.minRowCount;\n return !!this.canRemoveRowsCallback ? this.canRemoveRowsCallback(res) : res;\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 and focus the cell in the first column.\n */\n QuestionMatrixDynamicModel.prototype.addRowUI = function () {\n var oldRowCount = this.rowCount;\n this.addRow();\n if (oldRowCount === this.rowCount)\n return;\n var q = this.getQuestionToFocusOnAddingRow();\n if (!!q) {\n q.focus();\n }\n };\n QuestionMatrixDynamicModel.prototype.getQuestionToFocusOnAddingRow = function () {\n var row = this.visibleRows[this.visibleRows.length - 1];\n for (var i = 0; i < row.cells.length; i++) {\n var q = row.cells[i].question;\n if (!!q && q.isVisible && !q.isReadOnly) {\n return q;\n }\n }\n return null;\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 if (this.detailPanelShowOnAdding && this.visibleRows.length > 0) {\n this.visibleRows[this.visibleRows.length - 1].showDetailPanel();\n }\n };\n Object.defineProperty(QuestionMatrixDynamicModel.prototype, \"detailPanelShowOnAdding\", {\n /**\n * Set this property to true to show detail panel immediately on adding a new row.\n * @see detailPanelMode\n */\n get: function () {\n return this.getPropertyValue(\"detailPanelShowOnAdding\");\n },\n set: function (val) {\n this.setPropertyValue(\"detailPanelShowOnAdding\", val);\n },\n enumerable: false,\n configurable: true\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.isValueSurveyElement = function (val) {\n return this.isEditingSurveyElement || _super.prototype.isValueSurveyElement.call(this, val);\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.isValueSurveyElement(newValue) &&\n !this.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_6__[\"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_5__[\"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 QuestionMatrixDynamicModel.prototype.getAddRowButtonCss = function (isEmptySection) {\n if (isEmptySection === void 0) { isEmptySection = false; }\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_8__[\"CssClassBuilder\"]()\n .append(this.cssClasses.button)\n .append(this.cssClasses.buttonAdd)\n .append(this.cssClasses.emptyRowsButton, isEmptySection)\n .toString();\n };\n QuestionMatrixDynamicModel.prototype.getRemoveRowButtonCss = function () {\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_8__[\"CssClassBuilder\"]()\n .append(this.cssClasses.button)\n .append(this.cssClasses.buttonRemove)\n .toString();\n };\n return QuestionMatrixDynamicModel;\n}(_question_matrixdropdownbase__WEBPACK_IMPORTED_MODULE_2__[\"QuestionMatrixDropdownModelBase\"]));\n\nvar QuestionMatrixDynamicRenderedTable = /** @class */ (function (_super) {\n __extends(QuestionMatrixDynamicRenderedTable, _super);\n function QuestionMatrixDynamicRenderedTable() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n QuestionMatrixDynamicRenderedTable.prototype.setDefaultRowActions = function (row, actions) {\n _super.prototype.setDefaultRowActions.call(this, row, actions);\n };\n return QuestionMatrixDynamicRenderedTable;\n}(_question_matrixdropdownrendered__WEBPACK_IMPORTED_MODULE_9__[\"QuestionMatrixDropdownRenderedTable\"]));\n_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"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_5__[\"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 {\n name: \"detailPanelShowOnAdding:boolean\",\n dependsOn: \"detailPanelMode\",\n visibleIf: function (obj) {\n return obj.detailPanelMode !== \"none\";\n },\n },\n \"allowRowsDragAndDrop:switch\"\n], function () {\n return new QuestionMatrixDynamicModel(\"\");\n}, \"matrixdropdownbase\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_1__[\"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_2__[\"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 _survey_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./survey-element */ \"./src/survey-element.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var _question_text__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./question_text */ \"./src/question_text.ts\");\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.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 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_3__[\"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_6__[\"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_5__[\"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, isLight) {\n _super.prototype.setSurveyImpl.call(this, value, isLight);\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_4__[\"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 _survey_element__WEBPACK_IMPORTED_MODULE_1__[\"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_6__[\"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 QuestionMultipleTextModel.prototype.getItemCss = function () {\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_7__[\"CssClassBuilder\"]().append(this.cssClasses.item)\n .append(this.cssClasses.cell).toString();\n };\n QuestionMultipleTextModel.prototype.getItemTitleCss = function () {\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_7__[\"CssClassBuilder\"]().append(this.cssClasses.itemTitle)\n .append(this.cssClasses.cell).toString();\n };\n return QuestionMultipleTextModel;\n}(_question__WEBPACK_IMPORTED_MODULE_2__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_4__[\"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_4__[\"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_5__[\"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 _survey_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./survey-element */ \"./src/survey-element.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\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.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, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\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 && !!q.parent.data) {\n var processor = new QuestionPanelDynamicItemTextProcessor(q.parentQuestion, q.parent.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 var q = this.data;\n if (!!q && !!q.parentQuestion && !!q.parent) {\n values[QuestionPanelDynamicItem.ParentItemVariableName.toLowerCase()] = q.parent.getValue();\n }\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 _this.template.addElementCallback = function (element) {\n _this.addOnPropertyChangedCallback(element);\n _this.rebuildPanels();\n };\n _this.template.removeElementCallback = function () {\n _this.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 _this.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, isLight) {\n _super.prototype.setSurveyImpl.call(this, value, isLight);\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 _this = this;\n if (element.isQuestion) {\n element.setParentQuestion(this);\n }\n element.onPropertyChanged.add(function (element, options) {\n _this.onTemplateElementPropertyChanged(element, options);\n });\n if (element.isPanel) {\n element.addElementCallback = function (element) {\n _this.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\" || 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\");\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\");\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\");\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, false));\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 _survey_element__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 if (!!this.parentQuestion && !!this.parent) {\n cachedValues[QuestionPanelDynamicItem.ParentItemVariableName.toLowerCase()] = this.parent.getValue();\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 panel.locStrsChanged();\n return panel;\n };\n QuestionPanelDynamicModel.prototype.createAndSetupNewPanelObject = function () {\n var panel = this.createNewPanelObject();\n panel.isInteractiveDesignElement = false;\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 return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]()\n .append(this.cssClasses.panelWrapper)\n .append(this.cssClasses.panelWrapperInRow, this.panelRemoveButtonLocation === \"right\")\n .toString();\n };\n QuestionPanelDynamicModel.prototype.getPanelRemoveButtonCss = function () {\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]()\n .append(this.cssClasses.button)\n .append(this.cssClasses.buttonRemove)\n .append(this.cssClasses.buttonRemoveRight, this.panelRemoveButtonLocation === \"right\")\n .toString();\n };\n QuestionPanelDynamicModel.prototype.getAddButtonCss = function () {\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]()\n .append(this.cssClasses.button)\n .append(this.cssClasses.buttonAdd)\n .append(this.cssClasses.buttonAdd + \"--list-mode\", this.renderMode === \"list\")\n .toString();\n };\n QuestionPanelDynamicModel.prototype.getPrevButtonCss = function () {\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]()\n .append(this.cssClasses.buttonPrev)\n .append(this.cssClasses.buttonPrev + \"--disabled\", !this.isPrevButtonShowing)\n .toString();\n };\n QuestionPanelDynamicModel.prototype.getNextButtonCss = function () {\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_10__[\"CssClassBuilder\"]()\n .append(this.cssClasses.buttonNext)\n .append(this.cssClasses.buttonNext + \"--disabled\", !this.isNextButtonShowing)\n .toString();\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 /**\n * Return the selected item in the radio group. Returns null if the value is empty\n */\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\");\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 Object.defineProperty(QuestionRadiogroupModel.prototype, \"ariaRole\", {\n get: function () {\n return \"radiogroup\";\n },\n enumerable: false,\n configurable: 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 _dragdrop_ranking_choices__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dragdrop/ranking-choices */ \"./src/dragdrop/ranking-choices.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 _question_checkbox__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./question_checkbox */ \"./src/question_checkbox.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _utils_is_mobile__WEBPACK_IMPORTED_MODULE_6__ = __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})();\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\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.onVisibleChoicesChanged = function () {\n _super.prototype.onVisibleChoicesChanged.call(_this);\n // ranking question with only one choice doesn't make sense\n if (_this.visibleChoices.length === 1) {\n _this.value = [];\n _this.updateRankingChoices();\n return;\n }\n if (_this.isEmpty()) {\n _this.updateRankingChoices();\n return;\n }\n if (_this.visibleChoices.length > _this.value.length)\n _this.addToValueByVisibleChoices();\n if (_this.visibleChoices.length < _this.value.length)\n _this.removeFromValueByVisibleChoices();\n _this.updateRankingChoices();\n };\n _this.localeChanged = function () {\n _super.prototype.localeChanged.call(_this);\n _this.updateRankingChoices();\n };\n _this.handlePointerDown = function (event, choice, node) {\n if (!_this.fallbackToSortableJS && !_this.survey.isDesignMode) {\n _this.dragDropRankingChoices.startDrag(event, choice, _this, node);\n }\n };\n _this.handleKeydown = function (event, choice) {\n var key = event.key;\n var index = _this.rankingChoices.indexOf(choice);\n if (key === \"ArrowUp\" && index) {\n _this.handleArrowUp(index, choice);\n }\n if (key === \"ArrowDown\" && index !== _this.rankingChoices.length - 1) {\n _this.handleArrowDown(index, choice);\n }\n };\n _this.handleArrowUp = function (index, choice) {\n var choices = _this.rankingChoices;\n choices.splice(index, 1);\n choices.splice(index - 1, 0, choice);\n _this.setValue();\n setTimeout(function () {\n _this.focusItem(index - 1);\n }, 1);\n };\n _this.handleArrowDown = function (index, choice) {\n var choices = _this.rankingChoices;\n choices.splice(index, 1);\n choices.splice(index + 1, 0, choice);\n _this.setValue();\n setTimeout(function () {\n _this.focusItem(index + 1);\n }, 1);\n };\n _this.focusItem = function (index) {\n var itemsNodes = _this.domNode.querySelectorAll(\".\" + _this.cssClasses.item);\n itemsNodes[index].focus();\n };\n _this.setValue = function () {\n var value = [];\n _this.rankingChoices.forEach(function (choice) {\n value.push(choice.value);\n });\n _this.value = value;\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 _this.createNewArray(\"rankingChoices\");\n return _this;\n }\n QuestionRankingModel.prototype.getType = function () {\n return \"ranking\";\n };\n Object.defineProperty(QuestionRankingModel.prototype, \"rootClass\", {\n get: function () {\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]()\n .append(this.cssClasses.root)\n .append(this.cssClasses.rootMobileMod, _utils_is_mobile__WEBPACK_IMPORTED_MODULE_6__[\"IsMobile\"])\n .toString();\n },\n enumerable: false,\n configurable: true\n });\n QuestionRankingModel.prototype.getItemClassCore = function (item, options) {\n var itemIndex = this.rankingChoices.indexOf(item);\n var dropTargetIndex = this.rankingChoices.indexOf(this.currentDropTarget);\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]()\n .append(_super.prototype.getItemClassCore.call(this, item, options))\n .append(this.cssClasses.itemGhostMod, this.currentDropTarget === item)\n .append(\"sv-dragdrop-movedown\", itemIndex === dropTargetIndex + 1 && this.dropTargetNodeMove === \"down\")\n .append(\"sv-dragdrop-moveup\", itemIndex === dropTargetIndex - 1 && this.dropTargetNodeMove === \"up\")\n .toString();\n };\n QuestionRankingModel.prototype.isItemCurrentDropTarget = function (item) {\n if (this.fallbackToSortableJS)\n return false;\n return this.dragDropRankingChoices.dropTarget === item;\n };\n Object.defineProperty(QuestionRankingModel.prototype, \"ghostPositionCssClass\", {\n get: function () {\n if (this.ghostPosition === \"top\")\n return this.cssClasses.dragDropGhostPositionTop;\n if (this.ghostPosition === \"bottom\")\n return this.cssClasses.dragDropGhostPositionBottom;\n return \"\";\n },\n enumerable: false,\n configurable: true\n });\n QuestionRankingModel.prototype.getNumberByIndex = function (index) {\n return this.isEmpty() ? \"\\u2013\" : index + 1 + \"\";\n };\n QuestionRankingModel.prototype.setSurveyImpl = function (value, isLight) {\n _super.prototype.setSurveyImpl.call(this, value, isLight);\n this.updateRankingChoices();\n };\n QuestionRankingModel.prototype.onSurveyValueChanged = function (newValue) {\n _super.prototype.onSurveyValueChanged.call(this, newValue);\n if (this.isLoadingFromJson)\n return;\n this.updateRankingChoices();\n };\n QuestionRankingModel.prototype.addToValueByVisibleChoices = function () {\n var newValue = this.value.slice();\n this.visibleChoices.forEach(function (choice) {\n if (newValue.indexOf(choice.value) === -1) {\n newValue.push(choice.value);\n }\n });\n this.value = newValue;\n };\n QuestionRankingModel.prototype.removeFromValueByVisibleChoices = function () {\n var _this = this;\n var newValue = this.value.slice();\n this.value.forEach(function (valueItem, index) {\n var isValueItemToRemove = true;\n _this.visibleChoices.forEach(function (choice) {\n if (choice.value === valueItem)\n isValueItemToRemove = false;\n });\n isValueItemToRemove && newValue.splice(index, 1);\n });\n this.value = newValue;\n };\n Object.defineProperty(QuestionRankingModel.prototype, \"rankingChoices\", {\n get: function () {\n return this.getPropertyValue(\"rankingChoices\", []);\n },\n enumerable: false,\n configurable: true\n });\n QuestionRankingModel.prototype.updateRankingChoices = function () {\n var _this = this;\n var newRankingChoices = [];\n // ranking question with only one choice doesn't make sense\n if (this.visibleChoices.length === 1) {\n this.setPropertyValue(\"rankingChoices\", newRankingChoices);\n return;\n }\n if (this.isEmpty()) {\n this.setPropertyValue(\"rankingChoices\", this.visibleChoices);\n return;\n }\n this.value.forEach(function (valueItem) {\n _this.visibleChoices.forEach(function (choice) {\n if (choice.value === valueItem)\n newRankingChoices.push(choice);\n });\n });\n this.setPropertyValue(\"rankingChoices\", newRankingChoices);\n };\n QuestionRankingModel.prototype.endLoadingFromJson = function () {\n _super.prototype.endLoadingFromJson.call(this);\n if (!this.fallbackToSortableJS) {\n this.dragDropRankingChoices = new _dragdrop_ranking_choices__WEBPACK_IMPORTED_MODULE_1__[\"DragDropRankingChoices\"](this.survey);\n }\n };\n //cross framework initialization\n QuestionRankingModel.prototype.afterRenderQuestionElement = function (el) {\n this.domNode = el;\n if (!!el && this.fallbackToSortableJS) {\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 QuestionRankingModel.prototype.initSortable = function (domNode) {\n if (!domNode)\n return;\n var self = this;\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_6__[\"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.isEmpty()) {\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.isEmpty())\n self.syncNumbers();\n self.setGhostText(evt.newIndex + 1);\n },\n });\n };\n Object.defineProperty(QuestionRankingModel.prototype, \"fallbackToSortableJS\", {\n get: function () {\n return this.getPropertyValue(\"fallbackToSortableJS\");\n },\n set: function (val) {\n this.setPropertyValue(\"fallbackToSortableJS\", val);\n },\n enumerable: false,\n configurable: true\n });\n QuestionRankingModel.prototype.getIconHoverCss = function () {\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]()\n .append(this.cssClasses.itemIcon)\n .append(this.cssClasses.itemIconHoverMod)\n .toString();\n };\n QuestionRankingModel.prototype.getIconFocusCss = function () {\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]()\n .append(this.cssClasses.itemIcon)\n .append(this.cssClasses.itemIconFocusMod)\n .toString();\n };\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])({ defaultValue: null })\n ], QuestionRankingModel.prototype, \"currentDropTarget\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"property\"])({ defaultValue: null })\n ], QuestionRankingModel.prototype, \"dropTargetNodeMove\", void 0);\n return QuestionRankingModel;\n}(_question_checkbox__WEBPACK_IMPORTED_MODULE_4__[\"QuestionCheckboxModel\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_2__[\"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 {\n name: \"fallbackToSortableJS\",\n default: false,\n visible: false,\n isSerializable: false,\n },\n], function () {\n return new QuestionRankingModel(\"\");\n}, \"checkbox\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_3__[\"QuestionFactory\"].Instance.registerQuestion(\"ranking\", function (name) {\n var q = new QuestionRankingModel(name);\n q.choices = _questionfactory__WEBPACK_IMPORTED_MODULE_3__[\"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\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.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 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 QuestionRatingModel.prototype.getItemClass = function (item) {\n var isSelected = this.value == item.value;\n var isDisabled = this.isReadOnly && !item.isEnabled;\n var allowHover = !isDisabled && !isSelected && !(!!this.survey && this.survey.isDesignMode);\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_6__[\"CssClassBuilder\"]()\n .append(this.cssClasses.item)\n .append(this.cssClasses.selected, this.value == item.value)\n .append(this.cssClasses.itemDisabled, this.isReadOnly)\n .append(this.cssClasses.itemHover, allowHover)\n .toString();\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 _surveyStrings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./surveyStrings */ \"./src/surveyStrings.ts\");\n/* harmony import */ var _questionfactory__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./questionfactory */ \"./src/questionfactory.ts\");\n/* harmony import */ var _question__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./question */ \"./src/question.ts\");\n/* harmony import */ var signature_pad__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! signature_pad */ \"./node_modules/signature_pad/dist/signature_pad.mjs\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.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\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 return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]()\n .append(_super.prototype.getCssRoot.call(this, cssClasses))\n .append(cssClasses.small, this.width.toString() === \"300\")\n .toString();\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_4__[\"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 _this.isDrawingValue = true;\n canvas.focus();\n };\n signaturePad.onEnd = function () {\n _this.isDrawingValue = false;\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 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 if (options.name === \"value\") {\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, \"width\", {\n /**\n * Use it to set the specific width for the signature pad.\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(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\");\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\");\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\");\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\");\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_1__[\"surveyLocalization\"].getString(\"clearCaption\");\n },\n enumerable: false,\n configurable: true\n });\n QuestionSignaturePadModel.prototype.needShowPlaceholder = function () {\n return !this.isDrawingValue && this.isEmpty();\n };\n Object.defineProperty(QuestionSignaturePadModel.prototype, \"placeHolderText\", {\n get: function () {\n return _surveyStrings__WEBPACK_IMPORTED_MODULE_1__[\"surveyLocalization\"].getString(\"signaturePlaceHolder\");\n },\n enumerable: false,\n configurable: true\n });\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: false })\n ], QuestionSignaturePadModel.prototype, \"isDrawingValue\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: \"\" })\n ], QuestionSignaturePadModel.prototype, \"dataFormat\", void 0);\n return QuestionSignaturePadModel;\n}(_question__WEBPACK_IMPORTED_MODULE_3__[\"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_2__[\"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 _localizablestring__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./localizablestring */ \"./src/localizablestring.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _validator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./validator */ \"./src/validator.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 _settings__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./settings */ \"./src/settings.ts\");\n/* harmony import */ var _question_textbase__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./question_textbase */ \"./src/question_textbase.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(\"minErrorText\", _this, true);\n _this.createLocalizableString(\"maxErrorText\", _this, true);\n _this.locDataListValue = new _localizablestring__WEBPACK_IMPORTED_MODULE_2__[\"LocalizableStrings\"](_this);\n _this.locDataListValue.onValueChanged = function (oldValue, newValue) {\n _this.propertyValueChanged(\"dataList\", oldValue, newValue);\n };\n _this.registerFunctionOnPropertiesValueChanged([\"min\", \"max\", \"inputType\", \"minValueExpression\", \"maxValueExpression\"], function () {\n _this.setRenderedMinMax();\n });\n _this.registerFunctionOnPropertiesValueChanged([\"inputType\", \"size\"], function () {\n _this.updateInputSize();\n _this.calcRenderedPlaceHolder();\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 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_4__[\"EmailValidator\"]());\n }\n return validators;\n };\n QuestionTextModel.prototype.isLayoutTypeSupported = function (layoutType) {\n return true;\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_5__[\"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_5__[\"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_6__[\"CustomError\"](this.getMinMaxErrorText(this.minErrorText, this.getCalculatedMinMax(this.renderedMin)), this));\n }\n if (this.isValueGreaterMax) {\n errors.push(new _error__WEBPACK_IMPORTED_MODULE_6__[\"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_7__[\"settings\"].minDate) {\n val = _settings__WEBPACK_IMPORTED_MODULE_7__[\"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_7__[\"settings\"].maxDate ? _settings__WEBPACK_IMPORTED_MODULE_7__[\"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.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, \"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.hasValue() ? 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_3__[\"Helpers\"].isNumber(newValue) ? parseFloat(newValue) : \"\";\n }\n return newValue;\n };\n QuestionTextModel.prototype.hasPlaceHolder = function () {\n return !this.isReadOnly && this.inputType !== \"range\";\n };\n QuestionTextModel.prototype.isReadOnlyRenderDiv = function () {\n return this.isReadOnly && _settings__WEBPACK_IMPORTED_MODULE_7__[\"settings\"].readOnlyTextRenderMode === \"div\";\n };\n Object.defineProperty(QuestionTextModel.prototype, \"inputStyle\", {\n get: function () {\n var style = {};\n if (!!this.inputWidth) {\n style.width = this.inputWidth;\n }\n return style;\n },\n enumerable: false,\n configurable: true\n });\n return QuestionTextModel;\n}(_question_textbase__WEBPACK_IMPORTED_MODULE_8__[\"QuestionTextBase\"]));\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}, \"textbase\");\n_questionfactory__WEBPACK_IMPORTED_MODULE_0__[\"QuestionFactory\"].Instance.registerQuestion(\"text\", function (name) {\n return new QuestionTextModel(name);\n});\n\n\n/***/ }),\n\n/***/ \"./src/question_textbase.ts\":\n/*!**********************************!*\\\n !*** ./src/question_textbase.ts ***!\n \\**********************************/\n/*! exports provided: QuestionTextBase */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"QuestionTextBase\", function() { return QuestionTextBase; });\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 _helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.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 Base Model for a comment and text questions\n */\nvar QuestionTextBase = /** @class */ (function (_super) {\n __extends(QuestionTextBase, _super);\n function QuestionTextBase(name) {\n var _this = _super.call(this, name) || this;\n _this.createLocalizableString(\"placeHolder\", _this);\n return _this;\n }\n QuestionTextBase.prototype.isTextValue = function () {\n return true;\n };\n Object.defineProperty(QuestionTextBase.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 QuestionTextBase.prototype.getMaxLength = function () {\n return _helpers__WEBPACK_IMPORTED_MODULE_2__[\"Helpers\"].getMaxLength(this.maxLength, this.survey ? this.survey.maxTextLength : -1);\n };\n Object.defineProperty(QuestionTextBase.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 this.calcRenderedPlaceHolder();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(QuestionTextBase.prototype, \"locPlaceHolder\", {\n get: function () {\n return this.getLocalizableString(\"placeHolder\");\n },\n enumerable: false,\n configurable: true\n });\n QuestionTextBase.prototype.getType = function () {\n return \"textbase\";\n };\n QuestionTextBase.prototype.isEmpty = function () {\n return _super.prototype.isEmpty.call(this) || this.value === \"\";\n };\n Object.defineProperty(QuestionTextBase.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(QuestionTextBase.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 Object.defineProperty(QuestionTextBase.prototype, \"renderedPlaceHolder\", {\n get: function () {\n return this.getPropertyValue(\"renderedPlaceHolder\");\n },\n enumerable: false,\n configurable: true\n });\n QuestionTextBase.prototype.setRenderedPlaceHolder = function (val) {\n this.setPropertyValue(\"renderedPlaceHolder\", val);\n };\n QuestionTextBase.prototype.onReadOnlyChanged = function () {\n _super.prototype.onReadOnlyChanged.call(this);\n this.calcRenderedPlaceHolder();\n };\n QuestionTextBase.prototype.onSurveyLoad = function () {\n this.calcRenderedPlaceHolder();\n _super.prototype.onSurveyLoad.call(this);\n };\n QuestionTextBase.prototype.localeChanged = function () {\n _super.prototype.localeChanged.call(this);\n this.calcRenderedPlaceHolder();\n };\n QuestionTextBase.prototype.calcRenderedPlaceHolder = function () {\n var res = this.placeHolder;\n if (!!res && !this.hasPlaceHolder()) {\n res = undefined;\n }\n this.setRenderedPlaceHolder(res);\n };\n QuestionTextBase.prototype.hasPlaceHolder = function () {\n return !this.isReadOnly;\n };\n QuestionTextBase.prototype.getControlClass = function () {\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_3__[\"CssClassBuilder\"]()\n .append(this.cssClasses.root)\n .append(this.cssClasses.onError, this.errors.length > 0)\n .append(this.cssClasses.controlDisabled, this.isReadOnly)\n .toString();\n };\n return QuestionTextBase;\n}(_question__WEBPACK_IMPORTED_MODULE_0__[\"Question\"]));\n\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"textbase\", [], function () {\n return new QuestionTextBase(\"\");\n}, \"question\");\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.prototype.clear = function () {\n this.renderersHash = {};\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 * Options for SurveyJS comparator. By default we trim strings and compare them as case insensitive. To change the behavior you can use following code:\n * settings.comparator.trimStrings = false; //\"abc \" will not equal to \"abc\". They are equal by default.\n * settings.comparator.caseSensitive = true; //\"abc \" will not equal to \"Abc\". They are equal by default.\n */\n comparator: {\n trimStrings: true,\n caseSensitive: false\n },\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 * Set it to true to serialize itemvalue instance always as object even if text property is empty\n * const item = new Survey.ItemValue(5);\n * item.toJSON(); //will return {value: 5}, instead of 5 by default.\n */\n itemValueAlwaysSerializeAsObject: false,\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 * Specifies how the input field of [Comment](https://surveyjs.io/Documentation/Library?id=questioncommentmodel) questions is rendered in the read-only mode.\n * Available values:\n * \"textarea\" (default) - A 'textarea' element is used to render a Comment question's input field.\n * \"div\" - A 'div' element is used to render a Comment question's input field.\n */\n readOnlyCommentRenderMode: \"textarea\",\n /**\n * Specifies how the input field of [Text](https://surveyjs.io/Documentation/Library?id=questiontextmodel) questions is rendered in the read-only mode.\n * Available values:\n * \"input\" (default) - An 'input' element is used to render a Text question's input field.\n * \"div\" - A 'div' element is used to render a Text question's input field.\n */\n readOnlyTextRenderMode: \"input\",\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 lazyRowsRenderingStartRow: 3,\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 * Specifies a list of custom icons.\n * Use this property to replace SurveyJS default icons (displayed in UI elements of SurveyJS Library or Creator) with your custom icons.\n * For every default icon to replace, add a key/value object with the default icon's name as a key and the name of your custom icon as a value.\n * For example: Survey.settings.customIcons[\"icon-redo\"] = \"my-own-redo-icon\"\n */\n customIcons: {},\n titleTags: {\n survey: \"h3\",\n page: \"h4\",\n panel: \"h4\",\n question: \"h5\",\n }\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 (themeName === \"defaultV2\") {\n _defaultCss_cssstandard__WEBPACK_IMPORTED_MODULE_0__[\"surveyCss\"].currentType = themeName;\n return;\n }\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; max-width: 50%\",\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; display: block; margin: 0 auto 10px auto; border: 3px solid; border-radius: 50%; box-sizing: content-box; cursor: pointer;\",\n \".sv_progress-buttons__list li:after\": \"width: 73%; height: 3px; content: ''; position: absolute; 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; font-weight: bold;\",\n \".sv_progress-buttons__list .sv_progress-buttons__page-description\": \"width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\",\n \".sv_progress-buttons__list li.sv_progress-buttons__list-element--nonclickable:before\": \"cursor: not-allowed;\",\n // ranking\n \".sv-ranking\": \"outline: none; user-select: none; touch-action: 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; box-sizing: content-box;\",\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 \".sv_main .sjs_sp_placeholder\": \"display: flex; align-items: center; justify-content: center; position: absolute; z-index: 0; user-select: none; pointer-events: none; width: 100%; height: 100%;\",\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; \",\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%; 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__content\": \"display: flex; flex-direction: row; align-items: center;\",\n \".sv_main .sv-action__content > *\": \"flex: 0 0 auto;\",\n \".sv_main .sv-action--hidden\": \"width: 0px; height: 0px; overflow: 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;\",\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; max-width: 100%;\",\n \".sv_main .sv-button-group__item-icon + .sv-button-group__item-caption\": \"margin-left: 8px\",\n \".sv_main .sv-button-group__item-caption\": \"display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\",\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; outline: none;\",\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; display: flex; flex-direction: column; max-height: 90vh; max-width: 90vw; box-sizing: border-box;\",\n \".sv-popup__scrolling-content\": \"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__header\": \"font-family: Open Sans; font-size: calc(3 * 8px); line-height: calc(4 * 8px); font-style: normal; font-weight: 700; margin-bottom: calc(2 * 8px); color: rgb(22, 22, 22)\",\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.sv-popup__button--apply\": \"background-color: #19b394; color: #fff;\",\n \".sv-popup__button.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:not(.sv-list__item--selected):hover\": \"background-color: #f3f3f3;\",\n \".sv-list__item--selected\": \"background-color: #19b394; color: #fff;\",\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 \".sv-list__input\": \"-webkit-appearance: none; -moz-appearance: none; appearance: none; display: block; box-sizing: border-box; width: 100%; height: calc(2em + 1px); padding-left: 1em; outline: none; font-size: 1em; border: 1px solid transparent;\",\n //eo list\n \".sv-skeleton-element\": \"min-height: 50px;\",\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%; width: 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 \"$progress-buttons-color\": \"#8dd9ca\",\n \"$progress-buttons-line-color\": \"#d4d4d4\"\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 \"$progress-buttons-color\": \"#f7b781\",\n \"$progress-buttons-line-color\": \"#d4d4d4\"\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 \"$progress-buttons-color\": \"#839ec9\",\n \"$progress-buttons-line-color\": \"#d4d4d4\"\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 \"$progress-buttons-color\": \"#c6bed4\",\n \"$progress-buttons-line-color\": \"#d4d4d4\"\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 \"$progress-buttons-color\": \"#747491\",\n \"$progress-buttons-line-color\": \"#d4d4d4\"\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 \"$progress-buttons-color\": \"#d1c9f5\",\n \"$progress-buttons-line-color\": \"#d4d4d4\"\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\": \"#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 \"$progress-buttons-color\": \"#acdcf2\",\n \"$progress-buttons-line-color\": \"#d4d4d4\"\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 \"$progress-buttons-color\": \"#8dd9ca\",\n \"$progress-buttons-line-color\": \"#d4d4d4\",\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 \"$progress-buttons-color\": \"#8dd6c7\",\n \"$progress-buttons-line-color\": \"#d4d4d4\",\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 \"$progress-buttons-color\": \"#8dd6c7\",\n \"$progress-buttons-line-color\": \"#d4d4d4\",\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_progress-buttons__list li:before\": \"border-color: $progress-buttons-color; background-color: $progress-buttons-color;\",\n \".sv_default_css .sv_progress-buttons__list li:after\": \"background-color: $progress-buttons-line-color;\",\n \".sv_default_css .sv_progress-buttons__list .sv_progress-buttons__page-title\": \" color: $text-color;\",\n \".sv_default_css .sv_progress-buttons__list .sv_progress-buttons__page-description\": \" color: $text-color;\",\n \".sv_default_css .sv_progress-buttons__list li.sv_progress-buttons__list-element--passed:before\": \"border-color: $main-color; background-color: $main-color;\",\n \".sv_default_css .sv_progress-buttons__list li.sv_progress-buttons__list-element--passed + li:after\": \"background-color: $progress-buttons-color\",\n \".sv_default_css .sv_progress-buttons__list li.sv_progress-buttons__list-element--current:before\": \"border-color: $main-color; background-color: white;\",\n \".sv_default_css .sv_progress-buttons__list li.sv_progress-buttons__list-element--passed.sv_progress-buttons__list-element--current:before\": \"border-color: $main-color; background-color: white;\",\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 //signature pad\n \".sv_main .sjs_sp_container\": \"border: 1px dashed $disable-color;\",\n \".sv_main .sjs_sp_placeholder\": \"color: $foreground-light;\",\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:hover\": \"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 //drag-drop\n \".sv_main .sv-matrixdynamic__drag-icon\": \"padding-top:14px\",\n \".sv_main .sv-matrixdynamic__drag-icon:after\": \"content: ' '; display: block; height: 6px; width: 20px; border: 1px solid $border-color; box-sizing: border-box; border-radius: 10px; cursor: move; margin-top: 12px;\",\n \".sv_main .sv-matrix__drag-drop-ghost-position-top, .sv_main .sv-matrix__drag-drop-ghost-position-bottom\": \"position: relative;\",\n \".sv_main .sv-matrix__drag-drop-ghost-position-top::after, .sv_main .sv-matrix__drag-drop-ghost-position-bottom::after\": \"content: ''; width: 100%; height: 4px; background-color: var(--primary, #19b394); position: absolute; left: 0;\",\n \".sv_main .sv-matrix__drag-drop-ghost-position-top::after\": \"top: 0;\",\n \".sv_main .sv-matrix__drag-drop-ghost-position-bottom::after\": \"bottom: 0;\",\n //eo drag-drop\n //list\n \".sv-list__input\": \"color: $text-input-color; border-color: $border-color; background-color: $inputs-background-color;\",\n \".sv-list__input::placeholder\": \"color: $foreground-light;\",\n \".sv-list__input:focus\": \"border-color: $main-color;\",\n \".sv-list__input:disabled\": \"color: $foreground-disabled;\",\n \".sv-list__input:disabled::placeholder\": \"color: $foreground-disabled;\",\n //eo list\n \".sv-skeleton-element\": \"background-color: $background-dim;\",\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_progress-buttons__list li:before\": \"border-color: $progress-buttons-color; background-color: $progress-buttons-color;\",\n \".sv_progress-buttons__list li:after\": \"background-color: $progress-buttons-line-color;\",\n \".sv_progress-buttons__list .sv_progress-buttons__page-title\": \" color: $text-color;\",\n \".sv_progress-buttons__list .sv_progress-buttons__page-description\": \" color: $text-color;\",\n \".sv_progress-buttons__list li.sv_progress-buttons__list-element--passed:before\": \"border-color: $main-color; background-color: $main-color;\",\n \".sv_progress-buttons__list li.sv_progress-buttons__list-element--passed + li:after\": \"background-color: $progress-buttons-color\",\n \".sv_progress-buttons__list li.sv_progress-buttons__list-element--current:before\": \"border-color: $main-color; background-color: white;\",\n \".sv_progress-buttons__list li.sv_progress-buttons__list-element--passed.sv_progress-buttons__list-element--current:before\": \"border-color: $main-color; background-color: white;\",\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 //signature pad\n \".sjs_sp_container\": \"border: 1px dashed $disable-color;\",\n \".sjs_sp_placeholder\": \"color: $foreground-light;\",\n //drag-drop\n \".sv-matrixdynamic__drag-icon\": \"padding-top:16px\",\n \".sv-matrixdynamic__drag-icon:after\": \"content: ' '; display: block; height: 6px; width: 20px; border: 1px solid $border-color; box-sizing: border-box; border-radius: 10px; cursor: move; margin-top: 12px;\",\n \".sv-matrix__drag-drop-ghost-position-top, .sv-matrix__drag-drop-ghost-position-bottom\": \"position: relative;\",\n \".sv-matrix__drag-drop-ghost-position-top::after, .sv-matrix__drag-drop-ghost-position-bottom::after\": \"content: ''; width: 100%; height: 4px; background-color: var(--primary, #19b394); position: absolute; left: 0;\",\n \".sv-matrix__drag-drop-ghost-position-top::after\": \"top: 0;\",\n \".sv-matrix__drag-drop-ghost-position-bottom::after\": \"bottom: 0;\",\n //eo drag-drop\n \".sv-skeleton-element\": \"background-color: $background-dim;\",\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 //progress buttons\n \".sv_main .sv_progress-buttons__list li:before\": \"border-color: $progress-buttons-color; background-color: $progress-buttons-color;\",\n \".sv_main .sv_progress-buttons__list li:after\": \"background-color: $progress-buttons-line-color;\",\n \".sv_main .sv_progress-buttons__list .sv_progress-buttons__page-title\": \" color: $text-color;\",\n \".sv_main .sv_progress-buttons__list .sv_progress-buttons__page-description\": \" color: $text-color;\",\n \".sv_main .sv_progress-buttons__list li.sv_progress-buttons__list-element--passed:before\": \"border-color: $main-color; background-color: $main-color;\",\n \".sv_main .sv_progress-buttons__list li.sv_progress-buttons__list-element--passed + li:after\": \"background-color: $progress-buttons-color\",\n \".sv_main .sv_progress-buttons__list li.sv_progress-buttons__list-element--current:before\": \"border-color: $main-color; background-color: white;\",\n \".sv_main .sv_progress-buttons__list li.sv_progress-buttons__list-element--passed.sv_progress-buttons__list-element--current:before\": \"border-color: $main-color; background-color: white;\",\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 //signature pad\n \".sv_main .sjs_sp_container\": \"border: 1px dashed $disable-color;\",\n \".sv_main .sjs_sp_placeholder\": \"color: $foreground-light;\",\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 \".sv-skeleton-element\": \"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 //progress buttons\n \".sv_main.sv_bootstrapmaterial_css .sv_progress-buttons__list li:before\": \"border-color: $progress-buttons-color; background-color: $progress-buttons-color;\",\n \".sv_main.sv_bootstrapmaterial_css .sv_progress-buttons__list li:after\": \"background-color: $progress-buttons-line-color;\",\n \".sv_main.sv_bootstrapmaterial_css .sv_progress-buttons__list .sv_progress-buttons__page-title\": \" color: $text-color;\",\n \".sv_main.sv_bootstrapmaterial_css .sv_progress-buttons__list .sv_progress-buttons__page-description\": \" color: $text-color;\",\n \".sv_main.sv_bootstrapmaterial_css .sv_progress-buttons__list li.sv_progress-buttons__list-element--passed:before\": \"border-color: $main-color; background-color: $main-color;\",\n \".sv_main.sv_bootstrapmaterial_css .sv_progress-buttons__list li.sv_progress-buttons__list-element--passed + li:after\": \"background-color: $progress-buttons-color\",\n \".sv_main.sv_bootstrapmaterial_css .sv_progress-buttons__list li.sv_progress-buttons__list-element--current:before\": \"border-color: $main-color; background-color: white;\",\n \".sv_main.sv_bootstrapmaterial_css .sv_progress-buttons__list li.sv_progress-buttons__list-element--passed.sv_progress-buttons__list-element--current:before\": \"border-color: $main-color; background-color: white;\",\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 //signature pad\n \".sv_main .sjs_sp_container\": \"border: 1px dashed $disable-color;\",\n \".sv_main .sjs_sp_placeholder\": \"color: $foreground-light;\",\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 \".sv-skeleton-element\": \"background-color: $background-dim;\",\n };\n StylesManager.Enabled = true;\n return StylesManager;\n}());\n\n\n\n/***/ }),\n\n/***/ \"./src/survey-element.ts\":\n/*!*******************************!*\\\n !*** ./src/survey-element.ts ***!\n \\*******************************/\n/*! exports provided: SurveyElementCore, DragTypeOverMeEnum, SurveyElement */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyElementCore\", function() { return SurveyElementCore; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DragTypeOverMeEnum\", function() { return DragTypeOverMeEnum; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyElement\", function() { return SurveyElement; });\n/* harmony import */ var _jsonobject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsonobject */ \"./src/jsonobject.ts\");\n/* harmony import */ var _rendererFactory__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rendererFactory */ \"./src/rendererFactory.ts\");\n/* harmony import */ var _base__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./base */ \"./src/base.ts\");\n/* harmony import */ var _actions_action__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./actions/action */ \"./src/actions/action.ts\");\n/* harmony import */ var _actions_adaptive_container__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./actions/adaptive-container */ \"./src/actions/adaptive-container.ts\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./helpers */ \"./src/helpers.ts\");\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_7__ = __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 __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 * Base class of SurveyJS Elements and Survey.\n */\nvar SurveyElementCore = /** @class */ (function (_super) {\n __extends(SurveyElementCore, _super);\n function SurveyElementCore() {\n var _this = _super.call(this) || this;\n _this.createLocTitleProperty();\n _this.createLocalizableString(\"description\", _this, true);\n return _this;\n }\n SurveyElementCore.prototype.createLocTitleProperty = function () {\n return this.createLocalizableString(\"title\", this, true);\n };\n Object.defineProperty(SurveyElementCore.prototype, \"title\", {\n /**\n * Question, Panel, Page and Survey title. If page and panel is empty then they are not rendered.\n * Question renders question name if the title is empty. Use survey questionTitleTemplate property to change the title question rendering.\n * @see SurveyModel.questionTitleTemplate\n */\n get: function () {\n return this.getLocalizableStringText(\"title\", this.getDefaultTitleValue());\n },\n set: function (val) {\n this.setLocalizableStringText(\"title\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElementCore.prototype, \"locTitle\", {\n get: function () {\n return this.getLocalizableString(\"title\");\n },\n enumerable: false,\n configurable: true\n });\n SurveyElementCore.prototype.getDefaultTitleValue = function () { return undefined; };\n Object.defineProperty(SurveyElementCore.prototype, \"description\", {\n /**\n * Question, Panel and Page description. It renders under element title by using smaller font. Unlike the question title, description can be empty.\n * Please note, this property is hidden for questions without input, for example html question.\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(SurveyElementCore.prototype, \"locDescription\", {\n get: function () {\n return this.getLocalizableString(\"description\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElementCore.prototype, \"titleTagName\", {\n get: function () {\n var titleTagName = this.getDefaultTitleTagName();\n var survey = this.getSurvey();\n return !!survey ? survey.getElementTitleTagName(this, titleTagName) : titleTagName;\n },\n enumerable: false,\n configurable: true\n });\n SurveyElementCore.prototype.getDefaultTitleTagName = function () {\n return _settings__WEBPACK_IMPORTED_MODULE_7__[\"settings\"].titleTags[this.getType()];\n };\n Object.defineProperty(SurveyElementCore.prototype, \"hasTitle\", {\n get: function () { return this.title.length > 0; },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElementCore.prototype, \"hasTitleActions\", {\n get: function () { return false; },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElementCore.prototype, \"hasTitleEvents\", {\n get: function () {\n return this.hasTitleActions;\n },\n enumerable: false,\n configurable: true\n });\n SurveyElementCore.prototype.getTitleToolbar = function () { return null; };\n SurveyElementCore.prototype.getTitleOwner = function () { return undefined; };\n Object.defineProperty(SurveyElementCore.prototype, \"isTitleOwner\", {\n get: function () { return !!this.getTitleOwner(); },\n enumerable: false,\n configurable: true\n });\n SurveyElementCore.prototype.toggleState = function () { return undefined; };\n Object.defineProperty(SurveyElementCore.prototype, \"cssClasses\", {\n get: function () { return {}; },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElementCore.prototype, \"cssTitle\", {\n get: function () { return \"\"; },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElementCore.prototype, \"ariaTitleId\", {\n get: function () { return undefined; },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElementCore.prototype, \"titleTabIndex\", {\n get: function () { return undefined; },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElementCore.prototype, \"titleAriaExpanded\", {\n get: function () { return undefined; },\n enumerable: false,\n configurable: true\n });\n return SurveyElementCore;\n}(_base__WEBPACK_IMPORTED_MODULE_2__[\"Base\"]));\n\nvar DragTypeOverMeEnum;\n(function (DragTypeOverMeEnum) {\n DragTypeOverMeEnum[DragTypeOverMeEnum[\"InsideEmptyPanel\"] = 1] = \"InsideEmptyPanel\";\n DragTypeOverMeEnum[DragTypeOverMeEnum[\"MultilineRight\"] = 2] = \"MultilineRight\";\n DragTypeOverMeEnum[DragTypeOverMeEnum[\"MultilineLeft\"] = 3] = \"MultilineLeft\";\n})(DragTypeOverMeEnum || (DragTypeOverMeEnum = {}));\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.selectedElementInDesignValue = _this;\n _this.disableDesignActions = SurveyElement.CreateDisabledDesignElements;\n _this.isContentElement = false;\n _this.isEditableTemplateElement = false;\n _this.isInteractiveDesignElement = true;\n _this.name = name;\n _this.createNewArray(\"errors\");\n _this.createNewArray(\"titleActions\");\n _this.registerFunctionOnPropertyValueChanged(\"isReadOnly\", function () {\n _this.onReadOnlyChanged();\n });\n _this.registerFunctionOnPropertyValueChanged(\"errors\", function () {\n _this.updateVisibleErrors();\n });\n return _this;\n }\n SurveyElement.getProgressInfoByElements = function (children, isRequired) {\n var info = _base__WEBPACK_IMPORTED_MODULE_2__[\"Base\"].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 res = SurveyElement.focusElementCore(elementId);\n if (!res) {\n setTimeout(function () {\n SurveyElement.focusElementCore(elementId);\n }, 10);\n }\n return res;\n };\n SurveyElement.focusElementCore = function (elementId) {\n var el = document.getElementById(elementId);\n if (el) {\n el.focus();\n return true;\n }\n return false;\n };\n SurveyElement.prototype.onPropertyValueChanged = function (name, oldValue, newValue) {\n _super.prototype.onPropertyValueChanged.call(this, name, oldValue, newValue);\n if (name === \"state\") {\n if (oldValue === \"default\" || newValue === \"default\") {\n this.updateTitleActions();\n }\n else {\n this.updateExpandAction();\n }\n if (this.stateChangedCallback)\n this.stateChangedCallback();\n }\n };\n SurveyElement.prototype.getSkeletonComponentNameCore = function () {\n if (this.survey) {\n return this.survey.getSkeletonComponentName(this);\n }\n return \"\";\n };\n Object.defineProperty(SurveyElement.prototype, \"skeletonComponentName\", {\n get: function () {\n return this.getSkeletonComponentNameCore();\n },\n enumerable: false,\n configurable: true\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 true;\n }\n if (this.isExpanded) {\n this.collapse();\n return false;\n }\n return true;\n };\n Object.defineProperty(SurveyElement.prototype, \"hasStateButton\", {\n get: function () {\n return this.isExpanded || this.isCollapsed;\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.getTitleToolbar = function () {\n if (!this.titleToolbarValue) {\n this.titleToolbarValue = new _actions_adaptive_container__WEBPACK_IMPORTED_MODULE_4__[\"AdaptiveActionContainer\"]();\n this.titleToolbarValue.setItems(this.getTitleActions());\n }\n return this.titleToolbarValue;\n };\n SurveyElement.prototype.updateExpandAction = function () {\n if (!!this.expandAction) {\n this.expandAction.visible = this.isExpanded || this.isCollapsed;\n this.expandAction.innerCss = new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_5__[\"CssClassBuilder\"]()\n .append(\"sv-expand-action\").append(\"sv-expand-action--expanded\", this.isExpanded).toString();\n }\n };\n Object.defineProperty(SurveyElement.prototype, \"titleActions\", {\n get: function () {\n return this.getPropertyValue(\"titleActions\");\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.getTitleActions = function () {\n if (!this.isTitleActionRequested) {\n this.updateTitleActions();\n this.isTitleActionRequested = true;\n }\n return this.titleActions;\n };\n SurveyElement.prototype.updateTitleActions = function () {\n var _this = this;\n var actions = [];\n if (this.hasStateButton && !this.expandAction) {\n this.expandAction = new _actions_action__WEBPACK_IMPORTED_MODULE_3__[\"Action\"]({\n id: \"expand-collapse-action\",\n title: \"\",\n disableTabStop: true,\n action: function () {\n _this.toggleState();\n },\n });\n }\n if (!!this.expandAction) {\n actions.push(this.expandAction);\n }\n if (!!this.survey) {\n actions = this.survey.getUpdatedElementTitleActions(this, actions);\n }\n this.updateExpandAction();\n this.setPropertyValue(\"titleActions\", actions);\n };\n Object.defineProperty(SurveyElement.prototype, \"hasTitleActions\", {\n get: function () {\n return this.getTitleActions().length > 0;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"hasTitleEvents\", {\n get: function () {\n return this.hasTitleActions || this.state !== \"default\";\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.getTitleComponentName = function () {\n var componentName = _rendererFactory__WEBPACK_IMPORTED_MODULE_1__[\"RendererFactory\"].Instance.getRenderer(\"element\", \"title-actions\");\n if (componentName == \"default\") {\n return \"sv-default-title\";\n }\n return componentName;\n };\n Object.defineProperty(SurveyElement.prototype, \"titleTabIndex\", {\n get: function () {\n return !this.isPage && this.state !== \"default\" ? 0 : undefined;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"titleAriaExpanded\", {\n get: function () {\n if (this.isPage || this.state === \"default\")\n return undefined;\n return this.state === \"expanded\";\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.setSurveyImpl = function (value, isLight) {\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 Object.defineProperty(SurveyElement.prototype, \"css\", {\n get: function () {\n return !!this.survey ? this.survey.getCss() : {};\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"cssClasses\", {\n /**\n * Returns all css classes that used for rendering the question, panel or page.\n * You can use survey.onUpdateQuestionCssClasses event to override css classes for a question, survey.onUpdatePanelCssClasses event for a panel and survey.onUpdatePageCssClasses for a page.\n * @see SurveyModel.updateQuestionCssClasses\n * @see SurveyModel.updatePanelCssClasses\n * @see SurveyModel.updatePageCssClasses\n */\n get: function () {\n if (!this.survey)\n return this.calcCssClasses(this.css);\n if (!this.cssClassesValue) {\n this.cssClassesValue = this.calcCssClasses(this.css);\n this.updateElementCssCore(this.cssClassesValue);\n }\n return this.cssClassesValue;\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.calcCssClasses = function (css) { return undefined; };\n SurveyElement.prototype.updateElementCssCore = function (cssClasses) { };\n Object.defineProperty(SurveyElement.prototype, \"cssError\", {\n get: function () { return \"\"; },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.updateElementCss = function (reNew) {\n this.cssClassesValue = undefined;\n };\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 !this.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 /**\n * Returns true if it is a page.\n */\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"isPanel\", {\n /**\n * Returns true if it is a panel.\n */\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyElement.prototype, \"isQuestion\", {\n /**\n * Returns true if it is a question.\n */\n get: function () {\n return false;\n },\n enumerable: false,\n configurable: true\n });\n SurveyElement.prototype.delete = function () { };\n /**\n * Returns the current survey locale\n * @see SurveyModel.locale\n */\n SurveyElement.prototype.getLocale = function () {\n return this.survey\n ? this.survey.getLocale()\n : this.locOwner\n ? this.locOwner.getLocale()\n : \"\";\n };\n SurveyElement.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 SurveyElement.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 SurveyElement.prototype.getRendererContext = function (locStr) {\n return this.survey && typeof this.survey.getRendererContextForString === \"function\"\n ? this.survey.getRendererContextForString(this, locStr)\n : this.locOwner && typeof this.locOwner.getRendererContext === \"function\"\n ? this.locOwner.getRendererContext(locStr)\n : locStr;\n };\n SurveyElement.prototype.getProcessedText = function (text) {\n if (this.isLoadingFromJson)\n return text;\n if (this.textProcessor)\n return this.textProcessor.processText(text, this.getUseDisplayValuesInTitle());\n if (this.locOwner)\n return this.locOwner.getProcessedText(text);\n return text;\n };\n SurveyElement.prototype.getUseDisplayValuesInTitle = function () { return true; };\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_6__[\"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, newPage) {\n var oldPage = this.getPage(parent);\n //fix for the creator v1: https://github.com/surveyjs/survey-creator/issues/1744\n if (typeof newPage === \"string\") {\n var survey = this.getSurvey();\n survey.pages.forEach(function (page) {\n if (newPage === page.name)\n newPage = page;\n });\n }\n if (oldPage === newPage)\n return;\n if (parent)\n parent.removeElement(this);\n if (newPage) {\n newPage.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_0__[\"property\"])({ defaultValue: null })\n ], SurveyElement.prototype, \"dragTypeOverMe\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])()\n ], SurveyElement.prototype, \"cssClassesValue\", void 0);\n __decorate([\n Object(_jsonobject__WEBPACK_IMPORTED_MODULE_0__[\"property\"])({ defaultValue: false })\n ], SurveyElement.prototype, \"hasVisibleErrors\", void 0);\n return SurveyElement;\n}(SurveyElementCore));\n\n\n\n/***/ }),\n\n/***/ \"./src/survey-error.ts\":\n/*!*****************************!*\\\n !*** ./src/survey-error.ts ***!\n \\*****************************/\n/*! exports provided: SurveyError */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyError\", function() { return SurveyError; });\n/* harmony import */ var _localizablestring__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./localizablestring */ \"./src/localizablestring.ts\");\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\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 _survey_element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./survey-element */ \"./src/survey-element.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\");\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.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/**\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 //#endregion\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 //#region Event declarations\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 before the survey is going to preview mode, state equals to `preview`. It happens when a user click on \"Preview\" button. It shows when \"showPreviewBeforeComplete\" proeprty equals to \"showAllQuestions\" or \"showAnsweredQuestions\".\n * You can prevent showing it by setting allowShowPreview to `false`.\n *
`sender` - the survey object that fires the event.\n *
`options.allowShowPreview` - Specifies whether a user can see a preview. Set this property to `false` to prevent from showing the preview. The default value is `true`.\n * @see showPreviewBeforeComplete\n */\n _this.onShowingPreview = _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 setVariable function is called. It can be called on changing a calculated value.\n *
`sender` - the survey object that fires the event.\n *
`options.name` - the variable name that has been changed.\n *
`options.value` - a new value.\n * @see setVariable\n * @see onValueChanged\n * @see calculatedValues\n */\n _this.onVariableChanged = _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 element title tag name that renders by default.\n *
`sender` - the survey object that fires the event.\n *
`options.element` - an element (question, panel, page and survey) that SurveyJS is going to render.\n *
`options.tagName` - an element title tagName that are used to render a title. You can change it from the default value.\n * @see showQuestionNumbers\n * @see requiredText\n */\n _this.onGetTitleTagName = _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 before rendering a choice item in radiogroup, checkbox or dropdown questions. Use it to override the default choice item css.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - a question where choice item is rendered.\n *
`options.item` - a choice item of ItemValue type. You can get value or text choice properties as options.item.value or options.choice.text\n *
`options.css` - a string with css classes divided by space. You can change it.\n */\n _this.onUpdateChoiceItemCss = _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 occurs when an element within a question gets focus.\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) whose child element gets focus.\n * @see onFocusInPanel\n */\n _this.onFocusInQuestion = _this.addEvent();\n /**\n * The event occurs when an element within a panel gets focus.\n *
`sender` - A [survey](https://surveyjs.io/Documentation/Library?id=surveymodel) object that fires the event.\n *
`options.panel` - A [panel](https://surveyjs.io/Documentation/Library?id=PanelModelBase) whose child element gets focus.\n * @see onFocusInQuestion\n */\n _this.onFocusInPanel = _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 before creating cell question in the matrix. You can change the cell question type by setting different options.cellType.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - the matrix question.\n *
`options.cellType` - the cell question type. You can change it.\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 onMatrixCellCreated\n * @see QuestionMatrixDynamicModel\n * @see QuestionMatrixDropdownModel\n */\n _this.onMatrixCellCreating = _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 onMatrixCellCreating\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.titleActions` - A list of actions ([IAction](https://surveyjs.io/Documentation/Library?id=IAction) objects) associated with the processed question.\n * @see IAction\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.titleActions` - A list of actions ([IAction](https://surveyjs.io/Documentation/Library?id=IAction) objects) associated with the processed panel.\n * @see IAction\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.titleActions` - A list of actions ([IAction](https://surveyjs.io/Documentation/Library?id=IAction) objects) associated with the processed page.\n * @see IAction\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 ([IAction](https://surveyjs.io/Documentation/Library?id=IAction) objects) associated with the processed matrix question and row.\n * @see IAction\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 event is fired before expression question convert it's value into display value for rendering.\n *
`sender` - the survey object that fires the event.\n *
`options.question` - The expression question.\n *
`options.value` - The question value.\n *
`options.displayValue` - the display value that you can change before rendering.\n */\n _this.onGetExpressionDisplayValue = _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 //#endregion\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 _this.skeletonComponentName = \"sv-skeleton\";\n if (typeof document !== \"undefined\") {\n SurveyModel.stylesManager = new _stylesmanager__WEBPACK_IMPORTED_MODULE_11__[\"StylesManager\"]();\n }\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, false, true);\n _this.createLocalizableString(\"pagePrevText\", _this, false, true);\n _this.createLocalizableString(\"pageNextText\", _this, false, true);\n _this.createLocalizableString(\"completeText\", _this, false, true);\n _this.createLocalizableString(\"previewText\", _this, false, true);\n _this.createLocalizableString(\"editText\", _this, false, true);\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.onGetQuestionTitle.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 this.updateIsFirstLastPageState();\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, \"cssTitle\", {\n get: function () {\n return this.css.title;\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 return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_16__[\"CssClassBuilder\"]().append(this.css.body)\n .append(this.css.completedPage).toString();\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.getNavigationCss = function (main, btn) {\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_16__[\"CssClassBuilder\"]().append(main)\n .append(btn).toString();\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 SurveyModel.prototype.updateLazyRenderingRowsOnRemovingElements = function () {\n if (!this.isLazyRendering)\n return;\n var page = this.currentPage;\n if (!!page) {\n Object(_utils_utils__WEBPACK_IMPORTED_MODULE_15__[\"scrollElementByChildId\"])(page.id);\n }\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\");\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\");\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\");\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\");\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\");\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\");\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\");\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\");\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\");\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, \"autoGrowComment\", {\n /**\n * Specifies whether the text area of [comment](https://surveyjs.io/Documentation/Library?id=questioncommentmodel) questions/elements automatically expands its height to avoid the vertical scrollbar and to display the entire multi-line contents entered by respondents.\n * Default value is false.\n * @see QuestionCommentModel.autoGrow\n */\n get: function () {\n return this.getPropertyValue(\"autoGrowComment\");\n },\n set: function (val) {\n this.setPropertyValue(\"autoGrowComment\", 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.getRendererContext = function (locStr) {\n return this.getRendererContextForString(this, locStr);\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.getRendererContextForString = function (element, locStr) {\n return locStr;\n };\n SurveyModel.prototype.getExpressionDisplayValue = function (question, value, displayValue) {\n var options = {\n question: question,\n value: value,\n displayValue: displayValue,\n };\n this.onGetExpressionDisplayValue.fire(this, options);\n return options.displayValue;\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, \"logo\", {\n //#region Title/Header options\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 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 Object(_utils_utils__WEBPACK_IMPORTED_MODULE_15__[\"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 Object(_utils_utils__WEBPACK_IMPORTED_MODULE_15__[\"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 if (this.isDesignMode)\n return false;\n return (this.renderedHasLogo &&\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 if (this.isDesignMode)\n return this.renderedHasLogo;\n return (this.renderedHasLogo &&\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 new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_16__[\"CssClassBuilder\"]().append(this.css.logo)\n .append(logoClasses[this.logoPosition]).toString();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"renderedHasTitle\", {\n get: function () {\n if (this.isDesignMode)\n return this.isPropertyVisible(\"title\");\n return !this.locTitle.isEmpty && this.showTitle;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"hasTitle\", {\n get: function () {\n return this.renderedHasTitle;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"renderedHasLogo\", {\n get: function () {\n if (this.isDesignMode)\n return this.isPropertyVisible(\"logo\");\n return this.hasLogo;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"renderedHasHeader\", {\n get: function () {\n return this.renderedHasTitle || this.renderedHasLogo;\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 SurveyModel.prototype.isLogoImageChoosen = function () {\n return this.locLogo.renderedHtml;\n };\n Object.defineProperty(SurveyModel.prototype, \"titleMaxWidth\", {\n get: function () {\n if (!this.isMobile &&\n !this.isValueEmpty(this.isLogoImageChoosen()) &&\n !_settings__WEBPACK_IMPORTED_MODULE_14__[\"settings\"].supportCreatorV2) {\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\");\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\");\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\");\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\");\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\");\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\");\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 SurveyModel.prototype.getElementTitleTagName = function (element, tagName) {\n if (this.onGetTitleTagName.isEmpty)\n return tagName;\n var options = { element: element, tagName: tagName };\n this.onGetTitleTagName.fire(this, options);\n return options.tagName;\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, _this.editingObj[options.name], 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.isPageInVisibleList(this.pages[i])) {\n result.push(this.pages[i]);\n }\n }\n return result;\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.isPageInVisibleList = function (page) {\n return this.isDesignMode || page.isVisible && !page.isStarted;\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 if (this.currentPageValue != null) {\n if (!this.isPageInVisibleList(this.currentPageValue) || this.pages.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 && !!this.firstVisiblePage) {\n this.currentPage = this.firstVisiblePage;\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 && !this.isDesignMode\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 if (this.isFocusingQuestion)\n return;\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 && !this.isFocusingQuestion) {\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 visPages = this.visiblePages;\n var index = visPages.indexOf(this.currentPage) + 1;\n return Math.ceil((index * 100) / visPages.length);\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 var isLast = this.isLastPage;\n var canEdit = this.isEditMode;\n var state = this.state;\n var showPreview = this.isShowPreviewBeforeComplete;\n return canEdit && (state === \"running\" && isLast && !showPreview || 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 var _loop_1 = function () {\n if (questions[i].isRunningValidators) {\n var q_1 = questions[i];\n q_1.onCompletedAsyncValidators = function (hasErrors) {\n _this.onCompletedAsyncQuestionValidators(q_1, func, hasErrors);\n };\n this_1.asyncValidationQuesitons.push(questions[i]);\n }\n };\n var this_1 = this;\n for (var i = 0; i < questions.length; i++) {\n _loop_1();\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 (question, func, hasErrors) {\n if (hasErrors) {\n this.clearAsyncValidationQuesitons();\n func(true);\n if (this.focusOnFirstError && !!question && !!question.page && question.page === this.currentPage) {\n var questions = this.currentPage.questions;\n for (var i_1 = 0; i_1 < questions.length; i_1++) {\n if (questions[i_1] !== question && questions[i_1].errors.length > 0)\n return;\n }\n question.focus(true);\n }\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 || this.isStartedState)\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 return true;\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 var options = { allowShowPreview: true };\n this.onShowingPreview.fire(this, options);\n this.isShowingPreview = options.allowShowPreview;\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 return this.doComplete();\n }\n this.doNextPage();\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\");\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\");\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].setSurveyImpl(this, true);\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 return this.getPropertyValue(\"isFirstPage\");\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 return this.getPropertyValue(\"isLastPage\");\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"isShowPrevButton\", {\n get: function () {\n var isFirst = this.isFirstPage;\n var showBtn = this.showPrevButton;\n var isRun = this.state === \"running\";\n if (isFirst || !showBtn || !isRun)\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, \"isShowNextButton\", {\n get: function () {\n var isLast = this.isLastPage;\n var isRun = this.state === \"running\";\n return !isLast && isRun;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"firstVisiblePage\", {\n get: function () {\n var pages = this.pages;\n for (var i = 0; i < pages.length; i++) {\n if (this.isPageInVisibleList(pages[i]))\n return pages[i];\n }\n return null;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"lastVisiblePage\", {\n get: function () {\n var pages = this.pages;\n for (var i = pages.length - 1; i >= 0; i--) {\n if (this.isPageInVisibleList(pages[i]))\n return pages[i];\n }\n return null;\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.updateIsFirstLastPageState = function () {\n var curPage = this.currentPageValue;\n if (!curPage)\n return;\n this.setPropertyValue(\"isFirstPage\", curPage === this.firstVisiblePage);\n this.setPropertyValue(\"isLastPage\", curPage === this.lastVisiblePage);\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 * The function can return false, if you set options.allowComplete to false in onCompleting event. Otherwise it returns true.\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 onCompleting\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 this.isCompleted = false;\n return false;\n }\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 return true;\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 this.updateVisibleIndexes();\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 _survey_element__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 = 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.updateChoiceItemCss = function (question, options) {\n options.question = question;\n this.onUpdateChoiceItemCss.fire(this, options);\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.whenQuestionFocusIn = function (question) {\n this.onFocusInQuestion.fire(this, {\n question: question\n });\n };\n SurveyModel.prototype.whenPanelFocusIn = function (panel) {\n this.onFocusInPanel.fire(this, {\n panel: panel\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.matrixCellCreating = function (question, options) {\n options.question = question;\n this.onMatrixCellCreating.fire(this, options);\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.elementContentVisibilityChanged = function (element) {\n if (this.currentPageValue) {\n this.currentPageValue.ensureRowsVisibility();\n }\n this.onElementContentVisibilityChanged.fire(this, { element: element });\n };\n SurveyModel.prototype.getUpdatedElementTitleActions = function (element, titleActions) {\n if (element.isPage)\n return this.getUpdatedPageTitleActions(element, titleActions);\n if (element.isPanel)\n return this.getUpdatedPanelTitleActions(element, titleActions);\n return this.getUpdatedQuestionTitleActions(element, titleActions);\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 _survey_element__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.loadedChoicesFromServer = function (question) {\n this.locStrsChanged();\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 || this.isDisplayMode)\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 this.updateIsFirstLastPageState();\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 this.onVariableChanged.fire(this, { name: name, value: 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.isLoadingFromJson) {\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 if (page === this.currentPageValue) {\n this.currentPageValue = this.currentPage;\n }\n this.updateVisibleIndexes();\n this.updateProgressText();\n this.updateLazyRenderingRowsOnRemovingElements();\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 if (this.isShowPreviewBeforeComplete) {\n this.showPreview();\n }\n else {\n this.completeLastPage();\n }\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 res = this.getValue(name + this.commentPrefix);\n return res || \"\";\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 (this.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 || page === 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 if (!this.currentPageValue) {\n this.currentPageValue = this.currentPage;\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 this.updateLazyRenderingRowsOnRemovingElements();\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 this.updateLazyRenderingRowsOnRemovingElements();\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\");\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\");\n },\n set: function (val) {\n this.setPropertyValue(\"showTimerPanelMode\", val);\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SurveyModel.prototype, \"widthMode\", {\n /**\n * Gets or sets a value that specifies how the survey width is calculated.\n *\n * The available options:\n *\n * - `static` - A survey has a fixed width that mostly depends upon the applied theme. Resizing a browser window does not affect the survey width.\n * - `responsive` - A survey takes all available horizontal space. A survey stretches or shrinks horizonally according to the screen size.\n * - `auto` - Depends on the question type and corresponds to the static or responsive mode.\n */\n // `custom/precise` - The survey width is specified by the width property. // in-future\n get: function () {\n return this.getPropertyValue(\"widthMode\");\n },\n set: function (val) {\n this.setPropertyValue(\"widthMode\", val);\n },\n enumerable: false,\n configurable: true\n });\n SurveyModel.prototype.calculateWidthMode = function () {\n if (this.widthMode == \"auto\") {\n var isResponsive_1 = false;\n this.pages.forEach(function (page) {\n if (page.needResponsiveWidth())\n isResponsive_1 = true;\n });\n return isResponsive_1 ? \"responsive\" : \"static\";\n }\n return this.widthMode;\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.isFocusingQuestion = true;\n this.currentPage = question.page;\n question.focus();\n this.isFocusingQuestion = false;\n return true;\n };\n SurveyModel.prototype.getElementWrapperComponentName = function (element, reason) {\n if (reason === \"logo-image\") {\n return \"sv-logo-image\";\n }\n return SurveyModel.TemplateRendererComponentName;\n };\n SurveyModel.prototype.getRowWrapperComponentName = function (row) {\n return SurveyModel.TemplateRendererComponentName;\n };\n SurveyModel.prototype.getElementWrapperComponentData = function (element, reason) {\n return element;\n };\n SurveyModel.prototype.getRowWrapperComponentData = function (row) {\n return row;\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 SurveyModel.prototype.getSkeletonComponentName = function (element) {\n return this.skeletonComponentName;\n };\n /**\n * Use this method to dispose survey model properly.\n */\n SurveyModel.prototype.dispose = function () {\n this.currentPage = null;\n _super.prototype.dispose.call(this);\n this.editingObj = null;\n if (!this.pages)\n return;\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 };\n SurveyModel.TemplateRendererComponentName = \"sv-template-renderer\";\n SurveyModel.stylesManager = null;\n SurveyModel.platform = \"unknown\";\n return SurveyModel;\n}(_survey_element__WEBPACK_IMPORTED_MODULE_2__[\"SurveyElementCore\"]));\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 obj.pages.splice(0, obj.pages.length);\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: \"autoGrowComment:boolean\", default: false },\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 name: \"widthMode\",\n default: \"auto\",\n choices: [\"auto\", \"static\", \"responsive\"],\n }\n]);\n\n\n/***/ }),\n\n/***/ \"./src/surveyProgress.ts\":\n/*!*******************************!*\\\n !*** ./src/surveyProgress.ts ***!\n \\*******************************/\n/*! exports provided: SurveyProgressModel */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SurveyProgressModel\", function() { return SurveyProgressModel; });\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n\nvar SurveyProgressModel = /** @class */ (function () {\n function SurveyProgressModel() {\n }\n SurveyProgressModel.getProgressTextInBarCss = function (css) {\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_0__[\"CssClassBuilder\"]()\n .append(css.progressText)\n .append(css.progressTextInBar)\n .toString();\n };\n SurveyProgressModel.getProgressTextUnderBarCss = function (css) {\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_0__[\"CssClassBuilder\"]()\n .append(css.progressText)\n .append(css.progressTextUnderBar)\n .toString();\n };\n return SurveyProgressModel;\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; });\n/* harmony import */ var _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/cssClassBuilder */ \"./src/utils/cssClassBuilder.ts\");\n\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 return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_0__[\"CssClassBuilder\"]()\n .append(this.survey.css.progressButtonsListElementPassed, this.survey.visiblePages[index].passed)\n .append(this.survey.css.progressButtonsListElementCurrent, this.survey.currentPageNo === index)\n .append(this.survey.css.progressButtonsListElementNonClickable, !this.isListElementClickable(index))\n .toString();\n };\n SurveyProgressButtonsModel.prototype.getScrollButtonCss = function (hasScroller, isLeftScroll) {\n return new _utils_cssClassBuilder__WEBPACK_IMPORTED_MODULE_0__[\"CssClassBuilder\"]()\n .append(this.survey.css.progressButtonsImageButtonLeft, isLeftScroll)\n .append(this.survey.css.progressButtonsImageButtonRight, !isLeftScroll)\n .append(this.survey.css.progressButtonsImageButtonHidden, !hasScroller)\n .toString();\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.onTimer.isEmpty || this.listenerCounter == 0) {\n this.timerId = -1;\n }\n if (this.timerId < 0)\n return;\n var prevItem = this.timerId;\n this.onTimer.fire(this, {});\n //We have to check that we have the same timerId\n //It could be changed during events execution and it will lead to double timer events\n if (prevItem !== this.timerId)\n return;\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 _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 _conditions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./conditions */ \"./src/conditions.ts\");\n/* harmony import */ var _expressions_expressions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./expressions/expressions */ \"./src/expressions/expressions.ts\");\n/* harmony import */ var _conditionProcessValue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./conditionProcessValue */ \"./src/conditionProcessValue.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})();\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_3__[\"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_4__[\"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 == undefined)\n continue;\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 !this.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_2__[\"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_0__[\"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_5__[\"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 SurveyTriggerSetValue.prototype.onPropertyValueChanged = function (name, oldValue, newValue) {\n _super.prototype.onPropertyValueChanged.call(this, name, oldValue, newValue);\n if (name !== \"setToName\")\n return;\n var survey = this.getSurvey();\n if (survey && !survey.isLoadingFromJson && survey.isDesignMode) {\n this.setValue = undefined;\n }\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_5__[\"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_2__[\"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_1__[\"Serializer\"].addClass(\"trigger\", [\n { name: \"operator\", default: \"equal\", visible: false },\n { name: \"value\", visible: false },\n \"expression:condition\",\n]);\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"surveytrigger\", [{ name: \"name\", visible: false }], null, \"trigger\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"visibletrigger\", [\"pages:pages\", \"questions:questions\"], function () {\n return new SurveyTriggerVisible();\n}, \"surveytrigger\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"completetrigger\", [], function () {\n return new SurveyTriggerComplete();\n}, \"surveytrigger\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"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_1__[\"Serializer\"].addClass(\"copyvaluetrigger\", [{ name: \"!fromName:questionvalue\" }, { name: \"!setToName:questionvalue\" }], function () {\n return new SurveyTriggerCopyValue();\n}, \"surveytrigger\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"skiptrigger\", [{ name: \"!gotoName:question\" }], function () {\n return new SurveyTriggerSkip();\n}, \"surveytrigger\");\n_jsonobject__WEBPACK_IMPORTED_MODULE_1__[\"Serializer\"].addClass(\"runexpressiontrigger\", [{ name: \"setToName:questionvalue\" }, \"runExpression:expression\"], function () {\n return new SurveyTriggerRunExpression();\n}, \"surveytrigger\");\n\n\n/***/ }),\n\n/***/ \"./src/utils/cssClassBuilder.ts\":\n/*!**************************************!*\\\n !*** ./src/utils/cssClassBuilder.ts ***!\n \\**************************************/\n/*! exports provided: CssClassBuilder */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CssClassBuilder\", function() { return CssClassBuilder; });\nvar CssClassBuilder = /** @class */ (function () {\n function CssClassBuilder() {\n this.classes = [];\n }\n CssClassBuilder.prototype.isEmpty = function () {\n return this.toString() === \"\";\n };\n CssClassBuilder.prototype.append = function (value, condition) {\n if (condition === void 0) { condition = true; }\n if (!!value && condition)\n this.classes.push(value);\n return this;\n };\n CssClassBuilder.prototype.toString = function () {\n return this.classes.join(\" \");\n };\n return CssClassBuilder;\n}());\n\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.updateVerticalDimensions = function (top, height, windowHeight) {\n var result;\n if (top < 0) {\n result = { height: height + top, top: 0 };\n }\n else if (height + top > windowHeight) {\n var newHeight = Math.min(height, windowHeight - top);\n result = { height: newHeight, top: top };\n }\n return result;\n };\n PopupUtils.updateVerticalPosition = function (targetRect, height, verticalPosition, showPointer, windowHeight) {\n var deltaTop = height - (targetRect.top + (showPointer ? targetRect.height : 0));\n var deltaBottom = height +\n targetRect.bottom -\n (showPointer ? targetRect.height : 0) -\n windowHeight;\n if (deltaTop > 0 && deltaBottom <= 0 && verticalPosition == \"top\") {\n verticalPosition = \"bottom\";\n }\n else if (deltaBottom > 0 &&\n deltaTop <= 0 &&\n verticalPosition == \"bottom\") {\n verticalPosition = \"top\";\n }\n else if (deltaBottom > 0 && deltaTop > 0) {\n verticalPosition = deltaTop < deltaBottom ? \"top\" : \"bottom\";\n }\n return verticalPosition;\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/responsivity-manager.ts\":\n/*!*******************************************!*\\\n !*** ./src/utils/responsivity-manager.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.resizeObserver = undefined;\n this.isInitialized = false;\n this.minDimensionConst = 56;\n this.separatorSize = 17;\n this.getComputedStyle = window.getComputedStyle.bind(window);\n this.model.updateCallback = function (isResetInitialized) {\n if (isResetInitialized)\n _this.isInitialized = false;\n else\n _this.process();\n };\n if (typeof ResizeObserver !== \"undefined\") {\n this.resizeObserver = new ResizeObserver(function (_) { return _this.process(); });\n this.resizeObserver.observe(this.container.parentElement);\n }\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;\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 actions = this.model.actions;\n this.container\n .querySelectorAll(this.itemsSelector)\n .forEach(function (item, index) {\n var currentAction = actions[index];\n currentAction.maxDimension = _this.calcItemSize(item);\n currentAction.minDimension = currentAction.canShrink\n ? _this.minDimensionConst +\n (currentAction.needSeparator ? _this.separatorSize : 0)\n : currentAction.maxDimension;\n });\n };\n Object.defineProperty(ResponsivityManager.prototype, \"isContainerVisible\", {\n get: function () {\n return !!(this.container.offsetWidth ||\n this.container.offsetHeight ||\n this.container.getClientRects().length);\n },\n enumerable: false,\n configurable: true\n });\n ResponsivityManager.prototype.process = function () {\n if (this.isContainerVisible) {\n if (!this.isInitialized) {\n this.model.actions.forEach(function (action) { return (action.mode = \"large\"); });\n this.calcItemsSizes();\n this.isInitialized = true;\n }\n this.model.fit(this.getAvailableSpace(), this.dotsItemSize);\n }\n };\n ResponsivityManager.prototype.dispose = function () {\n this.model.updateCallback = undefined;\n if (!!this.resizeObserver) {\n this.resizeObserver.disconnect();\n }\n };\n return ResponsivityManager;\n}());\n\nvar VerticalResponsivityManager = /** @class */ (function (_super) {\n __extends(VerticalResponsivityManager, _super);\n function VerticalResponsivityManager(container, model, itemsSelector, dotsItemSize) {\n var _this = _super.call(this, container, model, itemsSelector, dotsItemSize) || this;\n _this.minDimensionConst = 40;\n return _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, getSize, compareVersions, confirmAction, detectIEOrEdge, detectIEBrowser, loadFileFromBase64, isMobile, isElementVisible, findScrollableParent, scrollElementByChildId, createSvg, doKey2ClickUp, doKey2ClickDown, getIconNameFromProxy, increaseHeightByContent, getOriginalEvent, preventDefaults */\n/***/ (function(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__, \"getSize\", function() { return getSize; });\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__, \"scrollElementByChildId\", function() { return scrollElementByChildId; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createSvg\", function() { return createSvg; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doKey2ClickUp\", function() { return doKey2ClickUp; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doKey2ClickDown\", function() { return doKey2ClickDown; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getIconNameFromProxy\", function() { return getIconNameFromProxy; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"increaseHeightByContent\", function() { return increaseHeightByContent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getOriginalEvent\", function() { return getOriginalEvent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"preventDefaults\", function() { return preventDefaults; });\n/* harmony import */ var _settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./../settings */ \"./src/settings.ts\");\n\nfunction compareVersions(a, b) {\n var regExStrip0 = /(\\.0+)+$/;\n var segmentsA = a.replace(regExStrip0, \"\").split(\".\");\n var segmentsB = b.replace(regExStrip0, \"\").split(\".\");\n var len = Math.min(segmentsA.length, segmentsB.length);\n for (var i = 0; i < len; i++) {\n var 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\n .split(\",\")[0]\n .split(\":\")[1]\n .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 if (element.scrollWidth > element.clientWidth &&\n (getComputedStyle(element).overflowX === \"scroll\" ||\n getComputedStyle(element).overflowX === \"auto\")) {\n return element;\n }\n return findScrollableParent(element.parentElement);\n}\nfunction scrollElementByChildId(id) {\n if (!document)\n return;\n var el = document.getElementById(id);\n if (!el)\n return;\n var scrollableEl = findScrollableParent(el);\n if (!!scrollableEl) {\n scrollableEl.dispatchEvent(new CustomEvent(\"scroll\"));\n }\n}\nfunction getIconNameFromProxy(iconName) {\n if (!iconName)\n return iconName;\n var proxyName = _settings__WEBPACK_IMPORTED_MODULE_0__[\"settings\"].customIcons[iconName];\n return !!proxyName ? proxyName : iconName;\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 var realIconName = getIconNameFromProxy(iconName);\n node.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"xlink:href\", \"#\" + realIconName);\n}\nfunction unwrap(value) {\n if (typeof value !== \"function\") {\n return value;\n }\n else {\n return value();\n }\n}\nfunction getSize(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}\nfunction doKey2ClickUp(evt, options) {\n if (options === void 0) { options = { processEsc: true }; }\n if (!!evt.target && evt.target[\"contentEditable\"] === \"true\") {\n return;\n }\n var element = evt.target;\n if (!element)\n return;\n var char = evt.which || evt.keyCode;\n if (char === 13 || char === 32) {\n if (element.click)\n element.click();\n }\n else if (options.processEsc && char === 27) {\n if (element.blur)\n element.blur();\n }\n}\nfunction doKey2ClickDown(evt, options) {\n if (options === void 0) { options = { processEsc: true }; }\n if (!!evt.target && evt.target[\"contentEditable\"] === \"true\") {\n return;\n }\n var char = evt.which || evt.keyCode;\n var supportedCodes = [13, 32];\n if (options.processEsc) {\n supportedCodes.push(27);\n }\n if (supportedCodes.indexOf(char) !== -1) {\n evt.preventDefault();\n }\n}\nfunction increaseHeightByContent(element, getComputedStyle) {\n if (!element)\n return;\n if (!getComputedStyle)\n getComputedStyle = function (elt) { return window.getComputedStyle(elt); };\n var style = getComputedStyle(element);\n element.style.height = \"auto\";\n element.style.height = (element.scrollHeight + parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth)) + \"px\";\n}\nfunction getOriginalEvent(event) {\n return event.originalEvent || event;\n}\nfunction preventDefaults(event) {\n event.preventDefault();\n event.stopPropagation();\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.getRendererContext = function (locStr) {\n return !!this.errorOwner ? this.errorOwner.getRendererContext(locStr) : locStr;\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 (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 (count == 0)\n return null;\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 (propertiesHash, name) {\n vue__WEBPACK_IMPORTED_MODULE_0___default.a.util.defineReactive(propertiesHash, name, propertiesHash[name]);\n });\n model.getPropertyValueCoreHandler = function (propertiesHash, name) {\n if (!propertiesHash.hasOwnProperty(name)) {\n vue__WEBPACK_IMPORTED_MODULE_0___default.a.util.defineReactive(propertiesHash, name, propertiesHash[name]);\n }\n return propertiesHash[name];\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 Boolean.prototype.onSwitchClick = function (event) {\n this.question.onSwitchClickModel(event);\n };\n Boolean.prototype.onLabelClick = function (event, value) {\n this.question.onLabelClick(event, value);\n };\n Boolean = __decorate([\n vue_property_decorator__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]\n ], Boolean);\n return Boolean;\n}(_question__WEBPACK_IMPORTED_MODULE_1__[\"QuestionVue\"]));\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: ActionViewModel, 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__, \"ActionViewModel\", function() { return _action_bar_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionViewModel\"]; });\n\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, ActionViewModel, 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__, \"ActionViewModel\", 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__[\"ActionViewModel\"]; });\n\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/action-bar/action.vue\":\n/*!**************************************************!*\\\n !*** ./src/vue/components/action-bar/action.vue ***!\n \\**************************************************/\n/*! exports provided: ActionViewModel, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _action_vue_vue_type_template_id_2fe54632___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./action.vue?vue&type=template&id=2fe54632& */ \"./src/vue/components/action-bar/action.vue?vue&type=template&id=2fe54632&\");\n/* harmony import */ var _action_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./action.vue?vue&type=script&lang=ts& */ \"./src/vue/components/action-bar/action.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionViewModel\", function() { return _action_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ActionViewModel\"]; });\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_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _action_vue_vue_type_template_id_2fe54632___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _action_vue_vue_type_template_id_2fe54632___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.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action.vue?vue&type=script&lang=ts&\":\n/*!***************************************************************************!*\\\n !*** ./src/vue/components/action-bar/action.vue?vue&type=script&lang=ts& ***!\n \\***************************************************************************/\n/*! exports provided: default, ActionViewModel */\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_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.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.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ActionViewModel\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_action_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ActionViewModel\"]; });\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_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/action-bar/action.vue?vue&type=template&id=2fe54632&\":\n/*!*********************************************************************************!*\\\n !*** ./src/vue/components/action-bar/action.vue?vue&type=template&id=2fe54632& ***!\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_vue_vue_type_template_id_2fe54632___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.vue?vue&type=template&id=2fe54632& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/action-bar/action.vue?vue&type=template&id=2fe54632&\");\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_vue_vue_type_template_id_2fe54632___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_vue_vue_type_template_id_2fe54632___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/list/list-item.vue\":\n/*!***********************************************!*\\\n !*** ./src/vue/components/list/list-item.vue ***!\n \\***********************************************/\n/*! exports provided: List, ListItem, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _list_item_vue_vue_type_template_id_4fffcdf8___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./list-item.vue?vue&type=template&id=4fffcdf8& */ \"./src/vue/components/list/list-item.vue?vue&type=template&id=4fffcdf8&\");\n/* harmony import */ var _list_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./list-item.vue?vue&type=script&lang=ts& */ \"./src/vue/components/list/list-item.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"List\", function() { return _list_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"List\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ListItem\", function() { return _list_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ListItem\"]; });\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_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _list_item_vue_vue_type_template_id_4fffcdf8___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _list_item_vue_vue_type_template_id_4fffcdf8___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-item.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/list/list-item.vue?vue&type=script&lang=ts&\":\n/*!************************************************************************!*\\\n !*** ./src/vue/components/list/list-item.vue?vue&type=script&lang=ts& ***!\n \\************************************************************************/\n/*! exports provided: default, List, ListItem */\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_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!./list-item.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/list/list-item.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_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"List\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ListItem\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_list_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"ListItem\"]; });\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_item_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/list/list-item.vue?vue&type=template&id=4fffcdf8&\":\n/*!******************************************************************************!*\\\n !*** ./src/vue/components/list/list-item.vue?vue&type=template&id=4fffcdf8& ***!\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_item_vue_vue_type_template_id_4fffcdf8___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-item.vue?vue&type=template&id=4fffcdf8& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/list/list-item.vue?vue&type=template&id=4fffcdf8&\");\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_item_vue_vue_type_template_id_4fffcdf8___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_item_vue_vue_type_template_id_4fffcdf8___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: ListItem, 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__, \"ListItem\", function() { return _list_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"ListItem\"]; });\n\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, ListItem, 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__, \"ListItem\", 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__[\"ListItem\"]; });\n\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/drag-drop-icon/drag-drop-icon.vue\":\n/*!*****************************************************************************!*\\\n !*** ./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue ***!\n \\*****************************************************************************/\n/*! exports provided: SurveyQuestionMatrixDynamicDragDropIcon, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _drag_drop_icon_vue_vue_type_template_id_4f55d298___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./drag-drop-icon.vue?vue&type=template&id=4f55d298& */ \"./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=template&id=4f55d298&\");\n/* harmony import */ var _drag_drop_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./drag-drop-icon.vue?vue&type=script&lang=ts& */ \"./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDynamicDragDropIcon\", function() { return _drag_drop_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"SurveyQuestionMatrixDynamicDragDropIcon\"]; });\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_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _drag_drop_icon_vue_vue_type_template_id_4f55d298___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _drag_drop_icon_vue_vue_type_template_id_4f55d298___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/drag-drop-icon/drag-drop-icon.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************************************************!*\\\n !*** ./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=script&lang=ts& ***!\n \\******************************************************************************************************/\n/*! exports provided: default, SurveyQuestionMatrixDynamicDragDropIcon */\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_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!./drag-drop-icon.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SurveyQuestionMatrixDynamicDragDropIcon\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_drag_drop_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"SurveyQuestionMatrixDynamicDragDropIcon\"]; });\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_icon_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=template&id=4f55d298&\":\n/*!************************************************************************************************************!*\\\n !*** ./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=template&id=4f55d298& ***!\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_icon_vue_vue_type_template_id_4f55d298___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-icon.vue?vue&type=template&id=4f55d298& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/matrix-actions/drag-drop-icon/drag-drop-icon.vue?vue&type=template&id=4f55d298&\");\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_icon_vue_vue_type_template_id_4f55d298___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_icon_vue_vue_type_template_id_4f55d298___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/skeleton.vue\":\n/*!*****************************************!*\\\n !*** ./src/vue/components/skeleton.vue ***!\n \\*****************************************/\n/*! exports provided: Skeleton, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _skeleton_vue_vue_type_template_id_5bd480d4___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./skeleton.vue?vue&type=template&id=5bd480d4& */ \"./src/vue/components/skeleton.vue?vue&type=template&id=5bd480d4&\");\n/* harmony import */ var _skeleton_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./skeleton.vue?vue&type=script&lang=ts& */ \"./src/vue/components/skeleton.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Skeleton\", function() { return _skeleton_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"Skeleton\"]; });\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 _skeleton_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _skeleton_vue_vue_type_template_id_5bd480d4___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _skeleton_vue_vue_type_template_id_5bd480d4___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/skeleton.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/skeleton.vue?vue&type=script&lang=ts&\":\n/*!******************************************************************!*\\\n !*** ./src/vue/components/skeleton.vue?vue&type=script&lang=ts& ***!\n \\******************************************************************/\n/*! exports provided: default, Skeleton */\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_skeleton_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!./skeleton.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/skeleton.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Skeleton\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_skeleton_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"Skeleton\"]; });\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_skeleton_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/skeleton.vue?vue&type=template&id=5bd480d4&\":\n/*!************************************************************************!*\\\n !*** ./src/vue/components/skeleton.vue?vue&type=template&id=5bd480d4& ***!\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_skeleton_vue_vue_type_template_id_5bd480d4___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!./skeleton.vue?vue&type=template&id=5bd480d4& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/skeleton.vue?vue&type=template&id=5bd480d4&\");\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_skeleton_vue_vue_type_template_id_5bd480d4___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_skeleton_vue_vue_type_template_id_5bd480d4___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/default-title.vue\":\n/*!****************************************************!*\\\n !*** ./src/vue/components/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_7aaa96c4___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./default-title.vue?vue&type=template&id=7aaa96c4& */ \"./src/vue/components/title/default-title.vue?vue&type=template&id=7aaa96c4&\");\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/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_7aaa96c4___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _default_title_vue_vue_type_template_id_7aaa96c4___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/default-title.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/title/default-title.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************************************!*\\\n !*** ./src/vue/components/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/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/title/default-title.vue?vue&type=template&id=7aaa96c4&\":\n/*!***********************************************************************************!*\\\n !*** ./src/vue/components/title/default-title.vue?vue&type=template&id=7aaa96c4& ***!\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_7aaa96c4___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=7aaa96c4& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/title/default-title.vue?vue&type=template&id=7aaa96c4&\");\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_7aaa96c4___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_7aaa96c4___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/title/title-actions.vue\":\n/*!****************************************************!*\\\n !*** ./src/vue/components/title/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_c938554c___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./title-actions.vue?vue&type=template&id=c938554c& */ \"./src/vue/components/title/title-actions.vue?vue&type=template&id=c938554c&\");\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/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_c938554c___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _title_actions_vue_vue_type_template_id_c938554c___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/title-actions.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/title/title-actions.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************************************!*\\\n !*** ./src/vue/components/title/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/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/title-actions.vue?vue&type=template&id=c938554c&\":\n/*!***********************************************************************************!*\\\n !*** ./src/vue/components/title/title-actions.vue?vue&type=template&id=c938554c& ***!\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_c938554c___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=c938554c& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/title/title-actions.vue?vue&type=template&id=c938554c&\");\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_c938554c___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_c938554c___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/title/title-content.vue\":\n/*!****************************************************!*\\\n !*** ./src/vue/components/title/title-content.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 _title_content_vue_vue_type_template_id_24c0a2d6___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./title-content.vue?vue&type=template&id=24c0a2d6& */ \"./src/vue/components/title/title-content.vue?vue&type=template&id=24c0a2d6&\");\n/* harmony import */ var _title_content_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./title-content.vue?vue&type=script&lang=ts& */ \"./src/vue/components/title/title-content.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TitleContent\", function() { return _title_content_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 _title_content_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _title_content_vue_vue_type_template_id_24c0a2d6___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _title_content_vue_vue_type_template_id_24c0a2d6___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/title-content.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/title/title-content.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************************************!*\\\n !*** ./src/vue/components/title/title-content.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_title_content_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-content.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/title/title-content.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_title_content_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_title_content_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/title/title-content.vue?vue&type=template&id=24c0a2d6&\":\n/*!***********************************************************************************!*\\\n !*** ./src/vue/components/title/title-content.vue?vue&type=template&id=24c0a2d6& ***!\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_content_vue_vue_type_template_id_24c0a2d6___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-content.vue?vue&type=template&id=24c0a2d6& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/title/title-content.vue?vue&type=template&id=24c0a2d6&\");\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_content_vue_vue_type_template_id_24c0a2d6___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_content_vue_vue_type_template_id_24c0a2d6___WEBPACK_IMPORTED_MODULE_0__[\"staticRenderFns\"]; });\n\n\n\n/***/ }),\n\n/***/ \"./src/vue/components/title/title-element.vue\":\n/*!****************************************************!*\\\n !*** ./src/vue/components/title/title-element.vue ***!\n \\****************************************************/\n/*! exports provided: TitleElement, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _title_element_vue_vue_type_template_id_641d93d9___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./title-element.vue?vue&type=template&id=641d93d9& */ \"./src/vue/components/title/title-element.vue?vue&type=template&id=641d93d9&\");\n/* harmony import */ var _title_element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./title-element.vue?vue&type=script&lang=ts& */ \"./src/vue/components/title/title-element.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TitleElement\", function() { return _title_element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"TitleElement\"]; });\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_element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _title_element_vue_vue_type_template_id_641d93d9___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _title_element_vue_vue_type_template_id_641d93d9___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/title-element.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/components/title/title-element.vue?vue&type=script&lang=ts&\":\n/*!*****************************************************************************!*\\\n !*** ./src/vue/components/title/title-element.vue?vue&type=script&lang=ts& ***!\n \\*****************************************************************************/\n/*! exports provided: default, TitleElement */\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_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!./title-element.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/title/title-element.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"TitleElement\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_title_element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"TitleElement\"]; });\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_element_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/components/title/title-element.vue?vue&type=template&id=641d93d9&\":\n/*!***********************************************************************************!*\\\n !*** ./src/vue/components/title/title-element.vue?vue&type=template&id=641d93d9& ***!\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_element_vue_vue_type_template_id_641d93d9___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-element.vue?vue&type=template&id=641d93d9& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/components/title/title-element.vue?vue&type=template&id=641d93d9&\");\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_element_vue_vue_type_template_id_641d93d9___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_element_vue_vue_type_template_id_641d93d9___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/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/paneldynamicprogressV2.vue\":\n/*!********************************************!*\\\n !*** ./src/vue/paneldynamicprogressV2.vue ***!\n \\********************************************/\n/*! exports provided: PanelDynamicProgressV2, default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _paneldynamicprogressV2_vue_vue_type_template_id_33ce4046___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./paneldynamicprogressV2.vue?vue&type=template&id=33ce4046& */ \"./src/vue/paneldynamicprogressV2.vue?vue&type=template&id=33ce4046&\");\n/* harmony import */ var _paneldynamicprogressV2_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./paneldynamicprogressV2.vue?vue&type=script&lang=ts& */ \"./src/vue/paneldynamicprogressV2.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamicProgressV2\", function() { return _paneldynamicprogressV2_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"PanelDynamicProgressV2\"]; });\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 _paneldynamicprogressV2_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_1__[\"default\"],\n _paneldynamicprogressV2_vue_vue_type_template_id_33ce4046___WEBPACK_IMPORTED_MODULE_0__[\"render\"],\n _paneldynamicprogressV2_vue_vue_type_template_id_33ce4046___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/paneldynamicprogressV2.vue\"\n/* harmony default export */ __webpack_exports__[\"default\"] = (component.exports);\n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamicprogressV2.vue?vue&type=script&lang=ts&\":\n/*!*********************************************************************!*\\\n !*** ./src/vue/paneldynamicprogressV2.vue?vue&type=script&lang=ts& ***!\n \\*********************************************************************/\n/*! exports provided: default, PanelDynamicProgressV2 */\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_paneldynamicprogressV2_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!./paneldynamicprogressV2.vue?vue&type=script&lang=ts& */ \"./node_modules/ts-loader/index.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamicprogressV2.vue?vue&type=script&lang=ts&\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PanelDynamicProgressV2\", function() { return _node_modules_ts_loader_index_js_ref_0_node_modules_vue_loader_lib_index_js_vue_loader_options_paneldynamicprogressV2_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"PanelDynamicProgressV2\"]; });\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_paneldynamicprogressV2_vue_vue_type_script_lang_ts___WEBPACK_IMPORTED_MODULE_0__[\"default\"]); \n\n/***/ }),\n\n/***/ \"./src/vue/paneldynamicprogressV2.vue?vue&type=template&id=33ce4046&\":\n/*!***************************************************************************!*\\\n !*** ./src/vue/paneldynamicprogressV2.vue?vue&type=template&id=33ce4046& ***!\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_paneldynamicprogressV2_vue_vue_type_template_id_33ce4046___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!./paneldynamicprogressV2.vue?vue&type=template&id=33ce4046& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./src/vue/paneldynamicprogressV2.vue?vue&type=template&id=33ce4046&\");\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_paneldynamicprogressV2_vue_vue_type_template_id_33ce4046___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_paneldynamicprogressV2_vue_vue_type_template_id_33ce4046___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/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/YmUxZCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLnZ1ZT9hNDFkIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi52dWU/NTgzYSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvbGlzdC9saXN0LWl0ZW0udnVlP2JkMWQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL2xpc3QvbGlzdC52dWU/YmU5OCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZGV0YWlsLWJ1dHRvbi9kZXRhaWwtYnV0dG9uLnZ1ZT9iYTNmIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kcmFnLWRyb3AtaWNvbi9kcmFnLWRyb3AtaWNvbi52dWU/YzZjYiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvcmVtb3ZlLWJ1dHRvbi9yZW1vdmUtYnV0dG9uLnZ1ZT8xNDcxIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9wb3B1cC9wb3B1cC1jb250YWluZXIudnVlP2ZmZGEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL3BvcHVwL3BvcHVwLnZ1ZT83NDFiIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9za2VsZXRvbi52dWU/ZDJmMiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvc3ZnLWljb24vc3ZnLWljb24udnVlPzE0OTkiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL3RpdGxlL2RlZmF1bHQtdGl0bGUudnVlPzQ1MDYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWFjdGlvbnMudnVlPzc1M2IiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWNvbnRlbnQudnVlP2U0NmUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWVsZW1lbnQudnVlPzA2MWYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb3NpdGUudnVlPzRmMGIiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jdXN0b20udnVlPzEzZWEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jdXN0b213aWRnZXQudnVlPzI5NGIiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9kcm9wZG93bi52dWU/ZDk4ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2VsZW1lbnQudnVlPzA3NTAiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9lbGVtZW50aGVhZGVyLnZ1ZT84ZmY4Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZW1wdHkudnVlPzllMzQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9lcnJvcnMudnVlPzI0YzkiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9leHByZXNzaW9uLnZ1ZT84ZDU1Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZmlsZS52dWU/YTEzNiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Zsb3dwYW5lbC52dWU/ZWI5OCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Zsb3dwYW5lbGVsZW1lbnQudnVlP2IzNWYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9oZWFkZXIudnVlP2NlNmIiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9odG1sLnZ1ZT9iMzQ3Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvaW1hZ2UudnVlPzYyNGEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9pbWFnZXBpY2tlci52dWU/ZGRiNSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeC52dWU/MDk4NyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeGNlbGwudnVlP2RlYmMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9tYXRyaXhkcm9wZG93bi52dWU/N2I2NyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeGR5bmFtaWMudnVlP2IyNGQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9tYXRyaXh0YWJsZS52dWU/ZjcyNiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL211bHRpcGxldGV4dC52dWU/YzYwMSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL25hdmlnYXRpb24udnVlP2JkZDQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9vdGhlckNob2ljZS52dWU/ZjQ2MiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3BhZ2UudnVlPzU3MmUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wYW5lbC52dWU/NmY1MSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3BhbmVsZHluYW1pYy52dWU/YzUyYSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3BhbmVsZHluYW1pY3Byb2dyZXNzLnZ1ZT81ZGRkIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFuZWxkeW5hbWljcHJvZ3Jlc3NWMi52dWU/ZjMxNSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3BhbmVsZHluYW1pY3JlbW92ZS52dWU/ZmEzNSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3Byb2dyZXNzLnZ1ZT81NTYxIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcHJvZ3Jlc3NCdXR0b25zLnZ1ZT8wYTAzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmFkaW9ncm91cC52dWU/M2VhZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3JhZGlvZ3JvdXBpdGVtLnZ1ZT9lN2E5Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmFua2luZy9yYW5raW5nLWl0ZW0udnVlPzEyM2MiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yYW5raW5nL3JhbmtpbmcudnVlPzE0MzQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yYXRpbmcudnVlP2RkM2QiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yb3cudnVlPzJhM2EiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9zaWduYXR1cmVwYWQudnVlPzJiY2QiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9zdHJpbmctZWRpdG9yLnZ1ZT9iZGVmIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc3RyaW5nLXZpZXdlci52dWU/Y2Q0OCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3N0cmluZy52dWU/OGI2YSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3N1cnZleS52dWU/NDE5YyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3RleHQudnVlPzMxYTkiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS90aW1lcnBhbmVsLnZ1ZT8zMDY2Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvd2luZG93LnZ1ZT9iNGUzIiwid2VicGFjazovL1N1cnZleS8uL25vZGVfbW9kdWxlcy92dWUtY2xhc3MtY29tcG9uZW50L2Rpc3QvdnVlLWNsYXNzLWNvbXBvbmVudC5lc20uanMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9ib29sZWFuLWNoZWNrYm94LnZ1ZT82YjQ4Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvYm9vbGVhbi1zd2l0Y2gudnVlPzM0NzAiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9idXR0b25ncm91cC52dWU/YTY1ZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2J1dHRvbmdyb3VwaXRlbS52dWU/NjVkYyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NoZWNrYm94LnZ1ZT81ZDVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY2hlY2tib3hpdGVtLnZ1ZT83YzE2Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tbWVudC52dWU/YTU2YiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLWl0ZW0tZHJvcGRvd24udnVlPzkxMTgiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci1pdGVtLnZ1ZT8wZGVjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItc2VwYXJhdG9yLnZ1ZT9mMzcxIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXIudnVlP2NiNjEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLnZ1ZT83ZjQ5Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9saXN0L2xpc3QtaXRlbS52dWU/NjFhMiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvbGlzdC9saXN0LnZ1ZT80YTI1Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kZXRhaWwtYnV0dG9uL2RldGFpbC1idXR0b24udnVlPzIzNWMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RyYWctZHJvcC1pY29uL2RyYWctZHJvcC1pY29uLnZ1ZT8zOGYxIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9yZW1vdmUtYnV0dG9uL3JlbW92ZS1idXR0b24udnVlPzA0ZmYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL3BvcHVwL3BvcHVwLWNvbnRhaW5lci52dWU/NDRhZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAudnVlP2FiYTgiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL3NrZWxldG9uLnZ1ZT9jNWY1Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvbi52dWU/OWU1NSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvdGl0bGUvZGVmYXVsdC10aXRsZS52dWU/NWFmNyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtYWN0aW9ucy52dWU/M2E0YSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtY29udGVudC52dWU/ZDcxZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtZWxlbWVudC52dWU/YWIzZCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvc2l0ZS52dWU/NGVhMCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2N1c3RvbS52dWU/ODIzYiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2N1c3RvbXdpZGdldC52dWU/MGE4NCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Ryb3Bkb3duLnZ1ZT8wMGE0Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZWxlbWVudC52dWU/MWQyZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2VsZW1lbnRoZWFkZXIudnVlP2E1MDEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9lbXB0eS52dWU/NjZiOSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Vycm9ycy52dWU/ZmYwZCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2V4cHJlc3Npb24udnVlP2FjZTkiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9maWxlLnZ1ZT9jNGJjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZmxvd3BhbmVsLnZ1ZT9iZWMyIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZmxvd3BhbmVsZWxlbWVudC52dWU/ZTQwYSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2hlYWRlci52dWU/YjU4MyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2h0bWwudnVlPzJiOWEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9pbWFnZS52dWU/YzA4NSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2ltYWdlcGlja2VyLnZ1ZT9jNmU0Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbWF0cml4LnZ1ZT83MDc4Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbWF0cml4Y2VsbC52dWU/MDdkOCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeGRyb3Bkb3duLnZ1ZT85MGQxIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbWF0cml4ZHluYW1pYy52dWU/N2UwYyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeHRhYmxlLnZ1ZT83MmQ1Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbXVsdGlwbGV0ZXh0LnZ1ZT9mYTQxIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbmF2aWdhdGlvbi52dWU/NTgxZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL290aGVyQ2hvaWNlLnZ1ZT9mNGY5Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFnZS52dWU/MTk0MyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3BhbmVsLnZ1ZT83MjQwIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFuZWxkeW5hbWljLnZ1ZT83NWI1Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFuZWxkeW5hbWljcHJvZ3Jlc3MudnVlPzU5ZTIiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWNwcm9ncmVzc1YyLnZ1ZT8xY2FlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFuZWxkeW5hbWljcmVtb3ZlLnZ1ZT82MjcwIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcHJvZ3Jlc3MudnVlP2MzZjUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wcm9ncmVzc0J1dHRvbnMudnVlPzAyNWYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yYWRpb2dyb3VwLnZ1ZT83M2RhIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmFkaW9ncm91cGl0ZW0udnVlPzRlNTIiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yYW5raW5nL3JhbmtpbmctaXRlbS52dWU/MmNjNCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3JhbmtpbmcvcmFua2luZy52dWU/NWQ0ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3JhdGluZy52dWU/OWQ1NCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3Jvdy52dWU/MThmYyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3NpZ25hdHVyZXBhZC52dWU/MzA2ZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3N0cmluZy1lZGl0b3IudnVlP2Q3NmIiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9zdHJpbmctdmlld2VyLnZ1ZT9kYzlmIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc3RyaW5nLnZ1ZT9lMWMxIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc3VydmV5LnZ1ZT83YTBmIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvdGV4dC52dWU/M2E1YSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3RpbWVycGFuZWwudnVlP2NjNDMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS93aW5kb3cudnVlPzdiMTEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qcyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvZGVjb3JhdG9ycy9FbWl0LmpzIiwid2VicGFjazovL1N1cnZleS8uL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9kZWNvcmF0b3JzL0luamVjdC5qcyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvZGVjb3JhdG9ycy9JbmplY3RSZWFjdGl2ZS5qcyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvZGVjb3JhdG9ycy9Nb2RlbC5qcyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvZGVjb3JhdG9ycy9Nb2RlbFN5bmMuanMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2RlY29yYXRvcnMvUHJvcC5qcyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvZGVjb3JhdG9ycy9Qcm9wU3luYy5qcyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvZGVjb3JhdG9ycy9Qcm92aWRlLmpzIiwid2VicGFjazovL1N1cnZleS8uL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9kZWNvcmF0b3JzL1Byb3ZpZGVSZWFjdGl2ZS5qcyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9ub2RlX21vZHVsZXMvdnVlLXByb3BlcnR5LWRlY29yYXRvci9saWIvZGVjb3JhdG9ycy9SZWYuanMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2RlY29yYXRvcnMvVk1vZGVsLmpzIiwid2VicGFjazovL1N1cnZleS8uL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9kZWNvcmF0b3JzL1dhdGNoLmpzIiwid2VicGFjazovL1N1cnZleS8uL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9oZWxwZXJzL21ldGFkYXRhLmpzIiwid2VicGFjazovL1N1cnZleS8uL25vZGVfbW9kdWxlcy92dWUtcHJvcGVydHktZGVjb3JhdG9yL2xpYi9oZWxwZXJzL3Byb3ZpZGVJbmplY3QuanMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vbm9kZV9tb2R1bGVzL3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3IvbGliL2luZGV4LmpzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9hY3Rpb25zL2FjdGlvbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvYWN0aW9ucy9hZGFwdGl2ZS1jb250YWluZXIudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2FjdGlvbnMvY29udGFpbmVyLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9iYXNlLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9jYWxjdWxhdGVkVmFsdWUudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2Nob2ljZXNSZXN0ZnVsLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9jb25kaXRpb25Qcm9jZXNzVmFsdWUudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2NvbmRpdGlvbnMudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2NvbmRpdGlvbnNQYXJzZXIudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2RlZmF1bHRDc3MvY3NzYm9vdHN0cmFwLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9kZWZhdWx0Q3NzL2Nzc2Jvb3RzdHJhcG1hdGVyaWFsLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9kZWZhdWx0Q3NzL2Nzc21vZGVybi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvZGVmYXVsdENzcy9jc3NzdGFuZGFyZC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvZGVmYXVsdENzcy9kZWZhdWx0VjJDc3MudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2RlZmF1bHRUaXRsZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvZHJhZ2Ryb3AvY2hvaWNlcy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvZHJhZ2Ryb3AvY29yZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvZHJhZ2Ryb3AvbWF0cml4LXJvd3MudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2RyYWdkcm9wL3JhbmtpbmctY2hvaWNlcy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvZHJhZ2Ryb3Avc3VydmV5LWVsZW1lbnRzLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9keFN1cnZleVNlcnZpY2UudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2VudHJpZXMvY2h1bmtzL2xvY2FsaXphdGlvbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvZW50cmllcy9jaHVua3MvbW9kZWwudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2VudHJpZXMvY29yZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvZW50cmllcy92dWUtdWkudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2VudHJpZXMvdnVlLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9lcnJvci50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvZXhwcmVzc2lvbkl0ZW1zLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9leHByZXNzaW9ucy9leHByZXNzaW9uUGFyc2VyLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9leHByZXNzaW9ucy9leHByZXNzaW9ucy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvZmxvd3BhbmVsLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9mdW5jdGlvbnNmYWN0b3J5LnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9oZWxwZXJzLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9pdGVtdmFsdWUudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2pzb25vYmplY3QudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xpc3QudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphYmxlc3RyaW5nLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vYXJhYmljLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vYmFzcXVlLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vYnVsZ2FyaWFuLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vY2F0YWxhbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2Nyb2F0aWFuLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vY3plY2gudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9kYW5pc2gudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9kdXRjaC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2VuZ2xpc2gudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9lc3Rvbmlhbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2Zpbm5pc2gudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9mcmVuY2gudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9nZW9yZ2lhbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2dlcm1hbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2dyZWVrLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vaGVicmV3LnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vaGluZGkudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9odW5nYXJpYW4udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9pY2VsYW5kaWMudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9pbmRvbmVzaWFuLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vaXRhbGlhbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2phcGFuZXNlLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24va2F6YWtoLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24va29yZWFuLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vbGF0dmlhbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL2xpdGh1YW5pYW4udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9tYWNlZG9uaWFuLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vbm9yd2VnaWFuLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vcGVyc2lhbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL3BvbGlzaC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL3BvcnR1Z3Vlc2UtYnIudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9wb3J0dWd1ZXNlLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vcm9tYW5pYW4udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9ydXNzaWFuLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vc2VyYmlhbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL3NpbXBsaWZpZWQtY2hpbmVzZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL3NwYW5pc2gudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi9zd2FoaWxpLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vc3dlZGlzaC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL3RhamlrLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vdGhhaS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL3RyYWRpdGlvbmFsLWNoaW5lc2UudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL2xvY2FsaXphdGlvbi90dXJraXNoLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vdWtyYWluaWFuLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9sb2NhbGl6YXRpb24vdmlldG5hbWVzZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbG9jYWxpemF0aW9uL3dlbHNoLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9tYWluLnNjc3M/M2JjMCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvbWFydGl4QmFzZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcGFnZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcGFuZWwudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3BvcHVwLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25DdXN0b21XaWRnZXRzLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbl9iYXNlc2VsZWN0LnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbl9ib29sZWFuLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbl9idXR0b25ncm91cC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25fY2hlY2tib3gudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uX2NvbW1lbnQudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uX2N1c3RvbS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25fZHJvcGRvd24udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uX2VtcHR5LnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbl9leHByZXNzaW9uLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbl9maWxlLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbl9odG1sLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbl9pbWFnZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25faW1hZ2VwaWNrZXIudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uX21hdHJpeC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25fbWF0cml4ZHJvcGRvd24udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duYmFzZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25jb2x1bW4udHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3ducmVuZGVyZWQudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uX21hdHJpeGR5bmFtaWMudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uX211bHRpcGxldGV4dC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25fcGFuZWxkeW5hbWljLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbl9yYWRpb2dyb3VwLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbl9yYW5raW5nLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9xdWVzdGlvbl9yYXRpbmcudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uX3NpZ25hdHVyZXBhZC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25fdGV4dC50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25fdGV4dGJhc2UudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3F1ZXN0aW9uZmFjdG9yeS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcXVlc3Rpb25ub252YWx1ZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvcmVuZGVyZXJGYWN0b3J5LnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9zZXR0aW5ncy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvc3R5bGVzbWFuYWdlci50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvc3VydmV5LWVsZW1lbnQudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3N1cnZleS1lcnJvci50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvc3VydmV5LnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9zdXJ2ZXlQcm9ncmVzcy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvc3VydmV5UHJvZ3Jlc3NCdXR0b25zLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9zdXJ2ZXlTdHJpbmdzLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy9zdXJ2ZXlXaW5kb3cudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3N1cnZleXRpbWVyLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy90ZXh0UHJlUHJvY2Vzc29yLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy90cmlnZ2VyLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy91dGlscy9jc3NDbGFzc0J1aWxkZXIudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3V0aWxzL2lzLW1vYmlsZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdXRpbHMvcG9wdXAudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3V0aWxzL3Jlc3BvbnNpdml0eS1tYW5hZ2VyLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy91dGlscy91dGlscy50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdmFsaWRhdG9yLnRzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvYmFzZS50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Jvb2xlYW4tY2hlY2tib3gudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvYm9vbGVhbi1jaGVja2JveC52dWU/ODI3OCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Jvb2xlYW4tY2hlY2tib3gudnVlPzQ4OTMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9ib29sZWFuLXN3aXRjaC52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9ib29sZWFuLXN3aXRjaC52dWU/OTZlMyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Jvb2xlYW4tc3dpdGNoLnZ1ZT9hOWI0Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvYm9vbGVhbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2J1dHRvbmdyb3VwLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2J1dHRvbmdyb3VwLnZ1ZT9iNWI2Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvYnV0dG9uZ3JvdXAudnVlP2RlZTUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9idXR0b25ncm91cGl0ZW0udnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvYnV0dG9uZ3JvdXBpdGVtLnZ1ZT9kMTgzIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvYnV0dG9uZ3JvdXBpdGVtLnZ1ZT9iMDZmIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY2hlY2tib3gudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY2hlY2tib3gudnVlPzBiMzYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jaGVja2JveC52dWU/MjBhMiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NoZWNrYm94aXRlbS52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jaGVja2JveGl0ZW0udnVlPzUyNzAiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jaGVja2JveGl0ZW0udnVlP2UyODQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21tZW50LnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbW1lbnQudnVlPzJiZGYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21tZW50LnZ1ZT80MTBkIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci1pdGVtLWRyb3Bkb3duLnZ1ZT9jZDA5Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi52dWU/NDg0YiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLWl0ZW0udnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItaXRlbS52dWU/NmRlMSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24tYmFyLWl0ZW0udnVlPzI0MjEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci1zZXBhcmF0b3IudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItc2VwYXJhdG9yLnZ1ZT83ODA5Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXItc2VwYXJhdG9yLnZ1ZT8zN2FlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXIudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXIudnVlPzAxMWMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLWJhci52dWU/ZDQwMSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24udnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi52dWU/ZGFlZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvYWN0aW9uLWJhci9hY3Rpb24udnVlP2I4MjkiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL2xpc3QvbGlzdC1pdGVtLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvbGlzdC9saXN0LWl0ZW0udnVlPzg2MDQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL2xpc3QvbGlzdC1pdGVtLnZ1ZT82M2UwIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9saXN0L2xpc3QudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9saXN0L2xpc3QudnVlP2QxNTgiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL2xpc3QvbGlzdC52dWU/NzJhMiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZGV0YWlsLWJ1dHRvbi9kZXRhaWwtYnV0dG9uLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZGV0YWlsLWJ1dHRvbi9kZXRhaWwtYnV0dG9uLnZ1ZT9hNTllIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kZXRhaWwtYnV0dG9uL2RldGFpbC1idXR0b24udnVlPzA4ZjQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RyYWctZHJvcC1pY29uL2RyYWctZHJvcC1pY29uLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZHJhZy1kcm9wLWljb24vZHJhZy1kcm9wLWljb24udnVlP2NiYmUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RyYWctZHJvcC1pY29uL2RyYWctZHJvcC1pY29uLnZ1ZT9mZTM3Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9yZW1vdmUtYnV0dG9uL3JlbW92ZS1idXR0b24udnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9yZW1vdmUtYnV0dG9uL3JlbW92ZS1idXR0b24udnVlPzc0YjciLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL3JlbW92ZS1idXR0b24vcmVtb3ZlLWJ1dHRvbi52dWU/YzUzMyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAtY29udGFpbmVyLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAtY29udGFpbmVyLnZ1ZT9hMmZjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9wb3B1cC9wb3B1cC1jb250YWluZXIudnVlP2FjZmQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL3BvcHVwL3BvcHVwLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAudnVlPzEwZDYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL3BvcHVwL3BvcHVwLnZ1ZT85OTczIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9za2VsZXRvbi52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL3NrZWxldG9uLnZ1ZT8zMjMyIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9za2VsZXRvbi52dWU/ODlkMiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvc3ZnLWljb24vc3ZnLWljb24udnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy9zdmctaWNvbi9zdmctaWNvbi52dWU/Yzc3MCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvc3ZnLWljb24vc3ZnLWljb24udnVlP2YwYTEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL3RpdGxlL2RlZmF1bHQtdGl0bGUudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy90aXRsZS9kZWZhdWx0LXRpdGxlLnZ1ZT81ZmY2Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy90aXRsZS9kZWZhdWx0LXRpdGxlLnZ1ZT9jOGViIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy90aXRsZS90aXRsZS1hY3Rpb25zLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtYWN0aW9ucy52dWU/N2M1YyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtYWN0aW9ucy52dWU/Mzg3MCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtY29udGVudC52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWNvbnRlbnQudnVlP2VjOWQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWNvbnRlbnQudnVlP2YwYjYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWVsZW1lbnQudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy90aXRsZS90aXRsZS1lbGVtZW50LnZ1ZT83N2Q2Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9uZW50cy90aXRsZS90aXRsZS1lbGVtZW50LnZ1ZT81ODY3Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY29tcG9zaXRlLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvc2l0ZS52dWU/YmRhMSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2NvbXBvc2l0ZS52dWU/ZGZlNyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2N1c3RvbS52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jdXN0b20udnVlP2ZiYWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jdXN0b20udnVlPzk4M2MiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9jdXN0b213aWRnZXQudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY3VzdG9td2lkZ2V0LnZ1ZT80OWZmIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvY3VzdG9td2lkZ2V0LnZ1ZT9kNWFiIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZHJvcGRvd24udnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZHJvcGRvd24udnVlPzIxODYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9kcm9wZG93bi52dWU/MGNlZCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2VsZW1lbnQudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZWxlbWVudC52dWU/ZWU1MSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2VsZW1lbnQudnVlPzg0YjMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9lbGVtZW50aGVhZGVyLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2VsZW1lbnRoZWFkZXIudnVlPzQxNGIiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9lbGVtZW50aGVhZGVyLnZ1ZT84YzM4Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZW1wdHkudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZW1wdHkudnVlPzlhMDgiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9lbXB0eS52dWU/ODdlMyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Vycm9ycy52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9lcnJvcnMudnVlPzUzMTMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9lcnJvcnMudnVlPzIyMTYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9leHByZXNzaW9uLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2V4cHJlc3Npb24udnVlP2Q2OWMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9leHByZXNzaW9uLnZ1ZT82Y2I5Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZmlsZS52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9maWxlLnZ1ZT8xYjFlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvZmlsZS52dWU/YmQxZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Zsb3dwYW5lbC52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9mbG93cGFuZWwudnVlPzhmOWMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9mbG93cGFuZWwudnVlPzVjNWYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9mbG93cGFuZWxlbGVtZW50LnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2Zsb3dwYW5lbGVsZW1lbnQudnVlP2IzZjkiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9mbG93cGFuZWxlbGVtZW50LnZ1ZT82NmE3Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvaGVhZGVyLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2hlYWRlci52dWU/MGYxNiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2hlYWRlci52dWU/YzRjYiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2h0bWwudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvaHRtbC52dWU/MDExMiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2h0bWwudnVlP2QyZWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9pbWFnZS52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9pbWFnZS52dWU/ZTM2YiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL2ltYWdlLnZ1ZT9mOTgxIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvaW1hZ2VwaWNrZXIudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvaW1hZ2VwaWNrZXIudnVlP2EwN2UiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9pbWFnZXBpY2tlci52dWU/YWYzZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeC52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9tYXRyaXgudnVlP2RiZDEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9tYXRyaXgudnVlP2VlOWQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9tYXRyaXhjZWxsLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeGNlbGwudnVlPzVmNzkiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9tYXRyaXhjZWxsLnZ1ZT81NzMwIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbWF0cml4ZHJvcGRvd24udnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbWF0cml4ZHJvcGRvd24udnVlPzQyY2UiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9tYXRyaXhkcm9wZG93bi52dWU/OTQ5NCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeGR5bmFtaWMudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbWF0cml4ZHluYW1pYy52dWU/YjkyYyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeGR5bmFtaWMudnVlPzVjNWQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9tYXRyaXh0YWJsZS52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9tYXRyaXh0YWJsZS52dWU/NzY5ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL21hdHJpeHRhYmxlLnZ1ZT8zM2Q0Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbXVsdGlwbGV0ZXh0LnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL211bHRpcGxldGV4dC52dWU/ZGNmYyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL211bHRpcGxldGV4dC52dWU/NmY1ZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL25hdmlnYXRpb24udnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvbmF2aWdhdGlvbi52dWU/NDc3YyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL25hdmlnYXRpb24udnVlPzFhZDEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9vdGhlckNob2ljZS52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9vdGhlckNob2ljZS52dWU/ZmUyNCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL290aGVyQ2hvaWNlLnZ1ZT80Y2E5Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFnZS52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wYWdlLnZ1ZT9lMzM5Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFnZS52dWU/ZjlhNyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3BhbmVsLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3BhbmVsLnZ1ZT83N2YwIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFuZWwudnVlP2JlNzIiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWMudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFuZWxkeW5hbWljLnZ1ZT85YmZmIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFuZWxkeW5hbWljLnZ1ZT9hOWNjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFuZWxkeW5hbWljcHJvZ3Jlc3MudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFuZWxkeW5hbWljcHJvZ3Jlc3MudnVlPzAxMDciLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWNwcm9ncmVzcy52dWU/MTkxYSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3BhbmVsZHluYW1pY3Byb2dyZXNzVjIudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFuZWxkeW5hbWljcHJvZ3Jlc3NWMi52dWU/YmVlMiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3BhbmVsZHluYW1pY3Byb2dyZXNzVjIudnVlPzc3YzQiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wYW5lbGR5bmFtaWNyZW1vdmUudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFuZWxkeW5hbWljcmVtb3ZlLnZ1ZT8zYzFiIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcGFuZWxkeW5hbWljcmVtb3ZlLnZ1ZT82NmE4Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcHJvZ3Jlc3MudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcHJvZ3Jlc3MudnVlP2Y3MjYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wcm9ncmVzcy52dWU/YzE4ZCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3Byb2dyZXNzQnV0dG9ucy52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wcm9ncmVzc0J1dHRvbnMudnVlPzI5MTkiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9wcm9ncmVzc0J1dHRvbnMudnVlP2JlYzUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9xdWVzdGlvbi50cyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3JhZGlvZ3JvdXAudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmFkaW9ncm91cC52dWU/NzAxNCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3JhZGlvZ3JvdXAudnVlPzU5NDEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yYWRpb2dyb3VwaXRlbS52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yYWRpb2dyb3VwaXRlbS52dWU/ODBiMyIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3JhZGlvZ3JvdXBpdGVtLnZ1ZT8zMjIwIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmFua2luZy9yYW5raW5nLWl0ZW0udnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmFua2luZy9yYW5raW5nLWl0ZW0udnVlP2ZiNmYiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yYW5raW5nL3JhbmtpbmctaXRlbS52dWU/NTczZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3JhbmtpbmcvcmFua2luZy52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yYW5raW5nL3JhbmtpbmcudnVlPzk5YzUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yYW5raW5nL3JhbmtpbmcudnVlP2E1NTIiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9yYXRpbmcudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmF0aW5nLnZ1ZT8zOGQ2Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcmF0aW5nLnZ1ZT84YmRjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvcm93LnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3Jvdy52dWU/OTE2OSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3Jvdy52dWU/MjA5OCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3NpZ25hdHVyZXBhZC52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9zaWduYXR1cmVwYWQudnVlP2QzN2IiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9zaWduYXR1cmVwYWQudnVlPzkzMjAiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9zdHJpbmctZWRpdG9yLnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3N0cmluZy1lZGl0b3IudnVlP2RmNTMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9zdHJpbmctZWRpdG9yLnZ1ZT8zYjU1Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc3RyaW5nLXZpZXdlci52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9zdHJpbmctdmlld2VyLnZ1ZT83ZTU4Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc3RyaW5nLXZpZXdlci52dWU/N2Y0ZCIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3N0cmluZy52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9zdHJpbmcudnVlP2QxNzEiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9zdHJpbmcudnVlPzg2NmIiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS9zdXJ2ZXkudnVlIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc3VydmV5LnZ1ZT83ZWYwIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc3VydmV5LnZ1ZT9jNTYyIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvc3VydmV5TW9kZWwudHMiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS90ZXh0LnZ1ZSIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3RleHQudnVlPzMzN2MiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS90ZXh0LnZ1ZT8zOGVjIiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvdGltZXJwYW5lbC52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS90aW1lcnBhbmVsLnZ1ZT9mYjc3Iiwid2VicGFjazovL1N1cnZleS8uL3NyYy92dWUvdGltZXJwYW5lbC52dWU/YmYzZiIsIndlYnBhY2s6Ly9TdXJ2ZXkvLi9zcmMvdnVlL3dpbmRvdy52dWUiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS93aW5kb3cudnVlPzI5YjkiLCJ3ZWJwYWNrOi8vU3VydmV5Ly4vc3JjL3Z1ZS93aW5kb3cudnVlPzhmZGYiLCJ3ZWJwYWNrOi8vU3VydmV5L2V4dGVybmFsIHtcInJvb3RcIjpcIlZ1ZVwiLFwiY29tbW9uanMyXCI6XCJ2dWVcIixcImNvbW1vbmpzXCI6XCJ2dWVcIixcImFtZFwiOlwidnVlXCJ9Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87UUNWQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixFQUFFO1FBQ3JJO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlDQUFpQyxlQUFlO1FBQ2hEO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLHNEQUFzRCwrREFBK0Q7O1FBRXJIO1FBQ0E7OztRQUdBO1FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNsRkE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsWUFBWTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQ7QUFDMUQ7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkZBQTJGLGFBQWE7QUFDeEc7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNkJBQTZCOztBQUU3QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDhEQUE4RDs7QUFFOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7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O0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaURBQWlELGdCQUFnQjs7QUFFakU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFlBQVk7QUFDeEIsWUFBWSxVQUFVO0FBQ3RCLFlBQVksVUFBVTtBQUN0QixZQUFZLFVBQVU7QUFDdEIsWUFBWSxjQUFjO0FBQzFCLFlBQVksT0FBTztBQUNuQjs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDJDQUEyQztBQUMzQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnRUFBZ0U7O0FBRWhFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFlBQVk7QUFDeEIsWUFBWSxPQUFPO0FBQ25CLFlBQVksT0FBTztBQUNuQixZQUFZLFlBQVk7QUFDeEI7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksWUFBWTtBQUN4QixZQUFZLE9BQU87QUFDbkIsWUFBWSxPQUFPO0FBQ25CLFlBQVksWUFBWTtBQUN4Qjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFlBQVk7QUFDeEIsWUFBWSxTQUFTO0FBQ3JCLFlBQVksWUFBWTtBQUN4Qjs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksWUFBWTtBQUN4QixZQUFZLFNBQVM7QUFDckIsWUFBWTtBQUNaOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFlBQVk7QUFDeEIsWUFBWSxNQUFNO0FBQ2xCOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksTUFBTTtBQUNsQixZQUFZLE9BQU87QUFDbkIsWUFBWSxPQUFPO0FBQ25COzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQsdUNBQXVDLG9EQUFvRDs7O0FBRzNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOzs7QUFHVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLCtDQUErQzs7QUFFL0M7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5Qzs7QUFFekM7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQzs7QUFFL0M7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9FQUFvRTs7QUFFcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyQ0FBMkM7O0FBRTNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtRkFBbUY7QUFDbkY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUFDQSxLQUFLOzs7QUFHTDtBQUNBLHlEQUF5RDs7QUFFekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsZUFBZTtBQUNmO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7O0FBRVg7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7OztBQUdBOztBQUVBO0FBQ0E7QUFDQSxTQUFTOzs7QUFHVCw0Q0FBNEM7OztBQUc1QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsRUFBRTs7O0FBR1g7QUFDQSxRQUFROzs7QUFHUjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0Q7O0FBRXREO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPLEVBQUU7O0FBRVQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTs7QUFFQSxpQ0FBaUM7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQzs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnTUFBZ007O0FBRWhNO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQzs7QUFFakM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMLDhEQUE4RDs7QUFFOUQ7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtDQUFrQzs7QUFFbEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxPQUFPO0FBQ1AsS0FBSzs7O0FBR0w7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUzs7O0FBR1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOzs7QUFHUDtBQUNBO0FBQ0EsT0FBTzs7O0FBR1A7QUFDQSxnRUFBZ0U7OztBQUdoRTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCOztBQUUxQjs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOzs7QUFHVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qjs7QUFFeEI7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsU0FBUzs7O0FBR1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxXQUFXOzs7QUFHWDtBQUNBO0FBQ0E7O0FBRUEsdUNBQXVDO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FB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O0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUIsOEJBQThCO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPLEVBQUU7O0FBRVQ7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFNBQVM7OztBQUdUO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztB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QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFtQztBQUNBO0FBQ0c7QUFDRjtBQUNDO0FBQ0g7QUFDQztBQUNEO0FBQ0c7QUFDRDtBQUNEO0FBQ0U7QUFDRjtBQUNEO0FBQ0M7QUFDRDtBQUNJO0FBQ0E7QUFDQztBQUNIO0FBQ0M7QUFDRjtBQUNBO0FBQ0M7QUFDRztBQUNBO0FBQ0Q7QUFDRjtBQUNEO0FBQ0k7QUFDRztBQUNMO0FBQ0Q7QUFDQTtBQUNXO0FBQ1g7QUFDQTtBQUNBO0FBQ0Y7QUFDRDtBQUNlO0FBQ1o7QUFDRTtBQUNDO0FBQ0w7Ozs7Ozs7Ozs7Ozs7QUM1Q2xDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FBUztBQUNnQjtBQUN6Qiw2QkFBNkI7QUFFdEIsSUFBSSxPQUFlLENBQUM7QUFDM0IsT0FBTyxHQUFHLEtBQUcsUUFBcUIsQ0FBQztBQUVPO0FBQ1M7QUFXMUI7QUFDbUI7QUFDNEI7QUFRdkI7QUFDMkM7QUFDcEM7QUFPbkM7QUFNWTtBQUMyQztBQUNMO0FBQ0k7QUFDTjtBQVE5QjtBQUNtQjtBQUNDO0FBZWpDO0FBS2lCO0FBQzJEO0FBQzZEO0FBSTVIO0FBSUQ7QUFNUDtBQUlNO0FBQ3NDO0FBQzFCO0FBQ1Y7QUFDQztBQUNlO0FBQ2I7QUFDZ0I7QUFDQTtBQUl2QjtBQUM2QjtBQUNGO0FBQ0E7QUFDRTtBQUNRO0FBQ2hCO0FBQ0E7QUFDWTtBQUNSO0FBQ1E7QUFDWjtBQUNNO0FBSTFCO0FBQ3NCO0FBQ2M7QUFJbkM7QUFDVztBQUNXO0FBQ2M7QUFDOUI7QUFTcEI7QUFDZ0M7QUFDRztBQUVGO0FBQ0k7QUFDWTtBQUN4RSxtREFBbUQ7QUFJZDtBQU1OO0FBRXFCO0FBQ2I7QUFDaUQ7QUFLcEQ7QUFDYTtBQVN0QjtBQUNpQjtBQUVhO0FBQ3pELGdEQUFnRDtBQUNoRCwyRUFBMkU7QUFFSDtBQUNmOzs7Ozs7Ozs7Ozs7O0FDN0x6RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBQVE7QUFDdUI7QUFFL0IsZUFBZTtBQUNnQjtBQUUvQix1QkFBdUI7QUFDd0M7QUFDL0Qsd0JBQXdCO0FBQ3lDO0FBQ2pFLG1DQUFtQztBQUM4QztBQUV2QjtBQUMxRCxxQkFBcUI7QUFDK0I7QUFFcEQsUUFBUTtBQUMyQjtBQUNXO0FBQ047QUFDTjtBQUNZO0FBQ1Q7Ozs7Ozs7Ozs7Ozs7QUN2QnJDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFvRDtBQUNqQjtBQUN1QjtBQUNYO0FBQ0o7QUFDWTtBQUNOO0FBQ2E7QUFDQTtBQUNSO0FBQ1g7QUFDSjtBQUNZO0FBQ1E7QUFDTjtBQUNWO0FBQ0U7QUFDUTtBQUNTO0FBQ2Y7QUFDUTtBQUNGO0FBQ1E7QUFDZDtBQUNOO0FBQ2lCO0FBQ0k7QUFDckI7QUFDYztBQUNaO0FBQ0k7QUFDUjtBQUNZO0FBQ0U7QUFDTTtBQUNGO0FBQ2Q7QUFDSjtBQUNZO0FBQ0U7QUFDRTtBQUNZO0FBQ0k7QUFDSTtBQUN4QjtBQUNKO0FBQ2M7QUFDVjtBQUNWO0FBQ1E7QUFDYztBQUMxQjtBQUNvQjtBQUNSO0FBQ007QUFDTjtBQUNOO0FBQ007QUFFd0I7QUFDQTtBQUNBO0FBQ0E7QUFDUTtBQUNmO0FBQ1I7QUFDSDtBQUNvRTtBQUNQO0FBQ1M7QUFDbkU7Ozs7Ozs7Ozs7Ozs7QUN0RTFEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FB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LElBQUksQ0FBQyxnREFBTyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQzVDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQzthQUNuQztZQUNELElBQUksQ0FBQyxnREFBTyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQzVDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQzthQUNuQztZQUNELElBQUksQ0FBQyxnREFBTyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQzVDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQzthQUNuQztZQUNELElBQUksQ0FBQyxnREFBTyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQzVDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQzthQUNuQztZQUNELElBQUksQ0FBQyxnREFBTyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtnQkFDcEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQzthQUNuRDtZQUNELElBQUksQ0FBQyxnREFBTyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQzlDLElBQUksQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQzthQUN2QztZQUNELElBQUksQ0FBQyxnREFBTyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQzVDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQzthQUNuQztZQUNELElBQUksUUFBUSxDQUFDLE9BQU8sS0FBSyxJQUFJLElBQUksUUFBUSxDQUFDLE9BQU8sS0FBSyxLQUFLLEVBQUU7Z0JBQzNELElBQUksQ0FBQyxPQUFPLEdBQUcsUUFB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QUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxLQUFLO1FBQ0wsS0FBSztRQUNMLEtB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Ozs7QUN0Q2Y7QUFBQTtBQUFBO0FBQUE7QUFBcUssQ0FBZ0IsdU9BQUcsRUFBQyxDOzs7Ozs7Ozs7Ozs7QUNBekw7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7O0FDQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQXlGO0FBQzNCO0FBQ0w7OztBQUd6RDtBQUMwRjtBQUMxRixnQkFBZ0IsMkdBQVU7QUFDMUIsRUFBRSxnRkFBTTtBQUNSLEVBQUUscUZBQU07QUFDUixFQUFFLDhGQUFlO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsSUFBSSxLQUFVLEVBQUUsWUFpQmY7QUFDRDtBQUNlLGdGOzs7Ozs7Ozs7Ozs7QUN0Q2Y7QUFBQTtBQUFBO0FBQUE7QUFBMkssQ0FBZ0IsNk9BQUcsRUFBQyxDOzs7Ozs7Ozs7Ozs7QUNBL0w7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7O0FDQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQXFGO0FBQzNCO0FBQ0w7OztBQUdyRDtBQUMwRjtBQUMxRixnQkFBZ0IsMkdBQVU7QUFDMUIsRUFBRSw0RUFBTTtBQUNSLEVBQUUsaUZBQU07QUFDUixFQUFFLDBGQUFlO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsSUFBSSxLQUFVLEVBQUUsWUFpQmY7QUFDRDtBQUNlLGdGOzs7Ozs7Ozs7Ozs7QUN0Q2Y7QUFBQTtBQUFBO0FBQUE7QUFBdUssQ0FBZ0IseU9BQUcsRUFBQyxDOzs7Ozs7Ozs7Ozs7QUNBM0w7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7QUNBQSxpRCIsImZpbGUiOiJzdXJ2ZXkudnVlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwidnVlXCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwic3VydmV5LXZ1ZVwiLCBbXCJ2dWVcIl0sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wic3VydmV5LXZ1ZVwiXSA9IGZhY3RvcnkocmVxdWlyZShcInZ1ZVwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiU3VydmV5XCJdID0gZmFjdG9yeShyb290W1wiVnVlXCJdKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfdnVlX18pIHtcbnJldHVybiAiLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9lbnRyaWVzL3Z1ZS50c1wiKTtcbiIsIi8qIVxuICogU2lnbmF0dXJlIFBhZCB2Mi4zLjJcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9zemltZWsvc2lnbmF0dXJlX3BhZFxuICpcbiAqIENvcHlyaWdodCAyMDE3IFN6eW1vbiBOb3dha1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKlxuICogVGhlIG1haW4gaWRlYSBhbmQgc29tZSBwYXJ0cyBvZiB0aGUgY29kZSAoZS5nLiBkcmF3aW5nIHZhcmlhYmxlIHdpZHRoIELDqXppZXIgY3VydmUpIGFyZSB0YWtlbiBmcm9tOlxuICogaHR0cDovL2Nvcm5lci5zcXVhcmV1cC5jb20vMjAxMi8wNy9zbW9vdGhlci1zaWduYXR1cmVzLmh0bWxcbiAqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiBpbnRlcnBvbGF0aW9uIHVzaW5nIGN1YmljIELDqXppZXIgY3VydmVzIGlzIHRha2VuIGZyb206XG4gKiBodHRwOi8vYmVua25vd3Njb2RlLndvcmRwcmVzcy5jb20vMjAxMi8wOS8xNC9wYXRoLWludGVycG9sYXRpb24tdXNpbmctY3ViaWMtYmV6aWVyLWFuZC1jb250cm9sLXBvaW50LWVzdGltYXRpb24taW4tamF2YXNjcmlwdFxuICpcbiAqIEFsZ29yaXRobSBmb3IgYXBwcm94aW1hdGVkIGxlbmd0aCBvZiBhIELDqXppZXIgY3VydmUgaXMgdGFrZW4gZnJvbTpcbiAqIGh0dHA6Ly93d3cubGVtb2RhLm5ldC9tYXRocy9iZXppZXItbGVuZ3RoL2luZGV4Lmh0bWxcbiAqXG4gKi9cblxuZnVuY3Rpb24gUG9pbnQoeCwgeSwgdGltZSkge1xuICB0aGlzLnggPSB4O1xuICB0aGlzLnkgPSB5O1xuICB0aGlzLnRpbWUgPSB0aW1lIHx8IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xufVxuXG5Qb2ludC5wcm90b3R5cGUudmVsb2NpdHlGcm9tID0gZnVuY3Rpb24gKHN0YXJ0KSB7XG4gIHJldHVybiB0aGlzLnRpbWUgIT09IHN0YXJ0LnRpbWUgPyB0aGlzLmRpc3RhbmNlVG8oc3RhcnQpIC8gKHRoaXMudGltZSAtIHN0YXJ0LnRpbWUpIDogMTtcbn07XG5cblBvaW50LnByb3RvdHlwZS5kaXN0YW5jZVRvID0gZnVuY3Rpb24gKHN0YXJ0KSB7XG4gIHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3codGhpcy54IC0gc3RhcnQueCwgMikgKyBNYXRoLnBvdyh0aGlzLnkgLSBzdGFydC55LCAyKSk7XG59O1xuXG5Qb2ludC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKG90aGVyKSB7XG4gIHJldHVybiB0aGlzLnggPT09IG90aGVyLnggJiYgdGhpcy55ID09PSBvdGhlci55ICYmIHRoaXMudGltZSA9PT0gb3RoZXIudGltZTtcbn07XG5cbmZ1bmN0aW9uIEJlemllcihzdGFydFBvaW50LCBjb250cm9sMSwgY29udHJvbDIsIGVuZFBvaW50KSB7XG4gIHRoaXMuc3RhcnRQb2ludCA9IHN0YXJ0UG9pbnQ7XG4gIHRoaXMuY29udHJvbDEgPSBjb250cm9sMTtcbiAgdGhpcy5jb250cm9sMiA9IGNvbnRyb2wyO1xuICB0aGlzLmVuZFBvaW50ID0gZW5kUG9pbnQ7XG59XG5cbi8vIFJldHVybnMgYXBwcm94aW1hdGVkIGxlbmd0aC5cbkJlemllci5wcm90b3R5cGUubGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICB2YXIgc3RlcHMgPSAxMDtcbiAgdmFyIGxlbmd0aCA9IDA7XG4gIHZhciBweCA9IHZvaWQgMDtcbiAgdmFyIHB5ID0gdm9pZCAwO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDw9IHN0ZXBzOyBpICs9IDEpIHtcbiAgICB2YXIgdCA9IGkgLyBzdGVwcztcbiAgICB2YXIgY3ggPSB0aGlzLl9wb2ludCh0LCB0aGlzLnN0YXJ0UG9pbnQueCwgdGhpcy5jb250cm9sMS54LCB0aGlzLmNvbnRyb2wyLngsIHRoaXMuZW5kUG9pbnQueCk7XG4gICAgdmFyIGN5ID0gdGhpcy5fcG9pbnQodCwgdGhpcy5zdGFydFBvaW50LnksIHRoaXMuY29udHJvbDEueSwgdGhpcy5jb250cm9sMi55LCB0aGlzLmVuZFBvaW50LnkpO1xuICAgIGlmIChpID4gMCkge1xuICAgICAgdmFyIHhkaWZmID0gY3ggLSBweDtcbiAgICAgIHZhciB5ZGlmZiA9IGN5IC0gcHk7XG4gICAgICBsZW5ndGggKz0gTWF0aC5zcXJ0KHhkaWZmICogeGRpZmYgKyB5ZGlmZiAqIHlkaWZmKTtcbiAgICB9XG4gICAgcHggPSBjeDtcbiAgICBweSA9IGN5O1xuICB9XG5cbiAgcmV0dXJuIGxlbmd0aDtcbn07XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLW11bHRpLXNwYWNlcywgc3BhY2UtaW4tcGFyZW5zICovXG5CZXppZXIucHJvdG90eXBlLl9wb2ludCA9IGZ1bmN0aW9uICh0LCBzdGFydCwgYzEsIGMyLCBlbmQpIHtcbiAgcmV0dXJuIHN0YXJ0ICogKDEuMCAtIHQpICogKDEuMCAtIHQpICogKDEuMCAtIHQpICsgMy4wICogYzEgKiAoMS4wIC0gdCkgKiAoMS4wIC0gdCkgKiB0ICsgMy4wICogYzIgKiAoMS4wIC0gdCkgKiB0ICogdCArIGVuZCAqIHQgKiB0ICogdDtcbn07XG5cbi8qIGVzbGludC1kaXNhYmxlICovXG5cbi8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI3MDc4NDAxLzgxNTUwN1xuZnVuY3Rpb24gdGhyb3R0bGUoZnVuYywgd2FpdCwgb3B0aW9ucykge1xuICB2YXIgY29udGV4dCwgYXJncywgcmVzdWx0O1xuICB2YXIgdGltZW91dCA9IG51bGw7XG4gIHZhciBwcmV2aW91cyA9IDA7XG4gIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuICB2YXIgbGF0ZXIgPSBmdW5jdGlvbiBsYXRlcigpIHtcbiAgICBwcmV2aW91cyA9IG9wdGlvbnMubGVhZGluZyA9PT0gZmFsc2UgPyAwIDogRGF0ZS5ub3coKTtcbiAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICB9O1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmICghcHJldmlvdXMgJiYgb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSkgcHJldmlvdXMgPSBub3c7XG4gICAgdmFyIHJlbWFpbmluZyA9IHdhaXQgLSAobm93IC0gcHJldmlvdXMpO1xuICAgIGNvbnRleHQgPSB0aGlzO1xuICAgIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgaWYgKHJlbWFpbmluZyA8PSAwIHx8IHJlbWFpbmluZyA+IHdhaXQpIHtcbiAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICB9XG4gICAgICBwcmV2aW91cyA9IG5vdztcbiAgICAgIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICB9IGVsc2UgaWYgKCF0aW1lb3V0ICYmIG9wdGlvbnMudHJhaWxpbmcgIT09IGZhbHNlKSB7XG4gICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgcmVtYWluaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gU2lnbmF0dXJlUGFkKGNhbnZhcywgb3B0aW9ucykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBvcHRzID0gb3B0aW9ucyB8fCB7fTtcblxuICB0aGlzLnZlbG9jaXR5RmlsdGVyV2VpZ2h0ID0gb3B0cy52ZWxvY2l0eUZpbHRlcldlaWdodCB8fCAwLjc7XG4gIHRoaXMubWluV2lkdGggPSBvcHRzLm1pbldpZHRoIHx8IDAuNTtcbiAgdGhpcy5tYXhXaWR0aCA9IG9wdHMubWF4V2lkdGggfHwgMi41O1xuICB0aGlzLnRocm90dGxlID0gJ3Rocm90dGxlJyBpbiBvcHRzID8gb3B0cy50aHJvdHRsZSA6IDE2OyAvLyBpbiBtaWxpc2Vjb25kc1xuICB0aGlzLm1pbkRpc3RhbmNlID0gJ21pbkRpc3RhbmNlJyBpbiBvcHRzID8gb3B0cy5taW5EaXN0YW5jZSA6IDU7XG5cbiAgaWYgKHRoaXMudGhyb3R0bGUpIHtcbiAgICB0aGlzLl9zdHJva2VNb3ZlVXBkYXRlID0gdGhyb3R0bGUoU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5fc3Ryb2tlVXBkYXRlLCB0aGlzLnRocm90dGxlKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9zdHJva2VNb3ZlVXBkYXRlID0gU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5fc3Ryb2tlVXBkYXRlO1xuICB9XG5cbiAgdGhpcy5kb3RTaXplID0gb3B0cy5kb3RTaXplIHx8IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gKHRoaXMubWluV2lkdGggKyB0aGlzLm1heFdpZHRoKSAvIDI7XG4gIH07XG4gIHRoaXMucGVuQ29sb3IgPSBvcHRzLnBlbkNvbG9yIHx8ICdibGFjayc7XG4gIHRoaXMuYmFja2dyb3VuZENvbG9yID0gb3B0cy5iYWNrZ3JvdW5kQ29sb3IgfHwgJ3JnYmEoMCwwLDAsMCknO1xuICB0aGlzLm9uQmVnaW4gPSBvcHRzLm9uQmVnaW47XG4gIHRoaXMub25FbmQgPSBvcHRzLm9uRW5kO1xuXG4gIHRoaXMuX2NhbnZhcyA9IGNhbnZhcztcbiAgdGhpcy5fY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gIHRoaXMuY2xlYXIoKTtcblxuICAvLyBXZSBuZWVkIGFkZCB0aGVzZSBpbmxpbmUgc28gdGhleSBhcmUgYXZhaWxhYmxlIHRvIHVuYmluZCB3aGlsZSBzdGlsbCBoYXZpbmdcbiAgLy8gYWNjZXNzIHRvICdzZWxmJyB3ZSBjb3VsZCB1c2UgXy5iaW5kIGJ1dCBpdCdzIG5vdCB3b3J0aCBhZGRpbmcgYSBkZXBlbmRlbmN5LlxuICB0aGlzLl9oYW5kbGVNb3VzZURvd24gPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQud2hpY2ggPT09IDEpIHtcbiAgICAgIHNlbGYuX21vdXNlQnV0dG9uRG93biA9IHRydWU7XG4gICAgICBzZWxmLl9zdHJva2VCZWdpbihldmVudCk7XG4gICAgfVxuICB9O1xuXG4gIHRoaXMuX2hhbmRsZU1vdXNlTW92ZSA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChzZWxmLl9tb3VzZUJ1dHRvbkRvd24pIHtcbiAgICAgIHNlbGYuX3N0cm9rZU1vdmVVcGRhdGUoZXZlbnQpO1xuICAgIH1cbiAgfTtcblxuICB0aGlzLl9oYW5kbGVNb3VzZVVwID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LndoaWNoID09PSAxICYmIHNlbGYuX21vdXNlQnV0dG9uRG93bikge1xuICAgICAgc2VsZi5fbW91c2VCdXR0b25Eb3duID0gZmFsc2U7XG4gICAgICBzZWxmLl9zdHJva2VFbmQoZXZlbnQpO1xuICAgIH1cbiAgfTtcblxuICB0aGlzLl9oYW5kbGVUb3VjaFN0YXJ0ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnRhcmdldFRvdWNoZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICB2YXIgdG91Y2ggPSBldmVudC5jaGFuZ2VkVG91Y2hlc1swXTtcbiAgICAgIHNlbGYuX3N0cm9rZUJlZ2luKHRvdWNoKTtcbiAgICB9XG4gIH07XG5cbiAgdGhpcy5faGFuZGxlVG91Y2hNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgLy8gUHJldmVudCBzY3JvbGxpbmcuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIHZhciB0b3VjaCA9IGV2ZW50LnRhcmdldFRvdWNoZXNbMF07XG4gICAgc2VsZi5fc3Ryb2tlTW92ZVVwZGF0ZSh0b3VjaCk7XG4gIH07XG5cbiAgdGhpcy5faGFuZGxlVG91Y2hFbmQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB2YXIgd2FzQ2FudmFzVG91Y2hlZCA9IGV2ZW50LnRhcmdldCA9PT0gc2VsZi5fY2FudmFzO1xuICAgIGlmICh3YXNDYW52YXNUb3VjaGVkKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgc2VsZi5fc3Ryb2tlRW5kKGV2ZW50KTtcbiAgICB9XG4gIH07XG5cbiAgLy8gRW5hYmxlIG1vdXNlIGFuZCB0b3VjaCBldmVudCBoYW5kbGVyc1xuICB0aGlzLm9uKCk7XG59XG5cbi8vIFB1YmxpYyBtZXRob2RzXG5TaWduYXR1cmVQYWQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgY3R4ID0gdGhpcy5fY3R4O1xuICB2YXIgY2FudmFzID0gdGhpcy5fY2FudmFzO1xuXG4gIGN0eC5maWxsU3R5bGUgPSB0aGlzLmJhY2tncm91bmRDb2xvcjtcbiAgY3R4LmNsZWFyUmVjdCgwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xuICBjdHguZmlsbFJlY3QoMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcblxuICB0aGlzLl9kYXRhID0gW107XG4gIHRoaXMuX3Jlc2V0KCk7XG4gIHRoaXMuX2lzRW1wdHkgPSB0cnVlO1xufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5mcm9tRGF0YVVSTCA9IGZ1bmN0aW9uIChkYXRhVXJsKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gIHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICB2YXIgcmF0aW8gPSBvcHRpb25zLnJhdGlvIHx8IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG4gIHZhciB3aWR0aCA9IG9wdGlvbnMud2lkdGggfHwgdGhpcy5fY2FudmFzLndpZHRoIC8gcmF0aW87XG4gIHZhciBoZWlnaHQgPSBvcHRpb25zLmhlaWdodCB8fCB0aGlzLl9jYW52YXMuaGVpZ2h0IC8gcmF0aW87XG5cbiAgdGhpcy5fcmVzZXQoKTtcbiAgaW1hZ2Uuc3JjID0gZGF0YVVybDtcbiAgaW1hZ2Uub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgIF90aGlzLl9jdHguZHJhd0ltYWdlKGltYWdlLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgfTtcbiAgdGhpcy5faXNFbXB0eSA9IGZhbHNlO1xufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS50b0RhdGFVUkwgPSBmdW5jdGlvbiAodHlwZSkge1xuICB2YXIgX2NhbnZhcztcblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdpbWFnZS9zdmcreG1sJzpcbiAgICAgIHJldHVybiB0aGlzLl90b1NWRygpO1xuICAgIGRlZmF1bHQ6XG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgb3B0aW9ucyA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgb3B0aW9uc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoX2NhbnZhcyA9IHRoaXMuX2NhbnZhcykudG9EYXRhVVJMLmFwcGx5KF9jYW52YXMsIFt0eXBlXS5jb25jYXQob3B0aW9ucykpO1xuICB9XG59O1xuXG5TaWduYXR1cmVQYWQucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9oYW5kbGVNb3VzZUV2ZW50cygpO1xuICB0aGlzLl9oYW5kbGVUb3VjaEV2ZW50cygpO1xufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5vZmYgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX2NhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLl9oYW5kbGVNb3VzZURvd24pO1xuICB0aGlzLl9jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5faGFuZGxlTW91c2VNb3ZlKTtcbiAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMuX2hhbmRsZU1vdXNlVXApO1xuXG4gIHRoaXMuX2NhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5faGFuZGxlVG91Y2hTdGFydCk7XG4gIHRoaXMuX2NhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLl9oYW5kbGVUb3VjaE1vdmUpO1xuICB0aGlzLl9jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLl9oYW5kbGVUb3VjaEVuZCk7XG59O1xuXG5TaWduYXR1cmVQYWQucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLl9pc0VtcHR5O1xufTtcblxuLy8gUHJpdmF0ZSBtZXRob2RzXG5TaWduYXR1cmVQYWQucHJvdG90eXBlLl9zdHJva2VCZWdpbiA9IGZ1bmN0aW9uIChldmVudCkge1xuICB0aGlzLl9kYXRhLnB1c2goW10pO1xuICB0aGlzLl9yZXNldCgpO1xuICB0aGlzLl9zdHJva2VVcGRhdGUoZXZlbnQpO1xuXG4gIGlmICh0eXBlb2YgdGhpcy5vbkJlZ2luID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhpcy5vbkJlZ2luKGV2ZW50KTtcbiAgfVxufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5fc3Ryb2tlVXBkYXRlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHZhciB4ID0gZXZlbnQuY2xpZW50WDtcbiAgdmFyIHkgPSBldmVudC5jbGllbnRZO1xuXG4gIHZhciBwb2ludCA9IHRoaXMuX2NyZWF0ZVBvaW50KHgsIHkpO1xuICB2YXIgbGFzdFBvaW50R3JvdXAgPSB0aGlzLl9kYXRhW3RoaXMuX2RhdGEubGVuZ3RoIC0gMV07XG4gIHZhciBsYXN0UG9pbnQgPSBsYXN0UG9pbnRHcm91cCAmJiBsYXN0UG9pbnRHcm91cFtsYXN0UG9pbnRHcm91cC5sZW5ndGggLSAxXTtcbiAgdmFyIGlzTGFzdFBvaW50VG9vQ2xvc2UgPSBsYXN0UG9pbnQgJiYgcG9pbnQuZGlzdGFuY2VUbyhsYXN0UG9pbnQpIDwgdGhpcy5taW5EaXN0YW5jZTtcblxuICAvLyBTa2lwIHRoaXMgcG9pbnQgaWYgaXQncyB0b28gY2xvc2UgdG8gdGhlIHByZXZpb3VzIG9uZVxuICBpZiAoIShsYXN0UG9pbnQgJiYgaXNMYXN0UG9pbnRUb29DbG9zZSkpIHtcbiAgICB2YXIgX2FkZFBvaW50ID0gdGhpcy5fYWRkUG9pbnQocG9pbnQpLFxuICAgICAgICBjdXJ2ZSA9IF9hZGRQb2ludC5jdXJ2ZSxcbiAgICAgICAgd2lkdGhzID0gX2FkZFBvaW50LndpZHRocztcblxuICAgIGlmIChjdXJ2ZSAmJiB3aWR0aHMpIHtcbiAgICAgIHRoaXMuX2RyYXdDdXJ2ZShjdXJ2ZSwgd2lkdGhzLnN0YXJ0LCB3aWR0aHMuZW5kKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kYXRhW3RoaXMuX2RhdGEubGVuZ3RoIC0gMV0ucHVzaCh7XG4gICAgICB4OiBwb2ludC54LFxuICAgICAgeTogcG9pbnQueSxcbiAgICAgIHRpbWU6IHBvaW50LnRpbWUsXG4gICAgICBjb2xvcjogdGhpcy5wZW5Db2xvclxuICAgIH0pO1xuICB9XG59O1xuXG5TaWduYXR1cmVQYWQucHJvdG90eXBlLl9zdHJva2VFbmQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgdmFyIGNhbkRyYXdDdXJ2ZSA9IHRoaXMucG9pbnRzLmxlbmd0aCA+IDI7XG4gIHZhciBwb2ludCA9IHRoaXMucG9pbnRzWzBdOyAvLyBQb2ludCBpbnN0YW5jZVxuXG4gIGlmICghY2FuRHJhd0N1cnZlICYmIHBvaW50KSB7XG4gICAgdGhpcy5fZHJhd0RvdChwb2ludCk7XG4gIH1cblxuICBpZiAocG9pbnQpIHtcbiAgICB2YXIgbGFzdFBvaW50R3JvdXAgPSB0aGlzLl9kYXRhW3RoaXMuX2RhdGEubGVuZ3RoIC0gMV07XG4gICAgdmFyIGxhc3RQb2ludCA9IGxhc3RQb2ludEdyb3VwW2xhc3RQb2ludEdyb3VwLmxlbmd0aCAtIDFdOyAvLyBwbGFpbiBvYmplY3RcblxuICAgIC8vIFdoZW4gZHJhd2luZyBhIGRvdCwgdGhlcmUncyBvbmx5IG9uZSBwb2ludCBpbiBhIGdyb3VwLCBzbyB3aXRob3V0IHRoaXMgY2hlY2tcbiAgICAvLyBzdWNoIGdyb3VwIHdvdWxkIGVuZCB1cCB3aXRoIGV4YWN0bHkgdGhlIHNhbWUgMiBwb2ludHMuXG4gICAgaWYgKCFwb2ludC5lcXVhbHMobGFzdFBvaW50KSkge1xuICAgICAgbGFzdFBvaW50R3JvdXAucHVzaCh7XG4gICAgICAgIHg6IHBvaW50LngsXG4gICAgICAgIHk6IHBvaW50LnksXG4gICAgICAgIHRpbWU6IHBvaW50LnRpbWUsXG4gICAgICAgIGNvbG9yOiB0aGlzLnBlbkNvbG9yXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHRoaXMub25FbmQgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLm9uRW5kKGV2ZW50KTtcbiAgfVxufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5faGFuZGxlTW91c2VFdmVudHMgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuX21vdXNlQnV0dG9uRG93biA9IGZhbHNlO1xuXG4gIHRoaXMuX2NhbnZhcy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLl9oYW5kbGVNb3VzZURvd24pO1xuICB0aGlzLl9jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5faGFuZGxlTW91c2VNb3ZlKTtcbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMuX2hhbmRsZU1vdXNlVXApO1xufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5faGFuZGxlVG91Y2hFdmVudHMgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFBhc3MgdG91Y2ggZXZlbnRzIHRvIGNhbnZhcyBlbGVtZW50IG9uIG1vYmlsZSBJRTExIGFuZCBFZGdlLlxuICB0aGlzLl9jYW52YXMuc3R5bGUubXNUb3VjaEFjdGlvbiA9ICdub25lJztcbiAgdGhpcy5fY2FudmFzLnN0eWxlLnRvdWNoQWN0aW9uID0gJ25vbmUnO1xuXG4gIHRoaXMuX2NhbnZhcy5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5faGFuZGxlVG91Y2hTdGFydCk7XG4gIHRoaXMuX2NhbnZhcy5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLl9oYW5kbGVUb3VjaE1vdmUpO1xuICB0aGlzLl9jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLl9oYW5kbGVUb3VjaEVuZCk7XG59O1xuXG5TaWduYXR1cmVQYWQucHJvdG90eXBlLl9yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5wb2ludHMgPSBbXTtcbiAgdGhpcy5fbGFzdFZlbG9jaXR5ID0gMDtcbiAgdGhpcy5fbGFzdFdpZHRoID0gKHRoaXMubWluV2lkdGggKyB0aGlzLm1heFdpZHRoKSAvIDI7XG4gIHRoaXMuX2N0eC5maWxsU3R5bGUgPSB0aGlzLnBlbkNvbG9yO1xufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5fY3JlYXRlUG9pbnQgPSBmdW5jdGlvbiAoeCwgeSwgdGltZSkge1xuICB2YXIgcmVjdCA9IHRoaXMuX2NhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICByZXR1cm4gbmV3IFBvaW50KHggLSByZWN0LmxlZnQsIHkgLSByZWN0LnRvcCwgdGltZSB8fCBuZXcgRGF0ZSgpLmdldFRpbWUoKSk7XG59O1xuXG5TaWduYXR1cmVQYWQucHJvdG90eXBlLl9hZGRQb2ludCA9IGZ1bmN0aW9uIChwb2ludCkge1xuICB2YXIgcG9pbnRzID0gdGhpcy5wb2ludHM7XG4gIHZhciB0bXAgPSB2b2lkIDA7XG5cbiAgcG9pbnRzLnB1c2gocG9pbnQpO1xuXG4gIGlmIChwb2ludHMubGVuZ3RoID4gMikge1xuICAgIC8vIFRvIHJlZHVjZSB0aGUgaW5pdGlhbCBsYWcgbWFrZSBpdCB3b3JrIHdpdGggMyBwb2ludHNcbiAgICAvLyBieSBjb3B5aW5nIHRoZSBmaXJzdCBwb2ludCB0byB0aGUgYmVnaW5uaW5nLlxuICAgIGlmIChwb2ludHMubGVuZ3RoID09PSAzKSBwb2ludHMudW5zaGlmdChwb2ludHNbMF0pO1xuXG4gICAgdG1wID0gdGhpcy5fY2FsY3VsYXRlQ3VydmVDb250cm9sUG9pbnRzKHBvaW50c1swXSwgcG9pbnRzWzFdLCBwb2ludHNbMl0pO1xuICAgIHZhciBjMiA9IHRtcC5jMjtcbiAgICB0bXAgPSB0aGlzLl9jYWxjdWxhdGVDdXJ2ZUNvbnRyb2xQb2ludHMocG9pbnRzWzFdLCBwb2ludHNbMl0sIHBvaW50c1szXSk7XG4gICAgdmFyIGMzID0gdG1wLmMxO1xuICAgIHZhciBjdXJ2ZSA9IG5ldyBCZXppZXIocG9pbnRzWzFdLCBjMiwgYzMsIHBvaW50c1syXSk7XG4gICAgdmFyIHdpZHRocyA9IHRoaXMuX2NhbGN1bGF0ZUN1cnZlV2lkdGhzKGN1cnZlKTtcblxuICAgIC8vIFJlbW92ZSB0aGUgZmlyc3QgZWxlbWVudCBmcm9tIHRoZSBsaXN0LFxuICAgIC8vIHNvIHRoYXQgd2UgYWx3YXlzIGhhdmUgbm8gbW9yZSB0aGFuIDQgcG9pbnRzIGluIHBvaW50cyBhcnJheS5cbiAgICBwb2ludHMuc2hpZnQoKTtcblxuICAgIHJldHVybiB7IGN1cnZlOiBjdXJ2ZSwgd2lkdGhzOiB3aWR0aHMgfTtcbiAgfVxuXG4gIHJldHVybiB7fTtcbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUuX2NhbGN1bGF0ZUN1cnZlQ29udHJvbFBvaW50cyA9IGZ1bmN0aW9uIChzMSwgczIsIHMzKSB7XG4gIHZhciBkeDEgPSBzMS54IC0gczIueDtcbiAgdmFyIGR5MSA9IHMxLnkgLSBzMi55O1xuICB2YXIgZHgyID0gczIueCAtIHMzLng7XG4gIHZhciBkeTIgPSBzMi55IC0gczMueTtcblxuICB2YXIgbTEgPSB7IHg6IChzMS54ICsgczIueCkgLyAyLjAsIHk6IChzMS55ICsgczIueSkgLyAyLjAgfTtcbiAgdmFyIG0yID0geyB4OiAoczIueCArIHMzLngpIC8gMi4wLCB5OiAoczIueSArIHMzLnkpIC8gMi4wIH07XG5cbiAgdmFyIGwxID0gTWF0aC5zcXJ0KGR4MSAqIGR4MSArIGR5MSAqIGR5MSk7XG4gIHZhciBsMiA9IE1hdGguc3FydChkeDIgKiBkeDIgKyBkeTIgKiBkeTIpO1xuXG4gIHZhciBkeG0gPSBtMS54IC0gbTIueDtcbiAgdmFyIGR5bSA9IG0xLnkgLSBtMi55O1xuXG4gIHZhciBrID0gbDIgLyAobDEgKyBsMik7XG4gIHZhciBjbSA9IHsgeDogbTIueCArIGR4bSAqIGssIHk6IG0yLnkgKyBkeW0gKiBrIH07XG5cbiAgdmFyIHR4ID0gczIueCAtIGNtLng7XG4gIHZhciB0eSA9IHMyLnkgLSBjbS55O1xuXG4gIHJldHVybiB7XG4gICAgYzE6IG5ldyBQb2ludChtMS54ICsgdHgsIG0xLnkgKyB0eSksXG4gICAgYzI6IG5ldyBQb2ludChtMi54ICsgdHgsIG0yLnkgKyB0eSlcbiAgfTtcbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUuX2NhbGN1bGF0ZUN1cnZlV2lkdGhzID0gZnVuY3Rpb24gKGN1cnZlKSB7XG4gIHZhciBzdGFydFBvaW50ID0gY3VydmUuc3RhcnRQb2ludDtcbiAgdmFyIGVuZFBvaW50ID0gY3VydmUuZW5kUG9pbnQ7XG4gIHZhciB3aWR0aHMgPSB7IHN0YXJ0OiBudWxsLCBlbmQ6IG51bGwgfTtcblxuICB2YXIgdmVsb2NpdHkgPSB0aGlzLnZlbG9jaXR5RmlsdGVyV2VpZ2h0ICogZW5kUG9pbnQudmVsb2NpdHlGcm9tKHN0YXJ0UG9pbnQpICsgKDEgLSB0aGlzLnZlbG9jaXR5RmlsdGVyV2VpZ2h0KSAqIHRoaXMuX2xhc3RWZWxvY2l0eTtcblxuICB2YXIgbmV3V2lkdGggPSB0aGlzLl9zdHJva2VXaWR0aCh2ZWxvY2l0eSk7XG5cbiAgd2lkdGhzLnN0YXJ0ID0gdGhpcy5fbGFzdFdpZHRoO1xuICB3aWR0aHMuZW5kID0gbmV3V2lkdGg7XG5cbiAgdGhpcy5fbGFzdFZlbG9jaXR5ID0gdmVsb2NpdHk7XG4gIHRoaXMuX2xhc3RXaWR0aCA9IG5ld1dpZHRoO1xuXG4gIHJldHVybiB3aWR0aHM7XG59O1xuXG5TaWduYXR1cmVQYWQucHJvdG90eXBlLl9zdHJva2VXaWR0aCA9IGZ1bmN0aW9uICh2ZWxvY2l0eSkge1xuICByZXR1cm4gTWF0aC5tYXgodGhpcy5tYXhXaWR0aCAvICh2ZWxvY2l0eSArIDEpLCB0aGlzLm1pbldpZHRoKTtcbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUuX2RyYXdQb2ludCA9IGZ1bmN0aW9uICh4LCB5LCBzaXplKSB7XG4gIHZhciBjdHggPSB0aGlzLl9jdHg7XG5cbiAgY3R4Lm1vdmVUbyh4LCB5KTtcbiAgY3R4LmFyYyh4LCB5LCBzaXplLCAwLCAyICogTWF0aC5QSSwgZmFsc2UpO1xuICB0aGlzLl9pc0VtcHR5ID0gZmFsc2U7XG59O1xuXG5TaWduYXR1cmVQYWQucHJvdG90eXBlLl9kcmF3Q3VydmUgPSBmdW5jdGlvbiAoY3VydmUsIHN0YXJ0V2lkdGgsIGVuZFdpZHRoKSB7XG4gIHZhciBjdHggPSB0aGlzLl9jdHg7XG4gIHZhciB3aWR0aERlbHRhID0gZW5kV2lkdGggLSBzdGFydFdpZHRoO1xuICB2YXIgZHJhd1N0ZXBzID0gTWF0aC5mbG9vcihjdXJ2ZS5sZW5ndGgoKSk7XG5cbiAgY3R4LmJlZ2luUGF0aCgpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZHJhd1N0ZXBzOyBpICs9IDEpIHtcbiAgICAvLyBDYWxjdWxhdGUgdGhlIEJlemllciAoeCwgeSkgY29vcmRpbmF0ZSBmb3IgdGhpcyBzdGVwLlxuICAgIHZhciB0ID0gaSAvIGRyYXdTdGVwcztcbiAgICB2YXIgdHQgPSB0ICogdDtcbiAgICB2YXIgdHR0ID0gdHQgKiB0O1xuICAgIHZhciB1ID0gMSAtIHQ7XG4gICAgdmFyIHV1ID0gdSAqIHU7XG4gICAgdmFyIHV1dSA9IHV1ICogdTtcblxuICAgIHZhciB4ID0gdXV1ICogY3VydmUuc3RhcnRQb2ludC54O1xuICAgIHggKz0gMyAqIHV1ICogdCAqIGN1cnZlLmNvbnRyb2wxLng7XG4gICAgeCArPSAzICogdSAqIHR0ICogY3VydmUuY29udHJvbDIueDtcbiAgICB4ICs9IHR0dCAqIGN1cnZlLmVuZFBvaW50Lng7XG5cbiAgICB2YXIgeSA9IHV1dSAqIGN1cnZlLnN0YXJ0UG9pbnQueTtcbiAgICB5ICs9IDMgKiB1dSAqIHQgKiBjdXJ2ZS5jb250cm9sMS55O1xuICAgIHkgKz0gMyAqIHUgKiB0dCAqIGN1cnZlLmNvbnRyb2wyLnk7XG4gICAgeSArPSB0dHQgKiBjdXJ2ZS5lbmRQb2ludC55O1xuXG4gICAgdmFyIHdpZHRoID0gc3RhcnRXaWR0aCArIHR0dCAqIHdpZHRoRGVsdGE7XG4gICAgdGhpcy5fZHJhd1BvaW50KHgsIHksIHdpZHRoKTtcbiAgfVxuXG4gIGN0eC5jbG9zZVBhdGgoKTtcbiAgY3R4LmZpbGwoKTtcbn07XG5cblNpZ25hdHVyZVBhZC5wcm90b3R5cGUuX2RyYXdEb3QgPSBmdW5jdGlvbiAocG9pbnQpIHtcbiAgdmFyIGN0eCA9IHRoaXMuX2N0eDtcbiAgdmFyIHdpZHRoID0gdHlwZW9mIHRoaXMuZG90U2l6ZSA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMuZG90U2l6ZSgpIDogdGhpcy5kb3RTaXplO1xuXG4gIGN0eC5iZWdpblBhdGgoKTtcbiAgdGhpcy5fZHJhd1BvaW50KHBvaW50LngsIHBvaW50LnksIHdpZHRoKTtcbiAgY3R4LmNsb3NlUGF0aCgpO1xuICBjdHguZmlsbCgpO1xufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5fZnJvbURhdGEgPSBmdW5jdGlvbiAocG9pbnRHcm91cHMsIGRyYXdDdXJ2ZSwgZHJhd0RvdCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50R3JvdXBzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdmFyIGdyb3VwID0gcG9pbnRHcm91cHNbaV07XG5cbiAgICBpZiAoZ3JvdXAubGVuZ3RoID4gMSkge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBncm91cC5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICB2YXIgcmF3UG9pbnQgPSBncm91cFtqXTtcbiAgICAgICAgdmFyIHBvaW50ID0gbmV3IFBvaW50KHJhd1BvaW50LngsIHJhd1BvaW50LnksIHJhd1BvaW50LnRpbWUpO1xuICAgICAgICB2YXIgY29sb3IgPSByYXdQb2ludC5jb2xvcjtcblxuICAgICAgICBpZiAoaiA9PT0gMCkge1xuICAgICAgICAgIC8vIEZpcnN0IHBvaW50IGluIGEgZ3JvdXAuIE5vdGhpbmcgdG8gZHJhdyB5ZXQuXG5cbiAgICAgICAgICAvLyBBbGwgcG9pbnRzIGluIHRoZSBncm91cCBoYXZlIHRoZSBzYW1lIGNvbG9yLCBzbyBpdCdzIGVub3VnaCB0byBzZXRcbiAgICAgICAgICAvLyBwZW5Db2xvciBqdXN0IGF0IHRoZSBiZWdpbm5pbmcuXG4gICAgICAgICAgdGhpcy5wZW5Db2xvciA9IGNvbG9yO1xuICAgICAgICAgIHRoaXMuX3Jlc2V0KCk7XG5cbiAgICAgICAgICB0aGlzLl9hZGRQb2ludChwb2ludCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaiAhPT0gZ3JvdXAubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIC8vIE1pZGRsZSBwb2ludCBpbiBhIGdyb3VwLlxuICAgICAgICAgIHZhciBfYWRkUG9pbnQyID0gdGhpcy5fYWRkUG9pbnQocG9pbnQpLFxuICAgICAgICAgICAgICBjdXJ2ZSA9IF9hZGRQb2ludDIuY3VydmUsXG4gICAgICAgICAgICAgIHdpZHRocyA9IF9hZGRQb2ludDIud2lkdGhzO1xuXG4gICAgICAgICAgaWYgKGN1cnZlICYmIHdpZHRocykge1xuICAgICAgICAgICAgZHJhd0N1cnZlKGN1cnZlLCB3aWR0aHMsIGNvbG9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTGFzdCBwb2ludCBpbiBhIGdyb3VwLiBEbyBub3RoaW5nLlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3Jlc2V0KCk7XG4gICAgICB2YXIgX3Jhd1BvaW50ID0gZ3JvdXBbMF07XG4gICAgICBkcmF3RG90KF9yYXdQb2ludCk7XG4gICAgfVxuICB9XG59O1xuXG5TaWduYXR1cmVQYWQucHJvdG90eXBlLl90b1NWRyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgdmFyIHBvaW50R3JvdXBzID0gdGhpcy5fZGF0YTtcbiAgdmFyIGNhbnZhcyA9IHRoaXMuX2NhbnZhcztcbiAgdmFyIHJhdGlvID0gTWF0aC5tYXgod2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMSwgMSk7XG4gIHZhciBtaW5YID0gMDtcbiAgdmFyIG1pblkgPSAwO1xuICB2YXIgbWF4WCA9IGNhbnZhcy53aWR0aCAvIHJhdGlvO1xuICB2YXIgbWF4WSA9IGNhbnZhcy5oZWlnaHQgLyByYXRpbztcbiAgdmFyIHN2ZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnc3ZnJyk7XG5cbiAgc3ZnLnNldEF0dHJpYnV0ZU5TKG51bGwsICd3aWR0aCcsIGNhbnZhcy53aWR0aCk7XG4gIHN2Zy5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnaGVpZ2h0JywgY2FudmFzLmhlaWdodCk7XG5cbiAgdGhpcy5fZnJvbURhdGEocG9pbnRHcm91cHMsIGZ1bmN0aW9uIChjdXJ2ZSwgd2lkdGhzLCBjb2xvcikge1xuICAgIHZhciBwYXRoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncGF0aCcpO1xuXG4gICAgLy8gTmVlZCB0byBjaGVjayBjdXJ2ZSBmb3IgTmFOIHZhbHVlcywgdGhlc2UgcG9wIHVwIHdoZW4gZHJhd2luZ1xuICAgIC8vIGxpbmVzIG9uIHRoZSBjYW52YXMgdGhhdCBhcmUgbm90IGNvbnRpbnVvdXMuIEUuZy4gU2hhcnAgY29ybmVyc1xuICAgIC8vIG9yIHN0b3BwaW5nIG1pZC1zdHJva2UgYW5kIHRoYW4gY29udGludWluZyB3aXRob3V0IGxpZnRpbmcgbW91c2UuXG4gICAgaWYgKCFpc05hTihjdXJ2ZS5jb250cm9sMS54KSAmJiAhaXNOYU4oY3VydmUuY29udHJvbDEueSkgJiYgIWlzTmFOKGN1cnZlLmNvbnRyb2wyLngpICYmICFpc05hTihjdXJ2ZS5jb250cm9sMi55KSkge1xuICAgICAgdmFyIGF0dHIgPSAnTSAnICsgY3VydmUuc3RhcnRQb2ludC54LnRvRml4ZWQoMykgKyAnLCcgKyBjdXJ2ZS5zdGFydFBvaW50LnkudG9GaXhlZCgzKSArICcgJyArICgnQyAnICsgY3VydmUuY29udHJvbDEueC50b0ZpeGVkKDMpICsgJywnICsgY3VydmUuY29udHJvbDEueS50b0ZpeGVkKDMpICsgJyAnKSArIChjdXJ2ZS5jb250cm9sMi54LnRvRml4ZWQoMykgKyAnLCcgKyBjdXJ2ZS5jb250cm9sMi55LnRvRml4ZWQoMykgKyAnICcpICsgKGN1cnZlLmVuZFBvaW50LngudG9GaXhlZCgzKSArICcsJyArIGN1cnZlLmVuZFBvaW50LnkudG9GaXhlZCgzKSk7XG5cbiAgICAgIHBhdGguc2V0QXR0cmlidXRlKCdkJywgYXR0cik7XG4gICAgICBwYXRoLnNldEF0dHJpYnV0ZSgnc3Ryb2tlLXdpZHRoJywgKHdpZHRocy5lbmQgKiAyLjI1KS50b0ZpeGVkKDMpKTtcbiAgICAgIHBhdGguc2V0QXR0cmlidXRlKCdzdHJva2UnLCBjb2xvcik7XG4gICAgICBwYXRoLnNldEF0dHJpYnV0ZSgnZmlsbCcsICdub25lJyk7XG4gICAgICBwYXRoLnNldEF0dHJpYnV0ZSgnc3Ryb2tlLWxpbmVjYXAnLCAncm91bmQnKTtcblxuICAgICAgc3ZnLmFwcGVuZENoaWxkKHBhdGgpO1xuICAgIH1cbiAgfSwgZnVuY3Rpb24gKHJhd1BvaW50KSB7XG4gICAgdmFyIGNpcmNsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NpcmNsZScpO1xuICAgIHZhciBkb3RTaXplID0gdHlwZW9mIF90aGlzMi5kb3RTaXplID09PSAnZnVuY3Rpb24nID8gX3RoaXMyLmRvdFNpemUoKSA6IF90aGlzMi5kb3RTaXplO1xuICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGUoJ3InLCBkb3RTaXplKTtcbiAgICBjaXJjbGUuc2V0QXR0cmlidXRlKCdjeCcsIHJhd1BvaW50LngpO1xuICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGUoJ2N5JywgcmF3UG9pbnQueSk7XG4gICAgY2lyY2xlLnNldEF0dHJpYnV0ZSgnZmlsbCcsIHJhd1BvaW50LmNvbG9yKTtcblxuICAgIHN2Zy5hcHBlbmRDaGlsZChjaXJjbGUpO1xuICB9KTtcblxuICB2YXIgcHJlZml4ID0gJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsJztcbiAgdmFyIGhlYWRlciA9ICc8c3ZnJyArICcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiJyArICcgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCInICsgKCcgdmlld0JveD1cIicgKyBtaW5YICsgJyAnICsgbWluWSArICcgJyArIG1heFggKyAnICcgKyBtYXhZICsgJ1wiJykgKyAoJyB3aWR0aD1cIicgKyBtYXhYICsgJ1wiJykgKyAoJyBoZWlnaHQ9XCInICsgbWF4WSArICdcIicpICsgJz4nO1xuICB2YXIgYm9keSA9IHN2Zy5pbm5lckhUTUw7XG5cbiAgLy8gSUUgaGFjayBmb3IgbWlzc2luZyBpbm5lckhUTUwgcHJvcGVydHkgb24gU1ZHRWxlbWVudFxuICBpZiAoYm9keSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGR1bW15ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZHVtbXknKTtcbiAgICB2YXIgbm9kZXMgPSBzdmcuY2hpbGROb2RlcztcbiAgICBkdW1teS5pbm5lckhUTUwgPSAnJztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGR1bW15LmFwcGVuZENoaWxkKG5vZGVzW2ldLmNsb25lTm9kZSh0cnVlKSk7XG4gICAgfVxuXG4gICAgYm9keSA9IGR1bW15LmlubmVySFRNTDtcbiAgfVxuXG4gIHZhciBmb290ZXIgPSAnPC9zdmc+JztcbiAgdmFyIGRhdGEgPSBoZWFkZXIgKyBib2R5ICsgZm9vdGVyO1xuXG4gIHJldHVybiBwcmVmaXggKyBidG9hKGRhdGEpO1xufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS5mcm9tRGF0YSA9IGZ1bmN0aW9uIChwb2ludEdyb3Vwcykge1xuICB2YXIgX3RoaXMzID0gdGhpcztcblxuICB0aGlzLmNsZWFyKCk7XG5cbiAgdGhpcy5fZnJvbURhdGEocG9pbnRHcm91cHMsIGZ1bmN0aW9uIChjdXJ2ZSwgd2lkdGhzKSB7XG4gICAgcmV0dXJuIF90aGlzMy5fZHJhd0N1cnZlKGN1cnZlLCB3aWR0aHMuc3RhcnQsIHdpZHRocy5lbmQpO1xuICB9LCBmdW5jdGlvbiAocmF3UG9pbnQpIHtcbiAgICByZXR1cm4gX3RoaXMzLl9kcmF3RG90KHJhd1BvaW50KTtcbiAgfSk7XG5cbiAgdGhpcy5fZGF0YSA9IHBvaW50R3JvdXBzO1xufTtcblxuU2lnbmF0dXJlUGFkLnByb3RvdHlwZS50b0RhdGEgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLl9kYXRhO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2lnbmF0dXJlUGFkO1xuIiwiLyoqIVxuICogU29ydGFibGUgMS4xMy4wXG4gKiBAYXV0aG9yXHRSdWJhWGEgICA8dHJhc2hAcnViYXhhLm9yZz5cbiAqIEBhdXRob3JcdG93ZW5tICAgIDxvd2VuMjMzNTVAZ21haWwuY29tPlxuICogQGxpY2Vuc2UgTUlUXG4gKi9cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikge1xuICAgIF90eXBlb2YgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIF90eXBlb2YgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIF90eXBlb2Yob2JqKTtcbn1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307XG4gICAgdmFyIG93bktleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuXG4gICAgaWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBvd25LZXlzID0gb3duS2V5cy5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwgc3ltKS5lbnVtZXJhYmxlO1xuICAgICAgfSkpO1xuICAgIH1cblxuICAgIG93bktleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG4gIHZhciB0YXJnZXQgPSB7fTtcbiAgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuICB2YXIga2V5LCBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0gc291cmNlS2V5c1tpXTtcbiAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcblxuICB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7XG5cbiAgdmFyIGtleSwgaTtcblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07XG4gICAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTtcbiAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpO1xufVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShhcnIubGVuZ3RoKTsgaSA8IGFyci5sZW5ndGg7IGkrKykgYXJyMltpXSA9IGFycltpXTtcblxuICAgIHJldHVybiBhcnIyO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikge1xuICBpZiAoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChpdGVyKSB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaXRlcikgPT09IFwiW29iamVjdCBBcmd1bWVudHNdXCIpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xufVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTtcbn1cblxudmFyIHZlcnNpb24gPSBcIjEuMTMuMFwiO1xuXG5mdW5jdGlvbiB1c2VyQWdlbnQocGF0dGVybikge1xuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lm5hdmlnYXRvcikge1xuICAgIHJldHVybiAhIVxuICAgIC8qQF9fUFVSRV9fKi9cbiAgICBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKHBhdHRlcm4pO1xuICB9XG59XG5cbnZhciBJRTExT3JMZXNzID0gdXNlckFnZW50KC8oPzpUcmlkZW50LipydlsgOl0/MTFcXC58bXNpZXxpZW1vYmlsZXxXaW5kb3dzIFBob25lKS9pKTtcbnZhciBFZGdlID0gdXNlckFnZW50KC9FZGdlL2kpO1xudmFyIEZpcmVGb3ggPSB1c2VyQWdlbnQoL2ZpcmVmb3gvaSk7XG52YXIgU2FmYXJpID0gdXNlckFnZW50KC9zYWZhcmkvaSkgJiYgIXVzZXJBZ2VudCgvY2hyb21lL2kpICYmICF1c2VyQWdlbnQoL2FuZHJvaWQvaSk7XG52YXIgSU9TID0gdXNlckFnZW50KC9pUChhZHxvZHxob25lKS9pKTtcbnZhciBDaHJvbWVGb3JBbmRyb2lkID0gdXNlckFnZW50KC9jaHJvbWUvaSkgJiYgdXNlckFnZW50KC9hbmRyb2lkL2kpO1xuXG52YXIgY2FwdHVyZU1vZGUgPSB7XG4gIGNhcHR1cmU6IGZhbHNlLFxuICBwYXNzaXZlOiBmYWxzZVxufTtcblxuZnVuY3Rpb24gb24oZWwsIGV2ZW50LCBmbikge1xuICBlbC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBmbiwgIUlFMTFPckxlc3MgJiYgY2FwdHVyZU1vZGUpO1xufVxuXG5mdW5jdGlvbiBvZmYoZWwsIGV2ZW50LCBmbikge1xuICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBmbiwgIUlFMTFPckxlc3MgJiYgY2FwdHVyZU1vZGUpO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVzKFxuLyoqSFRNTEVsZW1lbnQqL1xuZWwsXG4vKipTdHJpbmcqL1xuc2VsZWN0b3IpIHtcbiAgaWYgKCFzZWxlY3RvcikgcmV0dXJuO1xuICBzZWxlY3RvclswXSA9PT0gJz4nICYmIChzZWxlY3RvciA9IHNlbGVjdG9yLnN1YnN0cmluZygxKSk7XG5cbiAgaWYgKGVsKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChlbC5tYXRjaGVzKSB7XG4gICAgICAgIHJldHVybiBlbC5tYXRjaGVzKHNlbGVjdG9yKTtcbiAgICAgIH0gZWxzZSBpZiAoZWwubXNNYXRjaGVzU2VsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIGVsLm1zTWF0Y2hlc1NlbGVjdG9yKHNlbGVjdG9yKTtcbiAgICAgIH0gZWxzZSBpZiAoZWwud2Via2l0TWF0Y2hlc1NlbGVjdG9yKSB7XG4gICAgICAgIHJldHVybiBlbC53ZWJraXRNYXRjaGVzU2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmVudE9ySG9zdChlbCkge1xuICByZXR1cm4gZWwuaG9zdCAmJiBlbCAhPT0gZG9jdW1lbnQgJiYgZWwuaG9zdC5ub2RlVHlwZSA/IGVsLmhvc3QgOiBlbC5wYXJlbnROb2RlO1xufVxuXG5mdW5jdGlvbiBjbG9zZXN0KFxuLyoqSFRNTEVsZW1lbnQqL1xuZWwsXG4vKipTdHJpbmcqL1xuc2VsZWN0b3IsXG4vKipIVE1MRWxlbWVudCovXG5jdHgsIGluY2x1ZGVDVFgpIHtcbiAgaWYgKGVsKSB7XG4gICAgY3R4ID0gY3R4IHx8IGRvY3VtZW50O1xuXG4gICAgZG8ge1xuICAgICAgaWYgKHNlbGVjdG9yICE9IG51bGwgJiYgKHNlbGVjdG9yWzBdID09PSAnPicgPyBlbC5wYXJlbnROb2RlID09PSBjdHggJiYgbWF0Y2hlcyhlbCwgc2VsZWN0b3IpIDogbWF0Y2hlcyhlbCwgc2VsZWN0b3IpKSB8fCBpbmNsdWRlQ1RYICYmIGVsID09PSBjdHgpIHtcbiAgICAgICAgcmV0dXJuIGVsO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWwgPT09IGN0eCkgYnJlYWs7XG4gICAgICAvKiBqc2hpbnQgYm9zczp0cnVlICovXG4gICAgfSB3aGlsZSAoZWwgPSBnZXRQYXJlbnRPckhvc3QoZWwpKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgUl9TUEFDRSA9IC9cXHMrL2c7XG5cbmZ1bmN0aW9uIHRvZ2dsZUNsYXNzKGVsLCBuYW1lLCBzdGF0ZSkge1xuICBpZiAoZWwgJiYgbmFtZSkge1xuICAgIGlmIChlbC5jbGFzc0xpc3QpIHtcbiAgICAgIGVsLmNsYXNzTGlzdFtzdGF0ZSA/ICdhZGQnIDogJ3JlbW92ZSddKG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgY2xhc3NOYW1lID0gKCcgJyArIGVsLmNsYXNzTmFtZSArICcgJykucmVwbGFjZShSX1NQQUNFLCAnICcpLnJlcGxhY2UoJyAnICsgbmFtZSArICcgJywgJyAnKTtcbiAgICAgIGVsLmNsYXNzTmFtZSA9IChjbGFzc05hbWUgKyAoc3RhdGUgPyAnICcgKyBuYW1lIDogJycpKS5yZXBsYWNlKFJfU1BBQ0UsICcgJyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNzcyhlbCwgcHJvcCwgdmFsKSB7XG4gIHZhciBzdHlsZSA9IGVsICYmIGVsLnN0eWxlO1xuXG4gIGlmIChzdHlsZSkge1xuICAgIGlmICh2YWwgPT09IHZvaWQgMCkge1xuICAgICAgaWYgKGRvY3VtZW50LmRlZmF1bHRWaWV3ICYmIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUpIHtcbiAgICAgICAgdmFsID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbCwgJycpO1xuICAgICAgfSBlbHNlIGlmIChlbC5jdXJyZW50U3R5bGUpIHtcbiAgICAgICAgdmFsID0gZWwuY3VycmVudFN0eWxlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJvcCA9PT0gdm9pZCAwID8gdmFsIDogdmFsW3Byb3BdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIShwcm9wIGluIHN0eWxlKSAmJiBwcm9wLmluZGV4T2YoJ3dlYmtpdCcpID09PSAtMSkge1xuICAgICAgICBwcm9wID0gJy13ZWJraXQtJyArIHByb3A7XG4gICAgICB9XG5cbiAgICAgIHN0eWxlW3Byb3BdID0gdmFsICsgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnID8gJycgOiAncHgnKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbWF0cml4KGVsLCBzZWxmT25seSkge1xuICB2YXIgYXBwbGllZFRyYW5zZm9ybXMgPSAnJztcblxuICBpZiAodHlwZW9mIGVsID09PSAnc3RyaW5nJykge1xuICAgIGFwcGxpZWRUcmFuc2Zvcm1zID0gZWw7XG4gIH0gZWxzZSB7XG4gICAgZG8ge1xuICAgICAgdmFyIHRyYW5zZm9ybSA9IGNzcyhlbCwgJ3RyYW5zZm9ybScpO1xuXG4gICAgICBpZiAodHJhbnNmb3JtICYmIHRyYW5zZm9ybSAhPT0gJ25vbmUnKSB7XG4gICAgICAgIGFwcGxpZWRUcmFuc2Zvcm1zID0gdHJhbnNmb3JtICsgJyAnICsgYXBwbGllZFRyYW5zZm9ybXM7XG4gICAgICB9XG4gICAgICAvKiBqc2hpbnQgYm9zczp0cnVlICovXG5cbiAgICB9IHdoaWxlICghc2VsZk9ubHkgJiYgKGVsID0gZWwucGFyZW50Tm9kZSkpO1xuICB9XG5cbiAgdmFyIG1hdHJpeEZuID0gd2luZG93LkRPTU1hdHJpeCB8fCB3aW5kb3cuV2ViS2l0Q1NTTWF0cml4IHx8IHdpbmRvdy5DU1NNYXRyaXggfHwgd2luZG93Lk1TQ1NTTWF0cml4O1xuICAvKmpzaGludCAtVzA1NiAqL1xuXG4gIHJldHVybiBtYXRyaXhGbiAmJiBuZXcgbWF0cml4Rm4oYXBwbGllZFRyYW5zZm9ybXMpO1xufVxuXG5mdW5jdGlvbiBmaW5kKGN0eCwgdGFnTmFtZSwgaXRlcmF0b3IpIHtcbiAgaWYgKGN0eCkge1xuICAgIHZhciBsaXN0ID0gY3R4LmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZ05hbWUpLFxuICAgICAgICBpID0gMCxcbiAgICAgICAgbiA9IGxpc3QubGVuZ3RoO1xuXG4gICAgaWYgKGl0ZXJhdG9yKSB7XG4gICAgICBmb3IgKDsgaSA8IG47IGkrKykge1xuICAgICAgICBpdGVyYXRvcihsaXN0W2ldLCBpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGlzdDtcbiAgfVxuXG4gIHJldHVybiBbXTtcbn1cblxuZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsaW5nRWxlbWVudCgpIHtcbiAgdmFyIHNjcm9sbGluZ0VsZW1lbnQgPSBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50O1xuXG4gIGlmIChzY3JvbGxpbmdFbGVtZW50KSB7XG4gICAgcmV0dXJuIHNjcm9sbGluZ0VsZW1lbnQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgfVxufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBcImJvdW5kaW5nIGNsaWVudCByZWN0XCIgb2YgZ2l2ZW4gZWxlbWVudFxuICogQHBhcmFtICB7SFRNTEVsZW1lbnR9IGVsICAgICAgICAgICAgICAgICAgICAgICBUaGUgZWxlbWVudCB3aG9zZSBib3VuZGluZ0NsaWVudFJlY3QgaXMgd2FudGVkXG4gKiBAcGFyYW0gIHtbQm9vbGVhbl19IHJlbGF0aXZlVG9Db250YWluaW5nQmxvY2sgIFdoZXRoZXIgdGhlIHJlY3Qgc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZSBjb250YWluaW5nIGJsb2NrIG9mIChpbmNsdWRpbmcpIHRoZSBjb250YWluZXJcbiAqIEBwYXJhbSAge1tCb29sZWFuXX0gcmVsYXRpdmVUb05vblN0YXRpY1BhcmVudCAgV2hldGhlciB0aGUgcmVjdCBzaG91bGQgYmUgcmVsYXRpdmUgdG8gdGhlIHJlbGF0aXZlIHBhcmVudCBvZiAoaW5jbHVkaW5nKSB0aGUgY29udGFpZW5yXG4gKiBAcGFyYW0gIHtbQm9vbGVhbl19IHVuZG9TY2FsZSAgICAgICAgICAgICAgICAgIFdoZXRoZXIgdGhlIGNvbnRhaW5lcidzIHNjYWxlKCkgc2hvdWxkIGJlIHVuZG9uZVxuICogQHBhcmFtICB7W0hUTUxFbGVtZW50XX0gY29udGFpbmVyICAgICAgICAgICAgICBUaGUgcGFyZW50IHRoZSBlbGVtZW50IHdpbGwgYmUgcGxhY2VkIGluXG4gKiBAcmV0dXJuIHtPYmplY3R9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBib3VuZGluZ0NsaWVudFJlY3Qgb2YgZWwsIHdpdGggc3BlY2lmaWVkIGFkanVzdG1lbnRzXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRSZWN0KGVsLCByZWxhdGl2ZVRvQ29udGFpbmluZ0Jsb2NrLCByZWxhdGl2ZVRvTm9uU3RhdGljUGFyZW50LCB1bmRvU2NhbGUsIGNvbnRhaW5lcikge1xuICBpZiAoIWVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCAmJiBlbCAhPT0gd2luZG93KSByZXR1cm47XG4gIHZhciBlbFJlY3QsIHRvcCwgbGVmdCwgYm90dG9tLCByaWdodCwgaGVpZ2h0LCB3aWR0aDtcblxuICBpZiAoZWwgIT09IHdpbmRvdyAmJiBlbC5wYXJlbnROb2RlICYmIGVsICE9PSBnZXRXaW5kb3dTY3JvbGxpbmdFbGVtZW50KCkpIHtcbiAgICBlbFJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB0b3AgPSBlbFJlY3QudG9wO1xuICAgIGxlZnQgPSBlbFJlY3QubGVmdDtcbiAgICBib3R0b20gPSBlbFJlY3QuYm90dG9tO1xuICAgIHJpZ2h0ID0gZWxSZWN0LnJpZ2h0O1xuICAgIGhlaWdodCA9IGVsUmVjdC5oZWlnaHQ7XG4gICAgd2lkdGggPSBlbFJlY3Qud2lkdGg7XG4gIH0gZWxzZSB7XG4gICAgdG9wID0gMDtcbiAgICBsZWZ0ID0gMDtcbiAgICBib3R0b20gPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG4gICAgcmlnaHQgPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICBoZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG4gICAgd2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgfVxuXG4gIGlmICgocmVsYXRpdmVUb0NvbnRhaW5pbmdCbG9jayB8fCByZWxhdGl2ZVRvTm9uU3RhdGljUGFyZW50KSAmJiBlbCAhPT0gd2luZG93KSB7XG4gICAgLy8gQWRqdXN0IGZvciB0cmFuc2xhdGUoKVxuICAgIGNvbnRhaW5lciA9IGNvbnRhaW5lciB8fCBlbC5wYXJlbnROb2RlOyAvLyBzb2x2ZXMgIzExMjMgKHNlZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM3OTUzODA2LzYwODgzMTIpXG4gICAgLy8gTm90IG5lZWRlZCBvbiA8PSBJRTExXG5cbiAgICBpZiAoIUlFMTFPckxlc3MpIHtcbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKGNvbnRhaW5lciAmJiBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ICYmIChjc3MoY29udGFpbmVyLCAndHJhbnNmb3JtJykgIT09ICdub25lJyB8fCByZWxhdGl2ZVRvTm9uU3RhdGljUGFyZW50ICYmIGNzcyhjb250YWluZXIsICdwb3NpdGlvbicpICE9PSAnc3RhdGljJykpIHtcbiAgICAgICAgICB2YXIgY29udGFpbmVyUmVjdCA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsgLy8gU2V0IHJlbGF0aXZlIHRvIGVkZ2VzIG9mIHBhZGRpbmcgYm94IG9mIGNvbnRhaW5lclxuXG4gICAgICAgICAgdG9wIC09IGNvbnRhaW5lclJlY3QudG9wICsgcGFyc2VJbnQoY3NzKGNvbnRhaW5lciwgJ2JvcmRlci10b3Atd2lkdGgnKSk7XG4gICAgICAgICAgbGVmdCAtPSBjb250YWluZXJSZWN0LmxlZnQgKyBwYXJzZUludChjc3MoY29udGFpbmVyLCAnYm9yZGVyLWxlZnQtd2lkdGgnKSk7XG4gICAgICAgICAgYm90dG9tID0gdG9wICsgZWxSZWN0LmhlaWdodDtcbiAgICAgICAgICByaWdodCA9IGxlZnQgKyBlbFJlY3Qud2lkdGg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLyoganNoaW50IGJvc3M6dHJ1ZSAqL1xuXG4gICAgICB9IHdoaWxlIChjb250YWluZXIgPSBjb250YWluZXIucGFyZW50Tm9kZSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHVuZG9TY2FsZSAmJiBlbCAhPT0gd2luZG93KSB7XG4gICAgLy8gQWRqdXN0IGZvciBzY2FsZSgpXG4gICAgdmFyIGVsTWF0cml4ID0gbWF0cml4KGNvbnRhaW5lciB8fCBlbCksXG4gICAgICAgIHNjYWxlWCA9IGVsTWF0cml4ICYmIGVsTWF0cml4LmEsXG4gICAgICAgIHNjYWxlWSA9IGVsTWF0cml4ICYmIGVsTWF0cml4LmQ7XG5cbiAgICBpZiAoZWxNYXRyaXgpIHtcbiAgICAgIHRvcCAvPSBzY2FsZVk7XG4gICAgICBsZWZ0IC89IHNjYWxlWDtcbiAgICAgIHdpZHRoIC89IHNjYWxlWDtcbiAgICAgIGhlaWdodCAvPSBzY2FsZVk7XG4gICAgICBib3R0b20gPSB0b3AgKyBoZWlnaHQ7XG4gICAgICByaWdodCA9IGxlZnQgKyB3aWR0aDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRvcDogdG9wLFxuICAgIGxlZnQ6IGxlZnQsXG4gICAgYm90dG9tOiBib3R0b20sXG4gICAgcmlnaHQ6IHJpZ2h0LFxuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodFxuICB9O1xufVxuLyoqXG4gKiBDaGVja3MgaWYgYSBzaWRlIG9mIGFuIGVsZW1lbnQgaXMgc2Nyb2xsZWQgcGFzdCBhIHNpZGUgb2YgaXRzIHBhcmVudHNcbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSAgZWwgICAgICAgICAgIFRoZSBlbGVtZW50IHdobydzIHNpZGUgYmVpbmcgc2Nyb2xsZWQgb3V0IG9mIHZpZXcgaXMgaW4gcXVlc3Rpb25cbiAqIEBwYXJhbSAge1N0cmluZ30gICAgICAgZWxTaWRlICAgICAgIFNpZGUgb2YgdGhlIGVsZW1lbnQgaW4gcXVlc3Rpb24gKCd0b3AnLCAnbGVmdCcsICdyaWdodCcsICdib3R0b20nKVxuICogQHBhcmFtICB7U3RyaW5nfSAgICAgICBwYXJlbnRTaWRlICAgU2lkZSBvZiB0aGUgcGFyZW50IGluIHF1ZXN0aW9uICgndG9wJywgJ2xlZnQnLCAncmlnaHQnLCAnYm90dG9tJylcbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fSAgICAgICAgICAgICAgIFRoZSBwYXJlbnQgc2Nyb2xsIGVsZW1lbnQgdGhhdCB0aGUgZWwncyBzaWRlIGlzIHNjcm9sbGVkIHBhc3QsIG9yIG51bGwgaWYgdGhlcmUgaXMgbm8gc3VjaCBlbGVtZW50XG4gKi9cblxuXG5mdW5jdGlvbiBpc1Njcm9sbGVkUGFzdChlbCwgZWxTaWRlLCBwYXJlbnRTaWRlKSB7XG4gIHZhciBwYXJlbnQgPSBnZXRQYXJlbnRBdXRvU2Nyb2xsRWxlbWVudChlbCwgdHJ1ZSksXG4gICAgICBlbFNpZGVWYWwgPSBnZXRSZWN0KGVsKVtlbFNpZGVdO1xuICAvKiBqc2hpbnQgYm9zczp0cnVlICovXG5cbiAgd2hpbGUgKHBhcmVudCkge1xuICAgIHZhciBwYXJlbnRTaWRlVmFsID0gZ2V0UmVjdChwYXJlbnQpW3BhcmVudFNpZGVdLFxuICAgICAgICB2aXNpYmxlID0gdm9pZCAwO1xuXG4gICAgaWYgKHBhcmVudFNpZGUgPT09ICd0b3AnIHx8IHBhcmVudFNpZGUgPT09ICdsZWZ0Jykge1xuICAgICAgdmlzaWJsZSA9IGVsU2lkZVZhbCA+PSBwYXJlbnRTaWRlVmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICB2aXNpYmxlID0gZWxTaWRlVmFsIDw9IHBhcmVudFNpZGVWYWw7XG4gICAgfVxuXG4gICAgaWYgKCF2aXNpYmxlKSByZXR1cm4gcGFyZW50O1xuICAgIGlmIChwYXJlbnQgPT09IGdldFdpbmRvd1Njcm9sbGluZ0VsZW1lbnQoKSkgYnJlYWs7XG4gICAgcGFyZW50ID0gZ2V0UGFyZW50QXV0b1Njcm9sbEVsZW1lbnQocGFyZW50LCBmYWxzZSk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG4vKipcbiAqIEdldHMgbnRoIGNoaWxkIG9mIGVsLCBpZ25vcmluZyBoaWRkZW4gY2hpbGRyZW4sIHNvcnRhYmxlJ3MgZWxlbWVudHMgKGRvZXMgbm90IGlnbm9yZSBjbG9uZSBpZiBpdCdzIHZpc2libGUpXG4gKiBhbmQgbm9uLWRyYWdnYWJsZSBlbGVtZW50c1xuICogQHBhcmFtICB7SFRNTEVsZW1lbnR9IGVsICAgICAgIFRoZSBwYXJlbnQgZWxlbWVudFxuICogQHBhcmFtICB7TnVtYmVyfSBjaGlsZE51bSAgICAgIFRoZSBpbmRleCBvZiB0aGUgY2hpbGRcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9ucyAgICAgICBQYXJlbnQgU29ydGFibGUncyBvcHRpb25zXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudH0gICAgICAgICAgVGhlIGNoaWxkIGF0IGluZGV4IGNoaWxkTnVtLCBvciBudWxsIGlmIG5vdCBmb3VuZFxuICovXG5cblxuZnVuY3Rpb24gZ2V0Q2hpbGQoZWwsIGNoaWxkTnVtLCBvcHRpb25zKSB7XG4gIHZhciBjdXJyZW50Q2hpbGQgPSAwLFxuICAgICAgaSA9IDAsXG4gICAgICBjaGlsZHJlbiA9IGVsLmNoaWxkcmVuO1xuXG4gIHdoaWxlIChpIDwgY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgaWYgKGNoaWxkcmVuW2ldLnN0eWxlLmRpc3BsYXkgIT09ICdub25lJyAmJiBjaGlsZHJlbltpXSAhPT0gU29ydGFibGUuZ2hvc3QgJiYgY2hpbGRyZW5baV0gIT09IFNvcnRhYmxlLmRyYWdnZWQgJiYgY2xvc2VzdChjaGlsZHJlbltpXSwgb3B0aW9ucy5kcmFnZ2FibGUsIGVsLCBmYWxzZSkpIHtcbiAgICAgIGlmIChjdXJyZW50Q2hpbGQgPT09IGNoaWxkTnVtKSB7XG4gICAgICAgIHJldHVybiBjaGlsZHJlbltpXTtcbiAgICAgIH1cblxuICAgICAgY3VycmVudENoaWxkKys7XG4gICAgfVxuXG4gICAgaSsrO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIEdldHMgdGhlIGxhc3QgY2hpbGQgaW4gdGhlIGVsLCBpZ25vcmluZyBnaG9zdEVsIG9yIGludmlzaWJsZSBlbGVtZW50cyAoY2xvbmVzKVxuICogQHBhcmFtICB7SFRNTEVsZW1lbnR9IGVsICAgICAgIFBhcmVudCBlbGVtZW50XG4gKiBAcGFyYW0gIHtzZWxlY3Rvcn0gc2VsZWN0b3IgICAgQW55IG90aGVyIGVsZW1lbnRzIHRoYXQgc2hvdWxkIGJlIGlnbm9yZWRcbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fSAgICAgICAgICBUaGUgbGFzdCBjaGlsZCwgaWdub3JpbmcgZ2hvc3RFbFxuICovXG5cblxuZnVuY3Rpb24gbGFzdENoaWxkKGVsLCBzZWxlY3Rvcikge1xuICB2YXIgbGFzdCA9IGVsLmxhc3RFbGVtZW50Q2hpbGQ7XG5cbiAgd2hpbGUgKGxhc3QgJiYgKGxhc3QgPT09IFNvcnRhYmxlLmdob3N0IHx8IGNzcyhsYXN0LCAnZGlzcGxheScpID09PSAnbm9uZScgfHwgc2VsZWN0b3IgJiYgIW1hdGNoZXMobGFzdCwgc2VsZWN0b3IpKSkge1xuICAgIGxhc3QgPSBsYXN0LnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG4gIH1cblxuICByZXR1cm4gbGFzdCB8fCBudWxsO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbmRleCBvZiBhbiBlbGVtZW50IHdpdGhpbiBpdHMgcGFyZW50IGZvciBhIHNlbGVjdGVkIHNldCBvZlxuICogZWxlbWVudHNcbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSBlbFxuICogQHBhcmFtICB7c2VsZWN0b3J9IHNlbGVjdG9yXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cblxuXG5mdW5jdGlvbiBpbmRleChlbCwgc2VsZWN0b3IpIHtcbiAgdmFyIGluZGV4ID0gMDtcblxuICBpZiAoIWVsIHx8ICFlbC5wYXJlbnROb2RlKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIC8qIGpzaGludCBib3NzOnRydWUgKi9cblxuXG4gIHdoaWxlIChlbCA9IGVsLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpIHtcbiAgICBpZiAoZWwubm9kZU5hbWUudG9VcHBlckNhc2UoKSAhPT0gJ1RFTVBMQVRFJyAmJiBlbCAhPT0gU29ydGFibGUuY2xvbmUgJiYgKCFzZWxlY3RvciB8fCBtYXRjaGVzKGVsLCBzZWxlY3RvcikpKSB7XG4gICAgICBpbmRleCsrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpbmRleDtcbn1cbi8qKlxuICogUmV0dXJucyB0aGUgc2Nyb2xsIG9mZnNldCBvZiB0aGUgZ2l2ZW4gZWxlbWVudCwgYWRkZWQgd2l0aCBhbGwgdGhlIHNjcm9sbCBvZmZzZXRzIG9mIHBhcmVudCBlbGVtZW50cy5cbiAqIFRoZSB2YWx1ZSBpcyByZXR1cm5lZCBpbiByZWFsIHBpeGVscy5cbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSBlbFxuICogQHJldHVybiB7QXJyYXl9ICAgICAgICAgICAgIE9mZnNldHMgaW4gdGhlIGZvcm1hdCBvZiBbbGVmdCwgdG9wXVxuICovXG5cblxuZnVuY3Rpb24gZ2V0UmVsYXRpdmVTY3JvbGxPZmZzZXQoZWwpIHtcbiAgdmFyIG9mZnNldExlZnQgPSAwLFxuICAgICAgb2Zmc2V0VG9wID0gMCxcbiAgICAgIHdpblNjcm9sbGVyID0gZ2V0V2luZG93U2Nyb2xsaW5nRWxlbWVudCgpO1xuXG4gIGlmIChlbCkge1xuICAgIGRvIHtcbiAgICAgIHZhciBlbE1hdHJpeCA9IG1hdHJpeChlbCksXG4gICAgICAgICAgc2NhbGVYID0gZWxNYXRyaXguYSxcbiAgICAgICAgICBzY2FsZVkgPSBlbE1hdHJpeC5kO1xuICAgICAgb2Zmc2V0TGVmdCArPSBlbC5zY3JvbGxMZWZ0ICogc2NhbGVYO1xuICAgICAgb2Zmc2V0VG9wICs9IGVsLnNjcm9sbFRvcCAqIHNjYWxlWTtcbiAgICB9IHdoaWxlIChlbCAhPT0gd2luU2Nyb2xsZXIgJiYgKGVsID0gZWwucGFyZW50Tm9kZSkpO1xuICB9XG5cbiAgcmV0dXJuIFtvZmZzZXRMZWZ0LCBvZmZzZXRUb3BdO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgb2JqZWN0IHdpdGhpbiB0aGUgZ2l2ZW4gYXJyYXlcbiAqIEBwYXJhbSAge0FycmF5fSBhcnIgICBBcnJheSB0aGF0IG1heSBvciBtYXkgbm90IGhvbGQgdGhlIG9iamVjdFxuICogQHBhcmFtICB7T2JqZWN0fSBvYmogIEFuIG9iamVjdCB0aGF0IGhhcyBhIGtleS12YWx1ZSBwYWlyIHVuaXF1ZSB0byBhbmQgaWRlbnRpY2FsIHRvIGEga2V5LXZhbHVlIHBhaXIgaW4gdGhlIG9iamVjdCB5b3Ugd2FudCB0byBmaW5kXG4gKiBAcmV0dXJuIHtOdW1iZXJ9ICAgICAgVGhlIGluZGV4IG9mIHRoZSBvYmplY3QgaW4gdGhlIGFycmF5LCBvciAtMVxuICovXG5cblxuZnVuY3Rpb24gaW5kZXhPZk9iamVjdChhcnIsIG9iaikge1xuICBmb3IgKHZhciBpIGluIGFycikge1xuICAgIGlmICghYXJyLmhhc093blByb3BlcnR5KGkpKSBjb250aW51ZTtcblxuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSAmJiBvYmpba2V5XSA9PT0gYXJyW2ldW2tleV0pIHJldHVybiBOdW1iZXIoaSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIC0xO1xufVxuXG5mdW5jdGlvbiBnZXRQYXJlbnRBdXRvU2Nyb2xsRWxlbWVudChlbCwgaW5jbHVkZVNlbGYpIHtcbiAgLy8gc2tpcCB0byB3aW5kb3dcbiAgaWYgKCFlbCB8fCAhZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KSByZXR1cm4gZ2V0V2luZG93U2Nyb2xsaW5nRWxlbWVudCgpO1xuICB2YXIgZWxlbSA9IGVsO1xuICB2YXIgZ290U2VsZiA9IGZhbHNlO1xuXG4gIGRvIHtcbiAgICAvLyB3ZSBkb24ndCBuZWVkIHRvIGdldCBlbGVtIGNzcyBpZiBpdCBpc24ndCBldmVuIG92ZXJmbG93aW5nIGluIHRoZSBmaXJzdCBwbGFjZSAocGVyZm9ybWFuY2UpXG4gICAgaWYgKGVsZW0uY2xpZW50V2lkdGggPCBlbGVtLnNjcm9sbFdpZHRoIHx8IGVsZW0uY2xpZW50SGVpZ2h0IDwgZWxlbS5zY3JvbGxIZWlnaHQpIHtcbiAgICAgIHZhciBlbGVtQ1NTID0gY3NzKGVsZW0pO1xuXG4gICAgICBpZiAoZWxlbS5jbGllbnRXaWR0aCA8IGVsZW0uc2Nyb2xsV2lkdGggJiYgKGVsZW1DU1Mub3ZlcmZsb3dYID09ICdhdXRvJyB8fCBlbGVtQ1NTLm92ZXJmbG93WCA9PSAnc2Nyb2xsJykgfHwgZWxlbS5jbGllbnRIZWlnaHQgPCBlbGVtLnNjcm9sbEhlaWdodCAmJiAoZWxlbUNTUy5vdmVyZmxvd1kgPT0gJ2F1dG8nIHx8IGVsZW1DU1Mub3ZlcmZsb3dZID09ICdzY3JvbGwnKSkge1xuICAgICAgICBpZiAoIWVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0IHx8IGVsZW0gPT09IGRvY3VtZW50LmJvZHkpIHJldHVybiBnZXRXaW5kb3dTY3JvbGxpbmdFbGVtZW50KCk7XG4gICAgICAgIGlmIChnb3RTZWxmIHx8IGluY2x1ZGVTZWxmKSByZXR1cm4gZWxlbTtcbiAgICAgICAgZ290U2VsZiA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIC8qIGpzaGludCBib3NzOnRydWUgKi9cblxuICB9IHdoaWxlIChlbGVtID0gZWxlbS5wYXJlbnROb2RlKTtcblxuICByZXR1cm4gZ2V0V2luZG93U2Nyb2xsaW5nRWxlbWVudCgpO1xufVxuXG5mdW5jdGlvbiBleHRlbmQoZHN0LCBzcmMpIHtcbiAgaWYgKGRzdCAmJiBzcmMpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XG4gICAgICBpZiAoc3JjLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgZHN0W2tleV0gPSBzcmNba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZHN0O1xufVxuXG5mdW5jdGlvbiBpc1JlY3RFcXVhbChyZWN0MSwgcmVjdDIpIHtcbiAgcmV0dXJuIE1hdGgucm91bmQocmVjdDEudG9wKSA9PT0gTWF0aC5yb3VuZChyZWN0Mi50b3ApICYmIE1hdGgucm91bmQocmVjdDEubGVmdCkgPT09IE1hdGgucm91bmQocmVjdDIubGVmdCkgJiYgTWF0aC5yb3VuZChyZWN0MS5oZWlnaHQpID09PSBNYXRoLnJvdW5kKHJlY3QyLmhlaWdodCkgJiYgTWF0aC5yb3VuZChyZWN0MS53aWR0aCkgPT09IE1hdGgucm91bmQocmVjdDIud2lkdGgpO1xufVxuXG52YXIgX3Rocm90dGxlVGltZW91dDtcblxuZnVuY3Rpb24gdGhyb3R0bGUoY2FsbGJhY2ssIG1zKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFfdGhyb3R0bGVUaW1lb3V0KSB7XG4gICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgICBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjYWxsYmFjay5jYWxsKF90aGlzLCBhcmdzWzBdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrLmFwcGx5KF90aGlzLCBhcmdzKTtcbiAgICAgIH1cblxuICAgICAgX3Rocm90dGxlVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhyb3R0bGVUaW1lb3V0ID0gdm9pZCAwO1xuICAgICAgfSwgbXMpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gY2FuY2VsVGhyb3R0bGUoKSB7XG4gIGNsZWFyVGltZW91dChfdGhyb3R0bGVUaW1lb3V0KTtcbiAgX3Rocm90dGxlVGltZW91dCA9IHZvaWQgMDtcbn1cblxuZnVuY3Rpb24gc2Nyb2xsQnkoZWwsIHgsIHkpIHtcbiAgZWwuc2Nyb2xsTGVmdCArPSB4O1xuICBlbC5zY3JvbGxUb3AgKz0geTtcbn1cblxuZnVuY3Rpb24gY2xvbmUoZWwpIHtcbiAgdmFyIFBvbHltZXIgPSB3aW5kb3cuUG9seW1lcjtcbiAgdmFyICQgPSB3aW5kb3cualF1ZXJ5IHx8IHdpbmRvdy5aZXB0bztcblxuICBpZiAoUG9seW1lciAmJiBQb2x5bWVyLmRvbSkge1xuICAgIHJldHVybiBQb2x5bWVyLmRvbShlbCkuY2xvbmVOb2RlKHRydWUpO1xuICB9IGVsc2UgaWYgKCQpIHtcbiAgICByZXR1cm4gJChlbCkuY2xvbmUodHJ1ZSlbMF07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGVsLmNsb25lTm9kZSh0cnVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRSZWN0KGVsLCByZWN0KSB7XG4gIGNzcyhlbCwgJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJyk7XG4gIGNzcyhlbCwgJ3RvcCcsIHJlY3QudG9wKTtcbiAgY3NzKGVsLCAnbGVmdCcsIHJlY3QubGVmdCk7XG4gIGNzcyhlbCwgJ3dpZHRoJywgcmVjdC53aWR0aCk7XG4gIGNzcyhlbCwgJ2hlaWdodCcsIHJlY3QuaGVpZ2h0KTtcbn1cblxuZnVuY3Rpb24gdW5zZXRSZWN0KGVsKSB7XG4gIGNzcyhlbCwgJ3Bvc2l0aW9uJywgJycpO1xuICBjc3MoZWwsICd0b3AnLCAnJyk7XG4gIGNzcyhlbCwgJ2xlZnQnLCAnJyk7XG4gIGNzcyhlbCwgJ3dpZHRoJywgJycpO1xuICBjc3MoZWwsICdoZWlnaHQnLCAnJyk7XG59XG5cbnZhciBleHBhbmRvID0gJ1NvcnRhYmxlJyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuXG5mdW5jdGlvbiBBbmltYXRpb25TdGF0ZU1hbmFnZXIoKSB7XG4gIHZhciBhbmltYXRpb25TdGF0ZXMgPSBbXSxcbiAgICAgIGFuaW1hdGlvbkNhbGxiYWNrSWQ7XG4gIHJldHVybiB7XG4gICAgY2FwdHVyZUFuaW1hdGlvblN0YXRlOiBmdW5jdGlvbiBjYXB0dXJlQW5pbWF0aW9uU3RhdGUoKSB7XG4gICAgICBhbmltYXRpb25TdGF0ZXMgPSBbXTtcbiAgICAgIGlmICghdGhpcy5vcHRpb25zLmFuaW1hdGlvbikgcmV0dXJuO1xuICAgICAgdmFyIGNoaWxkcmVuID0gW10uc2xpY2UuY2FsbCh0aGlzLmVsLmNoaWxkcmVuKTtcbiAgICAgIGNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIGlmIChjc3MoY2hpbGQsICdkaXNwbGF5JykgPT09ICdub25lJyB8fCBjaGlsZCA9PT0gU29ydGFibGUuZ2hvc3QpIHJldHVybjtcbiAgICAgICAgYW5pbWF0aW9uU3RhdGVzLnB1c2goe1xuICAgICAgICAgIHRhcmdldDogY2hpbGQsXG4gICAgICAgICAgcmVjdDogZ2V0UmVjdChjaGlsZClcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIGZyb21SZWN0ID0gX29iamVjdFNwcmVhZCh7fSwgYW5pbWF0aW9uU3RhdGVzW2FuaW1hdGlvblN0YXRlcy5sZW5ndGggLSAxXS5yZWN0KTsgLy8gSWYgYW5pbWF0aW5nOiBjb21wZW5zYXRlIGZvciBjdXJyZW50IGFuaW1hdGlvblxuXG5cbiAgICAgICAgaWYgKGNoaWxkLnRoaXNBbmltYXRpb25EdXJhdGlvbikge1xuICAgICAgICAgIHZhciBjaGlsZE1hdHJpeCA9IG1hdHJpeChjaGlsZCwgdHJ1ZSk7XG5cbiAgICAgICAgICBpZiAoY2hpbGRNYXRyaXgpIHtcbiAgICAgICAgICAgIGZyb21SZWN0LnRvcCAtPSBjaGlsZE1hdHJpeC5mO1xuICAgICAgICAgICAgZnJvbVJlY3QubGVmdCAtPSBjaGlsZE1hdHJpeC5lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkLmZyb21SZWN0ID0gZnJvbVJlY3Q7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGFkZEFuaW1hdGlvblN0YXRlOiBmdW5jdGlvbiBhZGRBbmltYXRpb25TdGF0ZShzdGF0ZSkge1xuICAgICAgYW5pbWF0aW9uU3RhdGVzLnB1c2goc3RhdGUpO1xuICAgIH0sXG4gICAgcmVtb3ZlQW5pbWF0aW9uU3RhdGU6IGZ1bmN0aW9uIHJlbW92ZUFuaW1hdGlvblN0YXRlKHRhcmdldCkge1xuICAgICAgYW5pbWF0aW9uU3RhdGVzLnNwbGljZShpbmRleE9mT2JqZWN0KGFuaW1hdGlvblN0YXRlcywge1xuICAgICAgICB0YXJnZXQ6IHRhcmdldFxuICAgICAgfSksIDEpO1xuICAgIH0sXG4gICAgYW5pbWF0ZUFsbDogZnVuY3Rpb24gYW5pbWF0ZUFsbChjYWxsYmFjaykge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuYW5pbWF0aW9uKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChhbmltYXRpb25DYWxsYmFja0lkKTtcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykgY2FsbGJhY2soKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgYW5pbWF0aW5nID0gZmFsc2UsXG4gICAgICAgICAgYW5pbWF0aW9uVGltZSA9IDA7XG4gICAgICBhbmltYXRpb25TdGF0ZXMuZm9yRWFjaChmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgdmFyIHRpbWUgPSAwLFxuICAgICAgICAgICAgdGFyZ2V0ID0gc3RhdGUudGFyZ2V0LFxuICAgICAgICAgICAgZnJvbVJlY3QgPSB0YXJnZXQuZnJvbVJlY3QsXG4gICAgICAgICAgICB0b1JlY3QgPSBnZXRSZWN0KHRhcmdldCksXG4gICAgICAgICAgICBwcmV2RnJvbVJlY3QgPSB0YXJnZXQucHJldkZyb21SZWN0LFxuICAgICAgICAgICAgcHJldlRvUmVjdCA9IHRhcmdldC5wcmV2VG9SZWN0LFxuICAgICAgICAgICAgYW5pbWF0aW5nUmVjdCA9IHN0YXRlLnJlY3QsXG4gICAgICAgICAgICB0YXJnZXRNYXRyaXggPSBtYXRyaXgodGFyZ2V0LCB0cnVlKTtcblxuICAgICAgICBpZiAodGFyZ2V0TWF0cml4KSB7XG4gICAgICAgICAgLy8gQ29tcGVuc2F0ZSBmb3IgY3VycmVudCBhbmltYXRpb25cbiAgICAgICAgICB0b1JlY3QudG9wIC09IHRhcmdldE1hdHJpeC5mO1xuICAgICAgICAgIHRvUmVjdC5sZWZ0IC09IHRhcmdldE1hdHJpeC5lO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFyZ2V0LnRvUmVjdCA9IHRvUmVjdDtcblxuICAgICAgICBpZiAodGFyZ2V0LnRoaXNBbmltYXRpb25EdXJhdGlvbikge1xuICAgICAgICAgIC8vIENvdWxkIGFsc28gY2hlY2sgaWYgYW5pbWF0aW5nUmVjdCBpcyBiZXR3ZWVuIGZyb21SZWN0IGFuZCB0b1JlY3RcbiAgICAgICAgICBpZiAoaXNSZWN0RXF1YWwocHJldkZyb21SZWN0LCB0b1JlY3QpICYmICFpc1JlY3RFcXVhbChmcm9tUmVjdCwgdG9SZWN0KSAmJiAvLyBNYWtlIHN1cmUgYW5pbWF0aW5nUmVjdCBpcyBvbiBsaW5lIGJldHdlZW4gdG9SZWN0ICYgZnJvbVJlY3RcbiAgICAgICAgICAoYW5pbWF0aW5nUmVjdC50b3AgLSB0b1JlY3QudG9wKSAvIChhbmltYXRpbmdSZWN0LmxlZnQgLSB0b1JlY3QubGVmdCkgPT09IChmcm9tUmVjdC50b3AgLSB0b1JlY3QudG9wKSAvIChmcm9tUmVjdC5sZWZ0IC0gdG9SZWN0LmxlZnQpKSB7XG4gICAgICAgICAgICAvLyBJZiByZXR1cm5pbmcgdG8gc2FtZSBwbGFjZSBhcyBzdGFydGVkIGZyb20gYW5pbWF0aW9uIGFuZCBvbiBzYW1lIGF4aXNcbiAgICAgICAgICAgIHRpbWUgPSBjYWxjdWxhdGVSZWFsVGltZShhbmltYXRpbmdSZWN0LCBwcmV2RnJvbVJlY3QsIHByZXZUb1JlY3QsIF90aGlzLm9wdGlvbnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBpZiBmcm9tUmVjdCAhPSB0b1JlY3Q6IGFuaW1hdGVcblxuXG4gICAgICAgIGlmICghaXNSZWN0RXF1YWwodG9SZWN0LCBmcm9tUmVjdCkpIHtcbiAgICAgICAgICB0YXJnZXQucHJldkZyb21SZWN0ID0gZnJvbVJlY3Q7XG4gICAgICAgICAgdGFyZ2V0LnByZXZUb1JlY3QgPSB0b1JlY3Q7XG5cbiAgICAgICAgICBpZiAoIXRpbWUpIHtcbiAgICAgICAgICAgIHRpbWUgPSBfdGhpcy5vcHRpb25zLmFuaW1hdGlvbjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfdGhpcy5hbmltYXRlKHRhcmdldCwgYW5pbWF0aW5nUmVjdCwgdG9SZWN0LCB0aW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aW1lKSB7XG4gICAgICAgICAgYW5pbWF0aW5nID0gdHJ1ZTtcbiAgICAgICAgICBhbmltYXRpb25UaW1lID0gTWF0aC5tYXgoYW5pbWF0aW9uVGltZSwgdGltZSk7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRhcmdldC5hbmltYXRpb25SZXNldFRpbWVyKTtcbiAgICAgICAgICB0YXJnZXQuYW5pbWF0aW9uUmVzZXRUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGFyZ2V0LmFuaW1hdGlvblRpbWUgPSAwO1xuICAgICAgICAgICAgdGFyZ2V0LnByZXZGcm9tUmVjdCA9IG51bGw7XG4gICAgICAgICAgICB0YXJnZXQuZnJvbVJlY3QgPSBudWxsO1xuICAgICAgICAgICAgdGFyZ2V0LnByZXZUb1JlY3QgPSBudWxsO1xuICAgICAgICAgICAgdGFyZ2V0LnRoaXNBbmltYXRpb25EdXJhdGlvbiA9IG51bGw7XG4gICAgICAgICAgfSwgdGltZSk7XG4gICAgICAgICAgdGFyZ2V0LnRoaXNBbmltYXRpb25EdXJhdGlvbiA9IHRpbWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY2xlYXJUaW1lb3V0KGFuaW1hdGlvbkNhbGxiYWNrSWQpO1xuXG4gICAgICBpZiAoIWFuaW1hdGluZykge1xuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSBjYWxsYmFjaygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYW5pbWF0aW9uQ2FsbGJhY2tJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIGNhbGxiYWNrKCk7XG4gICAgICAgIH0sIGFuaW1hdGlvblRpbWUpO1xuICAgICAgfVxuXG4gICAgICBhbmltYXRpb25TdGF0ZXMgPSBbXTtcbiAgICB9LFxuICAgIGFuaW1hdGU6IGZ1bmN0aW9uIGFuaW1hdGUodGFyZ2V0LCBjdXJyZW50UmVjdCwgdG9SZWN0LCBkdXJhdGlvbikge1xuICAgICAgaWYgKGR1cmF0aW9uKSB7XG4gICAgICAgIGNzcyh0YXJnZXQsICd0cmFuc2l0aW9uJywgJycpO1xuICAgICAgICBjc3ModGFyZ2V0LCAndHJhbnNmb3JtJywgJycpO1xuICAgICAgICB2YXIgZWxNYXRyaXggPSBtYXRyaXgodGhpcy5lbCksXG4gICAgICAgICAgICBzY2FsZVggPSBlbE1hdHJpeCAmJiBlbE1hdHJpeC5hLFxuICAgICAgICAgICAgc2NhbGVZID0gZWxNYXRyaXggJiYgZWxNYXRyaXguZCxcbiAgICAgICAgICAgIHRyYW5zbGF0ZVggPSAoY3VycmVudFJlY3QubGVmdCAtIHRvUmVjdC5sZWZ0KSAvIChzY2FsZVggfHwgMSksXG4gICAgICAgICAgICB0cmFuc2xhdGVZID0gKGN1cnJlbnRSZWN0LnRvcCAtIHRvUmVjdC50b3ApIC8gKHNjYWxlWSB8fCAxKTtcbiAgICAgICAgdGFyZ2V0LmFuaW1hdGluZ1ggPSAhIXRyYW5zbGF0ZVg7XG4gICAgICAgIHRhcmdldC5hbmltYXRpbmdZID0gISF0cmFuc2xhdGVZO1xuICAgICAgICBjc3ModGFyZ2V0LCAndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZTNkKCcgKyB0cmFuc2xhdGVYICsgJ3B4LCcgKyB0cmFuc2xhdGVZICsgJ3B4LDApJyk7XG4gICAgICAgIHRoaXMuZm9yUmVwYWludER1bW15ID0gcmVwYWludCh0YXJnZXQpOyAvLyByZXBhaW50XG5cbiAgICAgICAgY3NzKHRhcmdldCwgJ3RyYW5zaXRpb24nLCAndHJhbnNmb3JtICcgKyBkdXJhdGlvbiArICdtcycgKyAodGhpcy5vcHRpb25zLmVhc2luZyA/ICcgJyArIHRoaXMub3B0aW9ucy5lYXNpbmcgOiAnJykpO1xuICAgICAgICBjc3ModGFyZ2V0LCAndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZTNkKDAsMCwwKScpO1xuICAgICAgICB0eXBlb2YgdGFyZ2V0LmFuaW1hdGVkID09PSAnbnVtYmVyJyAmJiBjbGVhclRpbWVvdXQodGFyZ2V0LmFuaW1hdGVkKTtcbiAgICAgICAgdGFyZ2V0LmFuaW1hdGVkID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY3NzKHRhcmdldCwgJ3RyYW5zaXRpb24nLCAnJyk7XG4gICAgICAgICAgY3NzKHRhcmdldCwgJ3RyYW5zZm9ybScsICcnKTtcbiAgICAgICAgICB0YXJnZXQuYW5pbWF0ZWQgPSBmYWxzZTtcbiAgICAgICAgICB0YXJnZXQuYW5pbWF0aW5nWCA9IGZhbHNlO1xuICAgICAgICAgIHRhcmdldC5hbmltYXRpbmdZID0gZmFsc2U7XG4gICAgICAgIH0sIGR1cmF0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlcGFpbnQodGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXQub2Zmc2V0V2lkdGg7XG59XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZVJlYWxUaW1lKGFuaW1hdGluZ1JlY3QsIGZyb21SZWN0LCB0b1JlY3QsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyhmcm9tUmVjdC50b3AgLSBhbmltYXRpbmdSZWN0LnRvcCwgMikgKyBNYXRoLnBvdyhmcm9tUmVjdC5sZWZ0IC0gYW5pbWF0aW5nUmVjdC5sZWZ0LCAyKSkgLyBNYXRoLnNxcnQoTWF0aC5wb3coZnJvbVJlY3QudG9wIC0gdG9SZWN0LnRvcCwgMikgKyBNYXRoLnBvdyhmcm9tUmVjdC5sZWZ0IC0gdG9SZWN0LmxlZnQsIDIpKSAqIG9wdGlvbnMuYW5pbWF0aW9uO1xufVxuXG52YXIgcGx1Z2lucyA9IFtdO1xudmFyIGRlZmF1bHRzID0ge1xuICBpbml0aWFsaXplQnlEZWZhdWx0OiB0cnVlXG59O1xudmFyIFBsdWdpbk1hbmFnZXIgPSB7XG4gIG1vdW50OiBmdW5jdGlvbiBtb3VudChwbHVnaW4pIHtcbiAgICAvLyBTZXQgZGVmYXVsdCBzdGF0aWMgcHJvcGVydGllc1xuICAgIGZvciAodmFyIG9wdGlvbiBpbiBkZWZhdWx0cykge1xuICAgICAgaWYgKGRlZmF1bHRzLmhhc093blByb3BlcnR5KG9wdGlvbikgJiYgIShvcHRpb24gaW4gcGx1Z2luKSkge1xuICAgICAgICBwbHVnaW5bb3B0aW9uXSA9IGRlZmF1bHRzW29wdGlvbl07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGx1Z2lucy5mb3JFYWNoKGZ1bmN0aW9uIChwKSB7XG4gICAgICBpZiAocC5wbHVnaW5OYW1lID09PSBwbHVnaW4ucGx1Z2luTmFtZSkge1xuICAgICAgICB0aHJvdyBcIlNvcnRhYmxlOiBDYW5ub3QgbW91bnQgcGx1Z2luIFwiLmNvbmNhdChwbHVnaW4ucGx1Z2luTmFtZSwgXCIgbW9yZSB0aGFuIG9uY2VcIik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcGx1Z2lucy5wdXNoKHBsdWdpbik7XG4gIH0sXG4gIHBsdWdpbkV2ZW50OiBmdW5jdGlvbiBwbHVnaW5FdmVudChldmVudE5hbWUsIHNvcnRhYmxlLCBldnQpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy5ldmVudENhbmNlbGVkID0gZmFsc2U7XG5cbiAgICBldnQuY2FuY2VsID0gZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuZXZlbnRDYW5jZWxlZCA9IHRydWU7XG4gICAgfTtcblxuICAgIHZhciBldmVudE5hbWVHbG9iYWwgPSBldmVudE5hbWUgKyAnR2xvYmFsJztcbiAgICBwbHVnaW5zLmZvckVhY2goZnVuY3Rpb24gKHBsdWdpbikge1xuICAgICAgaWYgKCFzb3J0YWJsZVtwbHVnaW4ucGx1Z2luTmFtZV0pIHJldHVybjsgLy8gRmlyZSBnbG9iYWwgZXZlbnRzIGlmIGl0IGV4aXN0cyBpbiB0aGlzIHNvcnRhYmxlXG5cbiAgICAgIGlmIChzb3J0YWJsZVtwbHVnaW4ucGx1Z2luTmFtZV1bZXZlbnROYW1lR2xvYmFsXSkge1xuICAgICAgICBzb3J0YWJsZVtwbHVnaW4ucGx1Z2luTmFtZV1bZXZlbnROYW1lR2xvYmFsXShfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgICBzb3J0YWJsZTogc29ydGFibGVcbiAgICAgICAgfSwgZXZ0KSk7XG4gICAgICB9IC8vIE9ubHkgZmlyZSBwbHVnaW4gZXZlbnQgaWYgcGx1Z2luIGlzIGVuYWJsZWQgaW4gdGhpcyBzb3J0YWJsZSxcbiAgICAgIC8vIGFuZCBwbHVnaW4gaGFzIGV2ZW50IGRlZmluZWRcblxuXG4gICAgICBpZiAoc29ydGFibGUub3B0aW9uc1twbHVnaW4ucGx1Z2luTmFtZV0gJiYgc29ydGFibGVbcGx1Z2luLnBsdWdpbk5hbWVdW2V2ZW50TmFtZV0pIHtcbiAgICAgICAgc29ydGFibGVbcGx1Z2luLnBsdWdpbk5hbWVdW2V2ZW50TmFtZV0oX29iamVjdFNwcmVhZCh7XG4gICAgICAgICAgc29ydGFibGU6IHNvcnRhYmxlXG4gICAgICAgIH0sIGV2dCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LFxuICBpbml0aWFsaXplUGx1Z2luczogZnVuY3Rpb24gaW5pdGlhbGl6ZVBsdWdpbnMoc29ydGFibGUsIGVsLCBkZWZhdWx0cywgb3B0aW9ucykge1xuICAgIHBsdWdpbnMuZm9yRWFjaChmdW5jdGlvbiAocGx1Z2luKSB7XG4gICAgICB2YXIgcGx1Z2luTmFtZSA9IHBsdWdpbi5wbHVnaW5OYW1lO1xuICAgICAgaWYgKCFzb3J0YWJsZS5vcHRpb25zW3BsdWdpbk5hbWVdICYmICFwbHVnaW4uaW5pdGlhbGl6ZUJ5RGVmYXVsdCkgcmV0dXJuO1xuICAgICAgdmFyIGluaXRpYWxpemVkID0gbmV3IHBsdWdpbihzb3J0YWJsZSwgZWwsIHNvcnRhYmxlLm9wdGlvbnMpO1xuICAgICAgaW5pdGlhbGl6ZWQuc29ydGFibGUgPSBzb3J0YWJsZTtcbiAgICAgIGluaXRpYWxpemVkLm9wdGlvbnMgPSBzb3J0YWJsZS5vcHRpb25zO1xuICAgICAgc29ydGFibGVbcGx1Z2luTmFtZV0gPSBpbml0aWFsaXplZDsgLy8gQWRkIGRlZmF1bHQgb3B0aW9ucyBmcm9tIHBsdWdpblxuXG4gICAgICBfZXh0ZW5kcyhkZWZhdWx0cywgaW5pdGlhbGl6ZWQuZGVmYXVsdHMpO1xuICAgIH0pO1xuXG4gICAgZm9yICh2YXIgb3B0aW9uIGluIHNvcnRhYmxlLm9wdGlvbnMpIHtcbiAgICAgIGlmICghc29ydGFibGUub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShvcHRpb24pKSBjb250aW51ZTtcbiAgICAgIHZhciBtb2RpZmllZCA9IHRoaXMubW9kaWZ5T3B0aW9uKHNvcnRhYmxlLCBvcHRpb24sIHNvcnRhYmxlLm9wdGlvbnNbb3B0aW9uXSk7XG5cbiAgICAgIGlmICh0eXBlb2YgbW9kaWZpZWQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHNvcnRhYmxlLm9wdGlvbnNbb3B0aW9uXSA9IG1vZGlmaWVkO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgZ2V0RXZlbnRQcm9wZXJ0aWVzOiBmdW5jdGlvbiBnZXRFdmVudFByb3BlcnRpZXMobmFtZSwgc29ydGFibGUpIHtcbiAgICB2YXIgZXZlbnRQcm9wZXJ0aWVzID0ge307XG4gICAgcGx1Z2lucy5mb3JFYWNoKGZ1bmN0aW9uIChwbHVnaW4pIHtcbiAgICAgIGlmICh0eXBlb2YgcGx1Z2luLmV2ZW50UHJvcGVydGllcyAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuO1xuXG4gICAgICBfZXh0ZW5kcyhldmVudFByb3BlcnRpZXMsIHBsdWdpbi5ldmVudFByb3BlcnRpZXMuY2FsbChzb3J0YWJsZVtwbHVnaW4ucGx1Z2luTmFtZV0sIG5hbWUpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZXZlbnRQcm9wZXJ0aWVzO1xuICB9LFxuICBtb2RpZnlPcHRpb246IGZ1bmN0aW9uIG1vZGlmeU9wdGlvbihzb3J0YWJsZSwgbmFtZSwgdmFsdWUpIHtcbiAgICB2YXIgbW9kaWZpZWRWYWx1ZTtcbiAgICBwbHVnaW5zLmZvckVhY2goZnVuY3Rpb24gKHBsdWdpbikge1xuICAgICAgLy8gUGx1Z2luIG11c3QgZXhpc3Qgb24gdGhlIFNvcnRhYmxlXG4gICAgICBpZiAoIXNvcnRhYmxlW3BsdWdpbi5wbHVnaW5OYW1lXSkgcmV0dXJuOyAvLyBJZiBzdGF0aWMgb3B0aW9uIGxpc3RlbmVyIGV4aXN0cyBmb3IgdGhpcyBvcHRpb24sIGNhbGwgaW4gdGhlIGNvbnRleHQgb2YgdGhlIFNvcnRhYmxlJ3MgaW5zdGFuY2Ugb2YgdGhpcyBwbHVnaW5cblxuICAgICAgaWYgKHBsdWdpbi5vcHRpb25MaXN0ZW5lcnMgJiYgdHlwZW9mIHBsdWdpbi5vcHRpb25MaXN0ZW5lcnNbbmFtZV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgbW9kaWZpZWRWYWx1ZSA9IHBsdWdpbi5vcHRpb25MaXN0ZW5lcnNbbmFtZV0uY2FsbChzb3J0YWJsZVtwbHVnaW4ucGx1Z2luTmFtZV0sIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gbW9kaWZpZWRWYWx1ZTtcbiAgfVxufTtcblxuZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChfcmVmKSB7XG4gIHZhciBzb3J0YWJsZSA9IF9yZWYuc29ydGFibGUsXG4gICAgICByb290RWwgPSBfcmVmLnJvb3RFbCxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWUsXG4gICAgICB0YXJnZXRFbCA9IF9yZWYudGFyZ2V0RWwsXG4gICAgICBjbG9uZUVsID0gX3JlZi5jbG9uZUVsLFxuICAgICAgdG9FbCA9IF9yZWYudG9FbCxcbiAgICAgIGZyb21FbCA9IF9yZWYuZnJvbUVsLFxuICAgICAgb2xkSW5kZXggPSBfcmVmLm9sZEluZGV4LFxuICAgICAgbmV3SW5kZXggPSBfcmVmLm5ld0luZGV4LFxuICAgICAgb2xkRHJhZ2dhYmxlSW5kZXggPSBfcmVmLm9sZERyYWdnYWJsZUluZGV4LFxuICAgICAgbmV3RHJhZ2dhYmxlSW5kZXggPSBfcmVmLm5ld0RyYWdnYWJsZUluZGV4LFxuICAgICAgb3JpZ2luYWxFdmVudCA9IF9yZWYub3JpZ2luYWxFdmVudCxcbiAgICAgIHB1dFNvcnRhYmxlID0gX3JlZi5wdXRTb3J0YWJsZSxcbiAgICAgIGV4dHJhRXZlbnRQcm9wZXJ0aWVzID0gX3JlZi5leHRyYUV2ZW50UHJvcGVydGllcztcbiAgc29ydGFibGUgPSBzb3J0YWJsZSB8fCByb290RWwgJiYgcm9vdEVsW2V4cGFuZG9dO1xuICBpZiAoIXNvcnRhYmxlKSByZXR1cm47XG4gIHZhciBldnQsXG4gICAgICBvcHRpb25zID0gc29ydGFibGUub3B0aW9ucyxcbiAgICAgIG9uTmFtZSA9ICdvbicgKyBuYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zdWJzdHIoMSk7IC8vIFN1cHBvcnQgZm9yIG5ldyBDdXN0b21FdmVudCBmZWF0dXJlXG5cbiAgaWYgKHdpbmRvdy5DdXN0b21FdmVudCAmJiAhSUUxMU9yTGVzcyAmJiAhRWRnZSkge1xuICAgIGV2dCA9IG5ldyBDdXN0b21FdmVudChuYW1lLCB7XG4gICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgY2FuY2VsYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgIGV2dC5pbml0RXZlbnQobmFtZSwgdHJ1ZSwgdHJ1ZSk7XG4gIH1cblxuICBldnQudG8gPSB0b0VsIHx8IHJvb3RFbDtcbiAgZXZ0LmZyb20gPSBmcm9tRWwgfHwgcm9vdEVsO1xuICBldnQuaXRlbSA9IHRhcmdldEVsIHx8IHJvb3RFbDtcbiAgZXZ0LmNsb25lID0gY2xvbmVFbDtcbiAgZXZ0Lm9sZEluZGV4ID0gb2xkSW5kZXg7XG4gIGV2dC5uZXdJbmRleCA9IG5ld0luZGV4O1xuICBldnQub2xkRHJhZ2dhYmxlSW5kZXggPSBvbGREcmFnZ2FibGVJbmRleDtcbiAgZXZ0Lm5ld0RyYWdnYWJsZUluZGV4ID0gbmV3RHJhZ2dhYmxlSW5kZXg7XG4gIGV2dC5vcmlnaW5hbEV2ZW50ID0gb3JpZ2luYWxFdmVudDtcbiAgZXZ0LnB1bGxNb2RlID0gcHV0U29ydGFibGUgPyBwdXRTb3J0YWJsZS5sYXN0UHV0TW9kZSA6IHVuZGVmaW5lZDtcblxuICB2YXIgYWxsRXZlbnRQcm9wZXJ0aWVzID0gX29iamVjdFNwcmVhZCh7fSwgZXh0cmFFdmVudFByb3BlcnRpZXMsIFBsdWdpbk1hbmFnZXIuZ2V0RXZlbnRQcm9wZXJ0aWVzKG5hbWUsIHNvcnRhYmxlKSk7XG5cbiAgZm9yICh2YXIgb3B0aW9uIGluIGFsbEV2ZW50UHJvcGVydGllcykge1xuICAgIGV2dFtvcHRpb25dID0gYWxsRXZlbnRQcm9wZXJ0aWVzW29wdGlvbl07XG4gIH1cblxuICBpZiAocm9vdEVsKSB7XG4gICAgcm9vdEVsLmRpc3BhdGNoRXZlbnQoZXZ0KTtcbiAgfVxuXG4gIGlmIChvcHRpb25zW29uTmFtZV0pIHtcbiAgICBvcHRpb25zW29uTmFtZV0uY2FsbChzb3J0YWJsZSwgZXZ0KTtcbiAgfVxufVxuXG52YXIgcGx1Z2luRXZlbnQgPSBmdW5jdGlvbiBwbHVnaW5FdmVudChldmVudE5hbWUsIHNvcnRhYmxlKSB7XG4gIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fSxcbiAgICAgIG9yaWdpbmFsRXZlbnQgPSBfcmVmLmV2dCxcbiAgICAgIGRhdGEgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiZXZ0XCJdKTtcblxuICBQbHVnaW5NYW5hZ2VyLnBsdWdpbkV2ZW50LmJpbmQoU29ydGFibGUpKGV2ZW50TmFtZSwgc29ydGFibGUsIF9vYmplY3RTcHJlYWQoe1xuICAgIGRyYWdFbDogZHJhZ0VsLFxuICAgIHBhcmVudEVsOiBwYXJlbnRFbCxcbiAgICBnaG9zdEVsOiBnaG9zdEVsLFxuICAgIHJvb3RFbDogcm9vdEVsLFxuICAgIG5leHRFbDogbmV4dEVsLFxuICAgIGxhc3REb3duRWw6IGxhc3REb3duRWwsXG4gICAgY2xvbmVFbDogY2xvbmVFbCxcbiAgICBjbG9uZUhpZGRlbjogY2xvbmVIaWRkZW4sXG4gICAgZHJhZ1N0YXJ0ZWQ6IG1vdmVkLFxuICAgIHB1dFNvcnRhYmxlOiBwdXRTb3J0YWJsZSxcbiAgICBhY3RpdmVTb3J0YWJsZTogU29ydGFibGUuYWN0aXZlLFxuICAgIG9yaWdpbmFsRXZlbnQ6IG9yaWdpbmFsRXZlbnQsXG4gICAgb2xkSW5kZXg6IG9sZEluZGV4LFxuICAgIG9sZERyYWdnYWJsZUluZGV4OiBvbGREcmFnZ2FibGVJbmRleCxcbiAgICBuZXdJbmRleDogbmV3SW5kZXgsXG4gICAgbmV3RHJhZ2dhYmxlSW5kZXg6IG5ld0RyYWdnYWJsZUluZGV4LFxuICAgIGhpZGVHaG9zdEZvclRhcmdldDogX2hpZGVHaG9zdEZvclRhcmdldCxcbiAgICB1bmhpZGVHaG9zdEZvclRhcmdldDogX3VuaGlkZUdob3N0Rm9yVGFyZ2V0LFxuICAgIGNsb25lTm93SGlkZGVuOiBmdW5jdGlvbiBjbG9uZU5vd0hpZGRlbigpIHtcbiAgICAgIGNsb25lSGlkZGVuID0gdHJ1ZTtcbiAgICB9LFxuICAgIGNsb25lTm93U2hvd246IGZ1bmN0aW9uIGNsb25lTm93U2hvd24oKSB7XG4gICAgICBjbG9uZUhpZGRlbiA9IGZhbHNlO1xuICAgIH0sXG4gICAgZGlzcGF0Y2hTb3J0YWJsZUV2ZW50OiBmdW5jdGlvbiBkaXNwYXRjaFNvcnRhYmxlRXZlbnQobmFtZSkge1xuICAgICAgX2Rpc3BhdGNoRXZlbnQoe1xuICAgICAgICBzb3J0YWJsZTogc29ydGFibGUsXG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIG9yaWdpbmFsRXZlbnQ6IG9yaWdpbmFsRXZlbnRcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgZGF0YSkpO1xufTtcblxuZnVuY3Rpb24gX2Rpc3BhdGNoRXZlbnQoaW5mbykge1xuICBkaXNwYXRjaEV2ZW50KF9vYmplY3RTcHJlYWQoe1xuICAgIHB1dFNvcnRhYmxlOiBwdXRTb3J0YWJsZSxcbiAgICBjbG9uZUVsOiBjbG9uZUVsLFxuICAgIHRhcmdldEVsOiBkcmFnRWwsXG4gICAgcm9vdEVsOiByb290RWwsXG4gICAgb2xkSW5kZXg6IG9sZEluZGV4LFxuICAgIG9sZERyYWdnYWJsZUluZGV4OiBvbGREcmFnZ2FibGVJbmRleCxcbiAgICBuZXdJbmRleDogbmV3SW5kZXgsXG4gICAgbmV3RHJhZ2dhYmxlSW5kZXg6IG5ld0RyYWdnYWJsZUluZGV4XG4gIH0sIGluZm8pKTtcbn1cblxudmFyIGRyYWdFbCxcbiAgICBwYXJlbnRFbCxcbiAgICBnaG9zdEVsLFxuICAgIHJvb3RFbCxcbiAgICBuZXh0RWwsXG4gICAgbGFzdERvd25FbCxcbiAgICBjbG9uZUVsLFxuICAgIGNsb25lSGlkZGVuLFxuICAgIG9sZEluZGV4LFxuICAgIG5ld0luZGV4LFxuICAgIG9sZERyYWdnYWJsZUluZGV4LFxuICAgIG5ld0RyYWdnYWJsZUluZGV4LFxuICAgIGFjdGl2ZUdyb3VwLFxuICAgIHB1dFNvcnRhYmxlLFxuICAgIGF3YWl0aW5nRHJhZ1N0YXJ0ZWQgPSBmYWxzZSxcbiAgICBpZ25vcmVOZXh0Q2xpY2sgPSBmYWxzZSxcbiAgICBzb3J0YWJsZXMgPSBbXSxcbiAgICB0YXBFdnQsXG4gICAgdG91Y2hFdnQsXG4gICAgbGFzdER4LFxuICAgIGxhc3REeSxcbiAgICB0YXBEaXN0YW5jZUxlZnQsXG4gICAgdGFwRGlzdGFuY2VUb3AsXG4gICAgbW92ZWQsXG4gICAgbGFzdFRhcmdldCxcbiAgICBsYXN0RGlyZWN0aW9uLFxuICAgIHBhc3RGaXJzdEludmVydFRocmVzaCA9IGZhbHNlLFxuICAgIGlzQ2lyY3Vtc3RhbnRpYWxJbnZlcnQgPSBmYWxzZSxcbiAgICB0YXJnZXRNb3ZlRGlzdGFuY2UsXG4gICAgLy8gRm9yIHBvc2l0aW9uaW5nIGdob3N0IGFic29sdXRlbHlcbmdob3N0UmVsYXRpdmVQYXJlbnQsXG4gICAgZ2hvc3RSZWxhdGl2ZVBhcmVudEluaXRpYWxTY3JvbGwgPSBbXSxcbiAgICAvLyAobGVmdCwgdG9wKVxuX3NpbGVudCA9IGZhbHNlLFxuICAgIHNhdmVkSW5wdXRDaGVja2VkID0gW107XG4vKiogQGNvbnN0ICovXG5cbnZhciBkb2N1bWVudEV4aXN0cyA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcsXG4gICAgUG9zaXRpb25HaG9zdEFic29sdXRlbHkgPSBJT1MsXG4gICAgQ1NTRmxvYXRQcm9wZXJ0eSA9IEVkZ2UgfHwgSUUxMU9yTGVzcyA/ICdjc3NGbG9hdCcgOiAnZmxvYXQnLFxuICAgIC8vIFRoaXMgd2lsbCBub3QgcGFzcyBmb3IgSUU5LCBiZWNhdXNlIElFOSBEbkQgb25seSB3b3JrcyBvbiBhbmNob3JzXG5zdXBwb3J0RHJhZ2dhYmxlID0gZG9jdW1lbnRFeGlzdHMgJiYgIUNocm9tZUZvckFuZHJvaWQgJiYgIUlPUyAmJiAnZHJhZ2dhYmxlJyBpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSxcbiAgICBzdXBwb3J0Q3NzUG9pbnRlckV2ZW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCFkb2N1bWVudEV4aXN0cykgcmV0dXJuOyAvLyBmYWxzZSB3aGVuIDw9IElFMTFcblxuICBpZiAoSUUxMU9yTGVzcykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3gnKTtcbiAgZWwuc3R5bGUuY3NzVGV4dCA9ICdwb2ludGVyLWV2ZW50czphdXRvJztcbiAgcmV0dXJuIGVsLnN0eWxlLnBvaW50ZXJFdmVudHMgPT09ICdhdXRvJztcbn0oKSxcbiAgICBfZGV0ZWN0RGlyZWN0aW9uID0gZnVuY3Rpb24gX2RldGVjdERpcmVjdGlvbihlbCwgb3B0aW9ucykge1xuICB2YXIgZWxDU1MgPSBjc3MoZWwpLFxuICAgICAgZWxXaWR0aCA9IHBhcnNlSW50KGVsQ1NTLndpZHRoKSAtIHBhcnNlSW50KGVsQ1NTLnBhZGRpbmdMZWZ0KSAtIHBhcnNlSW50KGVsQ1NTLnBhZGRpbmdSaWdodCkgLSBwYXJzZUludChlbENTUy5ib3JkZXJMZWZ0V2lkdGgpIC0gcGFyc2VJbnQoZWxDU1MuYm9yZGVyUmlnaHRXaWR0aCksXG4gICAgICBjaGlsZDEgPSBnZXRDaGlsZChlbCwgMCwgb3B0aW9ucyksXG4gICAgICBjaGlsZDIgPSBnZXRDaGlsZChlbCwgMSwgb3B0aW9ucyksXG4gICAgICBmaXJzdENoaWxkQ1NTID0gY2hpbGQxICYmIGNzcyhjaGlsZDEpLFxuICAgICAgc2Vjb25kQ2hpbGRDU1MgPSBjaGlsZDIgJiYgY3NzKGNoaWxkMiksXG4gICAgICBmaXJzdENoaWxkV2lkdGggPSBmaXJzdENoaWxkQ1NTICYmIHBhcnNlSW50KGZpcnN0Q2hpbGRDU1MubWFyZ2luTGVmdCkgKyBwYXJzZUludChmaXJzdENoaWxkQ1NTLm1hcmdpblJpZ2h0KSArIGdldFJlY3QoY2hpbGQxKS53aWR0aCxcbiAgICAgIHNlY29uZENoaWxkV2lkdGggPSBzZWNvbmRDaGlsZENTUyAmJiBwYXJzZUludChzZWNvbmRDaGlsZENTUy5tYXJnaW5MZWZ0KSArIHBhcnNlSW50KHNlY29uZENoaWxkQ1NTLm1hcmdpblJpZ2h0KSArIGdldFJlY3QoY2hpbGQyKS53aWR0aDtcblxuICBpZiAoZWxDU1MuZGlzcGxheSA9PT0gJ2ZsZXgnKSB7XG4gICAgcmV0dXJuIGVsQ1NTLmZsZXhEaXJlY3Rpb24gPT09ICdjb2x1bW4nIHx8IGVsQ1NTLmZsZXhEaXJlY3Rpb24gPT09ICdjb2x1bW4tcmV2ZXJzZScgPyAndmVydGljYWwnIDogJ2hvcml6b250YWwnO1xuICB9XG5cbiAgaWYgKGVsQ1NTLmRpc3BsYXkgPT09ICdncmlkJykge1xuICAgIHJldHVybiBlbENTUy5ncmlkVGVtcGxhdGVDb2x1bW5zLnNwbGl0KCcgJykubGVuZ3RoIDw9IDEgPyAndmVydGljYWwnIDogJ2hvcml6b250YWwnO1xuICB9XG5cbiAgaWYgKGNoaWxkMSAmJiBmaXJzdENoaWxkQ1NTW1wiZmxvYXRcIl0gJiYgZmlyc3RDaGlsZENTU1tcImZsb2F0XCJdICE9PSAnbm9uZScpIHtcbiAgICB2YXIgdG91Y2hpbmdTaWRlQ2hpbGQyID0gZmlyc3RDaGlsZENTU1tcImZsb2F0XCJdID09PSAnbGVmdCcgPyAnbGVmdCcgOiAncmlnaHQnO1xuICAgIHJldHVybiBjaGlsZDIgJiYgKHNlY29uZENoaWxkQ1NTLmNsZWFyID09PSAnYm90aCcgfHwgc2Vjb25kQ2hpbGRDU1MuY2xlYXIgPT09IHRvdWNoaW5nU2lkZUNoaWxkMikgPyAndmVydGljYWwnIDogJ2hvcml6b250YWwnO1xuICB9XG5cbiAgcmV0dXJuIGNoaWxkMSAmJiAoZmlyc3RDaGlsZENTUy5kaXNwbGF5ID09PSAnYmxvY2snIHx8IGZpcnN0Q2hpbGRDU1MuZGlzcGxheSA9PT0gJ2ZsZXgnIHx8IGZpcnN0Q2hpbGRDU1MuZGlzcGxheSA9PT0gJ3RhYmxlJyB8fCBmaXJzdENoaWxkQ1NTLmRpc3BsYXkgPT09ICdncmlkJyB8fCBmaXJzdENoaWxkV2lkdGggPj0gZWxXaWR0aCAmJiBlbENTU1tDU1NGbG9hdFByb3BlcnR5XSA9PT0gJ25vbmUnIHx8IGNoaWxkMiAmJiBlbENTU1tDU1NGbG9hdFByb3BlcnR5XSA9PT0gJ25vbmUnICYmIGZpcnN0Q2hpbGRXaWR0aCArIHNlY29uZENoaWxkV2lkdGggPiBlbFdpZHRoKSA/ICd2ZXJ0aWNhbCcgOiAnaG9yaXpvbnRhbCc7XG59LFxuICAgIF9kcmFnRWxJblJvd0NvbHVtbiA9IGZ1bmN0aW9uIF9kcmFnRWxJblJvd0NvbHVtbihkcmFnUmVjdCwgdGFyZ2V0UmVjdCwgdmVydGljYWwpIHtcbiAgdmFyIGRyYWdFbFMxT3BwID0gdmVydGljYWwgPyBkcmFnUmVjdC5sZWZ0IDogZHJhZ1JlY3QudG9wLFxuICAgICAgZHJhZ0VsUzJPcHAgPSB2ZXJ0aWNhbCA/IGRyYWdSZWN0LnJpZ2h0IDogZHJhZ1JlY3QuYm90dG9tLFxuICAgICAgZHJhZ0VsT3BwTGVuZ3RoID0gdmVydGljYWwgPyBkcmFnUmVjdC53aWR0aCA6IGRyYWdSZWN0LmhlaWdodCxcbiAgICAgIHRhcmdldFMxT3BwID0gdmVydGljYWwgPyB0YXJnZXRSZWN0LmxlZnQgOiB0YXJnZXRSZWN0LnRvcCxcbiAgICAgIHRhcmdldFMyT3BwID0gdmVydGljYWwgPyB0YXJnZXRSZWN0LnJpZ2h0IDogdGFyZ2V0UmVjdC5ib3R0b20sXG4gICAgICB0YXJnZXRPcHBMZW5ndGggPSB2ZXJ0aWNhbCA/IHRhcmdldFJlY3Qud2lkdGggOiB0YXJnZXRSZWN0LmhlaWdodDtcbiAgcmV0dXJuIGRyYWdFbFMxT3BwID09PSB0YXJnZXRTMU9wcCB8fCBkcmFnRWxTMk9wcCA9PT0gdGFyZ2V0UzJPcHAgfHwgZHJhZ0VsUzFPcHAgKyBkcmFnRWxPcHBMZW5ndGggLyAyID09PSB0YXJnZXRTMU9wcCArIHRhcmdldE9wcExlbmd0aCAvIDI7XG59LFxuXG4vKipcbiAqIERldGVjdHMgZmlyc3QgbmVhcmVzdCBlbXB0eSBzb3J0YWJsZSB0byBYIGFuZCBZIHBvc2l0aW9uIHVzaW5nIGVtcHR5SW5zZXJ0VGhyZXNob2xkLlxuICogQHBhcmFtICB7TnVtYmVyfSB4ICAgICAgWCBwb3NpdGlvblxuICogQHBhcmFtICB7TnVtYmVyfSB5ICAgICAgWSBwb3NpdGlvblxuICogQHJldHVybiB7SFRNTEVsZW1lbnR9ICAgRWxlbWVudCBvZiB0aGUgZmlyc3QgZm91bmQgbmVhcmVzdCBTb3J0YWJsZVxuICovXG5fZGV0ZWN0TmVhcmVzdEVtcHR5U29ydGFibGUgPSBmdW5jdGlvbiBfZGV0ZWN0TmVhcmVzdEVtcHR5U29ydGFibGUoeCwgeSkge1xuICB2YXIgcmV0O1xuICBzb3J0YWJsZXMuc29tZShmdW5jdGlvbiAoc29ydGFibGUpIHtcbiAgICBpZiAobGFzdENoaWxkKHNvcnRhYmxlKSkgcmV0dXJuO1xuICAgIHZhciByZWN0ID0gZ2V0UmVjdChzb3J0YWJsZSksXG4gICAgICAgIHRocmVzaG9sZCA9IHNvcnRhYmxlW2V4cGFuZG9dLm9wdGlvbnMuZW1wdHlJbnNlcnRUaHJlc2hvbGQsXG4gICAgICAgIGluc2lkZUhvcml6b250YWxseSA9IHggPj0gcmVjdC5sZWZ0IC0gdGhyZXNob2xkICYmIHggPD0gcmVjdC5yaWdodCArIHRocmVzaG9sZCxcbiAgICAgICAgaW5zaWRlVmVydGljYWxseSA9IHkgPj0gcmVjdC50b3AgLSB0aHJlc2hvbGQgJiYgeSA8PSByZWN0LmJvdHRvbSArIHRocmVzaG9sZDtcblxuICAgIGlmICh0aHJlc2hvbGQgJiYgaW5zaWRlSG9yaXpvbnRhbGx5ICYmIGluc2lkZVZlcnRpY2FsbHkpIHtcbiAgICAgIHJldHVybiByZXQgPSBzb3J0YWJsZTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmV0O1xufSxcbiAgICBfcHJlcGFyZUdyb3VwID0gZnVuY3Rpb24gX3ByZXBhcmVHcm91cChvcHRpb25zKSB7XG4gIGZ1bmN0aW9uIHRvRm4odmFsdWUsIHB1bGwpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRvLCBmcm9tLCBkcmFnRWwsIGV2dCkge1xuICAgICAgdmFyIHNhbWVHcm91cCA9IHRvLm9wdGlvbnMuZ3JvdXAubmFtZSAmJiBmcm9tLm9wdGlvbnMuZ3JvdXAubmFtZSAmJiB0by5vcHRpb25zLmdyb3VwLm5hbWUgPT09IGZyb20ub3B0aW9ucy5ncm91cC5uYW1lO1xuXG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCAmJiAocHVsbCB8fCBzYW1lR3JvdXApKSB7XG4gICAgICAgIC8vIERlZmF1bHQgcHVsbCB2YWx1ZVxuICAgICAgICAvLyBEZWZhdWx0IHB1bGwgYW5kIHB1dCB2YWx1ZSBpZiBzYW1lIGdyb3VwXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHB1bGwgJiYgdmFsdWUgPT09ICdjbG9uZScpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHRvRm4odmFsdWUodG8sIGZyb20sIGRyYWdFbCwgZXZ0KSwgcHVsbCkodG8sIGZyb20sIGRyYWdFbCwgZXZ0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBvdGhlckdyb3VwID0gKHB1bGwgPyB0byA6IGZyb20pLm9wdGlvbnMuZ3JvdXAubmFtZTtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSB0cnVlIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUgPT09IG90aGVyR3JvdXAgfHwgdmFsdWUuam9pbiAmJiB2YWx1ZS5pbmRleE9mKG90aGVyR3JvdXApID4gLTE7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHZhciBncm91cCA9IHt9O1xuICB2YXIgb3JpZ2luYWxHcm91cCA9IG9wdGlvbnMuZ3JvdXA7XG5cbiAgaWYgKCFvcmlnaW5hbEdyb3VwIHx8IF90eXBlb2Yob3JpZ2luYWxHcm91cCkgIT0gJ29iamVjdCcpIHtcbiAgICBvcmlnaW5hbEdyb3VwID0ge1xuICAgICAgbmFtZTogb3JpZ2luYWxHcm91cFxuICAgIH07XG4gIH1cblxuICBncm91cC5uYW1lID0gb3JpZ2luYWxHcm91cC5uYW1lO1xuICBncm91cC5jaGVja1B1bGwgPSB0b0ZuKG9yaWdpbmFsR3JvdXAucHVsbCwgdHJ1ZSk7XG4gIGdyb3VwLmNoZWNrUHV0ID0gdG9GbihvcmlnaW5hbEdyb3VwLnB1dCk7XG4gIGdyb3VwLnJldmVydENsb25lID0gb3JpZ2luYWxHcm91cC5yZXZlcnRDbG9uZTtcbiAgb3B0aW9ucy5ncm91cCA9IGdyb3VwO1xufSxcbiAgICBfaGlkZUdob3N0Rm9yVGFyZ2V0ID0gZnVuY3Rpb24gX2hpZGVHaG9zdEZvclRhcmdldCgpIHtcbiAgaWYgKCFzdXBwb3J0Q3NzUG9pbnRlckV2ZW50cyAmJiBnaG9zdEVsKSB7XG4gICAgY3NzKGdob3N0RWwsICdkaXNwbGF5JywgJ25vbmUnKTtcbiAgfVxufSxcbiAgICBfdW5oaWRlR2hvc3RGb3JUYXJnZXQgPSBmdW5jdGlvbiBfdW5oaWRlR2hvc3RGb3JUYXJnZXQoKSB7XG4gIGlmICghc3VwcG9ydENzc1BvaW50ZXJFdmVudHMgJiYgZ2hvc3RFbCkge1xuICAgIGNzcyhnaG9zdEVsLCAnZGlzcGxheScsICcnKTtcbiAgfVxufTsgLy8gIzExODQgZml4IC0gUHJldmVudCBjbGljayBldmVudCBvbiBmYWxsYmFjayBpZiBkcmFnZ2VkIGJ1dCBpdGVtIG5vdCBjaGFuZ2VkIHBvc2l0aW9uXG5cblxuaWYgKGRvY3VtZW50RXhpc3RzKSB7XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGV2dCkge1xuICAgIGlmIChpZ25vcmVOZXh0Q2xpY2spIHtcbiAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbiAmJiBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uICYmIGV2dC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgIGlnbm9yZU5leHRDbGljayA9IGZhbHNlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG59XG5cbnZhciBuZWFyZXN0RW1wdHlJbnNlcnREZXRlY3RFdmVudCA9IGZ1bmN0aW9uIG5lYXJlc3RFbXB0eUluc2VydERldGVjdEV2ZW50KGV2dCkge1xuICBpZiAoZHJhZ0VsKSB7XG4gICAgZXZ0ID0gZXZ0LnRvdWNoZXMgPyBldnQudG91Y2hlc1swXSA6IGV2dDtcblxuICAgIHZhciBuZWFyZXN0ID0gX2RldGVjdE5lYXJlc3RFbXB0eVNvcnRhYmxlKGV2dC5jbGllbnRYLCBldnQuY2xpZW50WSk7XG5cbiAgICBpZiAobmVhcmVzdCkge1xuICAgICAgLy8gQ3JlYXRlIGltaXRhdGlvbiBldmVudFxuICAgICAgdmFyIGV2ZW50ID0ge307XG5cbiAgICAgIGZvciAodmFyIGkgaW4gZXZ0KSB7XG4gICAgICAgIGlmIChldnQuaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgICAgICBldmVudFtpXSA9IGV2dFtpXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBldmVudC50YXJnZXQgPSBldmVudC5yb290RWwgPSBuZWFyZXN0O1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQgPSB2b2lkIDA7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24gPSB2b2lkIDA7XG5cbiAgICAgIG5lYXJlc3RbZXhwYW5kb10uX29uRHJhZ092ZXIoZXZlbnQpO1xuICAgIH1cbiAgfVxufTtcblxudmFyIF9jaGVja091dHNpZGVUYXJnZXRFbCA9IGZ1bmN0aW9uIF9jaGVja091dHNpZGVUYXJnZXRFbChldnQpIHtcbiAgaWYgKGRyYWdFbCkge1xuICAgIGRyYWdFbC5wYXJlbnROb2RlW2V4cGFuZG9dLl9pc091dHNpZGVUaGlzRWwoZXZ0LnRhcmdldCk7XG4gIH1cbn07XG4vKipcbiAqIEBjbGFzcyAgU29ydGFibGVcbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSAgZWxcbiAqIEBwYXJhbSAge09iamVjdH0gICAgICAgW29wdGlvbnNdXG4gKi9cblxuXG5mdW5jdGlvbiBTb3J0YWJsZShlbCwgb3B0aW9ucykge1xuICBpZiAoIShlbCAmJiBlbC5ub2RlVHlwZSAmJiBlbC5ub2RlVHlwZSA9PT0gMSkpIHtcbiAgICB0aHJvdyBcIlNvcnRhYmxlOiBgZWxgIG11c3QgYmUgYW4gSFRNTEVsZW1lbnQsIG5vdCBcIi5jb25jYXQoe30udG9TdHJpbmcuY2FsbChlbCkpO1xuICB9XG5cbiAgdGhpcy5lbCA9IGVsOyAvLyByb290IGVsZW1lbnRcblxuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zID0gX2V4dGVuZHMoe30sIG9wdGlvbnMpOyAvLyBFeHBvcnQgaW5zdGFuY2VcblxuICBlbFtleHBhbmRvXSA9IHRoaXM7XG4gIHZhciBkZWZhdWx0cyA9IHtcbiAgICBncm91cDogbnVsbCxcbiAgICBzb3J0OiB0cnVlLFxuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBzdG9yZTogbnVsbCxcbiAgICBoYW5kbGU6IG51bGwsXG4gICAgZHJhZ2dhYmxlOiAvXlt1b11sJC9pLnRlc3QoZWwubm9kZU5hbWUpID8gJz5saScgOiAnPionLFxuICAgIHN3YXBUaHJlc2hvbGQ6IDEsXG4gICAgLy8gcGVyY2VudGFnZTsgMCA8PSB4IDw9IDFcbiAgICBpbnZlcnRTd2FwOiBmYWxzZSxcbiAgICAvLyBpbnZlcnQgYWx3YXlzXG4gICAgaW52ZXJ0ZWRTd2FwVGhyZXNob2xkOiBudWxsLFxuICAgIC8vIHdpbGwgYmUgc2V0IHRvIHNhbWUgYXMgc3dhcFRocmVzaG9sZCBpZiBkZWZhdWx0XG4gICAgcmVtb3ZlQ2xvbmVPbkhpZGU6IHRydWUsXG4gICAgZGlyZWN0aW9uOiBmdW5jdGlvbiBkaXJlY3Rpb24oKSB7XG4gICAgICByZXR1cm4gX2RldGVjdERpcmVjdGlvbihlbCwgdGhpcy5vcHRpb25zKTtcbiAgICB9LFxuICAgIGdob3N0Q2xhc3M6ICdzb3J0YWJsZS1naG9zdCcsXG4gICAgY2hvc2VuQ2xhc3M6ICdzb3J0YWJsZS1jaG9zZW4nLFxuICAgIGRyYWdDbGFzczogJ3NvcnRhYmxlLWRyYWcnLFxuICAgIGlnbm9yZTogJ2EsIGltZycsXG4gICAgZmlsdGVyOiBudWxsLFxuICAgIHByZXZlbnRPbkZpbHRlcjogdHJ1ZSxcbiAgICBhbmltYXRpb246IDAsXG4gICAgZWFzaW5nOiBudWxsLFxuICAgIHNldERhdGE6IGZ1bmN0aW9uIHNldERhdGEoZGF0YVRyYW5zZmVyLCBkcmFnRWwpIHtcbiAgICAgIGRhdGFUcmFuc2Zlci5zZXREYXRhKCdUZXh0JywgZHJhZ0VsLnRleHRDb250ZW50KTtcbiAgICB9LFxuICAgIGRyb3BCdWJibGU6IGZhbHNlLFxuICAgIGRyYWdvdmVyQnViYmxlOiBmYWxzZSxcbiAgICBkYXRhSWRBdHRyOiAnZGF0YS1pZCcsXG4gICAgZGVsYXk6IDAsXG4gICAgZGVsYXlPblRvdWNoT25seTogZmFsc2UsXG4gICAgdG91Y2hTdGFydFRocmVzaG9sZDogKE51bWJlci5wYXJzZUludCA/IE51bWJlciA6IHdpbmRvdykucGFyc2VJbnQod2luZG93LmRldmljZVBpeGVsUmF0aW8sIDEwKSB8fCAxLFxuICAgIGZvcmNlRmFsbGJhY2s6IGZhbHNlLFxuICAgIGZhbGxiYWNrQ2xhc3M6ICdzb3J0YWJsZS1mYWxsYmFjaycsXG4gICAgZmFsbGJhY2tPbkJvZHk6IGZhbHNlLFxuICAgIGZhbGxiYWNrVG9sZXJhbmNlOiAwLFxuICAgIGZhbGxiYWNrT2Zmc2V0OiB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH0sXG4gICAgc3VwcG9ydFBvaW50ZXI6IFNvcnRhYmxlLnN1cHBvcnRQb2ludGVyICE9PSBmYWxzZSAmJiAnUG9pbnRlckV2ZW50JyBpbiB3aW5kb3cgJiYgIVNhZmFyaSxcbiAgICBlbXB0eUluc2VydFRocmVzaG9sZDogNVxuICB9O1xuICBQbHVnaW5NYW5hZ2VyLmluaXRpYWxpemVQbHVnaW5zKHRoaXMsIGVsLCBkZWZhdWx0cyk7IC8vIFNldCBkZWZhdWx0IG9wdGlvbnNcblxuICBmb3IgKHZhciBuYW1lIGluIGRlZmF1bHRzKSB7XG4gICAgIShuYW1lIGluIG9wdGlvbnMpICYmIChvcHRpb25zW25hbWVdID0gZGVmYXVsdHNbbmFtZV0pO1xuICB9XG5cbiAgX3ByZXBhcmVHcm91cChvcHRpb25zKTsgLy8gQmluZCBhbGwgcHJpdmF0ZSBtZXRob2RzXG5cblxuICBmb3IgKHZhciBmbiBpbiB0aGlzKSB7XG4gICAgaWYgKGZuLmNoYXJBdCgwKSA9PT0gJ18nICYmIHR5cGVvZiB0aGlzW2ZuXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1tmbl0gPSB0aGlzW2ZuXS5iaW5kKHRoaXMpO1xuICAgIH1cbiAgfSAvLyBTZXR1cCBkcmFnIG1vZGVcblxuXG4gIHRoaXMubmF0aXZlRHJhZ2dhYmxlID0gb3B0aW9ucy5mb3JjZUZhbGxiYWNrID8gZmFsc2UgOiBzdXBwb3J0RHJhZ2dhYmxlO1xuXG4gIGlmICh0aGlzLm5hdGl2ZURyYWdnYWJsZSkge1xuICAgIC8vIFRvdWNoIHN0YXJ0IHRocmVzaG9sZCBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBuYXRpdmUgZHJhZ3N0YXJ0IHRocmVzaG9sZFxuICAgIHRoaXMub3B0aW9ucy50b3VjaFN0YXJ0VGhyZXNob2xkID0gMTtcbiAgfSAvLyBCaW5kIGV2ZW50c1xuXG5cbiAgaWYgKG9wdGlvbnMuc3VwcG9ydFBvaW50ZXIpIHtcbiAgICBvbihlbCwgJ3BvaW50ZXJkb3duJywgdGhpcy5fb25UYXBTdGFydCk7XG4gIH0gZWxzZSB7XG4gICAgb24oZWwsICdtb3VzZWRvd24nLCB0aGlzLl9vblRhcFN0YXJ0KTtcbiAgICBvbihlbCwgJ3RvdWNoc3RhcnQnLCB0aGlzLl9vblRhcFN0YXJ0KTtcbiAgfVxuXG4gIGlmICh0aGlzLm5hdGl2ZURyYWdnYWJsZSkge1xuICAgIG9uKGVsLCAnZHJhZ292ZXInLCB0aGlzKTtcbiAgICBvbihlbCwgJ2RyYWdlbnRlcicsIHRoaXMpO1xuICB9XG5cbiAgc29ydGFibGVzLnB1c2godGhpcy5lbCk7IC8vIFJlc3RvcmUgc29ydGluZ1xuXG4gIG9wdGlvbnMuc3RvcmUgJiYgb3B0aW9ucy5zdG9yZS5nZXQgJiYgdGhpcy5zb3J0KG9wdGlvbnMuc3RvcmUuZ2V0KHRoaXMpIHx8IFtdKTsgLy8gQWRkIGFuaW1hdGlvbiBzdGF0ZSBtYW5hZ2VyXG5cbiAgX2V4dGVuZHModGhpcywgQW5pbWF0aW9uU3RhdGVNYW5hZ2VyKCkpO1xufVxuXG5Tb3J0YWJsZS5wcm90b3R5cGUgPVxuLyoqIEBsZW5kcyBTb3J0YWJsZS5wcm90b3R5cGUgKi9cbntcbiAgY29uc3RydWN0b3I6IFNvcnRhYmxlLFxuICBfaXNPdXRzaWRlVGhpc0VsOiBmdW5jdGlvbiBfaXNPdXRzaWRlVGhpc0VsKHRhcmdldCkge1xuICAgIGlmICghdGhpcy5lbC5jb250YWlucyh0YXJnZXQpICYmIHRhcmdldCAhPT0gdGhpcy5lbCkge1xuICAgICAgbGFzdFRhcmdldCA9IG51bGw7XG4gICAgfVxuICB9LFxuICBfZ2V0RGlyZWN0aW9uOiBmdW5jdGlvbiBfZ2V0RGlyZWN0aW9uKGV2dCwgdGFyZ2V0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uID09PSAnZnVuY3Rpb24nID8gdGhpcy5vcHRpb25zLmRpcmVjdGlvbi5jYWxsKHRoaXMsIGV2dCwgdGFyZ2V0LCBkcmFnRWwpIDogdGhpcy5vcHRpb25zLmRpcmVjdGlvbjtcbiAgfSxcbiAgX29uVGFwU3RhcnQ6IGZ1bmN0aW9uIF9vblRhcFN0YXJ0KFxuICAvKiogRXZlbnR8VG91Y2hFdmVudCAqL1xuICBldnQpIHtcbiAgICBpZiAoIWV2dC5jYW5jZWxhYmxlKSByZXR1cm47XG5cbiAgICB2YXIgX3RoaXMgPSB0aGlzLFxuICAgICAgICBlbCA9IHRoaXMuZWwsXG4gICAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG4gICAgICAgIHByZXZlbnRPbkZpbHRlciA9IG9wdGlvbnMucHJldmVudE9uRmlsdGVyLFxuICAgICAgICB0eXBlID0gZXZ0LnR5cGUsXG4gICAgICAgIHRvdWNoID0gZXZ0LnRvdWNoZXMgJiYgZXZ0LnRvdWNoZXNbMF0gfHwgZXZ0LnBvaW50ZXJUeXBlICYmIGV2dC5wb2ludGVyVHlwZSA9PT0gJ3RvdWNoJyAmJiBldnQsXG4gICAgICAgIHRhcmdldCA9ICh0b3VjaCB8fCBldnQpLnRhcmdldCxcbiAgICAgICAgb3JpZ2luYWxUYXJnZXQgPSBldnQudGFyZ2V0LnNoYWRvd1Jvb3QgJiYgKGV2dC5wYXRoICYmIGV2dC5wYXRoWzBdIHx8IGV2dC5jb21wb3NlZFBhdGggJiYgZXZ0LmNvbXBvc2VkUGF0aCgpWzBdKSB8fCB0YXJnZXQsXG4gICAgICAgIGZpbHRlciA9IG9wdGlvbnMuZmlsdGVyO1xuXG4gICAgX3NhdmVJbnB1dENoZWNrZWRTdGF0ZShlbCk7IC8vIERvbid0IHRyaWdnZXIgc3RhcnQgZXZlbnQgd2hlbiBhbiBlbGVtZW50IGlzIGJlZW4gZHJhZ2dlZCwgb3RoZXJ3aXNlIHRoZSBldnQub2xkaW5kZXggYWx3YXlzIHdyb25nIHdoZW4gc2V0IG9wdGlvbi5ncm91cC5cblxuXG4gICAgaWYgKGRyYWdFbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICgvbW91c2Vkb3dufHBvaW50ZXJkb3duLy50ZXN0KHR5cGUpICYmIGV2dC5idXR0b24gIT09IDAgfHwgb3B0aW9ucy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuOyAvLyBvbmx5IGxlZnQgYnV0dG9uIGFuZCBlbmFibGVkXG4gICAgfSAvLyBjYW5jZWwgZG5kIGlmIG9yaWdpbmFsIHRhcmdldCBpcyBjb250ZW50IGVkaXRhYmxlXG5cblxuICAgIGlmIChvcmlnaW5hbFRhcmdldC5pc0NvbnRlbnRFZGl0YWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gU2FmYXJpIGlnbm9yZXMgZnVydGhlciBldmVudCBoYW5kbGluZyBhZnRlciBtb3VzZWRvd25cblxuXG4gICAgaWYgKCF0aGlzLm5hdGl2ZURyYWdnYWJsZSAmJiBTYWZhcmkgJiYgdGFyZ2V0ICYmIHRhcmdldC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT09ICdTRUxFQ1QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGFyZ2V0ID0gY2xvc2VzdCh0YXJnZXQsIG9wdGlvbnMuZHJhZ2dhYmxlLCBlbCwgZmFsc2UpO1xuXG4gICAgaWYgKHRhcmdldCAmJiB0YXJnZXQuYW5pbWF0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobGFzdERvd25FbCA9PT0gdGFyZ2V0KSB7XG4gICAgICAvLyBJZ25vcmluZyBkdXBsaWNhdGUgYGRvd25gXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBHZXQgdGhlIGluZGV4IG9mIHRoZSBkcmFnZ2VkIGVsZW1lbnQgd2l0aGluIGl0cyBwYXJlbnRcblxuXG4gICAgb2xkSW5kZXggPSBpbmRleCh0YXJnZXQpO1xuICAgIG9sZERyYWdnYWJsZUluZGV4ID0gaW5kZXgodGFyZ2V0LCBvcHRpb25zLmRyYWdnYWJsZSk7IC8vIENoZWNrIGZpbHRlclxuXG4gICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmIChmaWx0ZXIuY2FsbCh0aGlzLCBldnQsIHRhcmdldCwgdGhpcykpIHtcbiAgICAgICAgX2Rpc3BhdGNoRXZlbnQoe1xuICAgICAgICAgIHNvcnRhYmxlOiBfdGhpcyxcbiAgICAgICAgICByb290RWw6IG9yaWdpbmFsVGFyZ2V0LFxuICAgICAgICAgIG5hbWU6ICdmaWx0ZXInLFxuICAgICAgICAgIHRhcmdldEVsOiB0YXJnZXQsXG4gICAgICAgICAgdG9FbDogZWwsXG4gICAgICAgICAgZnJvbUVsOiBlbFxuICAgICAgICB9KTtcblxuICAgICAgICBwbHVnaW5FdmVudCgnZmlsdGVyJywgX3RoaXMsIHtcbiAgICAgICAgICBldnQ6IGV2dFxuICAgICAgICB9KTtcbiAgICAgICAgcHJldmVudE9uRmlsdGVyICYmIGV2dC5jYW5jZWxhYmxlICYmIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm47IC8vIGNhbmNlbCBkbmRcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGZpbHRlcikge1xuICAgICAgZmlsdGVyID0gZmlsdGVyLnNwbGl0KCcsJykuc29tZShmdW5jdGlvbiAoY3JpdGVyaWEpIHtcbiAgICAgICAgY3JpdGVyaWEgPSBjbG9zZXN0KG9yaWdpbmFsVGFyZ2V0LCBjcml0ZXJpYS50cmltKCksIGVsLCBmYWxzZSk7XG5cbiAgICAgICAgaWYgKGNyaXRlcmlhKSB7XG4gICAgICAgICAgX2Rpc3BhdGNoRXZlbnQoe1xuICAgICAgICAgICAgc29ydGFibGU6IF90aGlzLFxuICAgICAgICAgICAgcm9vdEVsOiBjcml0ZXJpYSxcbiAgICAgICAgICAgIG5hbWU6ICdmaWx0ZXInLFxuICAgICAgICAgICAgdGFyZ2V0RWw6IHRhcmdldCxcbiAgICAgICAgICAgIGZyb21FbDogZWwsXG4gICAgICAgICAgICB0b0VsOiBlbFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcGx1Z2luRXZlbnQoJ2ZpbHRlcicsIF90aGlzLCB7XG4gICAgICAgICAgICBldnQ6IGV2dFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKGZpbHRlcikge1xuICAgICAgICBwcmV2ZW50T25GaWx0ZXIgJiYgZXZ0LmNhbmNlbGFibGUgJiYgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybjsgLy8gY2FuY2VsIGRuZFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmhhbmRsZSAmJiAhY2xvc2VzdChvcmlnaW5hbFRhcmdldCwgb3B0aW9ucy5oYW5kbGUsIGVsLCBmYWxzZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFByZXBhcmUgYGRyYWdzdGFydGBcblxuXG4gICAgdGhpcy5fcHJlcGFyZURyYWdTdGFydChldnQsIHRvdWNoLCB0YXJnZXQpO1xuICB9LFxuICBfcHJlcGFyZURyYWdTdGFydDogZnVuY3Rpb24gX3ByZXBhcmVEcmFnU3RhcnQoXG4gIC8qKiBFdmVudCAqL1xuICBldnQsXG4gIC8qKiBUb3VjaCAqL1xuICB0b3VjaCxcbiAgLyoqIEhUTUxFbGVtZW50ICovXG4gIHRhcmdldCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXMsXG4gICAgICAgIGVsID0gX3RoaXMuZWwsXG4gICAgICAgIG9wdGlvbnMgPSBfdGhpcy5vcHRpb25zLFxuICAgICAgICBvd25lckRvY3VtZW50ID0gZWwub3duZXJEb2N1bWVudCxcbiAgICAgICAgZHJhZ1N0YXJ0Rm47XG5cbiAgICBpZiAodGFyZ2V0ICYmICFkcmFnRWwgJiYgdGFyZ2V0LnBhcmVudE5vZGUgPT09IGVsKSB7XG4gICAgICB2YXIgZHJhZ1JlY3QgPSBnZXRSZWN0KHRhcmdldCk7XG4gICAgICByb290RWwgPSBlbDtcbiAgICAgIGRyYWdFbCA9IHRhcmdldDtcbiAgICAgIHBhcmVudEVsID0gZHJhZ0VsLnBhcmVudE5vZGU7XG4gICAgICBuZXh0RWwgPSBkcmFnRWwubmV4dFNpYmxpbmc7XG4gICAgICBsYXN0RG93bkVsID0gdGFyZ2V0O1xuICAgICAgYWN0aXZlR3JvdXAgPSBvcHRpb25zLmdyb3VwO1xuICAgICAgU29ydGFibGUuZHJhZ2dlZCA9IGRyYWdFbDtcbiAgICAgIHRhcEV2dCA9IHtcbiAgICAgICAgdGFyZ2V0OiBkcmFnRWwsXG4gICAgICAgIGNsaWVudFg6ICh0b3VjaCB8fCBldnQpLmNsaWVudFgsXG4gICAgICAgIGNsaWVudFk6ICh0b3VjaCB8fCBldnQpLmNsaWVudFlcbiAgICAgIH07XG4gICAgICB0YXBEaXN0YW5jZUxlZnQgPSB0YXBFdnQuY2xpZW50WCAtIGRyYWdSZWN0LmxlZnQ7XG4gICAgICB0YXBEaXN0YW5jZVRvcCA9IHRhcEV2dC5jbGllbnRZIC0gZHJhZ1JlY3QudG9wO1xuICAgICAgdGhpcy5fbGFzdFggPSAodG91Y2ggfHwgZXZ0KS5jbGllbnRYO1xuICAgICAgdGhpcy5fbGFzdFkgPSAodG91Y2ggfHwgZXZ0KS5jbGllbnRZO1xuICAgICAgZHJhZ0VsLnN0eWxlWyd3aWxsLWNoYW5nZSddID0gJ2FsbCc7XG5cbiAgICAgIGRyYWdTdGFydEZuID0gZnVuY3Rpb24gZHJhZ1N0YXJ0Rm4oKSB7XG4gICAgICAgIHBsdWdpbkV2ZW50KCdkZWxheUVuZGVkJywgX3RoaXMsIHtcbiAgICAgICAgICBldnQ6IGV2dFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoU29ydGFibGUuZXZlbnRDYW5jZWxlZCkge1xuICAgICAgICAgIF90aGlzLl9vbkRyb3AoKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBEZWxheWVkIGRyYWcgaGFzIGJlZW4gdHJpZ2dlcmVkXG4gICAgICAgIC8vIHdlIGNhbiByZS1lbmFibGUgdGhlIGV2ZW50czogdG91Y2htb3ZlL21vdXNlbW92ZVxuXG5cbiAgICAgICAgX3RoaXMuX2Rpc2FibGVEZWxheWVkRHJhZ0V2ZW50cygpO1xuXG4gICAgICAgIGlmICghRmlyZUZveCAmJiBfdGhpcy5uYXRpdmVEcmFnZ2FibGUpIHtcbiAgICAgICAgICBkcmFnRWwuZHJhZ2dhYmxlID0gdHJ1ZTtcbiAgICAgICAgfSAvLyBCaW5kIHRoZSBldmVudHM6IGRyYWdzdGFydC9kcmFnZW5kXG5cblxuICAgICAgICBfdGhpcy5fdHJpZ2dlckRyYWdTdGFydChldnQsIHRvdWNoKTsgLy8gRHJhZyBzdGFydCBldmVudFxuXG5cbiAgICAgICAgX2Rpc3BhdGNoRXZlbnQoe1xuICAgICAgICAgIHNvcnRhYmxlOiBfdGhpcyxcbiAgICAgICAgICBuYW1lOiAnY2hvb3NlJyxcbiAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldnRcbiAgICAgICAgfSk7IC8vIENob3NlbiBpdGVtXG5cblxuICAgICAgICB0b2dnbGVDbGFzcyhkcmFnRWwsIG9wdGlvbnMuY2hvc2VuQ2xhc3MsIHRydWUpO1xuICAgICAgfTsgLy8gRGlzYWJsZSBcImRyYWdnYWJsZVwiXG5cblxuICAgICAgb3B0aW9ucy5pZ25vcmUuc3BsaXQoJywnKS5mb3JFYWNoKGZ1bmN0aW9uIChjcml0ZXJpYSkge1xuICAgICAgICBmaW5kKGRyYWdFbCwgY3JpdGVyaWEudHJpbSgpLCBfZGlzYWJsZURyYWdnYWJsZSk7XG4gICAgICB9KTtcbiAgICAgIG9uKG93bmVyRG9jdW1lbnQsICdkcmFnb3ZlcicsIG5lYXJlc3RFbXB0eUluc2VydERldGVjdEV2ZW50KTtcbiAgICAgIG9uKG93bmVyRG9jdW1lbnQsICdtb3VzZW1vdmUnLCBuZWFyZXN0RW1wdHlJbnNlcnREZXRlY3RFdmVudCk7XG4gICAgICBvbihvd25lckRvY3VtZW50LCAndG91Y2htb3ZlJywgbmVhcmVzdEVtcHR5SW5zZXJ0RGV0ZWN0RXZlbnQpO1xuICAgICAgb24ob3duZXJEb2N1bWVudCwgJ21vdXNldXAnLCBfdGhpcy5fb25Ecm9wKTtcbiAgICAgIG9uKG93bmVyRG9jdW1lbnQsICd0b3VjaGVuZCcsIF90aGlzLl9vbkRyb3ApO1xuICAgICAgb24ob3duZXJEb2N1bWVudCwgJ3RvdWNoY2FuY2VsJywgX3RoaXMuX29uRHJvcCk7IC8vIE1ha2UgZHJhZ0VsIGRyYWdnYWJsZSAobXVzdCBiZSBiZWZvcmUgZGVsYXkgZm9yIEZpcmVGb3gpXG5cbiAgICAgIGlmIChGaXJlRm94ICYmIHRoaXMubmF0aXZlRHJhZ2dhYmxlKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy50b3VjaFN0YXJ0VGhyZXNob2xkID0gNDtcbiAgICAgICAgZHJhZ0VsLmRyYWdnYWJsZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHBsdWdpbkV2ZW50KCdkZWxheVN0YXJ0JywgdGhpcywge1xuICAgICAgICBldnQ6IGV2dFxuICAgICAgfSk7IC8vIERlbGF5IGlzIGltcG9zc2libGUgZm9yIG5hdGl2ZSBEbkQgaW4gRWRnZSBvciBJRVxuXG4gICAgICBpZiAob3B0aW9ucy5kZWxheSAmJiAoIW9wdGlvbnMuZGVsYXlPblRvdWNoT25seSB8fCB0b3VjaCkgJiYgKCF0aGlzLm5hdGl2ZURyYWdnYWJsZSB8fCAhKEVkZ2UgfHwgSUUxMU9yTGVzcykpKSB7XG4gICAgICAgIGlmIChTb3J0YWJsZS5ldmVudENhbmNlbGVkKSB7XG4gICAgICAgICAgdGhpcy5fb25Ecm9wKCk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gSWYgdGhlIHVzZXIgbW92ZXMgdGhlIHBvaW50ZXIgb3IgbGV0IGdvIHRoZSBjbGljayBvciB0b3VjaFxuICAgICAgICAvLyBiZWZvcmUgdGhlIGRlbGF5IGhhcyBiZWVuIHJlYWNoZWQ6XG4gICAgICAgIC8vIGRpc2FibGUgdGhlIGRlbGF5ZWQgZHJhZ1xuXG5cbiAgICAgICAgb24ob3duZXJEb2N1bWVudCwgJ21vdXNldXAnLCBfdGhpcy5fZGlzYWJsZURlbGF5ZWREcmFnKTtcbiAgICAgICAgb24ob3duZXJEb2N1bWVudCwgJ3RvdWNoZW5kJywgX3RoaXMuX2Rpc2FibGVEZWxheWVkRHJhZyk7XG4gICAgICAgIG9uKG93bmVyRG9jdW1lbnQsICd0b3VjaGNhbmNlbCcsIF90aGlzLl9kaXNhYmxlRGVsYXllZERyYWcpO1xuICAgICAgICBvbihvd25lckRvY3VtZW50LCAnbW91c2Vtb3ZlJywgX3RoaXMuX2RlbGF5ZWREcmFnVG91Y2hNb3ZlSGFuZGxlcik7XG4gICAgICAgIG9uKG93bmVyRG9jdW1lbnQsICd0b3VjaG1vdmUnLCBfdGhpcy5fZGVsYXllZERyYWdUb3VjaE1vdmVIYW5kbGVyKTtcbiAgICAgICAgb3B0aW9ucy5zdXBwb3J0UG9pbnRlciAmJiBvbihvd25lckRvY3VtZW50LCAncG9pbnRlcm1vdmUnLCBfdGhpcy5fZGVsYXllZERyYWdUb3VjaE1vdmVIYW5kbGVyKTtcbiAgICAgICAgX3RoaXMuX2RyYWdTdGFydFRpbWVyID0gc2V0VGltZW91dChkcmFnU3RhcnRGbiwgb3B0aW9ucy5kZWxheSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkcmFnU3RhcnRGbigpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgX2RlbGF5ZWREcmFnVG91Y2hNb3ZlSGFuZGxlcjogZnVuY3Rpb24gX2RlbGF5ZWREcmFnVG91Y2hNb3ZlSGFuZGxlcihcbiAgLyoqIFRvdWNoRXZlbnR8UG9pbnRlckV2ZW50ICoqL1xuICBlKSB7XG4gICAgdmFyIHRvdWNoID0gZS50b3VjaGVzID8gZS50b3VjaGVzWzBdIDogZTtcblxuICAgIGlmIChNYXRoLm1heChNYXRoLmFicyh0b3VjaC5jbGllbnRYIC0gdGhpcy5fbGFzdFgpLCBNYXRoLmFicyh0b3VjaC5jbGllbnRZIC0gdGhpcy5fbGFzdFkpKSA+PSBNYXRoLmZsb29yKHRoaXMub3B0aW9ucy50b3VjaFN0YXJ0VGhyZXNob2xkIC8gKHRoaXMubmF0aXZlRHJhZ2dhYmxlICYmIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpKSkge1xuICAgICAgdGhpcy5fZGlzYWJsZURlbGF5ZWREcmFnKCk7XG4gICAgfVxuICB9LFxuICBfZGlzYWJsZURlbGF5ZWREcmFnOiBmdW5jdGlvbiBfZGlzYWJsZURlbGF5ZWREcmFnKCkge1xuICAgIGRyYWdFbCAmJiBfZGlzYWJsZURyYWdnYWJsZShkcmFnRWwpO1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl9kcmFnU3RhcnRUaW1lcik7XG5cbiAgICB0aGlzLl9kaXNhYmxlRGVsYXllZERyYWdFdmVudHMoKTtcbiAgfSxcbiAgX2Rpc2FibGVEZWxheWVkRHJhZ0V2ZW50czogZnVuY3Rpb24gX2Rpc2FibGVEZWxheWVkRHJhZ0V2ZW50cygpIHtcbiAgICB2YXIgb3duZXJEb2N1bWVudCA9IHRoaXMuZWwub3duZXJEb2N1bWVudDtcbiAgICBvZmYob3duZXJEb2N1bWVudCwgJ21vdXNldXAnLCB0aGlzLl9kaXNhYmxlRGVsYXllZERyYWcpO1xuICAgIG9mZihvd25lckRvY3VtZW50LCAndG91Y2hlbmQnLCB0aGlzLl9kaXNhYmxlRGVsYXllZERyYWcpO1xuICAgIG9mZihvd25lckRvY3VtZW50LCAndG91Y2hjYW5jZWwnLCB0aGlzLl9kaXNhYmxlRGVsYXllZERyYWcpO1xuICAgIG9mZihvd25lckRvY3VtZW50LCAnbW91c2Vtb3ZlJywgdGhpcy5fZGVsYXllZERyYWdUb3VjaE1vdmVIYW5kbGVyKTtcbiAgICBvZmYob3duZXJEb2N1bWVudCwgJ3RvdWNobW92ZScsIHRoaXMuX2RlbGF5ZWREcmFnVG91Y2hNb3ZlSGFuZGxlcik7XG4gICAgb2ZmKG93bmVyRG9jdW1lbnQsICdwb2ludGVybW92ZScsIHRoaXMuX2RlbGF5ZWREcmFnVG91Y2hNb3ZlSGFuZGxlcik7XG4gIH0sXG4gIF90cmlnZ2VyRHJhZ1N0YXJ0OiBmdW5jdGlvbiBfdHJpZ2dlckRyYWdTdGFydChcbiAgLyoqIEV2ZW50ICovXG4gIGV2dCxcbiAgLyoqIFRvdWNoICovXG4gIHRvdWNoKSB7XG4gICAgdG91Y2ggPSB0b3VjaCB8fCBldnQucG9pbnRlclR5cGUgPT0gJ3RvdWNoJyAmJiBldnQ7XG5cbiAgICBpZiAoIXRoaXMubmF0aXZlRHJhZ2dhYmxlIHx8IHRvdWNoKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLnN1cHBvcnRQb2ludGVyKSB7XG4gICAgICAgIG9uKGRvY3VtZW50LCAncG9pbnRlcm1vdmUnLCB0aGlzLl9vblRvdWNoTW92ZSk7XG4gICAgICB9IGVsc2UgaWYgKHRvdWNoKSB7XG4gICAgICAgIG9uKGRvY3VtZW50LCAndG91Y2htb3ZlJywgdGhpcy5fb25Ub3VjaE1vdmUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb24oZG9jdW1lbnQsICdtb3VzZW1vdmUnLCB0aGlzLl9vblRvdWNoTW92ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uKGRyYWdFbCwgJ2RyYWdlbmQnLCB0aGlzKTtcbiAgICAgIG9uKHJvb3RFbCwgJ2RyYWdzdGFydCcsIHRoaXMuX29uRHJhZ1N0YXJ0KTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgaWYgKGRvY3VtZW50LnNlbGVjdGlvbikge1xuICAgICAgICAvLyBUaW1lb3V0IG5lY2Nlc3NhcnkgZm9yIElFOVxuICAgICAgICBfbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGRvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHt9XG4gIH0sXG4gIF9kcmFnU3RhcnRlZDogZnVuY3Rpb24gX2RyYWdTdGFydGVkKGZhbGxiYWNrLCBldnQpIHtcblxuICAgIGF3YWl0aW5nRHJhZ1N0YXJ0ZWQgPSBmYWxzZTtcblxuICAgIGlmIChyb290RWwgJiYgZHJhZ0VsKSB7XG4gICAgICBwbHVnaW5FdmVudCgnZHJhZ1N0YXJ0ZWQnLCB0aGlzLCB7XG4gICAgICAgIGV2dDogZXZ0XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMubmF0aXZlRHJhZ2dhYmxlKSB7XG4gICAgICAgIG9uKGRvY3VtZW50LCAnZHJhZ292ZXInLCBfY2hlY2tPdXRzaWRlVGFyZ2V0RWwpO1xuICAgICAgfVxuXG4gICAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9uczsgLy8gQXBwbHkgZWZmZWN0XG5cbiAgICAgICFmYWxsYmFjayAmJiB0b2dnbGVDbGFzcyhkcmFnRWwsIG9wdGlvbnMuZHJhZ0NsYXNzLCBmYWxzZSk7XG4gICAgICB0b2dnbGVDbGFzcyhkcmFnRWwsIG9wdGlvbnMuZ2hvc3RDbGFzcywgdHJ1ZSk7XG4gICAgICBTb3J0YWJsZS5hY3RpdmUgPSB0aGlzO1xuICAgICAgZmFsbGJhY2sgJiYgdGhpcy5fYXBwZW5kR2hvc3QoKTsgLy8gRHJhZyBzdGFydCBldmVudFxuXG4gICAgICBfZGlzcGF0Y2hFdmVudCh7XG4gICAgICAgIHNvcnRhYmxlOiB0aGlzLFxuICAgICAgICBuYW1lOiAnc3RhcnQnLFxuICAgICAgICBvcmlnaW5hbEV2ZW50OiBldnRcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9udWxsaW5nKCk7XG4gICAgfVxuICB9LFxuICBfZW11bGF0ZURyYWdPdmVyOiBmdW5jdGlvbiBfZW11bGF0ZURyYWdPdmVyKCkge1xuICAgIGlmICh0b3VjaEV2dCkge1xuICAgICAgdGhpcy5fbGFzdFggPSB0b3VjaEV2dC5jbGllbnRYO1xuICAgICAgdGhpcy5fbGFzdFkgPSB0b3VjaEV2dC5jbGllbnRZO1xuXG4gICAgICBfaGlkZUdob3N0Rm9yVGFyZ2V0KCk7XG5cbiAgICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHRvdWNoRXZ0LmNsaWVudFgsIHRvdWNoRXZ0LmNsaWVudFkpO1xuICAgICAgdmFyIHBhcmVudCA9IHRhcmdldDtcblxuICAgICAgd2hpbGUgKHRhcmdldCAmJiB0YXJnZXQuc2hhZG93Um9vdCkge1xuICAgICAgICB0YXJnZXQgPSB0YXJnZXQuc2hhZG93Um9vdC5lbGVtZW50RnJvbVBvaW50KHRvdWNoRXZ0LmNsaWVudFgsIHRvdWNoRXZ0LmNsaWVudFkpO1xuICAgICAgICBpZiAodGFyZ2V0ID09PSBwYXJlbnQpIGJyZWFrO1xuICAgICAgICBwYXJlbnQgPSB0YXJnZXQ7XG4gICAgICB9XG5cbiAgICAgIGRyYWdFbC5wYXJlbnROb2RlW2V4cGFuZG9dLl9pc091dHNpZGVUaGlzRWwodGFyZ2V0KTtcblxuICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICBkbyB7XG4gICAgICAgICAgaWYgKHBhcmVudFtleHBhbmRvXSkge1xuICAgICAgICAgICAgdmFyIGluc2VydGVkID0gdm9pZCAwO1xuICAgICAgICAgICAgaW5zZXJ0ZWQgPSBwYXJlbnRbZXhwYW5kb10uX29uRHJhZ092ZXIoe1xuICAgICAgICAgICAgICBjbGllbnRYOiB0b3VjaEV2dC5jbGllbnRYLFxuICAgICAgICAgICAgICBjbGllbnRZOiB0b3VjaEV2dC5jbGllbnRZLFxuICAgICAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgICAgICAgICAgcm9vdEVsOiBwYXJlbnRcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoaW5zZXJ0ZWQgJiYgIXRoaXMub3B0aW9ucy5kcmFnb3ZlckJ1YmJsZSkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0YXJnZXQgPSBwYXJlbnQ7IC8vIHN0b3JlIGxhc3QgZWxlbWVudFxuICAgICAgICB9XG4gICAgICAgIC8qIGpzaGludCBib3NzOnRydWUgKi9cbiAgICAgICAgd2hpbGUgKHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlKTtcbiAgICAgIH1cblxuICAgICAgX3VuaGlkZUdob3N0Rm9yVGFyZ2V0KCk7XG4gICAgfVxuICB9LFxuICBfb25Ub3VjaE1vdmU6IGZ1bmN0aW9uIF9vblRvdWNoTW92ZShcbiAgLyoqVG91Y2hFdmVudCovXG4gIGV2dCkge1xuICAgIGlmICh0YXBFdnQpIHtcbiAgICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zLFxuICAgICAgICAgIGZhbGxiYWNrVG9sZXJhbmNlID0gb3B0aW9ucy5mYWxsYmFja1RvbGVyYW5jZSxcbiAgICAgICAgICBmYWxsYmFja09mZnNldCA9IG9wdGlvbnMuZmFsbGJhY2tPZmZzZXQsXG4gICAgICAgICAgdG91Y2ggPSBldnQudG91Y2hlcyA/IGV2dC50b3VjaGVzWzBdIDogZXZ0LFxuICAgICAgICAgIGdob3N0TWF0cml4ID0gZ2hvc3RFbCAmJiBtYXRyaXgoZ2hvc3RFbCwgdHJ1ZSksXG4gICAgICAgICAgc2NhbGVYID0gZ2hvc3RFbCAmJiBnaG9zdE1hdHJpeCAmJiBnaG9zdE1hdHJpeC5hLFxuICAgICAgICAgIHNjYWxlWSA9IGdob3N0RWwgJiYgZ2hvc3RNYXRyaXggJiYgZ2hvc3RNYXRyaXguZCxcbiAgICAgICAgICByZWxhdGl2ZVNjcm9sbE9mZnNldCA9IFBvc2l0aW9uR2hvc3RBYnNvbHV0ZWx5ICYmIGdob3N0UmVsYXRpdmVQYXJlbnQgJiYgZ2V0UmVsYXRpdmVTY3JvbGxPZmZzZXQoZ2hvc3RSZWxhdGl2ZVBhcmVudCksXG4gICAgICAgICAgZHggPSAodG91Y2guY2xpZW50WCAtIHRhcEV2dC5jbGllbnRYICsgZmFsbGJhY2tPZmZzZXQueCkgLyAoc2NhbGVYIHx8IDEpICsgKHJlbGF0aXZlU2Nyb2xsT2Zmc2V0ID8gcmVsYXRpdmVTY3JvbGxPZmZzZXRbMF0gLSBnaG9zdFJlbGF0aXZlUGFyZW50SW5pdGlhbFNjcm9sbFswXSA6IDApIC8gKHNjYWxlWCB8fCAxKSxcbiAgICAgICAgICBkeSA9ICh0b3VjaC5jbGllbnRZIC0gdGFwRXZ0LmNsaWVudFkgKyBmYWxsYmFja09mZnNldC55KSAvIChzY2FsZVkgfHwgMSkgKyAocmVsYXRpdmVTY3JvbGxPZmZzZXQgPyByZWxhdGl2ZVNjcm9sbE9mZnNldFsxXSAtIGdob3N0UmVsYXRpdmVQYXJlbnRJbml0aWFsU2Nyb2xsWzFdIDogMCkgLyAoc2NhbGVZIHx8IDEpOyAvLyBvbmx5IHNldCB0aGUgc3RhdHVzIHRvIGRyYWdnaW5nLCB3aGVuIHdlIGFyZSBhY3R1YWxseSBkcmFnZ2luZ1xuXG4gICAgICBpZiAoIVNvcnRhYmxlLmFjdGl2ZSAmJiAhYXdhaXRpbmdEcmFnU3RhcnRlZCkge1xuICAgICAgICBpZiAoZmFsbGJhY2tUb2xlcmFuY2UgJiYgTWF0aC5tYXgoTWF0aC5hYnModG91Y2guY2xpZW50WCAtIHRoaXMuX2xhc3RYKSwgTWF0aC5hYnModG91Y2guY2xpZW50WSAtIHRoaXMuX2xhc3RZKSkgPCBmYWxsYmFja1RvbGVyYW5jZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX29uRHJhZ1N0YXJ0KGV2dCwgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChnaG9zdEVsKSB7XG4gICAgICAgIGlmIChnaG9zdE1hdHJpeCkge1xuICAgICAgICAgIGdob3N0TWF0cml4LmUgKz0gZHggLSAobGFzdER4IHx8IDApO1xuICAgICAgICAgIGdob3N0TWF0cml4LmYgKz0gZHkgLSAobGFzdER5IHx8IDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGdob3N0TWF0cml4ID0ge1xuICAgICAgICAgICAgYTogMSxcbiAgICAgICAgICAgIGI6IDAsXG4gICAgICAgICAgICBjOiAwLFxuICAgICAgICAgICAgZDogMSxcbiAgICAgICAgICAgIGU6IGR4LFxuICAgICAgICAgICAgZjogZHlcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNzc01hdHJpeCA9IFwibWF0cml4KFwiLmNvbmNhdChnaG9zdE1hdHJpeC5hLCBcIixcIikuY29uY2F0KGdob3N0TWF0cml4LmIsIFwiLFwiKS5jb25jYXQoZ2hvc3RNYXRyaXguYywgXCIsXCIpLmNvbmNhdChnaG9zdE1hdHJpeC5kLCBcIixcIikuY29uY2F0KGdob3N0TWF0cml4LmUsIFwiLFwiKS5jb25jYXQoZ2hvc3RNYXRyaXguZiwgXCIpXCIpO1xuICAgICAgICBjc3MoZ2hvc3RFbCwgJ3dlYmtpdFRyYW5zZm9ybScsIGNzc01hdHJpeCk7XG4gICAgICAgIGNzcyhnaG9zdEVsLCAnbW96VHJhbnNmb3JtJywgY3NzTWF0cml4KTtcbiAgICAgICAgY3NzKGdob3N0RWwsICdtc1RyYW5zZm9ybScsIGNzc01hdHJpeCk7XG4gICAgICAgIGNzcyhnaG9zdEVsLCAndHJhbnNmb3JtJywgY3NzTWF0cml4KTtcbiAgICAgICAgbGFzdER4ID0gZHg7XG4gICAgICAgIGxhc3REeSA9IGR5O1xuICAgICAgICB0b3VjaEV2dCA9IHRvdWNoO1xuICAgICAgfVxuXG4gICAgICBldnQuY2FuY2VsYWJsZSAmJiBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH0sXG4gIF9hcHBlbmRHaG9zdDogZnVuY3Rpb24gX2FwcGVuZEdob3N0KCkge1xuICAgIC8vIEJ1ZyBpZiB1c2luZyBzY2FsZSgpOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yNjM3MDU4XG4gICAgLy8gTm90IGJlaW5nIGFkanVzdGVkIGZvclxuICAgIGlmICghZ2hvc3RFbCkge1xuICAgICAgdmFyIGNvbnRhaW5lciA9IHRoaXMub3B0aW9ucy5mYWxsYmFja09uQm9keSA/IGRvY3VtZW50LmJvZHkgOiByb290RWwsXG4gICAgICAgICAgcmVjdCA9IGdldFJlY3QoZHJhZ0VsLCB0cnVlLCBQb3NpdGlvbkdob3N0QWJzb2x1dGVseSwgdHJ1ZSwgY29udGFpbmVyKSxcbiAgICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zOyAvLyBQb3NpdGlvbiBhYnNvbHV0ZWx5XG5cbiAgICAgIGlmIChQb3NpdGlvbkdob3N0QWJzb2x1dGVseSkge1xuICAgICAgICAvLyBHZXQgcmVsYXRpdmVseSBwb3NpdGlvbmVkIHBhcmVudFxuICAgICAgICBnaG9zdFJlbGF0aXZlUGFyZW50ID0gY29udGFpbmVyO1xuXG4gICAgICAgIHdoaWxlIChjc3MoZ2hvc3RSZWxhdGl2ZVBhcmVudCwgJ3Bvc2l0aW9uJykgPT09ICdzdGF0aWMnICYmIGNzcyhnaG9zdFJlbGF0aXZlUGFyZW50LCAndHJhbnNmb3JtJykgPT09ICdub25lJyAmJiBnaG9zdFJlbGF0aXZlUGFyZW50ICE9PSBkb2N1bWVudCkge1xuICAgICAgICAgIGdob3N0UmVsYXRpdmVQYXJlbnQgPSBnaG9zdFJlbGF0aXZlUGFyZW50LnBhcmVudE5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZ2hvc3RSZWxhdGl2ZVBhcmVudCAhPT0gZG9jdW1lbnQuYm9keSAmJiBnaG9zdFJlbGF0aXZlUGFyZW50ICE9PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgICAgICBpZiAoZ2hvc3RSZWxhdGl2ZVBhcmVudCA9PT0gZG9jdW1lbnQpIGdob3N0UmVsYXRpdmVQYXJlbnQgPSBnZXRXaW5kb3dTY3JvbGxpbmdFbGVtZW50KCk7XG4gICAgICAgICAgcmVjdC50b3AgKz0gZ2hvc3RSZWxhdGl2ZVBhcmVudC5zY3JvbGxUb3A7XG4gICAgICAgICAgcmVjdC5sZWZ0ICs9IGdob3N0UmVsYXRpdmVQYXJlbnQuc2Nyb2xsTGVmdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBnaG9zdFJlbGF0aXZlUGFyZW50ID0gZ2V0V2luZG93U2Nyb2xsaW5nRWxlbWVudCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2hvc3RSZWxhdGl2ZVBhcmVudEluaXRpYWxTY3JvbGwgPSBnZXRSZWxhdGl2ZVNjcm9sbE9mZnNldChnaG9zdFJlbGF0aXZlUGFyZW50KTtcbiAgICAgIH1cblxuICAgICAgZ2hvc3RFbCA9IGRyYWdFbC5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICB0b2dnbGVDbGFzcyhnaG9zdEVsLCBvcHRpb25zLmdob3N0Q2xhc3MsIGZhbHNlKTtcbiAgICAgIHRvZ2dsZUNsYXNzKGdob3N0RWwsIG9wdGlvbnMuZmFsbGJhY2tDbGFzcywgdHJ1ZSk7XG4gICAgICB0b2dnbGVDbGFzcyhnaG9zdEVsLCBvcHRpb25zLmRyYWdDbGFzcywgdHJ1ZSk7XG4gICAgICBjc3MoZ2hvc3RFbCwgJ3RyYW5zaXRpb24nLCAnJyk7XG4gICAgICBjc3MoZ2hvc3RFbCwgJ3RyYW5zZm9ybScsICcnKTtcbiAgICAgIGNzcyhnaG9zdEVsLCAnYm94LXNpemluZycsICdib3JkZXItYm94Jyk7XG4gICAgICBjc3MoZ2hvc3RFbCwgJ21hcmdpbicsIDApO1xuICAgICAgY3NzKGdob3N0RWwsICd0b3AnLCByZWN0LnRvcCk7XG4gICAgICBjc3MoZ2hvc3RFbCwgJ2xlZnQnLCByZWN0LmxlZnQpO1xuICAgICAgY3NzKGdob3N0RWwsICd3aWR0aCcsIHJlY3Qud2lkdGgpO1xuICAgICAgY3NzKGdob3N0RWwsICdoZWlnaHQnLCByZWN0LmhlaWdodCk7XG4gICAgICBjc3MoZ2hvc3RFbCwgJ29wYWNpdHknLCAnMC44Jyk7XG4gICAgICBjc3MoZ2hvc3RFbCwgJ3Bvc2l0aW9uJywgUG9zaXRpb25HaG9zdEFic29sdXRlbHkgPyAnYWJzb2x1dGUnIDogJ2ZpeGVkJyk7XG4gICAgICBjc3MoZ2hvc3RFbCwgJ3pJbmRleCcsICcxMDAwMDAnKTtcbiAgICAgIGNzcyhnaG9zdEVsLCAncG9pbnRlckV2ZW50cycsICdub25lJyk7XG4gICAgICBTb3J0YWJsZS5naG9zdCA9IGdob3N0RWw7XG4gICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZ2hvc3RFbCk7IC8vIFNldCB0cmFuc2Zvcm0tb3JpZ2luXG5cbiAgICAgIGNzcyhnaG9zdEVsLCAndHJhbnNmb3JtLW9yaWdpbicsIHRhcERpc3RhbmNlTGVmdCAvIHBhcnNlSW50KGdob3N0RWwuc3R5bGUud2lkdGgpICogMTAwICsgJyUgJyArIHRhcERpc3RhbmNlVG9wIC8gcGFyc2VJbnQoZ2hvc3RFbC5zdHlsZS5oZWlnaHQpICogMTAwICsgJyUnKTtcbiAgICB9XG4gIH0sXG4gIF9vbkRyYWdTdGFydDogZnVuY3Rpb24gX29uRHJhZ1N0YXJ0KFxuICAvKipFdmVudCovXG4gIGV2dCxcbiAgLyoqYm9vbGVhbiovXG4gIGZhbGxiYWNrKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciBkYXRhVHJhbnNmZXIgPSBldnQuZGF0YVRyYW5zZmVyO1xuICAgIHZhciBvcHRpb25zID0gX3RoaXMub3B0aW9ucztcbiAgICBwbHVnaW5FdmVudCgnZHJhZ1N0YXJ0JywgdGhpcywge1xuICAgICAgZXZ0OiBldnRcbiAgICB9KTtcblxuICAgIGlmIChTb3J0YWJsZS5ldmVudENhbmNlbGVkKSB7XG4gICAgICB0aGlzLl9vbkRyb3AoKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHBsdWdpbkV2ZW50KCdzZXR1cENsb25lJywgdGhpcyk7XG5cbiAgICBpZiAoIVNvcnRhYmxlLmV2ZW50Q2FuY2VsZWQpIHtcbiAgICAgIGNsb25lRWwgPSBjbG9uZShkcmFnRWwpO1xuICAgICAgY2xvbmVFbC5kcmFnZ2FibGUgPSBmYWxzZTtcbiAgICAgIGNsb25lRWwuc3R5bGVbJ3dpbGwtY2hhbmdlJ10gPSAnJztcblxuICAgICAgdGhpcy5faGlkZUNsb25lKCk7XG5cbiAgICAgIHRvZ2dsZUNsYXNzKGNsb25lRWwsIHRoaXMub3B0aW9ucy5jaG9zZW5DbGFzcywgZmFsc2UpO1xuICAgICAgU29ydGFibGUuY2xvbmUgPSBjbG9uZUVsO1xuICAgIH0gLy8gIzExNDM6IElGcmFtZSBzdXBwb3J0IHdvcmthcm91bmRcblxuXG4gICAgX3RoaXMuY2xvbmVJZCA9IF9uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICBwbHVnaW5FdmVudCgnY2xvbmUnLCBfdGhpcyk7XG4gICAgICBpZiAoU29ydGFibGUuZXZlbnRDYW5jZWxlZCkgcmV0dXJuO1xuXG4gICAgICBpZiAoIV90aGlzLm9wdGlvbnMucmVtb3ZlQ2xvbmVPbkhpZGUpIHtcbiAgICAgICAgcm9vdEVsLmluc2VydEJlZm9yZShjbG9uZUVsLCBkcmFnRWwpO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5faGlkZUNsb25lKCk7XG5cbiAgICAgIF9kaXNwYXRjaEV2ZW50KHtcbiAgICAgICAgc29ydGFibGU6IF90aGlzLFxuICAgICAgICBuYW1lOiAnY2xvbmUnXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICAhZmFsbGJhY2sgJiYgdG9nZ2xlQ2xhc3MoZHJhZ0VsLCBvcHRpb25zLmRyYWdDbGFzcywgdHJ1ZSk7IC8vIFNldCBwcm9wZXIgZHJvcCBldmVudHNcblxuICAgIGlmIChmYWxsYmFjaykge1xuICAgICAgaWdub3JlTmV4dENsaWNrID0gdHJ1ZTtcbiAgICAgIF90aGlzLl9sb29wSWQgPSBzZXRJbnRlcnZhbChfdGhpcy5fZW11bGF0ZURyYWdPdmVyLCA1MCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVuZG8gd2hhdCB3YXMgc2V0IGluIF9wcmVwYXJlRHJhZ1N0YXJ0IGJlZm9yZSBkcmFnIHN0YXJ0ZWRcbiAgICAgIG9mZihkb2N1bWVudCwgJ21vdXNldXAnLCBfdGhpcy5fb25Ecm9wKTtcbiAgICAgIG9mZihkb2N1bWVudCwgJ3RvdWNoZW5kJywgX3RoaXMuX29uRHJvcCk7XG4gICAgICBvZmYoZG9jdW1lbnQsICd0b3VjaGNhbmNlbCcsIF90aGlzLl9vbkRyb3ApO1xuXG4gICAgICBpZiAoZGF0YVRyYW5zZmVyKSB7XG4gICAgICAgIGRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gJ21vdmUnO1xuICAgICAgICBvcHRpb25zLnNldERhdGEgJiYgb3B0aW9ucy5zZXREYXRhLmNhbGwoX3RoaXMsIGRhdGFUcmFuc2ZlciwgZHJhZ0VsKTtcbiAgICAgIH1cblxuICAgICAgb24oZG9jdW1lbnQsICdkcm9wJywgX3RoaXMpOyAvLyAjMTI3NiBmaXg6XG5cbiAgICAgIGNzcyhkcmFnRWwsICd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlWigwKScpO1xuICAgIH1cblxuICAgIGF3YWl0aW5nRHJhZ1N0YXJ0ZWQgPSB0cnVlO1xuICAgIF90aGlzLl9kcmFnU3RhcnRJZCA9IF9uZXh0VGljayhfdGhpcy5fZHJhZ1N0YXJ0ZWQuYmluZChfdGhpcywgZmFsbGJhY2ssIGV2dCkpO1xuICAgIG9uKGRvY3VtZW50LCAnc2VsZWN0c3RhcnQnLCBfdGhpcyk7XG4gICAgbW92ZWQgPSB0cnVlO1xuXG4gICAgaWYgKFNhZmFyaSkge1xuICAgICAgY3NzKGRvY3VtZW50LmJvZHksICd1c2VyLXNlbGVjdCcsICdub25lJyk7XG4gICAgfVxuICB9LFxuICAvLyBSZXR1cm5zIHRydWUgLSBpZiBubyBmdXJ0aGVyIGFjdGlvbiBpcyBuZWVkZWQgKGVpdGhlciBpbnNlcnRlZCBvciBhbm90aGVyIGNvbmRpdGlvbilcbiAgX29uRHJhZ092ZXI6IGZ1bmN0aW9uIF9vbkRyYWdPdmVyKFxuICAvKipFdmVudCovXG4gIGV2dCkge1xuICAgIHZhciBlbCA9IHRoaXMuZWwsXG4gICAgICAgIHRhcmdldCA9IGV2dC50YXJnZXQsXG4gICAgICAgIGRyYWdSZWN0LFxuICAgICAgICB0YXJnZXRSZWN0LFxuICAgICAgICByZXZlcnQsXG4gICAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG4gICAgICAgIGdyb3VwID0gb3B0aW9ucy5ncm91cCxcbiAgICAgICAgYWN0aXZlU29ydGFibGUgPSBTb3J0YWJsZS5hY3RpdmUsXG4gICAgICAgIGlzT3duZXIgPSBhY3RpdmVHcm91cCA9PT0gZ3JvdXAsXG4gICAgICAgIGNhblNvcnQgPSBvcHRpb25zLnNvcnQsXG4gICAgICAgIGZyb21Tb3J0YWJsZSA9IHB1dFNvcnRhYmxlIHx8IGFjdGl2ZVNvcnRhYmxlLFxuICAgICAgICB2ZXJ0aWNhbCxcbiAgICAgICAgX3RoaXMgPSB0aGlzLFxuICAgICAgICBjb21wbGV0ZWRGaXJlZCA9IGZhbHNlO1xuXG4gICAgaWYgKF9zaWxlbnQpIHJldHVybjtcblxuICAgIGZ1bmN0aW9uIGRyYWdPdmVyRXZlbnQobmFtZSwgZXh0cmEpIHtcbiAgICAgIHBsdWdpbkV2ZW50KG5hbWUsIF90aGlzLCBfb2JqZWN0U3ByZWFkKHtcbiAgICAgICAgZXZ0OiBldnQsXG4gICAgICAgIGlzT3duZXI6IGlzT3duZXIsXG4gICAgICAgIGF4aXM6IHZlcnRpY2FsID8gJ3ZlcnRpY2FsJyA6ICdob3Jpem9udGFsJyxcbiAgICAgICAgcmV2ZXJ0OiByZXZlcnQsXG4gICAgICAgIGRyYWdSZWN0OiBkcmFnUmVjdCxcbiAgICAgICAgdGFyZ2V0UmVjdDogdGFyZ2V0UmVjdCxcbiAgICAgICAgY2FuU29ydDogY2FuU29ydCxcbiAgICAgICAgZnJvbVNvcnRhYmxlOiBmcm9tU29ydGFibGUsXG4gICAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgICBjb21wbGV0ZWQ6IGNvbXBsZXRlZCxcbiAgICAgICAgb25Nb3ZlOiBmdW5jdGlvbiBvbk1vdmUodGFyZ2V0LCBhZnRlcikge1xuICAgICAgICAgIHJldHVybiBfb25Nb3ZlKHJvb3RFbCwgZWwsIGRyYWdFbCwgZHJhZ1JlY3QsIHRhcmdldCwgZ2V0UmVjdCh0YXJnZXQpLCBldnQsIGFmdGVyKTtcbiAgICAgICAgfSxcbiAgICAgICAgY2hhbmdlZDogY2hhbmdlZFxuICAgICAgfSwgZXh0cmEpKTtcbiAgICB9IC8vIENhcHR1cmUgYW5pbWF0aW9uIHN0YXRlXG5cblxuICAgIGZ1bmN0aW9uIGNhcHR1cmUoKSB7XG4gICAgICBkcmFnT3ZlckV2ZW50KCdkcmFnT3ZlckFuaW1hdGlvbkNhcHR1cmUnKTtcblxuICAgICAgX3RoaXMuY2FwdHVyZUFuaW1hdGlvblN0YXRlKCk7XG5cbiAgICAgIGlmIChfdGhpcyAhPT0gZnJvbVNvcnRhYmxlKSB7XG4gICAgICAgIGZyb21Tb3J0YWJsZS5jYXB0dXJlQW5pbWF0aW9uU3RhdGUoKTtcbiAgICAgIH1cbiAgICB9IC8vIFJldHVybiBpbnZvY2F0aW9uIHdoZW4gZHJhZ0VsIGlzIGluc2VydGVkIChvciBjb21wbGV0ZWQpXG5cblxuICAgIGZ1bmN0aW9uIGNvbXBsZXRlZChpbnNlcnRpb24pIHtcbiAgICAgIGRyYWdPdmVyRXZlbnQoJ2RyYWdPdmVyQ29tcGxldGVkJywge1xuICAgICAgICBpbnNlcnRpb246IGluc2VydGlvblxuICAgICAgfSk7XG5cbiAgICAgIGlmIChpbnNlcnRpb24pIHtcbiAgICAgICAgLy8gQ2xvbmVzIG11c3QgYmUgaGlkZGVuIGJlZm9yZSBmb2xkaW5nIGFuaW1hdGlvbiB0byBjYXB0dXJlIGRyYWdSZWN0QWJzb2x1dGUgcHJvcGVybHlcbiAgICAgICAgaWYgKGlzT3duZXIpIHtcbiAgICAgICAgICBhY3RpdmVTb3J0YWJsZS5faGlkZUNsb25lKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWN0aXZlU29ydGFibGUuX3Nob3dDbG9uZShfdGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoX3RoaXMgIT09IGZyb21Tb3J0YWJsZSkge1xuICAgICAgICAgIC8vIFNldCBnaG9zdCBjbGFzcyB0byBuZXcgc29ydGFibGUncyBnaG9zdCBjbGFzc1xuICAgICAgICAgIHRvZ2dsZUNsYXNzKGRyYWdFbCwgcHV0U29ydGFibGUgPyBwdXRTb3J0YWJsZS5vcHRpb25zLmdob3N0Q2xhc3MgOiBhY3RpdmVTb3J0YWJsZS5vcHRpb25zLmdob3N0Q2xhc3MsIGZhbHNlKTtcbiAgICAgICAgICB0b2dnbGVDbGFzcyhkcmFnRWwsIG9wdGlvbnMuZ2hvc3RDbGFzcywgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHV0U29ydGFibGUgIT09IF90aGlzICYmIF90aGlzICE9PSBTb3J0YWJsZS5hY3RpdmUpIHtcbiAgICAgICAgICBwdXRTb3J0YWJsZSA9IF90aGlzO1xuICAgICAgICB9IGVsc2UgaWYgKF90aGlzID09PSBTb3J0YWJsZS5hY3RpdmUgJiYgcHV0U29ydGFibGUpIHtcbiAgICAgICAgICBwdXRTb3J0YWJsZSA9IG51bGw7XG4gICAgICAgIH0gLy8gQW5pbWF0aW9uXG5cblxuICAgICAgICBpZiAoZnJvbVNvcnRhYmxlID09PSBfdGhpcykge1xuICAgICAgICAgIF90aGlzLl9pZ25vcmVXaGlsZUFuaW1hdGluZyA9IHRhcmdldDtcbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzLmFuaW1hdGVBbGwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGRyYWdPdmVyRXZlbnQoJ2RyYWdPdmVyQW5pbWF0aW9uQ29tcGxldGUnKTtcbiAgICAgICAgICBfdGhpcy5faWdub3JlV2hpbGVBbmltYXRpbmcgPSBudWxsO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoX3RoaXMgIT09IGZyb21Tb3J0YWJsZSkge1xuICAgICAgICAgIGZyb21Tb3J0YWJsZS5hbmltYXRlQWxsKCk7XG4gICAgICAgICAgZnJvbVNvcnRhYmxlLl9pZ25vcmVXaGlsZUFuaW1hdGluZyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gTnVsbCBsYXN0VGFyZ2V0IGlmIGl0IGlzIG5vdCBpbnNpZGUgYSBwcmV2aW91c2x5IHN3YXBwZWQgZWxlbWVudFxuXG5cbiAgICAgIGlmICh0YXJnZXQgPT09IGRyYWdFbCAmJiAhZHJhZ0VsLmFuaW1hdGVkIHx8IHRhcmdldCA9PT0gZWwgJiYgIXRhcmdldC5hbmltYXRlZCkge1xuICAgICAgICBsYXN0VGFyZ2V0ID0gbnVsbDtcbiAgICAgIH0gLy8gbm8gYnViYmxpbmcgYW5kIG5vdCBmYWxsYmFja1xuXG5cbiAgICAgIGlmICghb3B0aW9ucy5kcmFnb3ZlckJ1YmJsZSAmJiAhZXZ0LnJvb3RFbCAmJiB0YXJnZXQgIT09IGRvY3VtZW50KSB7XG4gICAgICAgIGRyYWdFbC5wYXJlbnROb2RlW2V4cGFuZG9dLl9pc091dHNpZGVUaGlzRWwoZXZ0LnRhcmdldCk7IC8vIERvIG5vdCBkZXRlY3QgZm9yIGVtcHR5IGluc2VydCBpZiBhbHJlYWR5IGluc2VydGVkXG5cblxuICAgICAgICAhaW5zZXJ0aW9uICYmIG5lYXJlc3RFbXB0eUluc2VydERldGVjdEV2ZW50KGV2dCk7XG4gICAgICB9XG5cbiAgICAgICFvcHRpb25zLmRyYWdvdmVyQnViYmxlICYmIGV2dC5zdG9wUHJvcGFnYXRpb24gJiYgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgcmV0dXJuIGNvbXBsZXRlZEZpcmVkID0gdHJ1ZTtcbiAgICB9IC8vIENhbGwgd2hlbiBkcmFnRWwgaGFzIGJlZW4gaW5zZXJ0ZWRcblxuXG4gICAgZnVuY3Rpb24gY2hhbmdlZCgpIHtcbiAgICAgIG5ld0luZGV4ID0gaW5kZXgoZHJhZ0VsKTtcbiAgICAgIG5ld0RyYWdnYWJsZUluZGV4ID0gaW5kZXgoZHJhZ0VsLCBvcHRpb25zLmRyYWdnYWJsZSk7XG5cbiAgICAgIF9kaXNwYXRjaEV2ZW50KHtcbiAgICAgICAgc29ydGFibGU6IF90aGlzLFxuICAgICAgICBuYW1lOiAnY2hhbmdlJyxcbiAgICAgICAgdG9FbDogZWwsXG4gICAgICAgIG5ld0luZGV4OiBuZXdJbmRleCxcbiAgICAgICAgbmV3RHJhZ2dhYmxlSW5kZXg6IG5ld0RyYWdnYWJsZUluZGV4LFxuICAgICAgICBvcmlnaW5hbEV2ZW50OiBldnRcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChldnQucHJldmVudERlZmF1bHQgIT09IHZvaWQgMCkge1xuICAgICAgZXZ0LmNhbmNlbGFibGUgJiYgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdGFyZ2V0ID0gY2xvc2VzdCh0YXJnZXQsIG9wdGlvbnMuZHJhZ2dhYmxlLCBlbCwgdHJ1ZSk7XG4gICAgZHJhZ092ZXJFdmVudCgnZHJhZ092ZXInKTtcbiAgICBpZiAoU29ydGFibGUuZXZlbnRDYW5jZWxlZCkgcmV0dXJuIGNvbXBsZXRlZEZpcmVkO1xuXG4gICAgaWYgKGRyYWdFbC5jb250YWlucyhldnQudGFyZ2V0KSB8fCB0YXJnZXQuYW5pbWF0ZWQgJiYgdGFyZ2V0LmFuaW1hdGluZ1ggJiYgdGFyZ2V0LmFuaW1hdGluZ1kgfHwgX3RoaXMuX2lnbm9yZVdoaWxlQW5pbWF0aW5nID09PSB0YXJnZXQpIHtcbiAgICAgIHJldHVybiBjb21wbGV0ZWQoZmFsc2UpO1xuICAgIH1cblxuICAgIGlnbm9yZU5leHRDbGljayA9IGZhbHNlO1xuXG4gICAgaWYgKGFjdGl2ZVNvcnRhYmxlICYmICFvcHRpb25zLmRpc2FibGVkICYmIChpc093bmVyID8gY2FuU29ydCB8fCAocmV2ZXJ0ID0gIXJvb3RFbC5jb250YWlucyhkcmFnRWwpKSAvLyBSZXZlcnRpbmcgaXRlbSBpbnRvIHRoZSBvcmlnaW5hbCBsaXN0XG4gICAgOiBwdXRTb3J0YWJsZSA9PT0gdGhpcyB8fCAodGhpcy5sYXN0UHV0TW9kZSA9IGFjdGl2ZUdyb3VwLmNoZWNrUHVsbCh0aGlzLCBhY3RpdmVTb3J0YWJsZSwgZHJhZ0VsLCBldnQpKSAmJiBncm91cC5jaGVja1B1dCh0aGlzLCBhY3RpdmVTb3J0YWJsZSwgZHJhZ0VsLCBldnQpKSkge1xuICAgICAgdmVydGljYWwgPSB0aGlzLl9nZXREaXJlY3Rpb24oZXZ0LCB0YXJnZXQpID09PSAndmVydGljYWwnO1xuICAgICAgZHJhZ1JlY3QgPSBnZXRSZWN0KGRyYWdFbCk7XG4gICAgICBkcmFnT3ZlckV2ZW50KCdkcmFnT3ZlclZhbGlkJyk7XG4gICAgICBpZiAoU29ydGFibGUuZXZlbnRDYW5jZWxlZCkgcmV0dXJuIGNvbXBsZXRlZEZpcmVkO1xuXG4gICAgICBpZiAocmV2ZXJ0KSB7XG4gICAgICAgIHBhcmVudEVsID0gcm9vdEVsOyAvLyBhY3R1YWxpemF0aW9uXG5cbiAgICAgICAgY2FwdHVyZSgpO1xuXG4gICAgICAgIHRoaXMuX2hpZGVDbG9uZSgpO1xuXG4gICAgICAgIGRyYWdPdmVyRXZlbnQoJ3JldmVydCcpO1xuXG4gICAgICAgIGlmICghU29ydGFibGUuZXZlbnRDYW5jZWxlZCkge1xuICAgICAgICAgIGlmIChuZXh0RWwpIHtcbiAgICAgICAgICAgIHJvb3RFbC5pbnNlcnRCZWZvcmUoZHJhZ0VsLCBuZXh0RWwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb290RWwuYXBwZW5kQ2hpbGQoZHJhZ0VsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29tcGxldGVkKHRydWUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZWxMYXN0Q2hpbGQgPSBsYXN0Q2hpbGQoZWwsIG9wdGlvbnMuZHJhZ2dhYmxlKTtcblxuICAgICAgaWYgKCFlbExhc3RDaGlsZCB8fCBfZ2hvc3RJc0xhc3QoZXZ0LCB2ZXJ0aWNhbCwgdGhpcykgJiYgIWVsTGFzdENoaWxkLmFuaW1hdGVkKSB7XG4gICAgICAgIC8vIElmIGFscmVhZHkgYXQgZW5kIG9mIGxpc3Q6IERvIG5vdCBpbnNlcnRcbiAgICAgICAgaWYgKGVsTGFzdENoaWxkID09PSBkcmFnRWwpIHtcbiAgICAgICAgICByZXR1cm4gY29tcGxldGVkKGZhbHNlKTtcbiAgICAgICAgfSAvLyBhc3NpZ24gdGFyZ2V0IG9ubHkgaWYgY29uZGl0aW9uIGlzIHRydWVcblxuXG4gICAgICAgIGlmIChlbExhc3RDaGlsZCAmJiBlbCA9PT0gZXZ0LnRhcmdldCkge1xuICAgICAgICAgIHRhcmdldCA9IGVsTGFzdENoaWxkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgIHRhcmdldFJlY3QgPSBnZXRSZWN0KHRhcmdldCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoX29uTW92ZShyb290RWwsIGVsLCBkcmFnRWwsIGRyYWdSZWN0LCB0YXJnZXQsIHRhcmdldFJlY3QsIGV2dCwgISF0YXJnZXQpICE9PSBmYWxzZSkge1xuICAgICAgICAgIGNhcHR1cmUoKTtcbiAgICAgICAgICBlbC5hcHBlbmRDaGlsZChkcmFnRWwpO1xuICAgICAgICAgIHBhcmVudEVsID0gZWw7IC8vIGFjdHVhbGl6YXRpb25cblxuICAgICAgICAgIGNoYW5nZWQoKTtcbiAgICAgICAgICByZXR1cm4gY29tcGxldGVkKHRydWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRhcmdldC5wYXJlbnROb2RlID09PSBlbCkge1xuICAgICAgICB0YXJnZXRSZWN0ID0gZ2V0UmVjdCh0YXJnZXQpO1xuICAgICAgICB2YXIgZGlyZWN0aW9uID0gMCxcbiAgICAgICAgICAgIHRhcmdldEJlZm9yZUZpcnN0U3dhcCxcbiAgICAgICAgICAgIGRpZmZlcmVudExldmVsID0gZHJhZ0VsLnBhcmVudE5vZGUgIT09IGVsLFxuICAgICAgICAgICAgZGlmZmVyZW50Um93Q29sID0gIV9kcmFnRWxJblJvd0NvbHVtbihkcmFnRWwuYW5pbWF0ZWQgJiYgZHJhZ0VsLnRvUmVjdCB8fCBkcmFnUmVjdCwgdGFyZ2V0LmFuaW1hdGVkICYmIHRhcmdldC50b1JlY3QgfHwgdGFyZ2V0UmVjdCwgdmVydGljYWwpLFxuICAgICAgICAgICAgc2lkZTEgPSB2ZXJ0aWNhbCA/ICd0b3AnIDogJ2xlZnQnLFxuICAgICAgICAgICAgc2Nyb2xsZWRQYXN0VG9wID0gaXNTY3JvbGxlZFBhc3QodGFyZ2V0LCAndG9wJywgJ3RvcCcpIHx8IGlzU2Nyb2xsZWRQYXN0KGRyYWdFbCwgJ3RvcCcsICd0b3AnKSxcbiAgICAgICAgICAgIHNjcm9sbEJlZm9yZSA9IHNjcm9sbGVkUGFzdFRvcCA/IHNjcm9sbGVkUGFzdFRvcC5zY3JvbGxUb3AgOiB2b2lkIDA7XG5cbiAgICAgICAgaWYgKGxhc3RUYXJnZXQgIT09IHRhcmdldCkge1xuICAgICAgICAgIHRhcmdldEJlZm9yZUZpcnN0U3dhcCA9IHRhcmdldFJlY3Rbc2lkZTFdO1xuICAgICAgICAgIHBhc3RGaXJzdEludmVydFRocmVzaCA9IGZhbHNlO1xuICAgICAgICAgIGlzQ2lyY3Vtc3RhbnRpYWxJbnZlcnQgPSAhZGlmZmVyZW50Um93Q29sICYmIG9wdGlvbnMuaW52ZXJ0U3dhcCB8fCBkaWZmZXJlbnRMZXZlbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGRpcmVjdGlvbiA9IF9nZXRTd2FwRGlyZWN0aW9uKGV2dCwgdGFyZ2V0LCB0YXJnZXRSZWN0LCB2ZXJ0aWNhbCwgZGlmZmVyZW50Um93Q29sID8gMSA6IG9wdGlvbnMuc3dhcFRocmVzaG9sZCwgb3B0aW9ucy5pbnZlcnRlZFN3YXBUaHJlc2hvbGQgPT0gbnVsbCA/IG9wdGlvbnMuc3dhcFRocmVzaG9sZCA6IG9wdGlvbnMuaW52ZXJ0ZWRTd2FwVGhyZXNob2xkLCBpc0NpcmN1bXN0YW50aWFsSW52ZXJ0LCBsYXN0VGFyZ2V0ID09PSB0YXJnZXQpO1xuICAgICAgICB2YXIgc2libGluZztcblxuICAgICAgICBpZiAoZGlyZWN0aW9uICE9PSAwKSB7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgdGFyZ2V0IGlzIGJlc2lkZSBkcmFnRWwgaW4gcmVzcGVjdGl2ZSBkaXJlY3Rpb24gKGlnbm9yaW5nIGhpZGRlbiBlbGVtZW50cylcbiAgICAgICAgICB2YXIgZHJhZ0luZGV4ID0gaW5kZXgoZHJhZ0VsKTtcblxuICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgIGRyYWdJbmRleCAtPSBkaXJlY3Rpb247XG4gICAgICAgICAgICBzaWJsaW5nID0gcGFyZW50RWwuY2hpbGRyZW5bZHJhZ0luZGV4XTtcbiAgICAgICAgICB9IHdoaWxlIChzaWJsaW5nICYmIChjc3Moc2libGluZywgJ2Rpc3BsYXknKSA9PT0gJ25vbmUnIHx8IHNpYmxpbmcgPT09IGdob3N0RWwpKTtcbiAgICAgICAgfSAvLyBJZiBkcmFnRWwgaXMgYWxyZWFkeSBiZXNpZGUgdGFyZ2V0OiBEbyBub3QgaW5zZXJ0XG5cblxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAwIHx8IHNpYmxpbmcgPT09IHRhcmdldCkge1xuICAgICAgICAgIHJldHVybiBjb21wbGV0ZWQoZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFRhcmdldCA9IHRhcmdldDtcbiAgICAgICAgbGFzdERpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgICAgICAgdmFyIG5leHRTaWJsaW5nID0gdGFyZ2V0Lm5leHRFbGVtZW50U2libGluZyxcbiAgICAgICAgICAgIGFmdGVyID0gZmFsc2U7XG4gICAgICAgIGFmdGVyID0gZGlyZWN0aW9uID09PSAxO1xuXG4gICAgICAgIHZhciBtb3ZlVmVjdG9yID0gX29uTW92ZShyb290RWwsIGVsLCBkcmFnRWwsIGRyYWdSZWN0LCB0YXJnZXQsIHRhcmdldFJlY3QsIGV2dCwgYWZ0ZXIpO1xuXG4gICAgICAgIGlmIChtb3ZlVmVjdG9yICE9PSBmYWxzZSkge1xuICAgICAgICAgIGlmIChtb3ZlVmVjdG9yID09PSAxIHx8IG1vdmVWZWN0b3IgPT09IC0xKSB7XG4gICAgICAgICAgICBhZnRlciA9IG1vdmVWZWN0b3IgPT09IDE7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX3NpbGVudCA9IHRydWU7XG4gICAgICAgICAgc2V0VGltZW91dChfdW5zaWxlbnQsIDMwKTtcbiAgICAgICAgICBjYXB0dXJlKCk7XG5cbiAgICAgICAgICBpZiAoYWZ0ZXIgJiYgIW5leHRTaWJsaW5nKSB7XG4gICAgICAgICAgICBlbC5hcHBlbmRDaGlsZChkcmFnRWwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZHJhZ0VsLCBhZnRlciA/IG5leHRTaWJsaW5nIDogdGFyZ2V0KTtcbiAgICAgICAgICB9IC8vIFVuZG8gY2hyb21lJ3Mgc2Nyb2xsIGFkanVzdG1lbnQgKGhhcyBubyBlZmZlY3Qgb24gb3RoZXIgYnJvd3NlcnMpXG5cblxuICAgICAgICAgIGlmIChzY3JvbGxlZFBhc3RUb3ApIHtcbiAgICAgICAgICAgIHNjcm9sbEJ5KHNjcm9sbGVkUGFzdFRvcCwgMCwgc2Nyb2xsQmVmb3JlIC0gc2Nyb2xsZWRQYXN0VG9wLnNjcm9sbFRvcCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGFyZW50RWwgPSBkcmFnRWwucGFyZW50Tm9kZTsgLy8gYWN0dWFsaXphdGlvblxuICAgICAgICAgIC8vIG11c3QgYmUgZG9uZSBiZWZvcmUgYW5pbWF0aW9uXG5cbiAgICAgICAgICBpZiAodGFyZ2V0QmVmb3JlRmlyc3RTd2FwICE9PSB1bmRlZmluZWQgJiYgIWlzQ2lyY3Vtc3RhbnRpYWxJbnZlcnQpIHtcbiAgICAgICAgICAgIHRhcmdldE1vdmVEaXN0YW5jZSA9IE1hdGguYWJzKHRhcmdldEJlZm9yZUZpcnN0U3dhcCAtIGdldFJlY3QodGFyZ2V0KVtzaWRlMV0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNoYW5nZWQoKTtcbiAgICAgICAgICByZXR1cm4gY29tcGxldGVkKHRydWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChlbC5jb250YWlucyhkcmFnRWwpKSB7XG4gICAgICAgIHJldHVybiBjb21wbGV0ZWQoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgX2lnbm9yZVdoaWxlQW5pbWF0aW5nOiBudWxsLFxuICBfb2ZmTW92ZUV2ZW50czogZnVuY3Rpb24gX29mZk1vdmVFdmVudHMoKSB7XG4gICAgb2ZmKGRvY3VtZW50LCAnbW91c2Vtb3ZlJywgdGhpcy5fb25Ub3VjaE1vdmUpO1xuICAgIG9mZihkb2N1bWVudCwgJ3RvdWNobW92ZScsIHRoaXMuX29uVG91Y2hNb3ZlKTtcbiAgICBvZmYoZG9jdW1lbnQsICdwb2ludGVybW92ZScsIHRoaXMuX29uVG91Y2hNb3ZlKTtcbiAgICBvZmYoZG9jdW1lbnQsICdkcmFnb3ZlcicsIG5lYXJlc3RFbXB0eUluc2VydERldGVjdEV2ZW50KTtcbiAgICBvZmYoZG9jdW1lbnQsICdtb3VzZW1vdmUnLCBuZWFyZXN0RW1wdHlJbnNlcnREZXRlY3RFdmVudCk7XG4gICAgb2ZmKGRvY3VtZW50LCAndG91Y2htb3ZlJywgbmVhcmVzdEVtcHR5SW5zZXJ0RGV0ZWN0RXZlbnQpO1xuICB9LFxuICBfb2ZmVXBFdmVudHM6IGZ1bmN0aW9uIF9vZmZVcEV2ZW50cygpIHtcbiAgICB2YXIgb3duZXJEb2N1bWVudCA9IHRoaXMuZWwub3duZXJEb2N1bWVudDtcbiAgICBvZmYob3duZXJEb2N1bWVudCwgJ21vdXNldXAnLCB0aGlzLl9vbkRyb3ApO1xuICAgIG9mZihvd25lckRvY3VtZW50LCAndG91Y2hlbmQnLCB0aGlzLl9vbkRyb3ApO1xuICAgIG9mZihvd25lckRvY3VtZW50LCAncG9pbnRlcnVwJywgdGhpcy5fb25Ecm9wKTtcbiAgICBvZmYob3duZXJEb2N1bWVudCwgJ3RvdWNoY2FuY2VsJywgdGhpcy5fb25Ecm9wKTtcbiAgICBvZmYoZG9jdW1lbnQsICdzZWxlY3RzdGFydCcsIHRoaXMpO1xuICB9LFxuICBfb25Ecm9wOiBmdW5jdGlvbiBfb25Ecm9wKFxuICAvKipFdmVudCovXG4gIGV2dCkge1xuICAgIHZhciBlbCA9IHRoaXMuZWwsXG4gICAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7IC8vIEdldCB0aGUgaW5kZXggb2YgdGhlIGRyYWdnZWQgZWxlbWVudCB3aXRoaW4gaXRzIHBhcmVudFxuXG4gICAgbmV3SW5kZXggPSBpbmRleChkcmFnRWwpO1xuICAgIG5ld0RyYWdnYWJsZUluZGV4ID0gaW5kZXgoZHJhZ0VsLCBvcHRpb25zLmRyYWdnYWJsZSk7XG4gICAgcGx1Z2luRXZlbnQoJ2Ryb3AnLCB0aGlzLCB7XG4gICAgICBldnQ6IGV2dFxuICAgIH0pO1xuICAgIHBhcmVudEVsID0gZHJhZ0VsICYmIGRyYWdFbC5wYXJlbnROb2RlOyAvLyBHZXQgYWdhaW4gYWZ0ZXIgcGx1Z2luIGV2ZW50XG5cbiAgICBuZXdJbmRleCA9IGluZGV4KGRyYWdFbCk7XG4gICAgbmV3RHJhZ2dhYmxlSW5kZXggPSBpbmRleChkcmFnRWwsIG9wdGlvbnMuZHJhZ2dhYmxlKTtcblxuICAgIGlmIChTb3J0YWJsZS5ldmVudENhbmNlbGVkKSB7XG4gICAgICB0aGlzLl9udWxsaW5nKCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhd2FpdGluZ0RyYWdTdGFydGVkID0gZmFsc2U7XG4gICAgaXNDaXJjdW1zdGFudGlhbEludmVydCA9IGZhbHNlO1xuICAgIHBhc3RGaXJzdEludmVydFRocmVzaCA9IGZhbHNlO1xuICAgIGNsZWFySW50ZXJ2YWwodGhpcy5fbG9vcElkKTtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fZHJhZ1N0YXJ0VGltZXIpO1xuXG4gICAgX2NhbmNlbE5leHRUaWNrKHRoaXMuY2xvbmVJZCk7XG5cbiAgICBfY2FuY2VsTmV4dFRpY2sodGhpcy5fZHJhZ1N0YXJ0SWQpOyAvLyBVbmJpbmQgZXZlbnRzXG5cblxuICAgIGlmICh0aGlzLm5hdGl2ZURyYWdnYWJsZSkge1xuICAgICAgb2ZmKGRvY3VtZW50LCAnZHJvcCcsIHRoaXMpO1xuICAgICAgb2ZmKGVsLCAnZHJhZ3N0YXJ0JywgdGhpcy5fb25EcmFnU3RhcnQpO1xuICAgIH1cblxuICAgIHRoaXMuX29mZk1vdmVFdmVudHMoKTtcblxuICAgIHRoaXMuX29mZlVwRXZlbnRzKCk7XG5cbiAgICBpZiAoU2FmYXJpKSB7XG4gICAgICBjc3MoZG9jdW1lbnQuYm9keSwgJ3VzZXItc2VsZWN0JywgJycpO1xuICAgIH1cblxuICAgIGNzcyhkcmFnRWwsICd0cmFuc2Zvcm0nLCAnJyk7XG5cbiAgICBpZiAoZXZ0KSB7XG4gICAgICBpZiAobW92ZWQpIHtcbiAgICAgICAgZXZ0LmNhbmNlbGFibGUgJiYgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICFvcHRpb25zLmRyb3BCdWJibGUgJiYgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuXG4gICAgICBnaG9zdEVsICYmIGdob3N0RWwucGFyZW50Tm9kZSAmJiBnaG9zdEVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZ2hvc3RFbCk7XG5cbiAgICAgIGlmIChyb290RWwgPT09IHBhcmVudEVsIHx8IHB1dFNvcnRhYmxlICYmIHB1dFNvcnRhYmxlLmxhc3RQdXRNb2RlICE9PSAnY2xvbmUnKSB7XG4gICAgICAgIC8vIFJlbW92ZSBjbG9uZShzKVxuICAgICAgICBjbG9uZUVsICYmIGNsb25lRWwucGFyZW50Tm9kZSAmJiBjbG9uZUVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY2xvbmVFbCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChkcmFnRWwpIHtcbiAgICAgICAgaWYgKHRoaXMubmF0aXZlRHJhZ2dhYmxlKSB7XG4gICAgICAgICAgb2ZmKGRyYWdFbCwgJ2RyYWdlbmQnLCB0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIF9kaXNhYmxlRHJhZ2dhYmxlKGRyYWdFbCk7XG5cbiAgICAgICAgZHJhZ0VsLnN0eWxlWyd3aWxsLWNoYW5nZSddID0gJyc7IC8vIFJlbW92ZSBjbGFzc2VzXG4gICAgICAgIC8vIGdob3N0Q2xhc3MgaXMgYWRkZWQgaW4gZHJhZ1N0YXJ0ZWRcblxuICAgICAgICBpZiAobW92ZWQgJiYgIWF3YWl0aW5nRHJhZ1N0YXJ0ZWQpIHtcbiAgICAgICAgICB0b2dnbGVDbGFzcyhkcmFnRWwsIHB1dFNvcnRhYmxlID8gcHV0U29ydGFibGUub3B0aW9ucy5naG9zdENsYXNzIDogdGhpcy5vcHRpb25zLmdob3N0Q2xhc3MsIGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRvZ2dsZUNsYXNzKGRyYWdFbCwgdGhpcy5vcHRpb25zLmNob3NlbkNsYXNzLCBmYWxzZSk7IC8vIERyYWcgc3RvcCBldmVudFxuXG4gICAgICAgIF9kaXNwYXRjaEV2ZW50KHtcbiAgICAgICAgICBzb3J0YWJsZTogdGhpcyxcbiAgICAgICAgICBuYW1lOiAndW5jaG9vc2UnLFxuICAgICAgICAgIHRvRWw6IHBhcmVudEVsLFxuICAgICAgICAgIG5ld0luZGV4OiBudWxsLFxuICAgICAgICAgIG5ld0RyYWdnYWJsZUluZGV4OiBudWxsLFxuICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2dFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocm9vdEVsICE9PSBwYXJlbnRFbCkge1xuICAgICAgICAgIGlmIChuZXdJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAvLyBBZGQgZXZlbnRcbiAgICAgICAgICAgIF9kaXNwYXRjaEV2ZW50KHtcbiAgICAgICAgICAgICAgcm9vdEVsOiBwYXJlbnRFbCxcbiAgICAgICAgICAgICAgbmFtZTogJ2FkZCcsXG4gICAgICAgICAgICAgIHRvRWw6IHBhcmVudEVsLFxuICAgICAgICAgICAgICBmcm9tRWw6IHJvb3RFbCxcbiAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZ0XG4gICAgICAgICAgICB9KTsgLy8gUmVtb3ZlIGV2ZW50XG5cblxuICAgICAgICAgICAgX2Rpc3BhdGNoRXZlbnQoe1xuICAgICAgICAgICAgICBzb3J0YWJsZTogdGhpcyxcbiAgICAgICAgICAgICAgbmFtZTogJ3JlbW92ZScsXG4gICAgICAgICAgICAgIHRvRWw6IHBhcmVudEVsLFxuICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldnRcbiAgICAgICAgICAgIH0pOyAvLyBkcmFnIGZyb20gb25lIGxpc3QgYW5kIGRyb3AgaW50byBhbm90aGVyXG5cblxuICAgICAgICAgICAgX2Rpc3BhdGNoRXZlbnQoe1xuICAgICAgICAgICAgICByb290RWw6IHBhcmVudEVsLFxuICAgICAgICAgICAgICBuYW1lOiAnc29ydCcsXG4gICAgICAgICAgICAgIHRvRWw6IHBhcmVudEVsLFxuICAgICAgICAgICAgICBmcm9tRWw6IHJvb3RFbCxcbiAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZ0XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgX2Rpc3BhdGNoRXZlbnQoe1xuICAgICAgICAgICAgICBzb3J0YWJsZTogdGhpcyxcbiAgICAgICAgICAgICAgbmFtZTogJ3NvcnQnLFxuICAgICAgICAgICAgICB0b0VsOiBwYXJlbnRFbCxcbiAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZ0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwdXRTb3J0YWJsZSAmJiBwdXRTb3J0YWJsZS5zYXZlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKG5ld0luZGV4ICE9PSBvbGRJbmRleCkge1xuICAgICAgICAgICAgaWYgKG5ld0luZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgLy8gZHJhZyAmIGRyb3Agd2l0aGluIHRoZSBzYW1lIGxpc3RcbiAgICAgICAgICAgICAgX2Rpc3BhdGNoRXZlbnQoe1xuICAgICAgICAgICAgICAgIHNvcnRhYmxlOiB0aGlzLFxuICAgICAgICAgICAgICAgIG5hbWU6ICd1cGRhdGUnLFxuICAgICAgICAgICAgICAgIHRvRWw6IHBhcmVudEVsLFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2dFxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBfZGlzcGF0Y2hFdmVudCh7XG4gICAgICAgICAgICAgICAgc29ydGFibGU6IHRoaXMsXG4gICAgICAgICAgICAgICAgbmFtZTogJ3NvcnQnLFxuICAgICAgICAgICAgICAgIHRvRWw6IHBhcmVudEVsLFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IGV2dFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoU29ydGFibGUuYWN0aXZlKSB7XG4gICAgICAgICAgLyoganNoaW50IGVxbnVsbDp0cnVlICovXG4gICAgICAgICAgaWYgKG5ld0luZGV4ID09IG51bGwgfHwgbmV3SW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICBuZXdJbmRleCA9IG9sZEluZGV4O1xuICAgICAgICAgICAgbmV3RHJhZ2dhYmxlSW5kZXggPSBvbGREcmFnZ2FibGVJbmRleDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfZGlzcGF0Y2hFdmVudCh7XG4gICAgICAgICAgICBzb3J0YWJsZTogdGhpcyxcbiAgICAgICAgICAgIG5hbWU6ICdlbmQnLFxuICAgICAgICAgICAgdG9FbDogcGFyZW50RWwsXG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldnRcbiAgICAgICAgICB9KTsgLy8gU2F2ZSBzb3J0aW5nXG5cblxuICAgICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fbnVsbGluZygpO1xuICB9LFxuICBfbnVsbGluZzogZnVuY3Rpb24gX251bGxpbmcoKSB7XG4gICAgcGx1Z2luRXZlbnQoJ251bGxpbmcnLCB0aGlzKTtcbiAgICByb290RWwgPSBkcmFnRWwgPSBwYXJlbnRFbCA9IGdob3N0RWwgPSBuZXh0RWwgPSBjbG9uZUVsID0gbGFzdERvd25FbCA9IGNsb25lSGlkZGVuID0gdGFwRXZ0ID0gdG91Y2hFdnQgPSBtb3ZlZCA9IG5ld0luZGV4ID0gbmV3RHJhZ2dhYmxlSW5kZXggPSBvbGRJbmRleCA9IG9sZERyYWdnYWJsZUluZGV4ID0gbGFzdFRhcmdldCA9IGxhc3REaXJlY3Rpb24gPSBwdXRTb3J0YWJsZSA9IGFjdGl2ZUdyb3VwID0gU29ydGFibGUuZHJhZ2dlZCA9IFNvcnRhYmxlLmdob3N0ID0gU29ydGFibGUuY2xvbmUgPSBTb3J0YWJsZS5hY3RpdmUgPSBudWxsO1xuICAgIHNhdmVkSW5wdXRDaGVja2VkLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7XG4gICAgICBlbC5jaGVja2VkID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBzYXZlZElucHV0Q2hlY2tlZC5sZW5ndGggPSBsYXN0RHggPSBsYXN0RHkgPSAwO1xuICB9LFxuICBoYW5kbGVFdmVudDogZnVuY3Rpb24gaGFuZGxlRXZlbnQoXG4gIC8qKkV2ZW50Ki9cbiAgZXZ0KSB7XG4gICAgc3dpdGNoIChldnQudHlwZSkge1xuICAgICAgY2FzZSAnZHJvcCc6XG4gICAgICBjYXNlICdkcmFnZW5kJzpcbiAgICAgICAgdGhpcy5fb25Ecm9wKGV2dCk7XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2RyYWdlbnRlcic6XG4gICAgICBjYXNlICdkcmFnb3Zlcic6XG4gICAgICAgIGlmIChkcmFnRWwpIHtcbiAgICAgICAgICB0aGlzLl9vbkRyYWdPdmVyKGV2dCk7XG5cbiAgICAgICAgICBfZ2xvYmFsRHJhZ092ZXIoZXZ0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdzZWxlY3RzdGFydCc6XG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgdGhlIGl0ZW0gaW50byBhbiBhcnJheSBvZiBzdHJpbmcuXG4gICAqIEByZXR1cm5zIHtTdHJpbmdbXX1cbiAgICovXG4gIHRvQXJyYXk6IGZ1bmN0aW9uIHRvQXJyYXkoKSB7XG4gICAgdmFyIG9yZGVyID0gW10sXG4gICAgICAgIGVsLFxuICAgICAgICBjaGlsZHJlbiA9IHRoaXMuZWwuY2hpbGRyZW4sXG4gICAgICAgIGkgPSAwLFxuICAgICAgICBuID0gY2hpbGRyZW4ubGVuZ3RoLFxuICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG4gICAgZm9yICg7IGkgPCBuOyBpKyspIHtcbiAgICAgIGVsID0gY2hpbGRyZW5baV07XG5cbiAgICAgIGlmIChjbG9zZXN0KGVsLCBvcHRpb25zLmRyYWdnYWJsZSwgdGhpcy5lbCwgZmFsc2UpKSB7XG4gICAgICAgIG9yZGVyLnB1c2goZWwuZ2V0QXR0cmlidXRlKG9wdGlvbnMuZGF0YUlkQXR0cikgfHwgX2dlbmVyYXRlSWQoZWwpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3JkZXI7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFNvcnRzIHRoZSBlbGVtZW50cyBhY2NvcmRpbmcgdG8gdGhlIGFycmF5LlxuICAgKiBAcGFyYW0gIHtTdHJpbmdbXX0gIG9yZGVyICBvcmRlciBvZiB0aGUgaXRlbXNcbiAgICovXG4gIHNvcnQ6IGZ1bmN0aW9uIHNvcnQob3JkZXIsIHVzZUFuaW1hdGlvbikge1xuICAgIHZhciBpdGVtcyA9IHt9LFxuICAgICAgICByb290RWwgPSB0aGlzLmVsO1xuICAgIHRoaXMudG9BcnJheSgpLmZvckVhY2goZnVuY3Rpb24gKGlkLCBpKSB7XG4gICAgICB2YXIgZWwgPSByb290RWwuY2hpbGRyZW5baV07XG5cbiAgICAgIGlmIChjbG9zZXN0KGVsLCB0aGlzLm9wdGlvbnMuZHJhZ2dhYmxlLCByb290RWwsIGZhbHNlKSkge1xuICAgICAgICBpdGVtc1tpZF0gPSBlbDtcbiAgICAgIH1cbiAgICB9LCB0aGlzKTtcbiAgICB1c2VBbmltYXRpb24gJiYgdGhpcy5jYXB0dXJlQW5pbWF0aW9uU3RhdGUoKTtcbiAgICBvcmRlci5mb3JFYWNoKGZ1bmN0aW9uIChpZCkge1xuICAgICAgaWYgKGl0ZW1zW2lkXSkge1xuICAgICAgICByb290RWwucmVtb3ZlQ2hpbGQoaXRlbXNbaWRdKTtcbiAgICAgICAgcm9vdEVsLmFwcGVuZENoaWxkKGl0ZW1zW2lkXSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdXNlQW5pbWF0aW9uICYmIHRoaXMuYW5pbWF0ZUFsbCgpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTYXZlIHRoZSBjdXJyZW50IHNvcnRpbmdcbiAgICovXG4gIHNhdmU6IGZ1bmN0aW9uIHNhdmUoKSB7XG4gICAgdmFyIHN0b3JlID0gdGhpcy5vcHRpb25zLnN0b3JlO1xuICAgIHN0b3JlICYmIHN0b3JlLnNldCAmJiBzdG9yZS5zZXQodGhpcyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEZvciBlYWNoIGVsZW1lbnQgaW4gdGhlIHNldCwgZ2V0IHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IgYnkgdGVzdGluZyB0aGUgZWxlbWVudCBpdHNlbGYgYW5kIHRyYXZlcnNpbmcgdXAgdGhyb3VnaCBpdHMgYW5jZXN0b3JzIGluIHRoZSBET00gdHJlZS5cbiAgICogQHBhcmFtICAge0hUTUxFbGVtZW50fSAgZWxcbiAgICogQHBhcmFtICAge1N0cmluZ30gICAgICAgW3NlbGVjdG9yXSAgZGVmYXVsdDogYG9wdGlvbnMuZHJhZ2dhYmxlYFxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR8bnVsbH1cbiAgICovXG4gIGNsb3Nlc3Q6IGZ1bmN0aW9uIGNsb3Nlc3QkMShlbCwgc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gY2xvc2VzdChlbCwgc2VsZWN0b3IgfHwgdGhpcy5vcHRpb25zLmRyYWdnYWJsZSwgdGhpcy5lbCwgZmFsc2UpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTZXQvZ2V0IG9wdGlvblxuICAgKiBAcGFyYW0gICB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSAgIHsqfSAgICAgIFt2YWx1ZV1cbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBvcHRpb246IGZ1bmN0aW9uIG9wdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG4gICAgaWYgKHZhbHVlID09PSB2b2lkIDApIHtcbiAgICAgIHJldHVybiBvcHRpb25zW25hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbW9kaWZpZWRWYWx1ZSA9IFBsdWdpbk1hbmFnZXIubW9kaWZ5T3B0aW9uKHRoaXMsIG5hbWUsIHZhbHVlKTtcblxuICAgICAgaWYgKHR5cGVvZiBtb2RpZmllZFZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBvcHRpb25zW25hbWVdID0gbW9kaWZpZWRWYWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdGlvbnNbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5hbWUgPT09ICdncm91cCcpIHtcbiAgICAgICAgX3ByZXBhcmVHcm91cChvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIERlc3Ryb3lcbiAgICovXG4gIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgcGx1Z2luRXZlbnQoJ2Rlc3Ryb3knLCB0aGlzKTtcbiAgICB2YXIgZWwgPSB0aGlzLmVsO1xuICAgIGVsW2V4cGFuZG9dID0gbnVsbDtcbiAgICBvZmYoZWwsICdtb3VzZWRvd24nLCB0aGlzLl9vblRhcFN0YXJ0KTtcbiAgICBvZmYoZWwsICd0b3VjaHN0YXJ0JywgdGhpcy5fb25UYXBTdGFydCk7XG4gICAgb2ZmKGVsLCAncG9pbnRlcmRvd24nLCB0aGlzLl9vblRhcFN0YXJ0KTtcblxuICAgIGlmICh0aGlzLm5hdGl2ZURyYWdnYWJsZSkge1xuICAgICAgb2ZmKGVsLCAnZHJhZ292ZXInLCB0aGlzKTtcbiAgICAgIG9mZihlbCwgJ2RyYWdlbnRlcicsIHRoaXMpO1xuICAgIH0gLy8gUmVtb3ZlIGRyYWdnYWJsZSBhdHRyaWJ1dGVzXG5cblxuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZWwucXVlcnlTZWxlY3RvckFsbCgnW2RyYWdnYWJsZV0nKSwgZnVuY3Rpb24gKGVsKSB7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ2RyYWdnYWJsZScpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fb25Ecm9wKCk7XG5cbiAgICB0aGlzLl9kaXNhYmxlRGVsYXllZERyYWdFdmVudHMoKTtcblxuICAgIHNvcnRhYmxlcy5zcGxpY2Uoc29ydGFibGVzLmluZGV4T2YodGhpcy5lbCksIDEpO1xuICAgIHRoaXMuZWwgPSBlbCA9IG51bGw7XG4gIH0sXG4gIF9oaWRlQ2xvbmU6IGZ1bmN0aW9uIF9oaWRlQ2xvbmUoKSB7XG4gICAgaWYgKCFjbG9uZUhpZGRlbikge1xuICAgICAgcGx1Z2luRXZlbnQoJ2hpZGVDbG9uZScsIHRoaXMpO1xuICAgICAgaWYgKFNvcnRhYmxlLmV2ZW50Q2FuY2VsZWQpIHJldHVybjtcbiAgICAgIGNzcyhjbG9uZUVsLCAnZGlzcGxheScsICdub25lJyk7XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVtb3ZlQ2xvbmVPbkhpZGUgJiYgY2xvbmVFbC5wYXJlbnROb2RlKSB7XG4gICAgICAgIGNsb25lRWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjbG9uZUVsKTtcbiAgICAgIH1cblxuICAgICAgY2xvbmVIaWRkZW4gPSB0cnVlO1xuICAgIH1cbiAgfSxcbiAgX3Nob3dDbG9uZTogZnVuY3Rpb24gX3Nob3dDbG9uZShwdXRTb3J0YWJsZSkge1xuICAgIGlmIChwdXRTb3J0YWJsZS5sYXN0UHV0TW9kZSAhPT0gJ2Nsb25lJykge1xuICAgICAgdGhpcy5faGlkZUNsb25lKCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY2xvbmVIaWRkZW4pIHtcbiAgICAgIHBsdWdpbkV2ZW50KCdzaG93Q2xvbmUnLCB0aGlzKTtcbiAgICAgIGlmIChTb3J0YWJsZS5ldmVudENhbmNlbGVkKSByZXR1cm47IC8vIHNob3cgY2xvbmUgYXQgZHJhZ0VsIG9yIG9yaWdpbmFsIHBvc2l0aW9uXG5cbiAgICAgIGlmIChkcmFnRWwucGFyZW50Tm9kZSA9PSByb290RWwgJiYgIXRoaXMub3B0aW9ucy5ncm91cC5yZXZlcnRDbG9uZSkge1xuICAgICAgICByb290RWwuaW5zZXJ0QmVmb3JlKGNsb25lRWwsIGRyYWdFbCk7XG4gICAgICB9IGVsc2UgaWYgKG5leHRFbCkge1xuICAgICAgICByb290RWwuaW5zZXJ0QmVmb3JlKGNsb25lRWwsIG5leHRFbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb290RWwuYXBwZW5kQ2hpbGQoY2xvbmVFbCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZ3JvdXAucmV2ZXJ0Q2xvbmUpIHtcbiAgICAgICAgdGhpcy5hbmltYXRlKGRyYWdFbCwgY2xvbmVFbCk7XG4gICAgICB9XG5cbiAgICAgIGNzcyhjbG9uZUVsLCAnZGlzcGxheScsICcnKTtcbiAgICAgIGNsb25lSGlkZGVuID0gZmFsc2U7XG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiBfZ2xvYmFsRHJhZ092ZXIoXG4vKipFdmVudCovXG5ldnQpIHtcbiAgaWYgKGV2dC5kYXRhVHJhbnNmZXIpIHtcbiAgICBldnQuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnbW92ZSc7XG4gIH1cblxuICBldnQuY2FuY2VsYWJsZSAmJiBldnQucHJldmVudERlZmF1bHQoKTtcbn1cblxuZnVuY3Rpb24gX29uTW92ZShmcm9tRWwsIHRvRWwsIGRyYWdFbCwgZHJhZ1JlY3QsIHRhcmdldEVsLCB0YXJnZXRSZWN0LCBvcmlnaW5hbEV2ZW50LCB3aWxsSW5zZXJ0QWZ0ZXIpIHtcbiAgdmFyIGV2dCxcbiAgICAgIHNvcnRhYmxlID0gZnJvbUVsW2V4cGFuZG9dLFxuICAgICAgb25Nb3ZlRm4gPSBzb3J0YWJsZS5vcHRpb25zLm9uTW92ZSxcbiAgICAgIHJldFZhbDsgLy8gU3VwcG9ydCBmb3IgbmV3IEN1c3RvbUV2ZW50IGZlYXR1cmVcblxuICBpZiAod2luZG93LkN1c3RvbUV2ZW50ICYmICFJRTExT3JMZXNzICYmICFFZGdlKSB7XG4gICAgZXZ0ID0gbmV3IEN1c3RvbUV2ZW50KCdtb3ZlJywge1xuICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgIGNhbmNlbGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcbiAgICBldnQuaW5pdEV2ZW50KCdtb3ZlJywgdHJ1ZSwgdHJ1ZSk7XG4gIH1cblxuICBldnQudG8gPSB0b0VsO1xuICBldnQuZnJvbSA9IGZyb21FbDtcbiAgZXZ0LmRyYWdnZWQgPSBkcmFnRWw7XG4gIGV2dC5kcmFnZ2VkUmVjdCA9IGRyYWdSZWN0O1xuICBldnQucmVsYXRlZCA9IHRhcmdldEVsIHx8IHRvRWw7XG4gIGV2dC5yZWxhdGVkUmVjdCA9IHRhcmdldFJlY3QgfHwgZ2V0UmVjdCh0b0VsKTtcbiAgZXZ0LndpbGxJbnNlcnRBZnRlciA9IHdpbGxJbnNlcnRBZnRlcjtcbiAgZXZ0Lm9yaWdpbmFsRXZlbnQgPSBvcmlnaW5hbEV2ZW50O1xuICBmcm9tRWwuZGlzcGF0Y2hFdmVudChldnQpO1xuXG4gIGlmIChvbk1vdmVGbikge1xuICAgIHJldFZhbCA9IG9uTW92ZUZuLmNhbGwoc29ydGFibGUsIGV2dCwgb3JpZ2luYWxFdmVudCk7XG4gIH1cblxuICByZXR1cm4gcmV0VmFsO1xufVxuXG5mdW5jdGlvbiBfZGlzYWJsZURyYWdnYWJsZShlbCkge1xuICBlbC5kcmFnZ2FibGUgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gX3Vuc2lsZW50KCkge1xuICBfc2lsZW50ID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIF9naG9zdElzTGFzdChldnQsIHZlcnRpY2FsLCBzb3J0YWJsZSkge1xuICB2YXIgcmVjdCA9IGdldFJlY3QobGFzdENoaWxkKHNvcnRhYmxlLmVsLCBzb3J0YWJsZS5vcHRpb25zLmRyYWdnYWJsZSkpO1xuICB2YXIgc3BhY2VyID0gMTA7XG4gIHJldHVybiB2ZXJ0aWNhbCA/IGV2dC5jbGllbnRYID4gcmVjdC5yaWdodCArIHNwYWNlciB8fCBldnQuY2xpZW50WCA8PSByZWN0LnJpZ2h0ICYmIGV2dC5jbGllbnRZID4gcmVjdC5ib3R0b20gJiYgZXZ0LmNsaWVudFggPj0gcmVjdC5sZWZ0IDogZXZ0LmNsaWVudFggPiByZWN0LnJpZ2h0ICYmIGV2dC5jbGllbnRZID4gcmVjdC50b3AgfHwgZXZ0LmNsaWVudFggPD0gcmVjdC5yaWdodCAmJiBldnQuY2xpZW50WSA+IHJlY3QuYm90dG9tICsgc3BhY2VyO1xufVxuXG5mdW5jdGlvbiBfZ2V0U3dhcERpcmVjdGlvbihldnQsIHRhcmdldCwgdGFyZ2V0UmVjdCwgdmVydGljYWwsIHN3YXBUaHJlc2hvbGQsIGludmVydGVkU3dhcFRocmVzaG9sZCwgaW52ZXJ0U3dhcCwgaXNMYXN0VGFyZ2V0KSB7XG4gIHZhciBtb3VzZU9uQXhpcyA9IHZlcnRpY2FsID8gZXZ0LmNsaWVudFkgOiBldnQuY2xpZW50WCxcbiAgICAgIHRhcmdldExlbmd0aCA9IHZlcnRpY2FsID8gdGFyZ2V0UmVjdC5oZWlnaHQgOiB0YXJnZXRSZWN0LndpZHRoLFxuICAgICAgdGFyZ2V0UzEgPSB2ZXJ0aWNhbCA/IHRhcmdldFJlY3QudG9wIDogdGFyZ2V0UmVjdC5sZWZ0LFxuICAgICAgdGFyZ2V0UzIgPSB2ZXJ0aWNhbCA/IHRhcmdldFJlY3QuYm90dG9tIDogdGFyZ2V0UmVjdC5yaWdodCxcbiAgICAgIGludmVydCA9IGZhbHNlO1xuXG4gIGlmICghaW52ZXJ0U3dhcCkge1xuICAgIC8vIE5ldmVyIGludmVydCBvciBjcmVhdGUgZHJhZ0VsIHNoYWRvdyB3aGVuIHRhcmdldCBtb3ZlbWVuZXQgY2F1c2VzIG1vdXNlIHRvIG1vdmUgcGFzdCB0aGUgZW5kIG9mIHJlZ3VsYXIgc3dhcFRocmVzaG9sZFxuICAgIGlmIChpc0xhc3RUYXJnZXQgJiYgdGFyZ2V0TW92ZURpc3RhbmNlIDwgdGFyZ2V0TGVuZ3RoICogc3dhcFRocmVzaG9sZCkge1xuICAgICAgLy8gbXVsdGlwbGllZCBvbmx5IGJ5IHN3YXBUaHJlc2hvbGQgYmVjYXVzZSBtb3VzZSB3aWxsIGFscmVhZHkgYmUgaW5zaWRlIHRhcmdldCBieSAoMSAtIHRocmVzaG9sZCkgKiB0YXJnZXRMZW5ndGggLyAyXG4gICAgICAvLyBjaGVjayBpZiBwYXN0IGZpcnN0IGludmVydCB0aHJlc2hvbGQgb24gc2lkZSBvcHBvc2l0ZSBvZiBsYXN0RGlyZWN0aW9uXG4gICAgICBpZiAoIXBhc3RGaXJzdEludmVydFRocmVzaCAmJiAobGFzdERpcmVjdGlvbiA9PT0gMSA/IG1vdXNlT25BeGlzID4gdGFyZ2V0UzEgKyB0YXJnZXRMZW5ndGggKiBpbnZlcnRlZFN3YXBUaHJlc2hvbGQgLyAyIDogbW91c2VPbkF4aXMgPCB0YXJnZXRTMiAtIHRhcmdldExlbmd0aCAqIGludmVydGVkU3dhcFRocmVzaG9sZCAvIDIpKSB7XG4gICAgICAgIC8vIHBhc3QgZmlyc3QgaW52ZXJ0IHRocmVzaG9sZCwgZG8gbm90IHJlc3RyaWN0IGludmVydGVkIHRocmVzaG9sZCB0byBkcmFnRWwgc2hhZG93XG4gICAgICAgIHBhc3RGaXJzdEludmVydFRocmVzaCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghcGFzdEZpcnN0SW52ZXJ0VGhyZXNoKSB7XG4gICAgICAgIC8vIGRyYWdFbCBzaGFkb3cgKHRhcmdldCBtb3ZlIGRpc3RhbmNlIHNoYWRvdylcbiAgICAgICAgaWYgKGxhc3REaXJlY3Rpb24gPT09IDEgPyBtb3VzZU9uQXhpcyA8IHRhcmdldFMxICsgdGFyZ2V0TW92ZURpc3RhbmNlIC8vIG92ZXIgZHJhZ0VsIHNoYWRvd1xuICAgICAgICA6IG1vdXNlT25BeGlzID4gdGFyZ2V0UzIgLSB0YXJnZXRNb3ZlRGlzdGFuY2UpIHtcbiAgICAgICAgICByZXR1cm4gLWxhc3REaXJlY3Rpb247XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGludmVydCA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlZ3VsYXJcbiAgICAgIGlmIChtb3VzZU9uQXhpcyA+IHRhcmdldFMxICsgdGFyZ2V0TGVuZ3RoICogKDEgLSBzd2FwVGhyZXNob2xkKSAvIDIgJiYgbW91c2VPbkF4aXMgPCB0YXJnZXRTMiAtIHRhcmdldExlbmd0aCAqICgxIC0gc3dhcFRocmVzaG9sZCkgLyAyKSB7XG4gICAgICAgIHJldHVybiBfZ2V0SW5zZXJ0RGlyZWN0aW9uKHRhcmdldCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaW52ZXJ0ID0gaW52ZXJ0IHx8IGludmVydFN3YXA7XG5cbiAgaWYgKGludmVydCkge1xuICAgIC8vIEludmVydCBvZiByZWd1bGFyXG4gICAgaWYgKG1vdXNlT25BeGlzIDwgdGFyZ2V0UzEgKyB0YXJnZXRMZW5ndGggKiBpbnZlcnRlZFN3YXBUaHJlc2hvbGQgLyAyIHx8IG1vdXNlT25BeGlzID4gdGFyZ2V0UzIgLSB0YXJnZXRMZW5ndGggKiBpbnZlcnRlZFN3YXBUaHJlc2hvbGQgLyAyKSB7XG4gICAgICByZXR1cm4gbW91c2VPbkF4aXMgPiB0YXJnZXRTMSArIHRhcmdldExlbmd0aCAvIDIgPyAxIDogLTE7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIDA7XG59XG4vKipcbiAqIEdldHMgdGhlIGRpcmVjdGlvbiBkcmFnRWwgbXVzdCBiZSBzd2FwcGVkIHJlbGF0aXZlIHRvIHRhcmdldCBpbiBvcmRlciB0byBtYWtlIGl0XG4gKiBzZWVtIHRoYXQgZHJhZ0VsIGhhcyBiZWVuIFwiaW5zZXJ0ZWRcIiBpbnRvIHRoYXQgZWxlbWVudCdzIHBvc2l0aW9uXG4gKiBAcGFyYW0gIHtIVE1MRWxlbWVudH0gdGFyZ2V0ICAgICAgIFRoZSB0YXJnZXQgd2hvc2UgcG9zaXRpb24gZHJhZ0VsIGlzIGJlaW5nIGluc2VydGVkIGF0XG4gKiBAcmV0dXJuIHtOdW1iZXJ9ICAgICAgICAgICAgICAgICAgIERpcmVjdGlvbiBkcmFnRWwgbXVzdCBiZSBzd2FwcGVkXG4gKi9cblxuXG5mdW5jdGlvbiBfZ2V0SW5zZXJ0RGlyZWN0aW9uKHRhcmdldCkge1xuICBpZiAoaW5kZXgoZHJhZ0VsKSA8IGluZGV4KHRhcmdldCkpIHtcbiAgICByZXR1cm4gMTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbn1cbi8qKlxuICogR2VuZXJhdGUgaWRcbiAqIEBwYXJhbSAgIHtIVE1MRWxlbWVudH0gZWxcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5cblxuZnVuY3Rpb24gX2dlbmVyYXRlSWQoZWwpIHtcbiAgdmFyIHN0ciA9IGVsLnRhZ05hbWUgKyBlbC5jbGFzc05hbWUgKyBlbC5zcmMgKyBlbC5ocmVmICsgZWwudGV4dENvbnRlbnQsXG4gICAgICBpID0gc3RyLmxlbmd0aCxcbiAgICAgIHN1bSA9IDA7XG5cbiAgd2hpbGUgKGktLSkge1xuICAgIHN1bSArPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgfVxuXG4gIHJldHVybiBzdW0udG9TdHJpbmcoMzYpO1xufVxuXG5mdW5jdGlvbiBfc2F2ZUlucHV0Q2hlY2tlZFN0YXRlKHJvb3QpIHtcbiAgc2F2ZWRJbnB1dENoZWNrZWQubGVuZ3RoID0gMDtcbiAgdmFyIGlucHV0cyA9IHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0Jyk7XG4gIHZhciBpZHggPSBpbnB1dHMubGVuZ3RoO1xuXG4gIHdoaWxlIChpZHgtLSkge1xuICAgIHZhciBlbCA9IGlucHV0c1tpZHhdO1xuICAgIGVsLmNoZWNrZWQgJiYgc2F2ZWRJbnB1dENoZWNrZWQucHVzaChlbCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX25leHRUaWNrKGZuKSB7XG4gIHJldHVybiBzZXRUaW1lb3V0KGZuLCAwKTtcbn1cblxuZnVuY3Rpb24gX2NhbmNlbE5leHRUaWNrKGlkKSB7XG4gIHJldHVybiBjbGVhclRpbWVvdXQoaWQpO1xufSAvLyBGaXhlZCAjOTczOlxuXG5cbmlmIChkb2N1bWVudEV4aXN0cykge1xuICBvbihkb2N1bWVudCwgJ3RvdWNobW92ZScsIGZ1bmN0aW9uIChldnQpIHtcbiAgICBpZiAoKFNvcnRhYmxlLmFjdGl2ZSB8fCBhd2FpdGluZ0RyYWdTdGFydGVkKSAmJiBldnQuY2FuY2VsYWJsZSkge1xuICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9KTtcbn0gLy8gRXhwb3J0IHV0aWxzXG5cblxuU29ydGFibGUudXRpbHMgPSB7XG4gIG9uOiBvbixcbiAgb2ZmOiBvZmYsXG4gIGNzczogY3NzLFxuICBmaW5kOiBmaW5kLFxuICBpczogZnVuY3Rpb24gaXMoZWwsIHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuICEhY2xvc2VzdChlbCwgc2VsZWN0b3IsIGVsLCBmYWxzZSk7XG4gIH0sXG4gIGV4dGVuZDogZXh0ZW5kLFxuICB0aHJvdHRsZTogdGhyb3R0bGUsXG4gIGNsb3Nlc3Q6IGNsb3Nlc3QsXG4gIHRvZ2dsZUNsYXNzOiB0b2dnbGVDbGFzcyxcbiAgY2xvbmU6IGNsb25lLFxuICBpbmRleDogaW5kZXgsXG4gIG5leHRUaWNrOiBfbmV4dFRpY2ssXG4gIGNhbmNlbE5leHRUaWNrOiBfY2FuY2VsTmV4dFRpY2ssXG4gIGRldGVjdERpcmVjdGlvbjogX2RldGVjdERpcmVjdGlvbixcbiAgZ2V0Q2hpbGQ6IGdldENoaWxkXG59O1xuLyoqXG4gKiBHZXQgdGhlIFNvcnRhYmxlIGluc3RhbmNlIG9mIGFuIGVsZW1lbnRcbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSBlbGVtZW50IFRoZSBlbGVtZW50XG4gKiBAcmV0dXJuIHtTb3J0YWJsZXx1bmRlZmluZWR9ICAgICAgICAgVGhlIGluc3RhbmNlIG9mIFNvcnRhYmxlXG4gKi9cblxuU29ydGFibGUuZ2V0ID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnRbZXhwYW5kb107XG59O1xuLyoqXG4gKiBNb3VudCBhIHBsdWdpbiB0byBTb3J0YWJsZVxuICogQHBhcmFtICB7Li4uU29ydGFibGVQbHVnaW58U29ydGFibGVQbHVnaW5bXX0gcGx1Z2lucyAgICAgICBQbHVnaW5zIGJlaW5nIG1vdW50ZWRcbiAqL1xuXG5cblNvcnRhYmxlLm1vdW50ID0gZnVuY3Rpb24gKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcGx1Z2lucyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBwbHVnaW5zW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgaWYgKHBsdWdpbnNbMF0uY29uc3RydWN0b3IgPT09IEFycmF5KSBwbHVnaW5zID0gcGx1Z2luc1swXTtcbiAgcGx1Z2lucy5mb3JFYWNoKGZ1bmN0aW9uIChwbHVnaW4pIHtcbiAgICBpZiAoIXBsdWdpbi5wcm90b3R5cGUgfHwgIXBsdWdpbi5wcm90b3R5cGUuY29uc3RydWN0b3IpIHtcbiAgICAgIHRocm93IFwiU29ydGFibGU6IE1vdW50ZWQgcGx1Z2luIG11c3QgYmUgYSBjb25zdHJ1Y3RvciBmdW5jdGlvbiwgbm90IFwiLmNvbmNhdCh7fS50b1N0cmluZy5jYWxsKHBsdWdpbikpO1xuICAgIH1cblxuICAgIGlmIChwbHVnaW4udXRpbHMpIFNvcnRhYmxlLnV0aWxzID0gX29iamVjdFNwcmVhZCh7fSwgU29ydGFibGUudXRpbHMsIHBsdWdpbi51dGlscyk7XG4gICAgUGx1Z2luTWFuYWdlci5tb3VudChwbHVnaW4pO1xuICB9KTtcbn07XG4vKipcbiAqIENyZWF0ZSBzb3J0YWJsZSBpbnN0YW5jZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gIGVsXG4gKiBAcGFyYW0ge09iamVjdH0gICAgICBbb3B0aW9uc11cbiAqL1xuXG5cblNvcnRhYmxlLmNyZWF0ZSA9IGZ1bmN0aW9uIChlbCwgb3B0aW9ucykge1xuICByZXR1cm4gbmV3IFNvcnRhYmxlKGVsLCBvcHRpb25zKTtcbn07IC8vIEV4cG9ydFxuXG5cblNvcnRhYmxlLnZlcnNpb24gPSB2ZXJzaW9uO1xuXG52YXIgYXV0b1Njcm9sbHMgPSBbXSxcbiAgICBzY3JvbGxFbCxcbiAgICBzY3JvbGxSb290RWwsXG4gICAgc2Nyb2xsaW5nID0gZmFsc2UsXG4gICAgbGFzdEF1dG9TY3JvbGxYLFxuICAgIGxhc3RBdXRvU2Nyb2xsWSxcbiAgICB0b3VjaEV2dCQxLFxuICAgIHBvaW50ZXJFbGVtQ2hhbmdlZEludGVydmFsO1xuXG5mdW5jdGlvbiBBdXRvU2Nyb2xsUGx1Z2luKCkge1xuICBmdW5jdGlvbiBBdXRvU2Nyb2xsKCkge1xuICAgIHRoaXMuZGVmYXVsdHMgPSB7XG4gICAgICBzY3JvbGw6IHRydWUsXG4gICAgICBzY3JvbGxTZW5zaXRpdml0eTogMzAsXG4gICAgICBzY3JvbGxTcGVlZDogMTAsXG4gICAgICBidWJibGVTY3JvbGw6IHRydWVcbiAgICB9OyAvLyBCaW5kIGFsbCBwcml2YXRlIG1ldGhvZHNcblxuICAgIGZvciAodmFyIGZuIGluIHRoaXMpIHtcbiAgICAgIGlmIChmbi5jaGFyQXQoMCkgPT09ICdfJyAmJiB0eXBlb2YgdGhpc1tmbl0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpc1tmbl0gPSB0aGlzW2ZuXS5iaW5kKHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEF1dG9TY3JvbGwucHJvdG90eXBlID0ge1xuICAgIGRyYWdTdGFydGVkOiBmdW5jdGlvbiBkcmFnU3RhcnRlZChfcmVmKSB7XG4gICAgICB2YXIgb3JpZ2luYWxFdmVudCA9IF9yZWYub3JpZ2luYWxFdmVudDtcblxuICAgICAgaWYgKHRoaXMuc29ydGFibGUubmF0aXZlRHJhZ2dhYmxlKSB7XG4gICAgICAgIG9uKGRvY3VtZW50LCAnZHJhZ292ZXInLCB0aGlzLl9oYW5kbGVBdXRvU2Nyb2xsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc3VwcG9ydFBvaW50ZXIpIHtcbiAgICAgICAgICBvbihkb2N1bWVudCwgJ3BvaW50ZXJtb3ZlJywgdGhpcy5faGFuZGxlRmFsbGJhY2tBdXRvU2Nyb2xsKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcmlnaW5hbEV2ZW50LnRvdWNoZXMpIHtcbiAgICAgICAgICBvbihkb2N1bWVudCwgJ3RvdWNobW92ZScsIHRoaXMuX2hhbmRsZUZhbGxiYWNrQXV0b1Njcm9sbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb24oZG9jdW1lbnQsICdtb3VzZW1vdmUnLCB0aGlzLl9oYW5kbGVGYWxsYmFja0F1dG9TY3JvbGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBkcmFnT3ZlckNvbXBsZXRlZDogZnVuY3Rpb24gZHJhZ092ZXJDb21wbGV0ZWQoX3JlZjIpIHtcbiAgICAgIHZhciBvcmlnaW5hbEV2ZW50ID0gX3JlZjIub3JpZ2luYWxFdmVudDtcblxuICAgICAgLy8gRm9yIHdoZW4gYnViYmxpbmcgaXMgY2FuY2VsZWQgYW5kIHVzaW5nIGZhbGxiYWNrIChmYWxsYmFjayAndG91Y2htb3ZlJyBhbHdheXMgcmVhY2hlZClcbiAgICAgIGlmICghdGhpcy5vcHRpb25zLmRyYWdPdmVyQnViYmxlICYmICFvcmlnaW5hbEV2ZW50LnJvb3RFbCkge1xuICAgICAgICB0aGlzLl9oYW5kbGVBdXRvU2Nyb2xsKG9yaWdpbmFsRXZlbnQpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZHJvcDogZnVuY3Rpb24gZHJvcCgpIHtcbiAgICAgIGlmICh0aGlzLnNvcnRhYmxlLm5hdGl2ZURyYWdnYWJsZSkge1xuICAgICAgICBvZmYoZG9jdW1lbnQsICdkcmFnb3ZlcicsIHRoaXMuX2hhbmRsZUF1dG9TY3JvbGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2ZmKGRvY3VtZW50LCAncG9pbnRlcm1vdmUnLCB0aGlzLl9oYW5kbGVGYWxsYmFja0F1dG9TY3JvbGwpO1xuICAgICAgICBvZmYoZG9jdW1lbnQsICd0b3VjaG1vdmUnLCB0aGlzLl9oYW5kbGVGYWxsYmFja0F1dG9TY3JvbGwpO1xuICAgICAgICBvZmYoZG9jdW1lbnQsICdtb3VzZW1vdmUnLCB0aGlzLl9oYW5kbGVGYWxsYmFja0F1dG9TY3JvbGwpO1xuICAgICAgfVxuXG4gICAgICBjbGVhclBvaW50ZXJFbGVtQ2hhbmdlZEludGVydmFsKCk7XG4gICAgICBjbGVhckF1dG9TY3JvbGxzKCk7XG4gICAgICBjYW5jZWxUaHJvdHRsZSgpO1xuICAgIH0sXG4gICAgbnVsbGluZzogZnVuY3Rpb24gbnVsbGluZygpIHtcbiAgICAgIHRvdWNoRXZ0JDEgPSBzY3JvbGxSb290RWwgPSBzY3JvbGxFbCA9IHNjcm9sbGluZyA9IHBvaW50ZXJFbGVtQ2hhbmdlZEludGVydmFsID0gbGFzdEF1dG9TY3JvbGxYID0gbGFzdEF1dG9TY3JvbGxZID0gbnVsbDtcbiAgICAgIGF1dG9TY3JvbGxzLmxlbmd0aCA9IDA7XG4gICAgfSxcbiAgICBfaGFuZGxlRmFsbGJhY2tBdXRvU2Nyb2xsOiBmdW5jdGlvbiBfaGFuZGxlRmFsbGJhY2tBdXRvU2Nyb2xsKGV2dCkge1xuICAgICAgdGhpcy5faGFuZGxlQXV0b1Njcm9sbChldnQsIHRydWUpO1xuICAgIH0sXG4gICAgX2hhbmRsZUF1dG9TY3JvbGw6IGZ1bmN0aW9uIF9oYW5kbGVBdXRvU2Nyb2xsKGV2dCwgZmFsbGJhY2spIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHZhciB4ID0gKGV2dC50b3VjaGVzID8gZXZ0LnRvdWNoZXNbMF0gOiBldnQpLmNsaWVudFgsXG4gICAgICAgICAgeSA9IChldnQudG91Y2hlcyA/IGV2dC50b3VjaGVzWzBdIDogZXZ0KS5jbGllbnRZLFxuICAgICAgICAgIGVsZW0gPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHgsIHkpO1xuICAgICAgdG91Y2hFdnQkMSA9IGV2dDsgLy8gSUUgZG9lcyBub3Qgc2VlbSB0byBoYXZlIG5hdGl2ZSBhdXRvc2Nyb2xsLFxuICAgICAgLy8gRWRnZSdzIGF1dG9zY3JvbGwgc2VlbXMgdG9vIGNvbmRpdGlvbmFsLFxuICAgICAgLy8gTUFDT1MgU2FmYXJpIGRvZXMgbm90IGhhdmUgYXV0b3Njcm9sbCxcbiAgICAgIC8vIEZpcmVmb3ggYW5kIENocm9tZSBhcmUgZ29vZFxuXG4gICAgICBpZiAoZmFsbGJhY2sgfHwgRWRnZSB8fCBJRTExT3JMZXNzIHx8IFNhZmFyaSkge1xuICAgICAgICBhdXRvU2Nyb2xsKGV2dCwgdGhpcy5vcHRpb25zLCBlbGVtLCBmYWxsYmFjayk7IC8vIExpc3RlbmVyIGZvciBwb2ludGVyIGVsZW1lbnQgY2hhbmdlXG5cbiAgICAgICAgdmFyIG9nRWxlbVNjcm9sbGVyID0gZ2V0UGFyZW50QXV0b1Njcm9sbEVsZW1lbnQoZWxlbSwgdHJ1ZSk7XG5cbiAgICAgICAgaWYgKHNjcm9sbGluZyAmJiAoIXBvaW50ZXJFbGVtQ2hhbmdlZEludGVydmFsIHx8IHggIT09IGxhc3RBdXRvU2Nyb2xsWCB8fCB5ICE9PSBsYXN0QXV0b1Njcm9sbFkpKSB7XG4gICAgICAgICAgcG9pbnRlckVsZW1DaGFuZ2VkSW50ZXJ2YWwgJiYgY2xlYXJQb2ludGVyRWxlbUNoYW5nZWRJbnRlcnZhbCgpOyAvLyBEZXRlY3QgZm9yIHBvaW50ZXIgZWxlbSBjaGFuZ2UsIGVtdWxhdGluZyBuYXRpdmUgRG5EIGJlaGF2aW91clxuXG4gICAgICAgICAgcG9pbnRlckVsZW1DaGFuZ2VkSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgbmV3RWxlbSA9IGdldFBhcmVudEF1dG9TY3JvbGxFbGVtZW50KGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoeCwgeSksIHRydWUpO1xuXG4gICAgICAgICAgICBpZiAobmV3RWxlbSAhPT0gb2dFbGVtU2Nyb2xsZXIpIHtcbiAgICAgICAgICAgICAgb2dFbGVtU2Nyb2xsZXIgPSBuZXdFbGVtO1xuICAgICAgICAgICAgICBjbGVhckF1dG9TY3JvbGxzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGF1dG9TY3JvbGwoZXZ0LCBfdGhpcy5vcHRpb25zLCBuZXdFbGVtLCBmYWxsYmFjayk7XG4gICAgICAgICAgfSwgMTApO1xuICAgICAgICAgIGxhc3RBdXRvU2Nyb2xsWCA9IHg7XG4gICAgICAgICAgbGFzdEF1dG9TY3JvbGxZID0geTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaWYgRG5EIGlzIGVuYWJsZWQgKGFuZCBicm93c2VyIGhhcyBnb29kIGF1dG9zY3JvbGxpbmcpLCBmaXJzdCBhdXRvc2Nyb2xsIHdpbGwgYWxyZWFkeSBzY3JvbGwsIHNvIGdldCBwYXJlbnQgYXV0b3Njcm9sbCBvZiBmaXJzdCBhdXRvc2Nyb2xsXG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zLmJ1YmJsZVNjcm9sbCB8fCBnZXRQYXJlbnRBdXRvU2Nyb2xsRWxlbWVudChlbGVtLCB0cnVlKSA9PT0gZ2V0V2luZG93U2Nyb2xsaW5nRWxlbWVudCgpKSB7XG4gICAgICAgICAgY2xlYXJBdXRvU2Nyb2xscygpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGF1dG9TY3JvbGwoZXZ0LCB0aGlzLm9wdGlvbnMsIGdldFBhcmVudEF1dG9TY3JvbGxFbGVtZW50KGVsZW0sIGZhbHNlKSwgZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIF9leHRlbmRzKEF1dG9TY3JvbGwsIHtcbiAgICBwbHVnaW5OYW1lOiAnc2Nyb2xsJyxcbiAgICBpbml0aWFsaXplQnlEZWZhdWx0OiB0cnVlXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjbGVhckF1dG9TY3JvbGxzKCkge1xuICBhdXRvU2Nyb2xscy5mb3JFYWNoKGZ1bmN0aW9uIChhdXRvU2Nyb2xsKSB7XG4gICAgY2xlYXJJbnRlcnZhbChhdXRvU2Nyb2xsLnBpZCk7XG4gIH0pO1xuICBhdXRvU2Nyb2xscyA9IFtdO1xufVxuXG5mdW5jdGlvbiBjbGVhclBvaW50ZXJFbGVtQ2hhbmdlZEludGVydmFsKCkge1xuICBjbGVhckludGVydmFsKHBvaW50ZXJFbGVtQ2hhbmdlZEludGVydmFsKTtcbn1cblxudmFyIGF1dG9TY3JvbGwgPSB0aHJvdHRsZShmdW5jdGlvbiAoZXZ0LCBvcHRpb25zLCByb290RWwsIGlzRmFsbGJhY2spIHtcbiAgLy8gQnVnOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD01MDU1MjFcbiAgaWYgKCFvcHRpb25zLnNjcm9sbCkgcmV0dXJuO1xuICB2YXIgeCA9IChldnQudG91Y2hlcyA/IGV2dC50b3VjaGVzWzBdIDogZXZ0KS5jbGllbnRYLFxuICAgICAgeSA9IChldnQudG91Y2hlcyA/IGV2dC50b3VjaGVzWzBdIDogZXZ0KS5jbGllbnRZLFxuICAgICAgc2VucyA9IG9wdGlvbnMuc2Nyb2xsU2Vuc2l0aXZpdHksXG4gICAgICBzcGVlZCA9IG9wdGlvbnMuc2Nyb2xsU3BlZWQsXG4gICAgICB3aW5TY3JvbGxlciA9IGdldFdpbmRvd1Njcm9sbGluZ0VsZW1lbnQoKTtcbiAgdmFyIHNjcm9sbFRoaXNJbnN0YW5jZSA9IGZhbHNlLFxuICAgICAgc2Nyb2xsQ3VzdG9tRm47IC8vIE5ldyBzY3JvbGwgcm9vdCwgc2V0IHNjcm9sbEVsXG5cbiAgaWYgKHNjcm9sbFJvb3RFbCAhPT0gcm9vdEVsKSB7XG4gICAgc2Nyb2xsUm9vdEVsID0gcm9vdEVsO1xuICAgIGNsZWFyQXV0b1Njcm9sbHMoKTtcbiAgICBzY3JvbGxFbCA9IG9wdGlvbnMuc2Nyb2xsO1xuICAgIHNjcm9sbEN1c3RvbUZuID0gb3B0aW9ucy5zY3JvbGxGbjtcblxuICAgIGlmIChzY3JvbGxFbCA9PT0gdHJ1ZSkge1xuICAgICAgc2Nyb2xsRWwgPSBnZXRQYXJlbnRBdXRvU2Nyb2xsRWxlbWVudChyb290RWwsIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBsYXllcnNPdXQgPSAwO1xuICB2YXIgY3VycmVudFBhcmVudCA9IHNjcm9sbEVsO1xuXG4gIGRvIHtcbiAgICB2YXIgZWwgPSBjdXJyZW50UGFyZW50LFxuICAgICAgICByZWN0ID0gZ2V0UmVjdChlbCksXG4gICAgICAgIHRvcCA9IHJlY3QudG9wLFxuICAgICAgICBib3R0b20gPSByZWN0LmJvdHRvbSxcbiAgICAgICAgbGVmdCA9IHJlY3QubGVmdCxcbiAgICAgICAgcmlnaHQgPSByZWN0LnJpZ2h0LFxuICAgICAgICB3aWR0aCA9IHJlY3Qud2lkdGgsXG4gICAgICAgIGhlaWdodCA9IHJlY3QuaGVpZ2h0LFxuICAgICAgICBjYW5TY3JvbGxYID0gdm9pZCAwLFxuICAgICAgICBjYW5TY3JvbGxZID0gdm9pZCAwLFxuICAgICAgICBzY3JvbGxXaWR0aCA9IGVsLnNjcm9sbFdpZHRoLFxuICAgICAgICBzY3JvbGxIZWlnaHQgPSBlbC5zY3JvbGxIZWlnaHQsXG4gICAgICAgIGVsQ1NTID0gY3NzKGVsKSxcbiAgICAgICAgc2Nyb2xsUG9zWCA9IGVsLnNjcm9sbExlZnQsXG4gICAgICAgIHNjcm9sbFBvc1kgPSBlbC5zY3JvbGxUb3A7XG5cbiAgICBpZiAoZWwgPT09IHdpblNjcm9sbGVyKSB7XG4gICAgICBjYW5TY3JvbGxYID0gd2lkdGggPCBzY3JvbGxXaWR0aCAmJiAoZWxDU1Mub3ZlcmZsb3dYID09PSAnYXV0bycgfHwgZWxDU1Mub3ZlcmZsb3dYID09PSAnc2Nyb2xsJyB8fCBlbENTUy5vdmVyZmxvd1ggPT09ICd2aXNpYmxlJyk7XG4gICAgICBjYW5TY3JvbGxZID0gaGVpZ2h0IDwgc2Nyb2xsSGVpZ2h0ICYmIChlbENTUy5vdmVyZmxvd1kgPT09ICdhdXRvJyB8fCBlbENTUy5vdmVyZmxvd1kgPT09ICdzY3JvbGwnIHx8IGVsQ1NTLm92ZXJmbG93WSA9PT0gJ3Zpc2libGUnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FuU2Nyb2xsWCA9IHdpZHRoIDwgc2Nyb2xsV2lkdGggJiYgKGVsQ1NTLm92ZXJmbG93WCA9PT0gJ2F1dG8nIHx8IGVsQ1NTLm92ZXJmbG93WCA9PT0gJ3Njcm9sbCcpO1xuICAgICAgY2FuU2Nyb2xsWSA9IGhlaWdodCA8IHNjcm9sbEhlaWdodCAmJiAoZWxDU1Mub3ZlcmZsb3dZID09PSAnYXV0bycgfHwgZWxDU1Mub3ZlcmZsb3dZID09PSAnc2Nyb2xsJyk7XG4gICAgfVxuXG4gICAgdmFyIHZ4ID0gY2FuU2Nyb2xsWCAmJiAoTWF0aC5hYnMocmlnaHQgLSB4KSA8PSBzZW5zICYmIHNjcm9sbFBvc1ggKyB3aWR0aCA8IHNjcm9sbFdpZHRoKSAtIChNYXRoLmFicyhsZWZ0IC0geCkgPD0gc2VucyAmJiAhIXNjcm9sbFBvc1gpO1xuICAgIHZhciB2eSA9IGNhblNjcm9sbFkgJiYgKE1hdGguYWJzKGJvdHRvbSAtIHkpIDw9IHNlbnMgJiYgc2Nyb2xsUG9zWSArIGhlaWdodCA8IHNjcm9sbEhlaWdodCkgLSAoTWF0aC5hYnModG9wIC0geSkgPD0gc2VucyAmJiAhIXNjcm9sbFBvc1kpO1xuXG4gICAgaWYgKCFhdXRvU2Nyb2xsc1tsYXllcnNPdXRdKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBsYXllcnNPdXQ7IGkrKykge1xuICAgICAgICBpZiAoIWF1dG9TY3JvbGxzW2ldKSB7XG4gICAgICAgICAgYXV0b1Njcm9sbHNbaV0gPSB7fTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhdXRvU2Nyb2xsc1tsYXllcnNPdXRdLnZ4ICE9IHZ4IHx8IGF1dG9TY3JvbGxzW2xheWVyc091dF0udnkgIT0gdnkgfHwgYXV0b1Njcm9sbHNbbGF5ZXJzT3V0XS5lbCAhPT0gZWwpIHtcbiAgICAgIGF1dG9TY3JvbGxzW2xheWVyc091dF0uZWwgPSBlbDtcbiAgICAgIGF1dG9TY3JvbGxzW2xheWVyc091dF0udnggPSB2eDtcbiAgICAgIGF1dG9TY3JvbGxzW2xheWVyc091dF0udnkgPSB2eTtcbiAgICAgIGNsZWFySW50ZXJ2YWwoYXV0b1Njcm9sbHNbbGF5ZXJzT3V0XS5waWQpO1xuXG4gICAgICBpZiAodnggIT0gMCB8fCB2eSAhPSAwKSB7XG4gICAgICAgIHNjcm9sbFRoaXNJbnN0YW5jZSA9IHRydWU7XG4gICAgICAgIC8qIGpzaGludCBsb29wZnVuYzp0cnVlICovXG5cbiAgICAgICAgYXV0b1Njcm9sbHNbbGF5ZXJzT3V0XS5waWQgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gZW11bGF0ZSBkcmFnIG92ZXIgZHVyaW5nIGF1dG9zY3JvbGwgKGZhbGxiYWNrKSwgZW11bGF0aW5nIG5hdGl2ZSBEbkQgYmVoYXZpb3VyXG4gICAgICAgICAgaWYgKGlzRmFsbGJhY2sgJiYgdGhpcy5sYXllciA9PT0gMCkge1xuICAgICAgICAgICAgU29ydGFibGUuYWN0aXZlLl9vblRvdWNoTW92ZSh0b3VjaEV2dCQxKTsgLy8gVG8gbW92ZSBnaG9zdCBpZiBpdCBpcyBwb3NpdGlvbmVkIGFic29sdXRlbHlcblxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBzY3JvbGxPZmZzZXRZID0gYXV0b1Njcm9sbHNbdGhpcy5sYXllcl0udnkgPyBhdXRvU2Nyb2xsc1t0aGlzLmxheWVyXS52eSAqIHNwZWVkIDogMDtcbiAgICAgICAgICB2YXIgc2Nyb2xsT2Zmc2V0WCA9IGF1dG9TY3JvbGxzW3RoaXMubGF5ZXJdLnZ4ID8gYXV0b1Njcm9sbHNbdGhpcy5sYXllcl0udnggKiBzcGVlZCA6IDA7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIHNjcm9sbEN1c3RvbUZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBpZiAoc2Nyb2xsQ3VzdG9tRm4uY2FsbChTb3J0YWJsZS5kcmFnZ2VkLnBhcmVudE5vZGVbZXhwYW5kb10sIHNjcm9sbE9mZnNldFgsIHNjcm9sbE9mZnNldFksIGV2dCwgdG91Y2hFdnQkMSwgYXV0b1Njcm9sbHNbdGhpcy5sYXllcl0uZWwpICE9PSAnY29udGludWUnKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzY3JvbGxCeShhdXRvU2Nyb2xsc1t0aGlzLmxheWVyXS5lbCwgc2Nyb2xsT2Zmc2V0WCwgc2Nyb2xsT2Zmc2V0WSk7XG4gICAgICAgIH0uYmluZCh7XG4gICAgICAgICAgbGF5ZXI6IGxheWVyc091dFxuICAgICAgICB9KSwgMjQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxheWVyc091dCsrO1xuICB9IHdoaWxlIChvcHRpb25zLmJ1YmJsZVNjcm9sbCAmJiBjdXJyZW50UGFyZW50ICE9PSB3aW5TY3JvbGxlciAmJiAoY3VycmVudFBhcmVudCA9IGdldFBhcmVudEF1dG9TY3JvbGxFbGVtZW50KGN1cnJlbnRQYXJlbnQsIGZhbHNlKSkpO1xuXG4gIHNjcm9sbGluZyA9IHNjcm9sbFRoaXNJbnN0YW5jZTsgLy8gaW4gY2FzZSBhbm90aGVyIGZ1bmN0aW9uIGNhdGNoZXMgc2Nyb2xsaW5nIGFzIGZhbHNlIGluIGJldHdlZW4gd2hlbiBpdCBpcyBub3Rcbn0sIDMwKTtcblxudmFyIGRyb3AgPSBmdW5jdGlvbiBkcm9wKF9yZWYpIHtcbiAgdmFyIG9yaWdpbmFsRXZlbnQgPSBfcmVmLm9yaWdpbmFsRXZlbnQsXG4gICAgICBwdXRTb3J0YWJsZSA9IF9yZWYucHV0U29ydGFibGUsXG4gICAgICBkcmFnRWwgPSBfcmVmLmRyYWdFbCxcbiAgICAgIGFjdGl2ZVNvcnRhYmxlID0gX3JlZi5hY3RpdmVTb3J0YWJsZSxcbiAgICAgIGRpc3BhdGNoU29ydGFibGVFdmVudCA9IF9yZWYuZGlzcGF0Y2hTb3J0YWJsZUV2ZW50LFxuICAgICAgaGlkZUdob3N0Rm9yVGFyZ2V0ID0gX3JlZi5oaWRlR2hvc3RGb3JUYXJnZXQsXG4gICAgICB1bmhpZGVHaG9zdEZvclRhcmdldCA9IF9yZWYudW5oaWRlR2hvc3RGb3JUYXJnZXQ7XG4gIGlmICghb3JpZ2luYWxFdmVudCkgcmV0dXJuO1xuICB2YXIgdG9Tb3J0YWJsZSA9IHB1dFNvcnRhYmxlIHx8IGFjdGl2ZVNvcnRhYmxlO1xuICBoaWRlR2hvc3RGb3JUYXJnZXQoKTtcbiAgdmFyIHRvdWNoID0gb3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlcyAmJiBvcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzLmxlbmd0aCA/IG9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0gOiBvcmlnaW5hbEV2ZW50O1xuICB2YXIgdGFyZ2V0ID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludCh0b3VjaC5jbGllbnRYLCB0b3VjaC5jbGllbnRZKTtcbiAgdW5oaWRlR2hvc3RGb3JUYXJnZXQoKTtcblxuICBpZiAodG9Tb3J0YWJsZSAmJiAhdG9Tb3J0YWJsZS5lbC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgZGlzcGF0Y2hTb3J0YWJsZUV2ZW50KCdzcGlsbCcpO1xuICAgIHRoaXMub25TcGlsbCh7XG4gICAgICBkcmFnRWw6IGRyYWdFbCxcbiAgICAgIHB1dFNvcnRhYmxlOiBwdXRTb3J0YWJsZVxuICAgIH0pO1xuICB9XG59O1xuXG5mdW5jdGlvbiBSZXZlcnQoKSB7fVxuXG5SZXZlcnQucHJvdG90eXBlID0ge1xuICBzdGFydEluZGV4OiBudWxsLFxuICBkcmFnU3RhcnQ6IGZ1bmN0aW9uIGRyYWdTdGFydChfcmVmMikge1xuICAgIHZhciBvbGREcmFnZ2FibGVJbmRleCA9IF9yZWYyLm9sZERyYWdnYWJsZUluZGV4O1xuICAgIHRoaXMuc3RhcnRJbmRleCA9IG9sZERyYWdnYWJsZUluZGV4O1xuICB9LFxuICBvblNwaWxsOiBmdW5jdGlvbiBvblNwaWxsKF9yZWYzKSB7XG4gICAgdmFyIGRyYWdFbCA9IF9yZWYzLmRyYWdFbCxcbiAgICAgICAgcHV0U29ydGFibGUgPSBfcmVmMy5wdXRTb3J0YWJsZTtcbiAgICB0aGlzLnNvcnRhYmxlLmNhcHR1cmVBbmltYXRpb25TdGF0ZSgpO1xuXG4gICAgaWYgKHB1dFNvcnRhYmxlKSB7XG4gICAgICBwdXRTb3J0YWJsZS5jYXB0dXJlQW5pbWF0aW9uU3RhdGUoKTtcbiAgICB9XG5cbiAgICB2YXIgbmV4dFNpYmxpbmcgPSBnZXRDaGlsZCh0aGlzLnNvcnRhYmxlLmVsLCB0aGlzLnN0YXJ0SW5kZXgsIHRoaXMub3B0aW9ucyk7XG5cbiAgICBpZiAobmV4dFNpYmxpbmcpIHtcbiAgICAgIHRoaXMuc29ydGFibGUuZWwuaW5zZXJ0QmVmb3JlKGRyYWdFbCwgbmV4dFNpYmxpbmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNvcnRhYmxlLmVsLmFwcGVuZENoaWxkKGRyYWdFbCk7XG4gICAgfVxuXG4gICAgdGhpcy5zb3J0YWJsZS5hbmltYXRlQWxsKCk7XG5cbiAgICBpZiAocHV0U29ydGFibGUpIHtcbiAgICAgIHB1dFNvcnRhYmxlLmFuaW1hdGVBbGwoKTtcbiAgICB9XG4gIH0sXG4gIGRyb3A6IGRyb3Bcbn07XG5cbl9leHRlbmRzKFJldmVydCwge1xuICBwbHVnaW5OYW1lOiAncmV2ZXJ0T25TcGlsbCdcbn0pO1xuXG5mdW5jdGlvbiBSZW1vdmUoKSB7fVxuXG5SZW1vdmUucHJvdG90eXBlID0ge1xuICBvblNwaWxsOiBmdW5jdGlvbiBvblNwaWxsKF9yZWY0KSB7XG4gICAgdmFyIGRyYWdFbCA9IF9yZWY0LmRyYWdFbCxcbiAgICAgICAgcHV0U29ydGFibGUgPSBfcmVmNC5wdXRTb3J0YWJsZTtcbiAgICB2YXIgcGFyZW50U29ydGFibGUgPSBwdXRTb3J0YWJsZSB8fCB0aGlzLnNvcnRhYmxlO1xuICAgIHBhcmVudFNvcnRhYmxlLmNhcHR1cmVBbmltYXRpb25TdGF0ZSgpO1xuICAgIGRyYWdFbC5wYXJlbnROb2RlICYmIGRyYWdFbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGRyYWdFbCk7XG4gICAgcGFyZW50U29ydGFibGUuYW5pbWF0ZUFsbCgpO1xuICB9LFxuICBkcm9wOiBkcm9wXG59O1xuXG5fZXh0ZW5kcyhSZW1vdmUsIHtcbiAgcGx1Z2luTmFtZTogJ3JlbW92ZU9uU3BpbGwnXG59KTtcblxudmFyIGxhc3RTd2FwRWw7XG5cbmZ1bmN0aW9uIFN3YXBQbHVnaW4oKSB7XG4gIGZ1bmN0aW9uIFN3YXAoKSB7XG4gICAgdGhpcy5kZWZhdWx0cyA9IHtcbiAgICAgIHN3YXBDbGFzczogJ3NvcnRhYmxlLXN3YXAtaGlnaGxpZ2h0J1xuICAgIH07XG4gIH1cblxuICBTd2FwLnByb3RvdHlwZSA9IHtcbiAgICBkcmFnU3RhcnQ6IGZ1bmN0aW9uIGRyYWdTdGFydChfcmVmKSB7XG4gICAgICB2YXIgZHJhZ0VsID0gX3JlZi5kcmFnRWw7XG4gICAgICBsYXN0U3dhcEVsID0gZHJhZ0VsO1xuICAgIH0sXG4gICAgZHJhZ092ZXJWYWxpZDogZnVuY3Rpb24gZHJhZ092ZXJWYWxpZChfcmVmMikge1xuICAgICAgdmFyIGNvbXBsZXRlZCA9IF9yZWYyLmNvbXBsZXRlZCxcbiAgICAgICAgICB0YXJnZXQgPSBfcmVmMi50YXJnZXQsXG4gICAgICAgICAgb25Nb3ZlID0gX3JlZjIub25Nb3ZlLFxuICAgICAgICAgIGFjdGl2ZVNvcnRhYmxlID0gX3JlZjIuYWN0aXZlU29ydGFibGUsXG4gICAgICAgICAgY2hhbmdlZCA9IF9yZWYyLmNoYW5nZWQsXG4gICAgICAgICAgY2FuY2VsID0gX3JlZjIuY2FuY2VsO1xuICAgICAgaWYgKCFhY3RpdmVTb3J0YWJsZS5vcHRpb25zLnN3YXApIHJldHVybjtcbiAgICAgIHZhciBlbCA9IHRoaXMuc29ydGFibGUuZWwsXG4gICAgICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuICAgICAgaWYgKHRhcmdldCAmJiB0YXJnZXQgIT09IGVsKSB7XG4gICAgICAgIHZhciBwcmV2U3dhcEVsID0gbGFzdFN3YXBFbDtcblxuICAgICAgICBpZiAob25Nb3ZlKHRhcmdldCkgIT09IGZhbHNlKSB7XG4gICAgICAgICAgdG9nZ2xlQ2xhc3ModGFyZ2V0LCBvcHRpb25zLnN3YXBDbGFzcywgdHJ1ZSk7XG4gICAgICAgICAgbGFzdFN3YXBFbCA9IHRhcmdldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsYXN0U3dhcEVsID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcmV2U3dhcEVsICYmIHByZXZTd2FwRWwgIT09IGxhc3RTd2FwRWwpIHtcbiAgICAgICAgICB0b2dnbGVDbGFzcyhwcmV2U3dhcEVsLCBvcHRpb25zLnN3YXBDbGFzcywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNoYW5nZWQoKTtcbiAgICAgIGNvbXBsZXRlZCh0cnVlKTtcbiAgICAgIGNhbmNlbCgpO1xuICAgIH0sXG4gICAgZHJvcDogZnVuY3Rpb24gZHJvcChfcmVmMykge1xuICAgICAgdmFyIGFjdGl2ZVNvcnRhYmxlID0gX3JlZjMuYWN0aXZlU29ydGFibGUsXG4gICAgICAgICAgcHV0U29ydGFibGUgPSBfcmVmMy5wdXRTb3J0YWJsZSxcbiAgICAgICAgICBkcmFnRWwgPSBfcmVmMy5kcmFnRWw7XG4gICAgICB2YXIgdG9Tb3J0YWJsZSA9IHB1dFNvcnRhYmxlIHx8IHRoaXMuc29ydGFibGU7XG4gICAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgIGxhc3RTd2FwRWwgJiYgdG9nZ2xlQ2xhc3MobGFzdFN3YXBFbCwgb3B0aW9ucy5zd2FwQ2xhc3MsIGZhbHNlKTtcblxuICAgICAgaWYgKGxhc3RTd2FwRWwgJiYgKG9wdGlvbnMuc3dhcCB8fCBwdXRTb3J0YWJsZSAmJiBwdXRTb3J0YWJsZS5vcHRpb25zLnN3YXApKSB7XG4gICAgICAgIGlmIChkcmFnRWwgIT09IGxhc3RTd2FwRWwpIHtcbiAgICAgICAgICB0b1NvcnRhYmxlLmNhcHR1cmVBbmltYXRpb25TdGF0ZSgpO1xuICAgICAgICAgIGlmICh0b1NvcnRhYmxlICE9PSBhY3RpdmVTb3J0YWJsZSkgYWN0aXZlU29ydGFibGUuY2FwdHVyZUFuaW1hdGlvblN0YXRlKCk7XG4gICAgICAgICAgc3dhcE5vZGVzKGRyYWdFbCwgbGFzdFN3YXBFbCk7XG4gICAgICAgICAgdG9Tb3J0YWJsZS5hbmltYXRlQWxsKCk7XG4gICAgICAgICAgaWYgKHRvU29ydGFibGUgIT09IGFjdGl2ZVNvcnRhYmxlKSBhY3RpdmVTb3J0YWJsZS5hbmltYXRlQWxsKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIG51bGxpbmc6IGZ1bmN0aW9uIG51bGxpbmcoKSB7XG4gICAgICBsYXN0U3dhcEVsID0gbnVsbDtcbiAgICB9XG4gIH07XG4gIHJldHVybiBfZXh0ZW5kcyhTd2FwLCB7XG4gICAgcGx1Z2luTmFtZTogJ3N3YXAnLFxuICAgIGV2ZW50UHJvcGVydGllczogZnVuY3Rpb24gZXZlbnRQcm9wZXJ0aWVzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3dhcEl0ZW06IGxhc3RTd2FwRWxcbiAgICAgIH07XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gc3dhcE5vZGVzKG4xLCBuMikge1xuICB2YXIgcDEgPSBuMS5wYXJlbnROb2RlLFxuICAgICAgcDIgPSBuMi5wYXJlbnROb2RlLFxuICAgICAgaTEsXG4gICAgICBpMjtcbiAgaWYgKCFwMSB8fCAhcDIgfHwgcDEuaXNFcXVhbE5vZGUobjIpIHx8IHAyLmlzRXF1YWxOb2RlKG4xKSkgcmV0dXJuO1xuICBpMSA9IGluZGV4KG4xKTtcbiAgaTIgPSBpbmRleChuMik7XG5cbiAgaWYgKHAxLmlzRXF1YWxOb2RlKHAyKSAmJiBpMSA8IGkyKSB7XG4gICAgaTIrKztcbiAgfVxuXG4gIHAxLmluc2VydEJlZm9yZShuMiwgcDEuY2hpbGRyZW5baTFdKTtcbiAgcDIuaW5zZXJ0QmVmb3JlKG4xLCBwMi5jaGlsZHJlbltpMl0pO1xufVxuXG52YXIgbXVsdGlEcmFnRWxlbWVudHMgPSBbXSxcbiAgICBtdWx0aURyYWdDbG9uZXMgPSBbXSxcbiAgICBsYXN0TXVsdGlEcmFnU2VsZWN0LFxuICAgIC8vIGZvciBzZWxlY3Rpb24gd2l0aCBtb2RpZmllciBrZXkgZG93biAoU0hJRlQpXG5tdWx0aURyYWdTb3J0YWJsZSxcbiAgICBpbml0aWFsRm9sZGluZyA9IGZhbHNlLFxuICAgIC8vIEluaXRpYWwgbXVsdGktZHJhZyBmb2xkIHdoZW4gZHJhZyBzdGFydGVkXG5mb2xkaW5nID0gZmFsc2UsXG4gICAgLy8gRm9sZGluZyBhbnkgb3RoZXIgdGltZVxuZHJhZ1N0YXJ0ZWQgPSBmYWxzZSxcbiAgICBkcmFnRWwkMSxcbiAgICBjbG9uZXNGcm9tUmVjdCxcbiAgICBjbG9uZXNIaWRkZW47XG5cbmZ1bmN0aW9uIE11bHRpRHJhZ1BsdWdpbigpIHtcbiAgZnVuY3Rpb24gTXVsdGlEcmFnKHNvcnRhYmxlKSB7XG4gICAgLy8gQmluZCBhbGwgcHJpdmF0ZSBtZXRob2RzXG4gICAgZm9yICh2YXIgZm4gaW4gdGhpcykge1xuICAgICAgaWYgKGZuLmNoYXJBdCgwKSA9PT0gJ18nICYmIHR5cGVvZiB0aGlzW2ZuXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzW2ZuXSA9IHRoaXNbZm5dLmJpbmQodGhpcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNvcnRhYmxlLm9wdGlvbnMuc3VwcG9ydFBvaW50ZXIpIHtcbiAgICAgIG9uKGRvY3VtZW50LCAncG9pbnRlcnVwJywgdGhpcy5fZGVzZWxlY3RNdWx0aURyYWcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbihkb2N1bWVudCwgJ21vdXNldXAnLCB0aGlzLl9kZXNlbGVjdE11bHRpRHJhZyk7XG4gICAgICBvbihkb2N1bWVudCwgJ3RvdWNoZW5kJywgdGhpcy5fZGVzZWxlY3RNdWx0aURyYWcpO1xuICAgIH1cblxuICAgIG9uKGRvY3VtZW50LCAna2V5ZG93bicsIHRoaXMuX2NoZWNrS2V5RG93bik7XG4gICAgb24oZG9jdW1lbnQsICdrZXl1cCcsIHRoaXMuX2NoZWNrS2V5VXApO1xuICAgIHRoaXMuZGVmYXVsdHMgPSB7XG4gICAgICBzZWxlY3RlZENsYXNzOiAnc29ydGFibGUtc2VsZWN0ZWQnLFxuICAgICAgbXVsdGlEcmFnS2V5OiBudWxsLFxuICAgICAgc2V0RGF0YTogZnVuY3Rpb24gc2V0RGF0YShkYXRhVHJhbnNmZXIsIGRyYWdFbCkge1xuICAgICAgICB2YXIgZGF0YSA9ICcnO1xuXG4gICAgICAgIGlmIChtdWx0aURyYWdFbGVtZW50cy5sZW5ndGggJiYgbXVsdGlEcmFnU29ydGFibGUgPT09IHNvcnRhYmxlKSB7XG4gICAgICAgICAgbXVsdGlEcmFnRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAobXVsdGlEcmFnRWxlbWVudCwgaSkge1xuICAgICAgICAgICAgZGF0YSArPSAoIWkgPyAnJyA6ICcsICcpICsgbXVsdGlEcmFnRWxlbWVudC50ZXh0Q29udGVudDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkYXRhID0gZHJhZ0VsLnRleHRDb250ZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YVRyYW5zZmVyLnNldERhdGEoJ1RleHQnLCBkYXRhKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgTXVsdGlEcmFnLnByb3RvdHlwZSA9IHtcbiAgICBtdWx0aURyYWdLZXlEb3duOiBmYWxzZSxcbiAgICBpc011bHRpRHJhZzogZmFsc2UsXG4gICAgZGVsYXlTdGFydEdsb2JhbDogZnVuY3Rpb24gZGVsYXlTdGFydEdsb2JhbChfcmVmKSB7XG4gICAgICB2YXIgZHJhZ2dlZCA9IF9yZWYuZHJhZ0VsO1xuICAgICAgZHJhZ0VsJDEgPSBkcmFnZ2VkO1xuICAgIH0sXG4gICAgZGVsYXlFbmRlZDogZnVuY3Rpb24gZGVsYXlFbmRlZCgpIHtcbiAgICAgIHRoaXMuaXNNdWx0aURyYWcgPSB+bXVsdGlEcmFnRWxlbWVudHMuaW5kZXhPZihkcmFnRWwkMSk7XG4gICAgfSxcbiAgICBzZXR1cENsb25lOiBmdW5jdGlvbiBzZXR1cENsb25lKF9yZWYyKSB7XG4gICAgICB2YXIgc29ydGFibGUgPSBfcmVmMi5zb3J0YWJsZSxcbiAgICAgICAgICBjYW5jZWwgPSBfcmVmMi5jYW5jZWw7XG4gICAgICBpZiAoIXRoaXMuaXNNdWx0aURyYWcpIHJldHVybjtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtdWx0aURyYWdFbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBtdWx0aURyYWdDbG9uZXMucHVzaChjbG9uZShtdWx0aURyYWdFbGVtZW50c1tpXSkpO1xuICAgICAgICBtdWx0aURyYWdDbG9uZXNbaV0uc29ydGFibGVJbmRleCA9IG11bHRpRHJhZ0VsZW1lbnRzW2ldLnNvcnRhYmxlSW5kZXg7XG4gICAgICAgIG11bHRpRHJhZ0Nsb25lc1tpXS5kcmFnZ2FibGUgPSBmYWxzZTtcbiAgICAgICAgbXVsdGlEcmFnQ2xvbmVzW2ldLnN0eWxlWyd3aWxsLWNoYW5nZSddID0gJyc7XG4gICAgICAgIHRvZ2dsZUNsYXNzKG11bHRpRHJhZ0Nsb25lc1tpXSwgdGhpcy5vcHRpb25zLnNlbGVjdGVkQ2xhc3MsIGZhbHNlKTtcbiAgICAgICAgbXVsdGlEcmFnRWxlbWVudHNbaV0gPT09IGRyYWdFbCQxICYmIHRvZ2dsZUNsYXNzKG11bHRpRHJhZ0Nsb25lc1tpXSwgdGhpcy5vcHRpb25zLmNob3NlbkNsYXNzLCBmYWxzZSk7XG4gICAgICB9XG5cbiAgICAgIHNvcnRhYmxlLl9oaWRlQ2xvbmUoKTtcblxuICAgICAgY2FuY2VsKCk7XG4gICAgfSxcbiAgICBjbG9uZTogZnVuY3Rpb24gY2xvbmUoX3JlZjMpIHtcbiAgICAgIHZhciBzb3J0YWJsZSA9IF9yZWYzLnNvcnRhYmxlLFxuICAgICAgICAgIHJvb3RFbCA9IF9yZWYzLnJvb3RFbCxcbiAgICAgICAgICBkaXNwYXRjaFNvcnRhYmxlRXZlbnQgPSBfcmVmMy5kaXNwYXRjaFNvcnRhYmxlRXZlbnQsXG4gICAgICAgICAgY2FuY2VsID0gX3JlZjMuY2FuY2VsO1xuICAgICAgaWYgKCF0aGlzLmlzTXVsdGlEcmFnKSByZXR1cm47XG5cbiAgICAgIGlmICghdGhpcy5vcHRpb25zLnJlbW92ZUNsb25lT25IaWRlKSB7XG4gICAgICAgIGlmIChtdWx0aURyYWdFbGVtZW50cy5sZW5ndGggJiYgbXVsdGlEcmFnU29ydGFibGUgPT09IHNvcnRhYmxlKSB7XG4gICAgICAgICAgaW5zZXJ0TXVsdGlEcmFnQ2xvbmVzKHRydWUsIHJvb3RFbCk7XG4gICAgICAgICAgZGlzcGF0Y2hTb3J0YWJsZUV2ZW50KCdjbG9uZScpO1xuICAgICAgICAgIGNhbmNlbCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBzaG93Q2xvbmU6IGZ1bmN0aW9uIHNob3dDbG9uZShfcmVmNCkge1xuICAgICAgdmFyIGNsb25lTm93U2hvd24gPSBfcmVmNC5jbG9uZU5vd1Nob3duLFxuICAgICAgICAgIHJvb3RFbCA9IF9yZWY0LnJvb3RFbCxcbiAgICAgICAgICBjYW5jZWwgPSBfcmVmNC5jYW5jZWw7XG4gICAgICBpZiAoIXRoaXMuaXNNdWx0aURyYWcpIHJldHVybjtcbiAgICAgIGluc2VydE11bHRpRHJhZ0Nsb25lcyhmYWxzZSwgcm9vdEVsKTtcbiAgICAgIG11bHRpRHJhZ0Nsb25lcy5mb3JFYWNoKGZ1bmN0aW9uIChjbG9uZSkge1xuICAgICAgICBjc3MoY2xvbmUsICdkaXNwbGF5JywgJycpO1xuICAgICAgfSk7XG4gICAgICBjbG9uZU5vd1Nob3duKCk7XG4gICAgICBjbG9uZXNIaWRkZW4gPSBmYWxzZTtcbiAgICAgIGNhbmNlbCgpO1xuICAgIH0sXG4gICAgaGlkZUNsb25lOiBmdW5jdGlvbiBoaWRlQ2xvbmUoX3JlZjUpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHZhciBzb3J0YWJsZSA9IF9yZWY1LnNvcnRhYmxlLFxuICAgICAgICAgIGNsb25lTm93SGlkZGVuID0gX3JlZjUuY2xvbmVOb3dIaWRkZW4sXG4gICAgICAgICAgY2FuY2VsID0gX3JlZjUuY2FuY2VsO1xuICAgICAgaWYgKCF0aGlzLmlzTXVsdGlEcmFnKSByZXR1cm47XG4gICAgICBtdWx0aURyYWdDbG9uZXMuZm9yRWFjaChmdW5jdGlvbiAoY2xvbmUpIHtcbiAgICAgICAgY3NzKGNsb25lLCAnZGlzcGxheScsICdub25lJyk7XG5cbiAgICAgICAgaWYgKF90aGlzLm9wdGlvbnMucmVtb3ZlQ2xvbmVPbkhpZGUgJiYgY2xvbmUucGFyZW50Tm9kZSkge1xuICAgICAgICAgIGNsb25lLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY2xvbmUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNsb25lTm93SGlkZGVuKCk7XG4gICAgICBjbG9uZXNIaWRkZW4gPSB0cnVlO1xuICAgICAgY2FuY2VsKCk7XG4gICAgfSxcbiAgICBkcmFnU3RhcnRHbG9iYWw6IGZ1bmN0aW9uIGRyYWdTdGFydEdsb2JhbChfcmVmNikge1xuICAgICAgdmFyIHNvcnRhYmxlID0gX3JlZjYuc29ydGFibGU7XG5cbiAgICAgIGlmICghdGhpcy5pc011bHRpRHJhZyAmJiBtdWx0aURyYWdTb3J0YWJsZSkge1xuICAgICAgICBtdWx0aURyYWdTb3J0YWJsZS5tdWx0aURyYWcuX2Rlc2VsZWN0TXVsdGlEcmFnKCk7XG4gICAgICB9XG5cbiAgICAgIG11bHRpRHJhZ0VsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKG11bHRpRHJhZ0VsZW1lbnQpIHtcbiAgICAgICAgbXVsdGlEcmFnRWxlbWVudC5zb3J0YWJsZUluZGV4ID0gaW5kZXgobXVsdGlEcmFnRWxlbWVudCk7XG4gICAgICB9KTsgLy8gU29ydCBtdWx0aS1kcmFnIGVsZW1lbnRzXG5cbiAgICAgIG11bHRpRHJhZ0VsZW1lbnRzID0gbXVsdGlEcmFnRWxlbWVudHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICByZXR1cm4gYS5zb3J0YWJsZUluZGV4IC0gYi5zb3J0YWJsZUluZGV4O1xuICAgICAgfSk7XG4gICAgICBkcmFnU3RhcnRlZCA9IHRydWU7XG4gICAgfSxcbiAgICBkcmFnU3RhcnRlZDogZnVuY3Rpb24gZHJhZ1N0YXJ0ZWQoX3JlZjcpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgc29ydGFibGUgPSBfcmVmNy5zb3J0YWJsZTtcbiAgICAgIGlmICghdGhpcy5pc011bHRpRHJhZykgcmV0dXJuO1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnNvcnQpIHtcbiAgICAgICAgLy8gQ2FwdHVyZSByZWN0cyxcbiAgICAgICAgLy8gaGlkZSBtdWx0aSBkcmFnIGVsZW1lbnRzIChieSBwb3NpdGlvbmluZyB0aGVtIGFic29sdXRlKSxcbiAgICAgICAgLy8gc2V0IG11bHRpIGRyYWcgZWxlbWVudHMgcmVjdHMgdG8gZHJhZ1JlY3QsXG4gICAgICAgIC8vIHNob3cgbXVsdGkgZHJhZyBlbGVtZW50cyxcbiAgICAgICAgLy8gYW5pbWF0ZSB0byByZWN0cyxcbiAgICAgICAgLy8gdW5zZXQgcmVjdHMgJiByZW1vdmUgZnJvbSBET01cbiAgICAgICAgc29ydGFibGUuY2FwdHVyZUFuaW1hdGlvblN0YXRlKCk7XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hbmltYXRpb24pIHtcbiAgICAgICAgICBtdWx0aURyYWdFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChtdWx0aURyYWdFbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAobXVsdGlEcmFnRWxlbWVudCA9PT0gZHJhZ0VsJDEpIHJldHVybjtcbiAgICAgICAgICAgIGNzcyhtdWx0aURyYWdFbGVtZW50LCAncG9zaXRpb24nLCAnYWJzb2x1dGUnKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB2YXIgZHJhZ1JlY3QgPSBnZXRSZWN0KGRyYWdFbCQxLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgbXVsdGlEcmFnRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAobXVsdGlEcmFnRWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKG11bHRpRHJhZ0VsZW1lbnQgPT09IGRyYWdFbCQxKSByZXR1cm47XG4gICAgICAgICAgICBzZXRSZWN0KG11bHRpRHJhZ0VsZW1lbnQsIGRyYWdSZWN0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBmb2xkaW5nID0gdHJ1ZTtcbiAgICAgICAgICBpbml0aWFsRm9sZGluZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc29ydGFibGUuYW5pbWF0ZUFsbChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvbGRpbmcgPSBmYWxzZTtcbiAgICAgICAgaW5pdGlhbEZvbGRpbmcgPSBmYWxzZTtcblxuICAgICAgICBpZiAoX3RoaXMyLm9wdGlvbnMuYW5pbWF0aW9uKSB7XG4gICAgICAgICAgbXVsdGlEcmFnRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAobXVsdGlEcmFnRWxlbWVudCkge1xuICAgICAgICAgICAgdW5zZXRSZWN0KG11bHRpRHJhZ0VsZW1lbnQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IC8vIFJlbW92ZSBhbGwgYXV4aWxpYXJ5IG11bHRpZHJhZyBpdGVtcyBmcm9tIGVsLCBpZiBzb3J0aW5nIGVuYWJsZWRcblxuXG4gICAgICAgIGlmIChfdGhpczIub3B0aW9ucy5zb3J0KSB7XG4gICAgICAgICAgcmVtb3ZlTXVsdGlEcmFnRWxlbWVudHMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBkcmFnT3ZlcjogZnVuY3Rpb24gZHJhZ092ZXIoX3JlZjgpIHtcbiAgICAgIHZhciB0YXJnZXQgPSBfcmVmOC50YXJnZXQsXG4gICAgICAgICAgY29tcGxldGVkID0gX3JlZjguY29tcGxldGVkLFxuICAgICAgICAgIGNhbmNlbCA9IF9yZWY4LmNhbmNlbDtcblxuICAgICAgaWYgKGZvbGRpbmcgJiYgfm11bHRpRHJhZ0VsZW1lbnRzLmluZGV4T2YodGFyZ2V0KSkge1xuICAgICAgICBjb21wbGV0ZWQoZmFsc2UpO1xuICAgICAgICBjYW5jZWwoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHJldmVydDogZnVuY3Rpb24gcmV2ZXJ0KF9yZWY5KSB7XG4gICAgICB2YXIgZnJvbVNvcnRhYmxlID0gX3JlZjkuZnJvbVNvcnRhYmxlLFxuICAgICAgICAgIHJvb3RFbCA9IF9yZWY5LnJvb3RFbCxcbiAgICAgICAgICBzb3J0YWJsZSA9IF9yZWY5LnNvcnRhYmxlLFxuICAgICAgICAgIGRyYWdSZWN0ID0gX3JlZjkuZHJhZ1JlY3Q7XG5cbiAgICAgIGlmIChtdWx0aURyYWdFbGVtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIC8vIFNldHVwIHVuZm9sZCBhbmltYXRpb25cbiAgICAgICAgbXVsdGlEcmFnRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAobXVsdGlEcmFnRWxlbWVudCkge1xuICAgICAgICAgIHNvcnRhYmxlLmFkZEFuaW1hdGlvblN0YXRlKHtcbiAgICAgICAgICAgIHRhcmdldDogbXVsdGlEcmFnRWxlbWVudCxcbiAgICAgICAgICAgIHJlY3Q6IGZvbGRpbmcgPyBnZXRSZWN0KG11bHRpRHJhZ0VsZW1lbnQpIDogZHJhZ1JlY3RcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB1bnNldFJlY3QobXVsdGlEcmFnRWxlbWVudCk7XG4gICAgICAgICAgbXVsdGlEcmFnRWxlbWVudC5mcm9tUmVjdCA9IGRyYWdSZWN0O1xuICAgICAgICAgIGZyb21Tb3J0YWJsZS5yZW1vdmVBbmltYXRpb25TdGF0ZShtdWx0aURyYWdFbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZvbGRpbmcgPSBmYWxzZTtcbiAgICAgICAgaW5zZXJ0TXVsdGlEcmFnRWxlbWVudHMoIXRoaXMub3B0aW9ucy5yZW1vdmVDbG9uZU9uSGlkZSwgcm9vdEVsKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRyYWdPdmVyQ29tcGxldGVkOiBmdW5jdGlvbiBkcmFnT3ZlckNvbXBsZXRlZChfcmVmMTApIHtcbiAgICAgIHZhciBzb3J0YWJsZSA9IF9yZWYxMC5zb3J0YWJsZSxcbiAgICAgICAgICBpc093bmVyID0gX3JlZjEwLmlzT3duZXIsXG4gICAgICAgICAgaW5zZXJ0aW9uID0gX3JlZjEwLmluc2VydGlvbixcbiAgICAgICAgICBhY3RpdmVTb3J0YWJsZSA9IF9yZWYxMC5hY3RpdmVTb3J0YWJsZSxcbiAgICAgICAgICBwYXJlbnRFbCA9IF9yZWYxMC5wYXJlbnRFbCxcbiAgICAgICAgICBwdXRTb3J0YWJsZSA9IF9yZWYxMC5wdXRTb3J0YWJsZTtcbiAgICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG4gICAgICBpZiAoaW5zZXJ0aW9uKSB7XG4gICAgICAgIC8vIENsb25lcyBtdXN0IGJlIGhpZGRlbiBiZWZvcmUgZm9sZGluZyBhbmltYXRpb24gdG8gY2FwdHVyZSBkcmFnUmVjdEFic29sdXRlIHByb3Blcmx5XG4gICAgICAgIGlmIChpc093bmVyKSB7XG4gICAgICAgICAgYWN0aXZlU29ydGFibGUuX2hpZGVDbG9uZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5pdGlhbEZvbGRpbmcgPSBmYWxzZTsgLy8gSWYgbGVhdmluZyBzb3J0OmZhbHNlIHJvb3QsIG9yIGFscmVhZHkgZm9sZGluZyAtIEZvbGQgdG8gbmV3IGxvY2F0aW9uXG5cbiAgICAgICAgaWYgKG9wdGlvbnMuYW5pbWF0aW9uICYmIG11bHRpRHJhZ0VsZW1lbnRzLmxlbmd0aCA+IDEgJiYgKGZvbGRpbmcgfHwgIWlzT3duZXIgJiYgIWFjdGl2ZVNvcnRhYmxlLm9wdGlvbnMuc29ydCAmJiAhcHV0U29ydGFibGUpKSB7XG4gICAgICAgICAgLy8gRm9sZDogU2V0IGFsbCBtdWx0aSBkcmFnIGVsZW1lbnRzJ3MgcmVjdHMgdG8gZHJhZ0VsJ3MgcmVjdCB3aGVuIG11bHRpLWRyYWcgZWxlbWVudHMgYXJlIGludmlzaWJsZVxuICAgICAgICAgIHZhciBkcmFnUmVjdEFic29sdXRlID0gZ2V0UmVjdChkcmFnRWwkMSwgZmFsc2UsIHRydWUsIHRydWUpO1xuICAgICAgICAgIG11bHRpRHJhZ0VsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKG11bHRpRHJhZ0VsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmIChtdWx0aURyYWdFbGVtZW50ID09PSBkcmFnRWwkMSkgcmV0dXJuO1xuICAgICAgICAgICAgc2V0UmVjdChtdWx0aURyYWdFbGVtZW50LCBkcmFnUmVjdEFic29sdXRlKTsgLy8gTW92ZSBlbGVtZW50KHMpIHRvIGVuZCBvZiBwYXJlbnRFbCBzbyB0aGF0IGl0IGRvZXMgbm90IGludGVyZmVyZSB3aXRoIG11bHRpLWRyYWcgY2xvbmVzIGluc2VydGlvbiBpZiB0aGV5IGFyZSBpbnNlcnRlZFxuICAgICAgICAgICAgLy8gd2hpbGUgZm9sZGluZywgYW5kIHNvIHRoYXQgd2UgY2FuIGNhcHR1cmUgdGhlbSBhZ2FpbiBiZWNhdXNlIG9sZCBzb3J0YWJsZSB3aWxsIG5vIGxvbmdlciBiZSBmcm9tU29ydGFibGVcblxuICAgICAgICAgICAgcGFyZW50RWwuYXBwZW5kQ2hpbGQobXVsdGlEcmFnRWxlbWVudCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZm9sZGluZyA9IHRydWU7XG4gICAgICAgIH0gLy8gQ2xvbmVzIG11c3QgYmUgc2hvd24gKGFuZCBjaGVjayB0byByZW1vdmUgbXVsdGkgZHJhZ3MpIGFmdGVyIGZvbGRpbmcgd2hlbiBpbnRlcmZlcmluZyBtdWx0aURyYWdFbGVtZW50cyBhcmUgbW92ZWQgb3V0XG5cblxuICAgICAgICBpZiAoIWlzT3duZXIpIHtcbiAgICAgICAgICAvLyBPbmx5IHJlbW92ZSBpZiBub3QgZm9sZGluZyAoZm9sZGluZyB3aWxsIHJlbW92ZSB0aGVtIGFueXdheXMpXG4gICAgICAgICAgaWYgKCFmb2xkaW5nKSB7XG4gICAgICAgICAgICByZW1vdmVNdWx0aURyYWdFbGVtZW50cygpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChtdWx0aURyYWdFbGVtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB2YXIgY2xvbmVzSGlkZGVuQmVmb3JlID0gY2xvbmVzSGlkZGVuO1xuXG4gICAgICAgICAgICBhY3RpdmVTb3J0YWJsZS5fc2hvd0Nsb25lKHNvcnRhYmxlKTsgLy8gVW5mb2xkIGFuaW1hdGlvbiBmb3IgY2xvbmVzIGlmIHNob3dpbmcgZnJvbSBoaWRkZW5cblxuXG4gICAgICAgICAgICBpZiAoYWN0aXZlU29ydGFibGUub3B0aW9ucy5hbmltYXRpb24gJiYgIWNsb25lc0hpZGRlbiAmJiBjbG9uZXNIaWRkZW5CZWZvcmUpIHtcbiAgICAgICAgICAgICAgbXVsdGlEcmFnQ2xvbmVzLmZvckVhY2goZnVuY3Rpb24gKGNsb25lKSB7XG4gICAgICAgICAgICAgICAgYWN0aXZlU29ydGFibGUuYWRkQW5pbWF0aW9uU3RhdGUoe1xuICAgICAgICAgICAgICAgICAgdGFyZ2V0OiBjbG9uZSxcbiAgICAgICAgICAgICAgICAgIHJlY3Q6IGNsb25lc0Zyb21SZWN0XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY2xvbmUuZnJvbVJlY3QgPSBjbG9uZXNGcm9tUmVjdDtcbiAgICAgICAgICAgICAgICBjbG9uZS50aGlzQW5pbWF0aW9uRHVyYXRpb24gPSBudWxsO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWN0aXZlU29ydGFibGUuX3Nob3dDbG9uZShzb3J0YWJsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBkcmFnT3ZlckFuaW1hdGlvbkNhcHR1cmU6IGZ1bmN0aW9uIGRyYWdPdmVyQW5pbWF0aW9uQ2FwdHVyZShfcmVmMTEpIHtcbiAgICAgIHZhciBkcmFnUmVjdCA9IF9yZWYxMS5kcmFnUmVjdCxcbiAgICAgICAgICBpc093bmVyID0gX3JlZjExLmlzT3duZXIsXG4gICAgICAgICAgYWN0aXZlU29ydGFibGUgPSBfcmVmMTEuYWN0aXZlU29ydGFibGU7XG4gICAgICBtdWx0aURyYWdFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChtdWx0aURyYWdFbGVtZW50KSB7XG4gICAgICAgIG11bHRpRHJhZ0VsZW1lbnQudGhpc0FuaW1hdGlvbkR1cmF0aW9uID0gbnVsbDtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoYWN0aXZlU29ydGFibGUub3B0aW9ucy5hbmltYXRpb24gJiYgIWlzT3duZXIgJiYgYWN0aXZlU29ydGFibGUubXVsdGlEcmFnLmlzTXVsdGlEcmFnKSB7XG4gICAgICAgIGNsb25lc0Zyb21SZWN0ID0gX2V4dGVuZHMoe30sIGRyYWdSZWN0KTtcbiAgICAgICAgdmFyIGRyYWdNYXRyaXggPSBtYXRyaXgoZHJhZ0VsJDEsIHRydWUpO1xuICAgICAgICBjbG9uZXNGcm9tUmVjdC50b3AgLT0gZHJhZ01hdHJpeC5mO1xuICAgICAgICBjbG9uZXNGcm9tUmVjdC5sZWZ0IC09IGRyYWdNYXRyaXguZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRyYWdPdmVyQW5pbWF0aW9uQ29tcGxldGU6IGZ1bmN0aW9uIGRyYWdPdmVyQW5pbWF0aW9uQ29tcGxldGUoKSB7XG4gICAgICBpZiAoZm9sZGluZykge1xuICAgICAgICBmb2xkaW5nID0gZmFsc2U7XG4gICAgICAgIHJlbW92ZU11bHRpRHJhZ0VsZW1lbnRzKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkcm9wOiBmdW5jdGlvbiBkcm9wKF9yZWYxMikge1xuICAgICAgdmFyIGV2dCA9IF9yZWYxMi5vcmlnaW5hbEV2ZW50LFxuICAgICAgICAgIHJvb3RFbCA9IF9yZWYxMi5yb290RWwsXG4gICAgICAgICAgcGFyZW50RWwgPSBfcmVmMTIucGFyZW50RWwsXG4gICAgICAgICAgc29ydGFibGUgPSBfcmVmMTIuc29ydGFibGUsXG4gICAgICAgICAgZGlzcGF0Y2hTb3J0YWJsZUV2ZW50ID0gX3JlZjEyLmRpc3BhdGNoU29ydGFibGVFdmVudCxcbiAgICAgICAgICBvbGRJbmRleCA9IF9yZWYxMi5vbGRJbmRleCxcbiAgICAgICAgICBwdXRTb3J0YWJsZSA9IF9yZWYxMi5wdXRTb3J0YWJsZTtcbiAgICAgIHZhciB0b1NvcnRhYmxlID0gcHV0U29ydGFibGUgfHwgdGhpcy5zb3J0YWJsZTtcbiAgICAgIGlmICghZXZ0KSByZXR1cm47XG4gICAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyxcbiAgICAgICAgICBjaGlsZHJlbiA9IHBhcmVudEVsLmNoaWxkcmVuOyAvLyBNdWx0aS1kcmFnIHNlbGVjdGlvblxuXG4gICAgICBpZiAoIWRyYWdTdGFydGVkKSB7XG4gICAgICAgIGlmIChvcHRpb25zLm11bHRpRHJhZ0tleSAmJiAhdGhpcy5tdWx0aURyYWdLZXlEb3duKSB7XG4gICAgICAgICAgdGhpcy5fZGVzZWxlY3RNdWx0aURyYWcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRvZ2dsZUNsYXNzKGRyYWdFbCQxLCBvcHRpb25zLnNlbGVjdGVkQ2xhc3MsICF+bXVsdGlEcmFnRWxlbWVudHMuaW5kZXhPZihkcmFnRWwkMSkpO1xuXG4gICAgICAgIGlmICghfm11bHRpRHJhZ0VsZW1lbnRzLmluZGV4T2YoZHJhZ0VsJDEpKSB7XG4gICAgICAgICAgbXVsdGlEcmFnRWxlbWVudHMucHVzaChkcmFnRWwkMSk7XG4gICAgICAgICAgZGlzcGF0Y2hFdmVudCh7XG4gICAgICAgICAgICBzb3J0YWJsZTogc29ydGFibGUsXG4gICAgICAgICAgICByb290RWw6IHJvb3RFbCxcbiAgICAgICAgICAgIG5hbWU6ICdzZWxlY3QnLFxuICAgICAgICAgICAgdGFyZ2V0RWw6IGRyYWdFbCQxLFxuICAgICAgICAgICAgb3JpZ2luYWxFdnQ6IGV2dFxuICAgICAgICAgIH0pOyAvLyBNb2RpZmllciBhY3RpdmF0ZWQsIHNlbGVjdCBmcm9tIGxhc3QgdG8gZHJhZ0VsXG5cbiAgICAgICAgICBpZiAoZXZ0LnNoaWZ0S2V5ICYmIGxhc3RNdWx0aURyYWdTZWxlY3QgJiYgc29ydGFibGUuZWwuY29udGFpbnMobGFzdE11bHRpRHJhZ1NlbGVjdCkpIHtcbiAgICAgICAgICAgIHZhciBsYXN0SW5kZXggPSBpbmRleChsYXN0TXVsdGlEcmFnU2VsZWN0KSxcbiAgICAgICAgICAgICAgICBjdXJyZW50SW5kZXggPSBpbmRleChkcmFnRWwkMSk7XG5cbiAgICAgICAgICAgIGlmICh+bGFzdEluZGV4ICYmIH5jdXJyZW50SW5kZXggJiYgbGFzdEluZGV4ICE9PSBjdXJyZW50SW5kZXgpIHtcbiAgICAgICAgICAgICAgLy8gTXVzdCBpbmNsdWRlIGxhc3RNdWx0aURyYWdTZWxlY3QgKHNlbGVjdCBpdCksIGluIGNhc2UgbW9kaWZpZWQgc2VsZWN0aW9uIGZyb20gbm8gc2VsZWN0aW9uXG4gICAgICAgICAgICAgIC8vIChidXQgcHJldmlvdXMgc2VsZWN0aW9uIGV4aXN0ZWQpXG4gICAgICAgICAgICAgIHZhciBuLCBpO1xuXG4gICAgICAgICAgICAgIGlmIChjdXJyZW50SW5kZXggPiBsYXN0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICBpID0gbGFzdEluZGV4O1xuICAgICAgICAgICAgICAgIG4gPSBjdXJyZW50SW5kZXg7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaSA9IGN1cnJlbnRJbmRleDtcbiAgICAgICAgICAgICAgICBuID0gbGFzdEluZGV4ICsgMTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGZvciAoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKH5tdWx0aURyYWdFbGVtZW50cy5pbmRleE9mKGNoaWxkcmVuW2ldKSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgdG9nZ2xlQ2xhc3MoY2hpbGRyZW5baV0sIG9wdGlvbnMuc2VsZWN0ZWRDbGFzcywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgbXVsdGlEcmFnRWxlbWVudHMucHVzaChjaGlsZHJlbltpXSk7XG4gICAgICAgICAgICAgICAgZGlzcGF0Y2hFdmVudCh7XG4gICAgICAgICAgICAgICAgICBzb3J0YWJsZTogc29ydGFibGUsXG4gICAgICAgICAgICAgICAgICByb290RWw6IHJvb3RFbCxcbiAgICAgICAgICAgICAgICAgIG5hbWU6ICdzZWxlY3QnLFxuICAgICAgICAgICAgICAgICAgdGFyZ2V0RWw6IGNoaWxkcmVuW2ldLFxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxFdnQ6IGV2dFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxhc3RNdWx0aURyYWdTZWxlY3QgPSBkcmFnRWwkMTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtdWx0aURyYWdTb3J0YWJsZSA9IHRvU29ydGFibGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbXVsdGlEcmFnRWxlbWVudHMuc3BsaWNlKG11bHRpRHJhZ0VsZW1lbnRzLmluZGV4T2YoZHJhZ0VsJDEpLCAxKTtcbiAgICAgICAgICBsYXN0TXVsdGlEcmFnU2VsZWN0ID0gbnVsbDtcbiAgICAgICAgICBkaXNwYXRjaEV2ZW50KHtcbiAgICAgICAgICAgIHNvcnRhYmxlOiBzb3J0YWJsZSxcbiAgICAgICAgICAgIHJvb3RFbDogcm9vdEVsLFxuICAgICAgICAgICAgbmFtZTogJ2Rlc2VsZWN0JyxcbiAgICAgICAgICAgIHRhcmdldEVsOiBkcmFnRWwkMSxcbiAgICAgICAgICAgIG9yaWdpbmFsRXZ0OiBldnRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBNdWx0aS1kcmFnIGRyb3BcblxuXG4gICAgICBpZiAoZHJhZ1N0YXJ0ZWQgJiYgdGhpcy5pc011bHRpRHJhZykge1xuICAgICAgICAvLyBEbyBub3QgXCJ1bmZvbGRcIiBhZnRlciBhcm91bmQgZHJhZ0VsIGlmIHJldmVydGVkXG4gICAgICAgIGlmICgocGFyZW50RWxbZXhwYW5kb10ub3B0aW9ucy5zb3J0IHx8IHBhcmVudEVsICE9PSByb290RWwpICYmIG11bHRpRHJhZ0VsZW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICB2YXIgZHJhZ1JlY3QgPSBnZXRSZWN0KGRyYWdFbCQxKSxcbiAgICAgICAgICAgICAgbXVsdGlEcmFnSW5kZXggPSBpbmRleChkcmFnRWwkMSwgJzpub3QoLicgKyB0aGlzLm9wdGlvbnMuc2VsZWN0ZWRDbGFzcyArICcpJyk7XG4gICAgICAgICAgaWYgKCFpbml0aWFsRm9sZGluZyAmJiBvcHRpb25zLmFuaW1hdGlvbikgZHJhZ0VsJDEudGhpc0FuaW1hdGlvbkR1cmF0aW9uID0gbnVsbDtcbiAgICAgICAgICB0b1NvcnRhYmxlLmNhcHR1cmVBbmltYXRpb25TdGF0ZSgpO1xuXG4gICAgICAgICAgaWYgKCFpbml0aWFsRm9sZGluZykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYW5pbWF0aW9uKSB7XG4gICAgICAgICAgICAgIGRyYWdFbCQxLmZyb21SZWN0ID0gZHJhZ1JlY3Q7XG4gICAgICAgICAgICAgIG11bHRpRHJhZ0VsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKG11bHRpRHJhZ0VsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBtdWx0aURyYWdFbGVtZW50LnRoaXNBbmltYXRpb25EdXJhdGlvbiA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICBpZiAobXVsdGlEcmFnRWxlbWVudCAhPT0gZHJhZ0VsJDEpIHtcbiAgICAgICAgICAgICAgICAgIHZhciByZWN0ID0gZm9sZGluZyA/IGdldFJlY3QobXVsdGlEcmFnRWxlbWVudCkgOiBkcmFnUmVjdDtcbiAgICAgICAgICAgICAgICAgIG11bHRpRHJhZ0VsZW1lbnQuZnJvbVJlY3QgPSByZWN0OyAvLyBQcmVwYXJlIHVuZm9sZCBhbmltYXRpb25cblxuICAgICAgICAgICAgICAgICAgdG9Tb3J0YWJsZS5hZGRBbmltYXRpb25TdGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogbXVsdGlEcmFnRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgcmVjdDogcmVjdFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gLy8gTXVsdGkgZHJhZyBlbGVtZW50cyBhcmUgbm90IG5lY2Vzc2FyaWx5IHJlbW92ZWQgZnJvbSB0aGUgRE9NIG9uIGRyb3AsIHNvIHRvIHJlaW5zZXJ0XG4gICAgICAgICAgICAvLyBwcm9wZXJseSB0aGV5IG11c3QgYWxsIGJlIHJlbW92ZWRcblxuXG4gICAgICAgICAgICByZW1vdmVNdWx0aURyYWdFbGVtZW50cygpO1xuICAgICAgICAgICAgbXVsdGlEcmFnRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAobXVsdGlEcmFnRWxlbWVudCkge1xuICAgICAgICAgICAgICBpZiAoY2hpbGRyZW5bbXVsdGlEcmFnSW5kZXhdKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50RWwuaW5zZXJ0QmVmb3JlKG11bHRpRHJhZ0VsZW1lbnQsIGNoaWxkcmVuW211bHRpRHJhZ0luZGV4XSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFyZW50RWwuYXBwZW5kQ2hpbGQobXVsdGlEcmFnRWxlbWVudCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBtdWx0aURyYWdJbmRleCsrO1xuICAgICAgICAgICAgfSk7IC8vIElmIGluaXRpYWwgZm9sZGluZyBpcyBkb25lLCB0aGUgZWxlbWVudHMgbWF5IGhhdmUgY2hhbmdlZCBwb3NpdGlvbiBiZWNhdXNlIHRoZXkgYXJlIG5vd1xuICAgICAgICAgICAgLy8gdW5mb2xkaW5nIGFyb3VuZCBkcmFnRWwsIGV2ZW4gdGhvdWdoIGRyYWdFbCBtYXkgbm90IGhhdmUgaGlzIGluZGV4IGNoYW5nZWQsIHNvIHVwZGF0ZSBldmVudFxuICAgICAgICAgICAgLy8gbXVzdCBiZSBmaXJlZCBoZXJlIGFzIFNvcnRhYmxlIHdpbGwgbm90LlxuXG4gICAgICAgICAgICBpZiAob2xkSW5kZXggPT09IGluZGV4KGRyYWdFbCQxKSkge1xuICAgICAgICAgICAgICB2YXIgdXBkYXRlID0gZmFsc2U7XG4gICAgICAgICAgICAgIG11bHRpRHJhZ0VsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKG11bHRpRHJhZ0VsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAobXVsdGlEcmFnRWxlbWVudC5zb3J0YWJsZUluZGV4ICE9PSBpbmRleChtdWx0aURyYWdFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgICAgdXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGlmICh1cGRhdGUpIHtcbiAgICAgICAgICAgICAgICBkaXNwYXRjaFNvcnRhYmxlRXZlbnQoJ3VwZGF0ZScpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBNdXN0IGJlIGRvbmUgYWZ0ZXIgY2FwdHVyaW5nIGluZGl2aWR1YWwgcmVjdHMgKHNjcm9sbCBiYXIpXG5cblxuICAgICAgICAgIG11bHRpRHJhZ0VsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKG11bHRpRHJhZ0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHVuc2V0UmVjdChtdWx0aURyYWdFbGVtZW50KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0b1NvcnRhYmxlLmFuaW1hdGVBbGwoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG11bHRpRHJhZ1NvcnRhYmxlID0gdG9Tb3J0YWJsZTtcbiAgICAgIH0gLy8gUmVtb3ZlIGNsb25lcyBpZiBuZWNlc3NhcnlcblxuXG4gICAgICBpZiAocm9vdEVsID09PSBwYXJlbnRFbCB8fCBwdXRTb3J0YWJsZSAmJiBwdXRTb3J0YWJsZS5sYXN0UHV0TW9kZSAhPT0gJ2Nsb25lJykge1xuICAgICAgICBtdWx0aURyYWdDbG9uZXMuZm9yRWFjaChmdW5jdGlvbiAoY2xvbmUpIHtcbiAgICAgICAgICBjbG9uZS5wYXJlbnROb2RlICYmIGNsb25lLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY2xvbmUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG51bGxpbmdHbG9iYWw6IGZ1bmN0aW9uIG51bGxpbmdHbG9iYWwoKSB7XG4gICAgICB0aGlzLmlzTXVsdGlEcmFnID0gZHJhZ1N0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgIG11bHRpRHJhZ0Nsb25lcy5sZW5ndGggPSAwO1xuICAgIH0sXG4gICAgZGVzdHJveUdsb2JhbDogZnVuY3Rpb24gZGVzdHJveUdsb2JhbCgpIHtcbiAgICAgIHRoaXMuX2Rlc2VsZWN0TXVsdGlEcmFnKCk7XG5cbiAgICAgIG9mZihkb2N1bWVudCwgJ3BvaW50ZXJ1cCcsIHRoaXMuX2Rlc2VsZWN0TXVsdGlEcmFnKTtcbiAgICAgIG9mZihkb2N1bWVudCwgJ21vdXNldXAnLCB0aGlzLl9kZXNlbGVjdE11bHRpRHJhZyk7XG4gICAgICBvZmYoZG9jdW1lbnQsICd0b3VjaGVuZCcsIHRoaXMuX2Rlc2VsZWN0TXVsdGlEcmFnKTtcbiAgICAgIG9mZihkb2N1bWVudCwgJ2tleWRvd24nLCB0aGlzLl9jaGVja0tleURvd24pO1xuICAgICAgb2ZmKGRvY3VtZW50LCAna2V5dXAnLCB0aGlzLl9jaGVja0tleVVwKTtcbiAgICB9LFxuICAgIF9kZXNlbGVjdE11bHRpRHJhZzogZnVuY3Rpb24gX2Rlc2VsZWN0TXVsdGlEcmFnKGV2dCkge1xuICAgICAgaWYgKHR5cGVvZiBkcmFnU3RhcnRlZCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkcmFnU3RhcnRlZCkgcmV0dXJuOyAvLyBPbmx5IGRlc2VsZWN0IGlmIHNlbGVjdGlvbiBpcyBpbiB0aGlzIHNvcnRhYmxlXG5cbiAgICAgIGlmIChtdWx0aURyYWdTb3J0YWJsZSAhPT0gdGhpcy5zb3J0YWJsZSkgcmV0dXJuOyAvLyBPbmx5IGRlc2VsZWN0IGlmIHRhcmdldCBpcyBub3QgaXRlbSBpbiB0aGlzIHNvcnRhYmxlXG5cbiAgICAgIGlmIChldnQgJiYgY2xvc2VzdChldnQudGFyZ2V0LCB0aGlzLm9wdGlvbnMuZHJhZ2dhYmxlLCB0aGlzLnNvcnRhYmxlLmVsLCBmYWxzZSkpIHJldHVybjsgLy8gT25seSBkZXNlbGVjdCBpZiBsZWZ0IGNsaWNrXG5cbiAgICAgIGlmIChldnQgJiYgZXZ0LmJ1dHRvbiAhPT0gMCkgcmV0dXJuO1xuXG4gICAgICB3aGlsZSAobXVsdGlEcmFnRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBlbCA9IG11bHRpRHJhZ0VsZW1lbnRzWzBdO1xuICAgICAgICB0b2dnbGVDbGFzcyhlbCwgdGhpcy5vcHRpb25zLnNlbGVjdGVkQ2xhc3MsIGZhbHNlKTtcbiAgICAgICAgbXVsdGlEcmFnRWxlbWVudHMuc2hpZnQoKTtcbiAgICAgICAgZGlzcGF0Y2hFdmVudCh7XG4gICAgICAgICAgc29ydGFibGU6IHRoaXMuc29ydGFibGUsXG4gICAgICAgICAgcm9vdEVsOiB0aGlzLnNvcnRhYmxlLmVsLFxuICAgICAgICAgIG5hbWU6ICdkZXNlbGVjdCcsXG4gICAgICAgICAgdGFyZ2V0RWw6IGVsLFxuICAgICAgICAgIG9yaWdpbmFsRXZ0OiBldnRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBfY2hlY2tLZXlEb3duOiBmdW5jdGlvbiBfY2hlY2tLZXlEb3duKGV2dCkge1xuICAgICAgaWYgKGV2dC5rZXkgPT09IHRoaXMub3B0aW9ucy5tdWx0aURyYWdLZXkpIHtcbiAgICAgICAgdGhpcy5tdWx0aURyYWdLZXlEb3duID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIF9jaGVja0tleVVwOiBmdW5jdGlvbiBfY2hlY2tLZXlVcChldnQpIHtcbiAgICAgIGlmIChldnQua2V5ID09PSB0aGlzLm9wdGlvbnMubXVsdGlEcmFnS2V5KSB7XG4gICAgICAgIHRoaXMubXVsdGlEcmFnS2V5RG93biA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIF9leHRlbmRzKE11bHRpRHJhZywge1xuICAgIC8vIFN0YXRpYyBtZXRob2RzICYgcHJvcGVydGllc1xuICAgIHBsdWdpbk5hbWU6ICdtdWx0aURyYWcnLFxuICAgIHV0aWxzOiB7XG4gICAgICAvKipcclxuICAgICAgICogU2VsZWN0cyB0aGUgcHJvdmlkZWQgbXVsdGktZHJhZyBpdGVtXHJcbiAgICAgICAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSBlbCAgICBUaGUgZWxlbWVudCB0byBiZSBzZWxlY3RlZFxyXG4gICAgICAgKi9cbiAgICAgIHNlbGVjdDogZnVuY3Rpb24gc2VsZWN0KGVsKSB7XG4gICAgICAgIHZhciBzb3J0YWJsZSA9IGVsLnBhcmVudE5vZGVbZXhwYW5kb107XG4gICAgICAgIGlmICghc29ydGFibGUgfHwgIXNvcnRhYmxlLm9wdGlvbnMubXVsdGlEcmFnIHx8IH5tdWx0aURyYWdFbGVtZW50cy5pbmRleE9mKGVsKSkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChtdWx0aURyYWdTb3J0YWJsZSAmJiBtdWx0aURyYWdTb3J0YWJsZSAhPT0gc29ydGFibGUpIHtcbiAgICAgICAgICBtdWx0aURyYWdTb3J0YWJsZS5tdWx0aURyYWcuX2Rlc2VsZWN0TXVsdGlEcmFnKCk7XG5cbiAgICAgICAgICBtdWx0aURyYWdTb3J0YWJsZSA9IHNvcnRhYmxlO1xuICAgICAgICB9XG5cbiAgICAgICAgdG9nZ2xlQ2xhc3MoZWwsIHNvcnRhYmxlLm9wdGlvbnMuc2VsZWN0ZWRDbGFzcywgdHJ1ZSk7XG4gICAgICAgIG11bHRpRHJhZ0VsZW1lbnRzLnB1c2goZWwpO1xuICAgICAgfSxcblxuICAgICAgLyoqXHJcbiAgICAgICAqIERlc2VsZWN0cyB0aGUgcHJvdmlkZWQgbXVsdGktZHJhZyBpdGVtXHJcbiAgICAgICAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSBlbCAgICBUaGUgZWxlbWVudCB0byBiZSBkZXNlbGVjdGVkXHJcbiAgICAgICAqL1xuICAgICAgZGVzZWxlY3Q6IGZ1bmN0aW9uIGRlc2VsZWN0KGVsKSB7XG4gICAgICAgIHZhciBzb3J0YWJsZSA9IGVsLnBhcmVudE5vZGVbZXhwYW5kb10sXG4gICAgICAgICAgICBpbmRleCA9IG11bHRpRHJhZ0VsZW1lbnRzLmluZGV4T2YoZWwpO1xuICAgICAgICBpZiAoIXNvcnRhYmxlIHx8ICFzb3J0YWJsZS5vcHRpb25zLm11bHRpRHJhZyB8fCAhfmluZGV4KSByZXR1cm47XG4gICAgICAgIHRvZ2dsZUNsYXNzKGVsLCBzb3J0YWJsZS5vcHRpb25zLnNlbGVjdGVkQ2xhc3MsIGZhbHNlKTtcbiAgICAgICAgbXVsdGlEcmFnRWxlbWVudHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGV2ZW50UHJvcGVydGllczogZnVuY3Rpb24gZXZlbnRQcm9wZXJ0aWVzKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciBvbGRJbmRpY2llcyA9IFtdLFxuICAgICAgICAgIG5ld0luZGljaWVzID0gW107XG4gICAgICBtdWx0aURyYWdFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChtdWx0aURyYWdFbGVtZW50KSB7XG4gICAgICAgIG9sZEluZGljaWVzLnB1c2goe1xuICAgICAgICAgIG11bHRpRHJhZ0VsZW1lbnQ6IG11bHRpRHJhZ0VsZW1lbnQsXG4gICAgICAgICAgaW5kZXg6IG11bHRpRHJhZ0VsZW1lbnQuc29ydGFibGVJbmRleFxuICAgICAgICB9KTsgLy8gbXVsdGlEcmFnRWxlbWVudHMgd2lsbCBhbHJlYWR5IGJlIHNvcnRlZCBpZiBmb2xkaW5nXG5cbiAgICAgICAgdmFyIG5ld0luZGV4O1xuXG4gICAgICAgIGlmIChmb2xkaW5nICYmIG11bHRpRHJhZ0VsZW1lbnQgIT09IGRyYWdFbCQxKSB7XG4gICAgICAgICAgbmV3SW5kZXggPSAtMTtcbiAgICAgICAgfSBlbHNlIGlmIChmb2xkaW5nKSB7XG4gICAgICAgICAgbmV3SW5kZXggPSBpbmRleChtdWx0aURyYWdFbGVtZW50LCAnOm5vdCguJyArIF90aGlzMy5vcHRpb25zLnNlbGVjdGVkQ2xhc3MgKyAnKScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0luZGV4ID0gaW5kZXgobXVsdGlEcmFnRWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBuZXdJbmRpY2llcy5wdXNoKHtcbiAgICAgICAgICBtdWx0aURyYWdFbGVtZW50OiBtdWx0aURyYWdFbGVtZW50LFxuICAgICAgICAgIGluZGV4OiBuZXdJbmRleFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXRlbXM6IF90b0NvbnN1bWFibGVBcnJheShtdWx0aURyYWdFbGVtZW50cyksXG4gICAgICAgIGNsb25lczogW10uY29uY2F0KG11bHRpRHJhZ0Nsb25lcyksXG4gICAgICAgIG9sZEluZGljaWVzOiBvbGRJbmRpY2llcyxcbiAgICAgICAgbmV3SW5kaWNpZXM6IG5ld0luZGljaWVzXG4gICAgICB9O1xuICAgIH0sXG4gICAgb3B0aW9uTGlzdGVuZXJzOiB7XG4gICAgICBtdWx0aURyYWdLZXk6IGZ1bmN0aW9uIG11bHRpRHJhZ0tleShrZXkpIHtcbiAgICAgICAga2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgaWYgKGtleSA9PT0gJ2N0cmwnKSB7XG4gICAgICAgICAga2V5ID0gJ0NvbnRyb2wnO1xuICAgICAgICB9IGVsc2UgaWYgKGtleS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAga2V5ID0ga2V5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsga2V5LnN1YnN0cigxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gaW5zZXJ0TXVsdGlEcmFnRWxlbWVudHMoY2xvbmVzSW5zZXJ0ZWQsIHJvb3RFbCkge1xuICBtdWx0aURyYWdFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChtdWx0aURyYWdFbGVtZW50LCBpKSB7XG4gICAgdmFyIHRhcmdldCA9IHJvb3RFbC5jaGlsZHJlblttdWx0aURyYWdFbGVtZW50LnNvcnRhYmxlSW5kZXggKyAoY2xvbmVzSW5zZXJ0ZWQgPyBOdW1iZXIoaSkgOiAwKV07XG5cbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICByb290RWwuaW5zZXJ0QmVmb3JlKG11bHRpRHJhZ0VsZW1lbnQsIHRhcmdldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvb3RFbC5hcHBlbmRDaGlsZChtdWx0aURyYWdFbGVtZW50KTtcbiAgICB9XG4gIH0pO1xufVxuLyoqXHJcbiAqIEluc2VydCBtdWx0aS1kcmFnIGNsb25lc1xyXG4gKiBAcGFyYW0gIHtbQm9vbGVhbl19IGVsZW1lbnRzSW5zZXJ0ZWQgIFdoZXRoZXIgdGhlIG11bHRpLWRyYWcgZWxlbWVudHMgYXJlIGluc2VydGVkXHJcbiAqIEBwYXJhbSAge0hUTUxFbGVtZW50fSByb290RWxcclxuICovXG5cblxuZnVuY3Rpb24gaW5zZXJ0TXVsdGlEcmFnQ2xvbmVzKGVsZW1lbnRzSW5zZXJ0ZWQsIHJvb3RFbCkge1xuICBtdWx0aURyYWdDbG9uZXMuZm9yRWFjaChmdW5jdGlvbiAoY2xvbmUsIGkpIHtcbiAgICB2YXIgdGFyZ2V0ID0gcm9vdEVsLmNoaWxkcmVuW2Nsb25lLnNvcnRhYmxlSW5kZXggKyAoZWxlbWVudHNJbnNlcnRlZCA/IE51bWJlcihpKSA6IDApXTtcblxuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgIHJvb3RFbC5pbnNlcnRCZWZvcmUoY2xvbmUsIHRhcmdldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvb3RFbC5hcHBlbmRDaGlsZChjbG9uZSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTXVsdGlEcmFnRWxlbWVudHMoKSB7XG4gIG11bHRpRHJhZ0VsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKG11bHRpRHJhZ0VsZW1lbnQpIHtcbiAgICBpZiAobXVsdGlEcmFnRWxlbWVudCA9PT0gZHJhZ0VsJDEpIHJldHVybjtcbiAgICBtdWx0aURyYWdFbGVtZW50LnBhcmVudE5vZGUgJiYgbXVsdGlEcmFnRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG11bHRpRHJhZ0VsZW1lbnQpO1xuICB9KTtcbn1cblxuU29ydGFibGUubW91bnQobmV3IEF1dG9TY3JvbGxQbHVnaW4oKSk7XG5Tb3J0YWJsZS5tb3VudChSZW1vdmUsIFJldmVydCk7XG5cbmV4cG9ydCBkZWZhdWx0IFNvcnRhYmxlO1xuZXhwb3J0IHsgTXVsdGlEcmFnUGx1Z2luIGFzIE11bHRpRHJhZywgU29ydGFibGUsIFN3YXBQbHVnaW4gYXMgU3dhcCB9O1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgQm9vbGVhbiB9IGZyb20gXCIuL2Jvb2xlYW5cIjtcbmltcG9ydCB7IFJlbmRlcmVyRmFjdG9yeSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgQm9vbGVhbkNoZWNrYm94IGV4dGVuZHMgQm9vbGVhbiB7fVxuXG5WdWUuY29tcG9uZW50KFwic3YtYm9vbGVhbi1jaGVja2JveFwiLCBCb29sZWFuQ2hlY2tib3gpO1xuXG5SZW5kZXJlckZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJSZW5kZXJlcihcbiAgXCJib29sZWFuXCIsXG4gIFwiY2hlY2tib3hcIixcbiAgXCJzdi1ib29sZWFuLWNoZWNrYm94XCJcbik7XG5cbmV4cG9ydCBkZWZhdWx0IEJvb2xlYW5DaGVja2JveDtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IEJvb2xlYW4gfSBmcm9tIFwiLi9ib29sZWFuXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBCb29sZWFuU3dpdGNoIGV4dGVuZHMgQm9vbGVhbiB7fVxuXG5WdWUuY29tcG9uZW50KFwic3VydmV5LWJvb2xlYW5cIiwgQm9vbGVhblN3aXRjaCk7XG5cbmV4cG9ydCBkZWZhdWx0IEJvb2xlYW5Td2l0Y2g7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IFF1ZXN0aW9uQnV0dG9uR3JvdXBNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgQnV0dG9uR3JvdXAgZXh0ZW5kcyBRdWVzdGlvblZ1ZTxRdWVzdGlvbkJ1dHRvbkdyb3VwTW9kZWw+IHtcbiAgQFByb3AoKSBxdWVzdGlvbjogUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsO1xuXG4gIGdldE1vZGVsKCk6IFF1ZXN0aW9uQnV0dG9uR3JvdXBNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb247XG4gIH1cbn1cbi8vIFZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktYnV0dG9uZ3JvdXBcIiwgQnV0dG9uR3JvdXApO1xuZXhwb3J0IGRlZmF1bHQgQnV0dG9uR3JvdXA7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7XG4gIEJ1dHRvbkdyb3VwSXRlbU1vZGVsLFxuICBJdGVtVmFsdWUsXG4gIFF1ZXN0aW9uQnV0dG9uR3JvdXBNb2RlbCxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlVnVlIH0gZnJvbSBcIi4vYmFzZVwiO1xuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIEJ1dHRvbkdyb3VwSXRlbSBleHRlbmRzIEJhc2VWdWUge1xuICBAUHJvcCgpIGl0ZW06IEl0ZW1WYWx1ZTtcbiAgQFByb3AoKSBxdWVzdGlvbjogUXVlc3Rpb25CdXR0b25Hcm91cE1vZGVsO1xuICBAUHJvcCgpIGluZGV4OiBudW1iZXI7XG4gIHB1YmxpYyBtb2RlbDogQnV0dG9uR3JvdXBJdGVtTW9kZWw7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IGFueSkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLm1vZGVsID0gbmV3IEJ1dHRvbkdyb3VwSXRlbU1vZGVsKHRoaXMucXVlc3Rpb24sIHRoaXMuaXRlbSwgdGhpcy5pbmRleCk7XG4gIH1cbiAgZ2V0TW9kZWwoKTogSXRlbVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xuICB9XG59XG5cblZ1ZS5jb21wb25lbnQoXCJzdi1idXR0b24tZ3JvdXAtaXRlbVwiLCBCdXR0b25Hcm91cEl0ZW0pO1xuZXhwb3J0IGRlZmF1bHQgQnV0dG9uR3JvdXBJdGVtO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AsIFdhdGNoIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25DaGVja2JveE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBDaGVja2JveCBleHRlbmRzIFF1ZXN0aW9uVnVlPFF1ZXN0aW9uQ2hlY2tib3hNb2RlbD4ge1xufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1jaGVja2JveFwiLCBDaGVja2JveCk7XG5leHBvcnQgZGVmYXVsdCBDaGVja2JveDtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgeyBJdGVtVmFsdWUsIEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IEJhc2VWdWUgfSBmcm9tIFwiLi9iYXNlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBDaGVja2JveEl0ZW0gZXh0ZW5kcyBCYXNlVnVlIHtcbiAgQFByb3AoKSBxdWVzdGlvbjogYW55O1xuICBAUHJvcCgpIGl0ZW06IEl0ZW1WYWx1ZTtcbiAgQFByb3AoKSBpbmRleDogYW55O1xuICBAUHJvcCgpIGhpZGVMYWJlbDogYm9vbGVhbjtcbiAgcHJvdGVjdGVkIGdldE1vZGVsKCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cbiAgZ2V0IGlzQWxsU2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uaXNBbGxTZWxlY3RlZDtcbiAgfVxuICBzZXQgaXNBbGxTZWxlY3RlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnF1ZXN0aW9uLmlzQWxsU2VsZWN0ZWQgPSB2YWw7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktY2hlY2tib3gtaXRlbVwiLCBDaGVja2JveEl0ZW0pO1xuZXhwb3J0IGRlZmF1bHQgQ2hlY2tib3hJdGVtO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFF1ZXN0aW9uVnVlIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFF1ZXN0aW9uQ29tbWVudE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBDb21tZW50IGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25Db21tZW50TW9kZWw+IHtcbiAgY2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LWNvbW1lbnRcIiwgQ29tbWVudCk7XG5cbmV4cG9ydCBkZWZhdWx0IENvbW1lbnQ7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXHJcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XHJcbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xyXG5pbXBvcnQgQWN0aW9uQmFySXRlbVZpZXdNb2RlbCBmcm9tIFwiLi9hY3Rpb24tYmFyLWl0ZW0udnVlXCI7XHJcblxyXG5AQ29tcG9uZW50XHJcbmV4cG9ydCBjbGFzcyBBY3Rpb25CYXJJdGVtRHJvcGRvd25WaWV3TW9kZWwgZXh0ZW5kcyBBY3Rpb25CYXJJdGVtVmlld01vZGVsIHt9XHJcblZ1ZS5jb21wb25lbnQoXCJzdi1hY3Rpb24tYmFyLWl0ZW0tZHJvcGRvd25cIiwgQWN0aW9uQmFySXRlbURyb3Bkb3duVmlld01vZGVsKTtcclxuZXhwb3J0IGRlZmF1bHQgQWN0aW9uQmFySXRlbURyb3Bkb3duVmlld01vZGVsO1xyXG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cclxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XHJcbmltcG9ydCB7IFByb3AsIENvbXBvbmVudCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XHJcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xyXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XHJcbmltcG9ydCBCYXNlVnVlIGZyb20gXCIuLi8uLi9iYXNlXCI7XHJcblxyXG5AQ29tcG9uZW50XHJcbmV4cG9ydCBjbGFzcyBBY3Rpb25CYXJJdGVtVmlld01vZGVsIGV4dGVuZHMgQmFzZVZ1ZSB7XHJcbiAgQFByb3AoKSBwdWJsaWMgaXRlbTogQWN0aW9uO1xyXG5cclxuICBnZXRNb2RlbCgpOiBCYXNlIHtcclxuICAgIHJldHVybiB0aGlzLml0ZW07XHJcbiAgfVxyXG59XHJcblxyXG5WdWUuY29tcG9uZW50KFwic3YtYWN0aW9uLWJhci1pdGVtXCIsIEFjdGlvbkJhckl0ZW1WaWV3TW9kZWwpO1xyXG5leHBvcnQgZGVmYXVsdCBBY3Rpb25CYXJJdGVtVmlld01vZGVsO1xyXG4iLCJcblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBQcm9wLCBDb21wb25lbnQgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgQWN0aW9uQmFyU2VwYXJhdG9yVmlld01vZGVsIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AoKSBpdGVtOiBhbnk7XG5cbiAgcHVibGljIGdldCBpbm5lckNzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLml0ZW0gJiYgdGhpcy5pdGVtLmlubmVyQ3NzO1xuICB9XG59XG5cblZ1ZS5jb21wb25lbnQoXCJzdi1hY3Rpb24tYmFyLXNlcGFyYXRvclwiLCBBY3Rpb25CYXJTZXBhcmF0b3JWaWV3TW9kZWwpO1xuZXhwb3J0IGRlZmF1bHQgQWN0aW9uQmFyU2VwYXJhdG9yVmlld01vZGVsO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcclxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XHJcbmltcG9ydCB7IEFjdGlvbiwgQWN0aW9uQ29udGFpbmVyIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XHJcbmltcG9ydCB7IEJhc2VWdWUgfSBmcm9tIFwiLi4vLi4vYmFzZVwiO1xyXG5cclxuZXhwb3J0ICogZnJvbSBcIi4vYWN0aW9uLnZ1ZVwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9hY3Rpb24tYmFyLWl0ZW0udnVlXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL2FjdGlvbi1iYXItaXRlbS1kcm9wZG93bi52dWVcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vYWN0aW9uLWJhci1zZXBhcmF0b3IudnVlXCI7XHJcblxyXG5AQ29tcG9uZW50XHJcbmV4cG9ydCBjbGFzcyBBY3Rpb25CYXJWaWV3TW9kZWwgZXh0ZW5kcyBCYXNlVnVlIHtcclxuICBAUHJvcCgpIG1vZGVsOiBBY3Rpb25Db250YWluZXI7XHJcbiAgQFByb3AoKSBoYW5kbGVDbGljazogYm9vbGVhbjtcclxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcbiAgfVxyXG4gIGdldE1vZGVsKCk6IEFjdGlvbkNvbnRhaW5lcjxBY3Rpb24+IHtcclxuICAgIHJldHVybiB0aGlzLm1vZGVsO1xyXG4gIH1cclxuICBcclxuICBtb3VudGVkKCkge1xyXG4gICAgaWYgKCF0aGlzLm1vZGVsLmhhc0FjdGlvbnMpIHJldHVybjtcclxuICAgIGNvbnN0IGNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQgPSA8SFRNTERpdkVsZW1lbnQ+dGhpcy4kZWw7XHJcbiAgICB0aGlzLm1vZGVsLmluaXRSZXNwb25zaXZpdHlNYW5hZ2VyKGNvbnRhaW5lcik7XHJcbiAgfVxyXG5cclxuICBiZWZvcmVEZXN0cm95KCkge1xyXG4gICAgdGhpcy5tb2RlbC5yZXNldFJlc3BvbnNpdml0eU1hbmFnZXIoKTtcclxuICB9XHJcbn1cclxuXHJcblZ1ZS5jb21wb25lbnQoXCJzdi1hY3Rpb24tYmFyXCIsIEFjdGlvbkJhclZpZXdNb2RlbCk7XHJcbmV4cG9ydCBkZWZhdWx0IEFjdGlvbkJhclZpZXdNb2RlbDtcclxuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgUHJvcCwgQ29tcG9uZW50IH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IEFjdGlvbiwgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IEJhc2VWdWUgZnJvbSBcIi4uLy4uL2Jhc2VcIjtcbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBBY3Rpb25WaWV3TW9kZWwgZXh0ZW5kcyBCYXNlVnVlIHtcbiAgQFByb3AoKSBpdGVtOiBBY3Rpb247XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbiAgZ2V0TW9kZWwoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgfVxuICBnZXRDb21wb25lbnROYW1lKCkge1xuICAgIHJldHVybiB0aGlzLml0ZW0uY29tcG9uZW50IHx8IFwic3YtYWN0aW9uLWJhci1pdGVtXCI7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdi1hY3Rpb25cIiwgQWN0aW9uVmlld01vZGVsKTtcbmV4cG9ydCBkZWZhdWx0IEFjdGlvblZpZXdNb2RlbDtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxyXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcclxuaW1wb3J0IHsgQmFzZSwgTGlzdE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XHJcbmltcG9ydCB7IEJhc2VWdWUgfSBmcm9tIFwiLi4vLi4vYmFzZVwiO1xyXG5cclxuZXhwb3J0ICogZnJvbSBcIi4vbGlzdC52dWVcIjtcclxuXHJcbkBDb21wb25lbnRcclxuZXhwb3J0IGNsYXNzIExpc3RJdGVtIGV4dGVuZHMgQmFzZVZ1ZSB7XHJcbiAgQFByb3AoKSBpdGVtOiBCYXNlO1xyXG4gIEBQcm9wKCkgbW9kZWw6IExpc3RNb2RlbDtcclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG4gIGdldE1vZGVsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcclxuICB9XHJcbn1cclxuXHJcblZ1ZS5jb21wb25lbnQoXCJzdi1saXN0LWl0ZW1cIiwgTGlzdEl0ZW0pO1xyXG5leHBvcnQgZGVmYXVsdCBMaXN0SXRlbTtcclxuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxyXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcclxuaW1wb3J0IHsgTGlzdE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XHJcbmltcG9ydCB7IEJhc2VWdWUgfSBmcm9tIFwiLi4vLi4vYmFzZVwiO1xyXG5cclxuZXhwb3J0ICogZnJvbSBcIi4vbGlzdC1pdGVtLnZ1ZVwiO1xyXG5cclxuQENvbXBvbmVudFxyXG5leHBvcnQgY2xhc3MgTGlzdCBleHRlbmRzIEJhc2VWdWUge1xyXG4gIEBQcm9wKCkgbW9kZWw6IExpc3RNb2RlbDtcclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG4gIGdldE1vZGVsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubW9kZWw7XHJcbiAgfVxyXG4gIGNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLm1vZGVsLmZpbHRlcmVkVGV4dCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuICB9XHJcbiAga2V5dXAoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5tb2RlbC5maWx0ZXJlZFRleHQgPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgfVxyXG59XHJcblxyXG5WdWUuY29tcG9uZW50KFwic3YtbGlzdFwiLCBMaXN0KTtcclxuZXhwb3J0IGRlZmF1bHQgTGlzdDtcclxuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgUHJvcCwgQ29tcG9uZW50IH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IEJhc2VWdWUgZnJvbSBcIi4uLy4uLy4uL2Jhc2VcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RGV0YWlsQnV0dG9uIGV4dGVuZHMgQmFzZVZ1ZSB7XG4gIEBQcm9wKCkgcHVibGljIGl0ZW06IEFjdGlvbjtcblxuICBnZXQgcXVlc3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbS5kYXRhLnF1ZXN0aW9uO1xuICB9XG5cbiAgZ2V0IHJvdygpIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtLmRhdGEucm93O1xuICB9XG5cbiAgZ2V0TW9kZWwoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgfVxufVxuXG5WdWUuY29tcG9uZW50KFwic3YtbWF0cml4LWRldGFpbC1idXR0b25cIiwgU3VydmV5UXVlc3Rpb25NYXRyaXhEZXRhaWxCdXR0b24pO1xuZXhwb3J0IGRlZmF1bHQgU3VydmV5UXVlc3Rpb25NYXRyaXhEZXRhaWxCdXR0b247XG4iLCJcblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBQcm9wLCBDb21wb25lbnQgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgQmFzZVZ1ZSBmcm9tIFwiLi4vLi4vLi4vYmFzZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgU3VydmV5UXVlc3Rpb25NYXRyaXhEeW5hbWljRHJhZ0Ryb3BJY29uIGV4dGVuZHMgQmFzZVZ1ZSB7XG4gIEBQcm9wKCkgcHVibGljIGl0ZW06IEFjdGlvbjtcblxuICBnZXQgcXVlc3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbS5kYXRhLnF1ZXN0aW9uO1xuICB9XG5cbiAgZ2V0TW9kZWwoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbTtcbiAgfVxufVxuXG5WdWUuY29tcG9uZW50KFxuICBcInN2LW1hdHJpeC1kcmFnLWRyb3AtaWNvblwiLFxuICBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNEcmFnRHJvcEljb25cbik7XG5leHBvcnQgZGVmYXVsdCBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNEcmFnRHJvcEljb247XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgUHJvcCwgQ29tcG9uZW50IH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IEFjdGlvbiwgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IEJhc2VWdWUgZnJvbSBcIi4uLy4uLy4uL2Jhc2VcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY1JlbW92ZUJ1dHRvbiBleHRlbmRzIEJhc2VWdWUge1xuICBAUHJvcCgpIHB1YmxpYyBpdGVtOiBBY3Rpb247XG5cbiAgZ2V0IHF1ZXN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLml0ZW0uZGF0YS5xdWVzdGlvbjtcbiAgfVxuXG4gIGdldCByb3coKSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbS5kYXRhLnJvdztcbiAgfVxuXG4gIGdldE1vZGVsKCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLml0ZW07XG4gIH1cbn1cblxuVnVlLmNvbXBvbmVudChcbiAgXCJzdi1tYXRyaXgtcmVtb3ZlLWJ1dHRvblwiLFxuICBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNSZW1vdmVCdXR0b25cbik7XG5leHBvcnQgZGVmYXVsdCBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNSZW1vdmVCdXR0b247XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBQcm9wLCBDb21wb25lbnQgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgUG9wdXBCYXNlVmlld01vZGVsLCBjcmVhdGVQb3B1cE1vZGFsVmlld01vZGVsLCBzZXR0aW5ncyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgQmFzZVZ1ZSB9IGZyb20gXCIuLi8uLi9iYXNlXCI7XG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUG9wdXBDb250YWluZXIgZXh0ZW5kcyBCYXNlVnVlIHtcbiAgQFByb3AoKSBtb2RlbDogUG9wdXBCYXNlVmlld01vZGVsO1xuICBwcml2YXRlIHByZXZJc1Zpc2libGU6IGJvb2xlYW47XG4gIHByb3RlY3RlZCBnZXRNb2RlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBjbGlja0luc2lkZShldmVudDogYW55KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cbiAgb25VcGRhdGVkKCkge1xuICAgIGlmICghdGhpcy5wcmV2SXNWaXNpYmxlICYmIHRoaXMubW9kZWwuaXNWaXNpYmxlKSB7XG4gICAgICB0aGlzLm1vZGVsLnVwZGF0ZU9uU2hvd2luZygpO1xuICAgIH1cbiAgICB0aGlzLnByZXZJc1Zpc2libGUgPSB0aGlzLm1vZGVsLmlzVmlzaWJsZTtcbiAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHNob3dNb2RhbChcbiAgY29tcG9uZW50TmFtZTogc3RyaW5nLFxuICBkYXRhOiBhbnksXG4gIG9uQXBwbHk6ICgpID0+IGJvb2xlYW4sXG4gIG9uQ2FuY2VsPzogKCkgPT4gdm9pZCxcbiAgY3NzQ2xhc3M/OiBzdHJpbmcsXG4gIHRpdGxlPzogc3RyaW5nXG4pIHtcbiAgY29uc3QgcG9wdXBWaWV3TW9kZWw6IFBvcHVwQmFzZVZpZXdNb2RlbCA9IGNyZWF0ZVBvcHVwTW9kYWxWaWV3TW9kZWwoXG4gICAgY29tcG9uZW50TmFtZSxcbiAgICBkYXRhLFxuICAgIG9uQXBwbHksXG4gICAgb25DYW5jZWwsXG4gICAgKCkgPT4ge1xuICAgICAgcG9wdXAuJGRlc3Ryb3koKTtcbiAgICAgIHBvcHVwVmlld01vZGVsLmRlc3Ryb3lQb3B1cENvbnRhaW5lcigpO1xuICAgIH0sXG4gICAgdW5kZWZpbmVkLFxuICAgIGNzc0NsYXNzLFxuICAgIHRpdGxlXG4gICk7XG4gIGNvbnN0IHBvcHVwID0gbmV3IFBvcHVwQ29udGFpbmVyKHtcbiAgICBlbDogcG9wdXBWaWV3TW9kZWwuY29udGFpbmVyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLFxuICAgIHByb3BzRGF0YTogeyBtb2RlbDogcG9wdXBWaWV3TW9kZWwgfSxcbiAgfSk7XG4gIHBvcHVwVmlld01vZGVsLm1vZGVsLmlzVmlzaWJsZSA9IHRydWU7XG59XG5zZXR0aW5ncy5zaG93TW9kYWwgPSBzaG93TW9kYWw7XG5WdWUuY29tcG9uZW50KFwic3YtcG9wdXAtY29udGFpbmVyXCIsIFBvcHVwQ29udGFpbmVyKTtcbmV4cG9ydCBkZWZhdWx0IFBvcHVwQ29udGFpbmVyO1xuIiwiXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IFByb3AsIENvbXBvbmVudCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBQb3B1cEJhc2VWaWV3TW9kZWwsIFBvcHVwTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFBvcHVwQ29udGFpbmVyIH0gZnJvbSBcIi4vcG9wdXAtY29udGFpbmVyLnZ1ZVwiO1xuaW1wb3J0IHsgQmFzZVZ1ZSB9IGZyb20gXCIuLi8uLi9iYXNlXCI7XG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUG9wdXAgZXh0ZW5kcyBCYXNlVnVlIHtcbiAgQFByb3AoKSBtb2RlbDogUG9wdXBNb2RlbDtcbiAgQFByb3AoKSB0YXJnZXRFbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBwb3B1cENvbnRhaW5lcjogYW55O1xuICBwcml2YXRlIHBvcHVwVmlld01vZGVsOiBQb3B1cEJhc2VWaWV3TW9kZWw7XG4gIHByb3RlY3RlZCBnZXRNb2RlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgfVxuICBvbk1vdW50ZWQoKSB7XG4gICAgdGhpcy5wb3B1cFZpZXdNb2RlbCA9IG5ldyBQb3B1cEJhc2VWaWV3TW9kZWwoXG4gICAgICB0aGlzLm1vZGVsLFxuICAgICAgdGhpcy4kZWwucGFyZW50RWxlbWVudFxuICAgICk7XG4gICAgdGhpcy5wb3B1cFZpZXdNb2RlbC5pbml0aWFsaXplUG9wdXBDb250YWluZXIoKTtcbiAgICB0aGlzLnBvcHVwQ29udGFpbmVyID0gbmV3IFBvcHVwQ29udGFpbmVyKHtcbiAgICAgIGVsOiB0aGlzLnBvcHVwVmlld01vZGVsLmNvbnRhaW5lci5hcHBlbmRDaGlsZChcbiAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKVxuICAgICAgKSxcbiAgICAgIHByb3BzRGF0YTogeyBtb2RlbDogdGhpcy5wb3B1cFZpZXdNb2RlbCB9LFxuICAgIH0pO1xuICB9XG4gIGRlc3Ryb3llZCgpIHtcbiAgICB0aGlzLnBvcHVwQ29udGFpbmVyLiRkZXN0cm95KCk7XG4gICAgdGhpcy5wb3B1cFZpZXdNb2RlbC5kZXN0cm95UG9wdXBDb250YWluZXIoKTtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN2LXBvcHVwXCIsIFBvcHVwKTtcbmV4cG9ydCBkZWZhdWx0IFBvcHVwO1xuIiwiXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wLCBXYXRjaCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBCYXNlVnVlIH0gZnJvbSBcIi4uL2Jhc2VcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFNrZWxldG9uIGV4dGVuZHMgQmFzZVZ1ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuVnVlLmNvbXBvbmVudChcInN2LXNrZWxldG9uXCIsIFNrZWxldG9uKTtcblxuZXhwb3J0IGRlZmF1bHQgU2tlbGV0b247XG4iLCJcblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wLCBXYXRjaCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBjcmVhdGVTdmcgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IEJhc2VWdWUgfSBmcm9tIFwiLi4vLi4vYmFzZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgU3ZnSWNvbiBleHRlbmRzIEJhc2VWdWUge1xuICBAUHJvcCgpXG4gIHNpemU6IG51bWJlcjtcbiAgQFByb3AoKVxuICB3aWR0aDogbnVtYmVyO1xuICBAUHJvcCgpXG4gIGhlaWdodDogbnVtYmVyO1xuICBAUHJvcCgpIGljb25OYW1lOiBzdHJpbmc7XG4gIHN2Z0ljb25FbGVtZW50OiBhbnk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuICBAV2F0Y2goXCJzaXplXCIpXG4gIG9uU2l6ZVByb3BlcnR5Q2hhbmdlZCgpIHtcbiAgICB0aGlzLm9uVXBkYXRlZCgpO1xuICB9XG4gIEBXYXRjaChcIndpZHRoXCIpXG4gIG9uV2lkdGhQcm9wZXJ0eUNoYW5nZWQoKSB7XG4gICAgdGhpcy5vblVwZGF0ZWQoKTtcbiAgfVxuICBAV2F0Y2goXCJoZWlnaHRcIilcbiAgb25IZWlnaHRQcm9wZXJ0eUNoYW5nZWQoKSB7XG4gICAgdGhpcy5vblVwZGF0ZWQoKTtcbiAgfVxuICBAV2F0Y2goXCJpY29uTmFtZVwiKVxuICBvbkljb25OYW1lUHJvcGVydHlDaGFuZ2VkKCkge1xuICAgIHRoaXMub25VcGRhdGVkKCk7XG4gIH1cblxuICBvblVwZGF0ZWQoKSB7XG4gICAgY3JlYXRlU3ZnKFxuICAgICAgdGhpcy5zaXplLFxuICAgICAgdGhpcy53aWR0aCxcbiAgICAgIHRoaXMuaGVpZ2h0LFxuICAgICAgdGhpcy5pY29uTmFtZSxcbiAgICAgIHRoaXMuc3ZnSWNvbkVsZW1lbnRcbiAgICApO1xuICB9XG5cbiAgb25Nb3VudGVkKCkge1xuICAgIHRoaXMuc3ZnSWNvbkVsZW1lbnQgPSB0aGlzLiRyZWZzW1wic3ZnSWNvblwiXTtcbiAgICB0aGlzLm9uVXBkYXRlZCgpO1xuICB9XG59XG5cblZ1ZS5jb21wb25lbnQoXCJzdi1zdmctaWNvblwiLCBTdmdJY29uKTtcblxuZXhwb3J0IGRlZmF1bHQgU3ZnSWNvbjtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IENvbXBvbmVudCBmcm9tIFwidnVlLWNsYXNzLWNvbXBvbmVudFwiO1xuaW1wb3J0IHsgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBEZWZhdWx0VGl0bGVNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgRGVmYXVsdFRpdGxlIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AoKSBlbGVtZW50OiBhbnk7XG4gIEBQcm9wKCkgY3NzOiBhbnk7XG4gIGdldCBzaG93SWNvbigpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50LmlzRXhwYW5kZWQgfHwgdGhpcy5lbGVtZW50LmlzQ29sbGFwc2VkO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0NvbGxhcHNlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNoYW5nZUV4cGFuZGVkKCkge1xuICAgIHRoaXMuZWxlbWVudC50b2dnbGVTdGF0ZSgpO1xuICB9XG5cbiAgZ2V0SWNvbkNzcyhpc0NvbGxhcHNlZDogYm9vbGVhbikge1xuICAgIHJldHVybiBEZWZhdWx0VGl0bGVNb2RlbC5nZXRJY29uQ3NzKHRoaXMuY3NzLnF1ZXN0aW9uLCBpc0NvbGxhcHNlZCk7XG4gIH1cblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMuaXNDb2xsYXBzZWQgPSB0aGlzLmVsZW1lbnQuaXNDb2xsYXBzZWQ7XG4gICAgdGhpcy5lbGVtZW50LnN0YXRlQ2hhbmdlZENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgdGhpcy5pc0NvbGxhcHNlZCA9IHRoaXMuZWxlbWVudC5pc0NvbGxhcHNlZDtcbiAgICB9O1xuICB9XG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5lbGVtZW50LnN0YXRlQ2hhbmdlZENhbGxiYWNrID0gbnVsbDtcbiAgfVxufVxuXG5WdWUuY29tcG9uZW50KFwic3YtZGVmYXVsdC10aXRsZVwiLCBEZWZhdWx0VGl0bGUpO1xuZXhwb3J0IGRlZmF1bHQgRGVmYXVsdFRpdGxlO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHtcbiAgQWN0aW9uLFxuICBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lcixcbiAgSVN1cnZleUVsZW1lbnQsXG4gIFJlbmRlcmVyRmFjdG9yeSxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBUaXRsZUFjdGlvbnMgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCgpIGVsZW1lbnQ6IElTdXJ2ZXlFbGVtZW50O1xuICBAUHJvcCgpIGNzczogYW55O1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIGdldCB0b29sYmFyKCk6IEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyPEFjdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnQuZ2V0VGl0bGVUb29sYmFyKCk7XG4gIH1cbn1cblxuUmVuZGVyZXJGYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUmVuZGVyZXIoXG4gIFwiZWxlbWVudFwiLFxuICBcInRpdGxlLWFjdGlvbnNcIixcbiAgXCJzdi10aXRsZS1hY3Rpb25zXCJcbik7XG5cblZ1ZS5jb21wb25lbnQoXCJzdi10aXRsZS1hY3Rpb25zXCIsIFRpdGxlQWN0aW9ucyk7XG5leHBvcnQgZGVmYXVsdCBUaXRsZUFjdGlvbnM7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudENvcmUgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFRpdGxlQ29udGVudCBleHRlbmRzIFZ1ZSB7XG4gIEBQcm9wKCkgZWxlbWVudDogU3VydmV5RWxlbWVudENvcmU7XG4gIEBQcm9wKCkgY3NzOiBhbnk7XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LWVsZW1lbnQtdGl0bGUtY29udGVudFwiLCBUaXRsZUNvbnRlbnQpO1xuZXhwb3J0IGRlZmF1bHQgVGl0bGVDb250ZW50O1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudENvcmUsIGRvS2V5MkNsaWNrVXAgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFRpdGxlRWxlbWVudCBleHRlbmRzIFZ1ZSB7XG4gIEBQcm9wKCkgZWxlbWVudDogU3VydmV5RWxlbWVudENvcmU7XG4gIEBQcm9wKCkgY3NzOiBhbnk7XG5cbiAga2V5dXAoZXZ0OiBhbnkpIHtcbiAgICBkb0tleTJDbGlja1VwKGV2dCk7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktZWxlbWVudC10aXRsZVwiLCBUaXRsZUVsZW1lbnQpO1xuZXhwb3J0IGRlZmF1bHQgVGl0bGVFbGVtZW50O1xuIiwiXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25Db21wb3NpdGVNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUGFuZWxNb2RlbCB9IGZyb20gXCIuLi9wYW5lbFwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgQ29tcG9zaXRlIGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25Db21wb3NpdGVNb2RlbD4ge1xuICBnZXQgY29udGVudFBhbmVsKCk6IFBhbmVsTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmNvbnRlbnRQYW5lbDtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1jb21wb3NpdGVcIiwgQ29tcG9zaXRlKTtcblxuZXhwb3J0IGRlZmF1bHQgQ29tcG9zaXRlO1xuIiwiXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25DdXN0b21Nb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgQ3VzdG9tIGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25DdXN0b21Nb2RlbD4ge1xuICBnZXQgY29udGVudFF1ZXN0aW9uKCk6IFF1ZXN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5jb250ZW50UXVlc3Rpb247XG4gIH1cbiAgZ2V0Q29tcG9uZW50TmFtZShlbGVtZW50OiBRdWVzdGlvbik6IHN0cmluZyB7XG4gICAgaWYgKGVsZW1lbnQuY3VzdG9tV2lkZ2V0KSB7XG4gICAgICByZXR1cm4gXCJzdXJ2ZXktY3VzdG9td2lkZ2V0XCI7XG4gICAgfVxuICAgIHJldHVybiBcInN1cnZleS1cIiArIGVsZW1lbnQuZ2V0VGVtcGxhdGUoKTtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1jdXN0b21cIiwgQ3VzdG9tKTtcblxuZXhwb3J0IGRlZmF1bHQgQ3VzdG9tO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlLCB7IENvbXBvbmVudE9wdGlvbnMgfSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIEN1c3RvbVdpZGdldCBleHRlbmRzIFZ1ZSB7XG4gIEBQcm9wKCkgY3NzOiBhbnk7XG4gIEBQcm9wKCkgcXVlc3Rpb246IFF1ZXN0aW9uO1xuICBnZXQgaGFzRGVmYXVsdFJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQuaXNEZWZhdWx0UmVuZGVyIHx8IHRoaXMuaGFzVnVlQ29tcG9uZW50O1xuICB9XG4gIGdldCBoYXNIdG1sKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldC5odG1sVGVtcGxhdGUgPyB0cnVlIDogZmFsc2U7XG4gIH1cbiAgZ2V0IGN1c3RvbUh0bWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQuaHRtbFRlbXBsYXRlO1xuICB9XG4gIGdldCBoYXNWdWVDb21wb25lbnQoKTogYm9vbGVhbiB7XG4gICAgdmFyIG9wdGlvbnMgPSAoPGFueT5WdWUpW1wib3B0aW9uc1wiXTtcbiAgICBpZiAoIW9wdGlvbnMpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKFxuICAgICAgb3B0aW9ucy5jb21wb25lbnRzICYmIG9wdGlvbnMuY29tcG9uZW50c1t0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldC5uYW1lXVxuICAgICk7XG4gIH1cbiAgZ2V0IGNvbXBvbmVudE5hbWUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5oYXNWdWVDb21wb25lbnQpIHJldHVybiB0aGlzLnF1ZXN0aW9uLmN1c3RvbVdpZGdldC5uYW1lO1xuICAgIHJldHVybiBcInN1cnZleS1cIiArIHRoaXMucXVlc3Rpb24uZ2V0VGVtcGxhdGUoKTtcbiAgfVxuICBtb3VudGVkKCkge1xuICAgIHRoaXMucXVlc3Rpb24uY3VzdG9tV2lkZ2V0LmFmdGVyUmVuZGVyKHRoaXMucXVlc3Rpb24sIHRoaXMuJGVsKTtcbiAgfVxuICB1cGRhdGVkKCkge1xuICAgIC8vdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQuYWZ0ZXJSZW5kZXIodGhpcy5xdWVzdGlvbiwgdGhpcy4kZWwpO1xuICB9XG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5xdWVzdGlvbi5jdXN0b21XaWRnZXQud2lsbFVubW91bnQodGhpcy5xdWVzdGlvbiwgdGhpcy4kZWwpO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LWN1c3RvbXdpZGdldFwiLCBDdXN0b21XaWRnZXQpO1xuXG5leHBvcnQgZGVmYXVsdCBDdXN0b21XaWRnZXQ7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFF1ZXN0aW9uVnVlIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFF1ZXN0aW9uRHJvcGRvd25Nb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgRHJvcGRvd24gZXh0ZW5kcyBRdWVzdGlvblZ1ZTxRdWVzdGlvbkRyb3Bkb3duTW9kZWw+IHtcbiAgZ2V0IGlzT3RoZXJTZWxlY3RlZCgpIHtcbiAgICBjb25zdCBxdWVzdGlvbiA9IHRoaXMucXVlc3Rpb247XG4gICAgcmV0dXJuIHF1ZXN0aW9uLmhhc090aGVyICYmIHF1ZXN0aW9uLmlzT3RoZXJTZWxlY3RlZDtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1kcm9wZG93blwiLCBEcm9wZG93bik7XG5leHBvcnQgZGVmYXVsdCBEcm9wZG93bjtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgQmFzZSwgU3VydmV5TW9kZWwsIFF1ZXN0aW9uLCBTdXJ2ZXlFbGVtZW50IH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlVnVlIH0gZnJvbSBcIi4vYmFzZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgU3VydmV5RWxlbWVudFZ1ZSBleHRlbmRzIEJhc2VWdWUge1xuICBAUHJvcCgpIGNzczogYW55O1xuICBAUHJvcCgpIHN1cnZleTogU3VydmV5TW9kZWw7XG4gIEBQcm9wKCkgZWxlbWVudDogU3VydmV5RWxlbWVudDtcbiAgcHJvdGVjdGVkIGdldE1vZGVsKCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnQ7XG4gIH1cbiAgZ2V0Q29tcG9uZW50TmFtZShlbGVtZW50OiBRdWVzdGlvbikge1xuICAgIGlmIChlbGVtZW50LmN1c3RvbVdpZGdldCkgcmV0dXJuIFwic3VydmV5LWN1c3RvbXdpZGdldFwiO1xuICAgIGlmIChlbGVtZW50LmdldFR5cGUoKSA9PT0gXCJwYW5lbFwiIHx8IGVsZW1lbnQuaXNEZWZhdWx0UmVuZGVyaW5nKCkpIHtcbiAgICAgIHJldHVybiBcInN1cnZleS1cIiArIGVsZW1lbnQuZ2V0VGVtcGxhdGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnQuZ2V0Q29tcG9uZW50TmFtZSgpO1xuICB9XG4gIGdldENvbnRlbnRDbGFzcyhlbGVtZW50OiBRdWVzdGlvbikge1xuICAgIHJldHVybiBlbGVtZW50LmNzc0NvbnRlbnQ7XG4gIH1cbiAgZ2V0IGhhc0Vycm9yc09uVG9wKCkge1xuICAgIHJldHVybiAhdGhpcy5lbGVtZW50LmlzUGFuZWwgJiYgdGhpcy5zdXJ2ZXkucXVlc3Rpb25FcnJvckxvY2F0aW9uID09PSBcInRvcFwiO1xuICB9XG4gIGdldCBoYXNFcnJvcnNPbkJvdHRvbSgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMuZWxlbWVudC5pc1BhbmVsICYmIHRoaXMuc3VydmV5LnF1ZXN0aW9uRXJyb3JMb2NhdGlvbiA9PT0gXCJib3R0b21cIlxuICAgICk7XG4gIH1cbiAgbW91bnRlZCgpIHtcbiAgICBpZiAoIXRoaXMuZWxlbWVudC5pc1BhbmVsKSB7XG4gICAgICAoPFF1ZXN0aW9uPnRoaXMuZWxlbWVudCkuYWZ0ZXJSZW5kZXIodGhpcy4kZWwgYXMgSFRNTEVsZW1lbnQpO1xuICAgIH1cbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1lbGVtZW50XCIsIFN1cnZleUVsZW1lbnRWdWUpO1xuZXhwb3J0IGRlZmF1bHQgU3VydmV5RWxlbWVudFZ1ZTtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudCwgZG9LZXkyQ2xpY2tVcCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgRWxlbWVudEhlYWRlciBleHRlbmRzIFZ1ZSB7XG4gIEBQcm9wKCkgZWxlbWVudDogU3VydmV5RWxlbWVudDtcbiAgQFByb3AoKSBjc3M6IGFueTtcblxuICBrZXl1cChldnQ6IGFueSkge1xuICAgIGRvS2V5MkNsaWNrVXAoZXZ0KTtcbiAgfVxuICBjbGlja1RpdGxlRnVuY3Rpb24oKSB7XG4gICAgaWYodHlwZW9mICg8YW55PnRoaXMuZWxlbWVudCkuY2xpY2tUaXRsZUZ1bmN0aW9uID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICg8YW55PnRoaXMuZWxlbWVudCkuY2xpY2tUaXRsZUZ1bmN0aW9uKCk7XG4gICAgfVxuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LWVsZW1lbnQtaGVhZGVyXCIsIEVsZW1lbnRIZWFkZXIpO1xuZXhwb3J0IGRlZmF1bHQgRWxlbWVudEhlYWRlcjtcbiIsIlxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCwgV2F0Y2ggfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkVtcHR5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIEVtcHR5IGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25FbXB0eU1vZGVsPiB7fVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1lbXB0eVwiLCBFbXB0eSk7XG5leHBvcnQgZGVmYXVsdCBFbXB0eTtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgRXJyb3JzIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AoKSBlbGVtZW50OiBTdXJ2ZXlFbGVtZW50O1xuICBAUHJvcCgpIGxvY2F0aW9uOiBTdHJpbmc7XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LWVycm9yc1wiLCBFcnJvcnMpO1xuZXhwb3J0IGRlZmF1bHQgRXJyb3JzO1xuIiwiXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25FeHByZXNzaW9uTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIEV4cHJlc3Npb24gZXh0ZW5kcyBRdWVzdGlvblZ1ZTxRdWVzdGlvbkV4cHJlc3Npb25Nb2RlbD4ge31cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktZXhwcmVzc2lvblwiLCBFeHByZXNzaW9uKTtcbmV4cG9ydCBkZWZhdWx0IEV4cHJlc3Npb247XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wLCBXYXRjaCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFF1ZXN0aW9uVnVlIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmlsZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBjb25maXJtQWN0aW9uLCBkZXRlY3RJRU9yRWRnZSwgbG9hZEZpbGVGcm9tQmFzZTY0IH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgRmlsZSBleHRlbmRzIFF1ZXN0aW9uVnVlPFF1ZXN0aW9uRmlsZU1vZGVsPiB7XG4gIGRvUmVtb3ZlRmlsZShkYXRhOiBhbnkpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLmRvUmVtb3ZlRmlsZShkYXRhKTtcbiAgfVxuXG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LWZpbGVcIiwgRmlsZSk7XG5leHBvcnQgZGVmYXVsdCBGaWxlO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQge1xuICBGbG93UGFuZWxNb2RlbCxcbiAgUXVlc3Rpb24sXG4gIENzc0NsYXNzQnVpbGRlcixcbiAgUXVlc3Rpb25Sb3dNb2RlbCxcbiAgSVN1cnZleSxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBGbG93UGFuZWwgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCgpIHF1ZXN0aW9uOiBGbG93UGFuZWxNb2RlbDtcbiAgQFByb3AoKSBpc0VkaXRNb2RlOiBCb29sZWFuO1xuICBAUHJvcCgpIGNzczogYW55O1xuICBwcml2YXRlIGlzQ29sbGFwc2VkVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSByb290Tm9kZVZhbHVlOiBOb2RlO1xuXG4gIGdldCByb290Tm9kZSgpOiBOb2RlIHtcbiAgICByZXR1cm4gdGhpcy5yb290Tm9kZVZhbHVlO1xuICB9XG4gIGJlZm9yZU1vdW50KCkge1xuICAgIGlmICghdGhpcy5xdWVzdGlvbikgcmV0dXJuO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnF1ZXN0aW9uLm9uQ3VzdG9tSHRtbFByb2R1Y2luZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH07XG4gICAgdGhpcy5xdWVzdGlvbi5vbkdldEh0bWxGb3JRdWVzdGlvbiA9IHNlbGYucmVuZGVyUXVlc3Rpb247XG4gICAgdGhpcy5zZXRSb290Tm9kZSgpO1xuICB9XG4gIHByb3RlY3RlZCBzZXRSb290Tm9kZSgpIHtcbiAgICBsZXQgaHRtbCA9IFwiPHNwYW4+XCIgKyB0aGlzLnF1ZXN0aW9uLnByb2R1Y2VIdG1sKCkgKyBcIjwvc3Bhbj5cIjtcbiAgICBsZXQgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhodG1sLCBcInRleHQveG1sXCIpO1xuICAgIHRoaXMucm9vdE5vZGVWYWx1ZSA9XG4gICAgICAhIWRvYyAmJiBkb2MuY2hpbGROb2Rlcy5sZW5ndGggPiAwID8gZG9jLmNoaWxkTm9kZXNbMF0gOiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCByZW5kZXJRdWVzdGlvbihxdWVzdGlvbjogUXVlc3Rpb24pOiBzdHJpbmcge1xuICAgIHJldHVybiBcIjxxdWVzdGlvbj5cIiArIHF1ZXN0aW9uLm5hbWUgKyBcIjwvcXVlc3Rpb24+XCI7XG4gIH1cbiAgbW91bnRlZCgpIHtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5zdXJ2ZXkpIHtcbiAgICAgIHRoaXMucXVlc3Rpb24uc3VydmV5LmFmdGVyUmVuZGVyUGFuZWwoXG4gICAgICAgIHRoaXMucXVlc3Rpb24sXG4gICAgICAgIHRoaXMuJGVsIGFzIEhUTUxFbGVtZW50XG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmlzQ29sbGFwc2VkID0gdGhpcy5xdWVzdGlvbi5pc0NvbGxhcHNlZDtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5xdWVzdGlvbi5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcbiAgICAgIFwic3RhdGVcIixcbiAgICAgIGZ1bmN0aW9uICh2YWw6IGFueSkge1xuICAgICAgICBzZWxmLmlzQ29sbGFwc2VkID0gc2VsZi5xdWVzdGlvbi5pc0NvbGxhcHNlZDtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIGdldCByb290U3R5bGUoKSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLnJlbmRlcldpZHRoKSB7XG4gICAgICAoPGFueT5yZXN1bHQpW1wiZmxleEJhc2lzXCJdID0gdGhpcy5xdWVzdGlvbi5yZW5kZXJXaWR0aDtcbiAgICAgICg8YW55PnJlc3VsdClbXCJmbGV4R3Jvd1wiXSA9IDE7XG4gICAgICAoPGFueT5yZXN1bHQpW1wiZmxleFNocmlua1wiXSA9IDE7XG4gICAgICAoPGFueT5yZXN1bHQpW1wid2lkdGhcIl0gPSB0aGlzLnF1ZXN0aW9uLnJlbmRlcldpZHRoO1xuICAgICAgKDxhbnk+cmVzdWx0KVtcIm1pbldpZHRoXCJdID0gdGhpcy5xdWVzdGlvbi5taW5XaWR0aDtcbiAgICAgICg8YW55PnJlc3VsdClbXCJtYXhXaWR0aFwiXSA9IHRoaXMucXVlc3Rpb24ubWF4V2lkdGg7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgZ2V0IHNob3dJY29uKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnF1ZXN0aW9uICYmICh0aGlzLnF1ZXN0aW9uLmlzRXhwYW5kZWQgfHwgdGhpcy5xdWVzdGlvbi5pc0NvbGxhcHNlZClcbiAgICApO1xuICB9XG4gIGdldCByb3dzKCk6IFF1ZXN0aW9uUm93TW9kZWxbXSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24ucm93cztcbiAgfVxuICBnZXQgaGFzVGl0bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24udGl0bGUubGVuZ3RoID4gMDtcbiAgfVxuICBnZXQgc3VydmV5KCk6IElTdXJ2ZXkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnN1cnZleTtcbiAgfVxuICBnZXQgaWNvbkNzcygpIHtcbiAgICAvL3JlZmFjdG9yXG4gICAgdmFyIHJlc3VsdCA9IFwic3ZfcGFuZWxfaWNvblwiO1xuICAgIGlmICghdGhpcy5pc0NvbGxhcHNlZCkgcmVzdWx0ICs9IFwiIHN2X2V4cGFuZGVkXCI7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBnZXQgaXNDb2xsYXBzZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNDb2xsYXBzZWRWYWx1ZTtcbiAgfVxuICBzZXQgaXNDb2xsYXBzZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5pc0NvbGxhcHNlZFZhbHVlID0gdmFsO1xuICB9XG4gIGNoYW5nZUV4cGFuZGVkKCkge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmlzQ29sbGFwc2VkIHx8IHRoaXMucXVlc3Rpb24uaXNFeHBhbmRlZCkge1xuICAgICAgaWYgKHRoaXMucXVlc3Rpb24uaXNDb2xsYXBzZWQpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi5leHBhbmQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb24uY29sbGFwc2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuVnVlLmNvbXBvbmVudChcInN1cnZleS1mbG93cGFuZWxcIiwgRmxvd1BhbmVsKTtcbmV4cG9ydCBkZWZhdWx0IEZsb3dQYW5lbDtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgRmxvd1BhbmVsTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIEZsb3dQYW5lbEVsZW1lbnQgZXh0ZW5kcyBWdWUge1xuICBzdGF0aWMgaWRWYWx1ZTogbnVtYmVyO1xuICBAUHJvcCgpIG5vZGU6IE5vZGU7XG4gIEBQcm9wKCkgcGFuZWw6IEZsb3dQYW5lbE1vZGVsO1xuICBAUHJvcCgpIGNzczogYW55O1xuICBwcml2YXRlIGVsZW1lbnRJZFZhbHVlOiBzdHJpbmc7XG4gIHB1YmxpYyBxdWVzdGlvbjogUXVlc3Rpb24gPSBudWxsO1xuICBwdWJsaWMgdGFnTmFtZTogc3RyaW5nID0gXCJzcGFuXCI7XG4gIHB1YmxpYyBub2RlczogQXJyYXk8Tm9kZT4gPSBbXTtcbiAgcHVibGljIHRleHQ6IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyBzdHlsZTogYW55ID0ge307XG5cbiAgcHJpdmF0ZSBnZXRTdHlsZShub2RlVHlwZTogc3RyaW5nKSB7XG4gICAgdmFyIHN0eWxlOiBhbnkgPSB7fTtcbiAgICBpZiAobm9kZVR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJiXCIpIHtcbiAgICAgIHN0eWxlLmZvbnRXZWlnaHQgPSBcImJvbGRcIjtcbiAgICB9XG4gICAgaWYgKG5vZGVUeXBlLnRvTG93ZXJDYXNlKCkgPT09IFwiaVwiKSB7XG4gICAgICBzdHlsZS5mb250U3R5bGUgPSBcIml0YWxpY1wiO1xuICAgIH1cbiAgICBpZiAobm9kZVR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJ1XCIpIHtcbiAgICAgIHN0eWxlLnRleHREZWNvcmF0aW9uID0gXCJ1bmRlcmxpbmVcIjtcbiAgICB9XG4gICAgcmV0dXJuIHN0eWxlO1xuICB9XG4gIHB1YmxpYyBnZXQgZWxlbWVudElkKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmVsZW1lbnRJZFZhbHVlKSB7XG4gICAgICBpZiAoIUZsb3dQYW5lbEVsZW1lbnQuaWRWYWx1ZSkge1xuICAgICAgICBGbG93UGFuZWxFbGVtZW50LmlkVmFsdWUgPSAwO1xuICAgICAgfVxuICAgICAgRmxvd1BhbmVsRWxlbWVudC5pZFZhbHVlKys7XG4gICAgICB0aGlzLmVsZW1lbnRJZFZhbHVlID0gXCJmcF9lbFwiICsgRmxvd1BhbmVsRWxlbWVudC5pZFZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5lbGVtZW50SWRWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuIDxTdXJ2ZXlNb2RlbD50aGlzLnBhbmVsLnN1cnZleTtcbiAgfVxuICBiZWZvcmVNb3VudCgpIHtcbiAgICBpZiAoIXRoaXMucGFuZWwgfHwgIXRoaXMubm9kZSkgcmV0dXJuO1xuICAgIHZhciBub2RlVHlwZSA9IHRoaXMubm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICghdGhpcy5oYXNUZXh0Q2hpbGROb2Rlc09ubHkodGhpcy5ub2RlKSkge1xuICAgICAgdGhpcy5ub2RlcyA9IHRoaXMuZ2V0Q2hpbGREb21Ob2Rlcyh0aGlzLm5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobm9kZVR5cGUgPT0gXCJxdWVzdGlvblwiKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb24gPSB0aGlzLnBhbmVsLmdldFF1ZXN0aW9uQnlOYW1lKHRoaXMubm9kZS50ZXh0Q29udGVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRleHQgPSB0aGlzLm5vZGUudGV4dENvbnRlbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChub2RlVHlwZSA9PSBcImRpdlwiICYmICF0aGlzLnF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLnRhZ05hbWUgPSBcImRpdlwiO1xuICAgIH1cbiAgICB0aGlzLnN0eWxlID0gdGhpcy5nZXRTdHlsZShub2RlVHlwZSk7XG4gIH1cbiAgLy9kdXBsaWNhdGVkIGNvZGUgZnJvbSBlbGVtZW50LnZ1ZVxuICBnZXRDb21wb25lbnROYW1lKGVsZW1lbnQ6IFF1ZXN0aW9uKSB7XG4gICAgaWYgKGVsZW1lbnQuY3VzdG9tV2lkZ2V0KSB7XG4gICAgICByZXR1cm4gXCJzdXJ2ZXktY3VzdG9td2lkZ2V0XCI7XG4gICAgfVxuICAgIHJldHVybiBcInN1cnZleS1cIiArIGVsZW1lbnQuZ2V0VGVtcGxhdGUoKTtcbiAgfVxuICAvLyBkdXBsaWNhdGVkIGNvZGUgZnJvbSByZWFjdHBhZ2VzLnRzeFxuICBwcml2YXRlIGhhc1RleHRDaGlsZE5vZGVzT25seShub2RlOiBOb2RlKTogYm9vbGVhbiB7XG4gICAgdmFyIG5vZGVzID0gbm9kZS5jaGlsZE5vZGVzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChub2Rlc1tpXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSBcIiN0ZXh0XCIpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSBnZXRDaGlsZERvbU5vZGVzKG5vZGU6IE5vZGUpOiBBcnJheTxOb2RlPiB7XG4gICAgdmFyIGRvbU5vZGVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRvbU5vZGVzLnB1c2gobm9kZS5jaGlsZE5vZGVzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIGRvbU5vZGVzO1xuICB9XG59XG5cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktZmxvd3BhbmVsZWxlbWVudFwiLCBGbG93UGFuZWxFbGVtZW50KTtcbmV4cG9ydCBkZWZhdWx0IEZsb3dQYW5lbEVsZW1lbnQ7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgVnVlU3VydmV5TW9kZWwgYXMgU3VydmV5TW9kZWwgfSBmcm9tIFwiLi9zdXJ2ZXlNb2RlbFwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgU3VydmV5SGVhZGVyIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AoKSBzdXJ2ZXk6IFN1cnZleU1vZGVsO1xuXG4gIG1vdW50ZWQoKSB7XG4gICAgdmFyIGVsID0gdGhpcy4kZWw7XG4gICAgaWYgKGVsICYmIHRoaXMuc3VydmV5KSB0aGlzLnN1cnZleS5kb0FmdGVyUmVuZGVySGVhZGVyKGVsKTtcbiAgfVxufVxuXG5WdWUuY29tcG9uZW50KFwic3VydmV5LWhlYWRlclwiLCBTdXJ2ZXlIZWFkZXIpO1xuZXhwb3J0IGRlZmF1bHQgU3VydmV5SGVhZGVyO1xuIiwiXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFF1ZXN0aW9uSHRtbE1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBIdG1sIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AoKSBxdWVzdGlvbjogUXVlc3Rpb25IdG1sTW9kZWw7XG4gIEBQcm9wKCkgY3NzOiBhbnk7XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LWh0bWxcIiwgSHRtbCk7XG5leHBvcnQgZGVmYXVsdCBIdG1sO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFF1ZXN0aW9uSW1hZ2VNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUXVlc3Rpb25JbWFnZSBleHRlbmRzIFZ1ZSB7XG4gIEBQcm9wKCkgcXVlc3Rpb246IFF1ZXN0aW9uSW1hZ2VNb2RlbDtcbiAgQFByb3AoKSBjc3M6IGFueTtcbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktaW1hZ2VcIiwgUXVlc3Rpb25JbWFnZSk7XG5leHBvcnQgZGVmYXVsdCBRdWVzdGlvbkltYWdlO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIEltYWdlUGlja2VyIGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsPiB7XG4gIGdldEl0ZW1DbGFzcyhpdGVtOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5nZXRJdGVtQ2xhc3MoaXRlbSk7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktaW1hZ2VwaWNrZXJcIiwgSW1hZ2VQaWNrZXIpO1xuZXhwb3J0IGRlZmF1bHQgSW1hZ2VQaWNrZXI7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25NYXRyaXhNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgTWF0cml4IGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25NYXRyaXhNb2RlbD4ge1xuICBjZWxsQ2xpY2socm93OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5KSByZXR1cm47XG4gICAgcm93LnZhbHVlID0gY29sdW1uLnZhbHVlO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LW1hdHJpeFwiLCBNYXRyaXgpO1xuZXhwb3J0IGRlZmF1bHQgTWF0cml4O1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgUXVlc3Rpb24sIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwsIENzc0NsYXNzQnVpbGRlciB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgTWF0cml4Q2VsbCBleHRlbmRzIFZ1ZSB7XG4gIEBQcm9wKCkgcXVlc3Rpb246IFF1ZXN0aW9uO1xuICBAUHJvcCgpIGNlbGw6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGw7XG5cbiAgaXNWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIGdldENvbXBvbmVudE5hbWUoZWxlbWVudDogUXVlc3Rpb24pIHtcbiAgICBpZiAoZWxlbWVudC5jdXN0b21XaWRnZXQpIHtcbiAgICAgIHJldHVybiBcInN1cnZleS1jdXN0b213aWRnZXRcIjtcbiAgICB9XG4gICAgcmV0dXJuIFwic3VydmV5LVwiICsgZWxlbWVudC5nZXRUeXBlKCk7XG4gIH1cbiAgZ2V0IGhhc0Vycm9yc09uVG9wKCkge1xuICAgIHJldHVybiB0aGlzLmNlbGwuc2hvd0Vycm9yT25Ub3A7XG4gIH1cbiAgZ2V0IGhhc0Vycm9yc09uQm90dG9tKCkge1xuICAgIHJldHVybiB0aGlzLmNlbGwuc2hvd0Vycm9yT25Cb3R0b207XG4gIH1cbiAgZ2V0SGVhZGVycygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNlbGwuaGVhZGVycztcbiAgfVxuICBnZXRDZWxsU3R5bGUoKSB7XG4gICAgaWYgKCEhdGhpcy5jZWxsLndpZHRoIHx8ICEhdGhpcy5jZWxsLm1pbldpZHRoKVxuICAgICAgcmV0dXJuIHsgd2lkdGg6IHRoaXMuY2VsbC53aWR0aCwgbWluV2lkdGg6IHRoaXMuY2VsbC5taW5XaWR0aCB9O1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGdldEl0ZW1DbGFzcyhpdGVtOiBhbnkpIHtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0gdGhpcy5jZWxsLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgY29uc3QgaXNEaXNhYmxlZCA9IHRoaXMuY2VsbC5xdWVzdGlvbi5pc1JlYWRPbmx5IHx8ICFpdGVtLmlzRW5hYmxlZDtcbiAgICBjb25zdCBpc0NoZWNrZWQgPSBpdGVtLnZhbHVlID09PSB0aGlzLmNlbGwucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZTtcbiAgICBjb25zdCBhbGxvd0hvdmVyID0gIWlzRGlzYWJsZWQgJiYgIWlzQ2hlY2tlZDtcblxuICAgIHJldHVybiBuZXcgQ3NzQ2xhc3NCdWlsZGVyKClcbiAgICAgIC5hcHBlbmQodGhpcy5jZWxsLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbSlcbiAgICAgIC5hcHBlbmQoY3NzQ2xhc3Nlcy5pdGVtRGlzYWJsZWQsIGlzRGlzYWJsZWQpXG4gICAgICAuYXBwZW5kKGNzc0NsYXNzZXMuaXRlbUNoZWNrZWQsIGlzQ2hlY2tlZClcbiAgICAgIC5hcHBlbmQoY3NzQ2xhc3Nlcy5pdGVtSG92ZXIsIGFsbG93SG92ZXIpXG4gICAgICAudG9TdHJpbmcoKTtcbiAgfVxuICBtb3VudGVkKCkge1xuICAgIGlmICghdGhpcy5jZWxsLmhhc1F1ZXN0aW9uIHx8ICF0aGlzLnF1ZXN0aW9uIHx8ICF0aGlzLnF1ZXN0aW9uLnN1cnZleSlcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLm9uVmlzaWJpbGl0eUNoYW5nZWQoKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5jZWxsLnF1ZXN0aW9uLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFxuICAgICAgXCJpc1Zpc2libGVcIixcbiAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi5vblZpc2liaWxpdHlDaGFuZ2VkKCk7XG4gICAgICB9XG4gICAgKTtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIGNlbGw6IHRoaXMuY2VsbC5jZWxsLFxuICAgICAgY2VsbFF1ZXN0aW9uOiB0aGlzLmNlbGwucXVlc3Rpb24sXG4gICAgICBodG1sRWxlbWVudDogdGhpcy4kZWwsXG4gICAgICByb3c6IHRoaXMuY2VsbC5yb3csXG4gICAgICBjb2x1bW46IHRoaXMuY2VsbC5jZWxsLmNvbHVtbixcbiAgICB9O1xuICAgIHRoaXMucXVlc3Rpb24uc3VydmV5Lm1hdHJpeEFmdGVyQ2VsbFJlbmRlcih0aGlzLnF1ZXN0aW9uLCBvcHRpb25zKTtcbiAgfVxuICBwcml2YXRlIG9uVmlzaWJpbGl0eUNoYW5nZWQoKSB7XG4gICAgdGhpcy5pc1Zpc2libGUgPSB0aGlzLmNlbGwucXVlc3Rpb24uaXNWaXNpYmxlO1xuICB9XG59XG5cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktbWF0cml4Y2VsbFwiLCBNYXRyaXhDZWxsKTtcbmV4cG9ydCBkZWZhdWx0IE1hdHJpeENlbGw7XG4iLCJcblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgTWF0cml4RHJvcGRvd24gZXh0ZW5kcyBRdWVzdGlvblZ1ZTxRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWw+IHt9XG5cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktbWF0cml4ZHJvcGRvd25cIiwgTWF0cml4RHJvcGRvd24pO1xuZXhwb3J0IGRlZmF1bHQgTWF0cml4RHJvcGRvd247XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIE1hdHJpeER5bmFtaWMgZXh0ZW5kcyBRdWVzdGlvblZ1ZTxRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbD4ge1xuICBhZGRSb3dDbGljaygpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLmFkZFJvd1VJKCk7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktbWF0cml4ZHluYW1pY1wiLCBNYXRyaXhEeW5hbWljKTtcbmV4cG9ydCBkZWZhdWx0IE1hdHJpeER5bmFtaWM7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQge1xuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZSxcbn0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlVnVlIH0gZnJvbSBcIi4vYmFzZVwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgTWF0cml4VGFibGUgZXh0ZW5kcyBCYXNlVnVlIHtcbiAgQFByb3AoKSBxdWVzdGlvbjogUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZTtcbiAgZ2V0IHRhYmxlKCk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRNb2RlbCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5yZW5kZXJlZFRhYmxlO1xuICB9XG59XG5cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktbWF0cml4dGFibGVcIiwgTWF0cml4VGFibGUpO1xuZXhwb3J0IGRlZmF1bHQgTWF0cml4VGFibGU7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIE11bHRpcGxlVGV4dCBleHRlbmRzIFF1ZXN0aW9uVnVlPFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWw+IHtcbiAgZ2V0Q29tcG9uZW50TmFtZShxdWVzdGlvbjogUXVlc3Rpb24pIHtcbiAgICBpZiAocXVlc3Rpb24uY3VzdG9tV2lkZ2V0KSB7XG4gICAgICByZXR1cm4gXCJzdXJ2ZXktY3VzdG9td2lkZ2V0XCI7XG4gICAgfVxuICAgIHJldHVybiBcInN1cnZleS10ZXh0XCI7XG4gIH1cbiAgZ2V0IGhhc0Vycm9yc09uVG9wKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnN1cnZleS5xdWVzdGlvbkVycm9yTG9jYXRpb24gPT09IFwidG9wXCI7XG4gIH1cbiAgZ2V0IGhhc0Vycm9yc09uQm90dG9tKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnN1cnZleS5xdWVzdGlvbkVycm9yTG9jYXRpb24gPT09IFwiYm90dG9tXCI7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktbXVsdGlwbGV0ZXh0XCIsIE11bHRpcGxlVGV4dCk7XG5leHBvcnQgZGVmYXVsdCBNdWx0aXBsZVRleHQ7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wLCBXYXRjaCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCwgQmFzZSwgUGFnZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlVnVlIH0gZnJvbSBcIi4vYmFzZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgTmF2aWdhdGlvbiBleHRlbmRzIEJhc2VWdWUge1xuICBwcml2YXRlIG1vdXNlRG93blBhZ2U6IFBhZ2VNb2RlbDtcbiAgc2hvd1ByZXZCdG46IGJvb2xlYW4gPSB0cnVlO1xuICBzaG93TmV4dEJ0bjogYm9vbGVhbiA9IHRydWU7XG4gIHNob3dDb21wbGV0ZUJ0bjogYm9vbGVhbiA9IHRydWU7XG4gIEBQcm9wKCkgc3VydmV5OiBTdXJ2ZXlNb2RlbDtcbiAgQFByb3AoKSBjc3M6IGFueTtcbiAgcHJvdGVjdGVkIGdldE1vZGVsKCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnN1cnZleTtcbiAgfVxuICBAV2F0Y2goXCJzdXJ2ZXlcIilcbiAgb25Qcm9wZXJ0eUNoYW5nZWQodmFsdWU6IHN0cmluZywgb2xkVmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMub25DcmVhdGVkKCk7XG4gICAgdGhpcy51cGRhdGVTaG93QnV0dG9ucygpO1xuICB9XG4gIHByb3RlY3RlZCBvbk1vdW50ZWQoKSB7XG4gICAgdGhpcy5zdXJ2ZXkub25DdXJyZW50UGFnZUNoYW5nZWQuYWRkKChzZW5kZXIsIG9wdGlvbnMpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlU2hvd0J1dHRvbnMoKTtcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZVNob3dCdXR0b25zKCk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVTaG93QnV0dG9ucygpIHtcbiAgICB0aGlzLnNob3dQcmV2QnRuID0gdGhpcy5zdXJ2ZXkuaXNTaG93UHJldkJ1dHRvbjtcbiAgICB0aGlzLnNob3dOZXh0QnRuID0gdGhpcy5zdXJ2ZXkuaXNTaG93TmV4dEJ1dHRvbjtcbiAgICB0aGlzLnNob3dDb21wbGV0ZUJ0biA9IHRoaXMuc3VydmV5LmlzTGFzdFBhZ2U7XG4gIH1cbiAgbmV4dEJ1dHRvbk1vdXNlRG93bigpIHtcbiAgICB0aGlzLm1vdXNlRG93blBhZ2UgPSB0aGlzLnN1cnZleS5jdXJyZW50UGFnZTtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkubmF2aWdhdGlvbk1vdXNlRG93bigpO1xuICB9XG4gIGJ1dHRvbk1vdXNlRG93bigpIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkubmF2aWdhdGlvbk1vdXNlRG93bigpO1xuICB9XG4gIHByZXZQYWdlKCkge1xuICAgIHRoaXMuc3VydmV5LnByZXZQYWdlKCk7XG4gIH1cbiAgbmV4dFBhZ2UoKSB7XG4gICAgaWYgKCEhdGhpcy5tb3VzZURvd25QYWdlICYmIHRoaXMubW91c2VEb3duUGFnZSAhPT0gdGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2UpXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5tb3VzZURvd25QYWdlID0gbnVsbDtcbiAgICB0aGlzLnN1cnZleS5uZXh0UGFnZSgpO1xuICB9XG4gIGNvbXBsZXRlTGFzdFBhZ2UoKSB7XG4gICAgdGhpcy5zdXJ2ZXkuY29tcGxldGVMYXN0UGFnZSgpO1xuICB9XG4gIHNob3dQcmV2aWV3KCkge1xuICAgIHRoaXMuc3VydmV5LnNob3dQcmV2aWV3KCk7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktbmF2aWdhdGlvblwiLCBOYXZpZ2F0aW9uKTtcbmV4cG9ydCBkZWZhdWx0IE5hdmlnYXRpb247XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIE90aGVyQ2hvaWNlIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AoKSBxdWVzdGlvbjogUXVlc3Rpb247XG4gIEBQcm9wKCkgY29tbWVudENsYXNzOiBhbnk7XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LW90aGVyLWNob2ljZVwiLCBPdGhlckNob2ljZSk7XG5leHBvcnQgZGVmYXVsdCBPdGhlckNob2ljZTtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wLCBXYXRjaCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgUGFnZU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBCYXNlVnVlIH0gZnJvbSBcIi4vYmFzZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUGFnZSBleHRlbmRzIEJhc2VWdWUge1xuICBAUHJvcCgpIHN1cnZleTogU3VydmV5TW9kZWw7XG4gIEBQcm9wKCkgcGFnZTogUGFnZU1vZGVsO1xuICBAUHJvcCgpIGNzczogT2JqZWN0O1xuXG4gIGlzQ3VycmVudFBhZ2VDaGFuZ2VkOiBib29sZWFuID0gZmFsc2U7XG4gIEBXYXRjaChcInBhZ2VcIilcbiAgb25QYWdlUHJvcGVydHlDaGFuZ2VkKHZhbHVlOiBzdHJpbmcsIG9sZFZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmlzQ3VycmVudFBhZ2VDaGFuZ2VkID0gdHJ1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0TW9kZWwoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucGFnZTtcbiAgfVxuICBwcm90ZWN0ZWQgb25Nb3VudGVkKCkge1xuICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgdGhpcy5zdXJ2ZXkuYWZ0ZXJSZW5kZXJQYWdlKHRoaXMuJGVsIGFzIEhUTUxFbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIG9uVXBkYXRlZCgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgc2VsZi5zdXJ2ZXkuYWZ0ZXJSZW5kZXJQYWdlKHRoaXMuJGVsIGFzIEhUTUxFbGVtZW50KTtcbiAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLmlzQ3VycmVudFBhZ2VDaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMuaXNDdXJyZW50UGFnZUNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgc2VsZi5zdXJ2ZXkuc2Nyb2xsVG9Ub3BPblBhZ2VDaGFuZ2UoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBnZXQgc2hvd0Rlc2NyaXB0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnBhZ2UuX3Nob3dEZXNjcmlwdGlvbjtcbiAgfVxuICBnZXQgbnVtKCkge1xuICAgIHJldHVybiB0aGlzLnBhZ2UubnVtID4gMCA/IHRoaXMucGFnZS5udW0gKyBcIi4gXCIgOiBcIlwiO1xuICB9XG4gIGdldCByb3dzKCk6IEFycmF5PGFueT4ge1xuICAgIHJldHVybiB0aGlzLnBhZ2Uucm93cztcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1wYWdlXCIsIFBhZ2UpO1xuZXhwb3J0IGRlZmF1bHQgUGFnZTtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFBhbmVsTW9kZWwsIEJhc2UsIGRvS2V5MkNsaWNrVXAsIElTdXJ2ZXksIFF1ZXN0aW9uUm93TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IEJhc2VWdWUgfSBmcm9tIFwiLi9iYXNlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBQYW5lbCBleHRlbmRzIEJhc2VWdWUge1xuICBAUHJvcCgpIHF1ZXN0aW9uOiBQYW5lbE1vZGVsO1xuICBAUHJvcCgpIGlzRWRpdE1vZGU6IEJvb2xlYW47XG4gIEBQcm9wKCkgY3NzOiBhbnk7XG5cbiAgcHJpdmF0ZSBpc0NvbGxhcHNlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBnZXRNb2RlbCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbjtcbiAgfVxuICBwcm90ZWN0ZWQgb25Nb3VudGVkKCkge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLnN1cnZleSkge1xuICAgICAgdGhpcy5xdWVzdGlvbi5zdXJ2ZXkuYWZ0ZXJSZW5kZXJQYW5lbCh0aGlzLnF1ZXN0aW9uLCB0aGlzLiRlbCBhcyBIVE1MRWxlbWVudCk7XG4gICAgfVxuICAgIHRoaXMuaXNDb2xsYXBzZWQgPSB0aGlzLnF1ZXN0aW9uLmlzQ29sbGFwc2VkO1xuXG4gICAgdGhpcy5xdWVzdGlvbi5zdGF0ZUNoYW5nZWRDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgIHRoaXMuaXNDb2xsYXBzZWQgPSB0aGlzLnF1ZXN0aW9uLmlzQ29sbGFwc2VkO1xuICAgIH07XG4gIH1cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLnN0YXRlQ2hhbmdlZENhbGxiYWNrID0gbnVsbDtcbiAgfVxuICBnZXQgcm9vdFN0eWxlKCkge1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5yZW5kZXJXaWR0aCkge1xuICAgICAgKDxhbnk+cmVzdWx0KVtcImZsZXhCYXNpc1wiXSA9IHRoaXMucXVlc3Rpb24ucmVuZGVyV2lkdGg7XG4gICAgICAoPGFueT5yZXN1bHQpW1wiZmxleEdyb3dcIl0gPSAxO1xuICAgICAgKDxhbnk+cmVzdWx0KVtcImZsZXhTaHJpbmtcIl0gPSAxO1xuICAgICAgKDxhbnk+cmVzdWx0KVtcIndpZHRoXCJdID0gdGhpcy5xdWVzdGlvbi5yZW5kZXJXaWR0aDtcbiAgICAgICg8YW55PnJlc3VsdClbXCJtaW5XaWR0aFwiXSA9IHRoaXMucXVlc3Rpb24ubWluV2lkdGg7XG4gICAgICAoPGFueT5yZXN1bHQpW1wibWF4V2lkdGhcIl0gPSB0aGlzLnF1ZXN0aW9uLm1heFdpZHRoO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGdldCBzaG93SWNvbigpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5pc0V4cGFuZGVkIHx8IHRoaXMucXVlc3Rpb24uaXNDb2xsYXBzZWQ7XG4gIH1cbiAgZ2V0IHJvd3MoKTogUXVlc3Rpb25Sb3dNb2RlbFtdIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5yb3dzO1xuICB9XG4gIGdldCBzdXJ2ZXkoKTogSVN1cnZleSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uc3VydmV5O1xuICB9XG4gIGtleXVwKGV2dDogYW55KSB7XG4gICAgZG9LZXkyQ2xpY2tVcChldnQpO1xuICB9XG4gIGNhbmNlbFByZXZpZXcoKSB7XG4gICAgdGhpcy5xdWVzdGlvbi5jYW5jZWxQcmV2aWV3KCk7XG4gIH1cbiAgZ2V0IHJlcXVpcmVkVGV4dENzcygpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlcXVpcmVkVGV4dCB8fCB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucGFuZWwucmVxdWlyZWRUZXh0XG4gICAgKTtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1wYW5lbFwiLCBQYW5lbCk7XG5leHBvcnQgZGVmYXVsdCBQYW5lbDtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsLCBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFF1ZXN0aW9uVnVlIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFBhbmVsRHluYW1pYyBleHRlbmRzIFF1ZXN0aW9uVnVlPFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWw+IHtcbiAgZ2V0IHJlbmRlcmVkUGFuZWxzKCk6IFBhbmVsTW9kZWxbXSB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uaXNSZW5kZXJNb2RlTGlzdCkgcmV0dXJuIHRoaXMucXVlc3Rpb24ucGFuZWxzO1xuICAgIGNvbnN0IHBhbmVscyA9IFtdO1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmN1cnJlbnRQYW5lbCkge1xuICAgICAgcGFuZWxzLnB1c2godGhpcy5xdWVzdGlvbi5jdXJyZW50UGFuZWwpO1xuICAgIH1cbiAgICByZXR1cm4gcGFuZWxzO1xuICB9XG4gIGFkZFBhbmVsQ2xpY2soKSB7XG4gICAgdGhpcy5xdWVzdGlvbi5hZGRQYW5lbCgpO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LXBhbmVsZHluYW1pY1wiLCBQYW5lbER5bmFtaWMpO1xuZXhwb3J0IGRlZmF1bHQgUGFuZWxEeW5hbWljO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFF1ZXN0aW9uLCBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLCBDc3NDbGFzc0J1aWxkZXIgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUGFuZWxEeW5hbWljUHJvZ3Jlc3MgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCgpIHF1ZXN0aW9uOiBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsO1xuXG4gIGdldCBjc3NDbGFzcygpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5pc1Byb2dyZXNzVG9wU2hvd2luZ1xuICAgICAgPyB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3NUb3BcbiAgICAgIDogdGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzQm90dG9tO1xuICB9XG4gIGdldCByYW5nZU1heCgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5wYW5lbENvdW50IC0gMTtcbiAgfVxuICBhZGRQYW5lbENsaWNrKCkge1xuICAgIHRoaXMucXVlc3Rpb24uYWRkUGFuZWxVSSgpO1xuICB9XG4gIHByZXZQYW5lbENsaWNrKCkge1xuICAgIHRoaXMucXVlc3Rpb24uZ29Ub1ByZXZQYW5lbCgpO1xuICB9XG4gIG5leHRQYW5lbENsaWNrKCkge1xuICAgIHRoaXMucXVlc3Rpb24uZ29Ub05leHRQYW5lbCgpO1xuICB9XG5cbiAgY2hhbmdlUmFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24uY3VycmVudEluZGV4ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICB9XG5cbiAgZ2V0IHByb2dyZXNzKCkge1xuICAgIHJldHVybiAodGhpcy5xdWVzdGlvbi5jdXJyZW50SW5kZXggLyB0aGlzLnJhbmdlTWF4KSAqIDEwMCArIFwiJVwiO1xuICB9XG59XG5cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktcGFuZWxkeW5hbWljcHJvZ3Jlc3NcIiwgUGFuZWxEeW5hbWljUHJvZ3Jlc3MpO1xuZXhwb3J0IGRlZmF1bHQgUGFuZWxEeW5hbWljUHJvZ3Jlc3M7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgUGFuZWxEeW5hbWljUHJvZ3Jlc3MgfSBmcm9tIFwiLi9wYW5lbGR5bmFtaWNwcm9ncmVzcy52dWVcIjtcblxuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUGFuZWxEeW5hbWljUHJvZ3Jlc3NWMiBleHRlbmRzIFBhbmVsRHluYW1pY1Byb2dyZXNzIHtcbiAgZ2V0IHByb2dyZXNzQnV0dG9uU3ZnUGF0aCgpIHtcbiAgICByZXR1cm4gXCJNMTUgNy45OTk4SDQuMzk5OThMOC42OTk5OCAxMi4yOTk4TDcuMjk5OTggMTMuNjk5OEwwLjU5OTk3NiA2Ljk5OThMNy4yOTk5OCAwLjI5OTgwNUw4LjY5OTk4IDEuNjk5OEw0LjM5OTk4IDUuOTk5OEgxNVY3Ljk5OThaXCI7XG4gIH1cbn1cblxuVnVlLmNvbXBvbmVudChcInN1cnZleS1wYW5lbGR5bmFtaWNwcm9ncmVzcy12MlwiLCBQYW5lbER5bmFtaWNQcm9ncmVzc1YyKTtcbmV4cG9ydCBkZWZhdWx0IFBhbmVsRHluYW1pY1Byb2dyZXNzVjI7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFBhbmVsTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IElTdXJ2ZXkgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFBhbmVsRHluYW1pY1JlbW92ZSBleHRlbmRzIFZ1ZSB7XG4gIEBQcm9wKCkgcXVlc3Rpb246IFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWw7XG4gIEBQcm9wKCkgcGFuZWw6IFBhbmVsTW9kZWw7XG4gIHByaXZhdGUgaXNDb2xsYXBzZWRWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5pc0NvbGxhcHNlZCA9IHRoaXMucGFuZWwuaXNDb2xsYXBzZWQ7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMucGFuZWwucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXG4gICAgICBcInN0YXRlXCIsXG4gICAgICBmdW5jdGlvbih2YWw6IGFueSkge1xuICAgICAgICBzZWxmLmlzQ29sbGFwc2VkID0gc2VsZi5wYW5lbC5pc0NvbGxhcHNlZDtcbiAgICAgIH0sXG4gICAgICBcImJ1dHRvblwiXG4gICAgKTtcbiAgfVxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMucGFuZWwudW5SZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcInN0YXRlXCIsIFwiYnV0dG9uXCIpO1xuICB9XG4gIHJlbW92ZVBhbmVsQ2xpY2socGFuZWw6IGFueSkge1xuICAgIGlmICghdGhpcy5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHkpIHtcbiAgICAgIHRoaXMucXVlc3Rpb24ucmVtb3ZlUGFuZWxVSShwYW5lbCk7XG4gICAgfVxuICB9XG4gIGdldCBpc0NvbGxhcHNlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc0NvbGxhcHNlZFZhbHVlO1xuICB9XG4gIHNldCBpc0NvbGxhcHNlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzQ29sbGFwc2VkVmFsdWUgPSB2YWw7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktcGFuZWxkeW5hbWljcmVtb3ZlXCIsIFBhbmVsRHluYW1pY1JlbW92ZSk7XG5leHBvcnQgZGVmYXVsdCBQYW5lbER5bmFtaWNSZW1vdmU7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwsIFN1cnZleVByb2dyZXNzTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFByb2dyZXNzIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AoKSBzdXJ2ZXk6IFN1cnZleU1vZGVsO1xuICBAUHJvcCgpIGNzczogYW55O1xuICBwdWJsaWMgZ2V0IHByb2dyZXNzKCkge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5wcm9ncmVzc1ZhbHVlICsgXCIlXCI7XG4gIH1cbiAgcHVibGljIGdldFByb2dyZXNzVGV4dEluQmFyQ3NzKGNzczogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gU3VydmV5UHJvZ3Jlc3NNb2RlbC5nZXRQcm9ncmVzc1RleHRJbkJhckNzcyhjc3MpO1xuICB9XG4gIHB1YmxpYyBnZXRQcm9ncmVzc1RleHRVbmRlckJhckNzcyhjc3M6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFN1cnZleVByb2dyZXNzTW9kZWwuZ2V0UHJvZ3Jlc3NUZXh0VW5kZXJCYXJDc3MoY3NzKTtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN2LXByb2dyZXNzLXBhZ2VzXCIsIFByb2dyZXNzKTtcblZ1ZS5jb21wb25lbnQoXCJzdi1wcm9ncmVzcy1xdWVzdGlvbnNcIiwgUHJvZ3Jlc3MpO1xuVnVlLmNvbXBvbmVudChcInN2LXByb2dyZXNzLWNvcnJlY3RRdWVzdGlvbnNcIiwgUHJvZ3Jlc3MpO1xuVnVlLmNvbXBvbmVudChcInN2LXByb2dyZXNzLXJlcXVpcmVkUXVlc3Rpb25zXCIsIFByb2dyZXNzKTtcbmV4cG9ydCBkZWZhdWx0IFByb2dyZXNzO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCwgU3VydmV5UHJvZ3Jlc3NCdXR0b25zTW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFByb2dyZXNzQnV0dG9ucyBleHRlbmRzIFZ1ZSB7XG4gIEBQcm9wKCkgc3VydmV5OiBTdXJ2ZXlNb2RlbDtcbiAgQFByb3AoKSBjc3M6IGFueTtcbiAgcHVibGljIGhhc1Njcm9sbGVyOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgcHJvZ3Jlc3NCdXR0b25zTW9kZWw6IFN1cnZleVByb2dyZXNzQnV0dG9uc01vZGVsO1xuICBwcml2YXRlIHVwZGF0ZVNjcm9sbGVyOiBhbnkgPSB1bmRlZmluZWQ7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5wcm9ncmVzc0J1dHRvbnNNb2RlbCA9IG5ldyBTdXJ2ZXlQcm9ncmVzc0J1dHRvbnNNb2RlbCh0aGlzLnN1cnZleSk7XG4gIH1cbiAgbW91bnRlZCgpIHtcbiAgICBjb25zdCBsaXN0Q29udGFpbmVyRWxlbWVudDogYW55ID0gdGhpcy4kcmVmc1tcInByb2dyZXNzQnV0dG9uc0xpc3RDb250YWluZXJcIl07XG4gICAgdGhpcy51cGRhdGVTY3JvbGxlciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMuaGFzU2Nyb2xsZXIgPVxuICAgICAgICBsaXN0Q29udGFpbmVyRWxlbWVudC5zY3JvbGxXaWR0aCA+IGxpc3RDb250YWluZXJFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgIH0sIDEwMCk7XG4gIH1cbiAgcHVibGljIGlzTGlzdEVsZW1lbnRDbGlja2FibGUoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb2dyZXNzQnV0dG9uc01vZGVsLmlzTGlzdEVsZW1lbnRDbGlja2FibGUoaW5kZXgpO1xuICB9XG4gIHB1YmxpYyBnZXRMaXN0RWxlbWVudENzcyhpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9ncmVzc0J1dHRvbnNNb2RlbC5nZXRMaXN0RWxlbWVudENzcyhpbmRleCk7XG4gIH1cbiAgcHVibGljIGNsaWNrTGlzdEVsZW1lbnQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucHJvZ3Jlc3NCdXR0b25zTW9kZWwuY2xpY2tMaXN0RWxlbWVudChpbmRleCk7XG4gIH1cbiAgcHVibGljIGdldFNjcm9sbEJ1dHRvbkNzcyhoYXNTY3JvbGxlcjogYm9vbGVhbiwgaXNMZWZ0U2Nyb2xsOiBib29sZWFuKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5wcm9ncmVzc0J1dHRvbnNNb2RlbC5nZXRTY3JvbGxCdXR0b25Dc3MoaGFzU2Nyb2xsZXIsIGlzTGVmdFNjcm9sbCk7XG4gIH1cbiAgcHVibGljIGNsaWNrU2Nyb2xsQnV0dG9uKGlzTGVmdFNjcm9sbDogYm9vbGVhbik6IHZvaWQge1xuICAgIGxldCBsaXN0Q29udGFpbmVyRWxlbWVudDogYW55ID0gdGhpcy4kcmVmc1tcInByb2dyZXNzQnV0dG9uc0xpc3RDb250YWluZXJcIl07XG4gICAgbGlzdENvbnRhaW5lckVsZW1lbnQuc2Nyb2xsTGVmdCArPSAoaXNMZWZ0U2Nyb2xsID8gLTEgOiAxKSAqIDcwO1xuICB9XG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLnVwZGF0ZVNjcm9sbGVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMudXBkYXRlU2Nyb2xsZXIpO1xuICAgICAgdGhpcy51cGRhdGVTY3JvbGxlciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cblxuVnVlLmNvbXBvbmVudChcInN2LXByb2dyZXNzLWJ1dHRvbnNcIiwgUHJvZ3Jlc3NCdXR0b25zKTtcbmV4cG9ydCBkZWZhdWx0IFByb2dyZXNzQnV0dG9ucztcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUmFkaW9ncm91cCBleHRlbmRzIFF1ZXN0aW9uVnVlPFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsPiB7XG4gIGdldCBjaG9pY2VzQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24udmlzaWJsZUNob2ljZXMubGVuZ3RoIC0gMTtcbiAgfVxuICBnZXRJdGVtQ2xhc3MoaXRlbTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKGl0ZW0pO1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LXJhZGlvZ3JvdXBcIiwgUmFkaW9ncm91cCk7XG5leHBvcnQgZGVmYXVsdCBSYWRpb2dyb3VwO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCB7IEl0ZW1WYWx1ZSwgQmFzZSB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgQmFzZVZ1ZSB9IGZyb20gXCIuL2Jhc2VcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFJhZGlvZ3JvdXBJdGVtIGV4dGVuZHMgQmFzZVZ1ZSB7XG4gIEBQcm9wKCkgcXVlc3Rpb246IGFueTtcbiAgQFByb3AoKSBpdGVtOiBJdGVtVmFsdWU7XG4gIEBQcm9wKCkgaW5kZXg6IGFueTtcbiAgQFByb3AoKSBoaWRlTGFiZWw6IGJvb2xlYW47XG4gIHByb3RlY3RlZCBnZXRNb2RlbCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtO1xuICB9XG4gIGdldExhYmVsQ2xhc3MoaXRlbTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uZ2V0TGFiZWxDbGFzcyhpdGVtKTtcbiAgfVxuICBnZXRDb250cm9sTGFiZWxDbGFzcyhpdGVtOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5nZXRDb250cm9sTGFiZWxDbGFzcyhpdGVtKTtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1yYWRpb2dyb3VwLWl0ZW1cIiwgUmFkaW9ncm91cEl0ZW0pO1xuZXhwb3J0IGRlZmF1bHQgUmFkaW9ncm91cEl0ZW07XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUsIFF1ZXN0aW9uUmFua2luZ01vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCJcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFJhbmtpbmdJdGVtIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AoKSBpbmRleDogbnVtYmVyO1xuICBAUHJvcCgpIGluZGV4VGV4dDogc3RyaW5nO1xuICBAUHJvcCgpIHRleHQ6IHN0cmluZztcbiAgQFByb3AoKSBoYW5kbGVLZXlkb3duOiAoKT0+e307XG4gIEBQcm9wKCkgY3NzQ2xhc3NlczogYW55XG4gIEBQcm9wKCkgcXVlc3Rpb246IFF1ZXN0aW9uUmFua2luZ01vZGVsXG4gIEBQcm9wKCkgaXRlbTogSXRlbVZhbHVlXG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LXJhbmtpbmctaXRlbVwiLCBSYW5raW5nSXRlbSk7XG5leHBvcnQgZGVmYXVsdCBSYW5raW5nSXRlbTtcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIFF1ZXN0aW9uVnVlIH0gZnJvbSBcIi4uL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvblJhbmtpbmdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUmFua2luZyBleHRlbmRzIFF1ZXN0aW9uVnVlPFF1ZXN0aW9uUmFua2luZ01vZGVsPiB7fVxuXG5WdWUuY29tcG9uZW50KFwic3VydmV5LXJhbmtpbmdcIiwgUmFua2luZyk7XG5leHBvcnQgZGVmYXVsdCBSYW5raW5nO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25SYXRpbmdNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUmF0aW5nIGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25SYXRpbmdNb2RlbD4ge1xuICBnZXRSb290Q2xhc3MocXVlc3Rpb246IFF1ZXN0aW9uUmF0aW5nTW9kZWwpIHtcbiAgICBjb25zdCBjbGFzc2VzID0gcXVlc3Rpb24uY3NzQ2xhc3NlcztcbiAgICBpZiAocXVlc3Rpb24uaXNSZWFkT25seSkgcmV0dXJuIGNsYXNzZXMucm9vdCArIFwiIFwiICsgY2xhc3Nlcy5kaXNhYmxlZDtcbiAgICByZXR1cm4gY2xhc3Nlcy5yb290O1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LXJhdGluZ1wiLCBSYXRpbmcpO1xuZXhwb3J0IGRlZmF1bHQgUmF0aW5nO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFF1ZXN0aW9uUm93TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IEJhc2VWdWUgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBSb3cgZXh0ZW5kcyBCYXNlVnVlIHtcbiAgQFByb3AoKSByb3c6IFF1ZXN0aW9uUm93TW9kZWw7XG4gIEBQcm9wKCkgY3NzOiBhbnk7XG4gIEBQcm9wKCkgc3VydmV5OiBTdXJ2ZXlNb2RlbDtcblxuICBwcm90ZWN0ZWQgZ2V0TW9kZWwoKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMucm93O1xuICB9XG4gIHByb3RlY3RlZCBvbk1vdW50ZWQoKSB7XG4gICAgaWYgKCEhdGhpcy5yb3cpIHtcbiAgICAgIGlmICghdGhpcy5yb3cuaXNOZWVkUmVuZGVyKSB7XG4gICAgICAgIHZhciByb3dDb250YWluZXJEaXYgPSB0aGlzLiRlbDtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yb3cuc3RhcnRMYXp5UmVuZGVyaW5nKHJvd0NvbnRhaW5lckRpdiBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgIH0sIDEwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICBpZiAoISF0aGlzLnJvdykge1xuICAgICAgdGhpcy5yb3cuaXNOZWVkUmVuZGVyID0gIXRoaXMucm93LmlzTGF6eVJlbmRlcmluZygpO1xuICAgIH1cbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS1yb3dcIiwgUm93KTtcbmV4cG9ydCBkZWZhdWx0IFJvdztcbiIsIlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgUXVlc3Rpb25WdWUgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25TaWduYXR1cmVQYWRNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgU2lnbmF0dXJlUGFkIGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25TaWduYXR1cmVQYWRNb2RlbD4ge31cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktc2lnbmF0dXJlcGFkXCIsIFNpZ25hdHVyZVBhZCk7XG5leHBvcnQgZGVmYXVsdCBTaWduYXR1cmVQYWQ7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5pbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgU3VydmV5U3RyaW5nRWRpdG9yIGV4dGVuZHMgVnVlIHtcbiAgQFByb3AoKSBsb2NTdHJpbmc6IExvY2FsaXphYmxlU3RyaW5nO1xuXG4gIG9uSW5wdXQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMubG9jU3RyaW5nLnRleHQgPSBldmVudC50YXJnZXQuaW5uZXJUZXh0O1xuICB9O1xuICBvbkNsaWNrID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9O1xufVxuXG5WdWUuY29tcG9uZW50KExvY2FsaXphYmxlU3RyaW5nLmVkaXRhYmxlUmVuZGVyZXIsIFN1cnZleVN0cmluZ0VkaXRvcik7XG5leHBvcnQgZGVmYXVsdCBTdXJ2ZXlTdHJpbmdFZGl0b3I7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlTdHJpbmdWaWV3ZXIgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCgpIGxvY1N0cmluZzogTG9jYWxpemFibGVTdHJpbmc7XG59XG5cblZ1ZS5jb21wb25lbnQoTG9jYWxpemFibGVTdHJpbmcuZGVmYXVsdFJlbmRlcmVyLCBTdXJ2ZXlTdHJpbmdWaWV3ZXIpO1xuZXhwb3J0IGRlZmF1bHQgU3VydmV5U3RyaW5nVmlld2VyO1xuIiwiXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlTdHJpbmcgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCgpIGxvY1N0cmluZzogTG9jYWxpemFibGVTdHJpbmc7XG59XG5cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktc3RyaW5nXCIsIFN1cnZleVN0cmluZyk7XG5leHBvcnQgZGVmYXVsdCBTdXJ2ZXlTdHJpbmc7XG4iLCJcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmltcG9ydCBWdWUgZnJvbSBcInZ1ZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wLCBXYXRjaCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBCYXNlLCBTdHlsZXNNYW5hZ2VyLCBzdXJ2ZXlDc3MgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IFZ1ZVN1cnZleU1vZGVsIGFzIFN1cnZleU1vZGVsIH0gZnJvbSBcIi4vc3VydmV5TW9kZWxcIjtcbmltcG9ydCB7IEJhc2VWdWUgfSBmcm9tIFwiLi9iYXNlXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBTdXJ2ZXkgZXh0ZW5kcyBCYXNlVnVlIHtcbiAgQFByb3AoKSBzdXJ2ZXk6IFN1cnZleU1vZGVsO1xuICBwcm9jZXNzZWRDb21wbGV0ZWRIdG1sVmFsdWU6IHN0cmluZztcbiAgY3VycmVudFBhZ2VJZDogbnVtYmVyID0gMTtcbiAgZ2V0IHBhZ2VJZCgpIHtcbiAgICByZXR1cm4gXCJwYWdlXCIgKyB0aGlzLmN1cnJlbnRQYWdlSWQudG9TdHJpbmcoKTtcbiAgfVxuICBnZXQgbmF2SWQoKSB7XG4gICAgcmV0dXJuIFwibmF2XCIgKyB0aGlzLmN1cnJlbnRQYWdlSWQudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGZvcmNlVXBkYXRlKCkge1xuICAgIHRoaXMuJGZvcmNlVXBkYXRlKCk7XG4gICAgdGhpcy5jdXJyZW50UGFnZUlkKys7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRNb2RlbCgpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXk7XG4gIH1cbiAgQFdhdGNoKFwic3VydmV5XCIpXG4gIG9uUHJvcGVydHlDaGFuZ2VkKHZhbHVlOiBzdHJpbmcsIG9sZFZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLm9uQ3JlYXRlZCgpO1xuICAgIHRoaXMuc3VydmV5T25Nb3VudGVkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uTW91bnRlZCgpIHtcbiAgICB0aGlzLnN1cnZleU9uTW91bnRlZCgpO1xuICB9XG4gIHByaXZhdGUgc3VydmV5T25Nb3VudGVkKCkge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkpIHJldHVybjtcbiAgICBWdWUuc2V0KHRoaXMuc3VydmV5LCBcImN1cnJlbnRQYWdlXCIsIHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlKTtcbiAgICB0aGlzLnN1cnZleS5vbkN1cnJlbnRQYWdlQ2hhbmdlZC5hZGQoKHNlbmRlciwgb3B0aW9ucykgPT4ge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZUlkKys7XG4gICAgfSk7XG4gICAgdGhpcy5zdXJ2ZXkub25QYWdlVmlzaWJsZUNoYW5nZWQuYWRkKChzZW5kZXIsIG9wdGlvbnMpID0+IHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2VJZCsrO1xuICAgIH0pO1xuICAgIHZhciBlbCA9IHRoaXMuJGVsO1xuICAgIGlmIChlbCkgdGhpcy5zdXJ2ZXkuZG9BZnRlclJlbmRlclN1cnZleShlbCk7XG4gICAgdGhpcy5zdXJ2ZXkucmVuZGVyQ2FsbGJhY2sgPSB0aGlzLmZvcmNlVXBkYXRlO1xuICAgIHRoaXMuc3VydmV5LnN0YXJ0VGltZXJGcm9tVUkoKTtcbiAgfVxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuc3VydmV5LnN0b3BUaW1lcigpO1xuICAgIHRoaXMuc3VydmV5LnJlbmRlckNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0IGhhc1RpdGxlKCkge1xuICAgIHJldHVybiAhIXRoaXMuc3VydmV5LnRpdGxlICYmIHRoaXMuc3VydmV5LnNob3dUaXRsZTtcbiAgfVxuICBnZXQgaGFzQ29tcGxldGVkUGFnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkuc2hvd0NvbXBsZXRlZFBhZ2UgJiYgdGhpcy5zdXJ2ZXkuc3RhdGUgPT09IFwiY29tcGxldGVkXCI7XG4gIH1cbiAgZ2V0IGNzcygpIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkuY3NzO1xuICB9XG4gIGdldFByb2Nlc3NlZENvbXBsZXRlZEh0bWwoKSB7XG4gICAgaWYgKCF0aGlzLmhhc0NvbXBsZXRlZFBhZ2UpIHJldHVybiBcIlwiO1xuICAgIGlmICghdGhpcy5wcm9jZXNzZWRDb21wbGV0ZWRIdG1sVmFsdWUpIHtcbiAgICAgIHRoaXMucHJvY2Vzc2VkQ29tcGxldGVkSHRtbFZhbHVlID0gdGhpcy5zdXJ2ZXkucHJvY2Vzc2VkQ29tcGxldGVkSHRtbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc2VkQ29tcGxldGVkSHRtbFZhbHVlO1xuICB9XG4gIGdldENvbXBsZXRlZFN0YXRlQ2xhc3NlcygpIHtcbiAgICByZXR1cm4gdGhpcy5jc3Muc2F2ZURhdGFbdGhpcy5zdXJ2ZXkuY29tcGxldGVkU3RhdGVdO1xuICB9XG4gIHN0YXJ0KCkge1xuICAgIHRoaXMuc3VydmV5LnN0YXJ0KCk7XG4gIH1cbiAgZG9UcnlTYXZlQWdhaW4oKSB7XG4gICAgdGhpcy5zdXJ2ZXkuZG9Db21wbGV0ZSgpO1xuICB9XG59XG5cbi8vIFRPRE86IG1ha2UgdGhpcyBmdW5jdGlvbmFsaXR5IGF2YWlsYWJsZSB2aWEgc3VydmV5Q3NzIGluIGFsbCBleGFtcGxlc1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1cnZleSwgXCJjc3NUeXBlXCIsIHtcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gc3VydmV5Q3NzLmN1cnJlbnRUeXBlO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uKG5ld1R5cGUpIHtcbiAgICBTdHlsZXNNYW5hZ2VyLmFwcGx5VGhlbWUobmV3VHlwZSk7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG59KTtcblxuVnVlLmNvbXBvbmVudChcInN1cnZleVwiLCBTdXJ2ZXkpO1xuZXhwb3J0IGRlZmF1bHQgU3VydmV5O1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBRdWVzdGlvblRleHRNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUXVlc3Rpb25UZXh0IGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25UZXh0TW9kZWw+IHtcbiAgY2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICB9XG4gIGtleXVwKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb24uaXNJbnB1dFRleHRVcGRhdGUpIHJldHVybjtcbiAgICB0aGlzLnF1ZXN0aW9uLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICB9XG4gIGdldCBpbnB1dFN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uaW5wdXRTdHlsZTtcbiAgfVxufVxuVnVlLmNvbXBvbmVudChcInN1cnZleS10ZXh0XCIsIFF1ZXN0aW9uVGV4dCk7XG5leHBvcnQgZGVmYXVsdCBRdWVzdGlvblRleHQ7XG4iLCJcblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AgfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcblxuQENvbXBvbmVudFxuZXhwb3J0IGNsYXNzIFRpbWVyUGFuZWwgZXh0ZW5kcyBWdWUge1xuICBAUHJvcCgpIHN1cnZleTogU3VydmV5TW9kZWw7XG4gIEBQcm9wKCkgY3NzOiBhbnk7XG4gIGdldCB0ZXh0KCkge1xuICAgIHJldHVybiB0aGlzLnN1cnZleS50aW1lckluZm9UZXh0O1xuICB9XG59XG5WdWUuY29tcG9uZW50KFwic3VydmV5LXRpbWVycGFuZWxcIiwgVGltZXJQYW5lbCk7XG5leHBvcnQgZGVmYXVsdCBUaW1lclBhbmVsO1xuIiwiXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuaW1wb3J0IFZ1ZSBmcm9tIFwidnVlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFByb3AsIFdhdGNoIH0gZnJvbSBcInZ1ZS1wcm9wZXJ0eS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlXaW5kb3dNb2RlbCB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgVnVlU3VydmV5V2luZG93TW9kZWwgfSBmcm9tIFwiLi9zdXJ2ZXlNb2RlbFwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgV2luZG93IGV4dGVuZHMgVnVlIHtcbiAgQFByb3AoKSB3aW5kb3c6IFN1cnZleVdpbmRvd01vZGVsO1xuICBAUHJvcCgpIHN1cnZleTogU3VydmV5TW9kZWw7XG4gIEBQcm9wKCkgaXNFeHBhbmRlZDogYm9vbGVhbjtcbiAgQFByb3AoKSBpc2V4cGFuZGVkOiBib29sZWFuO1xuICBAUHJvcCgpIGNsb3NlT25Db21wbGV0ZVRpbWVvdXQ6IG51bWJlcjtcblxuICBzdXJ2ZXlXaW5kb3c6IFN1cnZleVdpbmRvd01vZGVsO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGlmICh0aGlzLndpbmRvdykge1xuICAgICAgdGhpcy5zdXJ2ZXlXaW5kb3cgPSB0aGlzLndpbmRvdztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdXJ2ZXlXaW5kb3cgPSBuZXcgVnVlU3VydmV5V2luZG93TW9kZWwobnVsbCwgdGhpcy5zdXJ2ZXkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc2V4cGFuZGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc3VydmV5V2luZG93LmlzRXhwYW5kZWQgPSB0aGlzLmlzZXhwYW5kZWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzRXhwYW5kZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zdXJ2ZXlXaW5kb3cuaXNFeHBhbmRlZCA9IHRoaXMuaXNFeHBhbmRlZDtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2xvc2VPbkNvbXBsZXRlVGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnN1cnZleVdpbmRvdy5jbG9zZU9uQ29tcGxldGVUaW1lb3V0ID0gdGhpcy5jbG9zZU9uQ29tcGxldGVUaW1lb3V0O1xuICAgIH1cbiAgICB0aGlzLnN1cnZleVdpbmRvdy5pc1Nob3dpbmcgPSB0cnVlO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnN1cnZleVdpbmRvdy5jbG9zZVdpbmRvd09uQ29tcGxldGVDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuZG9IaWRlKCk7XG4gICAgfTtcbiAgfVxuICBnZXQgd2luZG93U3VydmV5KCk6IFN1cnZleU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXlXaW5kb3cuc3VydmV5O1xuICB9XG4gIGdldCBjc3MoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5nZXRDc3MoKSA6IHt9O1xuICB9XG4gIGdldCBleHBhbmRlZENzcygpIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXlXaW5kb3cuaXNFeHBhbmRlZFxuICAgICAgPyB0aGlzLmNzcy53aW5kb3cuaGVhZGVyLmJ1dHRvbkNvbGxhcHNlZFxuICAgICAgOiB0aGlzLmNzcy53aW5kb3cuaGVhZGVyLmJ1dHRvbkV4cGFuZGVkO1xuICB9XG4gIGdldCBpc0V4cGFuZGVkU3VydmV5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN1cnZleVdpbmRvdy5pc0V4cGFuZGVkO1xuICB9XG4gIHNldCBpc0V4cGFuZGVkU3VydmV5KHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc3VydmV5V2luZG93LmlzRXhwYW5kZWQgPSB2YWw7XG4gIH1cbiAgZG9FeHBhbmQoKSB7XG4gICAgdGhpcy5zdXJ2ZXlXaW5kb3cuaXNFeHBhbmRlZCA9ICF0aGlzLnN1cnZleVdpbmRvdy5pc0V4cGFuZGVkO1xuICB9XG4gIGRvSGlkZSgpIHtcbiAgICBWdWUuc2V0KHRoaXMuc3VydmV5V2luZG93LCBcImlzU2hvd2luZ1wiLCBmYWxzZSk7XG4gIH1cbn1cblZ1ZS5jb21wb25lbnQoXCJzdXJ2ZXktd2luZG93XCIsIFdpbmRvdyk7XG5leHBvcnQgZGVmYXVsdCBXaW5kb3c7XG4iLCIvKipcbiAgKiB2dWUtY2xhc3MtY29tcG9uZW50IHY3LjIuNlxuICAqIChjKSAyMDE1LXByZXNlbnQgRXZhbiBZb3VcbiAgKiBAbGljZW5zZSBNSVRcbiAgKi9cbmltcG9ydCBWdWUgZnJvbSAndnVlJztcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7XG4gICAgX3R5cGVvZiA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgX3R5cGVvZiA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gX3R5cGVvZihvYmopO1xufVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikge1xuICByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpO1xufVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShhcnIubGVuZ3RoKTsgaSA8IGFyci5sZW5ndGg7IGkrKykgYXJyMltpXSA9IGFycltpXTtcblxuICAgIHJldHVybiBhcnIyO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikge1xuICBpZiAoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChpdGVyKSB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaXRlcikgPT09IFwiW29iamVjdCBBcmd1bWVudHNdXCIpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xufVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTtcbn1cblxuLy8gVGhlIHJhdGlvbmFsIGJlaGluZCB0aGUgdmVyYm9zZSBSZWZsZWN0LWZlYXR1cmUgY2hlY2sgYmVsb3cgaXMgdGhlIGZhY3QgdGhhdCB0aGVyZSBhcmUgcG9seWZpbGxzXG4vLyB3aGljaCBhZGQgYW4gaW1wbGVtZW50YXRpb24gZm9yIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEgYnV0IG5vdCBmb3IgUmVmbGVjdC5nZXRPd25NZXRhZGF0YUtleXMuXG4vLyBXaXRob3V0IHRoaXMgY2hlY2sgY29uc3VtZXJzIHdpbGwgZW5jb3VudGVyIGhhcmQgdG8gdHJhY2sgZG93biBydW50aW1lIGVycm9ycy5cbmZ1bmN0aW9uIHJlZmxlY3Rpb25Jc1N1cHBvcnRlZCgpIHtcbiAgcmV0dXJuIHR5cGVvZiBSZWZsZWN0ICE9PSAndW5kZWZpbmVkJyAmJiBSZWZsZWN0LmRlZmluZU1ldGFkYXRhICYmIFJlZmxlY3QuZ2V0T3duTWV0YWRhdGFLZXlzO1xufVxuZnVuY3Rpb24gY29weVJlZmxlY3Rpb25NZXRhZGF0YSh0bywgZnJvbSkge1xuICBmb3J3YXJkTWV0YWRhdGEodG8sIGZyb20pO1xuICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhmcm9tLnByb3RvdHlwZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgZm9yd2FyZE1ldGFkYXRhKHRvLnByb3RvdHlwZSwgZnJvbS5wcm90b3R5cGUsIGtleSk7XG4gIH0pO1xuICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhmcm9tKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBmb3J3YXJkTWV0YWRhdGEodG8sIGZyb20sIGtleSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBmb3J3YXJkTWV0YWRhdGEodG8sIGZyb20sIHByb3BlcnR5S2V5KSB7XG4gIHZhciBtZXRhS2V5cyA9IHByb3BlcnR5S2V5ID8gUmVmbGVjdC5nZXRPd25NZXRhZGF0YUtleXMoZnJvbSwgcHJvcGVydHlLZXkpIDogUmVmbGVjdC5nZXRPd25NZXRhZGF0YUtleXMoZnJvbSk7XG4gIG1ldGFLZXlzLmZvckVhY2goZnVuY3Rpb24gKG1ldGFLZXkpIHtcbiAgICB2YXIgbWV0YWRhdGEgPSBwcm9wZXJ0eUtleSA/IFJlZmxlY3QuZ2V0T3duTWV0YWRhdGEobWV0YUtleSwgZnJvbSwgcHJvcGVydHlLZXkpIDogUmVmbGVjdC5nZXRPd25NZXRhZGF0YShtZXRhS2V5LCBmcm9tKTtcblxuICAgIGlmIChwcm9wZXJ0eUtleSkge1xuICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShtZXRhS2V5LCBtZXRhZGF0YSwgdG8sIHByb3BlcnR5S2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShtZXRhS2V5LCBtZXRhZGF0YSwgdG8pO1xuICAgIH1cbiAgfSk7XG59XG5cbnZhciBmYWtlQXJyYXkgPSB7XG4gIF9fcHJvdG9fXzogW11cbn07XG52YXIgaGFzUHJvdG8gPSBmYWtlQXJyYXkgaW5zdGFuY2VvZiBBcnJheTtcbmZ1bmN0aW9uIGNyZWF0ZURlY29yYXRvcihmYWN0b3J5KSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXksIGluZGV4KSB7XG4gICAgdmFyIEN0b3IgPSB0eXBlb2YgdGFyZ2V0ID09PSAnZnVuY3Rpb24nID8gdGFyZ2V0IDogdGFyZ2V0LmNvbnN0cnVjdG9yO1xuXG4gICAgaWYgKCFDdG9yLl9fZGVjb3JhdG9yc19fKSB7XG4gICAgICBDdG9yLl9fZGVjb3JhdG9yc19fID0gW107XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbmRleCAhPT0gJ251bWJlcicpIHtcbiAgICAgIGluZGV4ID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIEN0b3IuX19kZWNvcmF0b3JzX18ucHVzaChmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgcmV0dXJuIGZhY3Rvcnkob3B0aW9ucywga2V5LCBpbmRleCk7XG4gICAgfSk7XG4gIH07XG59XG5mdW5jdGlvbiBtaXhpbnMoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBDdG9ycyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBDdG9yc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiBWdWUuZXh0ZW5kKHtcbiAgICBtaXhpbnM6IEN0b3JzXG4gIH0pO1xufVxuZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSBfdHlwZW9mKHZhbHVlKTtcblxuICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCB0eXBlICE9PSAnb2JqZWN0JyAmJiB0eXBlICE9PSAnZnVuY3Rpb24nO1xufVxuZnVuY3Rpb24gd2FybihtZXNzYWdlKSB7XG4gIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBjb25zb2xlLndhcm4oJ1t2dWUtY2xhc3MtY29tcG9uZW50XSAnICsgbWVzc2FnZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29sbGVjdERhdGFGcm9tQ29uc3RydWN0b3Iodm0sIENvbXBvbmVudCkge1xuICAvLyBvdmVycmlkZSBfaW5pdCB0byBwcmV2ZW50IHRvIGluaXQgYXMgVnVlIGluc3RhbmNlXG4gIHZhciBvcmlnaW5hbEluaXQgPSBDb21wb25lbnQucHJvdG90eXBlLl9pbml0O1xuXG4gIENvbXBvbmVudC5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIC8vIHByb3h5IHRvIGFjdHVhbCB2bVxuICAgIHZhciBrZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModm0pOyAvLyAyLjIuMCBjb21wYXQgKHByb3BzIGFyZSBubyBsb25nZXIgZXhwb3NlZCBhcyBzZWxmIHByb3BlcnRpZXMpXG5cbiAgICBpZiAodm0uJG9wdGlvbnMucHJvcHMpIHtcbiAgICAgIGZvciAodmFyIGtleSBpbiB2bS4kb3B0aW9ucy5wcm9wcykge1xuICAgICAgICBpZiAoIXZtLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3RoaXMsIGtleSwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gdm1ba2V5XTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICAgICAgICB2bVtrZXldID0gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07IC8vIHNob3VsZCBiZSBhY3F1aXJlZCBjbGFzcyBwcm9wZXJ0eSB2YWx1ZXNcblxuXG4gIHZhciBkYXRhID0gbmV3IENvbXBvbmVudCgpOyAvLyByZXN0b3JlIG9yaWdpbmFsIF9pbml0IHRvIGF2b2lkIG1lbW9yeSBsZWFrICgjMjA5KVxuXG4gIENvbXBvbmVudC5wcm90b3R5cGUuX2luaXQgPSBvcmlnaW5hbEluaXQ7IC8vIGNyZWF0ZSBwbGFpbiBkYXRhIG9iamVjdFxuXG4gIHZhciBwbGFpbkRhdGEgPSB7fTtcbiAgT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwbGFpbkRhdGFba2V5XSA9IGRhdGFba2V5XTtcbiAgICB9XG4gIH0pO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKCEoQ29tcG9uZW50LnByb3RvdHlwZSBpbnN0YW5jZW9mIFZ1ZSkgJiYgT2JqZWN0LmtleXMocGxhaW5EYXRhKS5sZW5ndGggPiAwKSB7XG4gICAgICB3YXJuKCdDb21wb25lbnQgY2xhc3MgbXVzdCBpbmhlcml0IFZ1ZSBvciBpdHMgZGVzY2VuZGFudCBjbGFzcyAnICsgJ3doZW4gY2xhc3MgcHJvcGVydHkgaXMgdXNlZC4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGxhaW5EYXRhO1xufVxuXG52YXIgJGludGVybmFsSG9va3MgPSBbJ2RhdGEnLCAnYmVmb3JlQ3JlYXRlJywgJ2NyZWF0ZWQnLCAnYmVmb3JlTW91bnQnLCAnbW91bnRlZCcsICdiZWZvcmVEZXN0cm95JywgJ2Rlc3Ryb3llZCcsICdiZWZvcmVVcGRhdGUnLCAndXBkYXRlZCcsICdhY3RpdmF0ZWQnLCAnZGVhY3RpdmF0ZWQnLCAncmVuZGVyJywgJ2Vycm9yQ2FwdHVyZWQnLCAnc2VydmVyUHJlZmV0Y2gnIC8vIDIuNlxuXTtcbmZ1bmN0aW9uIGNvbXBvbmVudEZhY3RvcnkoQ29tcG9uZW50KSB7XG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgb3B0aW9ucy5uYW1lID0gb3B0aW9ucy5uYW1lIHx8IENvbXBvbmVudC5fY29tcG9uZW50VGFnIHx8IENvbXBvbmVudC5uYW1lOyAvLyBwcm90b3R5cGUgcHJvcHMuXG5cbiAgdmFyIHByb3RvID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbiAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocHJvdG8pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIGlmIChrZXkgPT09ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIGhvb2tzXG5cblxuICAgIGlmICgkaW50ZXJuYWxIb29rcy5pbmRleE9mKGtleSkgPiAtMSkge1xuICAgICAgb3B0aW9uc1trZXldID0gcHJvdG9ba2V5XTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIGtleSk7XG5cbiAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gdm9pZCAwKSB7XG4gICAgICAvLyBtZXRob2RzXG4gICAgICBpZiAodHlwZW9mIGRlc2NyaXB0b3IudmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgKG9wdGlvbnMubWV0aG9kcyB8fCAob3B0aW9ucy5tZXRob2RzID0ge30pKVtrZXldID0gZGVzY3JpcHRvci52YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHR5cGVzY3JpcHQgZGVjb3JhdGVkIGRhdGFcbiAgICAgICAgKG9wdGlvbnMubWl4aW5zIHx8IChvcHRpb25zLm1peGlucyA9IFtdKSkucHVzaCh7XG4gICAgICAgICAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICAgICAgICAgIHJldHVybiBfZGVmaW5lUHJvcGVydHkoe30sIGtleSwgZGVzY3JpcHRvci52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3IuZ2V0IHx8IGRlc2NyaXB0b3Iuc2V0KSB7XG4gICAgICAvLyBjb21wdXRlZCBwcm9wZXJ0aWVzXG4gICAgICAob3B0aW9ucy5jb21wdXRlZCB8fCAob3B0aW9ucy5jb21wdXRlZCA9IHt9KSlba2V5XSA9IHtcbiAgICAgICAgZ2V0OiBkZXNjcmlwdG9yLmdldCxcbiAgICAgICAgc2V0OiBkZXNjcmlwdG9yLnNldFxuICAgICAgfTtcbiAgICB9XG4gIH0pO1xuICAob3B0aW9ucy5taXhpbnMgfHwgKG9wdGlvbnMubWl4aW5zID0gW10pKS5wdXNoKHtcbiAgICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgICAgcmV0dXJuIGNvbGxlY3REYXRhRnJvbUNvbnN0cnVjdG9yKHRoaXMsIENvbXBvbmVudCk7XG4gICAgfVxuICB9KTsgLy8gZGVjb3JhdGUgb3B0aW9uc1xuXG4gIHZhciBkZWNvcmF0b3JzID0gQ29tcG9uZW50Ll9fZGVjb3JhdG9yc19fO1xuXG4gIGlmIChkZWNvcmF0b3JzKSB7XG4gICAgZGVjb3JhdG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgcmV0dXJuIGZuKG9wdGlvbnMpO1xuICAgIH0pO1xuICAgIGRlbGV0ZSBDb21wb25lbnQuX19kZWNvcmF0b3JzX187XG4gIH0gLy8gZmluZCBzdXBlclxuXG5cbiAgdmFyIHN1cGVyUHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoQ29tcG9uZW50LnByb3RvdHlwZSk7XG4gIHZhciBTdXBlciA9IHN1cGVyUHJvdG8gaW5zdGFuY2VvZiBWdWUgPyBzdXBlclByb3RvLmNvbnN0cnVjdG9yIDogVnVlO1xuICB2YXIgRXh0ZW5kZWQgPSBTdXBlci5leHRlbmQob3B0aW9ucyk7XG4gIGZvcndhcmRTdGF0aWNNZW1iZXJzKEV4dGVuZGVkLCBDb21wb25lbnQsIFN1cGVyKTtcblxuICBpZiAocmVmbGVjdGlvbklzU3VwcG9ydGVkKCkpIHtcbiAgICBjb3B5UmVmbGVjdGlvbk1ldGFkYXRhKEV4dGVuZGVkLCBDb21wb25lbnQpO1xuICB9XG5cbiAgcmV0dXJuIEV4dGVuZGVkO1xufVxudmFyIHJlc2VydmVkUHJvcGVydHlOYW1lcyA9IFsvLyBVbmlxdWUgaWRcbidjaWQnLCAvLyBTdXBlciBWdWUgY29uc3RydWN0b3JcbidzdXBlcicsIC8vIENvbXBvbmVudCBvcHRpb25zIHRoYXQgd2lsbCBiZSB1c2VkIGJ5IHRoZSBjb21wb25lbnRcbidvcHRpb25zJywgJ3N1cGVyT3B0aW9ucycsICdleHRlbmRPcHRpb25zJywgJ3NlYWxlZE9wdGlvbnMnLCAvLyBQcml2YXRlIGFzc2V0c1xuJ2NvbXBvbmVudCcsICdkaXJlY3RpdmUnLCAnZmlsdGVyJ107XG52YXIgc2hvdWxkSWdub3JlID0ge1xuICBwcm90b3R5cGU6IHRydWUsXG4gIGFyZ3VtZW50czogdHJ1ZSxcbiAgY2FsbGVlOiB0cnVlLFxuICBjYWxsZXI6IHRydWVcbn07XG5cbmZ1bmN0aW9uIGZvcndhcmRTdGF0aWNNZW1iZXJzKEV4dGVuZGVkLCBPcmlnaW5hbCwgU3VwZXIpIHtcbiAgLy8gV2UgaGF2ZSB0byB1c2UgZ2V0T3duUHJvcGVydHlOYW1lcyBzaW5jZSBCYWJlbCByZWdpc3RlcnMgbWV0aG9kcyBhcyBub24tZW51bWVyYWJsZVxuICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPcmlnaW5hbCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgLy8gU2tpcCB0aGUgcHJvcGVydGllcyB0aGF0IHNob3VsZCBub3QgYmUgb3ZlcndyaXR0ZW5cbiAgICBpZiAoc2hvdWxkSWdub3JlW2tleV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFNvbWUgYnJvd3NlcnMgZG9lcyBub3QgYWxsb3cgcmVjb25maWd1cmUgYnVpbHQtaW4gcHJvcGVydGllc1xuXG5cbiAgICB2YXIgZXh0ZW5kZWREZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeHRlbmRlZCwga2V5KTtcblxuICAgIGlmIChleHRlbmRlZERlc2NyaXB0b3IgJiYgIWV4dGVuZGVkRGVzY3JpcHRvci5jb25maWd1cmFibGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT3JpZ2luYWwsIGtleSk7IC8vIElmIHRoZSB1c2VyIGFnZW50IGRvZXMgbm90IHN1cHBvcnQgYF9fcHJvdG9fX2Agb3IgaXRzIGZhbWlseSAoSUUgPD0gMTApLFxuICAgIC8vIHRoZSBzdWIgY2xhc3MgcHJvcGVydGllcyBtYXkgYmUgaW5oZXJpdGVkIHByb3BlcnRpZXMgZnJvbSB0aGUgc3VwZXIgY2xhc3MgaW4gVHlwZVNjcmlwdC5cbiAgICAvLyBXZSBuZWVkIHRvIGV4Y2x1ZGUgc3VjaCBwcm9wZXJ0aWVzIHRvIHByZXZlbnQgdG8gb3ZlcndyaXRlXG4gICAgLy8gdGhlIGNvbXBvbmVudCBvcHRpb25zIG9iamVjdCB3aGljaCBzdG9yZWQgb24gdGhlIGV4dGVuZGVkIGNvbnN0cnVjdG9yIChTZWUgIzE5MikuXG4gICAgLy8gSWYgdGhlIHZhbHVlIGlzIGEgcmVmZXJlbmNlZCB2YWx1ZSAob2JqZWN0IG9yIGZ1bmN0aW9uKSxcbiAgICAvLyB3ZSBjYW4gY2hlY2sgZXF1YWxpdHkgb2YgdGhlbSBhbmQgZXhjbHVkZSBpdCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgcmVmZXJlbmNlLlxuICAgIC8vIElmIGl0IGlzIGEgcHJpbWl0aXZlIHZhbHVlLCBpdCB3aWxsIGJlIGZvcndhcmRlZCBmb3Igc2FmZXR5LlxuXG4gICAgaWYgKCFoYXNQcm90bykge1xuICAgICAgLy8gT25seSBgY2lkYCBpcyBleHBsaWNpdGx5IGV4bHVkZWQgZnJvbSBwcm9wZXJ0eSBmb3J3YXJkaW5nXG4gICAgICAvLyBiZWNhdXNlIHdlIGNhbm5vdCBkZXRlY3Qgd2hldGhlciBpdCBpcyBhIGluaGVyaXRlZCBwcm9wZXJ0eSBvciBub3RcbiAgICAgIC8vIG9uIHRoZSBubyBgX19wcm90b19fYCBlbnZpcm9ubWVudCBldmVuIHRob3VnaCB0aGUgcHJvcGVydHkgaXMgcmVzZXJ2ZWQuXG4gICAgICBpZiAoa2V5ID09PSAnY2lkJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBzdXBlckRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFN1cGVyLCBrZXkpO1xuXG4gICAgICBpZiAoIWlzUHJpbWl0aXZlKGRlc2NyaXB0b3IudmFsdWUpICYmIHN1cGVyRGVzY3JpcHRvciAmJiBzdXBlckRlc2NyaXB0b3IudmFsdWUgPT09IGRlc2NyaXB0b3IudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gLy8gV2FybiBpZiB0aGUgdXNlcnMgbWFudWFsbHkgZGVjbGFyZSByZXNlcnZlZCBwcm9wZXJ0aWVzXG5cblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHJlc2VydmVkUHJvcGVydHlOYW1lcy5pbmRleE9mKGtleSkgPj0gMCkge1xuICAgICAgd2FybihcIlN0YXRpYyBwcm9wZXJ0eSBuYW1lICdcIi5jb25jYXQoa2V5LCBcIicgZGVjbGFyZWQgb24gY2xhc3MgJ1wiKS5jb25jYXQoT3JpZ2luYWwubmFtZSwgXCInIFwiKSArICdjb25mbGljdHMgd2l0aCByZXNlcnZlZCBwcm9wZXJ0eSBuYW1lIG9mIFZ1ZSBpbnRlcm5hbC4gJyArICdJdCBtYXkgY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvciBvZiB0aGUgY29tcG9uZW50LiBDb25zaWRlciByZW5hbWluZyB0aGUgcHJvcGVydHkuJyk7XG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEV4dGVuZGVkLCBrZXksIGRlc2NyaXB0b3IpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gQ29tcG9uZW50KG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGNvbXBvbmVudEZhY3Rvcnkob3B0aW9ucyk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKENvbXBvbmVudCkge1xuICAgIHJldHVybiBjb21wb25lbnRGYWN0b3J5KENvbXBvbmVudCwgb3B0aW9ucyk7XG4gIH07XG59XG5cbkNvbXBvbmVudC5yZWdpc3Rlckhvb2tzID0gZnVuY3Rpb24gcmVnaXN0ZXJIb29rcyhrZXlzKSB7XG4gICRpbnRlcm5hbEhvb2tzLnB1c2guYXBwbHkoJGludGVybmFsSG9va3MsIF90b0NvbnN1bWFibGVBcnJheShrZXlzKSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBDb21wb25lbnQ7XG5leHBvcnQgeyBjcmVhdGVEZWNvcmF0b3IsIG1peGlucyB9O1xuIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdCB9LCBbXG4gICAgX2MoXCJsYWJlbFwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0SXRlbUNzcygpIH0sIFtcbiAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICB2YWx1ZTogX3ZtLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSxcbiAgICAgICAgICAgIGV4cHJlc3Npb246IFwicXVlc3Rpb24uY2hlY2tlZFZhbHVlXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNvbnRyb2wsXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgICAgICAgIG5hbWU6IF92bS5xdWVzdGlvbi5uYW1lLFxuICAgICAgICAgIGlkOiBfdm0ucXVlc3Rpb24uaW5wdXRJZCxcbiAgICAgICAgICBkaXNhYmxlZDogX3ZtLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSxcbiAgICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZCxcbiAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX3ZtLnF1ZXN0aW9uLmFyaWFMYWJlbCxcbiAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBfdm0ucXVlc3Rpb24uYXJpYUludmFsaWQsXG4gICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IF92bS5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnksXG4gICAgICAgIH0sXG4gICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgdmFsdWU6IF92bS5xdWVzdGlvbi5jaGVja2VkVmFsdWUsXG4gICAgICAgICAgaW5kZXRlcm1pbmF0ZTogX3ZtLnF1ZXN0aW9uLmlzSW5kZXRlcm1pbmF0ZSxcbiAgICAgICAgICBjaGVja2VkOiBBcnJheS5pc0FycmF5KF92bS5xdWVzdGlvbi5jaGVja2VkVmFsdWUpXG4gICAgICAgICAgICA/IF92bS5faShfdm0ucXVlc3Rpb24uY2hlY2tlZFZhbHVlLCBfdm0ucXVlc3Rpb24uY2hlY2tlZFZhbHVlKSA+IC0xXG4gICAgICAgICAgICA6IF92bS5xdWVzdGlvbi5jaGVja2VkVmFsdWUsXG4gICAgICAgIH0sXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICB2YXIgJCRhID0gX3ZtLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSxcbiAgICAgICAgICAgICAgJCRlbCA9ICRldmVudC50YXJnZXQsXG4gICAgICAgICAgICAgICQkYyA9ICQkZWwuY2hlY2tlZCA/IHRydWUgOiBmYWxzZVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoJCRhKSkge1xuICAgICAgICAgICAgICB2YXIgJCR2ID0gX3ZtLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSxcbiAgICAgICAgICAgICAgICAkJGkgPSBfdm0uX2koJCRhLCAkJHYpXG4gICAgICAgICAgICAgIGlmICgkJGVsLmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAkJGkgPCAwICYmXG4gICAgICAgICAgICAgICAgICBfdm0uJHNldChfdm0ucXVlc3Rpb24sIFwiY2hlY2tlZFZhbHVlXCIsICQkYS5jb25jYXQoWyQkdl0pKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICQkaSA+IC0xICYmXG4gICAgICAgICAgICAgICAgICBfdm0uJHNldChcbiAgICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgICBcImNoZWNrZWRWYWx1ZVwiLFxuICAgICAgICAgICAgICAgICAgICAkJGEuc2xpY2UoMCwgJCRpKS5jb25jYXQoJCRhLnNsaWNlKCQkaSArIDEpKVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBfdm0uJHNldChfdm0ucXVlc3Rpb24sIFwiY2hlY2tlZFZhbHVlXCIsICQkYylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJzcGFuXCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLm1hdGVyaWFsRGVjb3JhdG9yIH0sIFtcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJzdmdcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbURlY29yYXRvcixcbiAgICAgICAgICAgIGF0dHJzOiB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIF9jKFwicmVjdFwiLCB7XG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy51bmNoZWNrZWRQYXRoLFxuICAgICAgICAgICAgICBhdHRyczogeyB4OiBcIjVcIiwgeTogXCIxMFwiLCB3aWR0aDogXCIxNFwiLCBoZWlnaHQ6IFwiNFwiIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICBfYyhcInBvbHlnb25cIiwge1xuICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2hlY2tlZFBhdGgsXG4gICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgcG9pbnRzOlxuICAgICAgICAgICAgICAgICAgXCIxOSwxMCAxNCwxMCAxNCw1IDEwLDUgMTAsMTAgNSwxMCA1LDE0IDEwLDE0IDEwLDE5IDE0LDE5IDE0LDE0IDE5LDE0IFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX2MoXCJwYXRoXCIsIHtcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmluZGV0ZXJtaW5hdGVQYXRoLFxuICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgIGQ6IFwiTTIyLDBIMkMwLjksMCwwLDAuOSwwLDJ2MjBjMCwxLjEsMC45LDIsMiwyaDIwYzEuMSwwLDItMC45LDItMlYyQzI0LDAuOSwyMy4xLDAsMjIsMHogTTIxLDE4TDYsM2gxNVYxOHogTTMsNmwxNSwxNUgzVjZ6XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdXG4gICAgICAgICksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFwic3BhblwiLCB7IHN0YXRpY0NsYXNzOiBcImNoZWNrXCIgfSksXG4gICAgICBdKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0ucXVlc3Rpb24udGl0bGVMb2NhdGlvbiA9PT0gXCJoaWRkZW5cIlxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5sYWJlbCB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLnF1ZXN0aW9uLmxvY0Rpc3BsYXlMYWJlbCB9LFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgIF0pLFxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3QgfSwgW1xuICAgIF9jKFwibGFiZWxcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldEl0ZW1Dc3MoKSB9LCBbXG4gICAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgdmFsdWU6IF92bS5xdWVzdGlvbi5jaGVja2VkVmFsdWUsXG4gICAgICAgICAgICBleHByZXNzaW9uOiBcInF1ZXN0aW9uLmNoZWNrZWRWYWx1ZVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jb250cm9sLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHR5cGU6IFwiY2hlY2tib3hcIixcbiAgICAgICAgICBuYW1lOiBfdm0ucXVlc3Rpb24ubmFtZSxcbiAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmlucHV0SWQsXG4gICAgICAgICAgZGlzYWJsZWQ6IF92bS5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHksXG4gICAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IF92bS5xdWVzdGlvbi5hcmlhUmVxdWlyZWQsXG4gICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5xdWVzdGlvbi5hcmlhTGFiZWwsXG4gICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogX3ZtLnF1ZXN0aW9uLmFyaWFJbnZhbGlkLFxuICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBfdm0ucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5LFxuICAgICAgICB9LFxuICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgIHZhbHVlOiBfdm0ucXVlc3Rpb24uY2hlY2tlZFZhbHVlLFxuICAgICAgICAgIGluZGV0ZXJtaW5hdGU6IF92bS5xdWVzdGlvbi5pc0luZGV0ZXJtaW5hdGUsXG4gICAgICAgICAgY2hlY2tlZDogQXJyYXkuaXNBcnJheShfdm0ucXVlc3Rpb24uY2hlY2tlZFZhbHVlKVxuICAgICAgICAgICAgPyBfdm0uX2koX3ZtLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSwgX3ZtLnF1ZXN0aW9uLmNoZWNrZWRWYWx1ZSkgPiAtMVxuICAgICAgICAgICAgOiBfdm0ucXVlc3Rpb24uY2hlY2tlZFZhbHVlLFxuICAgICAgICB9LFxuICAgICAgICBvbjoge1xuICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgdmFyICQkYSA9IF92bS5xdWVzdGlvbi5jaGVja2VkVmFsdWUsXG4gICAgICAgICAgICAgICQkZWwgPSAkZXZlbnQudGFyZ2V0LFxuICAgICAgICAgICAgICAkJGMgPSAkJGVsLmNoZWNrZWQgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KCQkYSkpIHtcbiAgICAgICAgICAgICAgdmFyICQkdiA9IF92bS5xdWVzdGlvbi5jaGVja2VkVmFsdWUsXG4gICAgICAgICAgICAgICAgJCRpID0gX3ZtLl9pKCQkYSwgJCR2KVxuICAgICAgICAgICAgICBpZiAoJCRlbC5jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgJCRpIDwgMCAmJlxuICAgICAgICAgICAgICAgICAgX3ZtLiRzZXQoX3ZtLnF1ZXN0aW9uLCBcImNoZWNrZWRWYWx1ZVwiLCAkJGEuY29uY2F0KFskJHZdKSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAkJGkgPiAtMSAmJlxuICAgICAgICAgICAgICAgICAgX3ZtLiRzZXQoXG4gICAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbixcbiAgICAgICAgICAgICAgICAgICAgXCJjaGVja2VkVmFsdWVcIixcbiAgICAgICAgICAgICAgICAgICAgJCRhLnNsaWNlKDAsICQkaSkuY29uY2F0KCQkYS5zbGljZSgkJGkgKyAxKSlcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgX3ZtLiRzZXQoX3ZtLnF1ZXN0aW9uLCBcImNoZWNrZWRWYWx1ZVwiLCAkJGMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcInNwYW5cIixcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0TGFiZWxDc3MoZmFsc2UpLFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICByZXR1cm4gX3ZtLm9uTGFiZWxDbGljaygkZXZlbnQsIGZhbHNlKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLnF1ZXN0aW9uLmxvY0xhYmVsRmFsc2UgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5zd2l0Y2gsXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgIHJldHVybiBfdm0ub25Td2l0Y2hDbGljaygkZXZlbnQpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIFtfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuc2xpZGVyIH0pXVxuICAgICAgKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcbiAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldExhYmVsQ3NzKHRydWUpLFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICByZXR1cm4gX3ZtLm9uTGFiZWxDbGljaygkZXZlbnQsIHRydWUpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0ucXVlc3Rpb24ubG9jTGFiZWxUcnVlIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICAgIDFcbiAgICAgICksXG4gICAgXSksXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290LCBhdHRyczogeyByb2xlOiBcImdyb3VwXCIgfSB9LFxuICAgIFtcbiAgICAgIF92bS5fbChfdm0ucXVlc3Rpb24udmlzaWJsZUNob2ljZXMsIGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIF9jKFwic3YtYnV0dG9uLWdyb3VwLWl0ZW1cIiwge1xuICAgICAgICAgICAga2V5OiBfdm0ucXVlc3Rpb24uaW5wdXRJZCArIFwiX1wiICsgaW5kZXgsXG4gICAgICAgICAgICBhdHRyczogeyBpdGVtOiBpdGVtLCBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uLCBpbmRleDogaW5kZXggfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXVxuICAgICAgfSksXG4gICAgXSxcbiAgICAyXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImxhYmVsXCIsXG4gICAge1xuICAgICAgY2xhc3M6IF92bS5tb2RlbC5jc3MubGFiZWwsXG4gICAgICBhdHRyczogeyB0aXRsZTogX3ZtLm1vZGVsLmNhcHRpb24ucmVuZGVyZWRIdG1sIH0sXG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgdmFsdWU6IF92bS5tb2RlbC5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlLFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJtb2RlbC5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgY2xhc3M6IF92bS5tb2RlbC5jc3MuY29udHJvbCxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICB0eXBlOiBcInJhZGlvXCIsXG4gICAgICAgICAgbmFtZTogX3ZtLm1vZGVsLm5hbWUsXG4gICAgICAgICAgaWQ6IF92bS5tb2RlbC5pZCxcbiAgICAgICAgICByb2xlOiBcInJhZGlvXCIsXG4gICAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IF92bS5tb2RlbC5pc1JlcXVpcmVkLFxuICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0ubW9kZWwuY2FwdGlvbi5yZW5kZXJlZEh0bWwsXG4gICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogX3ZtLm1vZGVsLmhhc0Vycm9ycyxcbiAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogX3ZtLm1vZGVsLmRlc2NyaWJlQnksXG4gICAgICAgICAgZGlzYWJsZWQ6IF92bS5tb2RlbC5yZWFkT25seSxcbiAgICAgICAgfSxcbiAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICB2YWx1ZTogX3ZtLm1vZGVsLnZhbHVlLFxuICAgICAgICAgIGNoZWNrZWQ6IF92bS5fcShfdm0ubW9kZWwucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSwgX3ZtLm1vZGVsLnZhbHVlKSxcbiAgICAgICAgfSxcbiAgICAgICAgb246IHtcbiAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBfdm0uJHNldChcbiAgICAgICAgICAgICAgX3ZtLm1vZGVsLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICBcInJlbmRlcmVkVmFsdWVcIixcbiAgICAgICAgICAgICAgX3ZtLm1vZGVsLnZhbHVlXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7IGNsYXNzOiBfdm0ubW9kZWwuY3NzLmRlY29yYXRvciB9LFxuICAgICAgICBbXG4gICAgICAgICAgISFfdm0ubW9kZWwuaWNvbk5hbWVcbiAgICAgICAgICAgID8gX2MoXCJzdi1zdmctaWNvblwiLCB7XG4gICAgICAgICAgICAgICAgY2xhc3M6IF92bS5tb2RlbC5jc3MuaWNvbixcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgaWNvbk5hbWU6IF92bS5tb2RlbC5pY29uTmFtZSxcbiAgICAgICAgICAgICAgICAgIHNpemU6IF92bS5tb2RlbC5pY29uU2l6ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF92bS5tb2RlbC5zaG93Q2FwdGlvblxuICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0ubW9kZWwuY3NzLmNhcHRpb24gfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5tb2RlbC5jYXB0aW9uIH0sXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKSxcbiAgICBdXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImZpZWxkc2V0XCIsXG4gICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdCB9LFxuICAgIFtcbiAgICAgIF9jKFwibGVnZW5kXCIsIHtcbiAgICAgICAgYXR0cnM6IHsgcm9sZTogXCJjaGVja2JveFwiLCBcImFyaWEtbGFiZWxcIjogX3ZtLnF1ZXN0aW9uLmFyaWFMYWJlbCB9LFxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLl9sKF92bS5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcywgZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgIHJldHVybiAhX3ZtLnF1ZXN0aW9uLmhhc0NvbHVtbnNcbiAgICAgICAgICA/IF9jKFwic3VydmV5LWNoZWNrYm94LWl0ZW1cIiwge1xuICAgICAgICAgICAgICBrZXk6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0SXRlbUNsYXNzKGl0ZW0pLFxuICAgICAgICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uLCBpdGVtOiBpdGVtLCBpbmRleDogaW5kZXggfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLl9sKF92bS5xdWVzdGlvbi5jb2x1bW5zLCBmdW5jdGlvbiAoY29sdW1uLCBjb2xJbmRleCkge1xuICAgICAgICByZXR1cm4gX3ZtLnF1ZXN0aW9uLmhhc0NvbHVtbnNcbiAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0Q29sdW1uQ2xhc3MoKSB9LFxuICAgICAgICAgICAgICBfdm0uX2woY29sdW1uLCBmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2MoXCJzdXJ2ZXktY2hlY2tib3gtaXRlbVwiLCB7XG4gICAgICAgICAgICAgICAgICBrZXk6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldEl0ZW1DbGFzcyhpdGVtKSxcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBcIlwiICsgY29sSW5kZXggKyBpbmRleCxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICB9KSxcbiAgICBdLFxuICAgIDJcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgW1xuICAgICAgX2MoXCJsYWJlbFwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0TGFiZWxDbGFzcyhfdm0uaXRlbSkgfSwgW1xuICAgICAgICBfdm0uaXRlbSA9PSBfdm0ucXVlc3Rpb24uc2VsZWN0QWxsSXRlbVxuICAgICAgICAgID8gX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtbW9kZWxcIixcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uaXNBbGxTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiaXNBbGxTZWxlY3RlZFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtQ29udHJvbCxcbiAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImNoZWNrYm94XCIsXG4gICAgICAgICAgICAgICAgbmFtZTogX3ZtLnF1ZXN0aW9uLm5hbWUsXG4gICAgICAgICAgICAgICAgaWQ6IF92bS5xdWVzdGlvbi5nZXRJdGVtSWQoX3ZtLml0ZW0pLFxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhX3ZtLnF1ZXN0aW9uLmdldEl0ZW1FbmFibGVkKF92bS5pdGVtKSxcbiAgICAgICAgICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZCxcbiAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX3ZtLnF1ZXN0aW9uLmFyaWFMYWJlbCxcbiAgICAgICAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBfdm0ucXVlc3Rpb24uYXJpYUludmFsaWQsXG4gICAgICAgICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IF92bS5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IF92bS5pc0FsbFNlbGVjdGVkLFxuICAgICAgICAgICAgICAgIGNoZWNrZWQ6IEFycmF5LmlzQXJyYXkoX3ZtLmlzQWxsU2VsZWN0ZWQpXG4gICAgICAgICAgICAgICAgICA/IF92bS5faShfdm0uaXNBbGxTZWxlY3RlZCwgX3ZtLmlzQWxsU2VsZWN0ZWQpID4gLTFcbiAgICAgICAgICAgICAgICAgIDogX3ZtLmlzQWxsU2VsZWN0ZWQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICB2YXIgJCRhID0gX3ZtLmlzQWxsU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgICAgICQkZWwgPSAkZXZlbnQudGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICAkJGMgPSAkJGVsLmNoZWNrZWQgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KCQkYSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICQkdiA9IF92bS5pc0FsbFNlbGVjdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICQkaSA9IF92bS5faSgkJGEsICQkdilcbiAgICAgICAgICAgICAgICAgICAgaWYgKCQkZWwuY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICQkaSA8IDAgJiYgKF92bS5pc0FsbFNlbGVjdGVkID0gJCRhLmNvbmNhdChbJCR2XSkpXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgJCRpID4gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChfdm0uaXNBbGxTZWxlY3RlZCA9ICQkYVxuICAgICAgICAgICAgICAgICAgICAgICAgICAuc2xpY2UoMCwgJCRpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCQkYS5zbGljZSgkJGkgKyAxKSkpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF92bS5pc0FsbFNlbGVjdGVkID0gJCRjXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX3ZtLml0ZW0gIT0gX3ZtLnF1ZXN0aW9uLnNlbGVjdEFsbEl0ZW1cbiAgICAgICAgICA/IF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUsXG4gICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInF1ZXN0aW9uLnJlbmRlcmVkVmFsdWVcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbUNvbnRyb2wsXG4gICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgICAgICAgICAgICAgIG5hbWU6IF92bS5xdWVzdGlvbi5uYW1lLFxuICAgICAgICAgICAgICAgIGlkOiBfdm0ucXVlc3Rpb24uZ2V0SXRlbUlkKF92bS5pdGVtKSxcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogIV92bS5xdWVzdGlvbi5nZXRJdGVtRW5hYmxlZChfdm0uaXRlbSksXG4gICAgICAgICAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IF92bS5xdWVzdGlvbi5hcmlhUmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5xdWVzdGlvbi5hcmlhTGFiZWwsXG4gICAgICAgICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogX3ZtLnF1ZXN0aW9uLmFyaWFJbnZhbGlkLFxuICAgICAgICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBfdm0ucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgICBjaGVja2VkOiBBcnJheS5pc0FycmF5KF92bS5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlKVxuICAgICAgICAgICAgICAgICAgPyBfdm0uX2koX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkVmFsdWUsIF92bS5pdGVtLnZhbHVlKSA+IC0xXG4gICAgICAgICAgICAgICAgICA6IF92bS5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgdmFyICQkYSA9IF92bS5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAkJGVsID0gJGV2ZW50LnRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgJCRjID0gJCRlbC5jaGVja2VkID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSgkJGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciAkJHYgPSBfdm0uaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAkJGkgPSBfdm0uX2koJCRhLCAkJHYpXG4gICAgICAgICAgICAgICAgICAgIGlmICgkJGVsLmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAkJGkgPCAwICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uJHNldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcInJlbmRlcmVkVmFsdWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJCRhLmNvbmNhdChbJCR2XSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAkJGkgPiAtMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLiRzZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJlZFZhbHVlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICQkYS5zbGljZSgwLCAkJGkpLmNvbmNhdCgkJGEuc2xpY2UoJCRpICsgMSkpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF92bS4kc2V0KF92bS5xdWVzdGlvbiwgXCJyZW5kZXJlZFZhbHVlXCIsICQkYylcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMubWF0ZXJpYWxEZWNvcmF0b3IgfSwgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJzdmdcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLml0ZW1EZWNvcmF0b3IsXG4gICAgICAgICAgICAgIGF0dHJzOiB7IHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbX2MoXCJwYXRoXCIsIHsgYXR0cnM6IHsgZDogX3ZtLnF1ZXN0aW9uLmNoZWNrQm94U3ZnUGF0aCB9IH0pXVxuICAgICAgICAgICksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcInNwYW5cIiwgeyBzdGF0aWNDbGFzczogXCJjaGVja1wiIH0pLFxuICAgICAgICBdKSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgIV92bS5oaWRlTGFiZWxcbiAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5jb250cm9sTGFiZWwsXG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgdGl0bGU6IF92bS5pdGVtLmxvY1RleHQudGV4dCB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHsgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0uaXRlbS5sb2NUZXh0IH0gfSldLFxuICAgICAgICAgICAgICAxXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5xdWVzdGlvbi5pc090aGVySXRlbShfdm0uaXRlbSlcbiAgICAgICAgPyBfYyhcInN1cnZleS1vdGhlci1jaG9pY2VcIiwge1xuICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlICYmIF92bS5xdWVzdGlvbi5pc090aGVyU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjpcbiAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgcXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSAmJiBxdWVzdGlvbi5pc090aGVyU2VsZWN0ZWRcXG4gICAgXCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5xdWVzdGlvbiB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCBbXG4gICAgIV92bS5xdWVzdGlvbi5pc1JlYWRPbmx5UmVuZGVyRGl2KClcbiAgICAgID8gX2MoXCJ0ZXh0YXJlYVwiLCB7XG4gICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzXG4gICAgICAgICAgICA/IF92bS5xdWVzdGlvbi5nZXRDb250cm9sQ2xhc3MoKVxuICAgICAgICAgICAgOiBcInBhbmVsLWNvbW1lbnQtcm9vdFwiLFxuICAgICAgICAgIHN0eWxlOiB7IHJlc2l6ZTogX3ZtLnF1ZXN0aW9uLmF1dG9Hcm93ID8gXCJub25lXCIgOiBcImJvdGhcIiB9LFxuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgIHJlYWRvbmx5OiBfdm0ucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5LFxuICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHksXG4gICAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmlucHV0SWQsXG4gICAgICAgICAgICBtYXhsZW5ndGg6IF92bS5xdWVzdGlvbi5nZXRNYXhMZW5ndGgoKSxcbiAgICAgICAgICAgIGNvbHM6IF92bS5xdWVzdGlvbi5jb2xzLFxuICAgICAgICAgICAgcm93czogX3ZtLnF1ZXN0aW9uLnJvd3MsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkUGxhY2VIb2xkZXIsXG4gICAgICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZCxcbiAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24uYXJpYUxhYmVsLFxuICAgICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogX3ZtLnF1ZXN0aW9uLmFyaWFJbnZhbGlkLFxuICAgICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IF92bS5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogX3ZtLnF1ZXN0aW9uLnZhbHVlIH0sXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIGNoYW5nZTogX3ZtLmNoYW5nZSxcbiAgICAgICAgICAgIGlucHV0OiBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24ub25JbnB1dChlKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtleWRvd246IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5vbktleURvd24oZSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgIDogX3ZtLl9lKCksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfdm0ucXVlc3Rpb24uaXNSZWFkT25seVJlbmRlckRpdigpXG4gICAgICA/IF9jKFwiZGl2XCIsIFtfdm0uX3YoX3ZtLl9zKF92bS5xdWVzdGlvbi52YWx1ZSkpXSlcbiAgICAgIDogX3ZtLl9lKCksXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJidXR0b25cIixcbiAgICB7XG4gICAgICBjbGFzczogX3ZtLml0ZW0uZ2V0QWN0aW9uQmFySXRlbUFjdGl2ZUNzcygpLFxuICAgICAgYXR0cnM6IHtcbiAgICAgICAgZGlzYWJsZWQ6IF92bS5pdGVtLmVuYWJsZWQgIT09IHVuZGVmaW5lZCAmJiBfdm0uaXRlbS5lbmFibGVkLFxuICAgICAgICB0aXRsZTogX3ZtLml0ZW0udG9vbHRpcCB8fCBfdm0uaXRlbS50aXRsZSxcbiAgICAgIH0sXG4gICAgICBvbjoge1xuICAgICAgICBjbGljazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF92bS5pdGVtLmFjdGlvbigpXG4gICAgICAgIH0sXG4gICAgICAgIGtleXVwOiBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgW1xuICAgICAgX3ZtLml0ZW0uaWNvbk5hbWVcbiAgICAgICAgPyBfYyhcInN2LXN2Zy1pY29uXCIsIHtcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInN2LWFjdGlvbi1iYXItaXRlbV9faWNvblwiLFxuICAgICAgICAgICAgYXR0cnM6IHsgaWNvbk5hbWU6IF92bS5pdGVtLmljb25OYW1lLCBzaXplOiBfdm0uaXRlbS5pY29uU2l6ZSB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLml0ZW0uc2hvd1RpdGxlID09PSB1bmRlZmluZWQgfHxcbiAgICAgIF92bS5pdGVtLnNob3dUaXRsZSB8fFxuICAgICAgIV92bS5pdGVtLmljb25OYW1lXG4gICAgICAgID8gX2MoXCJzcGFuXCIsIHsgY2xhc3M6IF92bS5pdGVtLmdldEFjdGlvbkJhckl0ZW1Dc3MoKSB9LCBbXG4gICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5pdGVtLnRpdGxlKSksXG4gICAgICAgICAgXSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcInN2LXBvcHVwXCIsIHsgYXR0cnM6IHsgbW9kZWw6IF92bS5pdGVtLnBvcHVwTW9kZWwgfSB9KSxcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiYnV0dG9uXCIsXG4gICAge1xuICAgICAgY2xhc3M6IF92bS5pdGVtLmdldEFjdGlvbkJhckl0ZW1BY3RpdmVDc3MoKSxcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgIGRpc2FibGVkOiBfdm0uaXRlbS5lbmFibGVkICE9PSB1bmRlZmluZWQgJiYgIV92bS5pdGVtLmVuYWJsZWQsXG4gICAgICAgIHRpdGxlOiBfdm0uaXRlbS50b29sdGlwIHx8IF92bS5pdGVtLnRpdGxlLFxuICAgICAgICB0YWJpbmRleDogX3ZtLml0ZW0uZGlzYWJsZVRhYlN0b3AgPyAtMSA6IDAsXG4gICAgICB9LFxuICAgICAgb246IHtcbiAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdm0uaXRlbS5hY3Rpb24oKVxuICAgICAgICB9LFxuICAgICAgICBrZXl1cDogZnVuY3Rpb24gKGV2dCkge1xuICAgICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICAgIFtcbiAgICAgIF92bS5pdGVtLmljb25OYW1lXG4gICAgICAgID8gX2MoXCJzdi1zdmctaWNvblwiLCB7XG4gICAgICAgICAgICBzdGF0aWNDbGFzczogXCJzdi1hY3Rpb24tYmFyLWl0ZW1fX2ljb25cIixcbiAgICAgICAgICAgIGF0dHJzOiB7IGljb25OYW1lOiBfdm0uaXRlbS5pY29uTmFtZSwgc2l6ZTogX3ZtLml0ZW0uaWNvblNpemUgfSxcbiAgICAgICAgICB9KVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5pdGVtLnNob3dUaXRsZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICBfdm0uaXRlbS5zaG93VGl0bGUgfHxcbiAgICAgICFfdm0uaXRlbS5pY29uTmFtZVxuICAgICAgICA/IF9jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0uaXRlbS5nZXRBY3Rpb25CYXJJdGVtQ3NzKCkgfSwgW1xuICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0uaXRlbS50aXRsZSkpLFxuICAgICAgICAgIF0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7XG4gICAgc3RhdGljQ2xhc3M6IFwic3YtYWN0aW9uLWJhci1zZXBhcmF0b3JcIixcbiAgICBjbGFzczogX3ZtLmlubmVyQ3NzLFxuICB9KVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF92bS5tb2RlbC5oYXNBY3Rpb25zXG4gICAgPyBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIHJlZjogXCJjb250YWluZXJcIixcbiAgICAgICAgICBjbGFzczogX3ZtLm1vZGVsLmNzcyxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBfdm0uX2woX3ZtLm1vZGVsLnJlbmRlcmVkQWN0aW9ucywgZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gX2MoXCJzdi1hY3Rpb25cIiwgeyBrZXk6IGl0ZW0uaWQsIGF0dHJzOiB7IGl0ZW06IGl0ZW0gfSB9KVxuICAgICAgICB9KSxcbiAgICAgICAgMVxuICAgICAgKVxuICAgIDogX3ZtLl9lKClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLml0ZW0uZ2V0QWN0aW9uUm9vdENzcygpIH0sIFtcbiAgICBfYyhcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7IHN0YXRpY0NsYXNzOiBcInN2LWFjdGlvbl9fY29udGVudFwiIH0sXG4gICAgICBbXG4gICAgICAgIF92bS5pdGVtLm5lZWRTZXBhcmF0b3IgPyBfYyhcInN2LWFjdGlvbi1iYXItc2VwYXJhdG9yXCIpIDogX3ZtLl9lKCksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKF92bS5nZXRDb21wb25lbnROYW1lKCksIHtcbiAgICAgICAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgICAgICAgYXR0cnM6IHsgaXRlbTogX3ZtLml0ZW0gfSxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgICAgMVxuICAgICksXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJsaVwiLFxuICAgIHtcbiAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgdmFsdWU6IF92bS5pdGVtLnZpc2libGUsXG4gICAgICAgICAgZXhwcmVzc2lvbjogXCJpdGVtLnZpc2libGVcIixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBrZXk6IF92bS5pdGVtLmlkLFxuICAgICAgY2xhc3M6IF92bS5tb2RlbC5nZXRJdGVtQ2xhc3MoX3ZtLml0ZW0pLFxuICAgICAgc3R5bGU6IHsgcGFkZGluZ0xlZnQ6IF92bS5tb2RlbC5nZXRJdGVtSW5kZW50KF92bS5pdGVtKSB9LFxuICAgICAgYXR0cnM6IHsgdGFiaW5kZXg6IFwiMFwiIH0sXG4gICAgICBvbjoge1xuICAgICAgICBjbGljazogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgIHJldHVybiBfdm0ubW9kZWwuc2VsZWN0SXRlbShfdm0uaXRlbSlcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBbXG4gICAgICBfdm0uaXRlbS5pY29uTmFtZSAmJiAhX3ZtLml0ZW0uY29tcG9uZW50XG4gICAgICAgID8gX2MoXCJzdi1zdmctaWNvblwiLCB7XG4gICAgICAgICAgICBzdGF0aWNDbGFzczogXCJzdi1saXN0X19pdGVtLWljb25cIixcbiAgICAgICAgICAgIGF0dHJzOiB7IGljb25OYW1lOiBfdm0uaXRlbS5pY29uTmFtZSwgc2l6ZTogMjQgfSxcbiAgICAgICAgICB9KVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICFfdm0uaXRlbS5jb21wb25lbnRcbiAgICAgICAgPyBfYyhcInNwYW5cIiwgW192bS5fdihfdm0uX3MoX3ZtLml0ZW0udGl0bGUpKV0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLml0ZW0uY29tcG9uZW50XG4gICAgICAgID8gX2MoX3ZtLml0ZW0uY29tcG9uZW50LCB7XG4gICAgICAgICAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgICAgICAgICBhdHRyczogeyBpdGVtOiBfdm0uaXRlbSB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCBbXG4gICAgX3ZtLm1vZGVsLm5lZWRGaWx0ZXJcbiAgICAgID8gX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwic3YtbGlzdF9faW5wdXRcIixcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogX3ZtLm1vZGVsLmZpbHRlcmVkVGV4dFBsYWNlaG9sZGVyLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IF92bS5tb2RlbC5maWx0ZXJlZFRleHQgfSxcbiAgICAgICAgICBvbjogeyBjaGFuZ2U6IF92bS5jaGFuZ2UsIGtleXVwOiBfdm0ua2V5dXAgfSxcbiAgICAgICAgfSlcbiAgICAgIDogX3ZtLl9lKCksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfYyhcbiAgICAgIFwidWxcIixcbiAgICAgIHtcbiAgICAgICAgc3RhdGljQ2xhc3M6IFwic3YtbGlzdFwiLFxuICAgICAgICBvbjoge1xuICAgICAgICAgIG1vdXNlZG93bjogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBrZXlkb3duOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIF92bS5tb2RlbC5vbktleURvd24oZXZlbnQpXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBfdm0uX2woX3ZtLm1vZGVsLnJlbmRlcmVkQWN0aW9ucywgZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIF9jKFwic3YtbGlzdC1pdGVtXCIsIHtcbiAgICAgICAgICBrZXk6IGl0ZW0uaWQsXG4gICAgICAgICAgYXR0cnM6IHsgaXRlbTogaXRlbSwgbW9kZWw6IF92bS5tb2RlbCB9LFxuICAgICAgICB9KVxuICAgICAgfSksXG4gICAgICAxXG4gICAgKSxcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImJ1dHRvblwiLFxuICAgIHtcbiAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0RGV0YWlsUGFuZWxCdXR0b25Dc3MoX3ZtLnJvdyksXG4gICAgICBhdHRyczoge1xuICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICBcImFyaWEtZXhwYW5kZWRcIjogX3ZtLnF1ZXN0aW9uLmdldElzRGV0YWlsUGFuZWxTaG93aW5nKF92bS5yb3cpXG4gICAgICAgICAgPyBcInRydWVcIlxuICAgICAgICAgIDogXCJmYWxzZVwiLFxuICAgICAgICBcImFyaWEtY29udHJvbHNcIjogX3ZtLnF1ZXN0aW9uLmdldElzRGV0YWlsUGFuZWxTaG93aW5nKF92bS5yb3cpXG4gICAgICAgICAgPyBfdm0ucm93LmRldGFpbFBhbmVsSWRcbiAgICAgICAgICA6IG51bGwsXG4gICAgICB9LFxuICAgICAgb246IHtcbiAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gX3ZtLnJvdy5zaG93SGlkZURldGFpbFBhbmVsQ2xpY2soKVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICAgIFtfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldERldGFpbFBhbmVsSWNvbkNzcyhfdm0ucm93KSB9KV1cbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pY29uRHJhZyB9KVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiYnV0dG9uXCIsXG4gICAge1xuICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRSZW1vdmVSb3dCdXR0b25Dc3MoKSxcbiAgICAgIGF0dHJzOiB7IHR5cGU6IFwiYnV0dG9uXCIsIGRpc2FibGVkOiBfdm0ucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5IH0sXG4gICAgICBvbjoge1xuICAgICAgICBjbGljazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdm0ucXVlc3Rpb24ucmVtb3ZlUm93VUkoX3ZtLnJvdylcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5xdWVzdGlvbi5sb2NSZW1vdmVSb3dUZXh0IH0sXG4gICAgICB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaWNvblJlbW92ZSB9KSxcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAge1xuICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICB2YWx1ZTogX3ZtLm1vZGVsLmlzVmlzaWJsZSxcbiAgICAgICAgICBleHByZXNzaW9uOiBcIm1vZGVsLmlzVmlzaWJsZVwiLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHN0YXRpY0NsYXNzOiBcInN2LXBvcHVwXCIsXG4gICAgICBjbGFzczogX3ZtLm1vZGVsLnN0eWxlQ2xhc3MsXG4gICAgICBhdHRyczogeyB0YWJpbmRleDogXCItMVwiIH0sXG4gICAgICBvbjoge1xuICAgICAgICBrZXlkb3duOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICBfdm0ubW9kZWwub25LZXlEb3duKGV2ZW50KVxuICAgICAgICB9LFxuICAgICAgICBjbGljazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF92bS5tb2RlbC5jbGlja091dHNpZGUoKVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwic3YtcG9wdXBfX2NvbnRhaW5lclwiLFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBsZWZ0OiBfdm0ubW9kZWwubGVmdCxcbiAgICAgICAgICAgIHRvcDogX3ZtLm1vZGVsLnRvcCxcbiAgICAgICAgICAgIGhlaWdodDogX3ZtLm1vZGVsLmhlaWdodCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uY2xpY2tJbnNpZGUgfSxcbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwic3BhblwiLCB7XG4gICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ubW9kZWwuc2hvd1BvaW50ZXIsXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJtb2RlbC5zaG93UG9pbnRlclwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInN2LXBvcHVwX19wb2ludGVyXCIsXG4gICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICBsZWZ0OiBfdm0ubW9kZWwucG9pbnRlclRhcmdldC5sZWZ0LFxuICAgICAgICAgICAgICB0b3A6IF92bS5tb2RlbC5wb2ludGVyVGFyZ2V0LnRvcCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogISF0aGlzLm1vZGVsLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCIhIXRoaXMubW9kZWwudGl0bGVcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJzdi1wb3B1cF9faGVhZGVyXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW192bS5fdihfdm0uX3ModGhpcy5tb2RlbC50aXRsZSkpXVxuICAgICAgICAgICksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInN2LXBvcHVwX19zY3JvbGxpbmctY29udGVudFwiIH0sIFtcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcInN2LXBvcHVwX19jb250ZW50XCIgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgX3ZtLm1vZGVsLmNvbnRlbnRDb21wb25lbnROYW1lLFxuICAgICAgICAgICAgICAgICAgX3ZtLl9iKFxuICAgICAgICAgICAgICAgICAgICB7IHRhZzogXCJjb21wb25lbnRcIiB9LFxuICAgICAgICAgICAgICAgICAgICBcImNvbXBvbmVudFwiLFxuICAgICAgICAgICAgICAgICAgICBfdm0ubW9kZWwuY29udGVudENvbXBvbmVudERhdGEsXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF92bS5tb2RlbC5pc01vZGFsXG4gICAgICAgICAgICA/IF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwic3YtcG9wdXBfX2Zvb3RlclwiIH0sIFtcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgIFwic3YtcG9wdXBfX2Zvb3Rlci1pdGVtIHN2LXBvcHVwX19idXR0b24gc3YtcG9wdXBfX2J1dHRvbi0tY2FuY2VsXCIsXG4gICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5tb2RlbC5jYW5jZWwoKVxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0ubW9kZWwuY2FuY2VsQnV0dG9uVGV4dCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICBcIlxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgIFwic3YtcG9wdXBfX2Zvb3Rlci1pdGVtIHN2LXBvcHVwX19idXR0b24gc3YtcG9wdXBfX2J1dHRvbi0tY2FuY2VsXCIsXG4gICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5tb2RlbC5hcHBseSgpXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS5tb2RlbC5hcHBseUJ1dHRvblRleHQpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgXVxuICAgICAgKSxcbiAgICBdXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwic3Ytc2tlbGV0b24tZWxlbWVudFwiIH0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJzcGFuXCIsIFtcbiAgICBfYyhcbiAgICAgIFwic3ZnXCIsXG4gICAgICB7IHJlZjogXCJzdmdJY29uXCIsIHN0YXRpY0NsYXNzOiBcInN2LXN2Zy1pY29uXCIsIGF0dHJzOiB7IHJvbGU6IFwiaW1nXCIgfSB9LFxuICAgICAgW19jKFwidXNlXCIpXVxuICAgICksXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICBbXG4gICAgICBfYyhcInN1cnZleS1lbGVtZW50LXRpdGxlLWNvbnRlbnRcIiwge1xuICAgICAgICBhdHRyczogeyBlbGVtZW50OiBfdm0uZWxlbWVudCwgY3NzOiBfdm0uY3NzIH0sXG4gICAgICB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcInNwYW5cIiwge1xuICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgdmFsdWU6IF92bS5zaG93SWNvbixcbiAgICAgICAgICAgIGV4cHJlc3Npb246IFwic2hvd0ljb25cIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBjbGFzczogX3ZtLmdldEljb25Dc3MoX3ZtLmlzQ29sbGFwc2VkKSxcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICB0YWJpbmRleDogXCIwXCIsXG4gICAgICAgICAgXCJhcmlhLWV4cGFuZGVkXCI6IF92bS5pc0NvbGxhcHNlZCA/IFwiZmFsc2VcIiA6IFwidHJ1ZVwiLFxuICAgICAgICAgIFwiYXJpYS1jb250cm9sc1wiOiAhX3ZtLmlzQ29sbGFwc2VkID8gX3ZtLmVsZW1lbnQuY29udGVudElkIDogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAgb246IHtcbiAgICAgICAgICBrZXl1cDogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhJGV2ZW50LnR5cGUuaW5kZXhPZihcImtleVwiKSAmJlxuICAgICAgICAgICAgICBfdm0uX2soJGV2ZW50LmtleUNvZGUsIFwiZW50ZXJcIiwgMTMsICRldmVudC5rZXksIFwiRW50ZXJcIilcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIF92bS5jaGFuZ2VFeHBhbmRlZC5hcHBseShudWxsLCBhcmd1bWVudHMpXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7IHN0YXRpY0NsYXNzOiBcInN2LXRpdGxlLWFjdGlvbnNcIiB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcInNwYW5cIixcbiAgICAgICAgeyBzdGF0aWNDbGFzczogXCJzdi10aXRsZS1hY3Rpb25zX190aXRsZVwiIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfdm0uZWxlbWVudC5pc1BhZ2VcbiAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5lbGVtZW50LmxvY1RpdGxlIH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgIV92bS5lbGVtZW50LmlzUGFnZVxuICAgICAgICAgICAgPyBfYyhcInN1cnZleS1lbGVtZW50LXRpdGxlLWNvbnRlbnRcIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7IGVsZW1lbnQ6IF92bS5lbGVtZW50LCBjc3M6IF92bS5jc3MgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF0sXG4gICAgICAgIDFcbiAgICAgICksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJzdi1hY3Rpb24tYmFyXCIsIHtcbiAgICAgICAgc3RhdGljQ2xhc3M6IFwic3YtdGl0bGUtYWN0aW9uc19fYmFyXCIsXG4gICAgICAgIGF0dHJzOiB7IG1vZGVsOiBfdm0udG9vbGJhciB9LFxuICAgICAgfSksXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIFtcbiAgICAgICFfdm0uZWxlbWVudC5pc1RpdGxlT3duZXJcbiAgICAgICAgPyBfYyhcInN1cnZleS1zdHJpbmdcIiwgeyBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5lbGVtZW50LmxvY1RpdGxlIH0gfSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uZWxlbWVudC5pc1RpdGxlT3duZXJcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF92bS5lbGVtZW50LmlzUmVxdWlyZVRleHRPblN0YXJ0XG4gICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmVsZW1lbnQuY3NzQ2xhc3Nlcy5yZXF1aXJlZFRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgXCJhcmlhLWhpZGRlblwiOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS5lbGVtZW50LnJlcXVpcmVkVGV4dCkpXVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF92bS5lbGVtZW50Lm5vXG4gICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmVsZW1lbnQuY3NzQ2xhc3Nlcy5udW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgcG9zaXRpb246IFwic3RhdGljXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBcImFyaWEtaGlkZGVuXCI6IHRydWUgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW192bS5fdihfdm0uX3MoX3ZtLmVsZW1lbnQubm8pKV1cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfdm0uZWxlbWVudC5pc1JlcXVpcmVUZXh0QmVmb3JlVGl0bGVcbiAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uZWxlbWVudC5jc3NDbGFzc2VzLnJlcXVpcmVkVGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBcImFyaWEtaGlkZGVuXCI6IHRydWUgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW192bS5fdihfdm0uX3MoX3ZtLmVsZW1lbnQucmVxdWlyZWRUZXh0KSldXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5lbGVtZW50LmxvY1RpdGxlIH0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfdm0uZWxlbWVudC5pc1JlcXVpcmVUZXh0QWZ0ZXJUaXRsZVxuICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5lbGVtZW50LmNzc0NsYXNzZXMucmVxdWlyZWRUZXh0LFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0uZWxlbWVudC5yZXF1aXJlZFRleHQpKV1cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfdm0uZWxlbWVudC5oYXNUaXRsZVxuICAgID8gX2MoXG4gICAgICAgIF92bS5lbGVtZW50LnRpdGxlVGFnTmFtZSxcbiAgICAgICAge1xuICAgICAgICAgIHRhZzogXCJjb21wb25lbnRcIixcbiAgICAgICAgICBjbGFzczogX3ZtLmVsZW1lbnQuY3NzVGl0bGUsXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOlxuICAgICAgICAgICAgICBfdm0uZWxlbWVudC5nZXRUeXBlKCkgPT09IFwicmFkaW9ncm91cFwiXG4gICAgICAgICAgICAgICAgPyBcIlwiXG4gICAgICAgICAgICAgICAgOiBfdm0uZWxlbWVudC5sb2NUaXRsZS5yZW5kZXJlZEh0bWwsXG4gICAgICAgICAgICBpZDogX3ZtLmVsZW1lbnQuYXJpYVRpdGxlSWQsXG4gICAgICAgICAgICB0YWJpbmRleDogX3ZtLmVsZW1lbnQudGl0bGVUYWJJbmRleCxcbiAgICAgICAgICAgIFwiYXJpYS1leHBhbmRlZFwiOiBfdm0uZWxlbWVudC50aXRsZUFyaWFFeHBhbmRlZCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICByZXR1cm4gX3ZtLmVsZW1lbnQudG9nZ2xlU3RhdGUoKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtleXVwOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgIF92bS5rZXl1cCgkZXZlbnQpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICAhX3ZtLmVsZW1lbnQuaGFzVGl0bGVBY3Rpb25zXG4gICAgICAgICAgICA/IF9jKFwic3VydmV5LWVsZW1lbnQtdGl0bGUtY29udGVudFwiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgZWxlbWVudDogX3ZtLmVsZW1lbnQsIGNzczogX3ZtLmNzcyB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF92bS5lbGVtZW50Lmhhc1RpdGxlQWN0aW9uc1xuICAgICAgICAgICAgPyBfYyhcInN2LXRpdGxlLWFjdGlvbnNcIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7IGVsZW1lbnQ6IF92bS5lbGVtZW50LCBjc3M6IF92bS5jc3MgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF0sXG4gICAgICAgIDFcbiAgICAgIClcbiAgICA6IF92bS5fZSgpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJzdXJ2ZXktcGFuZWxcIiwge1xuICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0uY29udGVudFBhbmVsLCBjc3M6IF92bS5jc3MgfSxcbiAgfSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhfdm0uZ2V0Q29tcG9uZW50TmFtZShfdm0uY29udGVudFF1ZXN0aW9uKSwge1xuICAgIHRhZzogXCJjb21wb25lbnRcIixcbiAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLmNvbnRlbnRRdWVzdGlvbiwgY3NzOiBfdm0uY3NzIH0sXG4gIH0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICBbXG4gICAgICBfdm0uaGFzSHRtbFxuICAgICAgICA/IF9jKFwiZGl2XCIsIHsgZG9tUHJvcHM6IHsgaW5uZXJIVE1MOiBfdm0uX3MoX3ZtLmN1c3RvbUh0bWwpIH0gfSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uaGFzRGVmYXVsdFJlbmRlclxuICAgICAgICA/IF9jKF92bS5jb21wb25lbnROYW1lLCB7XG4gICAgICAgICAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uLCBjc3M6IF92bS5jc3MgfSxcbiAgICAgICAgICB9KVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290IH0sXG4gICAgW1xuICAgICAgIV92bS5xdWVzdGlvbi5pc1JlYWRPbmx5XG4gICAgICAgID8gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuc2VsZWN0V3JhcHBlciB9LCBbXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJzZWxlY3RcIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtbW9kZWxcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInF1ZXN0aW9uLnJlbmRlcmVkVmFsdWVcIixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldENvbnRyb2xDbGFzcygpLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmlucHV0SWQsXG4gICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU6IF92bS5xdWVzdGlvbi5hdXRvQ29tcGxldGUsXG4gICAgICAgICAgICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZCxcbiAgICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24uYXJpYUxhYmVsLFxuICAgICAgICAgICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogX3ZtLnF1ZXN0aW9uLmFyaWFJbnZhbGlkLFxuICAgICAgICAgICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IF92bS5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnksXG4gICAgICAgICAgICAgICAgICByZXF1aXJlZDogX3ZtLnF1ZXN0aW9uLmlzUmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciAkJHNlbGVjdGVkVmFsID0gQXJyYXkucHJvdG90eXBlLmZpbHRlclxuICAgICAgICAgICAgICAgICAgICAgIC5jYWxsKCRldmVudC50YXJnZXQub3B0aW9ucywgZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvLnNlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsID0gXCJfdmFsdWVcIiBpbiBvID8gby5fdmFsdWUgOiBvLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgX3ZtLiRzZXQoXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgIFwicmVuZGVyZWRWYWx1ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICRldmVudC50YXJnZXQubXVsdGlwbGUgPyAkJHNlbGVjdGVkVmFsIDogJCRzZWxlY3RlZFZhbFswXVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uc2hvd09wdGlvbnNDYXB0aW9uXG4gICAgICAgICAgICAgICAgICA/IF9jKFwib3B0aW9uXCIsIHsgZG9tUHJvcHM6IHsgdmFsdWU6IHVuZGVmaW5lZCB9IH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLnF1ZXN0aW9uLm9wdGlvbnNDYXB0aW9uKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgIF92bS5fbChfdm0ucXVlc3Rpb24udmlzaWJsZUNob2ljZXMsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgICAgICAgIFwib3B0aW9uXCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBkaXNhYmxlZDogIWl0ZW0uaXNFbmFibGVkIH0sXG4gICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IGl0ZW0udmFsdWUgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW192bS5fdihcIlxcbiAgICAgICAgXCIgKyBfdm0uX3MoaXRlbS50ZXh0KSArIFwiXFxuICAgICAgXCIpXVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAyXG4gICAgICAgICAgICApLFxuICAgICAgICAgIF0pXG4gICAgICAgIDogX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldENvbnRyb2xDbGFzcygpLFxuICAgICAgICAgICAgICBhdHRyczogeyBkaXNhYmxlZDogXCJcIiwgaWQ6IF92bS5xdWVzdGlvbi5pbnB1dElkIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgXCJcXG4gICAgXCIgK1xuICAgICAgICAgICAgICAgICAgX3ZtLl9zKFxuICAgICAgICAgICAgICAgICAgICBfdm0uaXNPdGhlclNlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgPyBfdm0ucXVlc3Rpb24ub3RoZXJUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0ucXVlc3Rpb24uZGlzcGxheVZhbHVlXG4gICAgICAgICAgICAgICAgICApICtcbiAgICAgICAgICAgICAgICAgIFwiXFxuICBcIlxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgXVxuICAgICAgICAgICksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJzdXJ2ZXktb3RoZXItY2hvaWNlXCIsIHtcbiAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgIHZhbHVlOiBfdm0uaXNPdGhlclNlbGVjdGVkLFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJpc090aGVyU2VsZWN0ZWRcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uIH0sXG4gICAgICB9KSxcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBjbGFzczogIV92bS5lbGVtZW50LmlzUGFuZWwgPyBfdm0uZWxlbWVudC5nZXRSb290Q3NzKCkgOiBudWxsIH0sXG4gICAgW1xuICAgICAgIV92bS5lbGVtZW50LmlzUGFuZWwgJiYgX3ZtLmVsZW1lbnQuaGFzVGl0bGVPbkxlZnRUb3BcbiAgICAgICAgPyBfYyhcInN1cnZleS1lbGVtZW50LWhlYWRlclwiLCB7XG4gICAgICAgICAgICBhdHRyczogeyBlbGVtZW50OiBfdm0uZWxlbWVudCwgY3NzOiBfdm0uY3NzIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBfdm0uZWxlbWVudC5pc1BhbmVsIHx8ICFfdm0uZWxlbWVudC5pc0NvbGxhcHNlZCxcbiAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJlbGVtZW50LmlzUGFuZWwgfHwgIWVsZW1lbnQuaXNDb2xsYXBzZWRcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBjbGFzczogX3ZtLmdldENvbnRlbnRDbGFzcyhfdm0uZWxlbWVudCksXG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICAhX3ZtLmVsZW1lbnQuaXNQYW5lbCAmJiBfdm0uaGFzRXJyb3JzT25Ub3BcbiAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktZXJyb3JzXCIsIHtcbiAgICAgICAgICAgICAgICBhdHRyczogeyBlbGVtZW50OiBfdm0uZWxlbWVudCwgbG9jYXRpb246IFwidG9wXCIgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhfdm0uZ2V0Q29tcG9uZW50TmFtZShfdm0uZWxlbWVudCksIHtcbiAgICAgICAgICAgIHRhZzogXCJjb21wb25lbnRcIixcbiAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0uZWxlbWVudCwgY3NzOiBfdm0uY3NzIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfdm0uZWxlbWVudC5oYXNDb21tZW50XG4gICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLmVsZW1lbnQuY3NzQ2xhc3Nlcy5mb3JtR3JvdXAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCBbX3ZtLl92KF92bS5fcyhfdm0uZWxlbWVudC5jb21tZW50VGV4dCkpXSksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktb3RoZXItY2hvaWNlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICBjb21tZW50Q2xhc3M6IF92bS5jc3MuY29tbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbjogX3ZtLmVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICFfdm0uZWxlbWVudC5pc1BhbmVsICYmIF92bS5oYXNFcnJvcnNPbkJvdHRvbVxuICAgICAgICAgICAgPyBfYyhcInN1cnZleS1lcnJvcnNcIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7IGVsZW1lbnQ6IF92bS5lbGVtZW50LCBsb2NhdGlvbjogXCJib3R0b21cIiB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICFfdm0uZWxlbWVudC5pc1BhbmVsICYmIF92bS5lbGVtZW50Lmhhc0Rlc2NyaXB0aW9uVW5kZXJJbnB1dFxuICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5lbGVtZW50LmNzc0NsYXNzZXMuZGVzY3JpcHRpb25VbmRlcklucHV0IH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0uZWxlbWVudC5sb2NEZXNjcmlwdGlvbiB9LFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF0sXG4gICAgICAgIDFcbiAgICAgICksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgIV92bS5lbGVtZW50LmlzUGFuZWwgJiYgX3ZtLmVsZW1lbnQuaGFzVGl0bGVPbkJvdHRvbVxuICAgICAgICA/IF9jKFwic3VydmV5LWVsZW1lbnQtaGVhZGVyXCIsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7IGVsZW1lbnQ6IF92bS5lbGVtZW50LCBjc3M6IF92bS5jc3MgfSxcbiAgICAgICAgICB9KVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7IGNsYXNzOiBfdm0uZWxlbWVudC5jc3NIZWFkZXIsIG9uOiB7IGNsaWNrOiBfdm0uY2xpY2tUaXRsZUZ1bmN0aW9uIH0gfSxcbiAgICBbXG4gICAgICBfYyhcInN1cnZleS1lbGVtZW50LXRpdGxlXCIsIHtcbiAgICAgICAgYXR0cnM6IHsgZWxlbWVudDogX3ZtLmVsZW1lbnQsIGNzczogX3ZtLmNzcyB9LFxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLmVsZW1lbnQuaGFzRGVzY3JpcHRpb25VbmRlclRpdGxlXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgeyBjbGFzczogX3ZtLmVsZW1lbnQuY3NzQ2xhc3Nlcy5kZXNjcmlwdGlvbiB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLmVsZW1lbnQubG9jRGVzY3JpcHRpb24gfSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgIHZhbHVlOiBfdm0uZWxlbWVudC5oYXNWaXNpYmxlRXJyb3JzLFxuICAgICAgICAgIGV4cHJlc3Npb246IFwiZWxlbWVudC5oYXNWaXNpYmxlRXJyb3JzXCIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgY2xhc3M6IF92bS5lbGVtZW50LmNzc0Vycm9yLFxuICAgICAgYXR0cnM6IHtcbiAgICAgICAgcm9sZTogXCJhbGVydFwiLFxuICAgICAgICBcImFyaWEtbGl2ZVwiOiBcInBvbGl0ZVwiLFxuICAgICAgICBpZDogX3ZtLmVsZW1lbnQuaWQgKyBcIl9lcnJvcnNcIixcbiAgICAgIH0sXG4gICAgfSxcbiAgICBfdm0uX2woX3ZtLmVsZW1lbnQuZXJyb3JzLCBmdW5jdGlvbiAoZXJyb3IsIGluZGV4KSB7XG4gICAgICByZXR1cm4gX2MoXCJkaXZcIiwgeyBrZXk6IFwiZXJyb3JfXCIgKyBpbmRleCB9LCBbXG4gICAgICAgIF9jKFwic3BhblwiLCB7XG4gICAgICAgICAgY2xhc3M6IF92bS5lbGVtZW50LmNzc0NsYXNzZXNcbiAgICAgICAgICAgID8gX3ZtLmVsZW1lbnQuY3NzQ2xhc3Nlcy5lcnJvci5pY29uXG4gICAgICAgICAgICA6IFwicGFuZWwtZXJyb3ItaWNvblwiLFxuICAgICAgICAgIGF0dHJzOiB7IFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIgfSxcbiAgICAgICAgfSksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzOiBfdm0uZWxlbWVudC5jc3NDbGFzc2VzXG4gICAgICAgICAgICAgID8gX3ZtLmVsZW1lbnQuY3NzQ2xhc3Nlcy5lcnJvci5pdGVtXG4gICAgICAgICAgICAgIDogXCJwYW5lbC1lcnJvci1pdGVtXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBbX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHsgYXR0cnM6IHsgbG9jU3RyaW5nOiBlcnJvci5sb2NUZXh0IH0gfSldLFxuICAgICAgICAgIDFcbiAgICAgICAgKSxcbiAgICAgIF0pXG4gICAgfSksXG4gICAgMFxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMudGV4dCB9LCBbXG4gICAgX3ZtLl92KF92bS5fcyhfdm0ucXVlc3Rpb24uZGlzcGxheVZhbHVlKSksXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdCB9LCBbXG4gICAgIV92bS5xdWVzdGlvbi5pc1JlYWRPbmx5XG4gICAgICA/IF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5maWxlSW5wdXQsXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIHR5cGU6IFwiZmlsZVwiLFxuICAgICAgICAgICAgaWQ6IF92bS5xdWVzdGlvbi5pbnB1dElkLFxuICAgICAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IF92bS5xdWVzdGlvbi5hcmlhUmVxdWlyZWQsXG4gICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX3ZtLnF1ZXN0aW9uLmFyaWFMYWJlbCxcbiAgICAgICAgICAgIFwiYXJpYS1pbnZhbGlkXCI6IF92bS5xdWVzdGlvbi5hcmlhSW52YWxpZCxcbiAgICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBfdm0ucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5LFxuICAgICAgICAgICAgbXVsdGlwbGU6IF92bS5xdWVzdGlvbi5hbGxvd011bHRpcGxlID8gXCJtdWx0aXBsZVwiIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgdGl0bGU6IF92bS5xdWVzdGlvbi5pbnB1dFRpdGxlLFxuICAgICAgICAgICAgYWNjZXB0OiBfdm0ucXVlc3Rpb24uYWNjZXB0ZWRUeXBlcyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uOiB7IGNoYW5nZTogX3ZtLnF1ZXN0aW9uLmRvQ2hhbmdlIH0sXG4gICAgICAgIH0pXG4gICAgICA6IF92bS5fZSgpLFxuICAgIF92bS5fdihcIiBcIiksXG4gICAgX3ZtLnF1ZXN0aW9uLmlzUmVhZE9ubHlcbiAgICAgID8gX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRSZWFkT25seUZpbGVDc3MoKSxcbiAgICAgICAgICBzdGF0aWNTdHlsZTogeyBjb2xvcjogXCJ0cmFuc3BhcmVudFwiIH0sXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIHR5cGU6IFwiZmlsZVwiLFxuICAgICAgICAgICAgZGlzYWJsZWQ6IFwiXCIsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogX3ZtLnF1ZXN0aW9uLnRpdGxlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICA6IF92bS5fZSgpLFxuICAgIF92bS5fdihcIiBcIiksXG4gICAgX2MoXG4gICAgICBcImRpdlwiLFxuICAgICAge1xuICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldEZpbGVEZWNvcmF0b3JDc3MoKSxcbiAgICAgICAgb246IHtcbiAgICAgICAgICBkcm9wOiBfdm0ucXVlc3Rpb24ub25Ecm9wLFxuICAgICAgICAgIGRyYWdvdmVyOiBfdm0ucXVlc3Rpb24ub25EcmFnT3ZlcixcbiAgICAgICAgICBkcmFnbGVhdmU6IF92bS5xdWVzdGlvbi5vbkRyYWdMZWF2ZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBbXG4gICAgICAgIF9jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5kcmFnQXJlYVBsYWNlaG9sZGVyIH0sIFtcbiAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5xdWVzdGlvbi5kcmFnQXJlYVBsYWNlaG9sZGVyKSksXG4gICAgICAgIF0pLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy53cmFwcGVyIH0sIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwibGFiZWxcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRDaG9vc2VGaWxlQ3NzKCksXG4gICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgcm9sZTogXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICBmb3I6IF92bS5xdWVzdGlvbi5pbnB1dElkLFxuICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24uY2hvb3NlQnV0dG9uQ2FwdGlvbixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0ucXVlc3Rpb24uY2hvb3NlQnV0dG9uQ2FwdGlvbikpXVxuICAgICAgICAgICksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfdm0ucXVlc3Rpb24uaXNFbXB0eSgpXG4gICAgICAgICAgICA/IF9jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5ub0ZpbGVDaG9zZW4gfSwgW1xuICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLnF1ZXN0aW9uLm5vRmlsZUNob3NlbkNhcHRpb24pKSxcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF0pLFxuICAgICAgXVxuICAgICksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICAhX3ZtLnF1ZXN0aW9uLmlzUmVhZE9ubHkgJiYgIV92bS5xdWVzdGlvbi5pc0VtcHR5KClcbiAgICAgID8gX2MoXG4gICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucmVtb3ZlQnV0dG9uLFxuICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiB9LFxuICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5xdWVzdGlvbi5kb0NsZWFuIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBbX3ZtLl92KFwiXFxuICAgIFwiICsgX3ZtLl9zKF92bS5xdWVzdGlvbi5jbGVhbkJ1dHRvbkNhcHRpb24pICsgXCJcXG4gIFwiKV1cbiAgICAgICAgKVxuICAgICAgOiBfdm0uX2UoKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgICFfdm0ucXVlc3Rpb24uaXNFbXB0eSgpXG4gICAgICA/IF9jKFxuICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZmlsZUxpc3QgfSxcbiAgICAgICAgICBfdm0uX2woX3ZtLnF1ZXN0aW9uLnByZXZpZXdWYWx1ZSwgZnVuY3Rpb24gKHZhbCwgaW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsLFxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInZhbFwiLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGtleTogX3ZtLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIGluZGV4LFxuICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcmV2aWV3LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgdmFsLm5hbWVcbiAgICAgICAgICAgICAgICAgID8gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZmlsZVNpZ24gfSwgW1xuICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZjogdmFsLmNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHZhbC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkOiB2YWwubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogX3ZtLnF1ZXN0aW9uLmltYWdlV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0ucXVlc3Rpb24uZG9Eb3dubG9hZEZpbGUoJGV2ZW50LCB2YWwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyh2YWwubmFtZSkpXVxuICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmNhblByZXZpZXdJbWFnZSh2YWwpXG4gICAgICAgICAgICAgICAgICA/IF9jKFwiaW1nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3JjOiB2YWwuY29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogX3ZtLnF1ZXN0aW9uLmltYWdlSGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IF92bS5xdWVzdGlvbi5pbWFnZVdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWx0OiBcIkZpbGUgcHJldmlld1wiLFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICA6IF9jKFwiaW1nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZGVmYXVsdEltYWdlLFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IF92bS5xdWVzdGlvbi5pbWFnZUhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBfdm0ucXVlc3Rpb24uaW1hZ2VXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgIHZhbC5uYW1lICYmICFfdm0ucXVlc3Rpb24uaXNSZWFkT25seVxuICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZW1vdmVGaWxlQnV0dG9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLnF1ZXN0aW9uLmRvUmVtb3ZlRmlsZSh2YWwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZW1vdmVGaWxlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS5xdWVzdGlvbi5yZW1vdmVGaWxlQ2FwdGlvbikpXVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzdmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZW1vdmVGaWxlU3ZnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwicGF0aFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkOiBcIk04LDJDNC43LDIsMiw0LjcsMiw4czIuNyw2LDYsNnM2LTIuNyw2LTZTMTEuMywyLDgsMnogTTExLDEwbC0xLDFMOCw5bC0yLDJsLTEtMWwyLTJMNSw2bDEtMWwyLDJsMi0ybDEsMUw5LDggTDExLDEwelwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICB2YWwubmFtZVxuICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmZpbGVTaWduQm90dG9tIH0sXG4gICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiYVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY6IHZhbC5jb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHZhbC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bmxvYWQ6IHZhbC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IF92bS5xdWVzdGlvbi5pbWFnZVdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0ucXVlc3Rpb24uZG9Eb3dubG9hZEZpbGUoJGV2ZW50LCB2YWwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKHZhbC5uYW1lKSldXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIDBcbiAgICAgICAgKVxuICAgICAgOiBfdm0uX2UoKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgICFfdm0ucXVlc3Rpb24uaXNSZWFkT25seSAmJiAhX3ZtLnF1ZXN0aW9uLmlzRW1wdHkoKVxuICAgICAgPyBfYyhcbiAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yZW1vdmVCdXR0b25Cb3R0b20sXG4gICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLnF1ZXN0aW9uLmRvQ2xlYW4gfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIFtfdm0uX3YoXCJcXG4gICAgXCIgKyBfdm0uX3MoX3ZtLnF1ZXN0aW9uLmNsZWFuQnV0dG9uQ2FwdGlvbikgKyBcIlxcbiAgXCIpXVxuICAgICAgICApXG4gICAgICA6IF92bS5fZSgpLFxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF92bS5xdWVzdGlvbi5pc1Zpc2libGVcbiAgICA/IF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnBhbmVsLmNvbnRhaW5lcixcbiAgICAgICAgICBzdHlsZTogX3ZtLnJvb3RTdHlsZSxcbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJoNFwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5oYXNUaXRsZSxcbiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiaGFzVGl0bGVcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc1RpdGxlLFxuICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmNoYW5nZUV4cGFuZGVkIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLnF1ZXN0aW9uLmxvY1RpdGxlIH0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfYyhcInNwYW5cIiwge1xuICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uc2hvd0ljb24sXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwic2hvd0ljb25cIixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmljb25Dc3MsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucGFuZWwuZGVzY3JpcHRpb24gfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5xdWVzdGlvbi5sb2NEZXNjcmlwdGlvbiB9LFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFwic3VydmV5LWVycm9yc1wiLCB7IGF0dHJzOiB7IGVsZW1lbnQ6IF92bS5xdWVzdGlvbiB9IH0pLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImYtcGFuZWxcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiAhX3ZtLmlzQ29sbGFwc2VkLFxuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCIhaXNDb2xsYXBzZWRcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBzdHlsZTogeyBwYWRkaW5nTGVmdDogX3ZtLnF1ZXN0aW9uLmlubmVyUGFkZGluZ0xlZnQgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwic3VydmV5LWZsb3dwYW5lbGVsZW1lbnRcIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7IG5vZGU6IF92bS5yb290Tm9kZSwgcGFuZWw6IF92bS5xdWVzdGlvbiwgY3NzOiBcImNzc1wiIH0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApLFxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApXG4gICAgOiBfdm0uX2UoKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwic3BhblwiLFxuICAgIHsgc3R5bGU6IF92bS5zdHlsZSB9LFxuICAgIFtcbiAgICAgICFfdm0ucXVlc3Rpb25cbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIF92bS50YWdOYW1lLFxuICAgICAgICAgICAgeyB0YWc6IFwiY29tcG9uZW50XCIgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX3ZtLl9sKF92bS5ub2RlcywgZnVuY3Rpb24gKGVsTm9kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfYyhcInN1cnZleS1mbG93cGFuZWxlbGVtZW50XCIsIHtcbiAgICAgICAgICAgICAgICAgIGtleTogZWxOb2RlLmVsZW1lbnRJZCxcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IG5vZGU6IGVsTm9kZSwgcGFuZWw6IF92bS5wYW5lbCwgY3NzOiBcImNzc1wiIH0sXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIF92bS5fdihcIlxcbiAgICBcIiArIF92bS5fcyhfdm0udGV4dCkgKyBcIlxcbiAgXCIpLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDJcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgISFfdm0ucXVlc3Rpb25cbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInN1cnZleS1lbGVtZW50XCIsIHtcbiAgICAgICAgICAgICAgICBrZXk6IF92bS5xdWVzdGlvbi5pZFZhbHVlLFxuICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICBmbGV4QmFzaXM6IF92bS5xdWVzdGlvbi5yZW5kZXJXaWR0aCxcbiAgICAgICAgICAgICAgICAgIGZsZXhHcm93OiAxLFxuICAgICAgICAgICAgICAgICAgZmxleFNocmluazogMSxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiBfdm0ucXVlc3Rpb24ucmVuZGVyV2lkdGgsXG4gICAgICAgICAgICAgICAgICBtaW5XaWR0aDogX3ZtLnF1ZXN0aW9uLm1pbldpZHRoLFxuICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IF92bS5xdWVzdGlvbi5tYXhXaWR0aCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmlkLFxuICAgICAgICAgICAgICAgICAgZWxlbWVudDogX3ZtLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgc3VydmV5OiBfdm0uc3VydmV5LFxuICAgICAgICAgICAgICAgICAgY3NzOiBfdm0uY3NzLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfdm0uc3VydmV5LnJlbmRlcmVkSGFzSGVhZGVyXG4gICAgPyBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uc3VydmV5LmNzcy5oZWFkZXIgfSwgW1xuICAgICAgICBfdm0uc3VydmV5LmlzTG9nb0JlZm9yZVxuICAgICAgICAgID8gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnN1cnZleS5sb2dvQ2xhc3NOYW1lcyB9LCBbXG4gICAgICAgICAgICAgIF9jKFwiaW1nXCIsIHtcbiAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnN1cnZleS5jc3MubG9nb0ltYWdlLFxuICAgICAgICAgICAgICAgIHN0eWxlOiB7IG9iamVjdEZpdDogX3ZtLnN1cnZleS5sb2dvRml0IH0sXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIHNyYzogX3ZtLnN1cnZleS5sb2NMb2dvLnJlbmRlcmVkSHRtbCxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiBfdm0uc3VydmV5LmxvZ29XaWR0aFxuICAgICAgICAgICAgICAgICAgICA/IF92bS5zdXJ2ZXkubG9nb1dpZHRoXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBfdm0uc3VydmV5LmxvZ29IZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgPyBfdm0uc3VydmV5LmxvZ29IZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICBhbHQ6IF92bS5zdXJ2ZXkubG9jVGl0bGUucmVuZGVyZWRIdG1sLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSlcbiAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfdm0uc3VydmV5LnJlbmRlcmVkSGFzVGl0bGVcbiAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3M6IF92bS5zdXJ2ZXkuY3NzLmhlYWRlclRleHQsXG4gICAgICAgICAgICAgICAgc3R5bGU6IHsgbWF4V2lkdGg6IF92bS5zdXJ2ZXkudGl0bGVNYXhXaWR0aCB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktZWxlbWVudC10aXRsZVwiLCB7XG4gICAgICAgICAgICAgICAgICBhdHRyczogeyBlbGVtZW50OiBfdm0uc3VydmV5LCBjc3M6IF92bS5zdXJ2ZXkuY3NzIH0sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwiaDVcIixcbiAgICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5zdXJ2ZXkuY3NzLmRlc2NyaXB0aW9uIH0sXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0uc3VydmV5LmxvY0Rlc2NyaXB0aW9uIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAxXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX3ZtLnN1cnZleS5pc0xvZ29BZnRlclxuICAgICAgICAgID8gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnN1cnZleS5sb2dvQ2xhc3NOYW1lcyB9LCBbXG4gICAgICAgICAgICAgIF9jKFwiaW1nXCIsIHtcbiAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnN1cnZleS5jc3MubG9nb0ltYWdlLFxuICAgICAgICAgICAgICAgIHN0eWxlOiB7IG9iamVjdEZpdDogX3ZtLnN1cnZleS5sb2dvRml0IH0sXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIHNyYzogX3ZtLnN1cnZleS5sb2NMb2dvLnJlbmRlcmVkSHRtbCxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiBfdm0uc3VydmV5LmxvZ29XaWR0aFxuICAgICAgICAgICAgICAgICAgICA/IF92bS5zdXJ2ZXkubG9nb1dpZHRoXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBfdm0uc3VydmV5LmxvZ29IZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgPyBfdm0uc3VydmV5LmxvZ29IZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICBhbHQ6IF92bS5zdXJ2ZXkubG9jVGl0bGUucmVuZGVyZWRIdG1sLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSlcbiAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgXSlcbiAgICA6IF92bS5fZSgpXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwge1xuICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290LFxuICAgIGRvbVByb3BzOiB7IGlubmVySFRNTDogX3ZtLl9zKF92bS5xdWVzdGlvbi5sb2NIdG1sLnJlbmRlcmVkSHRtbCkgfSxcbiAgfSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290IH0sIFtcbiAgICBfdm0ucXVlc3Rpb24uY29udGVudE1vZGUgPT09IFwiaW1hZ2VcIlxuICAgICAgPyBfYyhcImltZ1wiLCB7XG4gICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmltYWdlLFxuICAgICAgICAgIHN0eWxlOiB7IG9iamVjdEZpdDogX3ZtLnF1ZXN0aW9uLmltYWdlRml0IH0sXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIHNyYzogX3ZtLnF1ZXN0aW9uLmltYWdlTGluayxcbiAgICAgICAgICAgIGFsdDogX3ZtLnF1ZXN0aW9uLnRleHQgfHwgX3ZtLnF1ZXN0aW9uLnRpdGxlLFxuICAgICAgICAgICAgd2lkdGg6IF92bS5xdWVzdGlvbi5pbWFnZVdpZHRoXG4gICAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmltYWdlV2lkdGggKyBcInB4XCJcbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBoZWlnaHQ6IF92bS5xdWVzdGlvbi5pbWFnZUhlaWdodFxuICAgICAgICAgICAgICA/IF92bS5xdWVzdGlvbi5pbWFnZUhlaWdodCArIFwicHhcIlxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgOiBfdm0uX2UoKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF92bS5xdWVzdGlvbi5jb250ZW50TW9kZSA9PT0gXCJ2aWRlb1wiXG4gICAgICA/IF9jKFwiZW1iZWRcIiwge1xuICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pbWFnZSxcbiAgICAgICAgICBzdHlsZTogeyBvYmplY3RGaXQ6IF92bS5xdWVzdGlvbi5pbWFnZUZpdCB9LFxuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICBzcmM6IF92bS5xdWVzdGlvbi5pbWFnZUxpbmssXG4gICAgICAgICAgICB3aWR0aDogX3ZtLnF1ZXN0aW9uLmltYWdlV2lkdGhcbiAgICAgICAgICAgICAgPyBfdm0ucXVlc3Rpb24uaW1hZ2VXaWR0aCArIFwicHhcIlxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGhlaWdodDogX3ZtLnF1ZXN0aW9uLmltYWdlSGVpZ2h0XG4gICAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmltYWdlSGVpZ2h0ICsgXCJweFwiXG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICA6IF92bS5fZSgpLFxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZmllbGRzZXRcIixcbiAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290IH0sXG4gICAgW1xuICAgICAgX2MoXCJsZWdlbmRcIiwge1xuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHJvbGU6IFwicmFkaW9cIixcbiAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX3ZtLnF1ZXN0aW9uLmxvY1RpdGxlLnJlbmRlcmVkSHRtbCxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5fbChfdm0ucXVlc3Rpb24udmlzaWJsZUNob2ljZXMsIGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgICByZXR1cm4gX2MoXCJkaXZcIiwgeyBrZXk6IGl0ZW0udmFsdWUsIGNsYXNzOiBfdm0uZ2V0SXRlbUNsYXNzKGl0ZW0pIH0sIFtcbiAgICAgICAgICBfYyhcImxhYmVsXCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmxhYmVsIH0sIFtcbiAgICAgICAgICAgIF92bS5xdWVzdGlvbi5tdWx0aVNlbGVjdFxuICAgICAgICAgICAgICA/IF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ucXVlc3Rpb24udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJxdWVzdGlvbi52YWx1ZVwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtQ29udHJvbCxcbiAgICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IGRpc3BsYXk6IFwibm9uZVwiIH0sXG4gICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImNoZWNrYm94XCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IF92bS5xdWVzdGlvbi5uYW1lICsgXCJfXCIgKyBfdm0ucXVlc3Rpb24uaWQsXG4gICAgICAgICAgICAgICAgICAgIGlkOiBfdm0ucXVlc3Rpb24uaW5wdXRJZCArIFwiX1wiICsgaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHkgfHwgIWl0ZW0uaXNFbmFibGVkLFxuICAgICAgICAgICAgICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLnF1ZXN0aW9uLmlzUmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24uYXJpYUxhYmVsLFxuICAgICAgICAgICAgICAgICAgICBcImFyaWEtaW52YWxpZFwiOiBfdm0ucXVlc3Rpb24uYXJpYUludmFsaWQsXG4gICAgICAgICAgICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBfdm0ucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5LFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkOiBBcnJheS5pc0FycmF5KF92bS5xdWVzdGlvbi52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICA/IF92bS5faShfdm0ucXVlc3Rpb24udmFsdWUsIGl0ZW0udmFsdWUpID4gLTFcbiAgICAgICAgICAgICAgICAgICAgICA6IF92bS5xdWVzdGlvbi52YWx1ZSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgJCRhID0gX3ZtLnF1ZXN0aW9uLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgJCRlbCA9ICRldmVudC50YXJnZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAkJGMgPSAkJGVsLmNoZWNrZWQgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSgkJGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgJCR2ID0gaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJCRpID0gX3ZtLl9pKCQkYSwgJCR2KVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQkZWwuY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAkJGkgPCAwICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLiRzZXQoX3ZtLnF1ZXN0aW9uLCBcInZhbHVlXCIsICQkYS5jb25jYXQoWyQkdl0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJCRpID4gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uJHNldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmFsdWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkYS5zbGljZSgwLCAkJGkpLmNvbmNhdCgkJGEuc2xpY2UoJCRpICsgMSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uJHNldChfdm0ucXVlc3Rpb24sIFwidmFsdWVcIiwgJCRjKVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgOiBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtbW9kZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnF1ZXN0aW9uLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwicXVlc3Rpb24udmFsdWVcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbUNvbnRyb2wsXG4gICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyBkaXNwbGF5OiBcIm5vbmVcIiB9LFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJyYWRpb1wiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBfdm0ucXVlc3Rpb24ubmFtZSArIFwiX1wiICsgX3ZtLnF1ZXN0aW9uLmlkLFxuICAgICAgICAgICAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIGl0ZW0udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0ucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5IHx8ICFpdGVtLmlzRW5hYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IF92bS5xdWVzdGlvbi5pc1JlcXVpcmVkLFxuICAgICAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX3ZtLnF1ZXN0aW9uLmFyaWFMYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogX3ZtLnF1ZXN0aW9uLmFyaWFJbnZhbGlkLFxuICAgICAgICAgICAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogX3ZtLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tlZDogX3ZtLl9xKF92bS5xdWVzdGlvbi52YWx1ZSwgaXRlbS52YWx1ZSksXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS4kc2V0KF92bS5xdWVzdGlvbiwgXCJ2YWx1ZVwiLCBpdGVtLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICBfYyhcImRpdlwiLCBbXG4gICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jb250ZW50TW9kZSA9PT0gXCJpbWFnZVwiXG4gICAgICAgICAgICAgICAgPyBfYyhcImltZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pbWFnZSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgb2JqZWN0Rml0OiBfdm0ucXVlc3Rpb24uaW1hZ2VGaXQgfSxcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICBzcmM6IGl0ZW0uaW1hZ2VMaW5rLFxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBfdm0ucXVlc3Rpb24uaW1hZ2VXaWR0aFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBfdm0ucXVlc3Rpb24uaW1hZ2VXaWR0aCArIFwicHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBfdm0ucXVlc3Rpb24uaW1hZ2VIZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmltYWdlSGVpZ2h0ICsgXCJweFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICBhbHQ6IGl0ZW0udGV4dCB8fCBpdGVtLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24uY29udGVudE1vZGUgPT09IFwidmlkZW9cIlxuICAgICAgICAgICAgICAgID8gX2MoXCJlbWJlZFwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pbWFnZSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgb2JqZWN0Rml0OiBfdm0ucXVlc3Rpb24uaW1hZ2VGaXQgfSxcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICBzcmM6IGl0ZW0uaW1hZ2VMaW5rLFxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBfdm0ucXVlc3Rpb24uaW1hZ2VXaWR0aFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBfdm0ucXVlc3Rpb24uaW1hZ2VXaWR0aCArIFwicHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBfdm0ucXVlc3Rpb24uaW1hZ2VIZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gX3ZtLnF1ZXN0aW9uLmltYWdlSGVpZ2h0ICsgXCJweFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLnNob3dMYWJlbFxuICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLml0ZW1UZXh0LFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHRpdGxlOiBpdGVtLnRleHQgfHwgaXRlbS52YWx1ZSB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhpdGVtLnRleHQgfHwgaXRlbS52YWx1ZSkpXVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgXSlcbiAgICAgIH0pLFxuICAgIF0sXG4gICAgMlxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMudGFibGVXcmFwcGVyIH0sIFtcbiAgICBfYyhcImZpZWxkc2V0XCIsIFtcbiAgICAgIF9jKFwibGVnZW5kXCIsIHtcbiAgICAgICAgYXR0cnM6IHsgXCJhcmlhLWxhYmVsXCI6IF92bS5xdWVzdGlvbi5sb2NUaXRsZS5yZW5kZXJlZEh0bWwgfSxcbiAgICAgIH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwidGFibGVcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdCB9LCBbXG4gICAgICAgIF92bS5xdWVzdGlvbi5zaG93SGVhZGVyXG4gICAgICAgICAgPyBfYyhcInRoZWFkXCIsIFtcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJ0clwiLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwidGRcIiwge1xuICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5xdWVzdGlvbi5oYXNSb3dzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJxdWVzdGlvbi5oYXNSb3dzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIF92bS5fbChcbiAgICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLnZpc2libGVDb2x1bW5zLFxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoY29sdW1uLCBjb2x1bW5JbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidGhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBjb2x1bW5JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmhlYWRlckNlbGwsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogY29sdW1uLmxvY1RleHQgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJ0Ym9keVwiLFxuICAgICAgICAgIF92bS5fbChfdm0ucXVlc3Rpb24udmlzaWJsZVJvd3MsIGZ1bmN0aW9uIChyb3csIHJvd0luZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgIFwidHJcIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGtleTogXCJyb3dfXCIgKyByb3cubmFtZSArIFwiX1wiICsgcm93SW5kZXgsXG4gICAgICAgICAgICAgICAgY2xhc3M6IHJvdy5yb3dDbGFzc2VzLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICBcInRkXCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnF1ZXN0aW9uLmhhc1Jvd3MsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInF1ZXN0aW9uLmhhc1Jvd3NcIixcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2VsbCxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBbX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHsgYXR0cnM6IHsgbG9jU3RyaW5nOiByb3cubG9jVGV4dCB9IH0pXSxcbiAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgX3ZtLl9sKFxuICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLnZpc2libGVDb2x1bW5zLFxuICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGNvbHVtbiwgY29sdW1uSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5xdWVzdGlvbi5oYXNDZWxsVGV4dFxuICAgICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwidGRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRJdGVtQ2xhc3Mocm93LCBjb2x1bW4pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmNlbGxDbGljayhyb3csIGNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NTdHJpbmc6IF92bS5xdWVzdGlvbi5nZXRDZWxsRGlzcGxheUxvY1RleHQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICBfdm0uX2woXG4gICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24udmlzaWJsZUNvbHVtbnMsXG4gICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoY29sdW1uLCBjb2x1bW5JbmRleCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIV92bS5xdWVzdGlvbi5oYXNDZWxsVGV4dFxuICAgICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwidGRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNlbGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdGl0bGU6IGNvbHVtbi5sb2NUZXh0LnJlbmRlcmVkSHRtbCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmNlbGxDbGljayhyb3csIGNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsYWJlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldEl0ZW1DbGFzcyhyb3csIGNvbHVtbikgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcm93LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInJvdy52YWx1ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwicmFkaW9cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHJvdy5mdWxsTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0ucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5pbnB1dElkICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJfXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cubmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiX1wiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24uYXJpYUxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogX3ZtLnF1ZXN0aW9uLmFyaWFJbnZhbGlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5hcmlhRGVzY3JpYmVkQnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNvbHVtbi52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IF92bS5fcShyb3cudmFsdWUsIGNvbHVtbi52YWx1ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uJHNldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3csXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2YWx1ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMubWF0ZXJpYWxEZWNvcmF0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzdmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbURlY29yYXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB2aWV3Qm94OiBcIi0xMiAtMTIgMjQgMjRcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJjaXJjbGVcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgcjogXCI2XCIsIGN4OiBcIjBcIiwgY3k6IFwiMFwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcInNwYW5cIiwgeyBzdGF0aWNDbGFzczogXCJjaXJjbGVcIiB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwiY2hlY2tcIiB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHsgc3R5bGU6IHsgZGlzcGxheTogXCJub25lXCIgfSB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS5xdWVzdGlvbi5sb2NUaXRsZS5yZW5kZXJlZEh0bWwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAyXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSksXG4gICAgICAgICAgMFxuICAgICAgICApLFxuICAgICAgXSksXG4gICAgXSksXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJ0ZFwiLFxuICAgIHtcbiAgICAgIGNsYXNzOiBfdm0uY2VsbC5jbGFzc05hbWUsXG4gICAgICBzdHlsZTogX3ZtLmdldENlbGxTdHlsZSgpLFxuICAgICAgYXR0cnM6IHsgdGl0bGU6IF92bS5nZXRIZWFkZXJzKCksIGNvbHNwYW46IF92bS5jZWxsLmNvbFNwYW5zIH0sXG4gICAgfSxcbiAgICBbXG4gICAgICBfdm0uY2VsbC5pc0FjdGlvbnNDZWxsXG4gICAgICAgID8gX2MoXCJzdi1hY3Rpb24tYmFyXCIsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7IG1vZGVsOiBfdm0uY2VsbC5pdGVtLmdldERhdGEoKSwgaGFuZGxlQ2xpY2s6IGZhbHNlIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uY2VsbC5oYXNQYW5lbFxuICAgICAgICA/IF9jKF92bS5nZXRDb21wb25lbnROYW1lKF92bS5jZWxsLnBhbmVsKSwge1xuICAgICAgICAgICAgdGFnOiBcImNvbXBvbmVudFwiLFxuICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5jZWxsLnBhbmVsLCBjc3M6IF92bS5xdWVzdGlvbi5zdXJ2ZXkuY3NzIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uY2VsbC5oYXNRdWVzdGlvblxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX3ZtLmhhc0Vycm9yc09uVG9wXG4gICAgICAgICAgICAgICAgPyBfYyhcInN1cnZleS1lcnJvcnNcIiwge1xuICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBlbGVtZW50OiBfdm0uY2VsbC5xdWVzdGlvbiwgbG9jYXRpb246IFwidG9wXCIgfSxcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgIV92bS5jZWxsLmlzQ2hvaWNlICYmIF92bS5jZWxsLnF1ZXN0aW9uLmlzRGVmYXVsdFJlbmRlcmluZygpXG4gICAgICAgICAgICAgICAgPyBfYyhfdm0uZ2V0Q29tcG9uZW50TmFtZShfdm0uY2VsbC5xdWVzdGlvbiksIHtcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uaXNWaXNpYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJpc1Zpc2libGVcIixcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0uY2VsbC5xdWVzdGlvbiB9LFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAhX3ZtLmNlbGwuaXNDaG9pY2UgJiYgIV92bS5jZWxsLnF1ZXN0aW9uLmlzRGVmYXVsdFJlbmRlcmluZygpXG4gICAgICAgICAgICAgICAgPyBfYyhfdm0uY2VsbC5xdWVzdGlvbi5nZXRDb21wb25lbnROYW1lKCksIHtcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uaXNWaXNpYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJpc1Zpc2libGVcIixcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0uY2VsbC5xdWVzdGlvbiB9LFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfdm0uY2VsbC5pc0Nob2ljZSAmJiAhX3ZtLmNlbGwuaXNDaGVja2JveFxuICAgICAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktcmFkaW9ncm91cC1pdGVtXCIsIHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiBfdm0uY2VsbC5pdGVtLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmdldEl0ZW1DbGFzcyhfdm0uY2VsbC5pdGVtKSxcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbjogX3ZtLmNlbGwucXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbTogX3ZtLmNlbGwuaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICBpbmRleDogXCJcIiArIF92bS5jZWxsLmluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgIGhpZGVMYWJlbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX3ZtLmNlbGwuaXNDaG9pY2UgJiYgX3ZtLmNlbGwuaXNDaGVja2JveFxuICAgICAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktY2hlY2tib3gtaXRlbVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogX3ZtLmNlbGwuaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5nZXRJdGVtQ2xhc3MoX3ZtLmNlbGwuaXRlbSksXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb246IF92bS5jZWxsLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW06IF92bS5jZWxsLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IFwiXCIgKyBfdm0uY2VsbC5pbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICBoaWRlTGFiZWw6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF92bS5oYXNFcnJvcnNPbkJvdHRvbVxuICAgICAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktZXJyb3JzXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgZWxlbWVudDogX3ZtLmNlbGwucXVlc3Rpb24sIGxvY2F0aW9uOiBcImJvdHRvbVwiIH0sXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uY2VsbC5oYXNUaXRsZVxuICAgICAgICA/IF9jKFwic3VydmV5LXN0cmluZ1wiLCB7IGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLmNlbGwubG9jVGl0bGUgfSB9KVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICEhX3ZtLmNlbGwucmVxdWlyZWRUZXh0XG4gICAgICAgID8gX2MoXCJzcGFuXCIsIFtfdm0uX3YoX3ZtLl9zKF92bS5jZWxsLnJlcXVpcmVkVGV4dCkpXSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBzdHlsZTogeyBvdmVyZmxvd1g6IF92bS5xdWVzdGlvbi5ob3Jpem9udGFsU2Nyb2xsID8gXCJzY3JvbGxcIiA6IFwiXCIgfSB9LFxuICAgIFtfYyhcInN1cnZleS1tYXRyaXh0YWJsZVwiLCB7IGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24gfSB9KV0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7IHN0eWxlOiB7IG92ZXJmbG93WDogX3ZtLnF1ZXN0aW9uLmhvcml6b250YWxTY3JvbGwgPyBcInNjcm9sbFwiIDogXCJcIiB9IH0sXG4gICAgW1xuICAgICAgX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGUuc2hvd0FkZFJvd09uVG9wXG4gICAgICAgID8gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZm9vdGVyIH0sIFtcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRBZGRSb3dCdXR0b25Dc3MoKSxcbiAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5hZGRSb3dDbGljayB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLnF1ZXN0aW9uLmxvY0FkZFJvd1RleHQgfSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgIF9jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pY29uQWRkIH0pLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAxXG4gICAgICAgICAgICApLFxuICAgICAgICAgIF0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGUuc2hvd1RhYmxlXG4gICAgICAgID8gX2MoXCJzdXJ2ZXktbWF0cml4dGFibGVcIiwgeyBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uIH0gfSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAhX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkVGFibGUuc2hvd1RhYmxlXG4gICAgICAgID8gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZW1wdHlSb3dzU2VjdGlvbiB9LCBbXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZW1wdHlSb3dzVGV4dCB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLnF1ZXN0aW9uLmxvY0VtcHR5Um93c1RleHQgfSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0QWRkUm93QnV0dG9uQ3NzKHRydWUpLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiYnV0dG9uXCIgfSxcbiAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmFkZFJvd0NsaWNrIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0ucXVlc3Rpb24ubG9jQWRkUm93VGV4dCB9LFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmljb25BZGQgfSksXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICksXG4gICAgICAgICAgXSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0ucXVlc3Rpb24ucmVuZGVyZWRUYWJsZS5zaG93QWRkUm93T25Cb3R0b21cbiAgICAgICAgPyBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5mb290ZXIgfSwgW1xuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldEFkZFJvd0J1dHRvbkNzcygpLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiYnV0dG9uXCIgfSxcbiAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmFkZFJvd0NsaWNrIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbG9jU3RyaW5nOiBfdm0ucXVlc3Rpb24ubG9jQWRkUm93VGV4dCB9LFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmljb25BZGQgfSksXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICksXG4gICAgICAgICAgXSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwidGFibGVcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucm9vdCB9LCBbXG4gICAgX3ZtLnRhYmxlLnNob3dIZWFkZXJcbiAgICAgID8gX2MoXCJ0aGVhZFwiLCBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcInRyXCIsXG4gICAgICAgICAgICBfdm0uX2woX3ZtLnRhYmxlLmhlYWRlclJvdy5jZWxscywgZnVuY3Rpb24gKGNlbGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICAgIFwidGhcIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBrZXk6IFwiaGVhZGVyX1wiICsgY2VsbC5pZCxcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5oZWFkZXJDZWxsLFxuICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgbWluV2lkdGg6IGNlbGwubWluV2lkdGgsIHdpZHRoOiBjZWxsLndpZHRoIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBjZWxsLmhhc1RpdGxlXG4gICAgICAgICAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogY2VsbC5sb2NUaXRsZSB9LFxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgISFjZWxsLnJlcXVpcmVkVGV4dFxuICAgICAgICAgICAgICAgICAgICA/IF9jKFwic3BhblwiLCBbX3ZtLl92KF92bS5fcyhjZWxsLnJlcXVpcmVkVGV4dCkpXSlcbiAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAwXG4gICAgICAgICAgKSxcbiAgICAgICAgXSlcbiAgICAgIDogX3ZtLl9lKCksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfYyhcbiAgICAgIFwidGJvZHlcIixcbiAgICAgIF92bS5fbChfdm0udGFibGUucm93cywgZnVuY3Rpb24gKHJvdykge1xuICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgXCJ0clwiLFxuICAgICAgICAgIHsga2V5OiBfdm0ucXVlc3Rpb24uaW5wdXRJZCArIFwiX1wiICsgcm93LmlkLCBjbGFzczogcm93LmNsYXNzTmFtZSB9LFxuICAgICAgICAgIF92bS5fbChyb3cuY2VsbHMsIGZ1bmN0aW9uIChjZWxsLCBjZWxsSW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiBfYyhcInN1cnZleS1tYXRyaXhjZWxsXCIsIHtcbiAgICAgICAgICAgICAga2V5OiByb3cuaWQgKyBcIl9cIiArIGNlbGxJbmRleCxcbiAgICAgICAgICAgICAgYXR0cnM6IHsgY2VsbDogY2VsbCwgcXVlc3Rpb246IF92bS5xdWVzdGlvbiB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAxXG4gICAgICAgIClcbiAgICAgIH0pLFxuICAgICAgMFxuICAgICksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfdm0udGFibGUuc2hvd0Zvb3RlclxuICAgICAgPyBfYyhcInRmb290XCIsIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwidHJcIixcbiAgICAgICAgICAgIF92bS5fbChfdm0udGFibGUuZm9vdGVyUm93LmNlbGxzLCBmdW5jdGlvbiAoY2VsbCwgY2VsbEluZGV4KSB7XG4gICAgICAgICAgICAgIHJldHVybiBfYyhcInN1cnZleS1tYXRyaXhjZWxsXCIsIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiZm9vdGVyX1wiICsgY2VsbEluZGV4LFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7IGNlbGw6IGNlbGwsIHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24gfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgMVxuICAgICAgICAgICksXG4gICAgICAgIF0pXG4gICAgICA6IF92bS5fZSgpLFxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwidGFibGVcIixcbiAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290IH0sXG4gICAgX3ZtLl9sKF92bS5xdWVzdGlvbi5nZXRSb3dzKCksIGZ1bmN0aW9uIChyb3csIHJvd2luZGV4KSB7XG4gICAgICByZXR1cm4gX2MoXG4gICAgICAgIFwidHJcIixcbiAgICAgICAge1xuICAgICAgICAgIGtleTogX3ZtLnF1ZXN0aW9uLmlucHV0SWQgKyBcInJvd2tleVwiICsgcm93aW5kZXgsXG4gICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvdyxcbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF92bS5fbChyb3csIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcInRkXCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAga2V5OiBcImxhYmVsXCIgKyBpdGVtLmVkaXRvci5pZCxcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0SXRlbVRpdGxlQ3NzKCksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBpdGVtLmVkaXRvci5pc1JlcXVpcmVUZXh0QmVmb3JlVGl0bGUgfHxcbiAgICAgICAgICAgICAgICAgIGl0ZW0uZWRpdG9yLmlzUmVxdWlyZVRleHRPblN0YXJ0XG4gICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlcXVpcmVkVGV4dCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgW192bS5fdihfdm0uX3MoaXRlbS5lZGl0b3IucmVxdWlyZWRUZXh0KSldXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7IGF0dHJzOiB7IGxvY1N0cmluZzogaXRlbS5sb2NUaXRsZSB9IH0pLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIGl0ZW0uZWRpdG9yLmlzUmVxdWlyZVRleHRBZnRlclRpdGxlXG4gICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJlcXVpcmVkVGV4dCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgW192bS5fdihfdm0uX3MoaXRlbS5lZGl0b3IucmVxdWlyZWRUZXh0KSldXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcInRkXCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAga2V5OiBpdGVtLmVkaXRvci5pZCxcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGNzczogX3ZtLnF1ZXN0aW9uLmdldEl0ZW1Dc3MoKSB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX3ZtLmhhc0Vycm9yc09uVG9wXG4gICAgICAgICAgICAgICAgICAgID8gX2MoXCJzdXJ2ZXktZXJyb3JzXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGVsZW1lbnQ6IGl0ZW0uZWRpdG9yLCBsb2NhdGlvbjogXCJ0b3BcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX2MoX3ZtLmdldENvbXBvbmVudE5hbWUoaXRlbS5lZGl0b3IpLCB7XG4gICAgICAgICAgICAgICAgICAgIHRhZzogXCJjb21wb25lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IGl0ZW0uZWRpdG9yIH0sXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICBfdm0uaGFzRXJyb3JzT25Cb3R0b21cbiAgICAgICAgICAgICAgICAgICAgPyBfYyhcInN1cnZleS1lcnJvcnNcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgZWxlbWVudDogaXRlbS5lZGl0b3IsIGxvY2F0aW9uOiBcImJvdHRvbVwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9KSxcbiAgICAgICAgXSxcbiAgICAgICAgMlxuICAgICAgKVxuICAgIH0pLFxuICAgIDBcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5jc3MuZm9vdGVyIH0sIFtcbiAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgdmFsdWU6IF92bS5zaG93UHJldkJ0bixcbiAgICAgICAgICBleHByZXNzaW9uOiBcInNob3dQcmV2QnRuXCIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgY2xhc3M6IF92bS5zdXJ2ZXkuY3NzTmF2aWdhdGlvblByZXYsXG4gICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiLCB2YWx1ZTogX3ZtLnN1cnZleS5wYWdlUHJldlRleHQgfSxcbiAgICAgIG9uOiB7IG1vdXNlZG93bjogX3ZtLmJ1dHRvbk1vdXNlRG93biwgY2xpY2s6IF92bS5wcmV2UGFnZSB9LFxuICAgIH0pLFxuICAgIF92bS5fdihcIiBcIiksXG4gICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgIHZhbHVlOiBfdm0uc2hvd05leHRCdG4sXG4gICAgICAgICAgZXhwcmVzc2lvbjogXCJzaG93TmV4dEJ0blwiLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGNsYXNzOiBfdm0uc3VydmV5LmNzc05hdmlnYXRpb25OZXh0LFxuICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiwgdmFsdWU6IF92bS5zdXJ2ZXkucGFnZU5leHRUZXh0IH0sXG4gICAgICBvbjogeyBtb3VzZWRvd246IF92bS5uZXh0QnV0dG9uTW91c2VEb3duLCBjbGljazogX3ZtLm5leHRQYWdlIH0sXG4gICAgfSksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfdm0uc3VydmV5LmlzUHJldmlld0J1dHRvblZpc2libGVcbiAgICAgID8gX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgdmFsdWU6IF92bS5zdXJ2ZXkuaXNMYXN0UGFnZSxcbiAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJzdXJ2ZXkuaXNMYXN0UGFnZVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGNsYXNzOiBfdm0uc3VydmV5LmNzc05hdmlnYXRpb25QcmV2aWV3LFxuICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiYnV0dG9uXCIsIHZhbHVlOiBfdm0uc3VydmV5LnByZXZpZXdUZXh0IH0sXG4gICAgICAgICAgb246IHsgbW91c2Vkb3duOiBfdm0uYnV0dG9uTW91c2VEb3duLCBjbGljazogX3ZtLnNob3dQcmV2aWV3IH0sXG4gICAgICAgIH0pXG4gICAgICA6IF92bS5fZSgpLFxuICAgIF92bS5fdihcIiBcIiksXG4gICAgX3ZtLnN1cnZleS5pc0NvbXBsZXRlQnV0dG9uVmlzaWJsZVxuICAgICAgPyBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnNob3dDb21wbGV0ZUJ0bixcbiAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJzaG93Q29tcGxldGVCdG5cIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBjbGFzczogX3ZtLnN1cnZleS5jc3NOYXZpZ2F0aW9uQ29tcGxldGUsXG4gICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiwgdmFsdWU6IF92bS5zdXJ2ZXkuY29tcGxldGVUZXh0IH0sXG4gICAgICAgICAgb246IHsgbW91c2Vkb3duOiBfdm0uYnV0dG9uTW91c2VEb3duLCBjbGljazogX3ZtLmNvbXBsZXRlTGFzdFBhZ2UgfSxcbiAgICAgICAgfSlcbiAgICAgIDogX3ZtLl9lKCksXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJmb3JtLWdyb3VwXCIgfSwgW1xuICAgICFfdm0ucXVlc3Rpb24uaXNSZWFkT25seVJlbmRlckRpdigpXG4gICAgICA/IF9jKFwidGV4dGFyZWFcIiwge1xuICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5vdGhlciB8fCBfdm0uY29tbWVudENsYXNzLFxuICAgICAgICAgIHN0eWxlOiB7IHJlc2l6ZTogX3ZtLnF1ZXN0aW9uLmF1dG9Hcm93Q29tbWVudCA/IFwibm9uZVwiIDogXCJib3RoXCIgfSxcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgcmVhZG9ubHk6IF92bS5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHksXG4gICAgICAgICAgICBkaXNhYmxlZDogX3ZtLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSxcbiAgICAgICAgICAgIG1heGxlbmd0aDogX3ZtLnF1ZXN0aW9uLmdldE90aGVyc01heExlbmd0aCgpLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IF92bS5xdWVzdGlvbi5vdGhlclBsYWNlSG9sZGVyLFxuICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5xdWVzdGlvbi5hcmlhTGFiZWwsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogX3ZtLnF1ZXN0aW9uLmNvbW1lbnQgfSxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24ub25Db21tZW50Q2hhbmdlKGUpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5vbkNvbW1lbnRJbnB1dChlKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgOiBfdm0uX2UoKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF92bS5xdWVzdGlvbi5pc1JlYWRPbmx5UmVuZGVyRGl2KClcbiAgICAgID8gX2MoXCJkaXZcIiwgW192bS5fdihfdm0uX3MoX3ZtLnF1ZXN0aW9uLmNvbW1lbnQpKV0pXG4gICAgICA6IF92bS5fZSgpLFxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBjbGFzczogX3ZtLnBhZ2UuY3NzQ2xhc3Nlcy5wYWdlLnJvb3QgfSxcbiAgICBbXG4gICAgICBfYyhcInN1cnZleS1lbGVtZW50LXRpdGxlXCIsIHtcbiAgICAgICAgYXR0cnM6IHsgZWxlbWVudDogX3ZtLnBhZ2UsIGNzczogX3ZtLmNzcyB9LFxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLnNob3dEZXNjcmlwdGlvblxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHsgY2xhc3M6IF92bS5wYWdlLmNzc0NsYXNzZXMucGFnZS5kZXNjcmlwdGlvbiB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInN1cnZleS1zdHJpbmdcIiwge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLnBhZ2UubG9jRGVzY3JpcHRpb24gfSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uX2woX3ZtLnJvd3MsIGZ1bmN0aW9uIChyb3csIGluZGV4KSB7XG4gICAgICAgIHJldHVybiByb3cudmlzaWJsZVxuICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgIHsga2V5OiBfdm0ucGFnZS5pZCArIFwiX1wiICsgaW5kZXgsIGNsYXNzOiByb3cuZ2V0Um93Q3NzKCkgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LXJvd1wiLCB7XG4gICAgICAgICAgICAgICAgICBhdHRyczogeyByb3c6IHJvdywgc3VydmV5OiBfdm0uc3VydmV5LCBjc3M6IF92bS5jc3MgfSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgIH0pLFxuICAgIF0sXG4gICAgMlxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX3ZtLnF1ZXN0aW9uLmlzVmlzaWJsZVxuICAgID8gX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucGFuZWwuY29udGFpbmVyLFxuICAgICAgICAgIHN0eWxlOiBfdm0ucm9vdFN0eWxlLFxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJzdXJ2ZXktZWxlbWVudC10aXRsZVwiLCB7XG4gICAgICAgICAgICBhdHRyczogeyBlbGVtZW50OiBfdm0ucXVlc3Rpb24sIGNzczogX3ZtLmNzcyB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucGFuZWwuZGVzY3JpcHRpb24gfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICBhdHRyczogeyBsb2NTdHJpbmc6IF92bS5xdWVzdGlvbi5sb2NEZXNjcmlwdGlvbiB9LFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFwic3VydmV5LWVycm9yc1wiLCB7IGF0dHJzOiB7IGVsZW1lbnQ6IF92bS5xdWVzdGlvbiB9IH0pLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgIV92bS5pc0NvbGxhcHNlZFxuICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wYW5lbC5jb250ZW50LFxuICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgcGFkZGluZ0xlZnQ6IF92bS5xdWVzdGlvbi5pbm5lclBhZGRpbmdMZWZ0IH0sXG4gICAgICAgICAgICAgICAgICBhdHRyczogeyBpZDogX3ZtLnF1ZXN0aW9uLmNvbnRlbnRJZCB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX3ZtLl9sKF92bS5yb3dzLCBmdW5jdGlvbiAocm93LCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm93LnZpc2libGVcbiAgICAgICAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBfdm0ucXVlc3Rpb24uaWQgKyBcIl9cIiArIGluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiByb3cuZ2V0Um93Q3NzKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcInN1cnZleS1yb3dcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cnZleTogX3ZtLnN1cnZleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzOiBfdm0uY3NzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIF9jKFwic3YtYWN0aW9uLWJhclwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IG1vZGVsOiBfdm0ucXVlc3Rpb24uZ2V0Rm9vdGVyVG9vbGJhcigpIH0sXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKVxuICAgIDogX3ZtLl9lKClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnJvb3QgfSxcbiAgICBbXG4gICAgICBfYyhcImhyXCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnNlcGFyYXRvclYyIH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5xdWVzdGlvbi5pc1Byb2dyZXNzVG9wU2hvd2luZ1xuICAgICAgICA/IF9jKFwic3VydmV5LXBhbmVsZHluYW1pY3Byb2dyZXNzXCIsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24gfSxcbiAgICAgICAgICB9KVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5fbChfdm0ucmVuZGVyZWRQYW5lbHMsIGZ1bmN0aW9uIChwYW5lbCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHsga2V5OiBwYW5lbC5pZCwgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRQYW5lbFdyYXBwZXJDc3MoKSB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInN1cnZleS1wYW5lbFwiLCB7IGF0dHJzOiB7IHF1ZXN0aW9uOiBwYW5lbCwgY3NzOiBfdm0uY3NzIH0gfSksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF9jKFwic3VydmV5LXBhbmVsZHluYW1pY3JlbW92ZVwiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5xdWVzdGlvbiwgcGFuZWw6IHBhbmVsIH0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX2MoXCJoclwiLCB7XG4gICAgICAgICAgICBrZXk6IFwic2VwYXJhdG9yXCIgKyBwYW5lbC5pZCxcbiAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5zZXBhcmF0b3IsXG4gICAgICAgICAgfSksXG4gICAgICAgIF1cbiAgICAgIH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5xdWVzdGlvbi5pc1Byb2dyZXNzQm90dG9tU2hvd2luZ1xuICAgICAgICA/IF9jKFwic3VydmV5LXBhbmVsZHluYW1pY3Byb2dyZXNzXCIsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24gfSxcbiAgICAgICAgICB9KVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5xdWVzdGlvbi5pc1JlbmRlck1vZGVMaXN0ICYmIF92bS5xdWVzdGlvbi5jYW5BZGRQYW5lbFxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRBZGRCdXR0b25Dc3MoKSxcbiAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiB9LFxuICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmFkZFBhbmVsQ2xpY2sgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b25BZGRUZXh0IH0sIFtcbiAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICBcIlxcbiAgICAgIFwiICsgX3ZtLl9zKF92bS5xdWVzdGlvbi5wYW5lbEFkZFRleHQpICsgXCJcXG4gICAgXCJcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJzdXJ2ZXktcGFuZWxkeW5hbWljcHJvZ3Jlc3MtdjJcIiwge1xuICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uIH0sXG4gICAgICB9KSxcbiAgICBdLFxuICAgIDJcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgY2xhc3M6IHRoaXMuY3NzQ2xhc3MsIHN0YXRpY1N0eWxlOiB7IGNsZWFyOiBcImJvdGhcIiB9IH0sIFtcbiAgICBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc0NvbnRhaW5lciB9LCBbXG4gICAgICBfYyhcImRpdlwiLCB7IGF0dHJzOiB7IHRpdGxlOiBfdm0ucXVlc3Rpb24ucGFuZWxQcmV2VGV4dCB9IH0sIFtcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJzdmdcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldFByZXZCdXR0b25Dc3MoKSxcbiAgICAgICAgICAgIGF0dHJzOiB7IHZpZXdCb3g6IFwiMCAwIDEwIDEwXCIgfSxcbiAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0ucHJldlBhbmVsQ2xpY2sgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIFtfYyhcInBvbHlnb25cIiwgeyBhdHRyczogeyBwb2ludHM6IFwiMiwyIDAsNCA1LDkgMTAsNCA4LDIgNSw1IFwiIH0gfSldXG4gICAgICAgICksXG4gICAgICBdKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0ucXVlc3Rpb24uaXNSYW5nZVNob3dpbmdcbiAgICAgICAgPyBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzcyB9LCBbXG4gICAgICAgICAgICBfYyhcImRpdlwiLCB7XG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5wcm9ncmVzc0JhcixcbiAgICAgICAgICAgICAgc3R5bGU6IHsgd2lkdGg6IF92bS5wcm9ncmVzcyB9LFxuICAgICAgICAgICAgICBhdHRyczogeyByb2xlOiBcInByb2dyZXNzYmFyXCIgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJkaXZcIiwgeyBhdHRyczogeyB0aXRsZTogX3ZtLnF1ZXN0aW9uLnBhbmVsTmV4dFRleHQgfSB9LCBbXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwic3ZnXCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXROZXh0QnV0dG9uQ3NzKCksXG4gICAgICAgICAgICBhdHRyczogeyB2aWV3Qm94OiBcIjAgMCAxMCAxMFwiIH0sXG4gICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLm5leHRQYW5lbENsaWNrIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBbX2MoXCJwb2x5Z29uXCIsIHsgYXR0cnM6IHsgcG9pbnRzOiBcIjIsMiAwLDQgNSw5IDEwLDQgOCwyIDUsNSBcIiB9IH0pXVxuICAgICAgICApLFxuICAgICAgXSksXG4gICAgXSksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfdm0ucXVlc3Rpb24uY2FuQWRkUGFuZWxcbiAgICAgID8gX2MoXG4gICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldEFkZEJ1dHRvbkNzcygpLFxuICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiB9LFxuICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5hZGRQYW5lbENsaWNrIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuYnV0dG9uQWRkVGV4dCB9LCBbXG4gICAgICAgICAgICAgIF92bS5fdihcIlxcbiAgICAgIFwiICsgX3ZtLl9zKF92bS5xdWVzdGlvbi5wYW5lbEFkZFRleHQpICsgXCJcXG4gICAgXCIpLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgXVxuICAgICAgICApXG4gICAgICA6IF92bS5fZSgpLFxuICAgIF92bS5fdihcIiBcIiksXG4gICAgX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3NUZXh0IH0sIFtcbiAgICAgIF92bS5fdihcIlxcbiAgICBcIiArIF92bS5fcyhfdm0ucXVlc3Rpb24ucHJvZ3Jlc3NUZXh0KSArIFwiXFxuICBcIiksXG4gICAgXSksXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZm9vdGVyIH0sIFtcbiAgICBfdm0ucXVlc3Rpb24uaXNSYW5nZVNob3dpbmcgJiYgX3ZtLnF1ZXN0aW9uLmlzUHJvZ3Jlc3NCb3R0b21TaG93aW5nXG4gICAgICA/IF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnByb2dyZXNzIH0sIFtcbiAgICAgICAgICBfYyhcImRpdlwiLCB7XG4gICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3NCYXIsXG4gICAgICAgICAgICBzdHlsZTogeyB3aWR0aDogX3ZtLnByb2dyZXNzIH0sXG4gICAgICAgICAgICBhdHRyczogeyByb2xlOiBcInByb2dyZXNzYmFyXCIgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSlcbiAgICAgIDogX3ZtLl9lKCksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfYyhcImhyXCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnNlcGFyYXRvclYyIH0pLFxuICAgIF92bS5fdihcIiBcIiksXG4gICAgX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuZm9vdGVyQnV0dG9uc0NvbnRhaW5lciB9LCBbXG4gICAgICBfdm0ucXVlc3Rpb24uY2FuQWRkUGFuZWxcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0QWRkQnV0dG9uQ3NzKCksXG4gICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiYnV0dG9uXCIgfSxcbiAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5hZGRQYW5lbENsaWNrIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuYnV0dG9uQWRkVGV4dCB9LCBbXG4gICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLnF1ZXN0aW9uLnBhbmVsQWRkVGV4dCkgK1xuICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgXCJcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgIV92bS5xdWVzdGlvbi5pc1JlbmRlck1vZGVMaXN0XG4gICAgICAgID8gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3NDb250YWluZXIgfSwgW1xuICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBhdHRyczogeyB0aXRsZTogX3ZtLnF1ZXN0aW9uLnBhbmVsUHJldlRleHQgfSB9LCBbXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwic3ZnXCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRQcmV2QnV0dG9uQ3NzKCksXG4gICAgICAgICAgICAgICAgICBhdHRyczogeyB2aWV3Qm94OiBcIjAgMCAxNSAxNFwiIH0sXG4gICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLnByZXZQYW5lbENsaWNrIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbX2MoXCJwYXRoXCIsIHsgYXR0cnM6IHsgZDogX3ZtLnByb2dyZXNzQnV0dG9uU3ZnUGF0aCB9IH0pXVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMucHJvZ3Jlc3NUZXh0IH0sIFtcbiAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0ucXVlc3Rpb24ucHJvZ3Jlc3NUZXh0KSksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICBfYyhcImRpdlwiLCB7IGF0dHJzOiB7IHRpdGxlOiBfdm0ucXVlc3Rpb24ucGFuZWxOZXh0VGV4dCB9IH0sIFtcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJzdmdcIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldE5leHRCdXR0b25Dc3MoKSxcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHZpZXdCb3g6IFwiMCAwIDE1IDE0XCIgfSxcbiAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0ubmV4dFBhbmVsQ2xpY2sgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtfYyhcInBhdGhcIiwgeyBhdHRyczogeyBkOiBfdm0ucHJvZ3Jlc3NCdXR0b25TdmdQYXRoIH0gfSldXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICBdKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgIF0pLFxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF92bS5xdWVzdGlvbi5jYW5SZW1vdmVQYW5lbCAmJiAhX3ZtLnF1ZXN0aW9uLmlzUmVhZE9ubHlcbiAgICA/IF9jKFxuICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICB7XG4gICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgdmFsdWU6ICFfdm0uaXNDb2xsYXBzZWQsXG4gICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiIWlzQ29sbGFwc2VkXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRQYW5lbFJlbW92ZUJ1dHRvbkNzcygpLFxuICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiYnV0dG9uXCIgfSxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF92bS5yZW1vdmVQYW5lbENsaWNrKF92bS5wYW5lbClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5idXR0b25SZW1vdmVUZXh0IH0sIFtcbiAgICAgICAgICAgIF92bS5fdihcIlxcbiAgICBcIiArIF92bS5fcyhfdm0ucXVlc3Rpb24ucGFuZWxSZW1vdmVUZXh0KSArIFwiXFxuICBcIiksXG4gICAgICAgICAgXSksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcInNwYW5cIiwgeyBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaWNvblJlbW92ZSB9KSxcbiAgICAgICAgXVxuICAgICAgKVxuICAgIDogX3ZtLl9lKClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uY3NzLnByb2dyZXNzIH0sIFtcbiAgICBfYyhcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7XG4gICAgICAgIGNsYXNzOiBfdm0uY3NzLnByb2dyZXNzQmFyLFxuICAgICAgICBzdHlsZTogeyB3aWR0aDogX3ZtLnByb2dyZXNzIH0sXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgcm9sZTogXCJwcm9ncmVzc2JhclwiLFxuICAgICAgICAgIFwiYXJpYS12YWx1ZW1pblwiOiBcIjBcIixcbiAgICAgICAgICBcImFyaWEtdmFsdWVtYXhcIjogXCIxMDBcIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBbXG4gICAgICAgIF9jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0uZ2V0UHJvZ3Jlc3NUZXh0SW5CYXJDc3MoX3ZtLmNzcykgfSwgW1xuICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLnN1cnZleS5wcm9ncmVzc1RleHQpKSxcbiAgICAgICAgXSksXG4gICAgICBdXG4gICAgKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF9jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0uZ2V0UHJvZ3Jlc3NUZXh0VW5kZXJCYXJDc3MoX3ZtLmNzcykgfSwgW1xuICAgICAgX3ZtLl92KF92bS5fcyhfdm0uc3VydmV5LnByb2dyZXNzVGV4dCkpLFxuICAgIF0pLFxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5jc3MucHJvZ3Jlc3NCdXR0b25zQ29udGFpbmVyQ2VudGVyIH0sIFtcbiAgICBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uY3NzLnByb2dyZXNzQnV0dG9uc0NvbnRhaW5lciB9LCBbXG4gICAgICBfYyhcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzOiBfdm0uZ2V0U2Nyb2xsQnV0dG9uQ3NzKF92bS5oYXNTY3JvbGxlciwgdHJ1ZSksXG4gICAgICAgIGF0dHJzOiB7IHJvbGU6IFwiYnV0dG9uXCIgfSxcbiAgICAgICAgb246IHtcbiAgICAgICAgICBjbGljazogZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIF92bS5jbGlja1Njcm9sbEJ1dHRvbih0cnVlKVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIHJlZjogXCJwcm9ncmVzc0J1dHRvbnNMaXN0Q29udGFpbmVyXCIsXG4gICAgICAgICAgY2xhc3M6IF92bS5jc3MucHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lcixcbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJ1bFwiLFxuICAgICAgICAgICAgeyBjbGFzczogX3ZtLmNzcy5wcm9ncmVzc0J1dHRvbnNMaXN0IH0sXG4gICAgICAgICAgICBfdm0uX2woX3ZtLnN1cnZleS52aXNpYmxlUGFnZXMsIGZ1bmN0aW9uIChwYWdlLCBpbmRleCkge1xuICAgICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgICAgXCJsaVwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGtleTogXCJsaXN0ZWxlbWVudFwiICsgaW5kZXgsXG4gICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmdldExpc3RFbGVtZW50Q3NzKGluZGV4KSxcbiAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLmlzTGlzdEVsZW1lbnRDbGlja2FibGUoaW5kZXgpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IF92bS5jbGlja0xpc3RFbGVtZW50KGluZGV4KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmNzcy5wcm9ncmVzc0J1dHRvbnNQYWdlVGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlLmxvY05hdmlnYXRpb25UaXRsZS5yZW5kZXJlZEh0bWwgfHwgcGFnZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UubG9jTmF2aWdhdGlvblRpdGxlLnJlbmRlcmVkSHRtbCB8fCBwYWdlLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uY3NzLnByb2dyZXNzQnV0dG9uc1BhZ2VEZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBhZ2UubG9jTmF2aWdhdGlvbkRlc2NyaXB0aW9uLnJlbmRlcmVkSHRtbCxcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhwYWdlLmxvY05hdmlnYXRpb25EZXNjcmlwdGlvbi5yZW5kZXJlZEh0bWwpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAwXG4gICAgICAgICAgKSxcbiAgICAgICAgXVxuICAgICAgKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzOiBfdm0uZ2V0U2Nyb2xsQnV0dG9uQ3NzKF92bS5oYXNTY3JvbGxlciwgZmFsc2UpLFxuICAgICAgICBhdHRyczogeyByb2xlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBfdm0uY2xpY2tTY3JvbGxCdXR0b24oZmFsc2UpXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgIF0pLFxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZmllbGRzZXRcIixcbiAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290IH0sXG4gICAgW1xuICAgICAgX3ZtLl9sKF92bS5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcywgZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgIHJldHVybiAhX3ZtLnF1ZXN0aW9uLmhhc0NvbHVtbnNcbiAgICAgICAgICA/IF9jKFwic3VydmV5LXJhZGlvZ3JvdXAtaXRlbVwiLCB7XG4gICAgICAgICAgICAgIGtleTogaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5nZXRJdGVtQ2xhc3MoaXRlbSksXG4gICAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBfdm0ucXVlc3Rpb24sIGl0ZW06IGl0ZW0sIGluZGV4OiBpbmRleCB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uX2woX3ZtLnF1ZXN0aW9uLmNvbHVtbnMsIGZ1bmN0aW9uIChjb2x1bW4sIGNvbEluZGV4KSB7XG4gICAgICAgIHJldHVybiBfdm0ucXVlc3Rpb24uaGFzQ29sdW1uc1xuICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRDb2x1bW5DbGFzcygpIH0sXG4gICAgICAgICAgICAgIF92bS5fbChjb2x1bW4sIGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfYyhcInN1cnZleS1yYWRpb2dyb3VwLWl0ZW1cIiwge1xuICAgICAgICAgICAgICAgICAga2V5OiBpdGVtLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5nZXRJdGVtQ2xhc3MoaXRlbSksXG4gICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBpbmRleDogXCJcIiArIGNvbEluZGV4ICsgaW5kZXgsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAxXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLnF1ZXN0aW9uLmNhblNob3dDbGVhckJ1dHRvblxuICAgICAgICA/IF9jKFwiZGl2XCIsIFtcbiAgICAgICAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2xlYXJCdXR0b24sXG4gICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiYnV0dG9uXCIsIHZhbHVlOiBfdm0ucXVlc3Rpb24uY2xlYXJCdXR0b25DYXB0aW9uIH0sXG4gICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgIF92bS5xdWVzdGlvbi5jbGVhclZhbHVlKClcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICBdLFxuICAgIDJcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgcm9sZTogXCJyYWRpb1wiLFxuICAgICAgICBcImFyaWEtY2hlY2tlZFwiOlxuICAgICAgICAgIF92bS5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlID09PSBfdm0uaXRlbS52YWx1ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiLFxuICAgICAgICBcImFyaWEtcmVxdWlyZWRcIjogX3ZtLnF1ZXN0aW9uLmFyaWFSZXF1aXJlZCxcbiAgICAgICAgXCJhcmlhLWludmFsaWRcIjogX3ZtLnF1ZXN0aW9uLmFyaWFJbnZhbGlkLFxuICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogX3ZtLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcbiAgICAgICAgXCJsYWJlbFwiLFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3M6IF92bS5nZXRMYWJlbENsYXNzKF92bS5pdGVtKSxcbiAgICAgICAgICBhdHRyczogeyBcImFyaWEtbGFiZWxcIjogX3ZtLml0ZW0ubG9jVGV4dC5yZW5kZXJlZEh0bWwgfSxcbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInF1ZXN0aW9uLnJlbmRlcmVkVmFsdWVcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbUNvbnRyb2wsXG4gICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICB0eXBlOiBcInJhZGlvXCIsXG4gICAgICAgICAgICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgICAgICAgICAgIG5hbWU6IF92bS5xdWVzdGlvbi5uYW1lICsgXCJfXCIgKyBfdm0ucXVlc3Rpb24uaWQsXG4gICAgICAgICAgICAgIGlkOiBfdm0ucXVlc3Rpb24uaW5wdXRJZCArIFwiX1wiICsgX3ZtLmluZGV4LFxuICAgICAgICAgICAgICBkaXNhYmxlZDogX3ZtLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSB8fCAhX3ZtLml0ZW0uaXNFbmFibGVkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgIHZhbHVlOiBfdm0uaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgY2hlY2tlZDogX3ZtLl9xKF92bS5xdWVzdGlvbi5yZW5kZXJlZFZhbHVlLCBfdm0uaXRlbS52YWx1ZSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF92bS4kc2V0KF92bS5xdWVzdGlvbiwgXCJyZW5kZXJlZFZhbHVlXCIsIF92bS5pdGVtLnZhbHVlKVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5tYXRlcmlhbERlY29yYXRvciB9LCBbXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJzdmdcIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtRGVjb3JhdG9yLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7IHZpZXdCb3g6IFwiLTEyIC0xMiAyNCAyNFwiIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtfYyhcImNpcmNsZVwiLCB7IGF0dHJzOiB7IHI6IFwiNlwiLCBjeDogXCIwXCIsIGN5OiBcIjBcIiB9IH0pXVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFwic3BhblwiLCB7IHN0YXRpY0NsYXNzOiBcImNoZWNrXCIgfSksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAhX3ZtLmhpZGVMYWJlbFxuICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmdldENvbnRyb2xMYWJlbENsYXNzKF92bS5pdGVtKSxcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHRpdGxlOiBfdm0uaXRlbS5sb2NUZXh0LnRleHQgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwic3VydmV5LXN0cmluZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLml0ZW0ubG9jVGV4dCB9LFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF1cbiAgICAgICksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLml0ZW0udmFsdWUgPT0gX3ZtLnF1ZXN0aW9uLm90aGVySXRlbS52YWx1ZVxuICAgICAgICA/IF9jKFwic3VydmV5LW90aGVyLWNob2ljZVwiLCB7XG4gICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlOlxuICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmhhc090aGVyICYmXG4gICAgICAgICAgICAgICAgICBfdm0ucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLmlzT3RoZXJTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOlxuICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICBxdWVzdGlvbi5oYXNPdGhlciAmJiBxdWVzdGlvbi5yZW5kZXJlZFZhbHVlICYmIHF1ZXN0aW9uLmlzT3RoZXJTZWxlY3RlZFxcbiAgICBcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBhdHRyczogeyBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAge1xuICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRJdGVtQ2xhc3MoX3ZtLml0ZW0pLFxuICAgICAgYXR0cnM6IHsgdGFiaW5kZXg6IFwiMFwiLCBcImRhdGEtc3YtZHJvcC10YXJnZXQtcmFua2luZy1pdGVtXCI6IF92bS5pbmRleCB9LFxuICAgICAgb246IHtcbiAgICAgICAga2V5ZG93bjogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgX3ZtLnF1ZXN0aW9uLmhhbmRsZUtleWRvd24uY2FsbChfdm0ucXVlc3Rpb24sIGV2ZW50LCBfdm0uaXRlbSlcbiAgICAgICAgfSxcbiAgICAgICAgcG9pbnRlcmRvd246IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIF92bS5xdWVzdGlvbi5oYW5kbGVQb2ludGVyRG93bi5jYWxsKFxuICAgICAgICAgICAgX3ZtLnF1ZXN0aW9uLFxuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICBfdm0uaXRlbSxcbiAgICAgICAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXRcbiAgICAgICAgICApXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHsgc3RhdGljU3R5bGU6IHsgb3V0bGluZTogXCJub25lXCIgfSwgYXR0cnM6IHsgdGFiaW5kZXg6IFwiLTFcIiB9IH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uY3NzQ2xhc3Nlcy5pdGVtR2hvc3ROb2RlIH0pLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLmNzc0NsYXNzZXMuaXRlbUNvbnRlbnQgfSwgW1xuICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLmNzc0NsYXNzZXMuaXRlbUljb25Db250YWluZXIgfSwgW1xuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcInN2Z1wiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0SWNvbkhvdmVyQ3NzKCksXG4gICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogXCIxMFwiLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiMTZcIixcbiAgICAgICAgICAgICAgICAgICAgdmlld0JveDogXCIwIDAgMTAgMTZcIixcbiAgICAgICAgICAgICAgICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIGQ6IFwiTTYgMkM2IDAuOSA2LjkgMCA4IDBDOS4xIDAgMTAgMC45IDEwIDJDMTAgMy4xIDkuMSA0IDggNEM2LjkgNCA2IDMuMSA2IDJaTTIgMEMwLjkgMCAwIDAuOSAwIDJDMCAzLjEgMC45IDQgMiA0QzMuMSA0IDQgMy4xIDQgMkM0IDAuOSAzLjEgMCAyIDBaTTggNkM2LjkgNiA2IDYuOSA2IDhDNiA5LjEgNi45IDEwIDggMTBDOS4xIDEwIDEwIDkuMSAxMCA4QzEwIDYuOSA5LjEgNiA4IDZaTTIgNkMwLjkgNiAwIDYuOSAwIDhDMCA5LjEgMC45IDEwIDIgMTBDMy4xIDEwIDQgOS4xIDQgOEM0IDYuOSAzLjEgNiAyIDZaTTggMTJDNi45IDEyIDYgMTIuOSA2IDE0QzYgMTUuMSA2LjkgMTYgOCAxNkM5LjEgMTYgMTAgMTUuMSAxMCAxNEMxMCAxMi45IDkuMSAxMiA4IDEyWk0yIDEyQzAuOSAxMiAwIDEyLjkgMCAxNEMwIDE1LjEgMC45IDE2IDIgMTZDMy4xIDE2IDQgMTUuMSA0IDE0QzQgMTIuOSAzLjEgMTIgMiAxMlpcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJzdmdcIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldEljb25Gb2N1c0NzcygpLFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMTBcIixcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjI0XCIsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdCb3g6IFwiMCAwIDEwIDI0XCIsXG4gICAgICAgICAgICAgICAgICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX2MoXCJwYXRoXCIsIHsgYXR0cnM6IHsgZDogXCJNMTAgNUw1IDBMMCA1SDRWOUg2VjVIMTBaXCIgfSB9KSxcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICBfYyhcInBhdGhcIiwgeyBhdHRyczogeyBkOiBcIk02IDE5VjE1SDRWMTlIMEw1IDI0TDEwIDE5SDZaXCIgfSB9KSxcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uY3NzQ2xhc3Nlcy5pdGVtSW5kZXggfSwgW1xuICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5pbmRleFRleHQpKSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0uY3NzQ2xhc3Nlcy5jb250cm9sTGFiZWwgfSxcbiAgICAgICAgICAgICAgW19jKFwic3VydmV5LXN0cmluZ1wiLCB7IGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLnRleHQgfSB9KV0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICksXG4gICAgICAgICAgXSksXG4gICAgICAgIF1cbiAgICAgICksXG4gICAgXVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24ucm9vdENsYXNzIH0sXG4gICAgX3ZtLl9sKF92bS5xdWVzdGlvbi5yYW5raW5nQ2hvaWNlcywgZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG4gICAgICByZXR1cm4gX2MoXCJzdXJ2ZXktcmFua2luZy1pdGVtXCIsIHtcbiAgICAgICAga2V5OiBpdGVtLnZhbHVlICsgXCItXCIgKyBpbmRleCArIFwiLWl0ZW1cIixcbiAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5nZXRJdGVtQ2xhc3MoaXRlbSksXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdGV4dDogaXRlbS5sb2NUZXh0LFxuICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICBpbmRleFRleHQ6IF92bS5xdWVzdGlvbi5nZXROdW1iZXJCeUluZGV4KGluZGV4KSxcbiAgICAgICAgICBjc3NDbGFzc2VzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3NlcyxcbiAgICAgICAgICBxdWVzdGlvbjogX3ZtLnF1ZXN0aW9uLFxuICAgICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0pLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgW1xuICAgICAgX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLmdldFJvb3RDbGFzcyhfdm0ucXVlc3Rpb24pIH0sIFtcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJmaWVsZHNldFwiLFxuICAgICAgICAgIHsgYXR0cnM6IHsgcm9sZTogXCJyYWRpb2dyb3VwXCIgfSB9LFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIF9jKFwibGVnZW5kXCIsIHtcbiAgICAgICAgICAgICAgYXR0cnM6IHsgXCJhcmlhLWxhYmVsXCI6IF92bS5xdWVzdGlvbi5sb2NUaXRsZS5yZW5kZXJlZEh0bWwgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF92bS5fbChfdm0ucXVlc3Rpb24udmlzaWJsZVJhdGVWYWx1ZXMsIGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgICAgXCJsYWJlbFwiLFxuICAgICAgICAgICAgICAgIHsga2V5OiBpdGVtLnZhbHVlLCBjbGFzczogX3ZtLnF1ZXN0aW9uLmdldEl0ZW1DbGFzcyhpdGVtKSB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJzdi12aXN1YWxseWhpZGRlblwiLFxuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwicmFkaW9cIixcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBfdm0ucXVlc3Rpb24ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICBpZDogX3ZtLnF1ZXN0aW9uLmlucHV0SWQgKyBcIl9cIiArIGluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0ucXVlc3Rpb24uaXNJbnB1dFJlYWRPbmx5LFxuICAgICAgICAgICAgICAgICAgICAgIFwiYXJpYS1yZXF1aXJlZFwiOiBfdm0ucXVlc3Rpb24uYXJpYVJlcXVpcmVkLFxuICAgICAgICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0ucXVlc3Rpb24uYXJpYUxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgIFwiYXJpYS1pbnZhbGlkXCI6IF92bS5xdWVzdGlvbi5hcmlhSW52YWxpZCxcbiAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtZGVzY3JpYmVkYnlcIjogX3ZtLnF1ZXN0aW9uLmFyaWFEZXNjcmliZWRCeSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IGl0ZW0udmFsdWUgfSxcbiAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0ucXVlc3Rpb24uc2V0VmFsdWVGcm9tQ2xpY2soZS50YXJnZXQudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIGluZGV4ID09PSAwXG4gICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLm1pblRleHQgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jU3RyaW5nOiBfdm0ucXVlc3Rpb24ubG9jTWluUmF0ZURlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICB7IGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtVGV4dCB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogaXRlbS5sb2NUZXh0IH0sXG4gICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgaW5kZXggPT09IF92bS5xdWVzdGlvbi52aXNpYmxlUmF0ZVZhbHVlcy5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLm1heFRleHQgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jU3RyaW5nOiBfdm0ucXVlc3Rpb24ubG9jTWF4UmF0ZURlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIDJcbiAgICAgICAgKSxcbiAgICAgIF0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwic3VydmV5LW90aGVyLWNob2ljZVwiLCB7XG4gICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICB2YWx1ZTogX3ZtLnF1ZXN0aW9uLmhhc090aGVyLFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJxdWVzdGlvbi5oYXNPdGhlclwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5vdGhlcixcbiAgICAgICAgYXR0cnM6IHsgcXVlc3Rpb246IF92bS5xdWVzdGlvbiB9LFxuICAgICAgfSksXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgc3RhdGljQ2xhc3M6IFwic3YtdnVlLXJvdy1hZGRpdGlvbmFsLWRpdlwiIH0sXG4gICAgX3ZtLl9sKF92bS5yb3cudmlzaWJsZUVsZW1lbnRzLCBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgcmV0dXJuIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAga2V5OiBlbGVtZW50LmlkLFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICBmbGV4QmFzaXM6IGVsZW1lbnQucmVuZGVyV2lkdGgsXG4gICAgICAgICAgICBmbGV4R3JvdzogMSxcbiAgICAgICAgICAgIGZsZXhTaHJpbms6IDEsXG4gICAgICAgICAgICB3aWR0aDogZWxlbWVudC5yZW5kZXJXaWR0aCxcbiAgICAgICAgICAgIG1pbldpZHRoOiBlbGVtZW50Lm1pbldpZHRoLFxuICAgICAgICAgICAgbWF4V2lkdGg6IGVsZW1lbnQubWF4V2lkdGgsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF92bS5yb3cuaXNOZWVkUmVuZGVyXG4gICAgICAgICAgICA/IF9jKFwic3VydmV5LWVsZW1lbnRcIiwge1xuICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogZWxlbWVudC5wYWRkaW5nTGVmdCxcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmdSaWdodDogZWxlbWVudC5wYWRkaW5nUmlnaHQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgaWQ6IGVsZW1lbnQuaWQsXG4gICAgICAgICAgICAgICAgICByb2xlOiBlbGVtZW50LmFyaWFSb2xlLFxuICAgICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsbGVkYnlcIjogZWxlbWVudC5oYXNUaXRsZVxuICAgICAgICAgICAgICAgICAgICA/IGVsZW1lbnQuYXJpYVRpdGxlSWRcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgbmFtZTogZWxlbWVudC5uYW1lLFxuICAgICAgICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgIHN1cnZleTogX3ZtLnN1cnZleSxcbiAgICAgICAgICAgICAgICAgIGNzczogX3ZtLmNzcyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICFfdm0ucm93LmlzTmVlZFJlbmRlciAmJiAhIWVsZW1lbnQuc2tlbGV0b25Db21wb25lbnROYW1lXG4gICAgICAgICAgICA/IF9jKGVsZW1lbnQuc2tlbGV0b25Db21wb25lbnROYW1lLCB7XG4gICAgICAgICAgICAgICAgdGFnOiBcImNvbXBvbmVudFwiLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7IHF1ZXN0aW9uOiBlbGVtZW50LCBjc3M6IF92bS5jc3MgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF0sXG4gICAgICAgIDFcbiAgICAgIClcbiAgICB9KSxcbiAgICAwXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uY3NzQ2xhc3Nlcy5yb290LFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgaGVpZ2h0OiBfdm0ucXVlc3Rpb24uaGVpZ2h0ICsgXCJweFwiLFxuICAgICAgICB3aWR0aDogX3ZtLnF1ZXN0aW9uLndpZHRoICsgXCJweFwiLFxuICAgICAgfSxcbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgdmFsdWU6IF92bS5xdWVzdGlvbi5uZWVkU2hvd1BsYWNlaG9sZGVyKCksXG4gICAgICAgICAgICAgIGV4cHJlc3Npb246IFwicXVlc3Rpb24ubmVlZFNob3dQbGFjZWhvbGRlcigpXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLnBsYWNlaG9sZGVyLFxuICAgICAgICB9LFxuICAgICAgICBbX3ZtLl92KFwiXFxuICAgIFwiICsgX3ZtLl9zKF92bS5xdWVzdGlvbi5wbGFjZUhvbGRlclRleHQpICsgXCJcXG4gIFwiKV1cbiAgICAgICksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLl9tKDApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5xdWVzdGlvbi5jc3NDbGFzc2VzLmNvbnRyb2xzIH0sIFtcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzczogX3ZtLnF1ZXN0aW9uLmNzc0NsYXNzZXMuY2xlYXJCdXR0b24sXG4gICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiLCB0aXRsZTogX3ZtLnF1ZXN0aW9uLmNsZWFyQnV0dG9uQ2FwdGlvbiB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgW192bS5fdihcIlxcbiAgICAgIOKcllxcbiAgICBcIildXG4gICAgICAgICksXG4gICAgICBdKSxcbiAgICBdXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXG4gIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX3ZtID0gdGhpc1xuICAgIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICAgIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICAgIHJldHVybiBfYyhcImRpdlwiLCBbX2MoXCJjYW52YXNcIiwgeyBhdHRyczogeyB0YWJpbmRleDogXCIwXCIgfSB9KV0pXG4gIH0sXG5dXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwic3BhblwiLCB7IHN0YXRpY1N0eWxlOiB7IHBvc2l0aW9uOiBcInN0YXRpY1wiIH0gfSwgW1xuICAgIF92bS5sb2NTdHJpbmcuaGFzSHRtbFxuICAgICAgPyBfYyhcInNwYW5cIiwge1xuICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInN2LXN0cmluZy1lZGl0b3JcIixcbiAgICAgICAgICBzdGF0aWNTdHlsZTogeyBwb3NpdGlvbjogXCJzdGF0aWNcIiB9LFxuICAgICAgICAgIGF0dHJzOiB7IGNvbnRlbnRlZGl0YWJsZTogXCJ0cnVlXCIgfSxcbiAgICAgICAgICBkb21Qcm9wczogeyBpbm5lckhUTUw6IF92bS5fcyhfdm0ubG9jU3RyaW5nLnJlbmRlcmVkSHRtbCkgfSxcbiAgICAgICAgICBvbjogeyBibHVyOiBfdm0ub25JbnB1dCwgY2xpY2s6IF92bS5vbkNsaWNrIH0sXG4gICAgICAgIH0pXG4gICAgICA6IF9jKFxuICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInN2LXN0cmluZy1lZGl0b3JcIixcbiAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IHBvc2l0aW9uOiBcInN0YXRpY1wiIH0sXG4gICAgICAgICAgICBhdHRyczogeyBjb250ZW50ZWRpdGFibGU6IFwidHJ1ZVwiIH0sXG4gICAgICAgICAgICBvbjogeyBibHVyOiBfdm0ub25JbnB1dCwgY2xpY2s6IF92bS5vbkNsaWNrIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0ubG9jU3RyaW5nLnJlbmRlcmVkSHRtbCkpXVxuICAgICAgICApLFxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwic3BhblwiLCB7IHN0YXRpY1N0eWxlOiB7IHBvc2l0aW9uOiBcInN0YXRpY1wiIH0gfSwgW1xuICAgIF92bS5sb2NTdHJpbmcuaGFzSHRtbFxuICAgICAgPyBfYyhcInNwYW5cIiwge1xuICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInN2LXN0cmluZy12aWV3ZXJcIixcbiAgICAgICAgICBzdGF0aWNTdHlsZTogeyBwb3NpdGlvbjogXCJzdGF0aWNcIiB9LFxuICAgICAgICAgIGRvbVByb3BzOiB7IGlubmVySFRNTDogX3ZtLl9zKF92bS5sb2NTdHJpbmcucmVuZGVyZWRIdG1sKSB9LFxuICAgICAgICB9KVxuICAgICAgOiBfYyhcbiAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdGF0aWNDbGFzczogXCJzdi1zdHJpbmctdmlld2VyXCIsXG4gICAgICAgICAgICBzdGF0aWNTdHlsZTogeyBwb3NpdGlvbjogXCJzdGF0aWNcIiB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgW192bS5fdihfdm0uX3MoX3ZtLmxvY1N0cmluZy5yZW5kZXJlZEh0bWwpKV1cbiAgICAgICAgKSxcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhfdm0ubG9jU3RyaW5nLnJlbmRlckFzLCB7XG4gICAgdGFnOiBcImNvbXBvbmVudFwiLFxuICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLmxvY1N0cmluZy5yZW5kZXJBc0RhdGEgfSxcbiAgfSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uY3NzLnJvb3QgfSwgW1xuICAgIF9jKFwiZm9ybVwiLCB7IGF0dHJzOiB7IG9uc3VibWl0OiBcInJldHVybiBmYWxzZTtcIiB9IH0sIFtcbiAgICAgICFfdm0uc3VydmV5Lmhhc0xvZ29cbiAgICAgICAgPyBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInN2X2N1c3RvbV9oZWFkZXJcIiB9KVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7IGNsYXNzOiBfdm0uY3NzLmNvbnRhaW5lciB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJzdXJ2ZXktaGVhZGVyXCIsIHsgYXR0cnM6IHsgc3VydmV5OiBfdm0uc3VydmV5IH0gfSksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfdm0uc3VydmV5LnN0YXRlID09PSBcInN0YXJ0aW5nXCJcbiAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgIHsgY2xhc3M6IF92bS5jc3MuYm9keSB9LFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uc3VydmV5LmlzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nT25Ub3BcbiAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5jc3MuZm9vdGVyIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5zdXJ2ZXkuY3NzTmF2aWdhdGlvblN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5zdXJ2ZXkuc3RhcnRTdXJ2ZXlUZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5zdGFydCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktcGFnZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdm0uc3VydmV5LnN0YXJ0ZWRQYWdlLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3VydmV5OiBfdm0uc3VydmV5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogX3ZtLnN1cnZleS5zdGFydGVkUGFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNzczogX3ZtLmNzcyxcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLnN1cnZleS5pc05hdmlnYXRpb25CdXR0b25zU2hvd2luZ09uQm90dG9tXG4gICAgICAgICAgICAgICAgICAgICAgPyBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uY3NzLmZvb3RlciB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uc3VydmV5LmNzc05hdmlnYXRpb25TdGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uc3VydmV5LnN0YXJ0U3VydmV5VGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uc3RhcnQgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfdm0uc3VydmV5LnN0YXRlID09PSBcInJ1bm5pbmdcIiB8fCBfdm0uc3VydmV5LnN0YXRlID09PSBcInByZXZpZXdcIlxuICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgeyBjbGFzczogX3ZtLmNzcy5ib2R5IH0sXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIF92bS5zdXJ2ZXkuaXNTaG93UHJvZ3Jlc3NCYXJPblRvcFxuICAgICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwic3YtcHJvZ3Jlc3MtXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5zdXJ2ZXkucHJvZ3Jlc3NCYXJUeXBlLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWc6IFwiY29tcG9uZW50XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgc3VydmV5OiBfdm0uc3VydmV5LCBjc3M6IF92bS5jc3MgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgIF92bS5zdXJ2ZXkuaXNUaW1lclBhbmVsU2hvd2luZ09uVG9wXG4gICAgICAgICAgICAgICAgICAgICAgPyBfYyhcInN1cnZleS10aW1lcnBhbmVsXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgc3VydmV5OiBfdm0uc3VydmV5LCBjc3M6IF92bS5jc3MgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLnN1cnZleS5pc05hdmlnYXRpb25CdXR0b25zU2hvd2luZ09uVG9wXG4gICAgICAgICAgICAgICAgICAgICAgPyBfYyhcInN1cnZleS1uYXZpZ2F0aW9uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBfdm0ubmF2SWQgKyBcInRvcFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBzdXJ2ZXk6IF92bS5zdXJ2ZXksIGNzczogX3ZtLmNzcyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICBfYyhcInN1cnZleS1wYWdlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBrZXk6IF92bS5wYWdlSWQsXG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1cnZleTogX3ZtLnN1cnZleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2U6IF92bS5zdXJ2ZXkuY3VycmVudFBhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBjc3M6IF92bS5jc3MsXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgIF92bS5zdXJ2ZXkuaXNUaW1lclBhbmVsU2hvd2luZ09uQm90dG9tXG4gICAgICAgICAgICAgICAgICAgICAgPyBfYyhcInN1cnZleS10aW1lcnBhbmVsXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgc3VydmV5OiBfdm0uc3VydmV5LCBjc3M6IF92bS5jc3MgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLnN1cnZleS5pc1Nob3dQcm9ncmVzc0Jhck9uQm90dG9tXG4gICAgICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzdi1wcm9ncmVzcy1cIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnN1cnZleS5wcm9ncmVzc0JhclR5cGUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZzogXCJjb21wb25lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBzdXJ2ZXk6IF92bS5zdXJ2ZXksIGNzczogX3ZtLmNzcyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLnN1cnZleS5pc05hdmlnYXRpb25CdXR0b25zU2hvd2luZ09uQm90dG9tXG4gICAgICAgICAgICAgICAgICAgICAgPyBfYyhcInN1cnZleS1uYXZpZ2F0aW9uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBfdm0ubmF2SWQgKyBcImJvdHRvbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBzdXJ2ZXk6IF92bS5zdXJ2ZXksIGNzczogX3ZtLmNzcyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX3ZtLmhhc0NvbXBsZXRlZFBhZ2VcbiAgICAgICAgICAgID8gX2MoXCJkaXZcIiwgW1xuICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uc3VydmV5LmNvbXBsZXRlZENzcyxcbiAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgIGlubmVySFRNTDogX3ZtLl9zKF92bS5nZXRQcm9jZXNzZWRDb21wbGV0ZWRIdG1sKCkpLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgIF92bS5zdXJ2ZXkuY29tcGxldGVkU3RhdGUgIT0gXCJcIlxuICAgICAgICAgICAgICAgICAgPyBfYyhcImRpdlwiLCB7IGNsYXNzOiBfdm0uY3NzLnNhdmVEYXRhLnJvb3QgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5nZXRDb21wbGV0ZWRTdGF0ZUNsYXNzZXMoKSB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfYyhcInNwYW5cIiwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5zdXJ2ZXkuY29tcGxldGVkU3RhdGVUZXh0KSksXG4gICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uc3VydmV5LmNvbXBsZXRlZFN0YXRlID09IFwiZXJyb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5jc3Muc2F2ZURhdGEuc2F2ZUFnYWluQnV0dG9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnN1cnZleS5nZXRMb2NTdHJpbmcoXCJzYXZlQWdhaW5CdXR0b25cIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5kb1RyeVNhdmVBZ2FpbiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF92bS5zdXJ2ZXkuc3RhdGUgPT09IFwiY29tcGxldGVkYmVmb3JlXCJcbiAgICAgICAgICAgID8gX2MoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBfdm0uY3NzLmJvZHksXG4gICAgICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgIGlubmVySFRNTDogX3ZtLl9zKF92bS5zdXJ2ZXkucHJvY2Vzc2VkQ29tcGxldGVkQmVmb3JlSHRtbCksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfdm0uc3VydmV5LnN0YXRlID09PSBcImxvYWRpbmdcIlxuICAgICAgICAgICAgPyBfYyhcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgY2xhc3M6IF92bS5jc3MuYm9keSxcbiAgICAgICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MOiBfdm0uX3MoX3ZtLnN1cnZleS5wcm9jZXNzZWRMb2FkaW5nSHRtbCksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfdm0uc3VydmV5LnN0YXRlID09PSBcImVtcHR5XCJcbiAgICAgICAgICAgID8gX2MoXCJkaXZcIiwgeyBjbGFzczogX3ZtLmNzcy5ib2R5RW1wdHkgfSwgW1xuICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICBcIiArIF92bS5fcyhfdm0uc3VydmV5LmVtcHR5U3VydmV5VGV4dCkgKyBcIlxcbiAgICAgIFwiXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF0sXG4gICAgICAgIDJcbiAgICAgICksXG4gICAgXSksXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgW1xuICAgICFfdm0ucXVlc3Rpb24uaXNSZWFkT25seVJlbmRlckRpdigpXG4gICAgICA/IF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgIGNsYXNzOiBfdm0ucXVlc3Rpb24uZ2V0Q29udHJvbENsYXNzKCksXG4gICAgICAgICAgc3R5bGU6IF92bS5pbnB1dFN0eWxlLFxuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICBkaXNhYmxlZDogX3ZtLnF1ZXN0aW9uLmlzSW5wdXRSZWFkT25seSxcbiAgICAgICAgICAgIHR5cGU6IF92bS5xdWVzdGlvbi5pbnB1dFR5cGUsXG4gICAgICAgICAgICBtYXhsZW5ndGg6IF92bS5xdWVzdGlvbi5nZXRNYXhMZW5ndGgoKSxcbiAgICAgICAgICAgIG1pbjogX3ZtLnF1ZXN0aW9uLnJlbmRlcmVkTWluLFxuICAgICAgICAgICAgbWF4OiBfdm0ucXVlc3Rpb24ucmVuZGVyZWRNYXgsXG4gICAgICAgICAgICBzdGVwOiBfdm0ucXVlc3Rpb24ucmVuZGVyZWRTdGVwLFxuICAgICAgICAgICAgc2l6ZTogX3ZtLnF1ZXN0aW9uLmlucHV0U2l6ZSxcbiAgICAgICAgICAgIGlkOiBfdm0ucXVlc3Rpb24uaW5wdXRJZCxcbiAgICAgICAgICAgIGxpc3Q6IF92bS5xdWVzdGlvbi5kYXRhTGlzdElkLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IF92bS5xdWVzdGlvbi5yZW5kZXJlZFBsYWNlSG9sZGVyLFxuICAgICAgICAgICAgYXV0b2NvbXBsZXRlOiBfdm0ucXVlc3Rpb24uYXV0b0NvbXBsZXRlLFxuICAgICAgICAgICAgXCJhcmlhLXJlcXVpcmVkXCI6IF92bS5xdWVzdGlvbi5hcmlhUmVxdWlyZWQsXG4gICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX3ZtLnF1ZXN0aW9uLmFyaWFMYWJlbCxcbiAgICAgICAgICAgIFwiYXJpYS1pbnZhbGlkXCI6IF92bS5xdWVzdGlvbi5hcmlhSW52YWxpZCxcbiAgICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBfdm0ucXVlc3Rpb24uYXJpYURlc2NyaWJlZEJ5LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IF92bS5xdWVzdGlvbi52YWx1ZSB9LFxuICAgICAgICAgIG9uOiB7IGNoYW5nZTogX3ZtLmNoYW5nZSwga2V5dXA6IF92bS5rZXl1cCB9LFxuICAgICAgICB9KVxuICAgICAgOiBfdm0uX2UoKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF92bS5xdWVzdGlvbi5kYXRhTGlzdElkICYmICFfdm0ucXVlc3Rpb24uaXNSZWFkT25seVJlbmRlckRpdigpXG4gICAgICA/IF9jKFxuICAgICAgICAgIFwiZGF0YWxpc3RcIixcbiAgICAgICAgICB7IGF0dHJzOiB7IGlkOiBfdm0ucXVlc3Rpb24uZGF0YUxpc3RJZCB9IH0sXG4gICAgICAgICAgX3ZtLl9sKF92bS5xdWVzdGlvbi5kYXRhTGlzdCwgZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBfYyhcIm9wdGlvblwiLCB7IGRvbVByb3BzOiB7IHZhbHVlOiBpdGVtIH0gfSlcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAwXG4gICAgICAgIClcbiAgICAgIDogX3ZtLl9lKCksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfdm0ucXVlc3Rpb24uaXNSZWFkT25seVJlbmRlckRpdigpXG4gICAgICA/IF9jKFwiZGl2XCIsIFtfdm0uX3YoX3ZtLl9zKF92bS5xdWVzdGlvbi52YWx1ZSkpXSlcbiAgICAgIDogX3ZtLl9lKCksXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgW192bS5fdihfdm0uX3MoX3ZtLnRleHQpKV0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgIHZhbHVlOiBfdm0uc3VydmV5V2luZG93LmlzU2hvd2luZyxcbiAgICAgICAgICBleHByZXNzaW9uOiBcInN1cnZleVdpbmRvdy5pc1Nob3dpbmdcIixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBjbGFzczogX3ZtLmNzcy53aW5kb3cucm9vdCxcbiAgICAgIHN0YXRpY1N0eWxlOiB7XG4gICAgICAgIHBvc2l0aW9uOiBcImZpeGVkXCIsXG4gICAgICAgIGJvdHRvbTogXCIzcHhcIixcbiAgICAgICAgcmlnaHQ6IFwiMTBweFwiLFxuICAgICAgICBcIm1heC13aWR0aFwiOiBcIjYwJVwiLFxuICAgICAgfSxcbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFwiZGl2XCIsIHsgY2xhc3M6IF92bS5jc3Mud2luZG93LmhlYWRlci5yb290IH0sIFtcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgd2lkdGg6IFwiMTAwJVwiLCBjdXJzb3I6IFwicG9pbnRlclwiIH0sXG4gICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmRvRXhwYW5kIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmNzcy53aW5kb3cuaGVhZGVyLnRpdGxlLFxuICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IFwicGFkZGluZy1yaWdodFwiOiBcIjEwcHhcIiB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX2MoXCJzdXJ2ZXktc3RyaW5nXCIsIHtcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGxvY1N0cmluZzogX3ZtLndpbmRvd1N1cnZleS5sb2NUaXRsZSB9LFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAxXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgIF9jKFwic3BhblwiLCB7XG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0uZXhwYW5kZWRDc3MsXG4gICAgICAgICAgICAgIGF0dHJzOiB7IFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF1cbiAgICAgICAgKSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX3ZtLmlzRXhwYW5kZWRTdXJ2ZXlcbiAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRpY1N0eWxlOiB7IGZsb2F0OiBcInJpZ2h0XCIsIGN1cnNvcjogXCJwb2ludGVyXCIgfSxcbiAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmRvRXhwYW5kIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLmNzcy53aW5kb3cuaGVhZGVyLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyBcInBhZGRpbmctcmlnaHRcIjogXCIxMHB4XCIgfSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBbX3ZtLl92KFwiWFwiKV1cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgdmFsdWU6IF92bS5pc0V4cGFuZGVkU3VydmV5LFxuICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImlzRXhwYW5kZWRTdXJ2ZXlcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBjbGFzczogX3ZtLmNzcy53aW5kb3cuYm9keSxcbiAgICAgICAgfSxcbiAgICAgICAgW19jKFwic3VydmV5XCIsIHsgYXR0cnM6IHsgc3VydmV5OiBfdm0ud2luZG93U3VydmV5IH0gfSldLFxuICAgICAgICAxXG4gICAgICApLFxuICAgIF1cbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsIi8qIGdsb2JhbHMgX19WVUVfU1NSX0NPTlRFWFRfXyAqL1xuXG4vLyBJTVBPUlRBTlQ6IERvIE5PVCB1c2UgRVMyMDE1IGZlYXR1cmVzIGluIHRoaXMgZmlsZSAoZXhjZXB0IGZvciBtb2R1bGVzKS5cbi8vIFRoaXMgbW9kdWxlIGlzIGEgcnVudGltZSB1dGlsaXR5IGZvciBjbGVhbmVyIGNvbXBvbmVudCBtb2R1bGUgb3V0cHV0IGFuZCB3aWxsXG4vLyBiZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwgd2VicGFjayB1c2VyIGJ1bmRsZS5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbm9ybWFsaXplQ29tcG9uZW50IChcbiAgc2NyaXB0RXhwb3J0cyxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZ1bmN0aW9uYWxUZW1wbGF0ZSxcbiAgaW5qZWN0U3R5bGVzLFxuICBzY29wZUlkLFxuICBtb2R1bGVJZGVudGlmaWVyLCAvKiBzZXJ2ZXIgb25seSAqL1xuICBzaGFkb3dNb2RlIC8qIHZ1ZS1jbGkgb25seSAqL1xuKSB7XG4gIC8vIFZ1ZS5leHRlbmQgY29uc3RydWN0b3IgZXhwb3J0IGludGVyb3BcbiAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2NyaXB0RXhwb3J0cyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gc2NyaXB0RXhwb3J0cy5vcHRpb25zXG4gICAgOiBzY3JpcHRFeHBvcnRzXG5cbiAgLy8gcmVuZGVyIGZ1bmN0aW9uc1xuICBpZiAocmVuZGVyKSB7XG4gICAgb3B0aW9ucy5yZW5kZXIgPSByZW5kZXJcbiAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IHN0YXRpY1JlbmRlckZuc1xuICAgIG9wdGlvbnMuX2NvbXBpbGVkID0gdHJ1ZVxuICB9XG5cbiAgLy8gZnVuY3Rpb25hbCB0ZW1wbGF0ZVxuICBpZiAoZnVuY3Rpb25hbFRlbXBsYXRlKSB7XG4gICAgb3B0aW9ucy5mdW5jdGlvbmFsID0gdHJ1ZVxuICB9XG5cbiAgLy8gc2NvcGVkSWRcbiAgaWYgKHNjb3BlSWQpIHtcbiAgICBvcHRpb25zLl9zY29wZUlkID0gJ2RhdGEtdi0nICsgc2NvcGVJZFxuICB9XG5cbiAgdmFyIGhvb2tcbiAgaWYgKG1vZHVsZUlkZW50aWZpZXIpIHsgLy8gc2VydmVyIGJ1aWxkXG4gICAgaG9vayA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAvLyAyLjMgaW5qZWN0aW9uXG4gICAgICBjb250ZXh0ID1cbiAgICAgICAgY29udGV4dCB8fCAvLyBjYWNoZWQgY2FsbFxuICAgICAgICAodGhpcy4kdm5vZGUgJiYgdGhpcy4kdm5vZGUuc3NyQ29udGV4dCkgfHwgLy8gc3RhdGVmdWxcbiAgICAgICAgKHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50LiR2bm9kZSAmJiB0aGlzLnBhcmVudC4kdm5vZGUuc3NyQ29udGV4dCkgLy8gZnVuY3Rpb25hbFxuICAgICAgLy8gMi4yIHdpdGggcnVuSW5OZXdDb250ZXh0OiB0cnVlXG4gICAgICBpZiAoIWNvbnRleHQgJiYgdHlwZW9mIF9fVlVFX1NTUl9DT05URVhUX18gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnRleHQgPSBfX1ZVRV9TU1JfQ09OVEVYVF9fXG4gICAgICB9XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHN0eWxlc1xuICAgICAgaWYgKGluamVjdFN0eWxlcykge1xuICAgICAgICBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCBjb250ZXh0KVxuICAgICAgfVxuICAgICAgLy8gcmVnaXN0ZXIgY29tcG9uZW50IG1vZHVsZSBpZGVudGlmaWVyIGZvciBhc3luYyBjaHVuayBpbmZlcnJlbmNlXG4gICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cykge1xuICAgICAgICBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQobW9kdWxlSWRlbnRpZmllcilcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdXNlZCBieSBzc3IgaW4gY2FzZSBjb21wb25lbnQgaXMgY2FjaGVkIGFuZCBiZWZvcmVDcmVhdGVcbiAgICAvLyBuZXZlciBnZXRzIGNhbGxlZFxuICAgIG9wdGlvbnMuX3NzclJlZ2lzdGVyID0gaG9va1xuICB9IGVsc2UgaWYgKGluamVjdFN0eWxlcykge1xuICAgIGhvb2sgPSBzaGFkb3dNb2RlXG4gICAgICA/IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICAob3B0aW9ucy5mdW5jdGlvbmFsID8gdGhpcy5wYXJlbnQgOiB0aGlzKS4kcm9vdC4kb3B0aW9ucy5zaGFkb3dSb290XG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIDogaW5qZWN0U3R5bGVzXG4gIH1cblxuICBpZiAoaG9vaykge1xuICAgIGlmIChvcHRpb25zLmZ1bmN0aW9uYWwpIHtcbiAgICAgIC8vIGZvciB0ZW1wbGF0ZS1vbmx5IGhvdC1yZWxvYWQgYmVjYXVzZSBpbiB0aGF0IGNhc2UgdGhlIHJlbmRlciBmbiBkb2Vzbid0XG4gICAgICAvLyBnbyB0aHJvdWdoIHRoZSBub3JtYWxpemVyXG4gICAgICBvcHRpb25zLl9pbmplY3RTdHlsZXMgPSBob29rXG4gICAgICAvLyByZWdpc3RlciBmb3IgZnVuY3Rpb25hbCBjb21wb25lbnQgaW4gdnVlIGZpbGVcbiAgICAgIHZhciBvcmlnaW5hbFJlbmRlciA9IG9wdGlvbnMucmVuZGVyXG4gICAgICBvcHRpb25zLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcldpdGhTdHlsZUluamVjdGlvbiAoaCwgY29udGV4dCkge1xuICAgICAgICBob29rLmNhbGwoY29udGV4dClcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVuZGVyKGgsIGNvbnRleHQpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgcmVnaXN0cmF0aW9uIGFzIGJlZm9yZUNyZWF0ZSBob29rXG4gICAgICB2YXIgZXhpc3RpbmcgPSBvcHRpb25zLmJlZm9yZUNyZWF0ZVxuICAgICAgb3B0aW9ucy5iZWZvcmVDcmVhdGUgPSBleGlzdGluZ1xuICAgICAgICA/IFtdLmNvbmNhdChleGlzdGluZywgaG9vaylcbiAgICAgICAgOiBbaG9va11cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGV4cG9ydHM6IHNjcmlwdEV4cG9ydHMsXG4gICAgb3B0aW9uczogb3B0aW9uc1xuICB9XG59XG4iLCJ2YXIgX19zcHJlYWRBcnJheXMgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXlzKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XG4gICAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxuICAgICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xuICAgIHJldHVybiByO1xufTtcbi8vIENvZGUgY29waWVkIGZyb20gVnVlL3NyYy9zaGFyZWQvdXRpbC5qc1xudmFyIGh5cGhlbmF0ZVJFID0gL1xcQihbQS1aXSkvZztcbnZhciBoeXBoZW5hdGUgPSBmdW5jdGlvbiAoc3RyKSB7IHJldHVybiBzdHIucmVwbGFjZShoeXBoZW5hdGVSRSwgJy0kMScpLnRvTG93ZXJDYXNlKCk7IH07XG4vKipcbiAqIGRlY29yYXRvciBvZiBhbiBldmVudC1lbWl0dGVyIGZ1bmN0aW9uXG4gKiBAcGFyYW0gIGV2ZW50IFRoZSBuYW1lIG9mIHRoZSBldmVudFxuICogQHJldHVybiBNZXRob2REZWNvcmF0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEVtaXQoZXZlbnQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKF90YXJnZXQsIHByb3BlcnR5S2V5LCBkZXNjcmlwdG9yKSB7XG4gICAgICAgIHZhciBrZXkgPSBoeXBoZW5hdGUocHJvcGVydHlLZXkpO1xuICAgICAgICB2YXIgb3JpZ2luYWwgPSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgICAgICBkZXNjcmlwdG9yLnZhbHVlID0gZnVuY3Rpb24gZW1pdHRlcigpIHtcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZW1pdCA9IGZ1bmN0aW9uIChyZXR1cm5WYWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBlbWl0TmFtZSA9IGV2ZW50IHx8IGtleTtcbiAgICAgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLiRlbWl0KGVtaXROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuJGVtaXQoZW1pdE5hbWUsIGFyZ3NbMF0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuJGVtaXQuYXBwbHkoX3RoaXMsIF9fc3ByZWFkQXJyYXlzKFtlbWl0TmFtZV0sIGFyZ3MpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXJncy51bnNoaWZ0KHJldHVyblZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuJGVtaXQuYXBwbHkoX3RoaXMsIF9fc3ByZWFkQXJyYXlzKFtlbWl0TmFtZV0sIGFyZ3MpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIHJldHVyblZhbHVlID0gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICBpZiAoaXNQcm9taXNlKHJldHVyblZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVyblZhbHVlLnRoZW4oZW1pdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBlbWl0KHJldHVyblZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgICAgICAgfTtcbiAgICB9O1xufVxuZnVuY3Rpb24gaXNQcm9taXNlKG9iaikge1xuICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBQcm9taXNlIHx8IChvYmogJiYgdHlwZW9mIG9iai50aGVuID09PSAnZnVuY3Rpb24nKTtcbn1cbiIsImltcG9ydCB7IGNyZWF0ZURlY29yYXRvciB9IGZyb20gJ3Z1ZS1jbGFzcy1jb21wb25lbnQnO1xuLyoqXG4gKiBkZWNvcmF0b3Igb2YgYW4gaW5qZWN0XG4gKiBAcGFyYW0gZnJvbSBrZXlcbiAqIEByZXR1cm4gUHJvcGVydHlEZWNvcmF0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEluamVjdChvcHRpb25zKSB7XG4gICAgcmV0dXJuIGNyZWF0ZURlY29yYXRvcihmdW5jdGlvbiAoY29tcG9uZW50T3B0aW9ucywga2V5KSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29tcG9uZW50T3B0aW9ucy5pbmplY3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb21wb25lbnRPcHRpb25zLmluamVjdCA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb21wb25lbnRPcHRpb25zLmluamVjdCkpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudE9wdGlvbnMuaW5qZWN0W2tleV0gPSBvcHRpb25zIHx8IGtleTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuIiwiaW1wb3J0IHsgY3JlYXRlRGVjb3JhdG9yIH0gZnJvbSAndnVlLWNsYXNzLWNvbXBvbmVudCc7XG5pbXBvcnQgeyByZWFjdGl2ZUluamVjdEtleSB9IGZyb20gJy4uL2hlbHBlcnMvcHJvdmlkZUluamVjdCc7XG4vKipcbiAqIGRlY29yYXRvciBvZiBhIHJlYWN0aXZlIGluamVjdFxuICogQHBhcmFtIGZyb20ga2V5XG4gKiBAcmV0dXJuIFByb3BlcnR5RGVjb3JhdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBJbmplY3RSZWFjdGl2ZShvcHRpb25zKSB7XG4gICAgcmV0dXJuIGNyZWF0ZURlY29yYXRvcihmdW5jdGlvbiAoY29tcG9uZW50T3B0aW9ucywga2V5KSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29tcG9uZW50T3B0aW9ucy5pbmplY3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb21wb25lbnRPcHRpb25zLmluamVjdCA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb21wb25lbnRPcHRpb25zLmluamVjdCkpIHtcbiAgICAgICAgICAgIHZhciBmcm9tS2V5XzEgPSAhIW9wdGlvbnMgPyBvcHRpb25zLmZyb20gfHwgb3B0aW9ucyA6IGtleTtcbiAgICAgICAgICAgIHZhciBkZWZhdWx0VmFsXzEgPSAoISFvcHRpb25zICYmIG9wdGlvbnMuZGVmYXVsdCkgfHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKCFjb21wb25lbnRPcHRpb25zLmNvbXB1dGVkKVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudE9wdGlvbnMuY29tcHV0ZWQgPSB7fTtcbiAgICAgICAgICAgIGNvbXBvbmVudE9wdGlvbnMuY29tcHV0ZWRba2V5XSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgb2JqID0gdGhpc1tyZWFjdGl2ZUluamVjdEtleV07XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iaiA/IG9ialtmcm9tS2V5XzFdIDogZGVmYXVsdFZhbF8xO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbXBvbmVudE9wdGlvbnMuaW5qZWN0W3JlYWN0aXZlSW5qZWN0S2V5XSA9IHJlYWN0aXZlSW5qZWN0S2V5O1xuICAgICAgICB9XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgeyBjcmVhdGVEZWNvcmF0b3IgfSBmcm9tICd2dWUtY2xhc3MtY29tcG9uZW50JztcbmltcG9ydCB7IGFwcGx5TWV0YWRhdGEgfSBmcm9tICcuLi9oZWxwZXJzL21ldGFkYXRhJztcbi8qKlxuICogZGVjb3JhdG9yIG9mIG1vZGVsXG4gKiBAcGFyYW0gIGV2ZW50IGV2ZW50IG5hbWVcbiAqIEBwYXJhbSBvcHRpb25zIG9wdGlvbnNcbiAqIEByZXR1cm4gUHJvcGVydHlEZWNvcmF0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIE1vZGVsKGV2ZW50LCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG4gICAgICAgIGFwcGx5TWV0YWRhdGEob3B0aW9ucywgdGFyZ2V0LCBrZXkpO1xuICAgICAgICBjcmVhdGVEZWNvcmF0b3IoZnVuY3Rpb24gKGNvbXBvbmVudE9wdGlvbnMsIGspIHtcbiAgICAgICAgICAgIDtcbiAgICAgICAgICAgIChjb21wb25lbnRPcHRpb25zLnByb3BzIHx8IChjb21wb25lbnRPcHRpb25zLnByb3BzID0ge30pKVtrXSA9IG9wdGlvbnM7XG4gICAgICAgICAgICBjb21wb25lbnRPcHRpb25zLm1vZGVsID0geyBwcm9wOiBrLCBldmVudDogZXZlbnQgfHwgayB9O1xuICAgICAgICB9KSh0YXJnZXQsIGtleSk7XG4gICAgfTtcbn1cbiIsImltcG9ydCB7IGNyZWF0ZURlY29yYXRvciB9IGZyb20gJ3Z1ZS1jbGFzcy1jb21wb25lbnQnO1xuaW1wb3J0IHsgYXBwbHlNZXRhZGF0YSB9IGZyb20gJy4uL2hlbHBlcnMvbWV0YWRhdGEnO1xuLyoqXG4gKiBkZWNvcmF0b3Igb2Ygc3luY2VkIG1vZGVsIGFuZCBwcm9wXG4gKiBAcGFyYW0gcHJvcE5hbWUgdGhlIG5hbWUgdG8gaW50ZXJmYWNlIHdpdGggZnJvbSBvdXRzaWRlLCBtdXN0IGJlIGRpZmZlcmVudCBmcm9tIGRlY29yYXRlZCBwcm9wZXJ0eVxuICogQHBhcmFtICBldmVudCBldmVudCBuYW1lXG4gKiBAcGFyYW0gb3B0aW9ucyBvcHRpb25zXG4gKiBAcmV0dXJuIFByb3BlcnR5RGVjb3JhdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBNb2RlbFN5bmMocHJvcE5hbWUsIGV2ZW50LCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG4gICAgICAgIGFwcGx5TWV0YWRhdGEob3B0aW9ucywgdGFyZ2V0LCBrZXkpO1xuICAgICAgICBjcmVhdGVEZWNvcmF0b3IoZnVuY3Rpb24gKGNvbXBvbmVudE9wdGlvbnMsIGspIHtcbiAgICAgICAgICAgIDtcbiAgICAgICAgICAgIChjb21wb25lbnRPcHRpb25zLnByb3BzIHx8IChjb21wb25lbnRPcHRpb25zLnByb3BzID0ge30pKVtwcm9wTmFtZV0gPSBvcHRpb25zO1xuICAgICAgICAgICAgY29tcG9uZW50T3B0aW9ucy5tb2RlbCA9IHsgcHJvcDogcHJvcE5hbWUsIGV2ZW50OiBldmVudCB8fCBrIH07XG4gICAgICAgICAgICAoY29tcG9uZW50T3B0aW9ucy5jb21wdXRlZCB8fCAoY29tcG9uZW50T3B0aW9ucy5jb21wdXRlZCA9IHt9KSlba10gPSB7XG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW3Byb3BOYW1lXTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdChldmVudCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KSh0YXJnZXQsIGtleSk7XG4gICAgfTtcbn1cbiIsImltcG9ydCB7IGNyZWF0ZURlY29yYXRvciB9IGZyb20gJ3Z1ZS1jbGFzcy1jb21wb25lbnQnO1xuaW1wb3J0IHsgYXBwbHlNZXRhZGF0YSB9IGZyb20gJy4uL2hlbHBlcnMvbWV0YWRhdGEnO1xuLyoqXG4gKiBkZWNvcmF0b3Igb2YgYSBwcm9wXG4gKiBAcGFyYW0gIG9wdGlvbnMgdGhlIG9wdGlvbnMgZm9yIHRoZSBwcm9wXG4gKiBAcmV0dXJuIFByb3BlcnR5RGVjb3JhdG9yIHwgdm9pZFxuICovXG5leHBvcnQgZnVuY3Rpb24gUHJvcChvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG4gICAgICAgIGFwcGx5TWV0YWRhdGEob3B0aW9ucywgdGFyZ2V0LCBrZXkpO1xuICAgICAgICBjcmVhdGVEZWNvcmF0b3IoZnVuY3Rpb24gKGNvbXBvbmVudE9wdGlvbnMsIGspIHtcbiAgICAgICAgICAgIDtcbiAgICAgICAgICAgIChjb21wb25lbnRPcHRpb25zLnByb3BzIHx8IChjb21wb25lbnRPcHRpb25zLnByb3BzID0ge30pKVtrXSA9IG9wdGlvbnM7XG4gICAgICAgIH0pKHRhcmdldCwga2V5KTtcbiAgICB9O1xufVxuIiwiaW1wb3J0IHsgY3JlYXRlRGVjb3JhdG9yIH0gZnJvbSAndnVlLWNsYXNzLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBhcHBseU1ldGFkYXRhIH0gZnJvbSAnLi4vaGVscGVycy9tZXRhZGF0YSc7XG4vKipcbiAqIGRlY29yYXRvciBvZiBhIHN5bmNlZCBwcm9wXG4gKiBAcGFyYW0gcHJvcE5hbWUgdGhlIG5hbWUgdG8gaW50ZXJmYWNlIHdpdGggZnJvbSBvdXRzaWRlLCBtdXN0IGJlIGRpZmZlcmVudCBmcm9tIGRlY29yYXRlZCBwcm9wZXJ0eVxuICogQHBhcmFtIG9wdGlvbnMgdGhlIG9wdGlvbnMgZm9yIHRoZSBzeW5jZWQgcHJvcFxuICogQHJldHVybiBQcm9wZXJ0eURlY29yYXRvciB8IHZvaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFByb3BTeW5jKHByb3BOYW1lLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG4gICAgICAgIGFwcGx5TWV0YWRhdGEob3B0aW9ucywgdGFyZ2V0LCBrZXkpO1xuICAgICAgICBjcmVhdGVEZWNvcmF0b3IoZnVuY3Rpb24gKGNvbXBvbmVudE9wdGlvbnMsIGspIHtcbiAgICAgICAgICAgIDtcbiAgICAgICAgICAgIChjb21wb25lbnRPcHRpb25zLnByb3BzIHx8IChjb21wb25lbnRPcHRpb25zLnByb3BzID0ge30pKVtwcm9wTmFtZV0gPSBvcHRpb25zO1xuICAgICAgICAgICAgKGNvbXBvbmVudE9wdGlvbnMuY29tcHV0ZWQgfHwgKGNvbXBvbmVudE9wdGlvbnMuY29tcHV0ZWQgPSB7fSkpW2tdID0ge1xuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1twcm9wTmFtZV07XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KFwidXBkYXRlOlwiICsgcHJvcE5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSkodGFyZ2V0LCBrZXkpO1xuICAgIH07XG59XG4iLCJpbXBvcnQgeyBjcmVhdGVEZWNvcmF0b3IgfSBmcm9tICd2dWUtY2xhc3MtY29tcG9uZW50JztcbmltcG9ydCB7IGluaGVyaXRJbmplY3RlZCwgbmVlZFRvUHJvZHVjZVByb3ZpZGUsIHByb2R1Y2VQcm92aWRlLCB9IGZyb20gJy4uL2hlbHBlcnMvcHJvdmlkZUluamVjdCc7XG4vKipcbiAqIGRlY29yYXRvciBvZiBhIHByb3ZpZGVcbiAqIEBwYXJhbSBrZXkga2V5XG4gKiBAcmV0dXJuIFByb3BlcnR5RGVjb3JhdG9yIHwgdm9pZFxuICovXG5leHBvcnQgZnVuY3Rpb24gUHJvdmlkZShrZXkpIHtcbiAgICByZXR1cm4gY3JlYXRlRGVjb3JhdG9yKGZ1bmN0aW9uIChjb21wb25lbnRPcHRpb25zLCBrKSB7XG4gICAgICAgIHZhciBwcm92aWRlID0gY29tcG9uZW50T3B0aW9ucy5wcm92aWRlO1xuICAgICAgICBpbmhlcml0SW5qZWN0ZWQoY29tcG9uZW50T3B0aW9ucyk7XG4gICAgICAgIGlmIChuZWVkVG9Qcm9kdWNlUHJvdmlkZShwcm92aWRlKSkge1xuICAgICAgICAgICAgcHJvdmlkZSA9IGNvbXBvbmVudE9wdGlvbnMucHJvdmlkZSA9IHByb2R1Y2VQcm92aWRlKHByb3ZpZGUpO1xuICAgICAgICB9XG4gICAgICAgIHByb3ZpZGUubWFuYWdlZFtrXSA9IGtleSB8fCBrO1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IHsgY3JlYXRlRGVjb3JhdG9yIH0gZnJvbSAndnVlLWNsYXNzLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBpbmhlcml0SW5qZWN0ZWQsIG5lZWRUb1Byb2R1Y2VQcm92aWRlLCBwcm9kdWNlUHJvdmlkZSwgfSBmcm9tICcuLi9oZWxwZXJzL3Byb3ZpZGVJbmplY3QnO1xuLyoqXG4gKiBkZWNvcmF0b3Igb2YgYSByZWFjdGl2ZSBwcm92aWRlXG4gKiBAcGFyYW0ga2V5IGtleVxuICogQHJldHVybiBQcm9wZXJ0eURlY29yYXRvciB8IHZvaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFByb3ZpZGVSZWFjdGl2ZShrZXkpIHtcbiAgICByZXR1cm4gY3JlYXRlRGVjb3JhdG9yKGZ1bmN0aW9uIChjb21wb25lbnRPcHRpb25zLCBrKSB7XG4gICAgICAgIHZhciBwcm92aWRlID0gY29tcG9uZW50T3B0aW9ucy5wcm92aWRlO1xuICAgICAgICBpbmhlcml0SW5qZWN0ZWQoY29tcG9uZW50T3B0aW9ucyk7XG4gICAgICAgIGlmIChuZWVkVG9Qcm9kdWNlUHJvdmlkZShwcm92aWRlKSkge1xuICAgICAgICAgICAgcHJvdmlkZSA9IGNvbXBvbmVudE9wdGlvbnMucHJvdmlkZSA9IHByb2R1Y2VQcm92aWRlKHByb3ZpZGUpO1xuICAgICAgICB9XG4gICAgICAgIHByb3ZpZGUubWFuYWdlZFJlYWN0aXZlW2tdID0ga2V5IHx8IGs7XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgeyBjcmVhdGVEZWNvcmF0b3IgfSBmcm9tICd2dWUtY2xhc3MtY29tcG9uZW50Jztcbi8qKlxuICogZGVjb3JhdG9yIG9mIGEgcmVmIHByb3BcbiAqIEBwYXJhbSByZWZLZXkgdGhlIHJlZiBrZXkgZGVmaW5lZCBpbiB0ZW1wbGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gUmVmKHJlZktleSkge1xuICAgIHJldHVybiBjcmVhdGVEZWNvcmF0b3IoZnVuY3Rpb24gKG9wdGlvbnMsIGtleSkge1xuICAgICAgICBvcHRpb25zLmNvbXB1dGVkID0gb3B0aW9ucy5jb21wdXRlZCB8fCB7fTtcbiAgICAgICAgb3B0aW9ucy5jb21wdXRlZFtrZXldID0ge1xuICAgICAgICAgICAgY2FjaGU6IGZhbHNlLFxuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHJlZnNbcmVmS2V5IHx8IGtleV07XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH0pO1xufVxuIiwiaW1wb3J0IHsgY3JlYXRlRGVjb3JhdG9yIH0gZnJvbSAndnVlLWNsYXNzLWNvbXBvbmVudCc7XG4vKipcbiAqIGRlY29yYXRvciBmb3IgY2FwdHVyaW5ncyB2LW1vZGVsIGJpbmRpbmcgdG8gY29tcG9uZW50XG4gKiBAcGFyYW0gb3B0aW9ucyB0aGUgb3B0aW9ucyBmb3IgdGhlIHByb3BcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFZNb2RlbChvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICB2YXIgdmFsdWVLZXkgPSAndmFsdWUnO1xuICAgIHJldHVybiBjcmVhdGVEZWNvcmF0b3IoZnVuY3Rpb24gKGNvbXBvbmVudE9wdGlvbnMsIGtleSkge1xuICAgICAgICA7XG4gICAgICAgIChjb21wb25lbnRPcHRpb25zLnByb3BzIHx8IChjb21wb25lbnRPcHRpb25zLnByb3BzID0ge30pKVt2YWx1ZUtleV0gPSBvcHRpb25zO1xuICAgICAgICAoY29tcG9uZW50T3B0aW9ucy5jb21wdXRlZCB8fCAoY29tcG9uZW50T3B0aW9ucy5jb21wdXRlZCA9IHt9KSlba2V5XSA9IHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW3ZhbHVlS2V5XTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdmFsdWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbiIsImltcG9ydCB7IGNyZWF0ZURlY29yYXRvciB9IGZyb20gJ3Z1ZS1jbGFzcy1jb21wb25lbnQnO1xuLyoqXG4gKiBkZWNvcmF0b3Igb2YgYSB3YXRjaCBmdW5jdGlvblxuICogQHBhcmFtICBwYXRoIHRoZSBwYXRoIG9yIHRoZSBleHByZXNzaW9uIHRvIG9ic2VydmVcbiAqIEBwYXJhbSAgV2F0Y2hPcHRpb25cbiAqIEByZXR1cm4gTWV0aG9kRGVjb3JhdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBXYXRjaChwYXRoLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICB2YXIgX2EgPSBvcHRpb25zLmRlZXAsIGRlZXAgPSBfYSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfYSwgX2IgPSBvcHRpb25zLmltbWVkaWF0ZSwgaW1tZWRpYXRlID0gX2IgPT09IHZvaWQgMCA/IGZhbHNlIDogX2I7XG4gICAgcmV0dXJuIGNyZWF0ZURlY29yYXRvcihmdW5jdGlvbiAoY29tcG9uZW50T3B0aW9ucywgaGFuZGxlcikge1xuICAgICAgICBpZiAodHlwZW9mIGNvbXBvbmVudE9wdGlvbnMud2F0Y2ggIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBjb21wb25lbnRPcHRpb25zLndhdGNoID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd2F0Y2ggPSBjb21wb25lbnRPcHRpb25zLndhdGNoO1xuICAgICAgICBpZiAodHlwZW9mIHdhdGNoW3BhdGhdID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh3YXRjaFtwYXRoXSkpIHtcbiAgICAgICAgICAgIHdhdGNoW3BhdGhdID0gW3dhdGNoW3BhdGhdXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2Ygd2F0Y2hbcGF0aF0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB3YXRjaFtwYXRoXSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHdhdGNoW3BhdGhdLnB1c2goeyBoYW5kbGVyOiBoYW5kbGVyLCBkZWVwOiBkZWVwLCBpbW1lZGlhdGU6IGltbWVkaWF0ZSB9KTtcbiAgICB9KTtcbn1cbiIsIi8qKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLWNsYXNzLWNvbXBvbmVudC9ibG9iL21hc3Rlci9zcmMvcmVmbGVjdC50c30gKi9cbnZhciByZWZsZWN0TWV0YWRhdGFJc1N1cHBvcnRlZCA9IHR5cGVvZiBSZWZsZWN0ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgUmVmbGVjdC5nZXRNZXRhZGF0YSAhPT0gJ3VuZGVmaW5lZCc7XG5leHBvcnQgZnVuY3Rpb24gYXBwbHlNZXRhZGF0YShvcHRpb25zLCB0YXJnZXQsIGtleSkge1xuICAgIGlmIChyZWZsZWN0TWV0YWRhdGFJc1N1cHBvcnRlZCkge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob3B0aW9ucykgJiZcbiAgICAgICAgICAgIHR5cGVvZiBvcHRpb25zICE9PSAnZnVuY3Rpb24nICYmXG4gICAgICAgICAgICAhb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgndHlwZScpICYmXG4gICAgICAgICAgICB0eXBlb2Ygb3B0aW9ucy50eXBlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdmFyIHR5cGUgPSBSZWZsZWN0LmdldE1ldGFkYXRhKCdkZXNpZ246dHlwZScsIHRhcmdldCwga2V5KTtcbiAgICAgICAgICAgIGlmICh0eXBlICE9PSBPYmplY3QpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnR5cGUgPSB0eXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIG5lZWRUb1Byb2R1Y2VQcm92aWRlKG9yaWdpbmFsKSB7XG4gICAgcmV0dXJuICh0eXBlb2Ygb3JpZ2luYWwgIT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgKCFvcmlnaW5hbC5tYW5hZ2VkICYmICFvcmlnaW5hbC5tYW5hZ2VkUmVhY3RpdmUpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwcm9kdWNlUHJvdmlkZShvcmlnaW5hbCkge1xuICAgIHZhciBwcm92aWRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgcnYgPSB0eXBlb2Ygb3JpZ2luYWwgPT09ICdmdW5jdGlvbicgPyBvcmlnaW5hbC5jYWxsKHRoaXMpIDogb3JpZ2luYWw7XG4gICAgICAgIHJ2ID0gT2JqZWN0LmNyZWF0ZShydiB8fCBudWxsKTtcbiAgICAgICAgLy8gc2V0IHJlYWN0aXZlIHNlcnZpY2VzIChwcm9wYWdhdGVzIHByZXZpb3VzIHNlcnZpY2VzIGlmIG5lY2Vzc2FyeSlcbiAgICAgICAgcnZbcmVhY3RpdmVJbmplY3RLZXldID0gT2JqZWN0LmNyZWF0ZSh0aGlzW3JlYWN0aXZlSW5qZWN0S2V5XSB8fCB7fSk7XG4gICAgICAgIGZvciAodmFyIGkgaW4gcHJvdmlkZS5tYW5hZ2VkKSB7XG4gICAgICAgICAgICBydltwcm92aWRlLm1hbmFnZWRbaV1dID0gdGhpc1tpXTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICBydltwcm92aWRlLm1hbmFnZWRSZWFjdGl2ZVtpXV0gPSB0aGlzXzFbaV07IC8vIER1cGxpY2F0ZXMgdGhlIGJlaGF2aW9yIG9mIGBAUHJvdmlkZWBcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShydltyZWFjdGl2ZUluamVjdEtleV0sIHByb3ZpZGUubWFuYWdlZFJlYWN0aXZlW2ldLCB7XG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpc1tpXTsgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgdGhpc18xID0gdGhpcztcbiAgICAgICAgZm9yICh2YXIgaSBpbiBwcm92aWRlLm1hbmFnZWRSZWFjdGl2ZSkge1xuICAgICAgICAgICAgX2xvb3BfMShpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcnY7XG4gICAgfTtcbiAgICBwcm92aWRlLm1hbmFnZWQgPSB7fTtcbiAgICBwcm92aWRlLm1hbmFnZWRSZWFjdGl2ZSA9IHt9O1xuICAgIHJldHVybiBwcm92aWRlO1xufVxuLyoqIFVzZWQgZm9yIGtleWluZyByZWFjdGl2ZSBwcm92aWRlL2luamVjdCBwcm9wZXJ0aWVzICovXG5leHBvcnQgdmFyIHJlYWN0aXZlSW5qZWN0S2V5ID0gJ19fcmVhY3RpdmVJbmplY3RfXyc7XG5leHBvcnQgZnVuY3Rpb24gaW5oZXJpdEluamVjdGVkKGNvbXBvbmVudE9wdGlvbnMpIHtcbiAgICAvLyBpbmplY3QgcGFyZW50IHJlYWN0aXZlIHNlcnZpY2VzIChpZiBhbnkpXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbXBvbmVudE9wdGlvbnMuaW5qZWN0KSkge1xuICAgICAgICBjb21wb25lbnRPcHRpb25zLmluamVjdCA9IGNvbXBvbmVudE9wdGlvbnMuaW5qZWN0IHx8IHt9O1xuICAgICAgICBjb21wb25lbnRPcHRpb25zLmluamVjdFtyZWFjdGl2ZUluamVjdEtleV0gPSB7XG4gICAgICAgICAgICBmcm9tOiByZWFjdGl2ZUluamVjdEtleSxcbiAgICAgICAgICAgIGRlZmF1bHQ6IHt9LFxuICAgICAgICB9O1xuICAgIH1cbn1cbiIsIi8qKiB2dWUtcHJvcGVydHktZGVjb3JhdG9yIHZlcnNvbiA5LjEuMiBNSVQgTElDRU5TRSBjb3B5cmlnaHQgMjAyMCBrYW9ydW4zNDMgKi9cbi8vLyA8cmVmZXJlbmNlIHR5cGVzPSdyZWZsZWN0LW1ldGFkYXRhJy8+XG5pbXBvcnQgVnVlIGZyb20gJ3Z1ZSc7XG5pbXBvcnQgQ29tcG9uZW50LCB7IG1peGlucyB9IGZyb20gJ3Z1ZS1jbGFzcy1jb21wb25lbnQnO1xuZXhwb3J0IHsgQ29tcG9uZW50LCBWdWUsIG1peGlucyBhcyBNaXhpbnMgfTtcbmV4cG9ydCB7IEVtaXQgfSBmcm9tICcuL2RlY29yYXRvcnMvRW1pdCc7XG5leHBvcnQgeyBJbmplY3QgfSBmcm9tICcuL2RlY29yYXRvcnMvSW5qZWN0JztcbmV4cG9ydCB7IEluamVjdFJlYWN0aXZlIH0gZnJvbSAnLi9kZWNvcmF0b3JzL0luamVjdFJlYWN0aXZlJztcbmV4cG9ydCB7IE1vZGVsIH0gZnJvbSAnLi9kZWNvcmF0b3JzL01vZGVsJztcbmV4cG9ydCB7IE1vZGVsU3luYyB9IGZyb20gJy4vZGVjb3JhdG9ycy9Nb2RlbFN5bmMnO1xuZXhwb3J0IHsgUHJvcCB9IGZyb20gJy4vZGVjb3JhdG9ycy9Qcm9wJztcbmV4cG9ydCB7IFByb3BTeW5jIH0gZnJvbSAnLi9kZWNvcmF0b3JzL1Byb3BTeW5jJztcbmV4cG9ydCB7IFByb3ZpZGUgfSBmcm9tICcuL2RlY29yYXRvcnMvUHJvdmlkZSc7XG5leHBvcnQgeyBQcm92aWRlUmVhY3RpdmUgfSBmcm9tICcuL2RlY29yYXRvcnMvUHJvdmlkZVJlYWN0aXZlJztcbmV4cG9ydCB7IFJlZiB9IGZyb20gJy4vZGVjb3JhdG9ycy9SZWYnO1xuZXhwb3J0IHsgVk1vZGVsIH0gZnJvbSAnLi9kZWNvcmF0b3JzL1ZNb2RlbCc7XG5leHBvcnQgeyBXYXRjaCB9IGZyb20gJy4vZGVjb3JhdG9ycy9XYXRjaCc7XG4iLCJpbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL2Jhc2VcIjtcclxuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tIFwiLi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQgeyBDc3NDbGFzc0J1aWxkZXIgfSBmcm9tIFwiLi4vdXRpbHMvY3NzQ2xhc3NCdWlsZGVyXCI7XHJcblxyXG4vKipcclxuICogRGVmaW5lcyBhbiBpbmRpdmlkdWFsIGFjdGlvbi4gQWN0aW9uIGl0ZW1zIGNhbiBiZSBkaXNwbGF5ZWQgaW4gY2VydGFpbiBzdXJ2ZXkgZWxlbWVudHMgLSBpbiBUb29sYmFyIChvciBhY3Rpb24gYmFyKSwgaW4gdGl0bGVzIChvZiBwYWdlcywgcGFuZWxzLCBxdWVzdGlvbnMpLCBpbiBtYXRyaXggcm93cyAoYXMgJ2V4cGFuZCBkZXRhaWxzJyBvciAncmVtb3ZlIHJvdycgYnV0dG9ucyksIGFuZCBldGMuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElBY3Rpb24ge1xyXG4gIC8qKlxyXG4gICAqIFVuaXF1ZSBzdHJpbmcgaWRcclxuICAgKi9cclxuICBpZDogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGZhbHNlIHRvIG1ha2UgdGhlIHRvb2xiYXIgaXRlbSBpbnZpc2libGUuXHJcbiAgICovXHJcbiAgdmlzaWJsZT86IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgICogVG9vbGJhciBpdGVtIHRpdGxlXHJcbiAgICovXHJcbiAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogVG9vbGJhciBpdGVtIHRvb2x0aXBcclxuICAgKi9cclxuICB0b29sdGlwPzogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGZhbHNlIHRvIGRpc2FibGUgdGhlIHRvb2xiYXIgaXRlbS5cclxuICAgKi9cclxuICBlbmFibGVkPzogYm9vbGVhbjtcclxuICAvKipcclxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBmYWxzZSB0byBoaWRlIHRoZSB0b29sYmFyIGl0ZW0gdGl0bGUuXHJcbiAgICovXHJcbiAgc2hvd1RpdGxlPzogYm9vbGVhbjtcclxuICAvKipcclxuICAgKiBBIGNhbGxiYWNrIHRoYXQgY2FsbHMgb24gdG9vbGJhciBpdGVtIGNsaWNrLlxyXG4gICAqL1xyXG4gIGFjdGlvbj86IChjb250ZXh0PzogYW55KSA9PiB2b2lkO1xyXG4gIC8qKlxyXG4gICAqIFRvb2xiYXIgaXRlbSBjc3MgY2xhc3NcclxuICAgKi9cclxuICBjc3M/OiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogVG9vbGJhciBpbm5lciBlbGVtZW50IGNzcyBjbGFzc1xyXG4gICAqL1xyXG4gIGlubmVyQ3NzPzogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIFRvb2xiYXIgaXRlbSBkYXRhIG9iamVjdC4gVXNlZCBhcyBkYXRhIGZvciBjdXN0b20gdGVtcGxhdGUgb3IgY29tcG9uZW50IHJlbmRlcmluZ1xyXG4gICAqL1xyXG4gIGRhdGE/OiBhbnk7XHJcbiAgcG9wdXBNb2RlbD86IGFueTsgLy9UT0RPOiB0ZW1wLCB1c2UgZGF0YSBpbnN0ZWFkXHJcbiAgbmVlZFNlcGFyYXRvcj86IGJvb2xlYW47IC8vVE9ETzogdGVtcFxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUgdG8gYWN0aXZhdGUgdGhlIHRvb2xiYXIgaXRlbSAocGFnZSlcclxuICAgKi9cclxuICBhY3RpdmU/OiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICAqIFRvb2xiYXIgaXRlbSB0ZW1wbGF0ZSBuYW1lXHJcbiAgICovXHJcbiAgdGVtcGxhdGU/OiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogVG9vbGJhciBpdGVtIGNvbXBvbmVudCBuYW1lXHJcbiAgICovXHJcbiAgY29tcG9uZW50Pzogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIFRvb2xiYXIgaXRlbSBpY29uIG5hbWVcclxuICAgKi9cclxuICBpY29uTmFtZT86IHN0cmluZztcclxuICAvKipcclxuICAgKiBUb29sYmFyIGl0ZW0gaWNvbiBzaXplXHJcbiAgICovXHJcbiAgaWNvblNpemU/OiBudW1iZXI7XHJcbiAgLyoqXHJcbiAgICogVG9vbGJhciBpdGVtIGNoaWxkIGl0ZW1zLiBDYW4gYmUgdXNlZCBhcyBjb250aWFuZXIgZm9yIG9wdGlvbnNcclxuICAgKi9cclxuICBpdGVtcz86IGFueTtcclxuICAvKipcclxuICAgKiBHZXRzIG9yIHNldHMgYW4gYWN0aW9uJ3MgbG9jYXRpb24gaW4gYSBtYXRyaXggcXVlc3Rpb24ncyByb3cuXHJcbiAgICpcclxuICAgKiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZTpcclxuICAgKlxyXG4gICAqIC0gYHN0YXJ0YCAtIEFuIGFjdGlvbiBpcyBsb2NhdGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSByb3cuXHJcbiAgICogLSBgZW5kYCAtIEFuIGFjdGlvbiBpcyBsb2NhdGVkIGF0IHRoZSBlbmQgb2YgYSByb3cuXHJcbiAgICovXHJcbiAgbG9jYXRpb24/OiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogU2V0IGl0IHRvIHRydWUgdG8gbWFrZSB0aGUgdGFiSW5kZXggLTEgdG8gZGlzYWJsZSBrZXlib2FyZCBuYXZpZ2F0aW9uIHRvIHRoaXMgaXRlbVxyXG4gICAqL1xyXG4gIGRpc2FibGVUYWJTdG9wPzogYm9vbGVhbjtcclxuICAvKipcclxuICAgKiBBY3Rpb24gYnV0dG9uIGRpc3BsYXkgbW9kZVxyXG4gICAqL1xyXG4gIG1vZGU/OiBcImxhcmdlXCIgfCBcInNtYWxsXCIgfCBcInBvcHVwXCI7XHJcbiAgdmlzaWJsZUluZGV4PzogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQWN0aW9uIGV4dGVuZHMgQmFzZSBpbXBsZW1lbnRzIElBY3Rpb24ge1xyXG4gIHB1YmxpYyB1cGRhdGVDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuICBwcml2YXRlIHJhaXNlVXBkYXRlKCkge1xyXG4gICAgdGhpcy51cGRhdGVDYWxsYmFjayAmJiB0aGlzLnVwZGF0ZUNhbGxiYWNrKCk7XHJcbiAgfVxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBpbm5lckl0ZW06IElBY3Rpb24pIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICAvL09iamVjdC5hc3NpZ24odGhpcywgaXRlbSkgdG8gc3VwcG9ydCBJRTExXHJcbiAgICBpZiAoISFpbm5lckl0ZW0pIHtcclxuICAgICAgZm9yICh2YXIga2V5IGluIGlubmVySXRlbSkge1xyXG4gICAgICAgICg8YW55PnRoaXMpW2tleV0gPSAoPGFueT5pbm5lckl0ZW0pW2tleV07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgbG9jYXRpb24/OiBzdHJpbmc7XHJcbiAgQHByb3BlcnR5KCkgaWQ6IHN0cmluZztcclxuICBAcHJvcGVydHkoKSBpY29uTmFtZTogc3RyaW5nO1xyXG4gIEBwcm9wZXJ0eSgpIGljb25TaXplOiBudW1iZXIgPSAyNDtcclxuICBAcHJvcGVydHkoe1xyXG4gICAgZGVmYXVsdFZhbHVlOiB0cnVlLCBvblNldDogKF8sIHRhcmdldDogQWN0aW9uKSA9PiB7XHJcbiAgICAgIHRhcmdldC5yYWlzZVVwZGF0ZSgpO1xyXG4gICAgfVxyXG4gIH0pIHZpc2libGU6IGJvb2xlYW47XHJcbiAgQHByb3BlcnR5KCkgdGl0bGU6IHN0cmluZztcclxuICBAcHJvcGVydHkoKSB0b29sdGlwOiBzdHJpbmc7XHJcbiAgQHByb3BlcnR5KCkgZW5hYmxlZDogYm9vbGVhbjtcclxuICBAcHJvcGVydHkoKSBzaG93VGl0bGU6IGJvb2xlYW47XHJcbiAgQHByb3BlcnR5KCkgYWN0aW9uOiAoY29udGV4dD86IGFueSkgPT4gdm9pZDtcclxuICBAcHJvcGVydHkoKSBjc3M6IHN0cmluZztcclxuICBAcHJvcGVydHkoKSBpbm5lckNzczogc3RyaW5nO1xyXG4gIEBwcm9wZXJ0eSgpIGRhdGE6IGFueTtcclxuICBAcHJvcGVydHkoKSBwb3B1cE1vZGVsOiBhbnk7XHJcbiAgQHByb3BlcnR5KCkgbmVlZFNlcGFyYXRvcjogYm9vbGVhbjtcclxuICBAcHJvcGVydHkoKSBhY3RpdmU6IGJvb2xlYW47XHJcbiAgQHByb3BlcnR5KCkgdGVtcGxhdGU6IHN0cmluZztcclxuICBAcHJvcGVydHkoKSBjb21wb25lbnQ6IHN0cmluZztcclxuICBAcHJvcGVydHkoKSBpdGVtczogYW55O1xyXG4gIEBwcm9wZXJ0eSgpIHZpc2libGVJbmRleDogbnVtYmVyO1xyXG4gIEBwcm9wZXJ0eSh7IGRlZmF1bHRWYWx1ZTogXCJsYXJnZVwiIH0pIG1vZGU6IFwibGFyZ2VcIiB8IFwic21hbGxcIiB8IFwicG9wdXBcIjtcclxuICBAcHJvcGVydHkoKSBkaXNhYmxlVGFiU3RvcDogYm9vbGVhbjtcclxuXHJcbiAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmVuYWJsZWQgIT09IHVuZGVmaW5lZCAmJiAhdGhpcy5lbmFibGVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBoYXNUaXRsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICgodGhpcy5tb2RlICE9IFwic21hbGxcIiAmJlxyXG4gICAgICAgICh0aGlzLnNob3dUaXRsZSB8fCB0aGlzLnNob3dUaXRsZSA9PT0gdW5kZWZpbmVkKSkgfHxcclxuICAgICAgICAhdGhpcy5pY29uTmFtZSkgJiZcclxuICAgICAgISF0aGlzLnRpdGxlXHJcbiAgICApO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGlzVmlzaWJsZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnZpc2libGUgJiYgdGhpcy5tb2RlICE9PSBcInBvcHVwXCI7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgY2FuU2hyaW5rKCkge1xyXG4gICAgcmV0dXJuICEhdGhpcy5pY29uTmFtZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRBY3Rpb25Sb290Q3NzKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gbmV3IENzc0NsYXNzQnVpbGRlcigpXHJcbiAgICAgIC5hcHBlbmQoXCJzdi1hY3Rpb25cIilcclxuICAgICAgLmFwcGVuZCh0aGlzLmNzcylcclxuICAgICAgLmFwcGVuZChcInN2LWFjdGlvbi0taGlkZGVuXCIsICF0aGlzLmlzVmlzaWJsZSlcclxuICAgICAgLnRvU3RyaW5nKCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXRBY3Rpb25CYXJJdGVtQ3NzKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gbmV3IENzc0NsYXNzQnVpbGRlcigpXHJcbiAgICAgIC5hcHBlbmQoXCJzdi1hY3Rpb24tYmFyLWl0ZW1fX3RpdGxlXCIpXHJcbiAgICAgIC5hcHBlbmQoXCJzdi1hY3Rpb24tYmFyLWl0ZW1fX3RpdGxlLS13aXRoLWljb25cIiwgISF0aGlzLmljb25OYW1lKVxyXG4gICAgICAudG9TdHJpbmcoKTtcclxuICB9XHJcbiAgcHVibGljIGdldEFjdGlvbkJhckl0ZW1BY3RpdmVDc3MoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBuZXcgQ3NzQ2xhc3NCdWlsZGVyKClcclxuICAgICAgLmFwcGVuZChcInN2LWFjdGlvbi1iYXItaXRlbVwiKVxyXG4gICAgICAuYXBwZW5kKFwic3YtYWN0aW9uLWJhci1pdGVtLS1hY3RpdmVcIiwgISF0aGlzLmFjdGl2ZSlcclxuICAgICAgLmFwcGVuZCh0aGlzLmlubmVyQ3NzKVxyXG4gICAgICAudG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIG1pbkRpbWVuc2lvbjogbnVtYmVyO1xyXG4gIG1heERpbWVuc2lvbjogbnVtYmVyO1xyXG59XHJcbiIsImltcG9ydCB7IFJlc3BvbnNpdml0eU1hbmFnZXIgfSBmcm9tIFwiLi4vdXRpbHMvcmVzcG9uc2l2aXR5LW1hbmFnZXJcIjtcclxuaW1wb3J0IHsgTGlzdE1vZGVsIH0gZnJvbSBcIi4uL2xpc3RcIjtcclxuaW1wb3J0IHsgUG9wdXBNb2RlbCB9IGZyb20gXCIuLi9wb3B1cFwiO1xyXG5pbXBvcnQgeyBBY3Rpb24sIElBY3Rpb24gfSBmcm9tIFwiLi9hY3Rpb25cIjtcclxuaW1wb3J0IHsgQWN0aW9uQ29udGFpbmVyIH0gZnJvbSBcIi4vY29udGFpbmVyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQWRhcHRpdmVBY3Rpb25Db250YWluZXI8VCBleHRlbmRzIEFjdGlvbiA9IEFjdGlvbj4gZXh0ZW5kcyBBY3Rpb25Db250YWluZXI8VD4ge1xyXG4gIHByb3RlY3RlZCBkb3RzSXRlbTogQWN0aW9uO1xyXG4gIHByb3RlY3RlZCBkb3RzSXRlbVBvcHVwTW9kZWw6IFBvcHVwTW9kZWw7XHJcbiAgcHJpdmF0ZSByZXNwb25zaXZpdHlNYW5hZ2VyOiBSZXNwb25zaXZpdHlNYW5hZ2VyO1xyXG4gIHB1YmxpYyBtaW5WaXNpYmxlSXRlbXNDb3VudDogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIGludmlzaWJsZUl0ZW1zTGlzdE1vZGVsOiBMaXN0TW9kZWwgPSBuZXcgTGlzdE1vZGVsKFxyXG4gICAgW10sXHJcbiAgICAoaXRlbTogVCkgPT4ge1xyXG4gICAgICB0aGlzLmludmlzaWJsZUl0ZW1TZWxlY3RlZChpdGVtKTtcclxuICAgICAgdGhpcy5kb3RzSXRlbVBvcHVwTW9kZWwudG9nZ2xlVmlzaWJpbGl0eSgpO1xyXG4gICAgfSxcclxuICAgIGZhbHNlXHJcbiAgKTtcclxuXHJcbiAgcHJpdmF0ZSBpbnZpc2libGVJdGVtU2VsZWN0ZWQoaXRlbTogVCk6IHZvaWQge1xyXG4gICAgaWYgKCEhaXRlbSAmJiB0eXBlb2YgaXRlbS5hY3Rpb24gPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICBpdGVtLmFjdGlvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoaWRlSXRlbXNHcmVhdGVyTih2aXNpYmxlSXRlbXNDb3VudDogbnVtYmVyKSB7XHJcbiAgICB2aXNpYmxlSXRlbXNDb3VudCA9IE1hdGgubWF4KHZpc2libGVJdGVtc0NvdW50LCB0aGlzLm1pblZpc2libGVJdGVtc0NvdW50KTtcclxuICAgIGNvbnN0IGludmlzaWJsZUl0ZW1zOiBJQWN0aW9uW10gPSBbXTtcclxuICAgIHRoaXMudmlzaWJsZUFjdGlvbnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpZiAodmlzaWJsZUl0ZW1zQ291bnQgPD0gMCkge1xyXG4gICAgICAgIGl0ZW0ubW9kZSA9IFwicG9wdXBcIjtcclxuICAgICAgICBpbnZpc2libGVJdGVtcy5wdXNoKGl0ZW0uaW5uZXJJdGVtKTtcclxuICAgICAgfVxyXG4gICAgICB2aXNpYmxlSXRlbXNDb3VudC0tO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmludmlzaWJsZUl0ZW1zTGlzdE1vZGVsLnNldEl0ZW1zKGludmlzaWJsZUl0ZW1zKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VmlzaWJsZUl0ZW1zQ291bnQoYXZhaWxhYmxlU2l6ZTogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGl0ZW1zU2l6ZXM6IG51bWJlcltdID0gdGhpcy52aXNpYmxlQWN0aW9ucy5tYXAoKGl0ZW0pID0+IGl0ZW0ubWluRGltZW5zaW9uKTtcclxuICAgIGxldCBjdXJyU2l6ZTogbnVtYmVyID0gMDtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXNTaXplcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjdXJyU2l6ZSArPSBpdGVtc1NpemVzW2ldO1xyXG4gICAgICBpZiAoY3VyclNpemUgPiBhdmFpbGFibGVTaXplKSByZXR1cm4gaTtcclxuICAgIH1cclxuICAgIHJldHVybiBpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVJdGVtTW9kZShhdmFpbGFibGVTaXplOiBudW1iZXIsIGl0ZW1zU2l6ZTogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMudmlzaWJsZUFjdGlvbnM7XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IGl0ZW1zLmxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4LS0pIHtcclxuICAgICAgaWYgKGl0ZW1zU2l6ZSA+IGF2YWlsYWJsZVNpemUpIHtcclxuICAgICAgICBpdGVtc1NpemUgLT0gaXRlbXNbaW5kZXhdLm1heERpbWVuc2lvbiAtIGl0ZW1zW2luZGV4XS5taW5EaW1lbnNpb247XHJcbiAgICAgICAgaXRlbXNbaW5kZXhdLm1vZGUgPSBcInNtYWxsXCI7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaXRlbXNbaW5kZXhdLm1vZGUgPSBcImxhcmdlXCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMuZG90c0l0ZW1Qb3B1cE1vZGVsID0gbmV3IFBvcHVwTW9kZWwoXCJzdi1saXN0XCIsIHtcclxuICAgICAgbW9kZWw6IHRoaXMuaW52aXNpYmxlSXRlbXNMaXN0TW9kZWxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5kb3RzSXRlbSA9IG5ldyBBY3Rpb24oe1xyXG4gICAgICBpZDogXCJkb3RzSXRlbS1pZFwiLFxyXG4gICAgICBjb21wb25lbnQ6IFwic3YtYWN0aW9uLWJhci1pdGVtLWRyb3Bkb3duXCIsXHJcbiAgICAgIGNzczogXCJzdi1kb3RzXCIsXHJcbiAgICAgIGlubmVyQ3NzOiBcInN2LWRvdHNfX2l0ZW1cIixcclxuICAgICAgaWNvbk5hbWU6IFwiaWNvbi1kb3RzXCIsXHJcbiAgICAgIHZpc2libGU6IGZhbHNlLFxyXG4gICAgICBhY3Rpb246IChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmRvdHNJdGVtUG9wdXBNb2RlbC50b2dnbGVWaXNpYmlsaXR5KCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIHBvcHVwTW9kZWw6IHRoaXMuZG90c0l0ZW1Qb3B1cE1vZGVsXHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJvdGVjdGVkIG9uU2V0KCkge1xyXG4gICAgdGhpcy5hY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IGFjdGlvbi51cGRhdGVDYWxsYmFjayA9ICgpID0+IHRoaXMucmFpc2VVcGRhdGUoZmFsc2UpKTtcclxuICAgIHN1cGVyLm9uU2V0KCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb25QdXNoKGl0ZW06IFQpIHtcclxuICAgIGl0ZW0udXBkYXRlQ2FsbGJhY2sgPSAoKSA9PiB0aGlzLnJhaXNlVXBkYXRlKGZhbHNlKTtcclxuICAgIHN1cGVyLm9uUHVzaChpdGVtKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXRSZW5kZXJlZEFjdGlvbnMoKTogQXJyYXk8VD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYWN0aW9ucy5jb25jYXQoWzxUPnRoaXMuZG90c0l0ZW1dKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmaXQoZGltZW5zaW9uOiBudW1iZXIsIGRvdHNJdGVtU2l6ZTogbnVtYmVyKSB7XHJcbiAgICBpZiAoZGltZW5zaW9uIDw9IDApIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmRvdHNJdGVtLnZpc2libGUgPSBmYWxzZTtcclxuICAgIGxldCBtaW5TaXplID0gMDtcclxuICAgIGxldCBtYXhTaXplID0gMDtcclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy52aXNpYmxlQWN0aW9ucztcclxuXHJcbiAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgIG1pblNpemUgKz0gaXRlbS5taW5EaW1lbnNpb247XHJcbiAgICAgIG1heFNpemUgKz0gaXRlbS5tYXhEaW1lbnNpb247XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoZGltZW5zaW9uID49IG1heFNpemUpIHtcclxuICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4gKGl0ZW0ubW9kZSA9IFwibGFyZ2VcIikpO1xyXG4gICAgfSBlbHNlIGlmIChkaW1lbnNpb24gPCBtaW5TaXplKSB7XHJcbiAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IChpdGVtLm1vZGUgPSBcInNtYWxsXCIpKTtcclxuICAgICAgdGhpcy5oaWRlSXRlbXNHcmVhdGVyTih0aGlzLmdldFZpc2libGVJdGVtc0NvdW50KGRpbWVuc2lvbiAtIGRvdHNJdGVtU2l6ZSkpO1xyXG4gICAgICB0aGlzLmRvdHNJdGVtLnZpc2libGUgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy51cGRhdGVJdGVtTW9kZShkaW1lbnNpb24sIG1heFNpemUpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwdWJsaWMgaW5pdFJlc3BvbnNpdml0eU1hbmFnZXIoY29udGFpbmVyOiBIVE1MRGl2RWxlbWVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZXNwb25zaXZpdHlNYW5hZ2VyID0gbmV3IFJlc3BvbnNpdml0eU1hbmFnZXIoXHJcbiAgICAgIGNvbnRhaW5lciwgdGhpcyxcclxuICAgICAgXCIuc3YtYWN0aW9uOm5vdCguc3YtZG90cyk+LnN2LWFjdGlvbl9fY29udGVudFwiXHJcbiAgICApO1xyXG4gIH1cclxuICBwdWJsaWMgcmVzZXRSZXNwb25zaXZpdHlNYW5hZ2VyKCk6IHZvaWQge1xyXG4gICAgaWYoISF0aGlzLnJlc3BvbnNpdml0eU1hbmFnZXIpIHtcclxuICAgICAgdGhpcy5yZXNwb25zaXZpdHlNYW5hZ2VyLmRpc3Bvc2UoKTtcclxuICAgICAgdGhpcy5yZXNwb25zaXZpdHlNYW5hZ2VyID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcclxuICAgIHN1cGVyLmRpc3Bvc2UoKTtcclxuICAgIHRoaXMucmVzZXRSZXNwb25zaXZpdHlNYW5hZ2VyKCk7XHJcbiAgfVxyXG59IiwiaW1wb3J0IHsgcHJvcGVydHlBcnJheSB9IGZyb20gXCIuLi9qc29ub2JqZWN0XCI7XHJcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vYmFzZVwiO1xyXG5pbXBvcnQgeyBJQWN0aW9uLCBBY3Rpb24gfSBmcm9tIFwiLi9hY3Rpb25cIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBBY3Rpb25Db250YWluZXI8VCBleHRlbmRzIEFjdGlvbiA9IEFjdGlvbj4gZXh0ZW5kcyBCYXNlIHtcclxuICAgIEBwcm9wZXJ0eUFycmF5KHtcclxuICAgICAgb25TZXQ6IChfOiBhbnksIHRhcmdldDogQWN0aW9uQ29udGFpbmVyPEFjdGlvbj4pID0+IHtcclxuICAgICAgICB0YXJnZXQub25TZXQoKTtcclxuICAgICAgfSxcclxuICAgICAgb25QdXNoOiAoaXRlbTogYW55LCBpOiBudW1iZXIsIHRhcmdldDogQWN0aW9uQ29udGFpbmVyPEFjdGlvbj4pID0+IHtcclxuICAgICAgICB0YXJnZXQub25QdXNoKGl0ZW0pO1xyXG4gICAgICB9LFxyXG4gICAgICBvblJlbW92ZTogKGl0ZW06IGFueSwgaTogbnVtYmVyLCB0YXJnZXQ6IEFjdGlvbkNvbnRhaW5lcjxBY3Rpb24+KSA9PiB7XHJcbiAgICAgICAgdGFyZ2V0Lm9uUmVtb3ZlKGl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgYWN0aW9uczogQXJyYXk8VD47XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldFJlbmRlcmVkQWN0aW9ucygpOiBBcnJheTxUPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmFjdGlvbnM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZUNhbGxiYWNrOiAoaXNSZXNldEluaXRpYWxpemVkOiBib29sZWFuKSA9PiB2b2lkO1xyXG4gICAgcHVibGljIGNvbnRhaW5lckNzczogc3RyaW5nO1xyXG5cclxuICAgIHByb3RlY3RlZCByYWlzZVVwZGF0ZShpc1Jlc2V0SW5pdGlhbGl6ZWQ6IGJvb2xlYW4pIHtcclxuICAgICAgdGhpcy51cGRhdGVDYWxsYmFjayAmJiB0aGlzLnVwZGF0ZUNhbGxiYWNrKGlzUmVzZXRJbml0aWFsaXplZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIG9uU2V0KCkge1xyXG4gICAgICB0aGlzLnJhaXNlVXBkYXRlKHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBvblB1c2goaXRlbTogVCkge1xyXG4gICAgICB0aGlzLnJhaXNlVXBkYXRlKHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBvblJlbW92ZShpdGVtOiBUKSB7XHJcbiAgICAgIHRoaXMucmFpc2VVcGRhdGUodHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBoYXNBY3Rpb25zKCk6IGJvb2xlYW4ge1xyXG4gICAgICByZXR1cm4gKHRoaXMuYWN0aW9ucyB8fCBbXSkubGVuZ3RoID4gMDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHJlbmRlcmVkQWN0aW9ucygpOiBBcnJheTxUPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldFJlbmRlcmVkQWN0aW9ucygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCB2aXNpYmxlQWN0aW9ucygpOiBBcnJheTxUPiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmFjdGlvbnMuZmlsdGVyKChhY3Rpb24pID0+IGFjdGlvbi52aXNpYmxlICE9PSBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICBwdWJsaWMgZ2V0IGNzcygpOiBzdHJpbmcge1xyXG4gICAgICByZXR1cm4gXCJzdi1hY3Rpb24tYmFyXCIgKyAoISF0aGlzLmNvbnRhaW5lckNzcyA/IFwiIFwiICsgdGhpcy5jb250YWluZXJDc3MgOiBcIlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNvcnRJdGVtcyhpdGVtczogQXJyYXk8VD4pIHtcclxuICAgICAgcmV0dXJuIFtdXHJcbiAgICAgICAgLmNvbmNhdChpdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udmlzaWJsZUluZGV4ID49IDAgfHwgaXRlbS52aXNpYmxlSW5kZXggPT09IHVuZGVmaW5lZCkpXHJcbiAgICAgICAgLnNvcnQoKGZpcnN0SXRlbSwgc2Vjb25kSXRlbSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGZpcnN0SXRlbS52aXNpYmxlSW5kZXggLSBzZWNvbmRJdGVtLnZpc2libGVJbmRleDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0SXRlbXMoaXRlbXM6IEFycmF5PElBY3Rpb24+LCBzb3J0QnlWaXNpYmxlSW5kZXggPSB0cnVlKTogdm9pZCB7XHJcbiAgICAgIGNvbnN0IGFjdGlvbnM6IEFycmF5PFQ+ID0gPGFueT5pdGVtcy5tYXAoKGl0ZW0pID0+IChpdGVtIGluc3RhbmNlb2YgQWN0aW9uID8gaXRlbSA6IG5ldyBBY3Rpb24oaXRlbSkpKTtcclxuICAgICAgaWYgKHNvcnRCeVZpc2libGVJbmRleCkge1xyXG4gICAgICAgIHRoaXMuYWN0aW9ucyA9IHRoaXMuc29ydEl0ZW1zKGFjdGlvbnMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuYWN0aW9ucyA9IGFjdGlvbnM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBpbml0UmVzcG9uc2l2aXR5TWFuYWdlcihjb250YWluZXI6IEhUTUxEaXZFbGVtZW50KTogdm9pZCB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHB1YmxpYyByZXNldFJlc3BvbnNpdml0eU1hbmFnZXIoKTogdm9pZCB7fVxyXG59XHJcbiIsImltcG9ydCB7IElMb2NhbGl6YWJsZU93bmVyLCBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHtcbiAgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24sXG4gIEpzb25PYmplY3QsXG4gIEpzb25PYmplY3RQcm9wZXJ0eSxcbiAgU2VyaWFsaXplcixcbn0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XG5pbXBvcnQgeyBJRmluZEVsZW1lbnQsIElQcm9ncmVzc0luZm8sIElTdXJ2ZXkgfSBmcm9tIFwiLi9iYXNlLWludGVyZmFjZXNcIjtcblxuZXhwb3J0IGNsYXNzIEJpbmRpbmdzIHtcbiAgcHJpdmF0ZSBwcm9wZXJ0aWVzOiBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+ID0gbnVsbDtcbiAgcHJpdmF0ZSB2YWx1ZXM6IGFueSA9IG51bGw7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgb2JqOiBCYXNlKSB7IH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJiaW5kaW5nc1wiO1xuICB9XG4gIHB1YmxpYyBnZXROYW1lcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgcmVzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgdGhpcy5maWxsUHJvcGVydGllcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5wcm9wZXJ0aWVzW2ldLmlzVmlzaWJsZShcIlwiLCB0aGlzLm9iaikpIHtcbiAgICAgICAgcmVzLnB1c2godGhpcy5wcm9wZXJ0aWVzW2ldLm5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBnZXRQcm9wZXJ0aWVzKCk6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4ge1xuICAgIHZhciByZXM6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4gPSBbXTtcbiAgICB0aGlzLmZpbGxQcm9wZXJ0aWVzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlcy5wdXNoKHRoaXMucHJvcGVydGllc1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIHNldEJpbmRpbmcocHJvcGVydHlOYW1lOiBzdHJpbmcsIHZhbHVlTmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLnZhbHVlcykgdGhpcy52YWx1ZXMgPSB7fTtcbiAgICBpZiAoISF2YWx1ZU5hbWUpIHtcbiAgICAgIHRoaXMudmFsdWVzW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZU5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB0aGlzLnZhbHVlc1twcm9wZXJ0eU5hbWVdO1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMudmFsdWVzKS5sZW5ndGggPT0gMCkge1xuICAgICAgICB0aGlzLnZhbHVlcyA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBjbGVhckJpbmRpbmcocHJvcGVydHlOYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldEJpbmRpbmcocHJvcGVydHlOYW1lLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMudmFsdWVzO1xuICB9XG4gIHB1YmxpYyBnZXRWYWx1ZU5hbWVCeVByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLnZhbHVlcykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXNbcHJvcGVydHlOYW1lXTtcbiAgfVxuICBwdWJsaWMgZ2V0UHJvcGVydGllc0J5VmFsdWVOYW1lKHZhbHVlTmFtZTogc3RyaW5nKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgaWYgKCF0aGlzLnZhbHVlcykgcmV0dXJuIFtdO1xuICAgIHZhciByZXM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy52YWx1ZXMpIHtcbiAgICAgIGlmICh0aGlzLnZhbHVlc1trZXldID09IHZhbHVlTmFtZSkge1xuICAgICAgICByZXMucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBnZXRKc29uKCk6IGFueSB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgcmVzOiBhbnkgPSB7fTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy52YWx1ZXMpIHtcbiAgICAgIHJlc1trZXldID0gdGhpcy52YWx1ZXNba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgc2V0SnNvbih2YWx1ZTogYW55KSB7XG4gICAgdGhpcy52YWx1ZXMgPSBudWxsO1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcbiAgICB0aGlzLnZhbHVlcyA9IHt9O1xuICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgICAgdGhpcy52YWx1ZXNba2V5XSA9IHZhbHVlW2tleV07XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZmlsbFByb3BlcnRpZXMoKSB7XG4gICAgaWYgKHRoaXMucHJvcGVydGllcyAhPT0gbnVsbCkgcmV0dXJuO1xuICAgIHRoaXMucHJvcGVydGllcyA9IFtdO1xuICAgIHZhciBvYmpQcm9wZXJ0aWVzID0gU2VyaWFsaXplci5nZXRQcm9wZXJ0aWVzQnlPYmoodGhpcy5vYmopO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqUHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKG9ialByb3BlcnRpZXNbaV0uaXNCaW5kYWJsZSkge1xuICAgICAgICB0aGlzLnByb3BlcnRpZXMucHVzaChvYmpQcm9wZXJ0aWVzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlcGVuZGVuY2llcyB7XG4gIHByaXZhdGUgc3RhdGljIERlcGVuZGVuY2llc0NvdW50ID0gMDtcbiAgY29uc3RydWN0b3IocHVibGljIGN1cnJlbnREZXBlbmRlbmN5OiAoKSA9PiB2b2lkLCBwdWJsaWMgdGFyZ2V0OiBCYXNlLCBwdWJsaWMgcHJvcGVydHk6IHN0cmluZykge1xuICB9XG4gIGRlcGVuZGVuY2llczogQXJyYXk8eyBvYmo6IEJhc2UsIHByb3A6IHN0cmluZywgaWQ6IHN0cmluZyB9PiA9IFtdO1xuICBpZDogc3RyaW5nID0gXCJcIiArICgrK0RlcGVuZGVuY2llcy5EZXBlbmRlbmNpZXNDb3VudCk7XG4gIGFkZERlcGVuZGVuY3kodGFyZ2V0OiBCYXNlLCBwcm9wZXJ0eTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudGFyZ2V0ID09PSB0YXJnZXQgJiYgdGhpcy5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpXG4gICAgICByZXR1cm47XG4gICAgaWYgKHRoaXMuZGVwZW5kZW5jaWVzLnNvbWUoZGVwZW5kZW5jeSA9PiBkZXBlbmRlbmN5Lm9iaiA9PT0gdGFyZ2V0ICYmIGRlcGVuZGVuY3kucHJvcCA9PT0gcHJvcGVydHkpKVxuICAgICAgcmV0dXJuO1xuXG4gICAgdGhpcy5kZXBlbmRlbmNpZXMucHVzaCh7XG4gICAgICBvYmo6IHRhcmdldCxcbiAgICAgIHByb3A6IHByb3BlcnR5LFxuICAgICAgaWQ6IHRoaXMuaWRcbiAgICB9KTtcbiAgICB0YXJnZXQucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydGllc1ZhbHVlQ2hhbmdlZChbcHJvcGVydHldLCB0aGlzLmN1cnJlbnREZXBlbmRlbmN5LCB0aGlzLmlkKTtcblxuICB9XG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMuZm9yRWFjaChkZXBlbmRlbmN5ID0+IHtcbiAgICAgIGRlcGVuZGVuY3kub2JqLnVuUmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydGllc1ZhbHVlQ2hhbmdlZChbZGVwZW5kZW5jeS5wcm9wXSwgZGVwZW5kZW5jeS5pZCk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbXB1dGVkVXBkYXRlcjxUID0gYW55PiB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQ29tcHV0ZWRVcGRhdGVyVHlwZSA9IFwiX19kZXBlbmRlbmN5X2NvbXB1dGVkXCI7XG4gIHByaXZhdGUgZGVwZW5kZW5jaWVzOiBEZXBlbmRlbmNpZXMgPSB1bmRlZmluZWQ7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3VwZGF0ZXI6ICgpID0+IFQpIHtcbiAgfVxuICByZWFkb25seSB0eXBlID0gQ29tcHV0ZWRVcGRhdGVyLkNvbXB1dGVkVXBkYXRlclR5cGU7XG4gIHB1YmxpYyBnZXQgdXBkYXRlcigpOiAoKSA9PiBUIHtcbiAgICByZXR1cm4gdGhpcy5fdXBkYXRlcjtcbiAgfVxuICBwdWJsaWMgc2V0RGVwZW5kZW5jaWVzKGRlcGVuZGVuY2llczogRGVwZW5kZW5jaWVzKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhckRlcGVuZGVuY2llcygpO1xuICAgIHRoaXMuZGVwZW5kZW5jaWVzID0gZGVwZW5kZW5jaWVzO1xuICB9XG4gIHByb3RlY3RlZCBnZXREZXBlbmRlbmNpZXMoKTogRGVwZW5kZW5jaWVzIHtcbiAgICByZXR1cm4gdGhpcy5kZXBlbmRlbmNpZXM7XG4gIH1cbiAgcHJpdmF0ZSBjbGVhckRlcGVuZGVuY2llcygpIHtcbiAgICBpZiAodGhpcy5kZXBlbmRlbmNpZXMpIHtcbiAgICAgIHRoaXMuZGVwZW5kZW5jaWVzLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuZGVwZW5kZW5jaWVzID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICBkaXNwb3NlKCk6IGFueSB7XG4gICAgdGhpcy5jbGVhckRlcGVuZGVuY2llcygpO1xuICB9XG59XG5cbi8qKlxuICogVGhlIGJhc2UgY2xhc3MgZm9yIFN1cnZleUpTIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBCYXNlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgY3VycmVudERlcGVuZGVuY2lzOiBEZXBlbmRlbmNpZXMgPSB1bmRlZmluZWQ7XG4gIHB1YmxpYyBzdGF0aWMgZmluaXNoQ29sbGVjdERlcGVuZGVuY2llcygpOiBEZXBlbmRlbmNpZXMge1xuICAgIGNvbnN0IGRlcHMgPSBCYXNlLmN1cnJlbnREZXBlbmRlbmNpcztcbiAgICBCYXNlLmN1cnJlbnREZXBlbmRlbmNpcyA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gZGVwcztcbiAgfVxuICBwdWJsaWMgc3RhdGljIHN0YXJ0Q29sbGVjdERlcGVuZGVuY2llcyh1cGRhdGVyOiAoKSA9PiB2b2lkLCB0YXJnZXQ6IEJhc2UsIHByb3BlcnR5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoQmFzZS5jdXJyZW50RGVwZW5kZW5jaXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXR0ZW1wdCB0byBjb2xsZWN0IG5lc3RlZCBkZXBlbmRlbmNpZXMuIE5lc3RlZCBkZXBlbmRlbmNpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuXCIpO1xuICAgIH1cbiAgICBCYXNlLmN1cnJlbnREZXBlbmRlbmNpcyA9IG5ldyBEZXBlbmRlbmNpZXModXBkYXRlciwgdGFyZ2V0LCBwcm9wZXJ0eSk7XG4gIH1cbiAgcHJpdmF0ZSBzdGF0aWMgY29sbGVjdERlcGVuZGVuY3kodGFyZ2V0OiBCYXNlLCBwcm9wZXJ0eTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKEJhc2UuY3VycmVudERlcGVuZGVuY2lzID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICBCYXNlLmN1cnJlbnREZXBlbmRlbmNpcy5hZGREZXBlbmRlbmN5KHRhcmdldCwgcHJvcGVydHkpO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZ2V0IGNvbW1lbnRQcmVmaXgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc2V0dGluZ3MuY29tbWVudFByZWZpeDtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHNldCBjb21tZW50UHJlZml4KHZhbDogc3RyaW5nKSB7XG4gICAgc2V0dGluZ3MuY29tbWVudFByZWZpeCA9IHZhbDtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZUl0ZW1WYWx1ZTogKGl0ZW06IGFueSwgdHlwZT86IHN0cmluZykgPT4gYW55O1xuICBwdWJsaWMgc3RhdGljIGl0ZW1WYWx1ZUxvY1N0ckNoYW5nZWQ6IChhcnI6IEFycmF5PGFueT4pID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgYSB2YWx1ZSB1bmRlZmluZWQsIG51bGwsIGVtcHR5IHN0cmluZyBvciBlbXB0eSBhcnJheS5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqIEBwYXJhbSB0cmltU3RyaW5nIGEgYm9vbGVhbiBwYXJhbWV0ZXIsIGRlZmF1bHQgdmFsdWUgdHJ1ZS4gSWYgdHJ1ZSB0aGVuIGl0IHRyaW1zIHRoZSBzdHJpbmcgYW5kIGZ1bmN0aW9ucyByZXR1cm5zIHRydWUgZm9yIGEgc3RyaW5nIHRoYXQgY29udGFpbnMgd2hpdGUgc3BhY2VzIG9ubHkuXG4gICAqL1xuICBwdWJsaWMgaXNWYWx1ZUVtcHR5KHZhbHVlOiBhbnksIHRyaW1TdHJpbmc6IGJvb2xlYW4gPSB0cnVlKTogYm9vbGVhbiB7XG4gICAgaWYgKHRyaW1TdHJpbmcpIHtcbiAgICAgIHZhbHVlID0gdGhpcy50cmltVmFsdWUodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gSGVscGVycy5pc1ZhbHVlRW1wdHkodmFsdWUpO1xuICB9XG4gIHByb3RlY3RlZCB0cmltVmFsdWUodmFsdWU6IGFueSk6IGFueSB7XG4gICAgaWYgKCEhdmFsdWUgJiYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZykpXG4gICAgICByZXR1cm4gdmFsdWUudHJpbSgpO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgSXNQcm9wZXJ0eUVtcHR5KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IFwiXCIgJiYgdGhpcy5pc1ZhbHVlRW1wdHkodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9wZXJ0eUhhc2g6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICBwcml2YXRlIGxvY2FsaXphYmxlU3RyaW5nczogeyBbaW5kZXg6IHN0cmluZ106IExvY2FsaXphYmxlU3RyaW5nIH07XG4gIHByaXZhdGUgYXJyYXlzSW5mbzogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9O1xuICBwcml2YXRlIGV2ZW50TGlzdDogQXJyYXk8RXZlbnRCYXNlPGFueT4+ID0gW107XG4gIHByaXZhdGUgYmluZGluZ3NWYWx1ZTogQmluZGluZ3M7XG4gIHByaXZhdGUgaXNEaXNwb3NlZFZhbHVlOiBib29sZWFuO1xuICBwcml2YXRlIG9uUHJvcENoYW5nZUZ1bmN0aW9uczogQXJyYXk8e1xuICAgIG5hbWU6IHN0cmluZyxcbiAgICBmdW5jOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQsXG4gICAga2V5OiBzdHJpbmcsXG4gIH0+O1xuICBwcm90ZWN0ZWQgaXNMb2FkaW5nRnJvbUpzb25WYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgbG9hZGluZ093bmVyOiBCYXNlID0gbnVsbDtcbiAgLyoqXG4gICAqIEV2ZW50IHRoYXQgcmFpc2Ugb24gcHJvcGVydHkgY2hhbmdlIG9mIHRoZSBzZW5kZXIgb2JqZWN0XG4gICAqIHNlbmRlciAtIHRoZSBvYmplY3QgdGhhdCBvd25zIHRoZSBwcm9wZXJ0eVxuICAgKiBvcHRpb25zLm5hbWUgLSB0aGUgcHJvcGVydHkgbmFtZSB0aGF0IGhhcyBiZWVuIGNoYW5nZWRcbiAgICogb3B0aW9ucy5vbGRWYWx1ZSAtIG9sZCB2YWx1ZS4gUGxlYXNlIG5vdGUsIGl0IGVxdWFscyB0byBvcHRpb25zLm5ld1ZhbHVlIGlmIHByb3BlcnR5IGlzIGFuIGFycmF5XG4gICAqIG9wdGlvbnMubmV3VmFsdWUgLSBuZXcgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgb25Qcm9wZXJ0eUNoYW5nZWQ6IEV2ZW50QmFzZTxCYXNlPiA9IHRoaXMuYWRkRXZlbnQ8QmFzZT4oKTtcbiAgLyoqXG4gICAqIEV2ZW50IHRoYXQgcmFpc2VkIG9uIGNoYW5naW5nIHByb3BlcnR5IG9mIHRoZSBJdGVtVmFsdWUgb2JqZWN0LlxuICAgKiBzZW5kZXIgLSB0aGUgb2JqZWN0IHRoYXQgb3ducyB0aGUgcHJvcGVydHlcbiAgICogb3B0aW9ucy5wcm9wZXJ0eU5hbWUgLSB0aGUgcHJvcGVydHkgbmFtZSB0byB3aGljaCBJdGVtVmFsdWUgYXJyYXkgaXMgYmVsb25nLiBJdCBjYW4gYmUgXCJjaG9pY2VzXCIgZm9yIGRyb3Bkb3duIHF1ZXN0aW9uXG4gICAqIG9wdGlvbnMub2JqIC0gdGhlIGluc3RhbmNlIG9mIEl0ZW1WYWx1ZSBvYmplY3Qgd2hpY2ggcHJvcGVydHkgaGFzIGJlZW4gY2hhbmdlZFxuICAgKiBvcHRpb25zLm5hbWUgLSB0aGUgcHJvcGVydHkgb2YgSXRlbU9iamVjdCB0aGF0IGhhcyBiZWVuIGNoYW5nZWRcbiAgICogb3B0aW9ucy5vbGRWYWx1ZSAtIG9sZCB2YWx1ZVxuICAgKiBvcHRpb25zLm5ld1ZhbHVlIC0gbmV3IHZhbHVlXG4gICAqL1xuICBwdWJsaWMgb25JdGVtVmFsdWVQcm9wZXJ0eUNoYW5nZWQ6IEV2ZW50PFxuICAgIChzZW5kZXI6IEJhc2UsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gdGhpcy5hZGRFdmVudDxCYXNlPigpO1xuXG4gIGdldFByb3BlcnR5VmFsdWVDb3JlSGFuZGxlcjogKHByb3BlcnRpZXNIYXNoOiBhbnksIG5hbWU6IHN0cmluZykgPT4gYW55O1xuXG4gIHNldFByb3BlcnR5VmFsdWVDb3JlSGFuZGxlcjogKFxuICAgIHByb3BlcnRpZXNIYXNoOiBhbnksXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHZhbDogYW55XG4gICkgPT4gdm9pZDtcbiAgY3JlYXRlQXJyYXlDb3JlSGFuZGxlcjogKHByb3BlcnRpZXNIYXNoOiBhbnksIG5hbWU6IHN0cmluZykgPT4gQXJyYXk8YW55PjtcbiAgc3VydmV5Q2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xuXG4gIHByaXZhdGUgaXNDcmVhdGluZyA9IHRydWU7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuYmluZGluZ3NWYWx1ZSA9IG5ldyBCaW5kaW5ncyh0aGlzKTtcbiAgICBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5jcmVhdGVQcm9wZXJ0aWVzKHRoaXMpO1xuICAgIHRoaXMub25CYXNlQ3JlYXRpbmcoKTtcbiAgICB0aGlzLmlzQ3JlYXRpbmcgPSBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZGlzcG9zZSgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZXZlbnRMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmV2ZW50TGlzdFtpXS5jbGVhcigpO1xuICAgIH1cbiAgICB0aGlzLm9uUHJvcGVydHlWYWx1ZUNoYW5nZWRDYWxsYmFjayA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmlzRGlzcG9zZWRWYWx1ZSA9IHRydWU7XG4gIH1cbiAgcHVibGljIGdldCBpc0Rpc3Bvc2VkKCkge1xuICAgIHJldHVybiB0aGlzLmlzRGlzcG9zZWRWYWx1ZSA9PT0gdHJ1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgYWRkRXZlbnQ8VD4oKTogRXZlbnRCYXNlPFQ+IHtcbiAgICB2YXIgcmVzID0gbmV3IEV2ZW50QmFzZTxUPigpO1xuICAgIHRoaXMuZXZlbnRMaXN0LnB1c2gocmVzKTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCBvbkJhc2VDcmVhdGluZygpIHsgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0IGFzIGEgc3RyaW5nIGFzIGl0IHJlcHJlc2VudHMgaW4gdGhlIGpzb24uIEl0IHNob3VsZCBiZSBpbiBsb3djYXNlLlxuICAgKi9cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJiYXNlXCI7XG4gIH1cbiAgcHVibGljIGdldFN1cnZleShpc0xpdmU6IGJvb2xlYW4gPSBmYWxzZSk6IElTdXJ2ZXkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIG9iamVjdCBpcyBpbmx1ZGVkIGludG8gc3VydmV5LCBvdGhlcndpc2UgcmV0dXJucyBmYWxzZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW5TdXJ2ZXkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5nZXRTdXJ2ZXkodHJ1ZSk7XG4gIH1cbiAgcHVibGljIGdldCBiaW5kaW5ncygpOiBCaW5kaW5ncyB7XG4gICAgcmV0dXJuIHRoaXMuYmluZGluZ3NWYWx1ZTtcbiAgfVxuICBjaGVja0JpbmRpbmdzKHZhbHVlTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7IH1cbiAgcHJvdGVjdGVkIHVwZGF0ZUJpbmRpbmdzKHByb3BlcnR5TmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgdmFyIHZhbHVlTmFtZSA9IHRoaXMuYmluZGluZ3MuZ2V0VmFsdWVOYW1lQnlQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lKTtcbiAgICBpZiAoISF2YWx1ZU5hbWUpIHtcbiAgICAgIHRoaXMudXBkYXRlQmluZGluZ1ZhbHVlKHZhbHVlTmFtZSwgdmFsdWUpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlQmluZGluZ1ZhbHVlKHZhbHVlTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7IH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVsZW1lbnQgdGVtcGxhdGUgbmFtZSB3aXRob3V0IHByZWZpeC4gVHlwaWNhbGx5IGl0IGVxdWFscyB0byBnZXRUeXBlKCkuXG4gICAqIEBzZWUgZ2V0VHlwZVxuICAgKi9cbiAgcHVibGljIGdldFRlbXBsYXRlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZSgpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIG9iamVjdCBpcyBsb2FkaW5nIGZyb20gSnNvbiBhdCB0aGUgY3VycmVudCBtb21lbnQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzTG9hZGluZ0Zyb21Kc29uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzTG9hZGluZ0Zyb21Kc29uVmFsdWUgfHwgdGhpcy5nZXRJc0xvYWRpbmdGcm9tSnNvbigpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRJc0xvYWRpbmdGcm9tSnNvbigpOiBib29sZWFuIHtcbiAgICBpZiAoISF0aGlzLmxvYWRpbmdPd25lciAmJiB0aGlzLmxvYWRpbmdPd25lci5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIHRoaXMuaXNMb2FkaW5nRnJvbUpzb25WYWx1ZTtcbiAgfVxuXG4gIHN0YXJ0TG9hZGluZ0Zyb21Kc29uKCkge1xuICAgIHRoaXMuaXNMb2FkaW5nRnJvbUpzb25WYWx1ZSA9IHRydWU7XG4gIH1cbiAgZW5kTG9hZGluZ0Zyb21Kc29uKCkge1xuICAgIHRoaXMuaXNMb2FkaW5nRnJvbUpzb25WYWx1ZSA9IGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZWQgdGhlIGN1cnJlbnQgb2JqZWN0IGludG8gSlNPTlxuICAgKiBAc2VlIGZyb21KU09OXG4gICAqL1xuICBwdWJsaWMgdG9KU09OKCk6IGFueSB7XG4gICAgcmV0dXJuIG5ldyBKc29uT2JqZWN0KCkudG9Kc29uT2JqZWN0KHRoaXMpO1xuICB9XG4gIC8qKlxuICAgKiBMb2FkIG9iamVjdCBwcm9wZXJ0aWVzIGFuZCBlbGVtZW50cy4gSXQgZG9lc24ndCByZXNldCBwcm9wZXJ0aWVzIHRoYXQgd2FzIGNoYW5nZWQgYmVmb3JlIGFuZCB0aGV5IGFyZSBub3QgZGVmaW5lZCBpbiB0aGUganNvbiBwYXJhbWV0ZXIuXG4gICAqIEBwYXJhbSBqc29uIHRoZSBvYmplY3QgSlNPTiBkZWZpbml0aW9uXG4gICAqIEBzZWUgdG9KU09OXG4gICAqL1xuICBwdWJsaWMgZnJvbUpTT04oanNvbjogYW55KTogdm9pZCB7XG4gICAgbmV3IEpzb25PYmplY3QoKS50b09iamVjdChqc29uLCB0aGlzKTtcbiAgICB0aGlzLm9uU3VydmV5TG9hZCgpO1xuICB9XG4gIHB1YmxpYyBvblN1cnZleUxvYWQoKSB7IH1cbiAgLyoqXG4gICAqIE1ha2UgYSBjbG9uZSBvZiB0aGUgZXhpc3Rpbmcgb2JqZWN0LiBDcmVhdGUgYSBuZXcgb2JqZWN0IG9mIHRoZSBzYW1lIHR5cGUgYW5kIGxvYWQgYWxsIHByb3BlcnRpZXMgaW50byBpdC5cbiAgICovXG4gIHB1YmxpYyBjbG9uZSgpOiBCYXNlIHtcbiAgICB2YXIgY2xvbmVkT2JqID0gPEJhc2U+U2VyaWFsaXplci5jcmVhdGVDbGFzcyh0aGlzLmdldFR5cGUoKSk7XG4gICAgY2xvbmVkT2JqLmZyb21KU09OKHRoaXMudG9KU09OKCkpO1xuICAgIHJldHVybiBjbG9uZWRPYmo7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHNlcmlhbGl6YWJsZSBwcm9wZXJ0eSB0aGF0IGJlbG9uZ3MgdG8gdGhpcyBpbnN0YW5jZSBieSBwcm9wZXJ0eSBuYW1lLiBJdCByZXR1cm5zIG51bGwgaWYgdGhlIHByb3BlcnR5IGlzIG5vdCBleGlzdHMuXG4gICAqIEBwYXJhbSBwcm9wTmFtZSBwcm9wZXJ0eSBuYW1lXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBwdWJsaWMgZ2V0UHJvcGVydHlCeU5hbWUocHJvcE5hbWU6IHN0cmluZyk6IEpzb25PYmplY3RQcm9wZXJ0eSB7XG4gICAgcmV0dXJuIFNlcmlhbGl6ZXIuZmluZFByb3BlcnR5KHRoaXMuZ2V0VHlwZSgpLCBwcm9wTmFtZSk7XG4gIH1cbiAgcHVibGljIGlzUHJvcGVydHlWaXNpYmxlKHByb3BOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBwcm9wID0gdGhpcy5nZXRQcm9wZXJ0eUJ5TmFtZShwcm9wTmFtZSk7XG4gICAgcmV0dXJuICEhcHJvcCA/IHByb3AuaXNWaXNpYmxlKFwiXCIsIHRoaXMpIDogZmFsc2U7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBjcmVhdGVQcm9ncmVzc0luZm8oKTogSVByb2dyZXNzSW5mbyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHF1ZXN0aW9uQ291bnQ6IDAsXG4gICAgICBhbnN3ZXJlZFF1ZXN0aW9uQ291bnQ6IDAsXG4gICAgICByZXF1aXJlZFF1ZXN0aW9uQ291bnQ6IDAsXG4gICAgICByZXF1aXJlZEFuc3dlcmVkUXVlc3Rpb25Db3VudDogMCxcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBnZXRQcm9ncmVzc0luZm8oKTogSVByb2dyZXNzSW5mbyB7XG4gICAgcmV0dXJuIEJhc2UuY3JlYXRlUHJvZ3Jlc3NJbmZvKCk7XG4gIH1cbiAgcHVibGljIGxvY2FsZUNoYW5nZWQoKSB7IH1cbiAgcHVibGljIGxvY1N0cnNDaGFuZ2VkKCkge1xuICAgIGlmICghIXRoaXMuYXJyYXlzSW5mbykge1xuICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMuYXJyYXlzSW5mbykge1xuICAgICAgICBsZXQgaXRlbSA9IHRoaXMuYXJyYXlzSW5mb1trZXldO1xuICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLmlzSXRlbVZhbHVlcykge1xuICAgICAgICAgIHZhciBhcnIgPSB0aGlzLmdldFByb3BlcnR5VmFsdWUoa2V5KTtcbiAgICAgICAgICBpZiAoYXJyICYmICEhQmFzZS5pdGVtVmFsdWVMb2NTdHJDaGFuZ2VkKVxuICAgICAgICAgICAgQmFzZS5pdGVtVmFsdWVMb2NTdHJDaGFuZ2VkKGFycik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCEhdGhpcy5sb2NhbGl6YWJsZVN0cmluZ3MpIHtcbiAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLmxvY2FsaXphYmxlU3RyaW5ncykge1xuICAgICAgICBsZXQgaXRlbSA9IHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoa2V5KTtcbiAgICAgICAgaWYgKGl0ZW0pIGl0ZW0uc3RyQ2hhbmdlZCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgYnkgbmFtZVxuICAgKiBAcGFyYW0gbmFtZSBwcm9wZXJ0eSBuYW1lXG4gICAqL1xuICBwdWJsaWMgZ2V0UHJvcGVydHlWYWx1ZShuYW1lOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogYW55ID0gbnVsbCk6IGFueSB7XG4gICAgY29uc3QgcmVzID0gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlQ29yZSh0aGlzLnByb3BlcnR5SGFzaCwgbmFtZSk7XG4gICAgaWYgKHRoaXMuSXNQcm9wZXJ0eUVtcHR5KHJlcykpIHtcbiAgICAgIGlmIChkZWZhdWx0VmFsdWUgIT0gbnVsbCkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICAgIGNvbnN0IHByb3AgPSBTZXJpYWxpemVyLmZpbmRQcm9wZXJ0eSh0aGlzLmdldFR5cGUoKSwgbmFtZSk7XG4gICAgICBpZiAoISFwcm9wICYmICghcHJvcC5pc0N1c3RvbSB8fCAhdGhpcy5pc0NyZWF0aW5nKSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIXRoaXMuSXNQcm9wZXJ0eUVtcHR5KHByb3AuZGVmYXVsdFZhbHVlKSAmJlxuICAgICAgICAgICFBcnJheS5pc0FycmF5KHByb3AuZGVmYXVsdFZhbHVlKVxuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIHByb3AuZGVmYXVsdFZhbHVlO1xuICAgICAgICBpZiAocHJvcC50eXBlID09IFwiYm9vbGVhblwiIHx8IHByb3AudHlwZSA9PSBcInN3aXRjaFwiKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChwcm9wLmlzQ3VzdG9tICYmICEhcHJvcC5vbkdldFZhbHVlKSByZXR1cm4gcHJvcC5vbkdldFZhbHVlKHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCBnZXRQcm9wZXJ0eVZhbHVlQ29yZShwcm9wZXJ0aWVzSGFzaDogYW55LCBuYW1lOiBzdHJpbmcpIHtcbiAgICBCYXNlLmNvbGxlY3REZXBlbmRlbmN5KHRoaXMsIG5hbWUpO1xuICAgIGlmICh0aGlzLmdldFByb3BlcnR5VmFsdWVDb3JlSGFuZGxlcilcbiAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWVDb3JlSGFuZGxlcihwcm9wZXJ0aWVzSGFzaCwgbmFtZSk7XG4gICAgZWxzZSByZXR1cm4gcHJvcGVydGllc0hhc2hbbmFtZV07XG4gIH1cbiAgcHVibGljIGdlVmFsdWVGcm9tSGFzaCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnByb3BlcnR5SGFzaFtcInZhbHVlXCJdO1xuICB9XG4gIHByb3RlY3RlZCBzZXRQcm9wZXJ0eVZhbHVlQ29yZShwcm9wZXJ0aWVzSGFzaDogYW55LCBuYW1lOiBzdHJpbmcsIHZhbDogYW55KSB7XG4gICAgaWYgKHRoaXMuc2V0UHJvcGVydHlWYWx1ZUNvcmVIYW5kbGVyKSB7XG4gICAgICBpZiAoIXRoaXMuaXNEaXNwb3NlZFZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZUNvcmVIYW5kbGVyKHByb3BlcnRpZXNIYXNoLCBuYW1lLCB2YWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS53YXJuKFwiQXR0ZW1wdCB0byBzZXQgcHJvcGVydHkgJ1wiICsgbmFtZSArIFwiJyBvZiBhIGRpc3Bvc2VkIG9iamVjdCAnXCIgKyB0aGlzLmdldFR5cGUoKSArIFwiJ1wiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBwcm9wZXJ0aWVzSGFzaFtuYW1lXSA9IHZhbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGlzRWRpdGluZ1N1cnZleUVsZW1lbnQoKTogYm9vbGVhbiB7XG4gICAgdmFyIHN1cnZleSA9IHRoaXMuZ2V0U3VydmV5KCk7XG4gICAgcmV0dXJuICEhc3VydmV5ICYmIHN1cnZleS5pc0VkaXRpbmdTdXJ2ZXlFbGVtZW50O1xuICB9XG4gIHB1YmxpYyBpdGVyYXRlUHJvcGVydGllc0hhc2goZnVuYzogKGhhc2g6IGFueSwga2V5OiBhbnkpID0+IHZvaWQpIHtcbiAgICB2YXIga2V5czogYW55W10gPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5wcm9wZXJ0eUhhc2gpIHtcbiAgICAgIGlmIChcbiAgICAgICAga2V5ID09PSBcInZhbHVlXCIgJiZcbiAgICAgICAgdGhpcy5pc0VkaXRpbmdTdXJ2ZXlFbGVtZW50ICYmXG4gICAgICAgIEFycmF5LmlzQXJyYXkoKDxhbnk+dGhpcykudmFsdWUpXG4gICAgICApXG4gICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICB9XG4gICAga2V5cy5mb3JFYWNoKChrZXkpID0+IGZ1bmModGhpcy5wcm9wZXJ0eUhhc2gsIGtleSkpO1xuICB9XG4gIC8qKlxuICAgKiBzZXQgcHJvcGVydHkgdmFsdWVcbiAgICogQHBhcmFtIG5hbWUgcHJvcGVydHkgbmFtZVxuICAgKiBAcGFyYW0gdmFsIG5ldyBwcm9wZXJ0eSB2YWx1ZVxuICAgKi9cbiAgcHVibGljIHNldFByb3BlcnR5VmFsdWUobmFtZTogc3RyaW5nLCB2YWw6IGFueSkge1xuICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKTtcbiAgICBpZiAoXG4gICAgICBvbGRWYWx1ZSAmJlxuICAgICAgQXJyYXkuaXNBcnJheShvbGRWYWx1ZSkgJiZcbiAgICAgICEhdGhpcy5hcnJheXNJbmZvICYmXG4gICAgICAoIXZhbCB8fCBBcnJheS5pc0FycmF5KHZhbCkpXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5pc1R3b1ZhbHVlRXF1YWxzKG9sZFZhbHVlLCB2YWwpKSByZXR1cm47XG4gICAgICB2YXIgYXJyYXlJbmZvID0gdGhpcy5hcnJheXNJbmZvW25hbWVdO1xuICAgICAgdGhpcy5zZXRBcnJheShcbiAgICAgICAgbmFtZSxcbiAgICAgICAgb2xkVmFsdWUsXG4gICAgICAgIHZhbCxcbiAgICAgICAgYXJyYXlJbmZvID8gYXJyYXlJbmZvLmlzSXRlbVZhbHVlcyA6IGZhbHNlLFxuICAgICAgICBhcnJheUluZm8gPyBhcnJheUluZm8ub25QdXNoIDogbnVsbFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlRGlyZWN0bHkobmFtZSwgdmFsKTtcbiAgICAgIGlmICghdGhpcy5pc0Rpc3Bvc2VkVmFsdWUgJiYgIXRoaXMuaXNUd29WYWx1ZUVxdWFscyhvbGRWYWx1ZSwgdmFsKSkge1xuICAgICAgICB0aGlzLnByb3BlcnR5VmFsdWVDaGFuZ2VkKG5hbWUsIG9sZFZhbHVlLCB2YWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgc2V0UHJvcGVydHlWYWx1ZURpcmVjdGx5KG5hbWU6IHN0cmluZywgdmFsOiBhbnkpIDogdm9pZCB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlQ29yZSh0aGlzLnByb3BlcnR5SGFzaCwgbmFtZSwgdmFsKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2xlYXJQcm9wZXJ0eVZhbHVlKG5hbWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZUNvcmUodGhpcy5wcm9wZXJ0eUhhc2gsIG5hbWUsIG51bGwpO1xuICAgIGRlbGV0ZSB0aGlzLnByb3BlcnR5SGFzaFtuYW1lXTtcbiAgfVxuICBwdWJsaWMgb25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZENhbGxiYWNrKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBvbGRWYWx1ZTogYW55LFxuICAgIG5ld1ZhbHVlOiBhbnksXG4gICAgc2VuZGVyOiBCYXNlLFxuICAgIGFycmF5Q2hhbmdlczogQXJyYXlDaGFuZ2VzXG4gICkgeyB9XG4gIHB1YmxpYyBpdGVtVmFsdWVQcm9wZXJ0eUNoYW5nZWQoXG4gICAgaXRlbTogSXRlbVZhbHVlLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBvbGRWYWx1ZTogYW55LFxuICAgIG5ld1ZhbHVlOiBhbnlcbiAgKSB7XG4gICAgdGhpcy5vbkl0ZW1WYWx1ZVByb3BlcnR5Q2hhbmdlZC5maXJlKHRoaXMsIHtcbiAgICAgIG9iajogaXRlbSxcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICBvbGRWYWx1ZTogb2xkVmFsdWUsXG4gICAgICBuZXdWYWx1ZTogbmV3VmFsdWUsXG4gICAgICBwcm9wZXJ0eU5hbWU6IGl0ZW0ub3duZXJQcm9wZXJ0eU5hbWUsXG4gICAgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG9sZFZhbHVlOiBhbnksXG4gICAgbmV3VmFsdWU6IGFueVxuICApIHsgfVxuICBwcm90ZWN0ZWQgcHJvcGVydHlWYWx1ZUNoYW5nZWQoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG9sZFZhbHVlOiBhbnksXG4gICAgbmV3VmFsdWU6IGFueSxcbiAgICBhcnJheUNoYW5nZXM/OiBBcnJheUNoYW5nZXMsXG4gICAgdGFyZ2V0PzogQmFzZVxuICApIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuO1xuICAgIHRoaXMudXBkYXRlQmluZGluZ3MobmFtZSwgbmV3VmFsdWUpO1xuICAgIHRoaXMub25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lLCBvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgIHRoaXMub25Qcm9wZXJ0eUNoYW5nZWQuZmlyZSh0aGlzLCB7XG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgb2xkVmFsdWU6IG9sZFZhbHVlLFxuICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5kb1Byb3BlcnR5VmFsdWVDaGFuZ2VkQ2FsbGJhY2soXG4gICAgICBuYW1lLFxuICAgICAgb2xkVmFsdWUsXG4gICAgICBuZXdWYWx1ZSxcbiAgICAgIGFycmF5Q2hhbmdlcyxcbiAgICAgIHRoaXNcbiAgICApO1xuXG4gICAgaWYgKCF0aGlzLm9uUHJvcENoYW5nZUZ1bmN0aW9ucykgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vblByb3BDaGFuZ2VGdW5jdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLm9uUHJvcENoYW5nZUZ1bmN0aW9uc1tpXS5uYW1lID09IG5hbWUpXG4gICAgICAgIHRoaXMub25Qcm9wQ2hhbmdlRnVuY3Rpb25zW2ldLmZ1bmMobmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGlzSW50ZXJuYWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByaXZhdGUgZG9Qcm9wZXJ0eVZhbHVlQ2hhbmdlZENhbGxiYWNrKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBvbGRWYWx1ZTogYW55LFxuICAgIG5ld1ZhbHVlOiBhbnksXG4gICAgYXJyYXlDaGFuZ2VzPzogQXJyYXlDaGFuZ2VzLFxuICAgIHRhcmdldD86IEJhc2VcbiAgKSB7XG4gICAgaWYgKHRoaXMuaXNJbnRlcm5hbCkgcmV0dXJuO1xuICAgIGlmICghdGFyZ2V0KSB0YXJnZXQgPSB0aGlzO1xuICAgIHZhciBub3RpZmllcjogYW55ID0gdGhpcy5nZXRTdXJ2ZXkoKTtcbiAgICBpZiAoIW5vdGlmaWVyKSBub3RpZmllciA9IHRoaXM7XG4gICAgaWYgKCEhbm90aWZpZXIub25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZENhbGxiYWNrKSB7XG4gICAgICBub3RpZmllci5vblByb3BlcnR5VmFsdWVDaGFuZ2VkQ2FsbGJhY2soXG4gICAgICAgIG5hbWUsXG4gICAgICAgIG9sZFZhbHVlLFxuICAgICAgICBuZXdWYWx1ZSxcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgICBhcnJheUNoYW5nZXNcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChub3RpZmllciAhPT0gdGhpcyAmJiAhIXRoaXMub25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZENhbGxiYWNrKSB7XG4gICAgICB0aGlzLm9uUHJvcGVydHlWYWx1ZUNoYW5nZWRDYWxsYmFjayhcbiAgICAgICAgbmFtZSxcbiAgICAgICAgb2xkVmFsdWUsXG4gICAgICAgIG5ld1ZhbHVlLFxuICAgICAgICB0YXJnZXQsXG4gICAgICAgIGFycmF5Q2hhbmdlc1xuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBhIHByb3BlcnR5IHZhbHVlIGNoYW5nZWQuXG4gICAqIEBwYXJhbSBuYW1lIHRoZSBwcm9wZXJ0eSBuYW1lXG4gICAqIEBwYXJhbSBmdW5jIHRoZSBmdW5jdGlvbiB3aXRoIG5vIHBhcmFtZXRlcnMgdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBwcm9wZXJ0eSBjaGFuZ2VkLlxuICAgKiBAcGFyYW0ga2V5IGFuIG9wdGlvbmFsIHBhcmFtZXRlci4gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIHJlZ2lzdGVyZWQgZnVuY3Rpb24gZm9yIHRoaXMgcHJvcGVydHkgd2l0aCB0aGUgc2FtZSBrZXksIGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4uXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGZ1bmM6IGFueSxcbiAgICBrZXk6IHN0cmluZyA9IG51bGxcbiAgKSB7XG4gICAgaWYgKCF0aGlzLm9uUHJvcENoYW5nZUZ1bmN0aW9ucykge1xuICAgICAgdGhpcy5vblByb3BDaGFuZ2VGdW5jdGlvbnMgPSBbXTtcbiAgICB9XG4gICAgaWYgKGtleSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9uUHJvcENoYW5nZUZ1bmN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgaXRlbSA9IHRoaXMub25Qcm9wQ2hhbmdlRnVuY3Rpb25zW2ldO1xuICAgICAgICBpZiAoaXRlbS5uYW1lID09IG5hbWUgJiYgaXRlbS5rZXkgPT0ga2V5KSB7XG4gICAgICAgICAgaXRlbS5mdW5jID0gZnVuYztcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5vblByb3BDaGFuZ2VGdW5jdGlvbnMucHVzaCh7IG5hbWU6IG5hbWUsIGZ1bmM6IGZ1bmMsIGtleToga2V5IH0pO1xuICB9XG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gYSBwcm9wZXJ0eSB2YWx1ZSBjaGFuZ2VkIGZyb20gdGhlIG5hbWVzIGxpc3QuXG4gICAqIEBwYXJhbSBuYW1lcyB0aGUgbGlzdCBvZiBwcm9wZXJ0aWVzIG5hbWVzXG4gICAqIEBwYXJhbSBmdW5jIHRoZSBmdW5jdGlvbiB3aXRoIG5vIHBhcmFtZXRlcnMgdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBwcm9wZXJ0eSBjaGFuZ2VkLlxuICAgKiBAcGFyYW0ga2V5IGFuIG9wdGlvbmFsIHBhcmFtZXRlci4gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIHJlZ2lzdGVyZWQgZnVuY3Rpb24gZm9yIHRoaXMgcHJvcGVydHkgd2l0aCB0aGUgc2FtZSBrZXksIGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4uXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydGllc1ZhbHVlQ2hhbmdlZChcbiAgICBuYW1lczogQXJyYXk8c3RyaW5nPixcbiAgICBmdW5jOiBhbnksXG4gICAga2V5OiBzdHJpbmcgPSBudWxsXG4gICkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZXNbaV0sIGZ1bmMsIGtleSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBVbnJlZ2lzdGVyIG5vdGlmaWNhdGlvbiBvbiBwcm9wZXJ0eSB2YWx1ZSBjaGFuZ2VkXG4gICAqIEBwYXJhbSBuYW1lIHRoZSBwcm9wZXJ0eSBuYW1lXG4gICAqIEBwYXJhbSBrZXkgdGhlIGtleSB3aXRoIHdoaWNoIHlvdSBoYXZlIHJlZ2lzdGVyZWQgdGhlIG5vdGlmaWNhdGlvbiBmb3IgdGhpcyBwcm9wZXJ0eS4gSXQgY2FuIGJlIG51bGwuXG4gICAqL1xuICBwdWJsaWMgdW5SZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcgPSBudWxsXG4gICkge1xuICAgIGlmICghdGhpcy5vblByb3BDaGFuZ2VGdW5jdGlvbnMpIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub25Qcm9wQ2hhbmdlRnVuY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IHRoaXMub25Qcm9wQ2hhbmdlRnVuY3Rpb25zW2ldO1xuICAgICAgaWYgKGl0ZW0ubmFtZSA9PSBuYW1lICYmIGl0ZW0ua2V5ID09IGtleSkge1xuICAgICAgICB0aGlzLm9uUHJvcENoYW5nZUZ1bmN0aW9ucy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFVucmVnaXN0ZXIgbm90aWZpY2F0aW9uIG9uIHByb3BlcnR5IHZhbHVlIGNoYW5nZWQgZm9yIGFsbCBwcm9wZXJ0aWVzIGluIHRoZSBuYW1lcyBsaXN0LlxuICAgKiBAcGFyYW0gbmFtZXMgdGhlIGxpc3Qgb2YgcHJvcGVydGllcyBuYW1lc1xuICAgKiBAcGFyYW0ga2V5IHRoZSBrZXkgd2l0aCB3aGljaCB5b3UgaGF2ZSByZWdpc3RlcmVkIHRoZSBub3RpZmljYXRpb24gZm9yIHRoaXMgcHJvcGVydHkuIEl0IGNhbiBiZSBudWxsLlxuICAgKi9cbiAgcHVibGljIHVuUmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydGllc1ZhbHVlQ2hhbmdlZChcbiAgICBuYW1lczogQXJyYXk8c3RyaW5nPixcbiAgICBrZXk6IHN0cmluZyA9IG51bGxcbiAgKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy51blJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKG5hbWVzW2ldLCBrZXkpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgY3JlYXRlQ3VzdG9tTG9jYWxpemFibGVPYmoobmFtZTogc3RyaW5nKSB7XG4gICAgdmFyIGxvY1N0ciA9IHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcobmFtZSk7XG4gICAgaWYgKGxvY1N0ciB8fCAhKDxhbnk+dGhpcykuZ2V0TG9jYWxlKSByZXR1cm47XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhuYW1lLCA8SUxvY2FsaXphYmxlT3duZXI+KDxhbnk+dGhpcykpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgb3duZXI6IElMb2NhbGl6YWJsZU93bmVyLFxuICAgIHVzZU1hcmtEb3duOiBib29sZWFuID0gZmFsc2UsXG4gICAgaGFzRGVmYXVsdFZhbHVlOiBib29sZWFuID0gZmFsc2VcbiAgKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHZhciBsb2NTdHIgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcob3duZXIsIHVzZU1hcmtEb3duLCBuYW1lKTtcbiAgICBpZiAoaGFzRGVmYXVsdFZhbHVlKSB7XG4gICAgICBsb2NTdHIubG9jYWxpemF0aW9uTmFtZSA9IG5hbWU7XG4gICAgfVxuICAgIGxvY1N0ci5vblN0ckNoYW5nZWQgPSAob2xkVmFsdWU6IHN0cmluZywgbmV3VmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5wcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lLCBvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgIH07XG4gICAgaWYgKCF0aGlzLmxvY2FsaXphYmxlU3RyaW5ncykge1xuICAgICAgdGhpcy5sb2NhbGl6YWJsZVN0cmluZ3MgPSB7fTtcbiAgICB9XG4gICAgdGhpcy5sb2NhbGl6YWJsZVN0cmluZ3NbbmFtZV0gPSBsb2NTdHI7XG4gICAgcmV0dXJuIGxvY1N0cjtcbiAgfVxuICBwdWJsaWMgZ2V0TG9jYWxpemFibGVTdHJpbmcobmFtZTogc3RyaW5nKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMubG9jYWxpemFibGVTdHJpbmdzID8gdGhpcy5sb2NhbGl6YWJsZVN0cmluZ3NbbmFtZV0gOiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGRlZmF1bHRTdHI6IHN0cmluZyA9IFwiXCJcbiAgKTogc3RyaW5nIHtcbiAgICB2YXIgbG9jU3RyID0gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhuYW1lKTtcbiAgICBpZiAoIWxvY1N0cikgcmV0dXJuIFwiXCI7XG4gICAgdmFyIHJlcyA9IGxvY1N0ci50ZXh0O1xuICAgIHJldHVybiByZXMgPyByZXMgOiBkZWZhdWx0U3RyO1xuICB9XG4gIHB1YmxpYyBzZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgdmFyIGxvY1N0ciA9IHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcobmFtZSk7XG4gICAgaWYgKCFsb2NTdHIpIHJldHVybjtcbiAgICBsb2NTdHIudGV4dCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyBhZGRVc2VkTG9jYWxlcyhsb2NhbGVzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgaWYgKCEhdGhpcy5sb2NhbGl6YWJsZVN0cmluZ3MpIHtcbiAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLmxvY2FsaXphYmxlU3RyaW5ncykge1xuICAgICAgICBsZXQgaXRlbSA9IHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoa2V5KTtcbiAgICAgICAgaWYgKGl0ZW0pIHRoaXMuQWRkTG9jU3RyaW5nVG9Vc2VkTG9jYWxlcyhpdGVtLCBsb2NhbGVzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCEhdGhpcy5hcnJheXNJbmZvKSB7XG4gICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5hcnJheXNJbmZvKSB7XG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShrZXkpO1xuICAgICAgICBpZiAoIWl0ZW1zIHx8ICFpdGVtcy5sZW5ndGgpIGNvbnRpbnVlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbGV0IGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLmFkZFVzZWRMb2NhbGVzKSB7XG4gICAgICAgICAgICBpdGVtLmFkZFVzZWRMb2NhbGVzKGxvY2FsZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBwdWJsaWMgc2VhcmNoVGV4dCh0ZXh0OiBzdHJpbmcsIGZvdW5kZWQ6IEFycmF5PElGaW5kRWxlbWVudD4pIHtcbiAgICB2YXIgc3RyczogQXJyYXk8TG9jYWxpemFibGVTdHJpbmc+ID0gW107XG4gICAgdGhpcy5nZXRTZWFyY2hhYmxlTG9jYWxpemVkU3RyaW5ncyhzdHJzKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChzdHJzW2ldLnNldEZpbmRUZXh0KHRleHQpKSB7XG4gICAgICAgIGZvdW5kZWQucHVzaCh7IGVsZW1lbnQ6IHRoaXMsIHN0cjogc3Ryc1tpXSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZXRTZWFyY2hhYmxlTG9jYWxpemVkU3RyaW5ncyhhcnI6IEFycmF5PExvY2FsaXphYmxlU3RyaW5nPikge1xuICAgIGlmICghIXRoaXMubG9jYWxpemFibGVTdHJpbmdzKSB7XG4gICAgICBsZXQga2V5czogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgICAgdGhpcy5nZXRTZWFyY2hhYmxlTG9jS2V5cyhrZXlzKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgaXRlbSA9IHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoa2V5c1tpXSk7XG4gICAgICAgIGlmIChpdGVtKSBhcnIucHVzaChpdGVtKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCF0aGlzLmFycmF5c0luZm8pIHJldHVybjtcbiAgICBsZXQga2V5czogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgIHRoaXMuZ2V0U2VhcmNoYWJsZUl0ZW1WYWx1ZUtleXMoa2V5cyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbXMgPSB0aGlzLmdldFByb3BlcnR5VmFsdWUoa2V5c1tpXSk7XG4gICAgICBpZiAoIWl0ZW1zKSBjb250aW51ZTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaXRlbXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgYXJyLnB1c2goaXRlbXNbal0ubG9jVGV4dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRTZWFyY2hhYmxlTG9jS2V5cyhrZXlzOiBBcnJheTxzdHJpbmc+KSB7IH1cbiAgcHJvdGVjdGVkIGdldFNlYXJjaGFibGVJdGVtVmFsdWVLZXlzKGtleXM6IEFycmF5PHN0cmluZz4pIHsgfVxuICBwcm90ZWN0ZWQgQWRkTG9jU3RyaW5nVG9Vc2VkTG9jYWxlcyhcbiAgICBsb2NTdHI6IExvY2FsaXphYmxlU3RyaW5nLFxuICAgIGxvY2FsZXM6IEFycmF5PHN0cmluZz5cbiAgKSB7XG4gICAgdmFyIGxvY3MgPSBsb2NTdHIuZ2V0TG9jYWxlcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG9jcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGxvY2FsZXMuaW5kZXhPZihsb2NzW2ldKSA8IDApIHtcbiAgICAgICAgbG9jYWxlcy5wdXNoKGxvY3NbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlSXRlbVZhbHVlcyhuYW1lOiBzdHJpbmcpOiBBcnJheTxhbnk+IHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMuY3JlYXRlTmV3QXJyYXkobmFtZSwgZnVuY3Rpb24gKGl0ZW06IGFueSkge1xuICAgICAgaXRlbS5sb2NPd25lciA9IHNlbGY7XG4gICAgICBpdGVtLm93bmVyUHJvcGVydHlOYW1lID0gbmFtZTtcbiAgICB9KTtcbiAgICB0aGlzLmFycmF5c0luZm9bbmFtZV0uaXNJdGVtVmFsdWVzID0gdHJ1ZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHByaXZhdGUgbm90aWZ5QXJyYXlDaGFuZ2VkKGFyOiBhbnksIGFycmF5Q2hhbmdlczogQXJyYXlDaGFuZ2VzKSB7XG4gICAgISFhci5vbkFycmF5Q2hhbmdlZCAmJiBhci5vbkFycmF5Q2hhbmdlZChhcnJheUNoYW5nZXMpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVOZXdBcnJheUNvcmUobmFtZTogc3RyaW5nKTogQXJyYXk8YW55PiB7XG4gICAgdmFyIHJlcyA9IG51bGw7XG4gICAgaWYgKCEhdGhpcy5jcmVhdGVBcnJheUNvcmVIYW5kbGVyKSB7XG4gICAgICByZXMgPSB0aGlzLmNyZWF0ZUFycmF5Q29yZUhhbmRsZXIodGhpcy5wcm9wZXJ0eUhhc2gsIG5hbWUpO1xuICAgIH1cbiAgICBpZiAoIXJlcykge1xuICAgICAgcmVzID0gbmV3IEFycmF5PGFueT4oKTtcbiAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZUNvcmUodGhpcy5wcm9wZXJ0eUhhc2gsIG5hbWUsIHJlcyk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGVuc3VyZUFycmF5KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBvblB1c2g6IGFueSA9IG51bGwsXG4gICAgb25SZW1vdmU6IGFueSA9IG51bGxcbiAgKSB7XG4gICAgaWYgKHRoaXMuYXJyYXlzSW5mbyAmJiB0aGlzLmFycmF5c0luZm9bbmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVOZXdBcnJheShuYW1lLCBvblB1c2gsIG9uUmVtb3ZlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVOZXdBcnJheShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgb25QdXNoOiBhbnkgPSBudWxsLFxuICAgIG9uUmVtb3ZlOiBhbnkgPSBudWxsXG4gICk6IEFycmF5PGFueT4ge1xuICAgIHZhciBuZXdBcnJheSA9IHRoaXMuY3JlYXRlTmV3QXJyYXlDb3JlKG5hbWUpO1xuICAgIGlmICghdGhpcy5hcnJheXNJbmZvKSB7XG4gICAgICB0aGlzLmFycmF5c0luZm8gPSB7fTtcbiAgICB9XG4gICAgdGhpcy5hcnJheXNJbmZvW25hbWVdID0geyBvblB1c2g6IG9uUHVzaCwgaXNJdGVtVmFsdWVzOiBmYWxzZSB9O1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBuZXdBcnJheS5wdXNoID0gZnVuY3Rpb24gKHZhbHVlKTogbnVtYmVyIHtcbiAgICAgIHZhciByZXN1bHQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3QXJyYXkpLnB1c2guY2FsbChuZXdBcnJheSwgdmFsdWUpO1xuICAgICAgaWYgKCFzZWxmLmlzRGlzcG9zZWRWYWx1ZSkge1xuICAgICAgICBpZiAob25QdXNoKSBvblB1c2godmFsdWUsIG5ld0FycmF5Lmxlbmd0aCAtIDEpO1xuICAgICAgICBjb25zdCBhcnJheUNoYW5nZXMgPSBuZXcgQXJyYXlDaGFuZ2VzKFxuICAgICAgICAgIG5ld0FycmF5Lmxlbmd0aCAtIDEsXG4gICAgICAgICAgMCxcbiAgICAgICAgICBbdmFsdWVdLFxuICAgICAgICAgIFtdXG4gICAgICAgICk7XG4gICAgICAgIHNlbGYucHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZSwgbmV3QXJyYXksIG5ld0FycmF5LCBhcnJheUNoYW5nZXMpO1xuICAgICAgICBzZWxmLm5vdGlmeUFycmF5Q2hhbmdlZChuZXdBcnJheSwgYXJyYXlDaGFuZ2VzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBuZXdBcnJheS5zaGlmdCA9IGZ1bmN0aW9uICgpOiBudW1iZXIge1xuICAgICAgdmFyIHJlc3VsdCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXdBcnJheSkuc2hpZnQuY2FsbChuZXdBcnJheSk7XG4gICAgICBpZiAoIXNlbGYuaXNEaXNwb3NlZFZhbHVlICYmIHJlc3VsdCkge1xuICAgICAgICBpZiAob25SZW1vdmUpIG9uUmVtb3ZlKHJlc3VsdCk7XG4gICAgICAgIGNvbnN0IGFycmF5Q2hhbmdlcyA9IG5ldyBBcnJheUNoYW5nZXMobmV3QXJyYXkubGVuZ3RoIC0gMSwgMSwgW10sIFtdKTtcbiAgICAgICAgc2VsZi5wcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lLCBuZXdBcnJheSwgbmV3QXJyYXksIGFycmF5Q2hhbmdlcyk7XG4gICAgICAgIHNlbGYubm90aWZ5QXJyYXlDaGFuZ2VkKG5ld0FycmF5LCBhcnJheUNoYW5nZXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIG5ld0FycmF5LnVuc2hpZnQgPSBmdW5jdGlvbiAodmFsdWUpOiBudW1iZXIge1xuICAgICAgdmFyIHJlc3VsdCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXdBcnJheSkudW5zaGlmdC5jYWxsKFxuICAgICAgICBuZXdBcnJheSxcbiAgICAgICAgdmFsdWVcbiAgICAgICk7XG4gICAgICBpZiAoIXNlbGYuaXNEaXNwb3NlZFZhbHVlKSB7XG4gICAgICAgIGlmIChvblB1c2gpIG9uUHVzaCh2YWx1ZSwgbmV3QXJyYXkubGVuZ3RoIC0gMSk7XG4gICAgICAgIGNvbnN0IGFycmF5Q2hhbmdlcyA9IG5ldyBBcnJheUNoYW5nZXMoMCwgMCwgW3ZhbHVlXSwgW10pO1xuICAgICAgICBzZWxmLnByb3BlcnR5VmFsdWVDaGFuZ2VkKG5hbWUsIG5ld0FycmF5LCBuZXdBcnJheSwgYXJyYXlDaGFuZ2VzKTtcbiAgICAgICAgc2VsZi5ub3RpZnlBcnJheUNoYW5nZWQobmV3QXJyYXksIGFycmF5Q2hhbmdlcyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgbmV3QXJyYXkucG9wID0gZnVuY3Rpb24gKCk6IG51bWJlciB7XG4gICAgICB2YXIgcmVzdWx0ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ld0FycmF5KS5wb3AuY2FsbChuZXdBcnJheSk7XG4gICAgICBpZiAoIXNlbGYuaXNEaXNwb3NlZFZhbHVlKSB7XG4gICAgICAgIGlmIChvblJlbW92ZSkgb25SZW1vdmUocmVzdWx0KTtcbiAgICAgICAgY29uc3QgYXJyYXlDaGFuZ2VzID0gbmV3IEFycmF5Q2hhbmdlcyhuZXdBcnJheS5sZW5ndGggLSAxLCAxLCBbXSwgW10pO1xuICAgICAgICBzZWxmLnByb3BlcnR5VmFsdWVDaGFuZ2VkKG5hbWUsIG5ld0FycmF5LCBuZXdBcnJheSwgYXJyYXlDaGFuZ2VzKTtcbiAgICAgICAgc2VsZi5ub3RpZnlBcnJheUNoYW5nZWQobmV3QXJyYXksIGFycmF5Q2hhbmdlcyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgbmV3QXJyYXkuc3BsaWNlID0gZnVuY3Rpb24gKFxuICAgICAgc3RhcnQ/OiBudW1iZXIsXG4gICAgICBkZWxldGVDb3VudD86IG51bWJlcixcbiAgICAgIC4uLml0ZW1zOiBhbnlbXVxuICAgICk6IGFueVtdIHtcbiAgICAgIGlmICghc3RhcnQpIHN0YXJ0ID0gMDtcbiAgICAgIGlmICghZGVsZXRlQ291bnQpIGRlbGV0ZUNvdW50ID0gMDtcbiAgICAgIHZhciByZXN1bHQgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3QXJyYXkpLnNwbGljZS5jYWxsKFxuICAgICAgICBuZXdBcnJheSxcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIGRlbGV0ZUNvdW50LFxuICAgICAgICAuLi5pdGVtc1xuICAgICAgKTtcbiAgICAgIGlmICghaXRlbXMpIGl0ZW1zID0gW107XG4gICAgICBpZiAoIXNlbGYuaXNEaXNwb3NlZFZhbHVlKSB7XG4gICAgICAgIGlmIChvblJlbW92ZSAmJiByZXN1bHQpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgb25SZW1vdmUocmVzdWx0W2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9uUHVzaCkge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIG9uUHVzaChpdGVtc1tpXSwgc3RhcnQgKyBpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXJyYXlDaGFuZ2VzID0gbmV3IEFycmF5Q2hhbmdlcyhcbiAgICAgICAgICBzdGFydCxcbiAgICAgICAgICBkZWxldGVDb3VudCxcbiAgICAgICAgICBpdGVtcyxcbiAgICAgICAgICByZXN1bHRcbiAgICAgICAgKTtcbiAgICAgICAgc2VsZi5wcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lLCBuZXdBcnJheSwgbmV3QXJyYXksIGFycmF5Q2hhbmdlcyk7XG4gICAgICAgIHNlbGYubm90aWZ5QXJyYXlDaGFuZ2VkKG5ld0FycmF5LCBhcnJheUNoYW5nZXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ld0FycmF5O1xuICB9XG4gIHByb3RlY3RlZCBnZXRJdGVtVmFsdWVUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0QXJyYXkoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHNyYzogYW55W10sXG4gICAgZGVzdDogYW55W10sXG4gICAgaXNJdGVtVmFsdWVzOiBib29sZWFuLFxuICAgIG9uUHVzaDogYW55XG4gICkge1xuICAgIHZhciBkZWxldGVkSXRlbXMgPSBbXS5jb25jYXQoc3JjKTtcbiAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc3JjKS5zcGxpY2UuY2FsbChzcmMsIDAsIHNyYy5sZW5ndGgpO1xuICAgIGlmICghIWRlc3QpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgaXRlbSA9IGRlc3RbaV07XG4gICAgICAgIGlmIChpc0l0ZW1WYWx1ZXMpIHtcbiAgICAgICAgICBpZiAoISFCYXNlLmNyZWF0ZUl0ZW1WYWx1ZSkge1xuICAgICAgICAgICAgaXRlbSA9IEJhc2UuY3JlYXRlSXRlbVZhbHVlKGl0ZW0sIHRoaXMuZ2V0SXRlbVZhbHVlVHlwZSgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKHNyYykucHVzaC5jYWxsKHNyYywgaXRlbSk7XG4gICAgICAgIGlmIChvblB1c2gpIG9uUHVzaChzcmNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBhcnJheUNoYW5nZXMgPSBuZXcgQXJyYXlDaGFuZ2VzKFxuICAgICAgMCxcbiAgICAgIGRlbGV0ZWRJdGVtcy5sZW5ndGgsXG4gICAgICBzcmMsXG4gICAgICBkZWxldGVkSXRlbXNcbiAgICApO1xuICAgIHRoaXMucHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZSwgZGVsZXRlZEl0ZW1zLCBzcmMsIGFycmF5Q2hhbmdlcyk7XG4gICAgdGhpcy5ub3RpZnlBcnJheUNoYW5nZWQoc3JjLCBhcnJheUNoYW5nZXMpO1xuICB9XG4gIHByb3RlY3RlZCBpc1R3b1ZhbHVlRXF1YWxzKFxuICAgIHg6IGFueSxcbiAgICB5OiBhbnksXG4gICAgY2FzZUluU2Vuc2l0aXZlOiBib29sZWFuID0gZmFsc2UsXG4gICAgdHJpbVN0cmluZzogYm9vbGVhbiA9IGZhbHNlXG4gICk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMoeCwgeSwgZmFsc2UsICFjYXNlSW5TZW5zaXRpdmUsIHRyaW1TdHJpbmcpO1xuICB9XG4gIHByaXZhdGUgc3RhdGljIGNvcHlPYmplY3QoZHN0OiBhbnksIHNyYzogYW55KSB7XG4gICAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgICAgdmFyIHNvdXJjZSA9IHNyY1trZXldO1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2UgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgc291cmNlID0ge307XG4gICAgICAgIHRoaXMuY29weU9iamVjdChzb3VyY2UsIHNyY1trZXldKTtcbiAgICAgIH1cbiAgICAgIGRzdFtrZXldID0gc291cmNlO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY29weUNzc0NsYXNzZXMoZGVzdDogYW55LCBzb3VyY2U6IGFueSkge1xuICAgIGlmICghc291cmNlKSByZXR1cm47XG4gICAgaWYgKHR5cGVvZiBzb3VyY2UgPT09IFwic3RyaW5nXCIgfHwgc291cmNlIGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICBkZXN0W1wicm9vdFwiXSA9IHNvdXJjZTtcbiAgICB9IGVsc2Uge1xuICAgICAgQmFzZS5jb3B5T2JqZWN0KGRlc3QsIHNvdXJjZSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0VmFsdWVJbkxvd0Nhc2UodmFsOiBhbnkpOiBhbnkge1xuICAgIGlmICghIXZhbCAmJiB0eXBlb2YgdmFsID09IFwic3RyaW5nXCIpIHJldHVybiB2YWwudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gdmFsO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBcnJheUNoYW5nZXMge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgaW5kZXg6IG51bWJlcixcbiAgICBwdWJsaWMgZGVsZXRlQ291bnQ6IG51bWJlcixcbiAgICBwdWJsaWMgaXRlbXNUb0FkZDogYW55W10sXG4gICAgcHVibGljIGRlbGV0ZWRJdGVtczogYW55W11cbiAgKSB7IH1cbn1cblxuZXhwb3J0IGNsYXNzIEV2ZW50PFQgZXh0ZW5kcyBGdW5jdGlvbiwgT3B0aW9ucz4ge1xuICBwdWJsaWMgb25DYWxsYmFja3NDaGFuZ2VkOiAoKSA9PiB2b2lkO1xuICBwcm90ZWN0ZWQgY2FsbGJhY2tzOiBBcnJheTxUPjtcbiAgcHVibGljIGdldCBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5jYWxsYmFja3MgfHwgdGhpcy5jYWxsYmFja3MubGVuZ3RoID09IDA7XG4gIH1cbiAgcHVibGljIGZpcmUoc2VuZGVyOiBhbnksIG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICBpZiAoIXRoaXMuY2FsbGJhY2tzKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5jYWxsYmFja3NbaV0oc2VuZGVyLCBvcHRpb25zKTtcbiAgICAgIGlmICghdGhpcy5jYWxsYmFja3MpIHJldHVybjtcbiAgICB9XG4gIH1cbiAgcHVibGljIGNsZWFyKCkge1xuICAgIHRoaXMuY2FsbGJhY2tzID0gdW5kZWZpbmVkO1xuICB9XG4gIHB1YmxpYyBhZGQoZnVuYzogVCkge1xuICAgIGlmICh0aGlzLmhhc0Z1bmMoZnVuYykpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuY2FsbGJhY2tzKSB7XG4gICAgICB0aGlzLmNhbGxiYWNrcyA9IG5ldyBBcnJheTxUPigpO1xuICAgIH1cbiAgICB0aGlzLmNhbGxiYWNrcy5wdXNoKGZ1bmMpO1xuICAgIHRoaXMuZmlyZUNhbGxiYWNrQ2hhbmdlZCgpO1xuICB9XG4gIHB1YmxpYyByZW1vdmUoZnVuYzogVCkge1xuICAgIGlmICh0aGlzLmhhc0Z1bmMoZnVuYykpIHtcbiAgICAgIHZhciBpbmRleCA9IHRoaXMuY2FsbGJhY2tzLmluZGV4T2YoZnVuYywgMCk7XG4gICAgICB0aGlzLmNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgdGhpcy5maXJlQ2FsbGJhY2tDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBoYXNGdW5jKGZ1bmM6IFQpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5jYWxsYmFja3MgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmNhbGxiYWNrcy5pbmRleE9mKGZ1bmMsIDApID4gLTE7XG4gIH1cbiAgcHJpdmF0ZSBmaXJlQ2FsbGJhY2tDaGFuZ2VkKCkge1xuICAgIGlmICghIXRoaXMub25DYWxsYmFja3NDaGFuZ2VkKSB7XG4gICAgICB0aGlzLm9uQ2FsbGJhY2tzQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRXZlbnRCYXNlPFQ+IGV4dGVuZHMgRXZlbnQ8XG4gIChzZW5kZXI6IFQsIG9wdGlvbnM6IGFueSkgPT4gYW55LFxuICBhbnlcbj4geyB9XG4iLCJpbXBvcnQgeyBIYXNoVGFibGUsIEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZVwiO1xuaW1wb3J0IHsgSVN1cnZleSwgSVN1cnZleURhdGEgfSBmcm9tIFwiLi9iYXNlLWludGVyZmFjZXNcIjtcbmltcG9ydCB7IEV4cHJlc3Npb25SdW5uZXIgfSBmcm9tIFwiLi9jb25kaXRpb25zXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuXG4vKipcbiAqIFRoZSBjYWxjdWxhdGVkIHZhbHVlIGlzIGEgd2F5IHRvIGRlZmluZSB0aGUgdmFyaWFibGUgaW4gU3VydmV5IENyZWF0b3IuXG4gKiBJdCBoYXMgdHdvIG1haW4gcHJvcGVydGllczogbmFtZSBhbmQgZXhwcmVzc2lvbi4gQmFzZWQgb24gZXhwcmVzc2lvbiB0aGUgdmFsdWUgcmVhZC1vbmx5IHByb3BlcnR5IGlzIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlZC5cbiAqIFRoZSBuYW1lIHByb3BlcnR5IHNob3VsZCBiZSB1bmlxdWUgdGhvdWdoIGFsbCBjYWxjdWxhdGVkIHZhbHVlcy5cbiAqIEl0IHVzZXMgc3VydmV5LmdldFZhcmlhYmxlL3NlcnV2ZXkuc2V0VmFyaWFibGUgZnVuY3Rpb25zIHRvIGdldC9zZXQgaXRzIHZhbHVlLiBUaGUgY2xhc3MgZG8gbm90IHN0b3JlIGl0cyB2YWx1ZSBpbnRlcm5hbGx5LlxuICogWW91IG1heSBzZXQgaW5jbHVkZUludG9SZXN1bHQgcHJvcGVydHkgdG8gdHJ1ZSB0byBzdG9yZSB0aGlzIGNhbGN1bGF0ZWQgdmFsdWUgaW50byBzdXJ2ZXkgcmVzdWx0LlxuICovXG5leHBvcnQgY2xhc3MgQ2FsY3VsYXRlZFZhbHVlIGV4dGVuZHMgQmFzZSB7XG4gIHByaXZhdGUgZGF0YTogSVN1cnZleURhdGE7XG4gIHByaXZhdGUgZXhwcmVzc2lvbklzUnVubmluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGV4cHJlc3Npb25SdW5uZXI6IEV4cHJlc3Npb25SdW5uZXI7XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZyA9IG51bGwsIGV4cHJlc3Npb246IHN0cmluZyA9IG51bGwpIHtcbiAgICBzdXBlcigpO1xuICAgIGlmICghIW5hbWUpIHtcbiAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgfVxuICAgIGlmICghIWV4cHJlc3Npb24pIHtcbiAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gICAgfVxuICB9XG4gIHB1YmxpYyBzZXRPd25lcihkYXRhOiBJU3VydmV5RGF0YSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5yZXJ1bkV4cHJlc3Npb24oKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImNhbGN1bGF0ZWR2YWx1ZVwiO1xuICB9XG4gIHB1YmxpYyBnZXRTdXJ2ZXkobGl2ZTogYm9vbGVhbiA9IGZhbHNlKTogSVN1cnZleSB7XG4gICAgcmV0dXJuICEhdGhpcy5kYXRhICYmICEhKDxhbnk+dGhpcy5kYXRhKVtcImdldFN1cnZleVwiXVxuICAgICAgPyAoPGFueT50aGlzLmRhdGEpLmdldFN1cnZleSgpXG4gICAgICA6IG51bGw7XG4gIH1cbiAgcHVibGljIGdldCBvd25lcigpOiBJU3VydmV5RGF0YSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgfVxuICAvKipcbiAgICogVGhlIGNhbGN1bGF0ZWQgdmFsdWUgbmFtZS4gSXQgc2hvdWxkIGJlIG5vbiBlbXB0eSBhbmQgdW5pcXVlLlxuICAgKi9cbiAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm5hbWVcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBuYW1lKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibmFtZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlIHRvIGluY2x1ZGUgdGhlIG5vbi1lbXB0eSBjYWxjdWxhdGVkIHZhbHVlIGludG8gc3VydmV5IHJlc3VsdCwgc3VydmV5LmRhdGEgcHJvcGVydHkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGluY2x1ZGVJbnRvUmVzdWx0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpbmNsdWRlSW50b1Jlc3VsdFwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBpbmNsdWRlSW50b1Jlc3VsdCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpbmNsdWRlSW50b1Jlc3VsdFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgRXhwcmVzc2lvbiB0aGF0IHVzZWQgdG8gY2FsY3VsYXRlIHRoZSB2YWx1ZS4gWW91IG1heSB1c2Ugc3RhbmRhcmQgb3BlcmF0b3JzIGxpa2UgKywgLSwgKiBhbmQgLywgc3F1YXJlcyAoKS4gSGVyZSBpcyB0aGUgZXhhbXBsZSBvZiBhY2Nlc3NpbmcgdGhlIHF1ZXN0aW9uIHZhbHVlIHtxdWVzdGlvbm5hbWV9LlxuICAgKiA8YnIvPkV4YW1wbGU6IFwiKHtxdWFudGl0eX0gKiB7cHJpY2V9KSAqICgxMDAgLSB7ZGlzY291bnR9KSAvIDEwMFwiXG4gICAqL1xuICBwdWJsaWMgZ2V0IGV4cHJlc3Npb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZXhwcmVzc2lvblwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGV4cHJlc3Npb24odmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJleHByZXNzaW9uXCIsIHZhbCk7XG4gICAgdGhpcy5yZXJ1bkV4cHJlc3Npb24oKTtcbiAgfVxuICBwdWJsaWMgbG9jQ2FsY3VsYXRpb24oKSB7XG4gICAgdGhpcy5leHByZXNzaW9uSXNSdW5uaW5nID0gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgdW5sb2NDYWxjdWxhdGlvbigpIHtcbiAgICB0aGlzLmV4cHJlc3Npb25Jc1J1bm5pbmcgPSBmYWxzZTtcbiAgfVxuICBwcml2YXRlIGlzQ2FsY3VsYXRlZCA9IGZhbHNlO1xuICBwdWJsaWMgcmVzZXRDYWxjdWxhdGlvbigpIHtcbiAgICB0aGlzLmlzQ2FsY3VsYXRlZCA9IGZhbHNlO1xuICB9XG4gIHB1YmxpYyBkb0NhbGN1bGF0aW9uKFxuICAgIGNhbGN1bGF0ZWRWYWx1ZXM6IEFycmF5PENhbGN1bGF0ZWRWYWx1ZT4sXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PlxuICApIHtcbiAgICBpZiAodGhpcy5pc0NhbGN1bGF0ZWQpIHJldHVybjtcbiAgICB0aGlzLnJ1bkV4cHJlc3Npb25Db3JlKGNhbGN1bGF0ZWRWYWx1ZXMsIHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgdGhpcy5pc0NhbGN1bGF0ZWQgPSB0cnVlO1xuICB9XG4gIHB1YmxpYyBydW5FeHByZXNzaW9uKHZhbHVlczogSGFzaFRhYmxlPGFueT4sIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+KSB7XG4gICAgdGhpcy5ydW5FeHByZXNzaW9uQ29yZShudWxsLCB2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICB9XG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogYW55IHtcbiAgICBpZiAoIXRoaXMuZGF0YSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmdldFZhcmlhYmxlKHRoaXMubmFtZSk7XG4gIH1cbiAgcHJvdGVjdGVkIHNldFZhbHVlKHZhbDogYW55KSB7XG4gICAgaWYgKCF0aGlzLmRhdGEpIHJldHVybjtcbiAgICB0aGlzLmRhdGEuc2V0VmFyaWFibGUodGhpcy5uYW1lLCB2YWwpO1xuICB9XG4gIHByaXZhdGUgZ2V0IGNhblJ1bkV4cHJlc3Npb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICEhdGhpcy5kYXRhICYmXG4gICAgICAhdGhpcy5pc0xvYWRpbmdGcm9tSnNvbiAmJlxuICAgICAgISF0aGlzLmV4cHJlc3Npb24gJiZcbiAgICAgICF0aGlzLmV4cHJlc3Npb25Jc1J1bm5pbmcgJiZcbiAgICAgICEhdGhpcy5uYW1lXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJlcnVuRXhwcmVzc2lvbigpIHtcbiAgICBpZiAoIXRoaXMuY2FuUnVuRXhwcmVzc2lvbikgcmV0dXJuO1xuICAgIHRoaXMucnVuRXhwcmVzc2lvbihcbiAgICAgIHRoaXMuZGF0YS5nZXRGaWx0ZXJlZFZhbHVlcygpLFxuICAgICAgdGhpcy5kYXRhLmdldEZpbHRlcmVkUHJvcGVydGllcygpXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHJ1bkV4cHJlc3Npb25Db3JlKFxuICAgIGNhbGN1bGF0ZWRWYWx1ZXM6IEFycmF5PENhbGN1bGF0ZWRWYWx1ZT4sXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PlxuICApIHtcbiAgICBpZiAoIXRoaXMuY2FuUnVuRXhwcmVzc2lvbikgcmV0dXJuO1xuICAgIHRoaXMuZW5zdXJlRXhwcmVzc2lvbih2YWx1ZXMpO1xuICAgIHRoaXMubG9jQ2FsY3VsYXRpb24oKTtcbiAgICBpZiAoISFjYWxjdWxhdGVkVmFsdWVzKSB7XG4gICAgICB0aGlzLnJ1bkRlcGVuZGVudEV4cHJlc3Npb25zKGNhbGN1bGF0ZWRWYWx1ZXMsIHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgfVxuICAgIHRoaXMuZXhwcmVzc2lvblJ1bm5lci5ydW4odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICBwcml2YXRlIHJ1bkRlcGVuZGVudEV4cHJlc3Npb25zKFxuICAgIGNhbGN1bGF0ZWRWYWx1ZXM6IEFycmF5PENhbGN1bGF0ZWRWYWx1ZT4sXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PlxuICApIHtcbiAgICB2YXIgdmFyaWFibGVzID0gdGhpcy5leHByZXNzaW9uUnVubmVyLmdldFZhcmlhYmxlcygpO1xuICAgIGlmICghdmFyaWFibGVzKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxjdWxhdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2FsY0l0ZW0gPSBjYWxjdWxhdGVkVmFsdWVzW2ldO1xuICAgICAgaWYgKGNhbGNJdGVtID09PSB0aGlzIHx8IHZhcmlhYmxlcy5pbmRleE9mKGNhbGNJdGVtLm5hbWUpIDwgMCkgY29udGludWU7XG4gICAgICBjYWxjSXRlbS5kb0NhbGN1bGF0aW9uKGNhbGN1bGF0ZWRWYWx1ZXMsIHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgICB2YWx1ZXNbY2FsY0l0ZW0ubmFtZV0gPSBjYWxjSXRlbS52YWx1ZTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBlbnN1cmVFeHByZXNzaW9uKHZhbHVlczogSGFzaFRhYmxlPGFueT4pIHtcbiAgICBpZiAoISF0aGlzLmV4cHJlc3Npb25SdW5uZXIpIHJldHVybjtcbiAgICB0aGlzLmV4cHJlc3Npb25SdW5uZXIgPSBuZXcgRXhwcmVzc2lvblJ1bm5lcih0aGlzLmV4cHJlc3Npb24pO1xuICAgIHRoaXMuZXhwcmVzc2lvblJ1bm5lci5vblJ1bkNvbXBsZXRlID0gbmV3VmFsdWUgPT4ge1xuICAgICAgaWYgKCFIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMobmV3VmFsdWUsIHRoaXMudmFsdWUpKSB7XG4gICAgICAgIHRoaXMuc2V0VmFsdWUobmV3VmFsdWUpO1xuICAgICAgfVxuICAgICAgdGhpcy51bmxvY0NhbGN1bGF0aW9uKCk7XG4gICAgfTtcbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImNhbGN1bGF0ZWR2YWx1ZVwiLFxuICBbXG4gICAgeyBuYW1lOiBcIiFuYW1lXCIsIGlzVW5pcXVlOiB0cnVlIH0sXG4gICAgXCJleHByZXNzaW9uOmV4cHJlc3Npb25cIixcbiAgICBcImluY2x1ZGVJbnRvUmVzdWx0OmJvb2xlYW5cIixcbiAgXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBDYWxjdWxhdGVkVmFsdWUoKTtcbiAgfSxcbiAgXCJiYXNlXCJcbik7XG4iLCJpbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZVwiO1xuaW1wb3J0IHsgSVRleHRQcm9jZXNzb3IsIElRdWVzdGlvbiwgSVN1cnZleSB9IGZyb20gXCIuL2Jhc2UtaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyLCBKc29uT2JqZWN0UHJvcGVydHkgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBXZWJSZXF1ZXN0RXJyb3IsIFdlYlJlcXVlc3RFbXB0eUVycm9yIH0gZnJvbSBcIi4vZXJyb3JcIjtcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcbmltcG9ydCB7IFN1cnZleUVycm9yIH0gZnJvbSBcIi4vc3VydmV5LWVycm9yXCI7XG5cbmNsYXNzIFhtbFBhcnNlciB7XG4gIHByaXZhdGUgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICBwdWJsaWMgYXNzaWduVmFsdWUodGFyZ2V0OiBhbnksIG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXS5wdXNoKHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHRhcmdldFtuYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBbdGFyZ2V0W25hbWVdXS5jb25jYXQodmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IDEgJiZcbiAgICAgIE9iamVjdC5rZXlzKHZhbHVlKVswXSA9PT0gbmFtZVxuICAgICkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gdmFsdWVbbmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgeG1sMkpzb24oeG1sTm9kZTogYW55LCByZXN1bHQ6IGFueSkge1xuICAgIGlmICh4bWxOb2RlLmNoaWxkcmVuICYmIHhtbE5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4bWxOb2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBjaGlsZE5vZGUgPSB4bWxOb2RlLmNoaWxkcmVuW2ldO1xuICAgICAgICBsZXQgY2hpbGRPYmplY3QgPSB7fTtcbiAgICAgICAgdGhpcy54bWwySnNvbihjaGlsZE5vZGUsIGNoaWxkT2JqZWN0KTtcbiAgICAgICAgdGhpcy5hc3NpZ25WYWx1ZShyZXN1bHQsIGNoaWxkTm9kZS5ub2RlTmFtZSwgY2hpbGRPYmplY3QpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFzc2lnblZhbHVlKHJlc3VsdCwgeG1sTm9kZS5ub2RlTmFtZSwgeG1sTm9kZS50ZXh0Q29udGVudCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBwYXJzZVhtbFN0cmluZyh4bWxTdHJpbmc6IHN0cmluZykge1xuICAgIGxldCB4bWxSb290ID0gdGhpcy5wYXJzZXIucGFyc2VGcm9tU3RyaW5nKHhtbFN0cmluZywgXCJ0ZXh0L3htbFwiKTtcbiAgICBsZXQganNvbiA9IHt9O1xuICAgIHRoaXMueG1sMkpzb24oeG1sUm9vdCwganNvbik7XG4gICAgcmV0dXJuIGpzb247XG4gIH1cbn1cblxuLyoqXG4gKiBBIGRlZmluaXRpb24gZm9yIGZpbGxpbmcgY2hvaWNlcyBmb3IgY2hlY2tib3gsIGRyb3Bkb3duIGFuZCByYWRpb2dyb3VwIHF1ZXN0aW9ucyBmcm9tIHJlc2Z1bGwgc2VydmljZXMuXG4gKiBUaGUgcnVuIG1ldGhvZCBjYWxsIGEgcmVzdGZ1bCBzZXJ2aWNlIGFuZCByZXN1bHRzIGNhbiBiZSBnZXQgb24gZ2V0UmVzdWx0Q2FsbGJhY2suXG4gKi9cbmV4cG9ydCBjbGFzcyBDaG9pY2VzUmVzdGZ1bCBleHRlbmRzIEJhc2Uge1xuICBwcml2YXRlIHN0YXRpYyBjYWNoZVRleHQgPSBcIntDQUNIRX1cIjtcbiAgcHJpdmF0ZSBzdGF0aWMgbm9DYWNoZVRleHQgPSBcIntOT0NBQ0hFfVwiO1xuICBwdWJsaWMgc3RhdGljIGdldCBFbmNvZGVQYXJhbWV0ZXJzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzZXR0aW5ncy53ZWJzZXJ2aWNlRW5jb2RlUGFyYW1ldGVycztcbiAgfVxuICBwdWJsaWMgc3RhdGljIHNldCBFbmNvZGVQYXJhbWV0ZXJzKHZhbDogYm9vbGVhbikge1xuICAgIHNldHRpbmdzLndlYnNlcnZpY2VFbmNvZGVQYXJhbWV0ZXJzID0gdmFsO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgY2xlYXJDYWNoZSgpIHtcbiAgICBDaG9pY2VzUmVzdGZ1bC5pdGVtc1Jlc3VsdCA9IHt9O1xuICAgIENob2ljZXNSZXN0ZnVsLnNlbmRpbmdTYW1lUmVxdWVzdHMgPSB7fTtcbiAgfVxuICBwcml2YXRlIHN0YXRpYyBpdGVtc1Jlc3VsdDogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gIHByaXZhdGUgc3RhdGljIHNlbmRpbmdTYW1lUmVxdWVzdHM6IHtcbiAgICBbaW5kZXg6IHN0cmluZ106IEFycmF5PENob2ljZXNSZXN0ZnVsPixcbiAgfSA9IHt9O1xuICBwcml2YXRlIHN0YXRpYyBhZGRTYW1lUmVxdWVzdChvYmo6IENob2ljZXNSZXN0ZnVsKTogYm9vbGVhbiB7XG4gICAgaWYgKCFvYmouaXNVc2luZ0NhY2hlKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIGhhc2ggPSBvYmoub2JqSGFzaDtcbiAgICB2YXIgcmVzID0gQ2hvaWNlc1Jlc3RmdWwuc2VuZGluZ1NhbWVSZXF1ZXN0c1toYXNoXTtcbiAgICBpZiAoIXJlcykge1xuICAgICAgQ2hvaWNlc1Jlc3RmdWwuc2VuZGluZ1NhbWVSZXF1ZXN0c1tvYmoub2JqSGFzaF0gPSBbXTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmVzLnB1c2gob2JqKTtcbiAgICBvYmouaXNSdW5uaW5nVmFsdWUgPSB0cnVlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByaXZhdGUgc3RhdGljIHVucmVnaXN0ZXJTYW1lUmVxdWVzdHMob2JqOiBDaG9pY2VzUmVzdGZ1bCwgaXRlbXM6IGFueSkge1xuICAgIGlmICghb2JqLmlzVXNpbmdDYWNoZSkgcmV0dXJuO1xuICAgIHZhciByZXMgPSBDaG9pY2VzUmVzdGZ1bC5zZW5kaW5nU2FtZVJlcXVlc3RzW29iai5vYmpIYXNoXTtcbiAgICBkZWxldGUgQ2hvaWNlc1Jlc3RmdWwuc2VuZGluZ1NhbWVSZXF1ZXN0c1tvYmoub2JqSGFzaF07XG4gICAgaWYgKCFyZXMpIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzW2ldLmlzUnVubmluZ1ZhbHVlID0gZmFsc2U7XG4gICAgICBpZiAoISFyZXNbaV0uZ2V0UmVzdWx0Q2FsbGJhY2spIHtcbiAgICAgICAgcmVzW2ldLmdldFJlc3VsdENhbGxiYWNrKGl0ZW1zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIHN0YXRpYyBvbkJlZm9yZVNlbmRSZXF1ZXN0OiAoXG4gICAgc2VuZGVyOiBDaG9pY2VzUmVzdGZ1bCxcbiAgICBvcHRpb25zOiB7IHJlcXVlc3Q6IFhNTEh0dHBSZXF1ZXN0IH1cbiAgKSA9PiB2b2lkO1xuICBwcml2YXRlIHN0YXRpYyBnZXRDYWNoZWRJdGVtc1Jlc3VsdChvYmo6IENob2ljZXNSZXN0ZnVsKTogYm9vbGVhbiB7XG4gICAgdmFyIGhhc2ggPSBvYmoub2JqSGFzaDtcbiAgICB2YXIgcmVzID0gQ2hvaWNlc1Jlc3RmdWwuaXRlbXNSZXN1bHRbaGFzaF07XG4gICAgaWYgKCFyZXMpIHJldHVybiBmYWxzZTtcbiAgICBpZiAob2JqLmdldFJlc3VsdENhbGxiYWNrKSB7XG4gICAgICBvYmouZ2V0UmVzdWx0Q2FsbGJhY2socmVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSBsYXN0T2JqSGFzaDogc3RyaW5nID0gXCJcIjtcbiAgcHJpdmF0ZSBpc1J1bm5pbmdWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgcHJvY2Vzc2VkVXJsOiBzdHJpbmcgPSBcIlwiO1xuICBwcm90ZWN0ZWQgcHJvY2Vzc2VkUGF0aDogc3RyaW5nID0gXCJcIjtcbiAgcHJpdmF0ZSBpc1VzaW5nQ2FjaGVGcm9tVXJsOiBib29sZWFuID0gdW5kZWZpbmVkO1xuICBwdWJsaWMgb25Qcm9jZXNzZWRVcmxDYWxsYmFjazogKHVybDogc3RyaW5nLCBwYXRoOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHB1YmxpYyBnZXRSZXN1bHRDYWxsYmFjazogKGl0ZW1zOiBBcnJheTxJdGVtVmFsdWU+KSA9PiB2b2lkO1xuICBwdWJsaWMgYmVmb3JlU2VuZFJlcXVlc3RDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgcHVibGljIHVwZGF0ZVJlc3VsdENhbGxiYWNrOiAoXG4gICAgaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4sXG4gICAgc2VydmVyUmVzdWx0OiBhbnlcbiAgKSA9PiBBcnJheTxJdGVtVmFsdWU+O1xuICBwdWJsaWMgZ2V0SXRlbVZhbHVlQ2FsbGJhY2s6IChpdGVtOiBhbnkpID0+IGFueTtcbiAgcHVibGljIGVycm9yOiBTdXJ2ZXlFcnJvciA9IG51bGw7XG4gIHB1YmxpYyBvd25lcjogSVF1ZXN0aW9uO1xuICBwdWJsaWMgY3JlYXRlSXRlbVZhbHVlID0gKHZhbHVlOiBhbnkpOiBJdGVtVmFsdWUgPT4ge1xuICAgIHJldHVybiBuZXcgSXRlbVZhbHVlKHZhbHVlKTtcbiAgfTtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuICBwdWJsaWMgZ2V0U3VydmV5KGxpdmU6IGJvb2xlYW4gPSBmYWxzZSk6IElTdXJ2ZXkge1xuICAgIHJldHVybiAhIXRoaXMub3duZXIgPyB0aGlzLm93bmVyLnN1cnZleSA6IG51bGw7XG4gIH1cbiAgcHVibGljIHJ1bih0ZXh0UHJvY2Vzc29yOiBJVGV4dFByb2Nlc3NvciA9IG51bGwpIHtcbiAgICBpZiAoIXRoaXMudXJsIHx8ICF0aGlzLmdldFJlc3VsdENhbGxiYWNrKSByZXR1cm47XG4gICAgdGhpcy5wcm9jZXNzZWRUZXh0KHRleHRQcm9jZXNzb3IpO1xuICAgIGlmICghdGhpcy5wcm9jZXNzZWRVcmwpIHtcbiAgICAgIHRoaXMuZG9FbXB0eVJlc3VsdENhbGxiYWNrKHt9KTtcbiAgICAgIHRoaXMubGFzdE9iakhhc2ggPSB0aGlzLm9iakhhc2g7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmxhc3RPYmpIYXNoID09PSB0aGlzLm9iakhhc2gpIHJldHVybjtcbiAgICB0aGlzLmxhc3RPYmpIYXNoID0gdGhpcy5vYmpIYXNoO1xuICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuICAgIGlmICh0aGlzLnVzZUNoYW5nZWRJdGVtc1Jlc3VsdHMoKSkgcmV0dXJuO1xuICAgIGlmIChDaG9pY2VzUmVzdGZ1bC5hZGRTYW1lUmVxdWVzdCh0aGlzKSkgcmV0dXJuO1xuICAgIHRoaXMuc2VuZFJlcXVlc3QoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzVXNpbmdDYWNoZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5pc1VzaW5nQ2FjaGVGcm9tVXJsID09PSB0cnVlKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAodGhpcy5pc1VzaW5nQ2FjaGVGcm9tVXJsID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBzZXR0aW5ncy51c2VDYWNoaW5nRm9yQ2hvaWNlc1Jlc3RmdWw7XG4gIH1cbiAgcHVibGljIGdldCBpc1J1bm5pbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXNSdW5uaW5nKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldElzUnVubmluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1J1bm5pbmdWYWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNXYWl0aW5nRm9yUGFyYW1ldGVycygpIHtcbiAgICByZXR1cm4gdGhpcy51cmwgJiYgIXRoaXMucHJvY2Vzc2VkVXJsO1xuICB9XG4gIHByb3RlY3RlZCB1c2VDaGFuZ2VkSXRlbXNSZXN1bHRzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBDaG9pY2VzUmVzdGZ1bC5nZXRDYWNoZWRJdGVtc1Jlc3VsdCh0aGlzKTtcbiAgfVxuICBwcml2YXRlIGRvRW1wdHlSZXN1bHRDYWxsYmFjayhzZXJ2ZXJSZXN1bHQ6IGFueSkge1xuICAgIHZhciBpdGVtczogQXJyYXk8YW55PiA9IFtdO1xuICAgIGlmICh0aGlzLnVwZGF0ZVJlc3VsdENhbGxiYWNrKSB7XG4gICAgICBpdGVtcyA9IHRoaXMudXBkYXRlUmVzdWx0Q2FsbGJhY2soaXRlbXMsIHNlcnZlclJlc3VsdCk7XG4gICAgfVxuICAgIHRoaXMuZ2V0UmVzdWx0Q2FsbGJhY2soaXRlbXMpO1xuICB9XG4gIHByaXZhdGUgcHJvY2Vzc2VkVGV4dCh0ZXh0UHJvY2Vzc29yOiBJVGV4dFByb2Nlc3Nvcikge1xuICAgIHZhciB1cmxUZXh0ID0gdGhpcy51cmw7XG4gICAgaWYgKCEhdXJsVGV4dCkge1xuICAgICAgdXJsVGV4dCA9IHVybFRleHRcbiAgICAgICAgLnJlcGxhY2UoQ2hvaWNlc1Jlc3RmdWwuY2FjaGVUZXh0LCBcIlwiKVxuICAgICAgICAucmVwbGFjZShDaG9pY2VzUmVzdGZ1bC5ub0NhY2hlVGV4dCwgXCJcIik7XG4gICAgfVxuICAgIGlmICh0ZXh0UHJvY2Vzc29yKSB7XG4gICAgICB2YXIgcFVybCA9IHRleHRQcm9jZXNzb3IucHJvY2Vzc1RleHRFeChcbiAgICAgICAgdXJsVGV4dCxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIHNldHRpbmdzLndlYnNlcnZpY2VFbmNvZGVQYXJhbWV0ZXJzXG4gICAgICApO1xuICAgICAgdmFyIHBQYXRoID0gdGV4dFByb2Nlc3Nvci5wcm9jZXNzVGV4dEV4KFxuICAgICAgICB0aGlzLnBhdGgsXG4gICAgICAgIGZhbHNlLFxuICAgICAgICBzZXR0aW5ncy53ZWJzZXJ2aWNlRW5jb2RlUGFyYW1ldGVyc1xuICAgICAgKTtcbiAgICAgIGlmICghcFVybC5oYXNBbGxWYWx1ZXNPbkxhc3RSdW4gfHwgIXBQYXRoLmhhc0FsbFZhbHVlc09uTGFzdFJ1bikge1xuICAgICAgICB0aGlzLnByb2Nlc3NlZFVybCA9IFwiXCI7XG4gICAgICAgIHRoaXMucHJvY2Vzc2VkUGF0aCA9IFwiXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnByb2Nlc3NlZFVybCA9IHBVcmwudGV4dDtcbiAgICAgICAgdGhpcy5wcm9jZXNzZWRQYXRoID0gcFBhdGgudGV4dDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9jZXNzZWRVcmwgPSB1cmxUZXh0O1xuICAgICAgdGhpcy5wcm9jZXNzZWRQYXRoID0gdGhpcy5wYXRoO1xuICAgIH1cbiAgICBpZiAodGhpcy5vblByb2Nlc3NlZFVybENhbGxiYWNrKSB7XG4gICAgICB0aGlzLm9uUHJvY2Vzc2VkVXJsQ2FsbGJhY2sodGhpcy5wcm9jZXNzZWRVcmwsIHRoaXMucHJvY2Vzc2VkUGF0aCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBwYXJzZVJlc3BvbnNlKHJlc3BvbnNlOiBhbnkpIHtcbiAgICBsZXQgcGFyc2VkUmVzcG9uc2U7XG4gICAgaWYgKFxuICAgICAgISFyZXNwb25zZSAmJlxuICAgICAgdHlwZW9mIHJlc3BvbnNlLmluZGV4T2YgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgcmVzcG9uc2UuaW5kZXhPZihcIjxcIikgPT09IDBcbiAgICApIHtcbiAgICAgIHZhciBwYXJzZXIgPSBuZXcgWG1sUGFyc2VyKCk7XG4gICAgICBwYXJzZWRSZXNwb25zZSA9IHBhcnNlci5wYXJzZVhtbFN0cmluZyhyZXNwb25zZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHBhcnNlZFJlc3BvbnNlID0gSlNPTi5wYXJzZShyZXNwb25zZSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcGFyc2VkUmVzcG9uc2UgPSAocmVzcG9uc2UgfHwgXCJcIilcbiAgICAgICAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAgICAgICAubWFwKChzOiBhbnkpID0+IHMudHJpbShcIiBcIikpXG4gICAgICAgICAgLmZpbHRlcigoczogYW55KSA9PiAhIXMpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGFyc2VkUmVzcG9uc2U7XG4gIH1cbiAgcHJvdGVjdGVkIHNlbmRSZXF1ZXN0KCkge1xuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB4aHIub3BlbihcIkdFVFwiLCB0aGlzLnByb2Nlc3NlZFVybCk7XG4gICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIik7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBsb2FkaW5nT2JqSGFzaCA9IHRoaXMub2JqSGFzaDtcbiAgICB4aHIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLmJlZm9yZUxvYWRSZXF1ZXN0KCk7XG4gICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgIHNlbGYub25Mb2FkKHNlbGYucGFyc2VSZXNwb25zZSh4aHIucmVzcG9uc2UpLCBsb2FkaW5nT2JqSGFzaCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxmLm9uRXJyb3IoeGhyLnN0YXR1c1RleHQsIHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgfVxuICAgIH07XG4gICAgdmFyIG9wdGlvbnMgPSB7IHJlcXVlc3Q6IHhociB9O1xuICAgIGlmICghIUNob2ljZXNSZXN0ZnVsLm9uQmVmb3JlU2VuZFJlcXVlc3QpIHtcbiAgICAgIENob2ljZXNSZXN0ZnVsLm9uQmVmb3JlU2VuZFJlcXVlc3QodGhpcywgb3B0aW9ucyk7XG4gICAgfVxuICAgIHRoaXMuYmVmb3JlU2VuZFJlcXVlc3QoKTtcbiAgICBvcHRpb25zLnJlcXVlc3Quc2VuZCgpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiY2hvaWNlc0J5VXJsXCI7XG4gIH1cbiAgcHVibGljIGdldCBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAhdGhpcy51cmwgJiZcbiAgICAgICF0aGlzLnBhdGggJiZcbiAgICAgICF0aGlzLnZhbHVlTmFtZSAmJlxuICAgICAgIXRoaXMudGl0bGVOYW1lICYmXG4gICAgICAhdGhpcy5pbWFnZUxpbmtOYW1lXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0Q3VzdG9tUHJvcGVydGllc05hbWVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5nZXRDdXN0b21Qcm9wZXJ0aWVzKCk7XG4gICAgdmFyIHJlcyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXMucHVzaCh0aGlzLmdldEN1c3RvbVByb3BlcnR5TmFtZShwcm9wZXJ0aWVzW2ldLm5hbWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGdldEN1c3RvbVByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHByb3BlcnR5TmFtZSArIFwiTmFtZVwiO1xuICB9XG4gIHByaXZhdGUgZ2V0Q3VzdG9tUHJvcGVydGllcygpOiBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+IHtcbiAgICB2YXIgcHJvcGVydGllcyA9IFNlcmlhbGl6ZXIuZ2V0UHJvcGVydGllcyh0aGlzLml0ZW1WYWx1ZVR5cGUpO1xuICAgIHZhciByZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgcHJvcGVydGllc1tpXS5uYW1lID09PSBcInZhbHVlXCIgfHxcbiAgICAgICAgcHJvcGVydGllc1tpXS5uYW1lID09PSBcInRleHRcIiB8fFxuICAgICAgICBwcm9wZXJ0aWVzW2ldLm5hbWUgPT09IFwidmlzaWJsZUlmXCIgfHxcbiAgICAgICAgcHJvcGVydGllc1tpXS5uYW1lID09PSBcImVuYWJsZUlmXCJcbiAgICAgIClcbiAgICAgICAgY29udGludWU7XG4gICAgICByZXMucHVzaChwcm9wZXJ0aWVzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgc2V0RGF0YShqc29uOiBhbnkpIHtcbiAgICB0aGlzLmNsZWFyKCk7XG4gICAgaWYgKGpzb24udXJsKSB0aGlzLnVybCA9IGpzb24udXJsO1xuICAgIGlmIChqc29uLnBhdGgpIHRoaXMucGF0aCA9IGpzb24ucGF0aDtcbiAgICBpZiAoanNvbi52YWx1ZU5hbWUpIHRoaXMudmFsdWVOYW1lID0ganNvbi52YWx1ZU5hbWU7XG4gICAgaWYgKGpzb24udGl0bGVOYW1lKSB0aGlzLnRpdGxlTmFtZSA9IGpzb24udGl0bGVOYW1lO1xuICAgIGlmIChqc29uLmltYWdlTGlua05hbWUpIHRoaXMuaW1hZ2VMaW5rTmFtZSA9IGpzb24uaW1hZ2VMaW5rTmFtZTtcbiAgICBpZiAoanNvbi5hbGxvd0VtcHR5UmVzcG9uc2UgIT09IHVuZGVmaW5lZClcbiAgICAgIHRoaXMuYWxsb3dFbXB0eVJlc3BvbnNlID0ganNvbi5hbGxvd0VtcHR5UmVzcG9uc2U7XG4gICAgaWYgKGpzb24uYXR0YWNoT3JpZ2luYWxJdGVtcyAhPT0gdW5kZWZpbmVkKVxuICAgICAgdGhpcy5hdHRhY2hPcmlnaW5hbEl0ZW1zID0ganNvbi5hdHRhY2hPcmlnaW5hbEl0ZW1zO1xuICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5nZXRDdXN0b21Qcm9wZXJ0aWVzTmFtZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChqc29uW3Byb3BlcnRpZXNbaV1dKSAoPGFueT50aGlzKVtwcm9wZXJ0aWVzW2ldXSA9IGpzb25bcHJvcGVydGllc1tpXV07XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXREYXRhKCk6IGFueSB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSkgcmV0dXJuIG51bGw7XG4gICAgdmFyIHJlczogYW55ID0ge307XG4gICAgaWYgKHRoaXMudXJsKSByZXNbXCJ1cmxcIl0gPSB0aGlzLnVybDtcbiAgICBpZiAodGhpcy5wYXRoKSByZXNbXCJwYXRoXCJdID0gdGhpcy5wYXRoO1xuICAgIGlmICh0aGlzLnZhbHVlTmFtZSkgcmVzW1widmFsdWVOYW1lXCJdID0gdGhpcy52YWx1ZU5hbWU7XG4gICAgaWYgKHRoaXMudGl0bGVOYW1lKSByZXNbXCJ0aXRsZU5hbWVcIl0gPSB0aGlzLnRpdGxlTmFtZTtcbiAgICBpZiAodGhpcy5pbWFnZUxpbmtOYW1lKSByZXNbXCJpbWFnZUxpbmtOYW1lXCJdID0gdGhpcy5pbWFnZUxpbmtOYW1lO1xuICAgIGlmICh0aGlzLmFsbG93RW1wdHlSZXNwb25zZSlcbiAgICAgIHJlc1tcImFsbG93RW1wdHlSZXNwb25zZVwiXSA9IHRoaXMuYWxsb3dFbXB0eVJlc3BvbnNlO1xuICAgIGlmICh0aGlzLmF0dGFjaE9yaWdpbmFsSXRlbXMpXG4gICAgICByZXNbXCJhdHRhY2hPcmlnaW5hbEl0ZW1zXCJdID0gdGhpcy5hdHRhY2hPcmlnaW5hbEl0ZW1zO1xuICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5nZXRDdXN0b21Qcm9wZXJ0aWVzTmFtZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICgoPGFueT50aGlzKVtwcm9wZXJ0aWVzW2ldXSlcbiAgICAgICAgcmVzW3Byb3BlcnRpZXNbaV1dID0gKDxhbnk+dGhpcylbcHJvcGVydGllc1tpXV07XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIGxpbmsgdG8gYSB3ZWIgc2VydmljZS4gWW91IGNhbiB1c2UgdGV4dCBwcmVwcm9jZXNzaW5nIGhlcmUuXG4gICAqIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHVybDogX2h0dHBzOi8vc3VydmV5anMuaW8vYXBpL0NvdW50cmllc0V4YW1wbGU/cmVnaW9uPXtyZWdpb259XyBpcyBjaGFuZ2VkIGJhc2VkIG9uIHRoZSBfcmVnaW9uXyBxdWVzdGlvbidzIHZhbHVlLlxuICAgKiBTdXJ2ZXlKUyBhdXRvbWF0aWNhbGx5IGdldHMgZGF0YSBmcm9tIHRoZSB3ZWIgc2VydmljZSB3aGVuIHRoZSB2YWx1ZSBvZiB0aGUgX3JlZ2lvbl8gcXVlc3Rpb24gY2hhbmdlcy5cbiAgICogQHNlZSBwYXRoXG4gICAqIEBzZWUgdmFsdWVOYW1lXG4gICAqIEBzZWUgdGl0bGVOYW1lXG4gICAqIEBzZWUgW0V4YW1wbGU6IFJFU1RmdWwgRHJvcGRvd25dKGh0dHBzOi8vc3VydmV5anMuaW8vRXhhbXBsZXMvTGlicmFyeS8/aWQ9cXVlc3Rpb250eXBlLWRyb3Bkb3ducmVzdGZ1bGwpXG4gICAqIEBzZWUgW0RvY3M6IEZpbGwgQ2hvaWNlcyBmcm9tIGEgUkVTVGZ1bCBTZXJ2aWNlXShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeS8/aWQ9TGlicmFyeU92ZXJ2aWV3I2ZpbGwtdGhlLWNob2ljZXMtZnJvbS1hLXJlc3RmdWwtc2VydmljZSlcbiAgICovXG4gIHB1YmxpYyBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInVybFwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHVybCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInVybFwiLCB2YWwpO1xuICAgIHRoaXMuaXNVc2luZ0NhY2hlRnJvbVVybCA9IHVuZGVmaW5lZDtcbiAgICBpZiAoIXZhbCkgcmV0dXJuO1xuICAgIGlmICh2YWwuaW5kZXhPZihDaG9pY2VzUmVzdGZ1bC5jYWNoZVRleHQpID4gLTEpIHtcbiAgICAgIHRoaXMuaXNVc2luZ0NhY2hlRnJvbVVybCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh2YWwuaW5kZXhPZihDaG9pY2VzUmVzdGZ1bC5ub0NhY2hlVGV4dCkgPiAtMSkge1xuICAgICAgICB0aGlzLmlzVXNpbmdDYWNoZUZyb21VcmwgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5LCBpZiBhIHdlYiBzZXJ2aWNlIHJldHVybnMgYSBsb3Qgb2YgaW5mb3JtYXRpb24gYW5kIHlvdSBuZWVkIG9ubHkgYSBwYXJ0IG9mIGl0LlxuICAgKiBGb3IgZXhhbXBsZSwgYSB3ZWIgc2VydmljZSByZXR1cm5zIGEgbGlzdCBvZiBjb3VudHJpZXMgYW5kIGEgbGlzdCBvZiBjYXBpdGFscy5cbiAgICogSWYgeW91IG5lZWQgYSBsaXN0IG9mIGNvdW50cmllcywgc2V0IGEgY29ycmVjdCBwYXRoIGZyb20gd2hpY2ggU3VydmV5SlMgb2J0YWlucyB0aGUgZGF0YSwgbGlrZTogX0RhdGFMaXN0MVxcRGF0YUxpc3QyX1xuICAgKiBAc2VlIHVybFxuICAgKiBAc2VlIHZhbHVlTmFtZVxuICAgKiBAc2VlIHRpdGxlTmFtZVxuICAgKiBAc2VlIFtFeGFtcGxlOiBSRVNUZnVsIERyb3Bkb3duXShodHRwczovL3N1cnZleWpzLmlvL0V4YW1wbGVzL0xpYnJhcnkvP2lkPXF1ZXN0aW9udHlwZS1kcm9wZG93bnJlc3RmdWxsKVxuICAgKiBAc2VlIFtEb2NzOiBGaWxsIENob2ljZXMgZnJvbSBhIFJFU1RmdWwgU2VydmljZV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnkvP2lkPUxpYnJhcnlPdmVydmlldyNmaWxsLXRoZS1jaG9pY2VzLWZyb20tYS1yZXN0ZnVsLXNlcnZpY2UpXG4gICAqL1xuXG4gIHB1YmxpYyBnZXQgcGF0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJwYXRoXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcGF0aCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInBhdGhcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSBuYW1lIG9mIGEgcHJvcGVydHkgKGluIHRoZSBvYnRhaW5lZCBkYXRhIG9iamVjdCkgdG8gd2hpY2ggU3VydmV5SlMgYmluZHMgdG8gcHJvdmlkZSB2YWx1ZXMgZm9yIGNob2ljZSBpdGVtcy5cbiAgICogQHNlZSB1cmxcbiAgICogQHNlZSBwYXRoXG4gICAqIEBzZWUgdGl0bGVOYW1lXG4gICAqIEBzZWUgW0V4YW1wbGU6IFJFU1RmdWwgRHJvcGRvd25dKGh0dHBzOi8vc3VydmV5anMuaW8vRXhhbXBsZXMvTGlicmFyeS8/aWQ9cXVlc3Rpb250eXBlLWRyb3Bkb3ducmVzdGZ1bGwpXG4gICAqIEBzZWUgW0RvY3M6IEZpbGwgQ2hvaWNlcyBmcm9tIGEgUkVTVGZ1bCBTZXJ2aWNlXShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeS8/aWQ9TGlicmFyeU92ZXJ2aWV3I2ZpbGwtdGhlLWNob2ljZXMtZnJvbS1hLXJlc3RmdWwtc2VydmljZSlcbiAgICovXG5cbiAgcHVibGljIGdldCB2YWx1ZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidmFsdWVOYW1lXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdmFsdWVOYW1lKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmFsdWVOYW1lXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgbmFtZSBvZiBhIHByb3BlcnR5IChpbiB0aGUgb2J0YWluZWQgZGF0YSBvYmplY3QpIHRvIHdoaWNoIFN1cnZleUpTIGJpbmRzIHRvIHByb3ZpZGUgZGlzcGxheSB0ZXh0cyBmb3IgY2hvaWNlIGl0ZW1zLlxuICAgKiBAc2VlIHVybFxuICAgKiBAc2VlIHBhdGhcbiAgICogQHNlZSB2YWx1ZWVOYW1lXG4gICAqIEBzZWUgW0V4YW1wbGU6IFJFU1RmdWwgRHJvcGRvd25dKGh0dHBzOi8vc3VydmV5anMuaW8vRXhhbXBsZXMvTGlicmFyeS8/aWQ9cXVlc3Rpb250eXBlLWRyb3Bkb3ducmVzdGZ1bGwpXG4gICAqIEBzZWUgW0RvY3M6IEZpbGwgQ2hvaWNlcyBmcm9tIGEgUkVTVGZ1bCBTZXJ2aWNlXShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeS8/aWQ9TGlicmFyeU92ZXJ2aWV3I2ZpbGwtdGhlLWNob2ljZXMtZnJvbS1hLXJlc3RmdWwtc2VydmljZSlcbiAgICovXG5cbiAgcHVibGljIGdldCB0aXRsZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidGl0bGVOYW1lXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdGl0bGVOYW1lKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidGl0bGVOYW1lXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBpbWFnZUxpbmtOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImltYWdlTGlua05hbWVcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBpbWFnZUxpbmtOYW1lKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VMaW5rTmFtZVwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgYWxsb3dFbXB0eVJlc3BvbnNlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhbGxvd0VtcHR5UmVzcG9uc2VcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgYWxsb3dFbXB0eVJlc3BvbnNlKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImFsbG93RW1wdHlSZXNwb25zZVwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgYXR0YWNoT3JpZ2luYWxJdGVtcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYXR0YWNoT3JpZ2luYWxJdGVtc1wiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBhdHRhY2hPcmlnaW5hbEl0ZW1zKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImF0dGFjaE9yaWdpbmFsSXRlbXNcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGl0ZW1WYWx1ZVR5cGUoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMub3duZXIpIHJldHVybiBcIml0ZW12YWx1ZVwiO1xuICAgIHZhciBwcm9wID0gU2VyaWFsaXplci5maW5kUHJvcGVydHkodGhpcy5vd25lci5nZXRUeXBlKCksIFwiY2hvaWNlc1wiKTtcbiAgICBpZiAoIXByb3ApIHJldHVybiBcIml0ZW12YWx1ZVwiO1xuICAgIGlmIChwcm9wLnR5cGUgPT0gXCJpdGVtdmFsdWVbXVwiKSByZXR1cm4gXCJpdGVtdmFsdWVcIjtcbiAgICByZXR1cm4gcHJvcC50eXBlO1xuICB9XG4gIHB1YmxpYyBjbGVhcigpIHtcbiAgICB0aGlzLnVybCA9IFwiXCI7XG4gICAgdGhpcy5wYXRoID0gXCJcIjtcbiAgICB0aGlzLnZhbHVlTmFtZSA9IFwiXCI7XG4gICAgdGhpcy50aXRsZU5hbWUgPSBcIlwiO1xuICAgIHRoaXMuaW1hZ2VMaW5rTmFtZSA9IFwiXCI7XG4gICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmdldEN1c3RvbVByb3BlcnRpZXNOYW1lcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCg8YW55PnRoaXMpW3Byb3BlcnRpZXNbaV1dKSAoPGFueT50aGlzKVtwcm9wZXJ0aWVzW2ldXSA9IFwiXCI7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBiZWZvcmVTZW5kUmVxdWVzdCgpIHtcbiAgICB0aGlzLmlzUnVubmluZ1ZhbHVlID0gdHJ1ZTtcbiAgICBpZiAoISF0aGlzLmJlZm9yZVNlbmRSZXF1ZXN0Q2FsbGJhY2spIHtcbiAgICAgIHRoaXMuYmVmb3JlU2VuZFJlcXVlc3RDYWxsYmFjaygpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgYmVmb3JlTG9hZFJlcXVlc3QoKSB7XG4gICAgdGhpcy5pc1J1bm5pbmdWYWx1ZSA9IGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCBvbkxvYWQocmVzdWx0OiBhbnksIGxvYWRpbmdPYmpIYXNoOiBzdHJpbmcgPSBudWxsKSB7XG4gICAgaWYgKCFsb2FkaW5nT2JqSGFzaCkge1xuICAgICAgbG9hZGluZ09iakhhc2ggPSB0aGlzLm9iakhhc2g7XG4gICAgfVxuICAgIHZhciBpdGVtcyA9IG5ldyBBcnJheTxJdGVtVmFsdWU+KCk7XG4gICAgdmFyIHVwZGF0ZWRSZXN1bHQgPSB0aGlzLmdldFJlc3VsdEFmdGVyUGF0aChyZXN1bHQpO1xuICAgIGlmICh1cGRhdGVkUmVzdWx0ICYmIHVwZGF0ZWRSZXN1bHRbXCJsZW5ndGhcIl0pIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdXBkYXRlZFJlc3VsdC5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgaXRlbVZhbHVlID0gdXBkYXRlZFJlc3VsdFtpXTtcbiAgICAgICAgaWYgKCFpdGVtVmFsdWUpIGNvbnRpbnVlO1xuICAgICAgICB2YXIgdmFsdWUgPSAhIXRoaXMuZ2V0SXRlbVZhbHVlQ2FsbGJhY2tcbiAgICAgICAgICA/IHRoaXMuZ2V0SXRlbVZhbHVlQ2FsbGJhY2soaXRlbVZhbHVlKVxuICAgICAgICAgIDogdGhpcy5nZXRWYWx1ZShpdGVtVmFsdWUpO1xuICAgICAgICB2YXIgaXRlbSA9IHRoaXMuY3JlYXRlSXRlbVZhbHVlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5zZXRUaXRsZShpdGVtLCBpdGVtVmFsdWUpO1xuICAgICAgICB0aGlzLnNldEN1c3RvbVByb3BlcnRpZXMoaXRlbSwgaXRlbVZhbHVlKTtcbiAgICAgICAgaWYgKHRoaXMuYXR0YWNoT3JpZ2luYWxJdGVtcykge1xuICAgICAgICAgIGl0ZW0ub3JpZ2luYWxJdGVtID0gaXRlbVZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpbWFnZUxpbmsgPSB0aGlzLmdldEltYWdlTGluayhpdGVtVmFsdWUpO1xuICAgICAgICBpZiAoISFpbWFnZUxpbmspIHtcbiAgICAgICAgICBpdGVtLmltYWdlTGluayA9IGltYWdlTGluaztcbiAgICAgICAgfVxuICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXRoaXMuYWxsb3dFbXB0eVJlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBuZXcgV2ViUmVxdWVzdEVtcHR5RXJyb3IobnVsbCwgdGhpcy5vd25lcik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnVwZGF0ZVJlc3VsdENhbGxiYWNrKSB7XG4gICAgICBpdGVtcyA9IHRoaXMudXBkYXRlUmVzdWx0Q2FsbGJhY2soaXRlbXMsIHJlc3VsdCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzVXNpbmdDYWNoZSkge1xuICAgICAgQ2hvaWNlc1Jlc3RmdWwuaXRlbXNSZXN1bHRbbG9hZGluZ09iakhhc2hdID0gaXRlbXM7XG4gICAgfVxuICAgIHRoaXMuY2FsbFJlc3VsdENhbGxiYWNrKGl0ZW1zLCBsb2FkaW5nT2JqSGFzaCk7XG4gICAgQ2hvaWNlc1Jlc3RmdWwudW5yZWdpc3RlclNhbWVSZXF1ZXN0cyh0aGlzLCBpdGVtcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGNhbGxSZXN1bHRDYWxsYmFjayhcbiAgICBpdGVtczogQXJyYXk8SXRlbVZhbHVlPixcbiAgICBsb2FkaW5nT2JqSGFzaDogc3RyaW5nXG4gICkge1xuICAgIGlmIChsb2FkaW5nT2JqSGFzaCAhPSB0aGlzLm9iakhhc2gpIHJldHVybjtcbiAgICB0aGlzLmdldFJlc3VsdENhbGxiYWNrKGl0ZW1zKTtcbiAgfVxuICBwcml2YXRlIHNldEN1c3RvbVByb3BlcnRpZXMoaXRlbTogSXRlbVZhbHVlLCBpdGVtVmFsdWU6IGFueSkge1xuICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5nZXRDdXN0b21Qcm9wZXJ0aWVzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcHJvcCA9IHByb3BlcnRpZXNbaV07XG4gICAgICB2YXIgdmFsID0gdGhpcy5nZXRWYWx1ZUNvcmUoXG4gICAgICAgIGl0ZW1WYWx1ZSxcbiAgICAgICAgdGhpcy5nZXRQcm9wZXJ0eUJpbmRpbmcocHJvcC5uYW1lKVxuICAgICAgKTtcbiAgICAgIGlmICghdGhpcy5pc1ZhbHVlRW1wdHkodmFsKSkge1xuICAgICAgICAoPGFueT5pdGVtKVtwcm9wLm5hbWVdID0gdmFsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldFByb3BlcnR5QmluZGluZyhwcm9wZXJ0eU5hbWU6IHN0cmluZykge1xuICAgIGlmICgoPGFueT50aGlzKVt0aGlzLmdldEN1c3RvbVByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpXSlcbiAgICAgIHJldHVybiAoPGFueT50aGlzKVt0aGlzLmdldEN1c3RvbVByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpXTtcbiAgICBpZiAoKDxhbnk+dGhpcylbcHJvcGVydHlOYW1lXSkgcmV0dXJuICg8YW55PnRoaXMpW3Byb3BlcnR5TmFtZV07XG4gICAgcmV0dXJuIHByb3BlcnR5TmFtZTtcbiAgfVxuICBwcml2YXRlIG9uRXJyb3Ioc3RhdHVzOiBzdHJpbmcsIHJlc3BvbnNlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmVycm9yID0gbmV3IFdlYlJlcXVlc3RFcnJvcihzdGF0dXMsIHJlc3BvbnNlLCB0aGlzLm93bmVyKTtcbiAgICB0aGlzLmRvRW1wdHlSZXN1bHRDYWxsYmFjayhyZXNwb25zZSk7XG4gICAgQ2hvaWNlc1Jlc3RmdWwudW5yZWdpc3RlclNhbWVSZXF1ZXN0cyh0aGlzLCBbXSk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRSZXN1bHRBZnRlclBhdGgocmVzdWx0OiBhbnkpIHtcbiAgICBpZiAoIXJlc3VsdCkgcmV0dXJuIHJlc3VsdDtcbiAgICBpZiAoIXRoaXMucHJvY2Vzc2VkUGF0aCkgcmV0dXJuIHJlc3VsdDtcbiAgICB2YXIgcGF0aGVzID0gdGhpcy5nZXRQYXRoZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGhlcy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0W3BhdGhlc1tpXV07XG4gICAgICBpZiAoIXJlc3VsdCkgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHJpdmF0ZSBnZXRQYXRoZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIHBhdGhlcyA9IFtdO1xuICAgIGlmICh0aGlzLnByb2Nlc3NlZFBhdGguaW5kZXhPZihcIjtcIikgPiAtMSkge1xuICAgICAgcGF0aGVzID0gdGhpcy5wYXRoLnNwbGl0KFwiO1wiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGF0aGVzID0gdGhpcy5wcm9jZXNzZWRQYXRoLnNwbGl0KFwiLFwiKTtcbiAgICB9XG4gICAgaWYgKHBhdGhlcy5sZW5ndGggPT0gMCkgcGF0aGVzLnB1c2godGhpcy5wcm9jZXNzZWRQYXRoKTtcbiAgICByZXR1cm4gcGF0aGVzO1xuICB9XG4gIHByaXZhdGUgZ2V0VmFsdWUoaXRlbTogYW55KTogYW55IHtcbiAgICBpZiAoIWl0ZW0pIHJldHVybiBudWxsO1xuICAgIGlmICh0aGlzLnZhbHVlTmFtZSkgcmV0dXJuIHRoaXMuZ2V0VmFsdWVDb3JlKGl0ZW0sIHRoaXMudmFsdWVOYW1lKTtcbiAgICBpZiAoIShpdGVtIGluc3RhbmNlb2YgT2JqZWN0KSkgcmV0dXJuIGl0ZW07XG4gICAgdmFyIGxlbiA9IE9iamVjdC5rZXlzKGl0ZW0pLmxlbmd0aDtcbiAgICBpZiAobGVuIDwgMSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGl0ZW1bT2JqZWN0LmtleXMoaXRlbSlbMF1dO1xuICB9XG4gIHByaXZhdGUgc2V0VGl0bGUoaXRlbTogSXRlbVZhbHVlLCBpdGVtVmFsdWU6IGFueSk6IGFueSB7XG4gICAgdmFyIHRpdGxlID0gdGhpcy50aXRsZU5hbWUgPyB0aGlzLnRpdGxlTmFtZSA6IFwidGl0bGVcIjtcbiAgICB2YXIgdmFsID0gdGhpcy5nZXRWYWx1ZUNvcmUoaXRlbVZhbHVlLCB0aXRsZSk7XG4gICAgaWYgKCF2YWwpIHJldHVybjtcbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgaXRlbS50ZXh0ID0gdmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtLmxvY1RleHQuc2V0SnNvbih2YWwpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldEltYWdlTGluayhpdGVtOiBhbnkpOiBhbnkge1xuICAgIHZhciBpbWFnZUxpbmsgPSB0aGlzLmltYWdlTGlua05hbWUgPyB0aGlzLmltYWdlTGlua05hbWUgOiBcImltYWdlTGlua1wiO1xuICAgIHJldHVybiB0aGlzLmdldFZhbHVlQ29yZShpdGVtLCBpbWFnZUxpbmspO1xuICB9XG4gIHByaXZhdGUgZ2V0VmFsdWVDb3JlKGl0ZW06IGFueSwgcHJvcGVydHk6IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKCFpdGVtKSByZXR1cm4gbnVsbDtcbiAgICBpZiAocHJvcGVydHkuaW5kZXhPZihcIi5cIikgPCAwKSByZXR1cm4gaXRlbVtwcm9wZXJ0eV07XG4gICAgdmFyIHByb3BlcnRpZXMgPSBwcm9wZXJ0eS5zcGxpdChcIi5cIik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpdGVtID0gaXRlbVtwcm9wZXJ0aWVzW2ldXTtcbiAgICAgIGlmICghaXRlbSkgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBpdGVtO1xuICB9XG4gIHByaXZhdGUgZ2V0IG9iakhhc2goKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucHJvY2Vzc2VkVXJsICtcbiAgICAgIFwiO1wiICtcbiAgICAgIHRoaXMucHJvY2Vzc2VkUGF0aCArXG4gICAgICBcIjtcIiArXG4gICAgICB0aGlzLnZhbHVlTmFtZSArXG4gICAgICBcIjtcIiArXG4gICAgICB0aGlzLnRpdGxlTmFtZSArXG4gICAgICBcIjtcIiArXG4gICAgICB0aGlzLmltYWdlTGlua05hbWVcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogT2Jzb2xldGUsIHBsZWFzZSB1c2UgQ2hvaWNlc1Jlc3RmdWxcbiAqL1xuZXhwb3J0IGNsYXNzIENob2ljZXNSZXN0ZnVsbCBleHRlbmRzIENob2ljZXNSZXN0ZnVsIHtcbiAgcHVibGljIHN0YXRpYyBnZXQgRW5jb2RlUGFyYW1ldGVycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQ2hvaWNlc1Jlc3RmdWwuRW5jb2RlUGFyYW1ldGVycztcbiAgfVxuICBwdWJsaWMgc3RhdGljIHNldCBFbmNvZGVQYXJhbWV0ZXJzKHZhbDogYm9vbGVhbikge1xuICAgIENob2ljZXNSZXN0ZnVsLkVuY29kZVBhcmFtZXRlcnMgPSB2YWw7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBjbGVhckNhY2hlKCkge1xuICAgIENob2ljZXNSZXN0ZnVsLmNsZWFyQ2FjaGUoKTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGdldCBvbkJlZm9yZVNlbmRSZXF1ZXN0KCk6IChcbiAgICBzZW5kZXI6IENob2ljZXNSZXN0ZnVsLFxuICAgIG9wdGlvbnM6IHsgcmVxdWVzdDogWE1MSHR0cFJlcXVlc3QgfVxuICApID0+IHZvaWQge1xuICAgIHJldHVybiBDaG9pY2VzUmVzdGZ1bC5vbkJlZm9yZVNlbmRSZXF1ZXN0O1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgc2V0IG9uQmVmb3JlU2VuZFJlcXVlc3QoXG4gICAgdmFsOiAoc2VuZGVyOiBDaG9pY2VzUmVzdGZ1bCwgb3B0aW9uczogeyByZXF1ZXN0OiBYTUxIdHRwUmVxdWVzdCB9KSA9PiB2b2lkXG4gICkge1xuICAgIENob2ljZXNSZXN0ZnVsLm9uQmVmb3JlU2VuZFJlcXVlc3QgPSB2YWw7XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJjaG9pY2VzQnlVcmxcIixcbiAgW1xuICAgIFwidXJsXCIsXG4gICAgXCJwYXRoXCIsXG4gICAgXCJ2YWx1ZU5hbWVcIixcbiAgICBcInRpdGxlTmFtZVwiLFxuICAgIHtcbiAgICAgIG5hbWU6IFwiaW1hZ2VMaW5rTmFtZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gISFvYmogJiYgISFvYmoub3duZXIgJiYgb2JqLm93bmVyLmdldFR5cGUoKSA9PSBcImltYWdlcGlja2VyXCI7XG4gICAgICB9LFxuICAgIH0sXG4gICAgeyBuYW1lOiBcImFsbG93RW1wdHlSZXNwb25zZTpib29sZWFuXCIsIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImF0dGFjaE9yaWdpbmFsSXRlbXM6Ym9vbGVhblwiLCBkZWZhdWx0OiBmYWxzZSwgdmlzaWJsZTogZmFsc2UgfSxcbiAgXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBDaG9pY2VzUmVzdGZ1bCgpO1xuICB9XG4pO1xuIiwiaW1wb3J0IHsgSGVscGVycywgSGFzaFRhYmxlIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuXG5leHBvcnQgY2xhc3MgUHJvY2Vzc1ZhbHVlIHtcbiAgcHVibGljIHZhbHVlczogSGFzaFRhYmxlPGFueT4gPSBudWxsO1xuICBwdWJsaWMgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4gPSBudWxsO1xuICBjb25zdHJ1Y3RvcigpIHt9XG4gIHB1YmxpYyBnZXRGaXJzdE5hbWUodGV4dDogc3RyaW5nLCBvYmo6IGFueSA9IG51bGwpOiBzdHJpbmcge1xuICAgIGlmICghdGV4dCkgcmV0dXJuIHRleHQ7XG4gICAgdmFyIHJlcyA9IFwiXCI7XG4gICAgaWYgKCEhb2JqKSB7XG4gICAgICByZXMgPSB0aGlzLmdldEZpcnN0UHJvcGVydHlOYW1lKHRleHQsIG9iaik7XG4gICAgICBpZiAoISFyZXMpIHJldHVybiByZXM7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoID0gdGV4dFtpXTtcbiAgICAgIGlmIChjaCA9PSBcIi5cIiB8fCBjaCA9PSBcIltcIikgYnJlYWs7XG4gICAgICByZXMgKz0gY2g7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGhhc1ZhbHVlKHRleHQ6IHN0cmluZywgdmFsdWVzOiBIYXNoVGFibGU8YW55PiA9IG51bGwpOiBib29sZWFuIHtcbiAgICBpZiAoIXZhbHVlcykgdmFsdWVzID0gdGhpcy52YWx1ZXM7XG4gICAgdmFyIHJlcyA9IHRoaXMuZ2V0VmFsdWVDb3JlKHRleHQsIHZhbHVlcyk7XG4gICAgcmV0dXJuIHJlcy5oYXNWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0VmFsdWUodGV4dDogc3RyaW5nLCB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+ID0gbnVsbCk6IGFueSB7XG4gICAgaWYgKCF2YWx1ZXMpIHZhbHVlcyA9IHRoaXMudmFsdWVzO1xuICAgIHZhciByZXMgPSB0aGlzLmdldFZhbHVlQ29yZSh0ZXh0LCB2YWx1ZXMpO1xuICAgIHJldHVybiByZXMudmFsdWU7XG4gIH1cbiAgcHVibGljIHNldFZhbHVlKG9iajogYW55LCB0ZXh0OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICBpZiAoIXRleHQpIHJldHVybjtcbiAgICB2YXIgbm9uTmVzdGVkT2JqID0gdGhpcy5nZXROb25OZXN0ZWRPYmplY3Qob2JqLCB0ZXh0LCB0cnVlKTtcbiAgICBpZiAoIW5vbk5lc3RlZE9iaikgcmV0dXJuO1xuICAgIG9iaiA9IG5vbk5lc3RlZE9iai52YWx1ZTtcbiAgICB0ZXh0ID0gbm9uTmVzdGVkT2JqLnRleHQ7XG4gICAgaWYgKCEhb2JqICYmICEhdGV4dCkge1xuICAgICAgb2JqW3RleHRdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRWYWx1ZUluZm8odmFsdWVJbmZvOiBhbnkpIHtcbiAgICBpZiAoISF2YWx1ZUluZm8ucGF0aCkge1xuICAgICAgdmFsdWVJbmZvLnZhbHVlID0gdGhpcy5nZXRWYWx1ZUZyb21QYXRoKHZhbHVlSW5mby5wYXRoLCB0aGlzLnZhbHVlcyk7XG4gICAgICB2YWx1ZUluZm8uaGFzVmFsdWUgPVxuICAgICAgICB2YWx1ZUluZm8udmFsdWUgIT09IG51bGwgJiYgIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHZhbHVlSW5mby52YWx1ZSk7XG4gICAgICBpZiAoXG4gICAgICAgICF2YWx1ZUluZm8uaGFzVmFsdWUgJiZcbiAgICAgICAgdmFsdWVJbmZvLnBhdGgubGVuZ3RoID4gMSAmJlxuICAgICAgICB2YWx1ZUluZm8ucGF0aFt2YWx1ZUluZm8ucGF0aC5sZW5ndGggLSAxXSA9PSBcImxlbmd0aFwiXG4gICAgICApIHtcbiAgICAgICAgdmFsdWVJbmZvLmhhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdmFsdWVJbmZvLnZhbHVlID0gMDtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHJlcyA9IHRoaXMuZ2V0VmFsdWVDb3JlKHZhbHVlSW5mby5uYW1lLCB0aGlzLnZhbHVlcyk7XG4gICAgdmFsdWVJbmZvLnZhbHVlID0gcmVzLnZhbHVlO1xuICAgIHZhbHVlSW5mby5oYXNWYWx1ZSA9IHJlcy5oYXNWYWx1ZTtcbiAgICB2YWx1ZUluZm8ucGF0aCA9IHJlcy5oYXNWYWx1ZSA/IHJlcy5wYXRoIDogbnVsbDtcbiAgfVxuICBwcml2YXRlIGdldFZhbHVlRnJvbVBhdGgocGF0aDogQXJyYXk8c3RyaW5nIHwgbnVtYmVyPiwgdmFsdWVzOiBhbnkpOiBhbnkge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgd2hpbGUgKCEhdmFsdWVzICYmIGluZGV4IDwgcGF0aC5sZW5ndGgpIHtcbiAgICAgIHZhciBpbmRfbmFtZSA9IHBhdGhbaW5kZXhdO1xuICAgICAgaWYgKFxuICAgICAgICBIZWxwZXJzLmlzTnVtYmVyKGluZF9uYW1lKSAmJlxuICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlcykgJiZcbiAgICAgICAgaW5kX25hbWUgPj0gdmFsdWVzLmxlbmd0aFxuICAgICAgKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIHZhbHVlcyA9IHZhbHVlc1tpbmRfbmFtZV07XG4gICAgICBpbmRleCsrO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG4gIHByaXZhdGUgZ2V0VmFsdWVDb3JlKHRleHQ6IHN0cmluZywgdmFsdWVzOiBhbnkpOiBhbnkge1xuICAgIHZhciByZXM6IGFueSA9IHsgaGFzVmFsdWU6IGZhbHNlLCB2YWx1ZTogbnVsbCwgcGF0aDogbnVsbCB9O1xuICAgIHZhciBjdXJWYWx1ZSA9IHZhbHVlcztcbiAgICBpZiAoIWN1clZhbHVlICYmIGN1clZhbHVlICE9PSAwICYmIGN1clZhbHVlICE9PSBmYWxzZSkgcmV0dXJuIHJlcztcbiAgICBpZiAoXG4gICAgICB0ZXh0ICYmXG4gICAgICB0ZXh0Lmxhc3RJbmRleE9mKFwiLmxlbmd0aFwiKSA+IC0xICYmXG4gICAgICB0ZXh0Lmxhc3RJbmRleE9mKFwiLmxlbmd0aFwiKSA9PT0gdGV4dC5sZW5ndGggLSBcIi5sZW5ndGhcIi5sZW5ndGhcbiAgICApIHtcbiAgICAgIHJlcy52YWx1ZSA9IDA7XG4gICAgICByZXMuaGFzVmFsdWUgPSB0cnVlO1xuICAgIH1cbiAgICB2YXIgbm9uTmVzdGVkT2JqID0gdGhpcy5nZXROb25OZXN0ZWRPYmplY3QoY3VyVmFsdWUsIHRleHQsIGZhbHNlKTtcbiAgICBpZiAoIW5vbk5lc3RlZE9iaikgcmV0dXJuIHJlcztcbiAgICByZXMucGF0aCA9IG5vbk5lc3RlZE9iai5wYXRoO1xuICAgIHJlcy52YWx1ZSA9ICEhbm9uTmVzdGVkT2JqLnRleHRcbiAgICAgID8gdGhpcy5nZXRPYmplY3RWYWx1ZShub25OZXN0ZWRPYmoudmFsdWUsIG5vbk5lc3RlZE9iai50ZXh0KVxuICAgICAgOiBub25OZXN0ZWRPYmoudmFsdWU7XG4gICAgcmVzLmhhc1ZhbHVlID0gIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHJlcy52YWx1ZSk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGdldE5vbk5lc3RlZE9iamVjdChvYmo6IGFueSwgdGV4dDogc3RyaW5nLCBjcmVhdGVQYXRoOiBib29sZWFuKTogYW55IHtcbiAgICB2YXIgY3VyTmFtZSA9IHRoaXMuZ2V0Rmlyc3RQcm9wZXJ0eU5hbWUodGV4dCwgb2JqLCBjcmVhdGVQYXRoKTtcbiAgICB2YXIgcGF0aCA9ICEhY3VyTmFtZSA/IFtjdXJOYW1lXSA6IG51bGw7XG4gICAgd2hpbGUgKHRleHQgIT0gY3VyTmFtZSAmJiAhIW9iaikge1xuICAgICAgdmFyIGlzQXJyYXkgPSB0ZXh0WzBdID09IFwiW1wiO1xuICAgICAgaWYgKCFpc0FycmF5KSB7XG4gICAgICAgIGlmICghY3VyTmFtZSAmJiB0ZXh0ID09IHRoaXMuZ2V0Rmlyc3ROYW1lKHRleHQpKVxuICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvYmosIHRleHQ6IHRleHQsIHBhdGg6IHBhdGggfTtcbiAgICAgICAgb2JqID0gdGhpcy5nZXRPYmplY3RWYWx1ZShvYmosIGN1ck5hbWUpO1xuICAgICAgICBpZiAoSGVscGVycy5pc1ZhbHVlRW1wdHkob2JqKSAmJiAhY3JlYXRlUGF0aCkgcmV0dXJuIG51bGw7XG4gICAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cihjdXJOYW1lLmxlbmd0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgb2JqSW5BcnJheSA9IHRoaXMuZ2V0T2JqSW5BcnJheShvYmosIHRleHQpO1xuICAgICAgICBpZiAoIW9iakluQXJyYXkpIHJldHVybiBudWxsO1xuICAgICAgICBvYmogPSBvYmpJbkFycmF5LnZhbHVlO1xuICAgICAgICB0ZXh0ID0gb2JqSW5BcnJheS50ZXh0O1xuICAgICAgICBwYXRoLnB1c2gob2JqSW5BcnJheS5pbmRleCk7XG4gICAgICB9XG4gICAgICBpZiAoISF0ZXh0ICYmIHRleHRbMF0gPT0gXCIuXCIpIHtcbiAgICAgICAgdGV4dCA9IHRleHQuc3Vic3RyKDEpO1xuICAgICAgfVxuICAgICAgY3VyTmFtZSA9IHRoaXMuZ2V0Rmlyc3RQcm9wZXJ0eU5hbWUodGV4dCwgb2JqLCBjcmVhdGVQYXRoKTtcbiAgICAgIGlmICghIWN1ck5hbWUpIHtcbiAgICAgICAgcGF0aC5wdXNoKGN1ck5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyB2YWx1ZTogb2JqLCB0ZXh0OiB0ZXh0LCBwYXRoOiBwYXRoIH07XG4gIH1cbiAgcHJpdmF0ZSBnZXRPYmpJbkFycmF5KGN1clZhbHVlOiBhbnksIHRleHQ6IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGN1clZhbHVlKSkgcmV0dXJuIG51bGw7XG4gICAgdmFyIGluZGV4ID0gMTtcbiAgICB2YXIgc3RyID0gXCJcIjtcbiAgICB3aGlsZSAoaW5kZXggPCB0ZXh0Lmxlbmd0aCAmJiB0ZXh0W2luZGV4XSAhPSBcIl1cIikge1xuICAgICAgc3RyICs9IHRleHRbaW5kZXhdO1xuICAgICAgaW5kZXgrKztcbiAgICB9XG4gICAgdGV4dCA9IGluZGV4IDwgdGV4dC5sZW5ndGggPyB0ZXh0LnN1YnN0cihpbmRleCArIDEpIDogXCJcIjtcbiAgICBpbmRleCA9IHRoaXMuZ2V0SW50VmFsdWUoc3RyKTtcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGN1clZhbHVlLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHsgdmFsdWU6IGN1clZhbHVlW2luZGV4XSwgdGV4dDogdGV4dCwgaW5kZXg6IGluZGV4IH07XG4gIH1cbiAgcHJpdmF0ZSBnZXRGaXJzdFByb3BlcnR5TmFtZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgb2JqOiBhbnksXG4gICAgY3JlYXRlUHJvcDogYm9vbGVhbiA9IGZhbHNlXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKCFuYW1lKSByZXR1cm4gbmFtZTtcbiAgICBpZiAoIW9iaikgb2JqID0ge307XG4gICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgcmV0dXJuIG5hbWU7XG4gICAgdmFyIG5hbWVJbkxvdyA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgQSA9IG5hbWVJbkxvd1swXTtcbiAgICB2YXIgYSA9IEEudG9VcHBlckNhc2UoKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICB2YXIgZmlyc3QgPSBrZXlbMF07XG4gICAgICBpZiAoZmlyc3QgPT09IGEgfHwgZmlyc3QgPT09IEEpIHtcbiAgICAgICAgdmFyIGtleU5hbWUgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKGtleU5hbWUgPT0gbmFtZUluTG93KSByZXR1cm4ga2V5O1xuICAgICAgICBpZiAobmFtZUluTG93Lmxlbmd0aCA8PSBrZXlOYW1lLmxlbmd0aCkgY29udGludWU7XG4gICAgICAgIHZhciBjaCA9IG5hbWVJbkxvd1trZXlOYW1lLmxlbmd0aF07XG4gICAgICAgIGlmIChjaCAhPSBcIi5cIiAmJiBjaCAhPSBcIltcIikgY29udGludWU7XG4gICAgICAgIGlmIChrZXlOYW1lID09IG5hbWVJbkxvdy5zdWJzdHIoMCwga2V5TmFtZS5sZW5ndGgpKSByZXR1cm4ga2V5O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY3JlYXRlUHJvcCAmJiBuYW1lWzBdICE9PSBcIltcIikge1xuICAgICAgdmFyIGluZCA9IG5hbWUuaW5kZXhPZihcIi5cIik7XG4gICAgICBpZiAoaW5kID4gLTEpIHtcbiAgICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyKDAsIGluZCk7XG4gICAgICAgIG9ialtuYW1lXSA9IHt9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xuICB9XG4gIHByaXZhdGUgZ2V0T2JqZWN0VmFsdWUob2JqOiBhbnksIG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKCFuYW1lKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gb2JqW25hbWVdO1xuICB9XG4gIHByaXZhdGUgZ2V0SW50VmFsdWUoc3RyOiBhbnkpIHtcbiAgICBpZiAoc3RyID09IFwiMFwiIHx8ICgoc3RyIHwgMCkgPiAwICYmIHN0ciAlIDEgPT0gMCkpIHJldHVybiBOdW1iZXIoc3RyKTtcbiAgICByZXR1cm4gLTE7XG4gIH1cbn1cbiIsImltcG9ydCB7IEhhc2hUYWJsZSB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7IFByb2Nlc3NWYWx1ZSB9IGZyb20gXCIuL2NvbmRpdGlvblByb2Nlc3NWYWx1ZVwiO1xuXG5pbXBvcnQgeyBPcGVyYW5kLCBGdW5jdGlvbk9wZXJhbmQgfSBmcm9tIFwiLi9leHByZXNzaW9ucy9leHByZXNzaW9uc1wiO1xuaW1wb3J0IHsgQ29uZGl0aW9uc1BhcnNlciB9IGZyb20gXCIuL2NvbmRpdGlvbnNQYXJzZXJcIjtcblxuZXhwb3J0IGNsYXNzIEV4cHJlc3Npb25SdW5uZXJCYXNlIHtcbiAgcHJpdmF0ZSBleHByZXNzaW9uVmFsdWU6IHN0cmluZztcbiAgcHJpdmF0ZSBvcGVyYW5kOiBPcGVyYW5kO1xuICBwcml2YXRlIHByb2Nlc3NWYWx1ZSA9IG5ldyBQcm9jZXNzVmFsdWUoKTtcbiAgcHJpdmF0ZSBwYXJzZXIgPSBuZXcgQ29uZGl0aW9uc1BhcnNlcigpO1xuICBwcml2YXRlIGlzQXN5bmNWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGhhc0Z1bmN0aW9uVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBhc3luY0Z1bmNMaXN0OiBBcnJheTxGdW5jdGlvbk9wZXJhbmQ+O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihleHByZXNzaW9uOiBzdHJpbmcpIHtcbiAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICB9XG5cbiAgcHVibGljIGdldCBleHByZXNzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvblZhbHVlO1xuICB9XG5cbiAgcHVibGljIHNldCBleHByZXNzaW9uKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5leHByZXNzaW9uID09PSB2YWx1ZSkgcmV0dXJuO1xuICAgIHRoaXMuZXhwcmVzc2lvblZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5vcGVyYW5kID0gdGhpcy5wYXJzZXIucGFyc2VFeHByZXNzaW9uKHZhbHVlKTtcbiAgICB0aGlzLmhhc0Z1bmN0aW9uVmFsdWUgPSB0aGlzLmNhblJ1bigpID8gdGhpcy5vcGVyYW5kLmhhc0Z1bmN0aW9uKCkgOiBmYWxzZTtcbiAgICB0aGlzLmlzQXN5bmNWYWx1ZSA9IHRoaXMuaGFzRnVuY3Rpb24oKVxuICAgICAgPyB0aGlzLm9wZXJhbmQuaGFzQXN5bmNGdW5jdGlvbigpXG4gICAgICA6IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGdldFZhcmlhYmxlcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICBpZiAoIXRoaXMub3BlcmFuZCkgcmV0dXJuIFtdO1xuXG4gICAgdmFyIHZhcmlhYmxlczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgIHRoaXMub3BlcmFuZC5zZXRWYXJpYWJsZXModmFyaWFibGVzKTtcbiAgICByZXR1cm4gdmFyaWFibGVzO1xuICB9XG5cbiAgcHVibGljIGhhc0Z1bmN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc0Z1bmN0aW9uVmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCBpc0FzeW5jKCkge1xuICAgIHJldHVybiB0aGlzLmlzQXN5bmNWYWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBjYW5SdW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5vcGVyYW5kO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJ1bkNvcmUoXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PiA9IG51bGxcbiAgKTogYW55IHtcbiAgICBpZiAoIXRoaXMub3BlcmFuZCkgcmV0dXJuIG51bGw7XG5cbiAgICB0aGlzLnByb2Nlc3NWYWx1ZS52YWx1ZXMgPSB2YWx1ZXM7XG4gICAgdGhpcy5wcm9jZXNzVmFsdWUucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgaWYgKCF0aGlzLmlzQXN5bmMpIHJldHVybiB0aGlzLnJ1blZhbHVlcygpO1xuICAgIHRoaXMuYXN5bmNGdW5jTGlzdCA9IFtdO1xuICAgIHRoaXMub3BlcmFuZC5hZGRUb0FzeW5jTGlzdCh0aGlzLmFzeW5jRnVuY0xpc3QpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hc3luY0Z1bmNMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmFzeW5jRnVuY0xpc3RbaV0ub25Bc3luY1JlYWR5ID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmRvQXN5bmNGdW5jdGlvblJlYWR5KCk7XG4gICAgICB9O1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXN5bmNGdW5jTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5hc3luY0Z1bmNMaXN0W2ldLmV2YWx1YXRlQXN5bmModGhpcy5wcm9jZXNzVmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJpdmF0ZSBkb0FzeW5jRnVuY3Rpb25SZWFkeSgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXN5bmNGdW5jTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCF0aGlzLmFzeW5jRnVuY0xpc3RbaV0uaXNSZWFkeSkgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnJ1blZhbHVlcygpO1xuICB9XG4gIHByaXZhdGUgcnVuVmFsdWVzKCk6IGFueSB7XG4gICAgdmFyIHJlcyA9IHRoaXMub3BlcmFuZC5ldmFsdWF0ZSh0aGlzLnByb2Nlc3NWYWx1ZSk7XG4gICAgdGhpcy5kb09uQ29tcGxldGUocmVzKTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCBkb09uQ29tcGxldGUocmVzOiBhbnkpIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBDb25kaXRpb25SdW5uZXIgZXh0ZW5kcyBFeHByZXNzaW9uUnVubmVyQmFzZSB7XG4gIHB1YmxpYyBvblJ1bkNvbXBsZXRlOiAocmVzdWx0OiBib29sZWFuKSA9PiB2b2lkO1xuICBwdWJsaWMgcnVuKFxuICAgIHZhbHVlczogSGFzaFRhYmxlPGFueT4sXG4gICAgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4gPSBudWxsXG4gICk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJ1bkNvcmUodmFsdWVzLCBwcm9wZXJ0aWVzKSA9PSB0cnVlO1xuICB9XG4gIHByb3RlY3RlZCBkb09uQ29tcGxldGUocmVzOiBhbnkpIHtcbiAgICBpZiAoISF0aGlzLm9uUnVuQ29tcGxldGUpIHRoaXMub25SdW5Db21wbGV0ZShyZXMgPT0gdHJ1ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEV4cHJlc3Npb25SdW5uZXIgZXh0ZW5kcyBFeHByZXNzaW9uUnVubmVyQmFzZSB7XG4gIHB1YmxpYyBvblJ1bkNvbXBsZXRlOiAocmVzdWx0OiBhbnkpID0+IHZvaWQ7XG4gIHB1YmxpYyBydW4odmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4gPSBudWxsKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5ydW5Db3JlKHZhbHVlcywgcHJvcGVydGllcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGRvT25Db21wbGV0ZShyZXM6IGFueSkge1xuICAgIGlmICghIXRoaXMub25SdW5Db21wbGV0ZSkgdGhpcy5vblJ1bkNvbXBsZXRlKHJlcyk7XG4gIH1cbn1cbiIsImltcG9ydCB7IE9wZXJhbmQsIENvbnN0IH0gZnJvbSBcIi4vZXhwcmVzc2lvbnMvZXhwcmVzc2lvbnNcIjtcbmltcG9ydCB7IFN5bnRheEVycm9yLCBwYXJzZSB9IGZyb20gXCIuL2V4cHJlc3Npb25zL2V4cHJlc3Npb25QYXJzZXJcIjtcblxuZXhwb3J0IGNsYXNzIENvbmRpdGlvbnNQYXJzZXJFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBhdDogbnVtYmVyLCBwdWJsaWMgY29kZTogc3RyaW5nKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uc1BhcnNlciB7XG4gIHByaXZhdGUgY29uZGl0aW9uRXJyb3I6IENvbmRpdGlvbnNQYXJzZXJFcnJvcjtcbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VyQ2FjaGU6IHsgW2luZGV4OiBzdHJpbmddOiBPcGVyYW5kIH0gPSB7fTtcblxuICBwcml2YXRlIHBhdGNoRXhwcmVzc2lvbih0ZXh0OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGV4dFxuICAgICAgLnJlcGxhY2UoLz0+L2csIFwiPj1cIilcbiAgICAgIC5yZXBsYWNlKC89PC9nLCBcIjw9XCIpXG4gICAgICAucmVwbGFjZSgvPD4vZywgXCIhPVwiKVxuICAgICAgLnJlcGxhY2UoLz09L2csIFwiPSBcIilcbiAgICAgIC5yZXBsYWNlKC9lcXVhbHMvZywgXCJlcXVhbCBcIilcbiAgICAgIC5yZXBsYWNlKC9ub3RlcXVhbHMvZywgXCJub3RlcXVhbCBcIik7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlQ29uZGl0aW9uKHRleHQ6IHN0cmluZyk6IE9wZXJhbmQge1xuICAgIHJldHVybiB0aGlzLnBhcnNlRXhwcmVzc2lvbih0ZXh0KTtcbiAgfVxuXG4gIHB1YmxpYyBwYXJzZUV4cHJlc3Npb24odGV4dDogc3RyaW5nKTogT3BlcmFuZCB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciByZXN1bHQgPSBDb25kaXRpb25zUGFyc2VyLnBhcnNlckNhY2hlW3RleHRdO1xuICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3VsdCA9IHBhcnNlKHRoaXMucGF0Y2hFeHByZXNzaW9uKHRleHQpKTtcbiAgICAgICAgaWYgKCFyZXN1bHQuaGFzQXN5bmNGdW5jdGlvbigpKSB7XG4gICAgICAgICAgQ29uZGl0aW9uc1BhcnNlci5wYXJzZXJDYWNoZVt0ZXh0XSA9IHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uRXJyb3IgPSBuZXcgQ29uZGl0aW9uc1BhcnNlckVycm9yKFxuICAgICAgICAgIGUubG9jYXRpb24uc3RhcnQub2Zmc2V0LFxuICAgICAgICAgIGUubWVzc2FnZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgZXJyb3IoKTogQ29uZGl0aW9uc1BhcnNlckVycm9yIHtcbiAgICByZXR1cm4gdGhpcy5jb25kaXRpb25FcnJvcjtcbiAgfVxufVxuIiwiaW1wb3J0IHsgc3VydmV5Q3NzIH0gZnJvbSBcIi4vY3Nzc3RhbmRhcmRcIjtcblxuZXhwb3J0IHZhciBkZWZhdWx0Qm9vdHN0cmFwQ3NzID0ge1xuICByb290OiBcInN2X21haW4gc3ZfYm9vdHN0cmFwX2Nzc1wiLFxuICBjb250YWluZXI6IFwic3ZfY29udGFpbmVyXCIsXG4gIGhlYWRlcjogXCJwYW5lbC1oZWFkaW5nIGNhcmQtaGVhZGVyXCIsXG4gIGJvZHk6IFwicGFuZWwtYm9keSBjYXJkLWJsb2NrIG10LTRcIixcbiAgYm9keUVtcHR5OiBcInBhbmVsLWJvZHkgY2FyZC1ibG9jayBtdC00IHN2X2JvZHlfZW1wdHlcIixcbiAgZm9vdGVyOiBcInBhbmVsLWZvb3RlciBjYXJkLWZvb3RlclwiLFxuICB0aXRsZTogXCJcIixcbiAgZGVzY3JpcHRpb246IFwiXCIsXG4gIGxvZ286IFwic3ZfbG9nb1wiLFxuICBsb2dvSW1hZ2U6IFwic3ZfbG9nb19faW1hZ2VcIixcbiAgaGVhZGVyVGV4dDogXCJzdl9oZWFkZXJfX3RleHRcIixcbiAgbmF2aWdhdGlvbkJ1dHRvbjogXCJcIixcbiAgY29tcGxldGVkUGFnZTogXCJcIixcbiAgbmF2aWdhdGlvbjoge1xuICAgIGNvbXBsZXRlOiBcImJ0biBzdl9jb21wbGV0ZV9idG5cIixcbiAgICBwcmV2OiBcImJ0biBzdl9wcmV2X2J0blwiLFxuICAgIG5leHQ6IFwiYnRuIHN2X25leHRfYnRuXCIsXG4gICAgc3RhcnQ6IFwiYnRuIHN2X3N0YXJ0X2J0blwiLFxuICAgIHByZXZpZXc6IFwiYnRuIHN2X3ByZXZpZXdfYnRuXCIsXG4gICAgZWRpdDogXCJidG4gc3ZfZWRpdF9idG5cIixcbiAgfSxcbiAgcHJvZ3Jlc3M6IFwicHJvZ3Jlc3MgY2VudGVyLWJsb2NrIG14LWF1dG8gbWItNFwiLFxuICBwcm9ncmVzc0JhcjogXCJwcm9ncmVzcy1iYXJcIixcbiAgcHJvZ3Jlc3NUZXh0VW5kZXJCYXI6IFwic3YtaGlkZGVuXCIsXG4gIHByb2dyZXNzQnV0dG9uc0NvbnRhaW5lckNlbnRlcjogXCJzdl9wcm9ncmVzcy1idXR0b25zX19jb250YWluZXItY2VudGVyXCIsXG4gIHByb2dyZXNzQnV0dG9uc0NvbnRhaW5lcjogXCJzdl9wcm9ncmVzcy1idXR0b25zX19jb250YWluZXJcIixcbiAgcHJvZ3Jlc3NCdXR0b25zSW1hZ2VCdXR0b25MZWZ0OiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2ltYWdlLWJ1dHRvbi1sZWZ0XCIsXG4gIHByb2dyZXNzQnV0dG9uc0ltYWdlQnV0dG9uUmlnaHQ6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19faW1hZ2UtYnV0dG9uLXJpZ2h0XCIsXG4gIHByb2dyZXNzQnV0dG9uc0ltYWdlQnV0dG9uSGlkZGVuOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2ltYWdlLWJ1dHRvbi0taGlkZGVuXCIsXG4gIHByb2dyZXNzQnV0dG9uc0xpc3RDb250YWluZXI6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1jb250YWluZXJcIixcbiAgcHJvZ3Jlc3NCdXR0b25zTGlzdDogXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0XCIsXG4gIHByb2dyZXNzQnV0dG9uc0xpc3RFbGVtZW50UGFzc2VkOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtZWxlbWVudC0tcGFzc2VkXCIsXG4gIHByb2dyZXNzQnV0dG9uc0xpc3RFbGVtZW50Q3VycmVudDpcbiAgICBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtZWxlbWVudC0tY3VycmVudFwiLFxuICBwcm9ncmVzc0J1dHRvbnNMaXN0RWxlbWVudE5vbkNsaWNrYWJsZTpcbiAgICBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtZWxlbWVudC0tbm9uY2xpY2thYmxlXCIsXG4gIHByb2dyZXNzQnV0dG9uc1BhZ2VUaXRsZTogXCJzdl9wcm9ncmVzcy1idXR0b25zX19wYWdlLXRpdGxlXCIsXG4gIHByb2dyZXNzQnV0dG9uc1BhZ2VEZXNjcmlwdGlvbjogXCJzdl9wcm9ncmVzcy1idXR0b25zX19wYWdlLWRlc2NyaXB0aW9uXCIsXG4gIHBhZ2U6IHtcbiAgICByb290OiBcIlwiLFxuICAgIHRpdGxlOiBcIlwiLFxuICAgIGRlc2NyaXB0aW9uOiBcInNtYWxsXCIsXG4gIH0sXG4gIHBhZ2VUaXRsZTogXCJcIixcbiAgcGFnZURlc2NyaXB0aW9uOiBcInNtYWxsXCIsXG4gIHJvdzogXCJzdl9yb3dcIixcbiAgcXVlc3Rpb246IHtcbiAgICBtYWluUm9vdDogXCJzdl9xc3RuXCIsXG4gICAgZmxvd1Jvb3Q6IFwic3ZfcV9mbG93IHN2X3FzdG5cIixcbiAgICBoZWFkZXI6IFwiXCIsXG4gICAgaGVhZGVyTGVmdDogXCJ0aXRsZS1sZWZ0XCIsXG4gICAgY29udGVudDogXCJcIixcbiAgICBjb250ZW50TGVmdDogXCJjb250ZW50LWxlZnRcIixcbiAgICB0aXRsZUxlZnRSb290OiBcInN2X3FzdG5fbGVmdFwiLFxuICAgIHRpdGxlOiBcIlwiLFxuICAgIHRpdGxlRXhwYW5kYWJsZTogXCJzdl9xX3RpdGxlX2V4cGFuZGFibGVcIixcbiAgICBudW1iZXI6IFwic3ZfcV9udW1cIixcbiAgICBkZXNjcmlwdGlvbjogXCJzbWFsbFwiLFxuICAgIGRlc2NyaXB0aW9uVW5kZXJJbnB1dDogXCJzbWFsbFwiLFxuICAgIHJlcXVpcmVkVGV4dDogXCJzdl9xX3JlcXVpcmVkX3RleHRcIixcbiAgICBjb21tZW50OiBcImZvcm0tY29udHJvbFwiLFxuICAgIHJlcXVpcmVkOiBcIlwiLFxuICAgIHRpdGxlUmVxdWlyZWQ6IFwiXCIsXG4gICAgaGFzRXJyb3I6IFwiaGFzLWVycm9yXCIsXG4gICAgaW5kZW50OiAyMCxcbiAgICBmb3JtR3JvdXA6IFwiZm9ybS1ncm91cFwiLFxuICB9LFxuICBwYW5lbDoge1xuICAgIHRpdGxlOiBcInN2X3BfdGl0bGVcIixcbiAgICB0aXRsZUV4cGFuZGFibGU6IFwic3ZfcF90aXRsZV9leHBhbmRhYmxlXCIsXG4gICAgdGl0bGVPbkVycm9yOiBcIlwiLFxuICAgIGljb246IFwic3ZfcGFuZWxfaWNvblwiLFxuICAgIGljb25FeHBhbmRlZDogXCJzdl9leHBhbmRlZFwiLFxuICAgIGRlc2NyaXB0aW9uOiBcInNtYWxsIHN2X3BfZGVzY3JpcHRpb25cIixcbiAgICBjb250YWluZXI6IFwic3ZfcF9jb250YWluZXJcIixcbiAgICBmb290ZXI6IFwic3ZfcF9mb290ZXJcIixcbiAgICBudW1iZXI6IFwic3ZfcV9udW1cIixcbiAgICByZXF1aXJlZFRleHQ6IFwic3ZfcV9yZXF1aXJlZF90ZXh0XCIsXG4gIH0sXG4gIGVycm9yOiB7XG4gICAgcm9vdDogXCJhbGVydCBhbGVydC1kYW5nZXJcIixcbiAgICBpY29uOiBcImdseXBoaWNvbiBnbHlwaGljb24tZXhjbGFtYXRpb24tc2lnblwiLFxuICAgIGl0ZW06IFwiXCIsXG4gICAgbG9jYXRpb25Ub3A6IFwic3ZfcXN0bl9lcnJvcl90b3BcIixcbiAgICBsb2NhdGlvbkJvdHRvbTogXCJzdl9xc3RuX2Vycm9yX2JvdHRvbVwiLFxuICB9LFxuICBib29sZWFuOiB7XG4gICAgcm9vdDogXCJzdl9xYmxuIGZvcm0taW5saW5lIGNoZWNrYm94XCIsXG4gICAgaXRlbTogXCJzdi1ib29sZWFuXCIsXG4gICAgY29udHJvbDogXCJzdi12aXN1YWxseWhpZGRlblwiLFxuICAgIGl0ZW1DaGVja2VkOiBcInN2LWJvb2xlYW4tLWNoZWNrZWQgY2hlY2tlZFwiLFxuICAgIGl0ZW1JbmRldGVybWluYXRlOiBcInN2LWJvb2xlYW4tLWluZGV0ZXJtaW5hdGVcIixcbiAgICBpdGVtRGlzYWJsZWQ6IFwic3YtYm9vbGVhbi0tZGlzYWJsZWRcIixcbiAgICBzd2l0Y2g6IFwic3YtYm9vbGVhbl9fc3dpdGNoXCIsXG4gICAgc2xpZGVyOiBcInN2LWJvb2xlYW5fX3NsaWRlclwiLFxuICAgIHNsaWRlclRleHQ6IFwic3YtaGlkZGVuXCIsXG4gICAgbGFiZWw6IFwic3YtYm9vbGVhbl9fbGFiZWwgXCIsXG4gICAgZGlzYWJsZWRMYWJlbDogXCJzdi1ib29sZWFuX19sYWJlbC0tZGlzYWJsZWRcIixcbiAgICBtYXRlcmlhbERlY29yYXRvcjogXCJzdi1pdGVtX19kZWNvcmF0b3Igc3YtYm9vbGVhbl9fZGVjb3JhdG9yIFwiLFxuICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtaXRlbV9fc3ZnICBzdi1ib29sZWFuX19zdmdcIixcbiAgICBjaGVja2VkUGF0aDogXCJzdi1ib29sZWFuX19jaGVja2VkLXBhdGhcIixcbiAgICB1bmNoZWNrZWRQYXRoOiBcInN2LWJvb2xlYW5fX3VuY2hlY2tlZC1wYXRoXCIsXG4gICAgaW5kZXRlcm1pbmF0ZVBhdGg6IFwic3YtYm9vbGVhbl9faW5kZXRlcm1pbmF0ZS1wYXRoXCIsXG4gIH0sXG4gIGNoZWNrYm94OiB7XG4gICAgcm9vdDogXCJzdl9xY2JjIHN2X3FjYnggZm9ybS1pbmxpbmVcIixcbiAgICBpdGVtOiBcImNoZWNrYm94XCIsXG4gICAgaXRlbUNoZWNrZWQ6IFwiY2hlY2tlZFwiLFxuICAgIGl0ZW1TZWxlY3RBbGw6IFwic3ZfcV9jaGVja2JveF9zZWxlY3RhbGxcIixcbiAgICBpdGVtTm9uZTogXCJzdl9xX2NoZWNrYm94X25vbmVcIixcbiAgICBpdGVtSW5saW5lOiBcInN2X3FfY2hlY2tib3hfaW5saW5lXCIsXG4gICAgaXRlbUNvbnRyb2w6IFwiXCIsXG4gICAgaXRlbURlY29yYXRvcjogXCJzdi1oaWRkZW5cIixcbiAgICBsYWJlbDogXCJcIixcbiAgICBsYWJlbENoZWNrZWQ6IFwiXCIsXG4gICAgY29udHJvbExhYmVsOiBcIlwiLFxuICAgIG1hdGVyaWFsRGVjb3JhdG9yOiBcImNoZWNrYm94LW1hdGVyaWFsXCIsXG4gICAgb3RoZXI6IFwic3ZfcV9jaGVja2JveF9vdGhlciBmb3JtLWNvbnRyb2xcIixcbiAgICBjb2x1bW46IFwic3ZfcV9zZWxlY3RfY29sdW1uXCIsXG4gIH0sXG4gIHJhbmtpbmc6IHtcbiAgICByb290OiBcInN2LXJhbmtpbmdcIixcbiAgICByb290TW9iaWxlTW9kOiBcInN2LXJhbmtpbmctLW1vYmlsZVwiLFxuICAgIHJvb3REcmFnTW9kOiBcInN2LXJhbmtpbmctLWRyYWdcIixcbiAgICBpdGVtOiBcInN2LXJhbmtpbmctaXRlbVwiLFxuICAgIGl0ZW1Db250ZW50OiBcInN2LXJhbmtpbmctaXRlbV9fY29udGVudFwiLFxuICAgIGl0ZW1JbmRleDogXCJzdi1yYW5raW5nLWl0ZW1fX2luZGV4XCIsXG4gICAgLy8gaXRlbVRleHQ6IFwic3YtcmFua2luZy1pdGVtX190ZXh0XCIsXG4gICAgY29udHJvbExhYmVsOiBcInN2LXJhbmtpbmctaXRlbV9fdGV4dFwiLFxuICAgIGl0ZW1HaG9zdE5vZGU6IFwic3YtcmFua2luZy1pdGVtX19naG9zdFwiLFxuICAgIGl0ZW1JY29uQ29udGFpbmVyOiBcInN2LXJhbmtpbmctaXRlbV9faWNvbi1jb250YWluZXJcIixcbiAgICBpdGVtSWNvbjogXCJzdi1yYW5raW5nLWl0ZW1fX2ljb25cIixcbiAgICBpdGVtSWNvbkhvdmVyTW9kOiBcInN2LXJhbmtpbmctaXRlbV9faWNvbi0taG92ZXJcIixcbiAgICBpdGVtSWNvbkZvY3VzTW9kOiBcInN2LXJhbmtpbmctaXRlbV9faWNvbi0tZm9jdXNcIixcbiAgICBpdGVtR2hvc3RNb2Q6IFwic3YtcmFua2luZy1pdGVtLS1naG9zdFwiLFxuICAgIGl0ZW1EcmFnTW9kOiBcInN2LXJhbmtpbmctaXRlbS0tZHJhZ1wiLFxuICB9LFxuICBjb21tZW50OiBcImZvcm0tY29udHJvbFwiLFxuICBkcm9wZG93bjoge1xuICAgIHJvb3Q6IFwiXCIsXG4gICAgY29udHJvbDogXCJmb3JtLWNvbnRyb2xcIixcbiAgICBvdGhlcjogXCJzdl9xX2RkX290aGVyIGZvcm0tY29udHJvbFwiLFxuICB9LFxuICBodG1sOiB7IHJvb3Q6IFwiXCIgfSxcbiAgaW1hZ2U6IHsgcm9vdDogXCJzdl9xX2ltYWdlXCIsIGltYWdlOiBcInN2X2ltYWdlX2ltYWdlXCIgfSxcbiAgbWF0cml4OiB7XG4gICAgcm9vdDogXCJ0YWJsZSBzdl9xX21hdHJpeFwiLFxuICAgIGxhYmVsOiBcInN2X3FfbV9sYWJlbFwiLFxuICAgIGl0ZW1DaGVja2VkOiBcImNoZWNrZWRcIixcbiAgICBpdGVtRGVjb3JhdG9yOiBcInN2LWhpZGRlblwiLFxuICAgIGNlbGxUZXh0OiBcInN2X3FfbV9jZWxsX3RleHRcIixcbiAgICBjZWxsVGV4dFNlbGVjdGVkOiBcInN2X3FfbV9jZWxsX3NlbGVjdGVkIGJnLXByaW1hcnlcIixcbiAgICBjZWxsTGFiZWw6IFwic3ZfcV9tX2NlbGxfbGFiZWxcIixcbiAgfSxcbiAgbWF0cml4ZHJvcGRvd246IHtcbiAgICByb290OiBcInRhYmxlXCIsXG4gICAgY2VsbDogXCJzdl9tYXRyaXhfY2VsbFwiLFxuICAgIGhlYWRlckNlbGw6IFwic3ZfbWF0cml4X2NlbGxfaGVhZGVyXCIsXG4gICAgcm93OiBcInN2X21hdHJpeF9yb3dcIixcbiAgICByb3dBZGRpdGlvbmFsOiBcInN2LW1hdHJpeF9fcm93LS1hZGRpdGlvbmFsXCIsXG4gICAgZGV0YWlsUm93OiBcInN2X21hdHJpeF9kZXRhaWxfcm93XCIsXG4gICAgZGV0YWlsUm93VGV4dDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxfcm93dGV4dFwiLFxuICAgIGRldGFpbENlbGw6IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsXCIsXG4gICAgZGV0YWlsQnV0dG9uOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9idXR0b25cIixcbiAgICBkZXRhaWxCdXR0b25FeHBhbmRlZDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxfYnV0dG9uX2V4cGFuZGVkXCIsXG4gICAgZGV0YWlsSWNvbjogXCJzdl9kZXRhaWxfcGFuZWxfaWNvblwiLFxuICAgIGRldGFpbEljb25FeHBhbmRlZDogXCJzdl9kZXRhaWxfZXhwYW5kZWRcIixcbiAgICBkZXRhaWxQYW5lbENlbGw6IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsX3BhbmVsXCIsXG4gICAgYWN0aW9uc0NlbGw6IFwic3ZfbWF0cml4X2NlbGwgc3ZfbWF0cml4X2NlbGxfYWN0aW9uc1wiLFxuICB9LFxuICBtYXRyaXhkeW5hbWljOiB7XG4gICAgcm9vdDogXCJ0YWJsZVwiLFxuICAgIGJ1dHRvbjogXCJidXR0b25cIixcbiAgICBidXR0b25BZGQ6IFwiXCIsXG4gICAgYnV0dG9uUmVtb3ZlOiBcIlwiLFxuICAgIGljb25BZGQ6IFwiXCIsXG4gICAgaWNvblJlbW92ZTogXCJcIixcbiAgICBpY29uRHJhZzogXCJzdi1tYXRyaXhkeW5hbWljX19kcmFnLWljb25cIixcbiAgICBoZWFkZXJDZWxsOiBcInN2X21hdHJpeF9jZWxsX2hlYWRlclwiLFxuICAgIHJvdzogXCJzdl9tYXRyaXhfcm93XCIsXG4gICAgZGV0YWlsUm93OiBcInN2X21hdHJpeF9kZXRhaWxfcm93XCIsXG4gICAgZGV0YWlsQ2VsbDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxcIixcbiAgICBkZXRhaWxCdXR0b246IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsX2J1dHRvblwiLFxuICAgIGRldGFpbEJ1dHRvbkV4cGFuZGVkOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9idXR0b25fZXhwYW5kZWRcIixcbiAgICBkZXRhaWxJY29uOiBcInN2X2RldGFpbF9wYW5lbF9pY29uXCIsXG4gICAgZGV0YWlsSWNvbkV4cGFuZGVkOiBcInN2X2RldGFpbF9leHBhbmRlZFwiLFxuICAgIGRldGFpbFBhbmVsQ2VsbDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxfcGFuZWxcIixcbiAgICBhY3Rpb25zQ2VsbDogXCJzdl9tYXRyaXhfY2VsbCBzdl9tYXRyaXhfY2VsbF9hY3Rpb25zXCIsXG4gICAgZW1wdHlSb3dzU2VjdGlvbjogXCJzdl9tYXRyaXhfZW1wdHlfcm93c19zZWN0aW9uXCIsXG4gICAgZW1wdHlSb3dzVGV4dDogXCJzdl9tYXRyaXhfZW1wdHlfcm93c190ZXh0XCIsXG4gICAgZW1wdHlSb3dzQnV0dG9uOiBcIlwiLFxuICAgIGRyYWdEcm9wR2hvc3RQb3NpdGlvblRvcDogXCJzdi1tYXRyaXhfX2RyYWctZHJvcC1naG9zdC1wb3NpdGlvbi10b3BcIixcbiAgICBkcmFnRHJvcEdob3N0UG9zaXRpb25Cb3R0b206IFwic3YtbWF0cml4X19kcmFnLWRyb3AtZ2hvc3QtcG9zaXRpb24tYm90dG9tXCIsXG4gIH0sXG4gIHBhbmVsZHluYW1pYzoge1xuICAgIHJvb3Q6IFwiXCIsXG4gICAgbmF2aWdhdGlvbjogXCJzdi1wYW5lbGR5bmFtaWNfX25hdmlnYXRpb25cIixcbiAgICBwcm9ncmVzc1RvcDogXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzIHN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtLXRvcFwiLFxuICAgIHByb2dyZXNzQm90dG9tOlxuICAgICAgXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzIHN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtLWJvdHRvbVwiLFxuICAgIHRpdGxlOiBcInN2LXRpdGxlIHN2LXF1ZXN0aW9uX190aXRsZVwiLFxuICAgIGJ1dHRvbjogXCJidXR0b25cIixcbiAgICBidXR0b25BZGQ6IFwiYnV0dG9uIHN2LXBhbmVsZHluYW1pY19fYWRkLWJ0blwiLFxuICAgIGJ1dHRvblJlbW92ZTogXCJzdl9wX3JlbW92ZV9idG5cIixcbiAgICBidXR0b25SZW1vdmVSaWdodDogXCJidXR0b24gc3YtcGFuZWxkeW5hbWljX19yZW1vdmUtYnRuLS1yaWdodFwiLFxuICAgIGJ1dHRvblByZXY6IFwic3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0blwiLFxuICAgIGJ1dHRvbk5leHQ6IFwic3YtcGFuZWxkeW5hbWljX19uZXh0LWJ0blwiLFxuICAgIHByb2dyZXNzQ29udGFpbmVyOiBcInN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtY29udGFpbmVyXCIsXG4gICAgcHJvZ3Jlc3M6IFwic3YtcHJvZ3Jlc3NcIixcbiAgICBwcm9ncmVzc0JhcjogXCJzdi1wcm9ncmVzc19fYmFyXCIsXG4gICAgcHJvZ3Jlc3NUZXh0OiBcInN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtdGV4dFwiLFxuICAgIHBhbmVsV3JhcHBlcjogXCJzdl9wX3dyYXBwZXJcIixcbiAgICBwYW5lbFdyYXBwZXJJblJvdzogXCJzdl9wX3dyYXBwZXJfaW5fcm93XCIsXG4gICAgc2VwYXJhdG9yVjI6IFwic3YtaGlkZGVuXCIsXG4gICAgZm9vdGVyOiBcInN2LWhpZGRlblwiXG4gIH0sXG4gIG11bHRpcGxldGV4dDoge1xuICAgIHJvb3Q6IFwidGFibGVcIixcbiAgICBpdGVtVGl0bGU6IFwiXCIsXG4gICAgaXRlbVZhbHVlOiBcInN2X3FfbXRfaXRlbV92YWx1ZSBmb3JtLWNvbnRyb2xcIixcbiAgfSxcbiAgcmFkaW9ncm91cDoge1xuICAgIHJvb3Q6IFwic3ZfcWNiYyBmb3JtLWlubGluZVwiLFxuICAgIGl0ZW06IFwicmFkaW9cIixcbiAgICBpdGVtQ2hlY2tlZDogXCJjaGVja2VkXCIsXG4gICAgaXRlbUlubGluZTogXCJzdl9xX3JhZGlvZ3JvdXBfaW5saW5lXCIsXG4gICAgbGFiZWw6IFwiXCIsXG4gICAgbGFiZWxDaGVja2VkOiBcIlwiLFxuICAgIGl0ZW1Db250cm9sOiBcIlwiLFxuICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtaGlkZGVuXCIsXG4gICAgY29udHJvbExhYmVsOiBcIlwiLFxuICAgIG1hdGVyaWFsRGVjb3JhdG9yOiBcImNpcmNsZVwiLFxuICAgIG90aGVyOiBcInN2X3FfcmFkaW9ncm91cF9vdGhlciBmb3JtLWNvbnRyb2xcIixcbiAgICBjbGVhckJ1dHRvbjogXCJzdl9xX3JhZGlvZ3JvdXBfY2xlYXIgYnV0dG9uXCIsXG4gICAgY29sdW1uOiBcInN2X3Ffc2VsZWN0X2NvbHVtblwiLFxuICB9LFxuICBidXR0b25ncm91cDoge1xuICAgIHJvb3Q6IFwic3YtYnV0dG9uLWdyb3VwXCIsXG4gICAgaXRlbTogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW1cIixcbiAgICBpdGVtSWNvbjogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0taWNvblwiLFxuICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLWRlY29yYXRvclwiLFxuICAgIGl0ZW1DYXB0aW9uOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbS1jYXB0aW9uXCIsXG4gICAgaXRlbUhvdmVyOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbS0taG92ZXJcIixcbiAgICBpdGVtU2VsZWN0ZWQ6IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLS1zZWxlY3RlZFwiLFxuICAgIGl0ZW1EaXNhYmxlZDogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tLWRpc2FibGVkXCIsXG4gICAgaXRlbUNvbnRyb2w6IFwic3YtdmlzdWFsbHloaWRkZW5cIixcbiAgfSxcbiAgaW1hZ2VwaWNrZXI6IHtcbiAgICByb290OiBcInN2X2ltZ3NlbFwiLFxuICAgIGl0ZW06IFwic3ZfcV9pbWdzZWxcIixcbiAgICBpdGVtQ2hlY2tlZDogXCJjaGVja2VkXCIsXG4gICAgaXRlbUlubGluZTogXCJzdl9xX2ltYWdlcGlja2VyX2lubGluZVwiLFxuICAgIGxhYmVsOiBcInN2X3FfaW1nc2VsX2xhYmVsXCIsXG4gICAgaXRlbUNvbnRyb2w6IFwic3ZfcV9pbWdzZWxfY29udHJvbF9pdGVtXCIsXG4gICAgaW1hZ2U6IFwic3ZfcV9pbWdzZWxfaW1hZ2VcIixcbiAgICBpdGVtVGV4dDogXCJzdl9xX2ltZ3NlbF90ZXh0XCIsXG4gICAgY2xlYXJCdXR0b246IFwic3ZfcV9yYWRpb2dyb3VwX2NsZWFyXCIsXG4gIH0sXG4gIHJhdGluZzoge1xuICAgIHJvb3Q6IFwiYnRuLWdyb3VwXCIsXG4gICAgaXRlbTogXCJidG4gYnRuLWRlZmF1bHQgYnRuLXNlY29uZGFyeVwiLFxuICAgIHNlbGVjdGVkOiBcImFjdGl2ZVwiLFxuICAgIG1pblRleHQ6IFwic3ZfcV9yYXRpbmdfbWluX3RleHRcIixcbiAgICBpdGVtVGV4dDogXCJzdl9xX3JhdGluZ19pdGVtX3RleHRcIixcbiAgICBtYXhUZXh0OiBcInN2X3FfcmF0aW5nX21heF90ZXh0XCIsXG4gICAgZGlzYWJsZWQ6IFwiXCIsXG4gIH0sXG4gIHRleHQ6IFwiZm9ybS1jb250cm9sXCIsXG4gIGV4cHJlc3Npb246IFwiZm9ybS1jb250cm9sXCIsXG4gIGZpbGU6IHtcbiAgICByb290OiBcInN2X3FfZmlsZVwiLFxuICAgIHBsYWNlaG9sZGVySW5wdXQ6IFwic3ZfcV9maWxlX3BsYWNlaG9sZGVyXCIsXG4gICAgcHJldmlldzogXCJzdl9xX2ZpbGVfcHJldmlld1wiLFxuICAgIHJlbW92ZUJ1dHRvbjogXCJzdl9xX2ZpbGVfcmVtb3ZlX2J1dHRvblwiLFxuICAgIGZpbGVJbnB1dDogXCJzdl9xX2ZpbGVfaW5wdXRcIixcbiAgICByZW1vdmVGaWxlOiBcInN2X3FfZmlsZV9yZW1vdmVcIixcbiAgICByZW1vdmVGaWxlU3ZnOiBcInN2LWhpZGRlblwiLFxuICAgIGZpbGVEZWNvcmF0b3I6IFwic3YtaGlkZGVuXCIsXG4gICAgZmlsZVNpZ25Cb3R0b206IFwic3YtaGlkZGVuXCIsXG4gICAgcmVtb3ZlQnV0dG9uQm90dG9tOiBcInN2LWhpZGRlblwiLFxuICAgIGRyYWdBcmVhUGxhY2Vob2xkZXI6IFwic3YtaGlkZGVuXCIsXG4gICAgZmlsZUxpc3Q6IFwiXCIsXG4gICAgZGVmYXVsdEltYWdlOiBcInN2LWhpZGRlblwiXG4gIH0sXG4gIHNpZ25hdHVyZXBhZDoge1xuICAgIHJvb3Q6IFwic3ZfcV9zaWduYXR1cmVwYWQgc2pzX3NwX2NvbnRhaW5lclwiLFxuICAgIGNvbnRyb2xzOiBcInNqc19zcF9jb250cm9sc1wiLFxuICAgIHBsYWNlaG9sZGVyOiBcInNqc19zcF9wbGFjZWhvbGRlclwiLFxuICAgIGNsZWFyQnV0dG9uOiBcInNqc19zcF9jbGVhclwiLFxuICB9LFxuICBzYXZlRGF0YToge1xuICAgIHJvb3Q6IFwiXCIsXG4gICAgc2F2aW5nOiBcImFsZXJ0IGFsZXJ0LWluZm9cIixcbiAgICBlcnJvcjogXCJhbGVydCBhbGVydC1kYW5nZXJcIixcbiAgICBzdWNjZXNzOiBcImFsZXJ0IGFsZXJ0LXN1Y2Nlc3NcIixcbiAgICBzYXZlQWdhaW5CdXR0b246IFwiXCIsXG4gIH0sXG4gIHdpbmRvdzoge1xuICAgIHJvb3Q6IFwibW9kYWwtY29udGVudFwiLFxuICAgIGJvZHk6IFwibW9kYWwtYm9keVwiLFxuICAgIGhlYWRlcjoge1xuICAgICAgcm9vdDogXCJtb2RhbC1oZWFkZXIgcGFuZWwtdGl0bGVcIixcbiAgICAgIHRpdGxlOiBcInB1bGwtbGVmdFwiLFxuICAgICAgYnV0dG9uOiBcImdseXBoaWNvbiBwdWxsLXJpZ2h0XCIsXG4gICAgICBidXR0b25FeHBhbmRlZDogXCJnbHlwaGljb24gcHVsbC1yaWdodCBnbHlwaGljb24tY2hldnJvbi11cFwiLFxuICAgICAgYnV0dG9uQ29sbGFwc2VkOiBcImdseXBoaWNvbiBwdWxsLXJpZ2h0IGdseXBoaWNvbi1jaGV2cm9uLWRvd25cIixcbiAgICB9LFxuICB9LFxufTtcbig8YW55PnN1cnZleUNzcylbXCJib290c3RyYXBcIl0gPSBkZWZhdWx0Qm9vdHN0cmFwQ3NzO1xuIiwiaW1wb3J0IHsgc3VydmV5Q3NzIH0gZnJvbSBcIi4vY3Nzc3RhbmRhcmRcIjtcblxuZXhwb3J0IHZhciBkZWZhdWx0Qm9vdHN0cmFwTWF0ZXJpYWxDc3MgPSB7XG4gIHJvb3Q6IFwic3ZfbWFpbiBzdl9ib290c3RyYXBtYXRlcmlhbF9jc3NcIixcbiAgY29udGFpbmVyOiBcInN2X2NvbnRhaW5lclwiLFxuICBoZWFkZXI6IFwiY2FyZC1oZWFkaW5nXCIsXG4gIGJvZHk6IFwiY2FyZC1ib2R5XCIsXG4gIGJvZHlFbXB0eTogXCJjYXJkLWJvZHkgc3ZfYm9keV9lbXB0eVwiLFxuICBmb290ZXI6IFwiY2FyZC1mb290ZXJcIixcbiAgdGl0bGU6IFwiXCIsXG4gIGRlc2NyaXB0aW9uOiBcIlwiLFxuICBsb2dvOiBcInN2X2xvZ29cIixcbiAgbG9nb0ltYWdlOiBcInN2X2xvZ29fX2ltYWdlXCIsXG4gIGhlYWRlclRleHQ6IFwic3ZfaGVhZGVyX190ZXh0XCIsXG4gIG5hdmlnYXRpb25CdXR0b246IFwiXCIsXG4gIGNvbXBsZXRlZFBhZ2U6IFwiXCIsXG4gIG5hdmlnYXRpb246IHtcbiAgICBjb21wbGV0ZTogXCJidG4gc3ZfY29tcGxldGVfYnRuIGJ0bi1wcmltYXJ5XCIsXG4gICAgcHJldjogXCJidG4gc3ZfcHJldl9idG4gYnRuLXByaW1hcnlcIixcbiAgICBuZXh0OiBcImJ0biBzdl9uZXh0X2J0biBidG4tcHJpbWFyeVwiLFxuICAgIHN0YXJ0OiBcImJ0biBzdl9zdGFydF9idG4gYnRuLXByaW1hcnlcIixcbiAgICBwcmV2aWV3OiBcImJ0biBzdl9wcmV2aWV3X2J0biBidG4tcHJpbWFyeVwiLFxuICAgIGVkaXQ6IFwiYnRuIHN2X2VkaXRfYnRuIGJ0bi1wcmltYXJ5XCIsXG4gIH0sXG4gIHByb2dyZXNzOiBcInByb2dyZXNzIGNlbnRlci1ibG9jayBteC1hdXRvIG1iLTRcIixcbiAgcHJvZ3Jlc3NCYXI6IFwicHJvZ3Jlc3MtYmFyXCIsXG4gIHByb2dyZXNzVGV4dFVuZGVyQmFyOiBcInN2LWhpZGRlblwiLFxuICBwcm9ncmVzc0J1dHRvbnNDb250YWluZXJDZW50ZXI6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fY29udGFpbmVyLWNlbnRlclwiLFxuICBwcm9ncmVzc0J1dHRvbnNDb250YWluZXI6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fY29udGFpbmVyXCIsXG4gIHByb2dyZXNzQnV0dG9uc0ltYWdlQnV0dG9uTGVmdDogXCJzdl9wcm9ncmVzcy1idXR0b25zX19pbWFnZS1idXR0b24tbGVmdFwiLFxuICBwcm9ncmVzc0J1dHRvbnNJbWFnZUJ1dHRvblJpZ2h0OiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2ltYWdlLWJ1dHRvbi1yaWdodFwiLFxuICBwcm9ncmVzc0J1dHRvbnNJbWFnZUJ1dHRvbkhpZGRlbjogXCJzdl9wcm9ncmVzcy1idXR0b25zX19pbWFnZS1idXR0b24tLWhpZGRlblwiLFxuICBwcm9ncmVzc0J1dHRvbnNMaXN0Q29udGFpbmVyOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtY29udGFpbmVyXCIsXG4gIHByb2dyZXNzQnV0dG9uc0xpc3Q6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdFwiLFxuICBwcm9ncmVzc0J1dHRvbnNMaXN0RWxlbWVudFBhc3NlZDogXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLXBhc3NlZFwiLFxuICBwcm9ncmVzc0J1dHRvbnNMaXN0RWxlbWVudEN1cnJlbnQ6XG4gICAgXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLWN1cnJlbnRcIixcbiAgcHJvZ3Jlc3NCdXR0b25zTGlzdEVsZW1lbnROb25DbGlja2FibGU6XG4gICAgXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLW5vbmNsaWNrYWJsZVwiLFxuICBwcm9ncmVzc0J1dHRvbnNQYWdlVGl0bGU6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fcGFnZS10aXRsZVwiLFxuICBwcm9ncmVzc0J1dHRvbnNQYWdlRGVzY3JpcHRpb246IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fcGFnZS1kZXNjcmlwdGlvblwiLFxuICBwYWdlOiB7XG4gICAgcm9vdDogXCJcIixcbiAgICB0aXRsZTogXCJcIixcbiAgICBkZXNjcmlwdGlvbjogXCJzbWFsbFwiLFxuICB9LFxuICBwYWdlVGl0bGU6IFwiXCIsXG4gIHBhZ2VEZXNjcmlwdGlvbjogXCJzbWFsbFwiLFxuICByb3c6IFwic3Zfcm93XCIsXG4gIHF1ZXN0aW9uOiB7XG4gICAgbWFpblJvb3Q6IFwic3ZfcXN0biBmb3JtLWdyb3VwIGJtZC1mb3JtLWdyb3VwXCIsXG4gICAgZmxvd1Jvb3Q6IFwic3ZfcV9mbG93IGZvcm0tZ3JvdXAgYm1kLWZvcm0tZ3JvdXBcIixcbiAgICBoZWFkZXI6IFwiXCIsXG4gICAgaGVhZGVyTGVmdDogXCJ0aXRsZS1sZWZ0XCIsXG4gICAgY29udGVudDogXCJcIixcbiAgICBjb250ZW50TGVmdDogXCJjb250ZW50LWxlZnRcIixcbiAgICB0aXRsZUxlZnRSb290OiBcInN2X3FzdG5fbGVmdFwiLFxuICAgIHJlcXVpcmVkVGV4dDogXCJzdl9xX3JlcXVpcmVkX3RleHRcIixcbiAgICB0aXRsZTogXCJcIixcbiAgICB0aXRsZUV4cGFuZGFibGU6IFwic3ZfcV90aXRsZV9leHBhbmRhYmxlXCIsXG4gICAgbnVtYmVyOiBcInN2X3FfbnVtXCIsXG4gICAgZGVzY3JpcHRpb246IFwic21hbGxcIixcbiAgICBkZXNjcmlwdGlvblVuZGVySW5wdXQ6IFwic21hbGxcIixcbiAgICBjb21tZW50OiBcImZvcm0tY29udHJvbFwiLFxuICAgIHJlcXVpcmVkOiBcIlwiLFxuICAgIHRpdGxlUmVxdWlyZWQ6IFwiXCIsXG4gICAgaGFzRXJyb3I6IFwiaGFzLWVycm9yXCIsXG4gICAgaW5kZW50OiAyMCxcbiAgICBmb3JtR3JvdXA6IFwiZm9ybS1ncm91cCBibWQtZm9ybS1ncm91cFwiLFxuICB9LFxuICBwYW5lbDoge1xuICAgIHRpdGxlOiBcInN2X3BfdGl0bGVcIixcbiAgICB0aXRsZUV4cGFuZGFibGU6IFwic3ZfcF90aXRsZV9leHBhbmRhYmxlXCIsXG4gICAgdGl0bGVPbkVycm9yOiBcIlwiLFxuICAgIGljb246IFwic3ZfcGFuZWxfaWNvblwiLFxuICAgIGljb25FeHBhbmRlZDogXCJzdl9leHBhbmRlZFwiLFxuICAgIGRlc2NyaXB0aW9uOiBcInNtYWxsIHN2X3BfZGVzY3JpcHRpb25cIixcbiAgICBjb250YWluZXI6IFwic3ZfcF9jb250YWluZXJcIixcbiAgICBmb290ZXI6IFwic3ZfcF9mb290ZXJcIixcbiAgICBudW1iZXI6IFwic3ZfcV9udW1cIixcbiAgICByZXF1aXJlZFRleHQ6IFwic3ZfcV9yZXF1aXJlZF90ZXh0XCIsXG4gIH0sXG4gIGVycm9yOiB7XG4gICAgcm9vdDogXCJhbGVydCBhbGVydC1kYW5nZXJcIixcbiAgICBpY29uOiBcImdseXBoaWNvbiBnbHlwaGljb24tZXhjbGFtYXRpb24tc2lnblwiLFxuICAgIGl0ZW06IFwiXCIsXG4gICAgbG9jYXRpb25Ub3A6IFwic3ZfcXN0bl9lcnJvcl90b3BcIixcbiAgICBsb2NhdGlvbkJvdHRvbTogXCJzdl9xc3RuX2Vycm9yX2JvdHRvbVwiLFxuICB9LFxuXG4gIGJvb2xlYW46IHtcbiAgICByb290OiBcInN2X3FibG4gY2hlY2tib3hcIixcbiAgICBpdGVtOiBcInN2LWJvb2xlYW5cIixcbiAgICBjb250cm9sOiBcInN2LXZpc3VhbGx5aGlkZGVuXCIsXG4gICAgaXRlbUNoZWNrZWQ6IFwic3YtYm9vbGVhbi0tY2hlY2tlZCBjaGVja2VkXCIsXG4gICAgaXRlbUluZGV0ZXJtaW5hdGU6IFwic3YtYm9vbGVhbi0taW5kZXRlcm1pbmF0ZVwiLFxuICAgIGl0ZW1EaXNhYmxlZDogXCJzdi1ib29sZWFuLS1kaXNhYmxlZFwiLFxuICAgIHN3aXRjaDogXCJzdi1ib29sZWFuX19zd2l0Y2hcIixcbiAgICBzbGlkZXI6IFwic3YtYm9vbGVhbl9fc2xpZGVyXCIsXG4gICAgc2xpZGVyVGV4dDogXCJzdi1oaWRkZW5cIixcbiAgICBsYWJlbDogXCJzdi1ib29sZWFuX19sYWJlbCBcIixcbiAgICBkaXNhYmxlZExhYmVsOiBcInN2LWJvb2xlYW5fX2xhYmVsLS1kaXNhYmxlZFwiLFxuICAgIG1hdGVyaWFsRGVjb3JhdG9yOiBcInN2LWl0ZW1fX2RlY29yYXRvciBzdi1ib29sZWFuX19kZWNvcmF0b3IgXCIsXG4gICAgaXRlbURlY29yYXRvcjogXCJzdi1pdGVtX19zdmcgIHN2LWJvb2xlYW5fX3N2Z1wiLFxuICAgIGNoZWNrZWRQYXRoOiBcInN2LWJvb2xlYW5fX2NoZWNrZWQtcGF0aFwiLFxuICAgIHVuY2hlY2tlZFBhdGg6IFwic3YtYm9vbGVhbl9fdW5jaGVja2VkLXBhdGhcIixcbiAgICBpbmRldGVybWluYXRlUGF0aDogXCJzdi1ib29sZWFuX19pbmRldGVybWluYXRlLXBhdGhcIixcbiAgfSxcbiAgY2hlY2tib3g6IHtcbiAgICByb290OiBcInN2X3FjYnhcIixcbiAgICBpdGVtOiBcImNoZWNrYm94XCIsXG4gICAgaXRlbUNoZWNrZWQ6IFwiY2hlY2tlZFwiLFxuICAgIGl0ZW1TZWxlY3RBbGw6IFwic3ZfcV9jaGVja2JveF9zZWxlY3RhbGxcIixcbiAgICBpdGVtTm9uZTogXCJzdl9xX2NoZWNrYm94X25vbmVcIixcbiAgICBpdGVtSW5saW5lOiBcInN2X3FfY2hlY2tib3hfaW5saW5lXCIsXG4gICAgaXRlbURlY29yYXRvcjogXCJzdi1oaWRkZW5cIixcbiAgICBpdGVtQ29udHJvbDogXCJcIixcbiAgICBsYWJlbDogXCJcIixcbiAgICBsYWJlbENoZWNrZWQ6IFwiXCIsXG4gICAgY29udHJvbExhYmVsOiBcIlwiLFxuICAgIG1hdGVyaWFsRGVjb3JhdG9yOiBcImNoZWNrYm94LWRlY29yYXRvclwiLFxuICAgIG90aGVyOiBcInN2X3FfY2hlY2tib3hfb3RoZXIgZm9ybS1jb250cm9sXCIsXG4gICAgY29sdW1uOiBcInN2X3Ffc2VsZWN0X2NvbHVtblwiLFxuICB9LFxuICByYW5raW5nOiB7XG4gICAgcm9vdDogXCJzdi1yYW5raW5nXCIsXG4gICAgcm9vdE1vYmlsZU1vZDogXCJzdi1yYW5raW5nLS1tb2JpbGVcIixcbiAgICByb290RHJhZ01vZDogXCJzdi1yYW5raW5nLS1kcmFnXCIsXG4gICAgaXRlbTogXCJzdi1yYW5raW5nLWl0ZW1cIixcbiAgICBpdGVtQ29udGVudDogXCJzdi1yYW5raW5nLWl0ZW1fX2NvbnRlbnRcIixcbiAgICBpdGVtSW5kZXg6IFwic3YtcmFua2luZy1pdGVtX19pbmRleFwiLFxuICAgIC8vIGl0ZW1UZXh0OiBcInN2LXJhbmtpbmctaXRlbV9fdGV4dFwiLFxuICAgIGNvbnRyb2xMYWJlbDogXCJzdi1yYW5raW5nLWl0ZW1fX3RleHRcIixcbiAgICBpdGVtR2hvc3ROb2RlOiBcInN2LXJhbmtpbmctaXRlbV9fZ2hvc3RcIixcbiAgICBpdGVtSWNvbkNvbnRhaW5lcjogXCJzdi1yYW5raW5nLWl0ZW1fX2ljb24tY29udGFpbmVyXCIsXG4gICAgaXRlbUljb246IFwic3YtcmFua2luZy1pdGVtX19pY29uXCIsXG4gICAgaXRlbUljb25Ib3Zlck1vZDogXCJzdi1yYW5raW5nLWl0ZW1fX2ljb24tLWhvdmVyXCIsXG4gICAgaXRlbUljb25Gb2N1c01vZDogXCJzdi1yYW5raW5nLWl0ZW1fX2ljb24tLWZvY3VzXCIsXG4gICAgaXRlbUdob3N0TW9kOiBcInN2LXJhbmtpbmctaXRlbS0tZ2hvc3RcIixcbiAgICBpdGVtRHJhZ01vZDogXCJzdi1yYW5raW5nLWl0ZW0tLWRyYWdcIixcbiAgfSxcbiAgY29tbWVudDogXCJmb3JtLWNvbnRyb2xcIixcbiAgZHJvcGRvd246IHtcbiAgICByb290OiBcIlwiLFxuICAgIGNvbnRyb2w6IFwiZm9ybS1jb250cm9sXCIsXG4gICAgb3RoZXI6IFwic3ZfcV9kZF9vdGhlciBmb3JtLWNvbnRyb2xcIixcbiAgfSxcbiAgaHRtbDogeyByb290OiBcIlwiIH0sXG4gIGltYWdlOiB7IHJvb3Q6IFwic3ZfcV9pbWFnZVwiLCBpbWFnZTogXCJzdl9pbWFnZV9pbWFnZVwiIH0sXG4gIG1hdHJpeDoge1xuICAgIHJvb3Q6IFwidGFibGUgc3ZfcV9tYXRyaXhcIixcbiAgICByb3c6IFwiZm9ybS1ncm91cCBibWQtZm9ybS1ncm91cFwiLFxuICAgIGxhYmVsOiBcInN2X3FfbV9sYWJlbCByYWRpby1pbmxpbmVcIixcbiAgICBjZWxsVGV4dDogXCJzdl9xX21fY2VsbF90ZXh0XCIsXG4gICAgY2VsbFRleHRTZWxlY3RlZDogXCJzdl9xX21fY2VsbF9zZWxlY3RlZCBiZy1wcmltYXJ5XCIsXG4gICAgY2VsbExhYmVsOiBcInN2X3FfbV9jZWxsX2xhYmVsXCIsXG4gICAgaXRlbVZhbHVlOiBcImZvcm0tY29udHJvbFwiLFxuICAgIGl0ZW1DaGVja2VkOiBcImNoZWNrZWRcIixcbiAgICBpdGVtRGVjb3JhdG9yOiBcInN2LWhpZGRlblwiLFxuICAgIG1hdGVyaWFsRGVjb3JhdG9yOiBcImJtZC1yYWRpb1wiLFxuICB9LFxuICBtYXRyaXhkcm9wZG93bjoge1xuICAgIHJvb3Q6IFwidGFibGVcIixcbiAgICBpdGVtVmFsdWU6IFwiZm9ybS1ncm91cCBibWQtZm9ybS1ncm91cFwiLFxuICAgIGhlYWRlckNlbGw6IFwic3ZfbWF0cml4X2NlbGxfaGVhZGVyXCIsXG4gICAgcm93OiBcInN2X21hdHJpeF9yb3dcIixcbiAgICByb3dBZGRpdGlvbmFsOiBcInN2LW1hdHJpeF9fcm93LS1hZGRpdGlvbmFsXCIsXG4gICAgZGV0YWlsUm93OiBcInN2X21hdHJpeF9kZXRhaWxfcm93XCIsXG4gICAgZGV0YWlsUm93VGV4dDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxfcm93dGV4dFwiLFxuICAgIGRldGFpbENlbGw6IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsXCIsXG4gICAgZGV0YWlsQnV0dG9uOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9idXR0b25cIixcbiAgICBkZXRhaWxCdXR0b25FeHBhbmRlZDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxfYnV0dG9uX2V4cGFuZGVkXCIsXG4gICAgZGV0YWlsSWNvbjogXCJzdl9kZXRhaWxfcGFuZWxfaWNvblwiLFxuICAgIGRldGFpbEljb25FeHBhbmRlZDogXCJzdl9kZXRhaWxfZXhwYW5kZWRcIixcbiAgICBkZXRhaWxQYW5lbENlbGw6IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsX3BhbmVsXCIsXG4gICAgYWN0aW9uc0NlbGw6IFwic3ZfbWF0cml4X2NlbGwgc3ZfbWF0cml4X2NlbGxfYWN0aW9uc1wiLFxuICB9LFxuICBtYXRyaXhkeW5hbWljOiB7XG4gICAgbWFpblJvb3Q6IFwic3ZfcXN0blwiLFxuICAgIGZsb3dSb290OiBcInN2X3FfZmxvd1wiLFxuICAgIHJvb3Q6IFwidGFibGVcIixcbiAgICBidXR0b246IFwiYnRuIGJ0bi1wcmltYXJ5XCIsXG4gICAgaXRlbVZhbHVlOiBcImZvcm0tZ3JvdXAgYm1kLWZvcm0tZ3JvdXBcIixcbiAgICBidXR0b25BZGQ6IFwiXCIsXG4gICAgYnV0dG9uUmVtb3ZlOiBcIlwiLFxuICAgIGljb25BZGQ6IFwiXCIsXG4gICAgaWNvblJlbW92ZTogXCJcIixcbiAgICBpY29uRHJhZzogXCJzdi1tYXRyaXhkeW5hbWljX19kcmFnLWljb25cIixcbiAgICBoZWFkZXJDZWxsOiBcInN2X21hdHJpeF9jZWxsX2hlYWRlclwiLFxuICAgIHJvdzogXCJzdl9tYXRyaXhfcm93XCIsXG4gICAgZGV0YWlsUm93OiBcInN2X21hdHJpeF9kZXRhaWxfcm93XCIsXG4gICAgZGV0YWlsQ2VsbDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxcIixcbiAgICBkZXRhaWxCdXR0b246IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsX2J1dHRvblwiLFxuICAgIGRldGFpbEJ1dHRvbkV4cGFuZGVkOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9idXR0b25fZXhwYW5kZWRcIixcbiAgICBkZXRhaWxJY29uOiBcInN2X2RldGFpbF9wYW5lbF9pY29uXCIsXG4gICAgZGV0YWlsSWNvbkV4cGFuZGVkOiBcInN2X2RldGFpbF9leHBhbmRlZFwiLFxuICAgIGRldGFpbFBhbmVsQ2VsbDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxfcGFuZWxcIixcbiAgICBhY3Rpb25zQ2VsbDogXCJzdl9tYXRyaXhfY2VsbCBzdl9tYXRyaXhfY2VsbF9hY3Rpb25zXCIsXG4gICAgZW1wdHlSb3dzU2VjdGlvbjogXCJzdl9tYXRyaXhfZW1wdHlfcm93c19zZWN0aW9uXCIsXG4gICAgZW1wdHlSb3dzVGV4dDogXCJzdl9tYXRyaXhfZW1wdHlfcm93c190ZXh0XCIsXG4gICAgZW1wdHlSb3dzQnV0dG9uOiBcIlwiLFxuICAgIGRyYWdEcm9wR2hvc3RQb3NpdGlvblRvcDogXCJzdi1tYXRyaXhfX2RyYWctZHJvcC1naG9zdC1wb3NpdGlvbi10b3BcIixcbiAgICBkcmFnRHJvcEdob3N0UG9zaXRpb25Cb3R0b206IFwic3YtbWF0cml4X19kcmFnLWRyb3AtZ2hvc3QtcG9zaXRpb24tYm90dG9tXCIsXG4gIH0sXG4gIHBhbmVsZHluYW1pYzoge1xuICAgIHJvb3Q6IFwiXCIsXG4gICAgbmF2aWdhdGlvbjogXCJzdi1wYW5lbGR5bmFtaWNfX25hdmlnYXRpb25cIixcbiAgICBwcm9ncmVzc1RvcDogXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzIHN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtLXRvcFwiLFxuICAgIHByb2dyZXNzQm90dG9tOlxuICAgICAgXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzIHN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtLWJvdHRvbVwiLFxuICAgIHRpdGxlOiBcInN2LXRpdGxlIHN2LXF1ZXN0aW9uX190aXRsZVwiLFxuICAgIGJ1dHRvbjogXCJidXR0b25cIixcbiAgICBidXR0b25BZGQ6IFwiYnV0dG9uIHN2LXBhbmVsZHluYW1pY19fYWRkLWJ0biBidG4gYnRuLXByaW1hcnlcIixcbiAgICBidXR0b25SZW1vdmU6IFwiYnV0dG9uIHN2LXBhbmVsZHluYW1pY19fcmVtb3ZlLWJ0biBidG4gYnRuLXByaW1hcnlcIixcbiAgICBidXR0b25SZW1vdmVSaWdodDogXCJzdi1wYW5lbGR5bmFtaWNfX3JlbW92ZS1idG4tLXJpZ2h0XCIsXG4gICAgYnV0dG9uUHJldjogXCJzdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuXCIsXG4gICAgYnV0dG9uTmV4dDogXCJzdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuXCIsXG4gICAgcHJvZ3Jlc3NDb250YWluZXI6IFwic3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy1jb250YWluZXJcIixcbiAgICBwcm9ncmVzczogXCJzdi1wcm9ncmVzc1wiLFxuICAgIHByb2dyZXNzQmFyOiBcInN2LXByb2dyZXNzX19iYXJcIixcbiAgICBwcm9ncmVzc1RleHQ6IFwic3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy10ZXh0XCIsXG4gICAgcGFuZWxXcmFwcGVyOiBcInN2X3Bfd3JhcHBlclwiLFxuICAgIHBhbmVsV3JhcHBlckluUm93OiBcInN2X3Bfd3JhcHBlcl9pbl9yb3dcIixcbiAgICBzZXBhcmF0b3JWMjogXCJzdi1oaWRkZW5cIixcbiAgICBmb290ZXI6IFwic3YtaGlkZGVuXCJcbiAgfSxcbiAgbXVsdGlwbGV0ZXh0OiB7XG4gICAgcm9vdDogXCJ0YWJsZVwiLFxuICAgIGl0ZW1UaXRsZTogXCJcIixcbiAgICByb3c6IFwiZm9ybS1ncm91cCBibWQtZm9ybS1ncm91cFwiLFxuICAgIGl0ZW1WYWx1ZTogXCJzdl9xX210X2l0ZW1fdmFsdWUgZm9ybS1jb250cm9sXCIsXG4gIH0sXG4gIHJhZGlvZ3JvdXA6IHtcbiAgICByb290OiBcIlwiLFxuICAgIGl0ZW06IFwicmFkaW9cIixcbiAgICBpdGVtQ2hlY2tlZDogXCJjaGVja2VkXCIsXG4gICAgaXRlbUlubGluZTogXCJzdl9xX3JhZGlvZ3JvdXBfaW5saW5lXCIsXG4gICAgaXRlbURlY29yYXRvcjogXCJzdi1oaWRkZW5cIixcbiAgICBsYWJlbDogXCJcIixcbiAgICBsYWJlbENoZWNrZWQ6IFwiXCIsXG4gICAgaXRlbUNvbnRyb2w6IFwiXCIsXG4gICAgY29udHJvbExhYmVsOiBcInN2X3FfcmFkaW9ncm91cF9jb250cm9sX2xhYmVsXCIsXG4gICAgbWF0ZXJpYWxEZWNvcmF0b3I6IFwiYm1kLXJhZGlvXCIsXG4gICAgb3RoZXI6IFwic3ZfcV9yYWRpb2dyb3VwX290aGVyIGZvcm0tY29udHJvbFwiLFxuICAgIGNsZWFyQnV0dG9uOiBcInN2X3FfcmFkaW9ncm91cF9jbGVhciBidXR0b24gYnRuIGJ0bi1wcmltYXJ5XCIsXG4gICAgY29sdW1uOiBcInN2X3Ffc2VsZWN0X2NvbHVtblwiLFxuICB9LFxuICBidXR0b25ncm91cDoge1xuICAgIHJvb3Q6IFwic3YtYnV0dG9uLWdyb3VwXCIsXG4gICAgaXRlbTogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW1cIixcbiAgICBpdGVtSWNvbjogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0taWNvblwiLFxuICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLWRlY29yYXRvclwiLFxuICAgIGl0ZW1DYXB0aW9uOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbS1jYXB0aW9uXCIsXG4gICAgaXRlbVNlbGVjdGVkOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbS0tc2VsZWN0ZWRcIixcbiAgICBpdGVtSG92ZXI6IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLS1ob3ZlclwiLFxuICAgIGl0ZW1EaXNhYmxlZDogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tLWRpc2FibGVkXCIsXG4gICAgaXRlbUNvbnRyb2w6IFwic3YtdmlzdWFsbHloaWRkZW5cIixcbiAgfSxcbiAgaW1hZ2VwaWNrZXI6IHtcbiAgICByb290OiBcInN2X2ltZ3NlbFwiLFxuICAgIGl0ZW06IFwic3ZfcV9pbWdzZWxcIixcbiAgICBpdGVtQ2hlY2tlZDogXCJjaGVja2VkXCIsXG4gICAgaXRlbUlubGluZTogXCJzdl9xX2ltYWdlcGlja2VyX2lubGluZVwiLFxuICAgIGxhYmVsOiBcInN2X3FfaW1nc2VsX2xhYmVsXCIsXG4gICAgaXRlbUNvbnRyb2w6IFwic3ZfcV9pbWdzZWxfY29udHJvbF9pdGVtXCIsXG4gICAgaW1hZ2U6IFwic3ZfcV9pbWdzZWxfaW1hZ2VcIixcbiAgICBpdGVtVGV4dDogXCJzdl9xX2ltZ3NlbF90ZXh0XCIsXG4gICAgY2xlYXJCdXR0b246IFwic3ZfcV9yYWRpb2dyb3VwX2NsZWFyXCIsXG4gIH0sXG4gIHJhdGluZzoge1xuICAgIHJvb3Q6IFwiYnRuLWdyb3VwXCIsXG4gICAgaXRlbTogXCJidG4gYnRuLWRlZmF1bHQgYnRuLXNlY29uZGFyeVwiLFxuICAgIHNlbGVjdGVkOiBcImFjdGl2ZVwiLFxuICAgIG1pblRleHQ6IFwic3ZfcV9yYXRpbmdfbWluX3RleHRcIixcbiAgICBpdGVtVGV4dDogXCJzdl9xX3JhdGluZ19pdGVtX3RleHRcIixcbiAgICBtYXhUZXh0OiBcInN2X3FfcmF0aW5nX21heF90ZXh0XCIsXG4gICAgZGlzYWJsZWQ6IFwiXCIsXG4gIH0sXG4gIHRleHQ6IFwiZm9ybS1jb250cm9sXCIsXG4gIGV4cHJlc3Npb246IFwiZm9ybS1jb250cm9sXCIsXG4gIGZpbGU6IHtcbiAgICByb290OiBcImZvcm0tZ3JvdXAgYm1kLWZvcm0tZ3JvdXAgaXMtZmlsZWlucHV0IHN2X3FfZmlsZVwiLFxuICAgIHBsYWNlaG9sZGVySW5wdXQ6IFwiXCIsXG4gICAgcHJldmlldzogXCJzdl9xX2ZpbGVfcHJldmlld1wiLFxuICAgIHJlbW92ZUJ1dHRvbjogXCJzdl9xX2ZpbGVfcmVtb3ZlX2J1dHRvblwiLFxuICAgIGZpbGVJbnB1dDogXCJzdl9xX2ZpbGVfaW5wdXRcIixcbiAgICByZW1vdmVGaWxlOiBcInN2X3FfZmlsZV9yZW1vdmVcIixcbiAgICByZW1vdmVGaWxlU3ZnOiBcInN2LWhpZGRlblwiLFxuICAgIGZpbGVEZWNvcmF0b3I6IFwic3YtaGlkZGVuXCIsXG4gICAgZmlsZVNpZ25Cb3R0b206IFwic3YtaGlkZGVuXCIsXG4gICAgcmVtb3ZlQnV0dG9uQm90dG9tOiBcInN2LWhpZGRlblwiLFxuICAgIGRyYWdBcmVhUGxhY2Vob2xkZXI6IFwic3YtaGlkZGVuXCIsXG4gICAgZmlsZUxpc3Q6IFwiXCIsXG4gICAgZGVmYXVsdEltYWdlOiBcInN2LWhpZGRlblwiXG4gIH0sXG4gIHNpZ25hdHVyZXBhZDoge1xuICAgIHJvb3Q6IFwic3ZfcV9zaWduYXR1cmVwYWQgc2pzX3NwX2NvbnRhaW5lclwiLFxuICAgIGNvbnRyb2xzOiBcInNqc19zcF9jb250cm9sc1wiLFxuICAgIHBsYWNlaG9sZGVyOiBcInNqc19zcF9wbGFjZWhvbGRlclwiLFxuICAgIGNsZWFyQnV0dG9uOiBcInNqc19zcF9jbGVhclwiLFxuICB9LFxuICBzYXZlRGF0YToge1xuICAgIHJvb3Q6IFwiXCIsXG4gICAgc2F2aW5nOiBcImFsZXJ0IGFsZXJ0LWluZm9cIixcbiAgICBlcnJvcjogXCJhbGVydCBhbGVydC1kYW5nZXJcIixcbiAgICBzdWNjZXNzOiBcImFsZXJ0IGFsZXJ0LXN1Y2Nlc3NcIixcbiAgICBzYXZlQWdhaW5CdXR0b246IFwiXCIsXG4gIH0sXG4gIHdpbmRvdzoge1xuICAgIHJvb3Q6IFwibW9kYWwtY29udGVudFwiLFxuICAgIGJvZHk6IFwibW9kYWwtYm9keVwiLFxuICAgIGhlYWRlcjoge1xuICAgICAgcm9vdDogXCJtb2RhbC1oZWFkZXIgY2FyZC10aXRsZVwiLFxuICAgICAgdGl0bGU6IFwicHVsbC1sZWZ0XCIsXG4gICAgICBidXR0b246IFwiZ2x5cGhpY29uIHB1bGwtcmlnaHRcIixcbiAgICAgIGJ1dHRvbkV4cGFuZGVkOiBcImdseXBoaWNvbiBwdWxsLXJpZ2h0IGdseXBoaWNvbi1jaGV2cm9uLXVwXCIsXG4gICAgICBidXR0b25Db2xsYXBzZWQ6IFwiZ2x5cGhpY29uIHB1bGwtcmlnaHQgZ2x5cGhpY29uLWNoZXZyb24tZG93blwiLFxuICAgIH0sXG4gIH0sXG59O1xuKDxhbnk+c3VydmV5Q3NzKVtcImJvb3RzdHJhcG1hdGVyaWFsXCJdID0gZGVmYXVsdEJvb3RzdHJhcE1hdGVyaWFsQ3NzO1xuIiwiaW1wb3J0IHsgc3VydmV5Q3NzIH0gZnJvbSBcIi4vY3Nzc3RhbmRhcmRcIjtcbmV4cG9ydCB2YXIgbW9kZXJuQ3NzID0ge1xuICByb290OiBcInN2LXJvb3QtbW9kZXJuXCIsXG4gIGNvbnRhaW5lcjogXCJzdi1jb250YWluZXItbW9kZXJuXCIsXG4gIGhlYWRlcjogXCJzdi10aXRsZSBzdi1jb250YWluZXItbW9kZXJuX190aXRsZVwiLFxuICBib2R5OiBcInN2LWJvZHlcIixcbiAgYm9keUVtcHR5OiBcInN2LWJvZHkgc3YtYm9keS0tZW1wdHlcIixcbiAgZm9vdGVyOiBcInN2LWZvb3RlciBzdi1ib2R5X19mb290ZXIgc3YtY2xlYXJmaXhcIixcbiAgdGl0bGU6IFwiXCIsXG4gIGRlc2NyaXB0aW9uOiBcIlwiLFxuICBsb2dvOiBcInN2LWxvZ29cIixcbiAgbG9nb0ltYWdlOiBcInN2LWxvZ29fX2ltYWdlXCIsXG4gIGhlYWRlclRleHQ6IFwic3YtaGVhZGVyX190ZXh0XCIsXG4gIG5hdmlnYXRpb25CdXR0b246IFwiXCIsXG4gIGNvbXBsZXRlZFBhZ2U6IFwic3YtY29tcGxldGVkcGFnZVwiLFxuICBuYXZpZ2F0aW9uOiB7XG4gICAgY29tcGxldGU6IFwic3YtYnRuIHN2LWZvb3Rlcl9fY29tcGxldGUtYnRuXCIsXG4gICAgcHJldjogXCJzdi1idG4gc3YtZm9vdGVyX19wcmV2LWJ0blwiLFxuICAgIG5leHQ6IFwic3YtYnRuIHN2LWZvb3Rlcl9fbmV4dC1idG5cIixcbiAgICBzdGFydDogXCJzdi1idG4gc3YtZm9vdGVyX19zdGFydC1idG5cIixcbiAgICBwcmV2aWV3OiBcInN2LWJ0biBzdi1mb290ZXJfX3ByZXZpZXctYnRuXCIsXG4gICAgZWRpdDogXCJzdi1idG4gc3YtZm9vdGVyX19lZGl0LWJ0blwiLFxuICB9LFxuICBwYW5lbDoge1xuICAgIHRpdGxlOiBcInN2LXRpdGxlIHN2LXBhbmVsX190aXRsZVwiLFxuICAgIHRpdGxlRXhwYW5kYWJsZTogXCJzdi1wYW5lbF9fdGl0bGUtLWV4cGFuZGFibGVcIixcbiAgICB0aXRsZU9uRXJyb3I6IFwic3YtcGFuZWxfX3RpdGxlLS1lcnJvclwiLFxuICAgIGRlc2NyaXB0aW9uOiBcInN2LWRlc2NyaXB0aW9uIHN2LXBhbmVsX19kZXNjcmlwdGlvblwiLFxuICAgIGNvbnRhaW5lcjogXCJzdi1wYW5lbCBzdi1yb3dfX3BhbmVsXCIsXG4gICAgY29udGVudDogXCJzdi1wYW5lbF9fY29udGVudFwiLFxuICAgIGljb246IFwic3YtcGFuZWxfX2ljb25cIixcbiAgICBpY29uRXhwYW5kZWQ6IFwic3YtcGFuZWxfX2ljb24tLWV4cGFuZGVkXCIsXG4gICAgZm9vdGVyOiBcInN2LXBhbmVsX19mb290ZXJcIixcbiAgICByZXF1aXJlZFRleHQ6IFwic3YtcGFuZWxfX3JlcXVpcmVkLXRleHRcIixcbiAgICBudW1iZXI6IFwic3YtcXVlc3Rpb25fX251bVwiLFxuICB9LFxuICBwYW5lbGR5bmFtaWM6IHtcbiAgICByb290OiBcInN2LXBhbmVsZHluYW1pY1wiLFxuICAgIG5hdmlnYXRpb246IFwic3YtcGFuZWxkeW5hbWljX19uYXZpZ2F0aW9uXCIsXG4gICAgdGl0bGU6IFwic3YtdGl0bGUgc3YtcXVlc3Rpb25fX3RpdGxlXCIsXG4gICAgYnV0dG9uOiBcInN2LWJ0blwiLFxuICAgIGJ1dHRvblJlbW92ZTogXCJzdi1wYW5lbGR5bmFtaWNfX3JlbW92ZS1idG5cIixcbiAgICBidXR0b25SZW1vdmVSaWdodDogXCJzdi1wYW5lbGR5bmFtaWNfX3JlbW92ZS1idG4tLXJpZ2h0XCIsXG4gICAgYnV0dG9uQWRkOiBcInN2LXBhbmVsZHluYW1pY19fYWRkLWJ0blwiLFxuICAgIHByb2dyZXNzVG9wOiBcInN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3Mgc3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy0tdG9wXCIsXG4gICAgcHJvZ3Jlc3NCb3R0b206XG4gICAgICBcInN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3Mgc3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy0tYm90dG9tXCIsXG4gICAgYnV0dG9uUHJldjogXCJzdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuXCIsXG4gICAgYnV0dG9uTmV4dDogXCJzdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuXCIsXG4gICAgcHJvZ3Jlc3NDb250YWluZXI6IFwic3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy1jb250YWluZXJcIixcbiAgICBwcm9ncmVzczogXCJzdi1wcm9ncmVzc1wiLFxuICAgIHByb2dyZXNzQmFyOiBcInN2LXByb2dyZXNzX19iYXJcIixcbiAgICBwcm9ncmVzc1RleHQ6IFwic3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy10ZXh0XCIsXG4gICAgc2VwYXJhdG9yOiBcInN2LXBhbmVsZHluYW1pY19fc2VwYXJhdG9yXCIsXG4gICAgcGFuZWxXcmFwcGVyOiBcInN2LXBhbmVsZHluYW1pY19fcGFuZWwtd3JhcHBlclwiLFxuICAgIHBhbmVsV3JhcHBlckluUm93OiBcInN2LXBhbmVsZHluYW1pY19fcGFuZWwtd3JhcHBlci0taW4tcm93XCIsXG4gICAgc2VwYXJhdG9yVjI6IFwic3YtaGlkZGVuXCIsXG4gICAgZm9vdGVyOiBcInN2LWhpZGRlblwiXG4gIH0sXG4gIHByb2dyZXNzOiBcInN2LXByb2dyZXNzIHN2LWJvZHlfX3Byb2dyZXNzXCIsXG4gIHByb2dyZXNzQmFyOiBcInN2LXByb2dyZXNzX19iYXJcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcInN2LXByb2dyZXNzX190ZXh0XCIsXG4gIHByb2dyZXNzVGV4dEluQmFyOiBcInN2LWhpZGRlblwiLFxuICBwcm9ncmVzc0J1dHRvbnNDb250YWluZXJDZW50ZXI6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fY29udGFpbmVyLWNlbnRlclwiLFxuICBwcm9ncmVzc0J1dHRvbnNDb250YWluZXI6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fY29udGFpbmVyXCIsXG4gIHByb2dyZXNzQnV0dG9uc0ltYWdlQnV0dG9uTGVmdDogXCJzdl9wcm9ncmVzcy1idXR0b25zX19pbWFnZS1idXR0b24tbGVmdFwiLFxuICBwcm9ncmVzc0J1dHRvbnNJbWFnZUJ1dHRvblJpZ2h0OiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2ltYWdlLWJ1dHRvbi1yaWdodFwiLFxuICBwcm9ncmVzc0J1dHRvbnNJbWFnZUJ1dHRvbkhpZGRlbjogXCJzdl9wcm9ncmVzcy1idXR0b25zX19pbWFnZS1idXR0b24tLWhpZGRlblwiLFxuICBwcm9ncmVzc0J1dHRvbnNMaXN0Q29udGFpbmVyOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtY29udGFpbmVyXCIsXG4gIHByb2dyZXNzQnV0dG9uc0xpc3Q6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdFwiLFxuICBwcm9ncmVzc0J1dHRvbnNMaXN0RWxlbWVudFBhc3NlZDogXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLXBhc3NlZFwiLFxuICBwcm9ncmVzc0J1dHRvbnNMaXN0RWxlbWVudEN1cnJlbnQ6XG4gICAgXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLWN1cnJlbnRcIixcbiAgcHJvZ3Jlc3NCdXR0b25zTGlzdEVsZW1lbnROb25DbGlja2FibGU6XG4gICAgXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLW5vbmNsaWNrYWJsZVwiLFxuICBwcm9ncmVzc0J1dHRvbnNQYWdlVGl0bGU6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fcGFnZS10aXRsZVwiLFxuICBwcm9ncmVzc0J1dHRvbnNQYWdlRGVzY3JpcHRpb246IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fcGFnZS1kZXNjcmlwdGlvblwiLFxuICBwYWdlOiB7XG4gICAgcm9vdDogXCJzdi1wYWdlIHN2LWJvZHlfX3BhZ2VcIixcbiAgICB0aXRsZTogXCJzdi10aXRsZSBzdi1wYWdlX190aXRsZVwiLFxuICAgIGRlc2NyaXB0aW9uOiBcInN2LWRlc2NyaXB0aW9uIHN2LXBhZ2VfX2Rlc2NyaXB0aW9uXCIsXG4gIH0sXG4gIHBhZ2VUaXRsZTogXCJzdi10aXRsZSBzdi1wYWdlX190aXRsZVwiLFxuICBwYWdlRGVzY3JpcHRpb246IFwic3YtZGVzY3JpcHRpb24gc3YtcGFnZV9fZGVzY3JpcHRpb25cIixcbiAgcm93OiBcInN2LXJvdyBzdi1jbGVhcmZpeFwiLFxuICBxdWVzdGlvbjoge1xuICAgIG1haW5Sb290OiBcInN2LXF1ZXN0aW9uIHN2LXJvd19fcXVlc3Rpb25cIixcbiAgICBmbG93Um9vdDogXCJzdi1xdWVzdGlvbiBzdi1yb3dfX3F1ZXN0aW9uIHN2LXJvd19fcXVlc3Rpb24tLWZsb3dcIixcbiAgICBhc0NlbGw6IFwic3YtdGFibGVfX2NlbGxcIixcbiAgICBoZWFkZXI6IFwic3YtcXVlc3Rpb25fX2hlYWRlclwiLFxuICAgIGhlYWRlckxlZnQ6IFwic3YtcXVlc3Rpb25fX2hlYWRlci0tbG9jYXRpb24tLWxlZnRcIixcbiAgICBoZWFkZXJUb3A6IFwic3YtcXVlc3Rpb25fX2hlYWRlci0tbG9jYXRpb24tLXRvcFwiLFxuICAgIGhlYWRlckJvdHRvbTogXCJzdi1xdWVzdGlvbl9faGVhZGVyLS1sb2NhdGlvbi0tYm90dG9tXCIsXG4gICAgY29udGVudDogXCJzdi1xdWVzdGlvbl9fY29udGVudFwiLFxuICAgIGNvbnRlbnRMZWZ0OiBcInN2LXF1ZXN0aW9uX19jb250ZW50LS1sZWZ0XCIsXG4gICAgdGl0bGVMZWZ0Um9vdDogXCJcIixcbiAgICBhbnN3ZXJlZDogXCJzdi1xdWVzdGlvbi0tYW5zd2VyZWRcIixcbiAgICB0aXRsZU9uQW5zd2VyOiBcInN2LXF1ZXN0aW9uX190aXRsZS0tYW5zd2VyXCIsXG4gICAgdGl0bGVPbkVycm9yOiBcInN2LXF1ZXN0aW9uX190aXRsZS0tZXJyb3JcIixcbiAgICB0aXRsZTogXCJzdi10aXRsZSBzdi1xdWVzdGlvbl9fdGl0bGVcIixcbiAgICB0aXRsZUV4cGFuZGFibGU6IFwic3YtcXVlc3Rpb25fX3RpdGxlLS1leHBhbmRhYmxlXCIsXG4gICAgaWNvbjogXCJzdi1xdWVzdGlvbl9faWNvblwiLFxuICAgIGljb25FeHBhbmRlZDogXCJzdi1xdWVzdGlvbl9faWNvbi0tZXhwYW5kZWRcIixcbiAgICByZXF1aXJlZFRleHQ6IFwic3YtcXVlc3Rpb25fX3JlcXVpcmVkLXRleHRcIixcbiAgICBudW1iZXI6IFwic3YtcXVlc3Rpb25fX251bVwiLFxuICAgIGRlc2NyaXB0aW9uOiBcInN2LWRlc2NyaXB0aW9uIHN2LXF1ZXN0aW9uX19kZXNjcmlwdGlvblwiLFxuICAgIGRlc2NyaXB0aW9uVW5kZXJJbnB1dDogXCJzdi1kZXNjcmlwdGlvbiBzdi1xdWVzdGlvbl9fZGVzY3JpcHRpb25cIixcbiAgICBjb21tZW50OiBcInN2LWNvbW1lbnRcIixcbiAgICByZXF1aXJlZDogXCJzdi1xdWVzdGlvbi0tcmVxdWlyZWRcIixcbiAgICB0aXRsZVJlcXVpcmVkOiBcInN2LXF1ZXN0aW9uX190aXRsZS0tcmVxdWlyZWRcIixcbiAgICBpbmRlbnQ6IDIwLFxuICAgIGZvb3RlcjogXCJzdi1xdWVzdGlvbl9fZm9vdGVyXCIsXG4gICAgZm9ybUdyb3VwOiBcInN2LXF1ZXN0aW9uX19mb3JtLWdyb3VwXCIsXG4gICAgaGFzRXJyb3I6IFwiXCIsXG4gICAgZGlzYWJsZWQ6IFwic3YtcXVlc3Rpb24tLWRpc2FibGVkXCIsXG4gIH0sXG4gIGltYWdlOiB7IHJvb3Q6IFwic3YtaW1hZ2VcIiwgaW1hZ2U6IFwic3ZfaW1hZ2VfaW1hZ2VcIiB9LFxuICBlcnJvcjoge1xuICAgIHJvb3Q6IFwic3YtcXVlc3Rpb25fX2VyYm94XCIsXG4gICAgaWNvbjogXCJcIixcbiAgICBpdGVtOiBcIlwiLFxuICAgIGxvY2F0aW9uVG9wOiBcInN2LXF1ZXN0aW9uX19lcmJveC0tbG9jYXRpb24tLXRvcFwiLFxuICAgIGxvY2F0aW9uQm90dG9tOiBcInN2LXF1ZXN0aW9uX19lcmJveC0tbG9jYXRpb24tLWJvdHRvbVwiLFxuICB9LFxuICBjaGVja2JveDoge1xuICAgIHJvb3Q6IFwic3Ytc2VsZWN0YmFzZVwiLFxuICAgIGl0ZW06IFwic3YtaXRlbSBzdi1jaGVja2JveCBzdi1zZWxlY3RiYXNlX19pdGVtXCIsXG4gICAgaXRlbVNlbGVjdEFsbDogXCJzdi1jaGVja2JveC0tc2VsZWN0YWxsXCIsXG4gICAgaXRlbU5vbmU6IFwic3YtY2hlY2tib3gtLW5vbmVcIixcbiAgICBpdGVtRGlzYWJsZWQ6IFwic3YtaXRlbS0tZGlzYWJsZWQgc3YtY2hlY2tib3gtLWRpc2FibGVkXCIsXG4gICAgaXRlbUNoZWNrZWQ6IFwic3YtY2hlY2tib3gtLWNoZWNrZWRcIixcbiAgICBpdGVtSG92ZXI6IFwic3YtY2hlY2tib3gtLWFsbG93aG92ZXJcIixcbiAgICBpdGVtSW5saW5lOiBcInN2LXNlbGVjdGJhc2VfX2l0ZW0tLWlubGluZVwiLFxuICAgIGxhYmVsOiBcInN2LXNlbGVjdGJhc2VfX2xhYmVsXCIsXG4gICAgbGFiZWxDaGVja2VkOiBcIlwiLFxuICAgIGl0ZW1Db250cm9sOiBcInN2LXZpc3VhbGx5aGlkZGVuIHN2LWl0ZW1fX2NvbnRyb2xcIixcbiAgICBpdGVtRGVjb3JhdG9yOiBcInN2LWl0ZW1fX3N2ZyBzdi1jaGVja2JveF9fc3ZnXCIsXG4gICAgY29udHJvbExhYmVsOiBcInN2LWl0ZW1fX2NvbnRyb2wtbGFiZWxcIixcbiAgICBtYXRlcmlhbERlY29yYXRvcjogXCJzdi1pdGVtX19kZWNvcmF0b3Igc3Ytc2VsZWN0YmFzZV9fZGVjb3JhdG9yIHN2LWNoZWNrYm94X19kZWNvcmF0b3JcIixcbiAgICBvdGhlcjogXCJzdi1jb21tZW50IHN2LXF1ZXN0aW9uX19vdGhlclwiLFxuICAgIGNvbHVtbjogXCJzdi1zZWxlY3RiYXNlX19jb2x1bW5cIixcbiAgfSxcbiAgcmFua2luZzoge1xuICAgIHJvb3Q6IFwic3YtcmFua2luZ1wiLFxuICAgIHJvb3RNb2JpbGVNb2Q6IFwic3YtcmFua2luZy0tbW9iaWxlXCIsXG4gICAgcm9vdERyYWdNb2Q6IFwic3YtcmFua2luZy0tZHJhZ1wiLFxuICAgIGl0ZW06IFwic3YtcmFua2luZy1pdGVtXCIsXG4gICAgaXRlbUNvbnRlbnQ6IFwic3YtcmFua2luZy1pdGVtX19jb250ZW50XCIsXG4gICAgaXRlbUluZGV4OiBcInN2LXJhbmtpbmctaXRlbV9faW5kZXhcIixcbiAgICAvLyBpdGVtVGV4dDogXCJzdi1yYW5raW5nLWl0ZW1fX3RleHRcIixcbiAgICBjb250cm9sTGFiZWw6IFwic3YtcmFua2luZy1pdGVtX190ZXh0XCIsXG4gICAgaXRlbUdob3N0Tm9kZTogXCJzdi1yYW5raW5nLWl0ZW1fX2dob3N0XCIsXG4gICAgaXRlbUljb25Db250YWluZXI6IFwic3YtcmFua2luZy1pdGVtX19pY29uLWNvbnRhaW5lclwiLFxuICAgIGl0ZW1JY29uOiBcInN2LXJhbmtpbmctaXRlbV9faWNvblwiLFxuICAgIGl0ZW1JY29uSG92ZXJNb2Q6IFwic3YtcmFua2luZy1pdGVtX19pY29uLS1ob3ZlclwiLFxuICAgIGl0ZW1JY29uRm9jdXNNb2Q6IFwic3YtcmFua2luZy1pdGVtX19pY29uLS1mb2N1c1wiLFxuICAgIGl0ZW1HaG9zdE1vZDogXCJzdi1yYW5raW5nLWl0ZW0tLWdob3N0XCIsXG4gICAgaXRlbURyYWdNb2Q6IFwic3YtcmFua2luZy1pdGVtLS1kcmFnXCIsXG4gIH0sXG4gIHJhZGlvZ3JvdXA6IHtcbiAgICByb290OiBcInN2LXNlbGVjdGJhc2VcIixcbiAgICBpdGVtOiBcInN2LWl0ZW0gc3YtcmFkaW8gc3Ytc2VsZWN0YmFzZV9faXRlbVwiLFxuICAgIGl0ZW1JbmxpbmU6IFwic3Ytc2VsZWN0YmFzZV9faXRlbS0taW5saW5lXCIsXG4gICAgbGFiZWw6IFwic3Ytc2VsZWN0YmFzZV9fbGFiZWxcIixcbiAgICBsYWJlbENoZWNrZWQ6IFwiXCIsXG4gICAgaXRlbURpc2FibGVkOiBcInN2LWl0ZW0tLWRpc2FibGVkIHN2LXJhZGlvLS1kaXNhYmxlZFwiLFxuICAgIGl0ZW1DaGVja2VkOiBcInN2LXJhZGlvLS1jaGVja2VkXCIsXG4gICAgaXRlbUhvdmVyOiBcInN2LXJhZGlvLS1hbGxvd2hvdmVyXCIsXG4gICAgaXRlbUNvbnRyb2w6IFwic3YtdmlzdWFsbHloaWRkZW4gc3YtaXRlbV9fY29udHJvbFwiLFxuICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtaXRlbV9fc3ZnIHN2LXJhZGlvX19zdmdcIixcbiAgICBjb250cm9sTGFiZWw6IFwic3YtaXRlbV9fY29udHJvbC1sYWJlbFwiLFxuICAgIG1hdGVyaWFsRGVjb3JhdG9yOiBcInN2LWl0ZW1fX2RlY29yYXRvciBzdi1zZWxlY3RiYXNlX19kZWNvcmF0b3Igc3YtcmFkaW9fX2RlY29yYXRvclwiLFxuICAgIG90aGVyOiBcInN2LWNvbW1lbnQgc3YtcXVlc3Rpb25fX290aGVyXCIsXG4gICAgY2xlYXJCdXR0b246IFwic3YtYnRuIHN2LXNlbGVjdGJhc2VfX2NsZWFyLWJ0blwiLFxuICAgIGNvbHVtbjogXCJzdi1zZWxlY3RiYXNlX19jb2x1bW5cIixcbiAgfSxcbiAgYnV0dG9uZ3JvdXA6IHtcbiAgICByb290OiBcInN2LWJ1dHRvbi1ncm91cFwiLFxuICAgIGl0ZW06IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtXCIsXG4gICAgaXRlbUljb246IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLWljb25cIixcbiAgICBpdGVtRGVjb3JhdG9yOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbS1kZWNvcmF0b3JcIixcbiAgICBpdGVtQ2FwdGlvbjogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tY2FwdGlvblwiLFxuICAgIGl0ZW1TZWxlY3RlZDogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tLXNlbGVjdGVkXCIsXG4gICAgaXRlbUhvdmVyOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbS0taG92ZXJcIixcbiAgICBpdGVtRGlzYWJsZWQ6IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLS1kaXNhYmxlZFwiLFxuICAgIGl0ZW1Db250cm9sOiBcInN2LXZpc3VhbGx5aGlkZGVuXCIsXG4gIH0sXG4gIGJvb2xlYW46IHtcbiAgICByb290OiBcInN2X3FibG5cIixcbiAgICBzbWFsbDogXCJzdi1yb3dfX3F1ZXN0aW9uLS1zbWFsbFwiLFxuICAgIGl0ZW06IFwic3YtYm9vbGVhbiBzdi1pdGVtXCIsXG4gICAgY29udHJvbDogXCJzdi12aXN1YWxseWhpZGRlblwiLFxuICAgIGl0ZW1DaGVja2VkOiBcInN2LWJvb2xlYW4tLWNoZWNrZWRcIixcbiAgICBpdGVtSW5kZXRlcm1pbmF0ZTogXCJzdi1ib29sZWFuLS1pbmRldGVybWluYXRlXCIsXG4gICAgaXRlbURpc2FibGVkOiBcInN2LWl0ZW0tLWRpc2FibGVkIHN2LWJvb2xlYW4tLWRpc2FibGVkXCIsXG4gICAgc3dpdGNoOiBcInN2LWJvb2xlYW5fX3N3aXRjaFwiLFxuICAgIHNsaWRlcjogXCJzdi1ib29sZWFuX19zbGlkZXJcIixcbiAgICBzbGlkZXJUZXh0OiBcInN2LWhpZGRlblwiLFxuICAgIGxhYmVsOiBcInN2LWJvb2xlYW5fX2xhYmVsIFwiLFxuICAgIGRpc2FibGVkTGFiZWw6IFwic3YtYm9vbGVhbl9fbGFiZWwtLWRpc2FibGVkXCIsXG4gICAgbWF0ZXJpYWxEZWNvcmF0b3I6IFwic3YtaXRlbV9fZGVjb3JhdG9yIHN2LWJvb2xlYW5fX2RlY29yYXRvciBcIixcbiAgICBpdGVtRGVjb3JhdG9yOiBcInN2LWl0ZW1fX3N2ZyAgc3YtYm9vbGVhbl9fc3ZnXCIsXG4gICAgY2hlY2tlZFBhdGg6IFwic3YtYm9vbGVhbl9fY2hlY2tlZC1wYXRoXCIsXG4gICAgdW5jaGVja2VkUGF0aDogXCJzdi1ib29sZWFuX191bmNoZWNrZWQtcGF0aFwiLFxuICAgIGluZGV0ZXJtaW5hdGVQYXRoOiBcInN2LWJvb2xlYW5fX2luZGV0ZXJtaW5hdGUtcGF0aFwiLFxuICB9LFxuICB0ZXh0OiB7XG4gICAgcm9vdDogXCJzdi10ZXh0XCIsXG4gICAgc21hbGw6IFwic3Ytcm93X19xdWVzdGlvbi0tc21hbGxcIixcbiAgICBvbkVycm9yOiBcInN2LXRleHQtLWVycm9yXCIsXG4gIH0sXG4gIG11bHRpcGxldGV4dDoge1xuICAgIHJvb3Q6IFwic3YtbXVsdGlwbGV0ZXh0XCIsXG4gICAgaXRlbTogXCJzdi1tdWx0aXBsZXRleHRfX2l0ZW1cIixcbiAgICBpdGVtVGl0bGU6IFwic3YtbXVsdGlwbGV0ZXh0X19pdGVtLXRpdGxlXCIsXG4gICAgcm93OiBcInN2LW11bHRpcGxldGV4dF9fcm93XCIsXG4gICAgY2VsbDogXCJzdi1tdWx0aXBsZXRleHRfX2NlbGxcIixcbiAgfSxcbiAgZHJvcGRvd246IHtcbiAgICByb290OiBcIlwiLFxuICAgIHNtYWxsOiBcInN2LXJvd19fcXVlc3Rpb24tLXNtYWxsXCIsXG4gICAgY29udHJvbDogXCJzdi1kcm9wZG93blwiLFxuICAgIHNlbGVjdFdyYXBwZXI6IFwiXCIsXG4gICAgb3RoZXI6IFwic3YtY29tbWVudCBzdi1xdWVzdGlvbl9fb3RoZXJcIixcbiAgICBvbkVycm9yOiBcInN2LWRyb3Bkb3duLS1lcnJvclwiLFxuICB9LFxuICBpbWFnZXBpY2tlcjoge1xuICAgIHJvb3Q6IFwic3YtaW1hZ2VwaWNrZXJcIixcbiAgICBpdGVtOiBcInN2LWltYWdlcGlja2VyX19pdGVtXCIsXG4gICAgaXRlbUlubGluZTogXCJzdi1pbWFnZXBpY2tlcl9faXRlbS0taW5saW5lXCIsXG4gICAgaXRlbUNoZWNrZWQ6IFwic3YtaW1hZ2VwaWNrZXJfX2l0ZW0tLWNoZWNrZWRcIixcbiAgICBpdGVtRGlzYWJsZWQ6IFwic3YtaW1hZ2VwaWNrZXJfX2l0ZW0tLWRpc2FibGVkXCIsXG4gICAgaXRlbUhvdmVyOiBcInN2LWltYWdlcGlja2VyX19pdGVtLS1hbGxvd2hvdmVyXCIsXG4gICAgbGFiZWw6IFwic3YtaW1hZ2VwaWNrZXJfX2xhYmVsXCIsXG4gICAgaXRlbUNvbnRyb2w6IFwic3YtaW1hZ2VwaWNrZXJfX2NvbnRyb2xcIixcbiAgICBpbWFnZTogXCJzdi1pbWFnZXBpY2tlcl9faW1hZ2VcIixcbiAgICBpdGVtVGV4dDogXCJzdi1pbWFnZXBpY2tlcl9fdGV4dFwiLFxuICAgIGNsZWFyQnV0dG9uOiBcInN2LWJ0blwiLFxuICAgIG90aGVyOiBcInN2LWNvbW1lbnQgc3YtcXVlc3Rpb25fX290aGVyXCIsXG4gIH0sXG4gIG1hdHJpeDoge1xuICAgIHRhYmxlV3JhcHBlcjogXCJzdi1tYXRyaXhcIixcbiAgICByb290OiBcInN2LXRhYmxlIHN2LW1hdHJpeC1yb290XCIsXG4gICAgcm93RXJyb3I6IFwic3YtbWF0cml4X19yb3ctLWVycm9yXCIsXG4gICAgY2VsbDogXCJzdi10YWJsZV9fY2VsbCBzdi1tYXRyaXhfX2NlbGxcIixcbiAgICBoZWFkZXJDZWxsOiBcInN2LXRhYmxlX19jZWxsIHN2LXRhYmxlX19jZWxsLS1oZWFkZXJcIixcbiAgICBsYWJlbDogXCJzdi1pdGVtIHN2LXJhZGlvIHN2LW1hdHJpeF9fbGFiZWxcIixcbiAgICBpdGVtVmFsdWU6IFwic3YtdmlzdWFsbHloaWRkZW4gc3YtaXRlbV9fY29udHJvbCBzdi1yYWRpb19fY29udHJvbFwiLFxuICAgIGl0ZW1DaGVja2VkOiBcInN2LXJhZGlvLS1jaGVja2VkXCIsXG4gICAgaXRlbURpc2FibGVkOiBcInN2LWl0ZW0tLWRpc2FibGVkIHN2LXJhZGlvLS1kaXNhYmxlZFwiLFxuICAgIGl0ZW1Ib3ZlcjogXCJzdi1yYWRpby0tYWxsb3dob3ZlclwiLFxuICAgIG1hdGVyaWFsRGVjb3JhdG9yOiBcInN2LWl0ZW1fX2RlY29yYXRvciBzdi1yYWRpb19fZGVjb3JhdG9yXCIsXG4gICAgaXRlbURlY29yYXRvcjogXCJzdi1pdGVtX19zdmcgc3YtcmFkaW9fX3N2Z1wiLFxuICAgIGNlbGxUZXh0OiBcInN2LW1hdHJpeF9fdGV4dFwiLFxuICAgIGNlbGxUZXh0U2VsZWN0ZWQ6IFwic3YtbWF0cml4X190ZXh0LS1jaGVja2VkXCIsXG4gICAgY2VsbFRleHREaXNhYmxlZDogXCJzdi1tYXRyaXhfX3RleHQtLWRpc2FibGVkXCIsXG4gIH0sXG4gIG1hdHJpeGRyb3Bkb3duOiB7XG4gICAgcm9vdDogXCJzdi10YWJsZSBzdi1tYXRyaXhkcm9wZG93blwiLFxuICAgIGNlbGw6IFwic3YtdGFibGVfX2NlbGxcIixcbiAgICBoZWFkZXJDZWxsOiBcInN2LXRhYmxlX19jZWxsIHN2LXRhYmxlX19jZWxsLS1oZWFkZXJcIixcbiAgICByb3c6IFwic3YtdGFibGVfX3Jvd1wiLFxuICAgIHJvd0FkZGl0aW9uYWw6IFwic3YtdGFibGVfX3Jvdy0tYWRkaXRpb25hbFwiLFxuICAgIGRldGFpbFJvdzogXCJzdi10YWJsZV9fcm93LS1kZXRhaWxcIixcbiAgICBkZXRhaWxSb3dUZXh0OiBcInN2LXRhYmxlX19jZWxsLS1kZXRhaWwtcm93dGV4dFwiLFxuICAgIGRldGFpbENlbGw6IFwic3YtdGFibGVfX2NlbGwtLWRldGFpbFwiLFxuICAgIGNob2ljZUNlbGw6IFwic3YtdGFibGVfX2NlbGwtLWNob2ljZVwiLFxuICAgIGRldGFpbEJ1dHRvbjogXCJzdi10YWJsZV9fY2VsbC0tZGV0YWlsLWJ1dHRvblwiLFxuICAgIGRldGFpbEJ1dHRvbkV4cGFuZGVkOiBcInN2LXRhYmxlX19jZWxsLS1kZXRhaWwtYnV0dG9uLS1leHBhbmRlZFwiLFxuICAgIGRldGFpbEljb246IFwic3YtZGV0YWlsLXBhbmVsX19pY29uXCIsXG4gICAgZGV0YWlsSWNvbkV4cGFuZGVkOiBcInN2LWRldGFpbC1wYW5lbF9faWNvbi0tZXhwYW5kZWRcIixcbiAgICBkZXRhaWxQYW5lbENlbGw6IFwic3YtdGFibGVfX2NlbGwtLWRldGFpbC1wYW5lbFwiLFxuICAgIGFjdGlvbnNDZWxsOiBcInN2LXRhYmxlX19jZWxsIHN2LXRhYmxlX19jZWxsLS1hY3Rpb25zXCIsXG4gIH0sXG4gIG1hdHJpeGR5bmFtaWM6IHtcbiAgICByb290OiBcInN2LXRhYmxlIHN2LW1hdHJpeGR5bmFtaWNcIixcbiAgICBjZWxsOiBcInN2LXRhYmxlX19jZWxsXCIsXG4gICAgaGVhZGVyQ2VsbDogXCJzdi10YWJsZV9fY2VsbCBzdi10YWJsZV9fY2VsbC0taGVhZGVyXCIsXG4gICAgYnV0dG9uOiBcInN2LWJ0blwiLFxuICAgIGJ1dHRvbkFkZDogXCJzdi1tYXRyaXhkeW5hbWljX19hZGQtYnRuXCIsXG4gICAgYnV0dG9uUmVtb3ZlOiBcInN2LW1hdHJpeGR5bmFtaWNfX3JlbW92ZS1idG5cIixcbiAgICBpY29uQWRkOiBcIlwiLFxuICAgIGljb25SZW1vdmU6IFwiXCIsXG4gICAgaWNvbkRyYWc6IFwic3YtbWF0cml4ZHluYW1pY19fZHJhZy1pY29uXCIsXG4gICAgcm93OiBcInN2LXRhYmxlX19yb3dcIixcbiAgICBkZXRhaWxSb3c6IFwic3YtdGFibGVfX3Jvdy0tZGV0YWlsXCIsXG4gICAgZGV0YWlsQ2VsbDogXCJzdi10YWJsZV9fY2VsbC0tZGV0YWlsXCIsXG4gICAgY2hvaWNlQ2VsbDogXCJzdi10YWJsZV9fY2VsbC0tY2hvaWNlXCIsXG4gICAgZGV0YWlsQnV0dG9uOiBcInN2LXRhYmxlX19jZWxsLS1kZXRhaWwtYnV0dG9uXCIsXG4gICAgZGV0YWlsQnV0dG9uRXhwYW5kZWQ6IFwic3YtdGFibGVfX2NlbGwtLWRldGFpbC1idXR0b24tLWV4cGFuZGVkXCIsXG4gICAgZGV0YWlsSWNvbjogXCJzdi1kZXRhaWwtcGFuZWxfX2ljb25cIixcbiAgICBkZXRhaWxJY29uRXhwYW5kZWQ6IFwic3YtZGV0YWlsLXBhbmVsX19pY29uLS1leHBhbmRlZFwiLFxuICAgIGRldGFpbFBhbmVsQ2VsbDogXCJzdi10YWJsZV9fY2VsbC0tZGV0YWlsLXBhbmVsXCIsXG4gICAgYWN0aW9uc0NlbGw6IFwic3YtdGFibGVfX2NlbGwgc3YtdGFibGVfX2NlbGwtLWFjdGlvbnNcIixcbiAgICBlbXB0eVJvd3NTZWN0aW9uOiBcInN2LXRhYmxlX19lbXB0eS0tcm93cy0tc2VjdGlvblwiLFxuICAgIGVtcHR5Um93c1RleHQ6IFwic3YtdGFibGVfX2VtcHR5LS1yb3dzLS10ZXh0XCIsXG4gICAgZW1wdHlSb3dzQnV0dG9uOiBcIlwiLFxuICAgIGRyYWdEcm9wR2hvc3RQb3NpdGlvblRvcDogXCJzdi1tYXRyaXhfX2RyYWctZHJvcC1naG9zdC1wb3NpdGlvbi10b3BcIixcbiAgICBkcmFnRHJvcEdob3N0UG9zaXRpb25Cb3R0b206IFwic3YtbWF0cml4X19kcmFnLWRyb3AtZ2hvc3QtcG9zaXRpb24tYm90dG9tXCIsXG4gIH0sXG4gIHJhdGluZzoge1xuICAgIHJvb3Q6IFwic3YtcmF0aW5nXCIsXG4gICAgaXRlbTogXCJzdi1yYXRpbmdfX2l0ZW1cIixcbiAgICBzZWxlY3RlZDogXCJzdi1yYXRpbmdfX2l0ZW0tLXNlbGVjdGVkXCIsXG4gICAgbWluVGV4dDogXCJzdi1yYXRpbmdfX21pbi10ZXh0XCIsXG4gICAgaXRlbVRleHQ6IFwic3YtcmF0aW5nX19pdGVtLXRleHRcIixcbiAgICBtYXhUZXh0OiBcInN2LXJhdGluZ19fbWF4LXRleHRcIixcbiAgICBpdGVtRGlzYWJsZWQ6IFwic3YtcmF0aW5nLS1kaXNhYmxlZFwiLFxuICB9LFxuICBjb21tZW50OiB7XG4gICAgcm9vdDogXCJzdi1jb21tZW50XCIsXG4gICAgc21hbGw6IFwic3Ytcm93X19xdWVzdGlvbi0tc21hbGxcIixcbiAgfSxcbiAgZXhwcmVzc2lvbjogXCJcIixcbiAgZmlsZToge1xuICAgIHJvb3Q6IFwic3YtZmlsZVwiLFxuICAgIG90aGVyOiBcInN2LWNvbW1lbnQgc3YtcXVlc3Rpb25fX290aGVyXCIsXG4gICAgcGxhY2Vob2xkZXJJbnB1dDogXCJzdi12aXN1YWxseWhpZGRlblwiLFxuICAgIHByZXZpZXc6IFwic3YtZmlsZV9fcHJldmlld1wiLFxuICAgIGZpbGVTaWduOiBcInN2LWhpZGRlblwiLFxuICAgIGZpbGVTaWduQm90dG9tOiBcInN2LWZpbGVfX3NpZ25cIixcbiAgICBmaWxlRGVjb3JhdG9yOiBcInN2LWZpbGVfX2RlY29yYXRvclwiLFxuICAgIGZpbGVJbnB1dDogXCJzdi12aXN1YWxseWhpZGRlblwiLFxuICAgIG5vRmlsZUNob3NlbjogXCJzdi1kZXNjcmlwdGlvbiBzdi1maWxlX19uby1maWxlLWNob3NlblwiLFxuICAgIGNob29zZUZpbGU6IFwic3YtYnRuIHN2LWZpbGVfX2Nob29zZS1idG5cIixcbiAgICBjb250cm9sRGlzYWJsZWQ6IFwic3YtZmlsZV9fY2hvb3NlLWJ0bi0tZGlzYWJsZWRcIixcbiAgICByZW1vdmVCdXR0b246IFwic3YtaGlkZGVuXCIsXG4gICAgcmVtb3ZlQnV0dG9uQm90dG9tOiBcInN2LWJ0biBzdi1maWxlX19jbGVhbi1idG5cIixcbiAgICByZW1vdmVGaWxlOiBcInN2LWhpZGRlblwiLFxuICAgIHJlbW92ZUZpbGVTdmc6IFwic3YtZmlsZV9fcmVtb3ZlLXN2Z1wiLFxuICAgIHdyYXBwZXI6IFwic3YtZmlsZV9fd3JhcHBlclwiLFxuICAgIGRyYWdBcmVhUGxhY2Vob2xkZXI6IFwic3YtaGlkZGVuXCIsXG4gICAgZmlsZUxpc3Q6IFwiXCIsXG4gICAgZGVmYXVsdEltYWdlOiBcInN2LWhpZGRlblwiXG4gIH0sXG4gIHNpZ25hdHVyZXBhZDoge1xuICAgIHJvb3Q6IFwic3Ytc2lnbmF0dXJlcGFkIHNqc19zcF9jb250YWluZXJcIixcbiAgICBzbWFsbDogXCJzdi1yb3dfX3F1ZXN0aW9uLS1zbWFsbFwiLFxuICAgIGNvbnRyb2xzOiBcInNqc19zcF9jb250cm9sc1wiLFxuICAgIHBsYWNlaG9sZGVyOiBcInNqc19zcF9wbGFjZWhvbGRlclwiLFxuICAgIGNsZWFyQnV0dG9uOiBcInNqc19zcF9jbGVhclwiLFxuICB9LFxuICBzYXZlRGF0YToge1xuICAgIHJvb3Q6IFwiXCIsXG4gICAgc2F2aW5nOiBcIlwiLFxuICAgIGVycm9yOiBcIlwiLFxuICAgIHN1Y2Nlc3M6IFwiXCIsXG4gICAgc2F2ZUFnYWluQnV0dG9uOiBcIlwiLFxuICB9LFxuICB3aW5kb3c6IHtcbiAgICByb290OiBcInN2X3dpbmRvd1wiLFxuICAgIGJvZHk6IFwic3Zfd2luZG93X2NvbnRlbnRcIixcbiAgICBoZWFkZXI6IHtcbiAgICAgIHJvb3Q6IFwic3Zfd2luZG93X3RpdGxlXCIsXG4gICAgICB0aXRsZTogXCJcIixcbiAgICAgIGJ1dHRvbjogXCJcIixcbiAgICAgIGJ1dHRvbkV4cGFuZGVkOiBcIlwiLFxuICAgICAgYnV0dG9uQ29sbGFwc2VkOiBcIlwiLFxuICAgIH0sXG4gIH0sXG59O1xuXG5zdXJ2ZXlDc3NbXCJtb2Rlcm5cIl0gPSBtb2Rlcm5Dc3M7XG4iLCJleHBvcnQgdmFyIHN1cnZleUNzczogYW55ID0ge1xyXG4gIGN1cnJlbnRUeXBlOiBcIlwiLFxyXG4gIGdldENzczogZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgbG9jID0gdGhpcy5jdXJyZW50VHlwZSA/IHRoaXNbdGhpcy5jdXJyZW50VHlwZV0gOiBkZWZhdWx0U3RhbmRhcmRDc3M7XHJcbiAgICBpZiAoIWxvYykgbG9jID0gZGVmYXVsdFN0YW5kYXJkQ3NzO1xyXG4gICAgcmV0dXJuIGxvYztcclxuICB9XHJcbn07XHJcblxyXG5leHBvcnQgdmFyIGRlZmF1bHRTdGFuZGFyZENzcyA9IHtcclxuICByb290OiBcInN2X21haW4gc3ZfZGVmYXVsdF9jc3NcIixcclxuICBjb250YWluZXI6IFwic3ZfY29udGFpbmVyXCIsXHJcbiAgaGVhZGVyOiBcInN2X2hlYWRlclwiLFxyXG4gIGJvZHk6IFwic3ZfYm9keVwiLFxyXG4gIGJvZHlFbXB0eTogXCJzdl9ib2R5IHN2X2JvZHlfZW1wdHlcIixcclxuICBmb290ZXI6IFwic3ZfbmF2XCIsXHJcbiAgdGl0bGU6IFwiXCIsXHJcbiAgZGVzY3JpcHRpb246IFwiXCIsXHJcbiAgbG9nbzogXCJzdl9sb2dvXCIsXHJcbiAgbG9nb0ltYWdlOiBcInN2X2xvZ29fX2ltYWdlXCIsXHJcbiAgaGVhZGVyVGV4dDogXCJzdl9oZWFkZXJfX3RleHRcIixcclxuICBuYXZpZ2F0aW9uQnV0dG9uOiBcIlwiLFxyXG4gIGNvbXBsZXRlZFBhZ2U6IFwic3ZfY29tcGxldGVkX3BhZ2VcIixcclxuICBuYXZpZ2F0aW9uOiB7XHJcbiAgICBjb21wbGV0ZTogXCJzdl9jb21wbGV0ZV9idG5cIixcclxuICAgIHByZXY6IFwic3ZfcHJldl9idG5cIixcclxuICAgIG5leHQ6IFwic3ZfbmV4dF9idG5cIixcclxuICAgIHN0YXJ0OiBcInN2X3N0YXJ0X2J0blwiLFxyXG4gICAgcHJldmlldzogXCJzdl9wcmV2aWV3X2J0blwiLFxyXG4gICAgZWRpdDogXCJzdl9lZGl0X2J0blwiLFxyXG4gIH0sXHJcbiAgcHJvZ3Jlc3M6IFwic3ZfcHJvZ3Jlc3NcIixcclxuICBwcm9ncmVzc0JhcjogXCJzdl9wcm9ncmVzc19iYXJcIixcclxuICBwcm9ncmVzc1RleHRJbkJhcjogXCJzdi1oaWRkZW5cIixcclxuICBwcm9ncmVzc0J1dHRvbnNDb250YWluZXJDZW50ZXI6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fY29udGFpbmVyLWNlbnRlclwiLFxyXG4gIHByb2dyZXNzQnV0dG9uc0NvbnRhaW5lcjogXCJzdl9wcm9ncmVzcy1idXR0b25zX19jb250YWluZXJcIixcclxuICBwcm9ncmVzc0J1dHRvbnNJbWFnZUJ1dHRvbkxlZnQ6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19faW1hZ2UtYnV0dG9uLWxlZnRcIixcclxuICBwcm9ncmVzc0J1dHRvbnNJbWFnZUJ1dHRvblJpZ2h0OiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2ltYWdlLWJ1dHRvbi1yaWdodFwiLFxyXG4gIHByb2dyZXNzQnV0dG9uc0ltYWdlQnV0dG9uSGlkZGVuOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2ltYWdlLWJ1dHRvbi0taGlkZGVuXCIsXHJcbiAgcHJvZ3Jlc3NCdXR0b25zTGlzdENvbnRhaW5lcjogXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWNvbnRhaW5lclwiLFxyXG4gIHByb2dyZXNzQnV0dG9uc0xpc3Q6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdFwiLFxyXG4gIHByb2dyZXNzQnV0dG9uc0xpc3RFbGVtZW50UGFzc2VkOiBcInN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtZWxlbWVudC0tcGFzc2VkXCIsXHJcbiAgcHJvZ3Jlc3NCdXR0b25zTGlzdEVsZW1lbnRDdXJyZW50OlxyXG4gICAgXCJzdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLWN1cnJlbnRcIixcclxuICBwcm9ncmVzc0J1dHRvbnNMaXN0RWxlbWVudE5vbkNsaWNrYWJsZTpcclxuICAgIFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1lbGVtZW50LS1ub25jbGlja2FibGVcIixcclxuICBwcm9ncmVzc0J1dHRvbnNQYWdlVGl0bGU6IFwic3ZfcHJvZ3Jlc3MtYnV0dG9uc19fcGFnZS10aXRsZVwiLFxyXG4gIHByb2dyZXNzQnV0dG9uc1BhZ2VEZXNjcmlwdGlvbjogXCJzdl9wcm9ncmVzcy1idXR0b25zX19wYWdlLWRlc2NyaXB0aW9uXCIsXHJcbiAgcGFnZToge1xyXG4gICAgcm9vdDogXCJzdl9wX3Jvb3RcIixcclxuICAgIHRpdGxlOiBcInN2X3BhZ2VfdGl0bGVcIixcclxuICAgIGRlc2NyaXB0aW9uOiBcIlwiLFxyXG4gIH0sXHJcbiAgLy8gVE9ETzogbW92ZSB0byB0aGUgcGFnZSBvYmplY3RcclxuICBwYWdlVGl0bGU6IFwic3ZfcGFnZV90aXRsZVwiLFxyXG4gIHBhZ2VEZXNjcmlwdGlvbjogXCJcIixcclxuICByb3c6IFwic3Zfcm93XCIsXHJcbiAgcXVlc3Rpb246IHtcclxuICAgIG1haW5Sb290OiBcInN2X3Egc3ZfcXN0blwiLFxyXG4gICAgZmxvd1Jvb3Q6IFwic3ZfcV9mbG93IHN2X3FzdG5cIixcclxuICAgIGhlYWRlcjogXCJcIixcclxuICAgIGhlYWRlckxlZnQ6IFwidGl0bGUtbGVmdFwiLFxyXG4gICAgY29udGVudDogXCJcIixcclxuICAgIGNvbnRlbnRMZWZ0OiBcImNvbnRlbnQtbGVmdFwiLFxyXG4gICAgdGl0bGVMZWZ0Um9vdDogXCJzdl9xc3RuX2xlZnRcIixcclxuICAgIHJlcXVpcmVkVGV4dDogXCJzdl9xX3JlcXVpcmVkX3RleHRcIixcclxuICAgIHRpdGxlOiBcInN2X3FfdGl0bGVcIixcclxuICAgIHRpdGxlRXhwYW5kYWJsZTogXCJzdl9xX3RpdGxlX2V4cGFuZGFibGVcIixcclxuICAgIG51bWJlcjogXCJzdl9xX251bVwiLFxyXG4gICAgZGVzY3JpcHRpb246IFwic3ZfcV9kZXNjcmlwdGlvblwiLFxyXG4gICAgY29tbWVudDogXCJcIixcclxuICAgIHJlcXVpcmVkOiBcIlwiLFxyXG4gICAgdGl0bGVSZXF1aXJlZDogXCJcIixcclxuICAgIGhhc0Vycm9yOiBcIlwiLFxyXG4gICAgaW5kZW50OiAyMCxcclxuICAgIGZvb3RlcjogXCJzdl9xX2Zvb3RlclwiLFxyXG4gICAgZm9ybUdyb3VwOiBcImZvcm0tZ3JvdXBcIixcclxuICAgIGFzQ2VsbDogXCJzdl9tYXRyaXhfY2VsbFwiLFxyXG4gICAgaWNvbjogXCJzdl9xdWVzdGlvbl9pY29uXCIsXHJcbiAgICBpY29uRXhwYW5kZWQ6IFwic3ZfZXhwYW5kZWRcIixcclxuICAgIGRpc2FibGVkOiBcInN2X3EtLWRpc2FibGVkXCIsXHJcbiAgfSxcclxuICBwYW5lbDoge1xyXG4gICAgdGl0bGU6IFwic3ZfcF90aXRsZVwiLFxyXG4gICAgdGl0bGVFeHBhbmRhYmxlOiBcInN2X3BfdGl0bGVfZXhwYW5kYWJsZVwiLFxyXG4gICAgdGl0bGVPbkVycm9yOiBcIlwiLFxyXG4gICAgaWNvbjogXCJzdl9wYW5lbF9pY29uXCIsXHJcbiAgICBpY29uRXhwYW5kZWQ6IFwic3ZfZXhwYW5kZWRcIixcclxuICAgIGRlc2NyaXB0aW9uOiBcInN2X3BfZGVzY3JpcHRpb25cIixcclxuICAgIGNvbnRhaW5lcjogXCJzdl9wX2NvbnRhaW5lclwiLFxyXG4gICAgZm9vdGVyOiBcInN2X3BfZm9vdGVyXCIsXHJcbiAgICBudW1iZXI6IFwic3ZfcV9udW1cIixcclxuICAgIHJlcXVpcmVkVGV4dDogXCJzdl9xX3JlcXVpcmVkX3RleHRcIixcclxuICB9LFxyXG4gIGVycm9yOiB7XHJcbiAgICByb290OiBcInN2X3FfZXJib3hcIixcclxuICAgIGljb246IFwiXCIsXHJcbiAgICBpdGVtOiBcIlwiLFxyXG4gICAgbG9jYXRpb25Ub3A6IFwic3ZfcXN0bl9lcnJvcl90b3BcIixcclxuICAgIGxvY2F0aW9uQm90dG9tOiBcInN2X3FzdG5fZXJyb3JfYm90dG9tXCIsXHJcbiAgfSxcclxuXHJcbiAgYm9vbGVhbjoge1xyXG4gICAgcm9vdDogXCJzdl9xY2JjIHN2X3FibG5cIixcclxuICAgIGl0ZW06IFwic3YtYm9vbGVhblwiLFxyXG4gICAgY29udHJvbDogXCJzdi12aXN1YWxseWhpZGRlblwiLFxyXG4gICAgaXRlbUNoZWNrZWQ6IFwic3YtYm9vbGVhbi0tY2hlY2tlZCBjaGVja2VkXCIsXHJcbiAgICBpdGVtSW5kZXRlcm1pbmF0ZTogXCJzdi1ib29sZWFuLS1pbmRldGVybWluYXRlXCIsXHJcbiAgICBpdGVtRGlzYWJsZWQ6IFwic3YtYm9vbGVhbi0tZGlzYWJsZWRcIixcclxuICAgIHN3aXRjaDogXCJzdi1ib29sZWFuX19zd2l0Y2hcIixcclxuICAgIHNsaWRlcjogXCJzdi1ib29sZWFuX19zbGlkZXJcIixcclxuICAgIHNsaWRlclRleHQ6IFwic3YtaGlkZGVuXCIsXHJcbiAgICBsYWJlbDogXCJzdi1ib29sZWFuX19sYWJlbCBcIixcclxuICAgIGRpc2FibGVkTGFiZWw6IFwic3YtYm9vbGVhbl9fbGFiZWwtLWRpc2FibGVkXCIsXHJcbiAgICBtYXRlcmlhbERlY29yYXRvcjogXCJzdi1pdGVtX19kZWNvcmF0b3Igc3YtYm9vbGVhbl9fZGVjb3JhdG9yIFwiLFxyXG4gICAgaXRlbURlY29yYXRvcjogXCJzdi1pdGVtX19zdmcgIHN2LWJvb2xlYW5fX3N2Z1wiLFxyXG4gICAgY2hlY2tlZFBhdGg6IFwic3YtYm9vbGVhbl9fY2hlY2tlZC1wYXRoXCIsXHJcbiAgICB1bmNoZWNrZWRQYXRoOiBcInN2LWJvb2xlYW5fX3VuY2hlY2tlZC1wYXRoXCIsXHJcbiAgICBpbmRldGVybWluYXRlUGF0aDogXCJzdi1ib29sZWFuX19pbmRldGVybWluYXRlLXBhdGhcIixcclxuICB9LFxyXG4gIGNoZWNrYm94OiB7XHJcbiAgICByb290OiBcInN2X3FjYmMgc3ZfcWNieFwiLFxyXG4gICAgaXRlbTogXCJzdl9xX2NoZWNrYm94XCIsXHJcbiAgICBpdGVtU2VsZWN0QWxsOiBcInN2X3FfY2hlY2tib3hfc2VsZWN0YWxsXCIsXHJcbiAgICBpdGVtTm9uZTogXCJzdl9xX2NoZWNrYm94X25vbmVcIixcclxuICAgIGl0ZW1DaGVja2VkOiBcImNoZWNrZWRcIixcclxuICAgIGl0ZW1JbmxpbmU6IFwic3ZfcV9jaGVja2JveF9pbmxpbmVcIixcclxuICAgIGxhYmVsOiBcInN2X3FfY2hlY2tib3hfbGFiZWxcIixcclxuICAgIGxhYmVsQ2hlY2tlZDogXCJcIixcclxuICAgIGl0ZW1Db250cm9sOiBcInN2X3FfY2hlY2tib3hfY29udHJvbF9pdGVtXCIsXHJcbiAgICBpdGVtRGVjb3JhdG9yOiBcInN2LWhpZGRlblwiLFxyXG4gICAgY29udHJvbExhYmVsOiBcInN2X3FfY2hlY2tib3hfY29udHJvbF9sYWJlbFwiLFxyXG4gICAgbWF0ZXJpYWxEZWNvcmF0b3I6IFwiY2hlY2tib3gtbWF0ZXJpYWxcIixcclxuICAgIG90aGVyOiBcInN2X3Ffb3RoZXIgc3ZfcV9jaGVja2JveF9vdGhlclwiLFxyXG4gICAgY29sdW1uOiBcInN2X3Ffc2VsZWN0X2NvbHVtblwiLFxyXG4gIH0sXHJcbiAgcmFua2luZzoge1xyXG4gICAgcm9vdDogXCJzdi1yYW5raW5nXCIsXHJcbiAgICByb290TW9iaWxlTW9kOiBcInN2LXJhbmtpbmctLW1vYmlsZVwiLFxyXG4gICAgcm9vdERyYWdNb2Q6IFwic3YtcmFua2luZy0tZHJhZ1wiLFxyXG4gICAgaXRlbTogXCJzdi1yYW5raW5nLWl0ZW1cIixcclxuICAgIGl0ZW1Db250ZW50OiBcInN2LXJhbmtpbmctaXRlbV9fY29udGVudFwiLFxyXG4gICAgaXRlbUluZGV4OiBcInN2LXJhbmtpbmctaXRlbV9faW5kZXhcIixcclxuICAgIC8vIGl0ZW1UZXh0OiBcInN2LXJhbmtpbmctaXRlbV9fdGV4dFwiLFxyXG4gICAgY29udHJvbExhYmVsOiBcInN2LXJhbmtpbmctaXRlbV9fdGV4dFwiLFxyXG4gICAgaXRlbUdob3N0Tm9kZTogXCJzdi1yYW5raW5nLWl0ZW1fX2dob3N0XCIsXHJcbiAgICBpdGVtSWNvbkNvbnRhaW5lcjogXCJzdi1yYW5raW5nLWl0ZW1fX2ljb24tY29udGFpbmVyXCIsXHJcbiAgICBpdGVtSWNvbjogXCJzdi1yYW5raW5nLWl0ZW1fX2ljb25cIixcclxuICAgIGl0ZW1JY29uSG92ZXJNb2Q6IFwic3YtcmFua2luZy1pdGVtX19pY29uLS1ob3ZlclwiLFxyXG4gICAgaXRlbUljb25Gb2N1c01vZDogXCJzdi1yYW5raW5nLWl0ZW1fX2ljb24tLWZvY3VzXCIsXHJcbiAgICBpdGVtR2hvc3RNb2Q6IFwic3YtcmFua2luZy1pdGVtLS1naG9zdFwiLFxyXG4gICAgaXRlbURyYWdNb2Q6IFwic3YtcmFua2luZy1pdGVtLS1kcmFnXCIsXHJcbiAgfSxcclxuICBjb21tZW50OiBcIlwiLFxyXG4gIGRyb3Bkb3duOiB7XHJcbiAgICByb290OiBcIlwiLFxyXG4gICAgY29udHJvbDogXCJzdl9xX2Ryb3Bkb3duX2NvbnRyb2xcIixcclxuICAgIHNlbGVjdFdyYXBwZXI6IFwic3Zfc2VsZWN0X3dyYXBwZXJcIixcclxuICAgIG90aGVyOiBcInN2X3FfZGRfb3RoZXJcIixcclxuICB9LFxyXG4gIGh0bWw6IHsgcm9vdDogXCJcIiB9LFxyXG4gIGltYWdlOiB7IHJvb3Q6IFwic3ZfcV9pbWFnZVwiLCBpbWFnZTogXCJzdl9pbWFnZV9pbWFnZVwiIH0sXHJcbiAgbWF0cml4OiB7XHJcbiAgICByb290OiBcInN2X3FfbWF0cml4XCIsXHJcbiAgICBsYWJlbDogXCJzdl9xX21fbGFiZWxcIixcclxuICAgIGl0ZW1DaGVja2VkOiBcImNoZWNrZWRcIixcclxuICAgIGl0ZW1EZWNvcmF0b3I6IFwic3YtaGlkZGVuXCIsXHJcbiAgICBjZWxsOiBcInN2X3FfbV9jZWxsXCIsXHJcbiAgICBjZWxsVGV4dDogXCJzdl9xX21fY2VsbF90ZXh0XCIsXHJcbiAgICBjZWxsVGV4dFNlbGVjdGVkOiBcInN2X3FfbV9jZWxsX3NlbGVjdGVkXCIsXHJcbiAgICBjZWxsTGFiZWw6IFwic3ZfcV9tX2NlbGxfbGFiZWxcIixcclxuICB9LFxyXG4gIG1hdHJpeGRyb3Bkb3duOiB7XHJcbiAgICByb290OiBcInN2X3FfbWF0cml4X2Ryb3Bkb3duXCIsXHJcbiAgICBjZWxsOiBcInN2X21hdHJpeF9jZWxsXCIsXHJcbiAgICBoZWFkZXJDZWxsOiBcInN2X21hdHJpeF9jZWxsX2hlYWRlclwiLFxyXG4gICAgcm93OiBcInN2X21hdHJpeF9yb3dcIixcclxuICAgIHJvd0FkZGl0aW9uYWw6IFwic3YtbWF0cml4X19yb3ctLWFkZGl0aW9uYWxcIixcclxuICAgIGRldGFpbFJvdzogXCJzdl9tYXRyaXhfZGV0YWlsX3Jvd1wiLFxyXG4gICAgZGV0YWlsUm93VGV4dDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxfcm93dGV4dFwiLFxyXG4gICAgZGV0YWlsQ2VsbDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxcIixcclxuICAgIGNob2ljZUNlbGw6IFwic3YtdGFibGVfX2NlbGwtLWNob2ljZVwiLFxyXG4gICAgZGV0YWlsQnV0dG9uOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9idXR0b25cIixcclxuICAgIGRldGFpbEJ1dHRvbkV4cGFuZGVkOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9idXR0b25fZXhwYW5kZWRcIixcclxuICAgIGRldGFpbEljb246IFwic3ZfZGV0YWlsX3BhbmVsX2ljb25cIixcclxuICAgIGRldGFpbEljb25FeHBhbmRlZDogXCJzdl9kZXRhaWxfZXhwYW5kZWRcIixcclxuICAgIGRldGFpbFBhbmVsQ2VsbDogXCJzdl9tYXRyaXhfY2VsbF9kZXRhaWxfcGFuZWxcIixcclxuICAgIGFjdGlvbnNDZWxsOiBcInN2X21hdHJpeF9jZWxsIHN2X21hdHJpeF9jZWxsX2FjdGlvbnNcIixcclxuICB9LFxyXG4gIG1hdHJpeGR5bmFtaWM6IHtcclxuICAgIHJvb3Q6IFwic3ZfcV9tYXRyaXhfZHluYW1pY1wiLFxyXG4gICAgYnV0dG9uOiBcInN2X21hdHJpeF9keW5hbWljX2J1dHRvblwiLFxyXG4gICAgYnV0dG9uQWRkOiBcIlwiLFxyXG4gICAgYnV0dG9uUmVtb3ZlOiBcIlwiLFxyXG4gICAgaWNvbkFkZDogXCJcIixcclxuICAgIGljb25SZW1vdmU6IFwiXCIsXHJcbiAgICBpY29uRHJhZzogXCJzdi1tYXRyaXhkeW5hbWljX19kcmFnLWljb25cIixcclxuICAgIGNlbGw6IFwic3ZfbWF0cml4X2NlbGxcIixcclxuICAgIGhlYWRlckNlbGw6IFwic3ZfbWF0cml4X2NlbGxfaGVhZGVyXCIsXHJcbiAgICByb3c6IFwic3ZfbWF0cml4X3Jvd1wiLFxyXG4gICAgZGV0YWlsUm93OiBcInN2X21hdHJpeF9kZXRhaWxfcm93XCIsXHJcbiAgICBkZXRhaWxDZWxsOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbFwiLFxyXG4gICAgY2hvaWNlQ2VsbDogXCJzdi10YWJsZV9fY2VsbC0tY2hvaWNlXCIsXHJcbiAgICBkZXRhaWxCdXR0b246IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsX2J1dHRvblwiLFxyXG4gICAgZGV0YWlsQnV0dG9uRXhwYW5kZWQ6IFwic3ZfbWF0cml4X2NlbGxfZGV0YWlsX2J1dHRvbl9leHBhbmRlZFwiLFxyXG4gICAgZGV0YWlsSWNvbjogXCJzdl9kZXRhaWxfcGFuZWxfaWNvblwiLFxyXG4gICAgZGV0YWlsSWNvbkV4cGFuZGVkOiBcInN2X2RldGFpbF9leHBhbmRlZFwiLFxyXG4gICAgZGV0YWlsUGFuZWxDZWxsOiBcInN2X21hdHJpeF9jZWxsX2RldGFpbF9wYW5lbFwiLFxyXG4gICAgYWN0aW9uc0NlbGw6IFwic3ZfbWF0cml4X2NlbGwgc3ZfbWF0cml4X2NlbGxfYWN0aW9uc1wiLFxyXG4gICAgZW1wdHlSb3dzU2VjdGlvbjogXCJzdl9tYXRyaXhfZW1wdHlfcm93c19zZWN0aW9uXCIsXHJcbiAgICBlbXB0eVJvd3NUZXh0OiBcInN2X21hdHJpeF9lbXB0eV9yb3dzX3RleHRcIixcclxuICAgIGVtcHR5Um93c0J1dHRvbjogXCJcIixcclxuICAgIGRyYWdEcm9wR2hvc3RQb3NpdGlvblRvcDogXCJzdi1tYXRyaXhfX2RyYWctZHJvcC1naG9zdC1wb3NpdGlvbi10b3BcIixcclxuICAgIGRyYWdEcm9wR2hvc3RQb3NpdGlvbkJvdHRvbTogXCJzdi1tYXRyaXhfX2RyYWctZHJvcC1naG9zdC1wb3NpdGlvbi1ib3R0b21cIixcclxuICB9LFxyXG4gIHBhbmVsZHluYW1pYzoge1xyXG4gICAgcm9vdDogXCJzdl9wYW5lbF9keW5hbWljXCIsXHJcbiAgICB0aXRsZTogXCJzdl9wX3RpdGxlXCIsXHJcbiAgICBidXR0b246IFwiXCIsXHJcbiAgICBidXR0b25BZGQ6IFwic3YtcGFuZWxkeW5hbWljX19hZGQtYnRuXCIsXHJcbiAgICBidXR0b25SZW1vdmU6IFwic3ZfcF9yZW1vdmVfYnRuXCIsXHJcbiAgICBidXR0b25SZW1vdmVSaWdodDogXCJzdl9wX3JlbW92ZV9idG5fcmlnaHRcIixcclxuICAgIGJ1dHRvblByZXY6IFwic3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0blwiLFxyXG4gICAgYnV0dG9uTmV4dDogXCJzdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuXCIsXHJcbiAgICBwcm9ncmVzc0NvbnRhaW5lcjogXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLWNvbnRhaW5lclwiLFxyXG4gICAgcHJvZ3Jlc3M6IFwic3YtcHJvZ3Jlc3NcIixcclxuICAgIHByb2dyZXNzQmFyOiBcInN2LXByb2dyZXNzX19iYXJcIixcclxuICAgIHByb2dyZXNzVGV4dDogXCJzdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLXRleHRcIixcclxuICAgIHBhbmVsV3JhcHBlcjogXCJzdl9wX3dyYXBwZXJcIixcclxuICAgIHBhbmVsV3JhcHBlckluUm93OiBcInN2X3Bfd3JhcHBlcl9pbl9yb3dcIixcclxuICAgIHNlcGFyYXRvclYyOiBcInN2LWhpZGRlblwiLFxyXG4gICAgZm9vdGVyOiBcInN2LWhpZGRlblwiXHJcbiAgfSxcclxuICBtdWx0aXBsZXRleHQ6IHtcclxuICAgIHJvb3Q6IFwic3ZfcV9tdFwiLFxyXG4gICAgaXRlbVRpdGxlOiBcInN2X3FfbXRfdGl0bGVcIixcclxuICAgIHJvdzogXCJzdl9xX210X3Jvd1wiLFxyXG4gICAgaXRlbVZhbHVlOiBcInN2X3FfbXRfaXRlbV92YWx1ZSBzdl9xX3RleHRfcm9vdFwiLFxyXG4gIH0sXHJcbiAgcmFkaW9ncm91cDoge1xyXG4gICAgcm9vdDogXCJzdl9xY2JjXCIsXHJcbiAgICBpdGVtOiBcInN2X3FfcmFkaW9ncm91cFwiLFxyXG4gICAgaXRlbUNoZWNrZWQ6IFwiY2hlY2tlZFwiLFxyXG4gICAgaXRlbUlubGluZTogXCJzdl9xX3JhZGlvZ3JvdXBfaW5saW5lXCIsXHJcbiAgICBpdGVtRGVjb3JhdG9yOiBcInN2LWhpZGRlblwiLFxyXG4gICAgbGFiZWw6IFwic3ZfcV9yYWRpb2dyb3VwX2xhYmVsXCIsXHJcbiAgICBsYWJlbENoZWNrZWQ6IFwiXCIsXHJcbiAgICBpdGVtQ29udHJvbDogXCJzdl9xX3JhZGlvZ3JvdXBfY29udHJvbF9pdGVtXCIsXHJcbiAgICBjb250cm9sTGFiZWw6IFwiXCIsXHJcbiAgICBtYXRlcmlhbERlY29yYXRvcjogXCJjaXJjbGVcIixcclxuICAgIG90aGVyOiBcInN2X3Ffb3RoZXIgc3ZfcV9yYWRpb2dyb3VwX290aGVyXCIsXHJcbiAgICBjbGVhckJ1dHRvbjogXCJzdl9xX3JhZGlvZ3JvdXBfY2xlYXJcIixcclxuICAgIGNvbHVtbjogXCJzdl9xX3NlbGVjdF9jb2x1bW5cIixcclxuICB9LFxyXG4gIGJ1dHRvbmdyb3VwOiB7XHJcbiAgICByb290OiBcInN2LWJ1dHRvbi1ncm91cFwiLFxyXG4gICAgaXRlbTogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW1cIixcclxuICAgIGl0ZW1JY29uOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbS1pY29uXCIsXHJcbiAgICBpdGVtRGVjb3JhdG9yOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbS1kZWNvcmF0b3JcIixcclxuICAgIGl0ZW1DYXB0aW9uOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbS1jYXB0aW9uXCIsXHJcbiAgICBpdGVtSG92ZXI6IFwic3YtYnV0dG9uLWdyb3VwX19pdGVtLS1ob3ZlclwiLFxyXG4gICAgaXRlbVNlbGVjdGVkOiBcInN2LWJ1dHRvbi1ncm91cF9faXRlbS0tc2VsZWN0ZWRcIixcclxuICAgIGl0ZW1EaXNhYmxlZDogXCJzdi1idXR0b24tZ3JvdXBfX2l0ZW0tLWRpc2FibGVkXCIsXHJcbiAgICBpdGVtQ29udHJvbDogXCJzdi12aXN1YWxseWhpZGRlblwiLFxyXG4gIH0sXHJcbiAgaW1hZ2VwaWNrZXI6IHtcclxuICAgIHJvb3Q6IFwic3ZfaW1nc2VsXCIsXHJcbiAgICBpdGVtOiBcInN2X3FfaW1nc2VsXCIsXHJcbiAgICBpdGVtQ2hlY2tlZDogXCJjaGVja2VkXCIsXHJcbiAgICBsYWJlbDogXCJzdl9xX2ltZ3NlbF9sYWJlbFwiLFxyXG4gICAgaXRlbUNvbnRyb2w6IFwic3ZfcV9pbWdzZWxfY29udHJvbF9pdGVtXCIsXHJcbiAgICBpbWFnZTogXCJzdl9xX2ltZ3NlbF9pbWFnZVwiLFxyXG4gICAgaXRlbUlubGluZTogXCJzdl9xX2ltYWdlcGlja2VyX2lubGluZVwiLFxyXG4gICAgaXRlbVRleHQ6IFwic3ZfcV9pbWdzZWxfdGV4dFwiLFxyXG4gICAgY2xlYXJCdXR0b246IFwic3ZfcV9yYWRpb2dyb3VwX2NsZWFyXCIsXHJcbiAgfSxcclxuICByYXRpbmc6IHtcclxuICAgIHJvb3Q6IFwic3ZfcV9yYXRpbmdcIixcclxuICAgIGl0ZW06IFwic3ZfcV9yYXRpbmdfaXRlbVwiLFxyXG4gICAgc2VsZWN0ZWQ6IFwiYWN0aXZlXCIsXHJcbiAgICBtaW5UZXh0OiBcInN2X3FfcmF0aW5nX21pbl90ZXh0XCIsXHJcbiAgICBpdGVtVGV4dDogXCJzdl9xX3JhdGluZ19pdGVtX3RleHRcIixcclxuICAgIG1heFRleHQ6IFwic3ZfcV9yYXRpbmdfbWF4X3RleHRcIixcclxuICB9LFxyXG4gIHRleHQ6IFwic3ZfcV90ZXh0X3Jvb3RcIixcclxuICBleHByZXNzaW9uOiBcIlwiLFxyXG4gIGZpbGU6IHtcclxuICAgIHJvb3Q6IFwic3ZfcV9maWxlXCIsXHJcbiAgICBwbGFjZWhvbGRlcklucHV0OiBcInN2LXZpc3VhbGx5aGlkZGVuXCIsXHJcbiAgICBwcmV2aWV3OiBcInN2X3FfZmlsZV9wcmV2aWV3XCIsXHJcbiAgICByZW1vdmVCdXR0b246IFwic3ZfcV9maWxlX3JlbW92ZV9idXR0b25cIixcclxuICAgIGZpbGVJbnB1dDogXCJzdi12aXN1YWxseWhpZGRlblwiLFxyXG4gICAgcmVtb3ZlRmlsZTogXCJzdl9xX2ZpbGVfcmVtb3ZlXCIsXHJcbiAgICByZW1vdmVGaWxlU3ZnOiBcInN2LWhpZGRlblwiLFxyXG4gICAgZmlsZURlY29yYXRvcjogXCJzdi1maWxlX19kZWNvcmF0b3JcIixcclxuICAgIGZpbGVTaWduQm90dG9tOiBcInN2LWhpZGRlblwiLFxyXG4gICAgcmVtb3ZlQnV0dG9uQm90dG9tOiBcInN2LWhpZGRlblwiLFxyXG4gICAgY2hvb3NlRmlsZTogXCJzdl9xX2ZpbGVfY2hvb3NlX2J1dHRvblwiLFxyXG4gICAgbm9GaWxlQ2hvc2VuOiBcInN2X3FfZmlsZV9wbGFjZWhvbGRlclwiLFxyXG4gICAgZHJhZ0FyZWFQbGFjZWhvbGRlcjogXCJzdi1oaWRkZW5cIixcclxuICAgIGZpbGVMaXN0OiBcIlwiLFxyXG4gICAgZGVmYXVsdEltYWdlOiBcInN2LWhpZGRlblwiLFxyXG4gIH0sXHJcbiAgc2lnbmF0dXJlcGFkOiB7XHJcbiAgICByb290OiBcInN2X3Ffc2lnbmF0dXJlcGFkIHNqc19zcF9jb250YWluZXJcIixcclxuICAgIGNvbnRyb2xzOiBcInNqc19zcF9jb250cm9sc1wiLFxyXG4gICAgcGxhY2Vob2xkZXI6IFwic2pzX3NwX3BsYWNlaG9sZGVyXCIsXHJcbiAgICBjbGVhckJ1dHRvbjogXCJzanNfc3BfY2xlYXJcIixcclxuICB9LFxyXG4gIHNhdmVEYXRhOiB7XHJcbiAgICByb290OiBcIlwiLFxyXG4gICAgc2F2aW5nOiBcIlwiLFxyXG4gICAgZXJyb3I6IFwiXCIsXHJcbiAgICBzdWNjZXNzOiBcIlwiLFxyXG4gICAgc2F2ZUFnYWluQnV0dG9uOiBcIlwiLFxyXG4gIH0sXHJcbiAgd2luZG93OiB7XHJcbiAgICByb290OiBcInN2X3dpbmRvd1wiLFxyXG4gICAgYm9keTogXCJzdl93aW5kb3dfY29udGVudFwiLFxyXG4gICAgaGVhZGVyOiB7XHJcbiAgICAgIHJvb3Q6IFwic3Zfd2luZG93X3RpdGxlXCIsXHJcbiAgICAgIHRpdGxlOiBcIlwiLFxyXG4gICAgICBidXR0b246IFwiXCIsXHJcbiAgICAgIGJ1dHRvbkV4cGFuZGVkOiBcIlwiLFxyXG4gICAgICBidXR0b25Db2xsYXBzZWQ6IFwiXCIsXHJcbiAgICB9LFxyXG4gIH0sXHJcbn07XHJcblxyXG5zdXJ2ZXlDc3NbXCJzdGFuZGFyZFwiXSA9IGRlZmF1bHRTdGFuZGFyZENzcztcclxuIiwiaW1wb3J0IHsgc3VydmV5Q3NzIH0gZnJvbSBcIi4vY3Nzc3RhbmRhcmRcIjtcblxuZXhwb3J0IHZhciBkZWZhdWx0VjJDc3MgPSB7XG4gIHJvb3Q6IFwic2Qtcm9vdC1tb2Rlcm5cIixcbiAgY29udGFpbmVyOiBcInNkLWNvbnRhaW5lci1tb2Rlcm5cIixcbiAgaGVhZGVyOiBcInNkLXRpdGxlIHNkLWNvbnRhaW5lci1tb2Rlcm5fX3RpdGxlXCIsXG4gIGJvZHk6IFwic2QtYm9keVwiLFxuICBib2R5RW1wdHk6IFwic2QtYm9keSBzZC1ib2R5LS1lbXB0eVwiLFxuICBmb290ZXI6IFwic2QtZm9vdGVyIHNkLWJvZHlfX25hdmlnYXRpb24gc2QtY2xlYXJmaXhcIixcbiAgdGl0bGU6IFwic2QtdGl0bGVcIixcbiAgZGVzY3JpcHRpb246IFwic2QtZGVzY3JpcHRpb25cIixcbiAgbG9nbzogXCJzZC1sb2dvXCIsXG4gIGxvZ29JbWFnZTogXCJzZC1sb2dvX19pbWFnZVwiLFxuICBoZWFkZXJUZXh0OiBcInNkLWhlYWRlcl9fdGV4dFwiLFxuICBuYXZpZ2F0aW9uQnV0dG9uOiBcIlwiLFxuICBjb21wbGV0ZWRQYWdlOiBcInNkLWNvbXBsZXRlZHBhZ2VcIixcbiAgbmF2aWdhdGlvbjoge1xuICAgIGNvbXBsZXRlOiBcInNkLWJ0biBzZC1idG4tLWFjdGlvbiBzZC1uYXZpZ2F0aW9uX19jb21wbGV0ZS1idG5cIixcbiAgICBwcmV2OiBcInNkLWJ0biBzZC1uYXZpZ2F0aW9uX19wcmV2LWJ0blwiLFxuICAgIG5leHQ6IFwic2QtYnRuIHNkLW5hdmlnYXRpb25fX25leHQtYnRuXCIsXG4gICAgc3RhcnQ6IFwic2QtYnRuIHNkLW5hdmlnYXRpb25fX3N0YXJ0LWJ0blwiLFxuICAgIHByZXZpZXc6IFwic2QtYnRuIHNkLW5hdmlnYXRpb25fX3ByZXZpZXctYnRuXCIsXG4gICAgZWRpdDogXCJzZC1idG4gc2QtbmF2aWdhdGlvbl9fZWRpdC1idG5cIlxuICB9LFxuICBwYW5lbDoge1xuICAgIHRpdGxlOiBcInNkLXRpdGxlIHNkLXBhbmVsX190aXRsZVwiLFxuICAgIHRpdGxlRXhwYW5kYWJsZTogXCJzZC1wYW5lbF9fdGl0bGUtLWV4cGFuZGFibGVcIixcbiAgICB0aXRsZU9uRXhwYW5kOiBcInNkLXBhbmVsX190aXRsZS0tZXhwYW5kZWRcIixcbiAgICB0aXRsZU9uRXJyb3I6IFwic2QtcGFuZWxfX3RpdGxlLS1lcnJvclwiLFxuICAgIGRlc2NyaXB0aW9uOiBcInNkLWRlc2NyaXB0aW9uIHNkLXBhbmVsX19kZXNjcmlwdGlvblwiLFxuICAgIGNvbnRhaW5lcjogXCJzZC1lbGVtZW50LXdpdGgtZnJhbWUgc2QtcGFuZWwgc2Qtcm93X19wYW5lbFwiLFxuICAgIGNvbnRlbnQ6IFwic2QtcGFuZWxfX2NvbnRlbnRcIixcbiAgICBpY29uOiBcInNkLXBhbmVsX19pY29uXCIsXG4gICAgaWNvbkV4cGFuZGVkOiBcInNkLXBhbmVsX19pY29uLS1leHBhbmRlZFwiLFxuICAgIGZvb3RlcjogXCJzZC1wYW5lbF9fZm9vdGVyXCIsXG4gICAgcmVxdWlyZWRUZXh0OiBcInNkLXBhbmVsX19yZXF1aXJlZC10ZXh0XCJcbiAgfSxcbiAgcGFuZWxkeW5hbWljOiB7XG4gICAgbWFpblJvb3Q6IFwic2QtZWxlbWVudC13aXRoLWZyYW1lIHNkLWVsZW1lbnQtd2l0aC1mcmFtZS0tcGFuZWxkeW5hbWljIHNkLXF1ZXN0aW9uIHNkLXJvd19fcXVlc3Rpb25cIixcbiAgICByb290OiBcInNkLXBhbmVsZHluYW1pY1wiLFxuICAgIG5hdmlnYXRpb246IFwic2QtcGFuZWxkeW5hbWljX19uYXZpZ2F0aW9uXCIsXG4gICAgdGl0bGU6IFwic2QtdGl0bGUgc2QtcXVlc3Rpb25fX3RpdGxlXCIsXG4gICAgYnV0dG9uOiBcInNkLXBhbmVsZHluYW1pY19fYnRuXCIsXG4gICAgYnV0dG9uUmVtb3ZlOiBcInNkLXBhbmVsZHluYW1pY19fcmVtb3ZlLWJ0blwiLFxuICAgIGJ1dHRvbkFkZDogXCJzZC1wYW5lbGR5bmFtaWNfX2FkZC1idG5cIixcbiAgICBwcm9ncmVzc1RvcDogXCJzZC1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzIHNkLXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtLXRvcFwiLFxuICAgIHByb2dyZXNzQm90dG9tOlxuICAgICAgXCJzZC1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzIHNkLXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtLWJvdHRvbVwiLFxuICAgIGJ1dHRvblByZXY6IFwic2QtcGFuZWxkeW5hbWljX19wcmV2LWJ0blwiLFxuICAgIGJ1dHRvbk5leHQ6IFwic2QtcGFuZWxkeW5hbWljX19uZXh0LWJ0blwiLFxuICAgIHByb2dyZXNzQ29udGFpbmVyOiBcInNkLXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtY29udGFpbmVyXCIsXG4gICAgcHJvZ3Jlc3M6IFwic2QtcHJvZ3Jlc3NcIixcbiAgICBwcm9ncmVzc0JhcjogXCJzZC1wcm9ncmVzc19fYmFyXCIsXG4gICAgcHJvZ3Jlc3NUZXh0OiBcInNkLXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtdGV4dFwiLFxuICAgIHNlcGFyYXRvcjogXCJzZC1wYW5lbGR5bmFtaWNfX3NlcGFyYXRvclwiLFxuICAgIHNlcGFyYXRvclYyOiBcInNkLXBhbmVsZHluYW1pY19fc2VwYXJhdG9yXCIsXG4gICAgcGFuZWxXcmFwcGVyOiBcInNkLXBhbmVsZHluYW1pY19fcGFuZWwtd3JhcHBlclwiLFxuICAgIGZvb3RlcjogXCJzZC1wYW5lbGR5bmFtaWNfX2Zvb3RlclwiLFxuICAgIGZvb3RlckJ1dHRvbnNDb250YWluZXI6IFwic2QtcGFuZWxkeW5hbWljX19idXR0b25zLWNvbnRhaW5lclwiLFxuICAgIHBhbmVsV3JhcHBlckluUm93OiBcInNkLXBhbmVsZHluYW1pY19fcGFuZWwtd3JhcHBlci0taW4tcm93XCJcbiAgfSxcbiAgcHJvZ3Jlc3M6IFwic2QtcHJvZ3Jlc3Mgc2QtYm9keV9fcHJvZ3Jlc3NcIixcbiAgcHJvZ3Jlc3NCYXI6IFwic2QtcHJvZ3Jlc3NfX2JhclwiLFxuICBwcm9ncmVzc1RleHQ6IFwic2QtcHJvZ3Jlc3NfX3RleHRcIixcbiAgcHJvZ3Jlc3NUZXh0SW5CYXI6IFwic2QtaGlkZGVuXCIsXG4gIHBhZ2U6IHtcbiAgICByb290OiBcInNkLXBhZ2Ugc2QtYm9keV9fcGFnZVwiLFxuICAgIHRpdGxlOiBcInNkLXRpdGxlIHNkLXBhZ2VfX3RpdGxlXCIsXG4gICAgZGVzY3JpcHRpb246IFwic2QtZGVzY3JpcHRpb24gc2QtcGFnZV9fZGVzY3JpcHRpb25cIlxuICB9LFxuICBwYWdlVGl0bGU6IFwic2QtdGl0bGUgc2QtcGFnZV9fdGl0bGVcIixcbiAgcGFnZURlc2NyaXB0aW9uOiBcInNkLWRlc2NyaXB0aW9uIHNkLXBhZ2VfX2Rlc2NyaXB0aW9uXCIsXG4gIHJvdzogXCJzZC1yb3cgc2QtY2xlYXJmaXhcIixcbiAgcm93TXVsdGlwbGU6IFwic2Qtcm93LS1tdWx0aXBsZVwiLFxuICBxdWVzdGlvbjoge1xuICAgIG1haW5Sb290OiBcInNkLWVsZW1lbnQtd2l0aC1mcmFtZSBzZC1xdWVzdGlvbiBzZC1yb3dfX3F1ZXN0aW9uXCIsXG4gICAgZmxvd1Jvb3Q6IFwic2QtZWxlbWVudC13aXRoLWZyYW1lIHNkLXF1ZXN0aW9uIHNkLXJvd19fcXVlc3Rpb24gc2Qtcm93X19xdWVzdGlvbi0tZmxvd1wiLFxuICAgIGFzQ2VsbDogXCJzZC10YWJsZV9fY2VsbFwiLFxuICAgIGFuc3dlcmVkOiBcInNkLXF1ZXN0aW9uLS1hbnN3ZXJlZFwiLFxuICAgIGhlYWRlcjogXCJzZC1xdWVzdGlvbl9faGVhZGVyXCIsXG4gICAgaGVhZGVyTGVmdDogXCJzZC1xdWVzdGlvbl9faGVhZGVyLS1sb2NhdGlvbi0tbGVmdFwiLFxuICAgIGhlYWRlclRvcDogXCJzZC1xdWVzdGlvbl9faGVhZGVyLS1sb2NhdGlvbi0tdG9wXCIsXG4gICAgaGVhZGVyQm90dG9tOiBcInNkLXF1ZXN0aW9uX19oZWFkZXItLWxvY2F0aW9uLS1ib3R0b21cIixcbiAgICBjb250ZW50OiBcInNkLXF1ZXN0aW9uX19jb250ZW50XCIsXG4gICAgY29udGVudExlZnQ6IFwic2QtcXVlc3Rpb25fX2NvbnRlbnQtLWxlZnRcIixcbiAgICB0aXRsZUxlZnRSb290OiBcIlwiLFxuICAgIHRpdGxlT25BbnN3ZXI6IFwic2QtcXVlc3Rpb25fX3RpdGxlLS1hbnN3ZXJcIixcbiAgICB0aXRsZU9uRXJyb3I6IFwic2QtcXVlc3Rpb25fX3RpdGxlLS1lcnJvclwiLFxuICAgIHRpdGxlOiBcInNkLXRpdGxlIHNkLXF1ZXN0aW9uX190aXRsZVwiLFxuICAgIHJlcXVpcmVkVGV4dDogXCJzZC1xdWVzdGlvbl9fcmVxdWlyZWQtdGV4dFwiLFxuICAgIG51bWJlcjogXCJzZC1xdWVzdGlvbl9fbnVtXCIsXG4gICAgZGVzY3JpcHRpb246IFwic2QtZGVzY3JpcHRpb24gc2QtcXVlc3Rpb25fX2Rlc2NyaXB0aW9uXCIsXG4gICAgZGVzY3JpcHRpb25VbmRlcklucHV0OiBcInNkLWRlc2NyaXB0aW9uIHNkLXF1ZXN0aW9uX19kZXNjcmlwdGlvblwiLFxuICAgIGNvbW1lbnQ6IFwic2QtaW5wdXQgc2QtY29tbWVudFwiLFxuICAgIG90aGVyOiBcInNkLWlucHV0IHNkLWNvbW1lbnRcIixcbiAgICByZXF1aXJlZDogXCJzZC1xdWVzdGlvbi0tcmVxdWlyZWRcIixcbiAgICB0aXRsZVJlcXVpcmVkOiBcInNkLXF1ZXN0aW9uX190aXRsZS0tcmVxdWlyZWRcIixcbiAgICBpbmRlbnQ6IDIwLFxuICAgIGZvb3RlcjogXCJzZC1xdWVzdGlvbl9fZm9vdGVyXCIsXG4gICAgZm9ybUdyb3VwOiBcInNkLXF1ZXN0aW9uX19mb3JtLWdyb3VwXCIsXG4gICAgaGFzRXJyb3I6IFwiXCIsXG4gICAgZGlzYWJsZWQ6IFwic2QtcXVlc3Rpb24tLWRpc2FibGVkXCJcbiAgfSxcbiAgaW1hZ2U6IHsgcm9vdDogXCJzZC1pbWFnZVwiLCBpbWFnZTogXCJzdl9pbWFnZV9pbWFnZVwiIH0sXG4gIGVycm9yOiB7XG4gICAgcm9vdDogXCJzZC1xdWVzdGlvbl9fZXJib3hcIixcbiAgICBpY29uOiBcIlwiLFxuICAgIGl0ZW06IFwiXCIsXG4gICAgbG9jYXRpb25Ub3A6IFwic2QtcXVlc3Rpb25fX2VyYm94LS1sb2NhdGlvbi0tdG9wXCIsXG4gICAgbG9jYXRpb25Cb3R0b206IFwic2QtcXVlc3Rpb25fX2VyYm94LS1sb2NhdGlvbi0tYm90dG9tXCJcbiAgfSxcbiAgY2hlY2tib3g6IHtcbiAgICByb290OiBcInNkLXNlbGVjdGJhc2VcIixcbiAgICBpdGVtOiBcInNkLWl0ZW0gc2QtY2hlY2tib3ggc2Qtc2VsZWN0YmFzZV9faXRlbVwiLFxuICAgIGl0ZW1TZWxlY3RBbGw6IFwic2QtY2hlY2tib3gtLXNlbGVjdGFsbFwiLFxuICAgIGl0ZW1Ob25lOiBcInNkLWNoZWNrYm94LS1ub25lXCIsXG4gICAgaXRlbURpc2FibGVkOiBcInNkLWl0ZW0tLWRpc2FibGVkIHNkLWNoZWNrYm94LS1kaXNhYmxlZFwiLFxuICAgIGl0ZW1DaGVja2VkOiBcInNkLWl0ZW0tLWNoZWNrZWQgc2QtY2hlY2tib3gtLWNoZWNrZWRcIixcbiAgICBpdGVtSG92ZXI6IFwic2QtaXRlbS0tYWxsb3dob3ZlciBzZC1jaGVja2JveC0tYWxsb3dob3ZlclwiLFxuICAgIGl0ZW1JbmxpbmU6IFwic2Qtc2VsZWN0YmFzZV9faXRlbS0taW5saW5lXCIsXG4gICAgbGFiZWw6IFwic2Qtc2VsZWN0YmFzZV9fbGFiZWxcIixcbiAgICBsYWJlbENoZWNrZWQ6IFwiXCIsXG4gICAgaXRlbUNvbnRyb2w6IFwic2QtdmlzdWFsbHloaWRkZW4gc2QtaXRlbV9fY29udHJvbCBzZC1jaGVja2JveF9fY29udHJvbFwiLFxuICAgIGl0ZW1EZWNvcmF0b3I6IFwic2QtaXRlbV9fc3ZnIHNkLWNoZWNrYm94X19zdmdcIixcbiAgICBjb250cm9sTGFiZWw6IFwic2QtaXRlbV9fY29udHJvbC1sYWJlbFwiLFxuICAgIG1hdGVyaWFsRGVjb3JhdG9yOiBcInNkLWl0ZW1fX2RlY29yYXRvciBzZC1jaGVja2JveF9fZGVjb3JhdG9yXCIsXG4gICAgb3RoZXI6IFwic2QtaW5wdXQgc2QtY29tbWVudCBzZC1zZWxlY3RiYXNlX19vdGhlclwiLFxuICAgIGNvbHVtbjogXCJzZC1zZWxlY3RiYXNlX19jb2x1bW5cIlxuICB9LFxuICByYWRpb2dyb3VwOiB7XG4gICAgcm9vdDogXCJzZC1zZWxlY3RiYXNlXCIsXG4gICAgaXRlbTogXCJzZC1pdGVtIHNkLXJhZGlvIHNkLXNlbGVjdGJhc2VfX2l0ZW1cIixcbiAgICBpdGVtSW5saW5lOiBcInNkLXNlbGVjdGJhc2VfX2l0ZW0tLWlubGluZVwiLFxuICAgIGxhYmVsOiBcInNkLXNlbGVjdGJhc2VfX2xhYmVsXCIsXG4gICAgbGFiZWxDaGVja2VkOiBcIlwiLFxuICAgIGl0ZW1EaXNhYmxlZDogXCJzZC1pdGVtLS1kaXNhYmxlZCBzZC1yYWRpby0tZGlzYWJsZWRcIixcbiAgICBpdGVtQ2hlY2tlZDogXCJzZC1pdGVtLS1jaGVja2VkIHNkLXJhZGlvLS1jaGVja2VkXCIsXG4gICAgaXRlbUhvdmVyOiBcInNkLWl0ZW0tLWFsbG93aG92ZXIgc2QtcmFkaW8tLWFsbG93aG92ZXJcIixcbiAgICBpdGVtQ29udHJvbDogXCJzZC12aXN1YWxseWhpZGRlbiBzZC1pdGVtX19jb250cm9sIHNkLXJhZGlvX19jb250cm9sXCIsXG4gICAgaXRlbURlY29yYXRvcjogXCJzZC1pdGVtX19zdmcgc2QtcmFkaW9fX3N2Z1wiLFxuICAgIGNvbnRyb2xMYWJlbDogXCJzZC1pdGVtX19jb250cm9sLWxhYmVsXCIsXG4gICAgbWF0ZXJpYWxEZWNvcmF0b3I6IFwic2QtaXRlbV9fZGVjb3JhdG9yIHNkLXJhZGlvX19kZWNvcmF0b3JcIixcbiAgICBvdGhlcjogXCJzZC1pbnB1dCBzZC1jb21tZW50IHNkLXNlbGVjdGJhc2VfX290aGVyXCIsXG4gICAgY2xlYXJCdXR0b246IFwic2QtYnRuIHNkLXNlbGVjdGJhc2VfX2NsZWFyLWJ0blwiLFxuICAgIGNvbHVtbjogXCJzZC1zZWxlY3RiYXNlX19jb2x1bW5cIlxuICB9LFxuICBib29sZWFuOiB7XG4gICAgbWFpblJvb3Q6IFwic2QtZWxlbWVudC13aXRoLWZyYW1lIHNkLXF1ZXN0aW9uIHNkLXJvd19fcXVlc3Rpb24gc2QtcXVlc3Rpb24tLWJvb2xlYW5cIixcbiAgICByb290OiBcIlwiLFxuICAgIGl0ZW06IFwic2QtYm9vbGVhblwiLFxuICAgIGNvbnRyb2w6IFwic2QtYm9vbGVhbl9fY29udHJvbCBzZC12aXN1YWxseWhpZGRlblwiLFxuICAgIGl0ZW1DaGVja2VkOiBcInNkLWJvb2xlYW4tLWNoZWNrZWRcIixcbiAgICBpdGVtSW5kZXRlcm1pbmF0ZTogXCJzZC1ib29sZWFuLS1pbmRldGVybWluYXRlXCIsXG4gICAgaXRlbURpc2FibGVkOiBcInNkLWJvb2xlYW4tLWRpc2FibGVkXCIsXG4gICAgbGFiZWw6IFwic2QtYm9vbGVhbl9fbGFiZWxcIixcbiAgICBzd2l0Y2g6IFwic2QtYm9vbGVhbl9fc3dpdGNoXCIsXG4gICAgZGlzYWJsZWRMYWJlbDogXCJzZC1jaGVja2JveF9fbGFiZWwtLWRpc2FibGVkXCIsXG4gICAgaXRlbURlY29yYXRvcjogXCJzZC1jaGVja2JveF9faGlkZGVuXCIsXG4gICAgbWF0ZXJpYWxEZWNvcmF0b3I6IFwic2QtY2hlY2tib3hfX3JlY3RhbmdsZVwiLFxuICAgIHNsaWRlclRleHQ6IFwiXCIsXG4gICAgc2xpZGVyOiBcInNkLWJvb2xlYW5fX3RodW1iXCJcbiAgfSxcbiAgdGV4dDoge1xuICAgIHJvb3Q6IFwic2QtaW5wdXQgc2QtdGV4dFwiLFxuICAgIHNtYWxsOiBcInNkLXJvd19fcXVlc3Rpb24tLXNtYWxsXCIsXG4gICAgY29udHJvbERpc2FibGVkOiBcInNkLWlucHV0LS1kaXNhYmxlZFwiLFxuICAgIG9uRXJyb3I6IFwic2QtaW5wdXQtLWVycm9yXCJcbiAgfSxcbiAgbXVsdGlwbGV0ZXh0OiB7XG4gICAgcm9vdDogXCJzZC1tdWx0aXBsZXRleHRcIixcbiAgICBpdGVtOiBcInNkLW11bHRpcGxldGV4dF9faXRlbVwiLFxuICAgIGl0ZW1UaXRsZTogXCJzZC1tdWx0aXBsZXRleHRfX2l0ZW0tdGl0bGVcIixcbiAgICByb3c6IFwic2QtbXVsdGlwbGV0ZXh0X19yb3dcIixcbiAgICBjZWxsOiBcInNkLW11bHRpcGxldGV4dF9fY2VsbFwiXG4gIH0sXG4gIGRyb3Bkb3duOiB7XG4gICAgcm9vdDogXCJzZC1zZWxlY3RiYXNlXCIsXG4gICAgc21hbGw6IFwic2Qtcm93X19xdWVzdGlvbi0tc21hbGxcIixcbiAgICBjb250cm9sOiBcInNkLWlucHV0IHNkLWRyb3Bkb3duXCIsXG4gICAgc2VsZWN0V3JhcHBlcjogXCJcIixcbiAgICBvdGhlcjogXCJzZC1pbnB1dCBzZC1jb21tZW50XCIsXG4gICAgb25FcnJvcjogXCJzZC1pbnB1dC0tZXJyb3JcIixcbiAgICBsYWJlbDogXCJzZC1zZWxlY3RiYXNlX19sYWJlbFwiLFxuICAgIGl0ZW06IFwic2QtaXRlbSBzZC1yYWRpbyBzZC1zZWxlY3RiYXNlX19pdGVtXCIsXG4gICAgaXRlbURpc2FibGVkOiBcInNkLWl0ZW0tLWRpc2FibGVkIHNkLXJhZGlvLS1kaXNhYmxlZFwiLFxuICAgIGl0ZW1DaGVja2VkOiBcInNkLWl0ZW0tLWNoZWNrZWQgc2QtcmFkaW8tLWNoZWNrZWRcIixcbiAgICBpdGVtSG92ZXI6IFwic2QtaXRlbS0tYWxsb3dob3ZlciBzZC1yYWRpby0tYWxsb3dob3ZlclwiLFxuICAgIGl0ZW1Db250cm9sOiBcInNkLXZpc3VhbGx5aGlkZGVuIHNkLWl0ZW1fX2NvbnRyb2wgc2QtcmFkaW9fX2NvbnRyb2xcIixcbiAgICBpdGVtRGVjb3JhdG9yOiBcInNkLWl0ZW1fX3N2ZyBzZC1yYWRpb19fc3ZnXCIsXG4gICAgY29udHJvbERpc2FibGVkOiBcInNkLWlucHV0LS1kaXNhYmxlZFwiLFxuICAgIGNvbnRyb2xMYWJlbDogXCJzZC1pdGVtX19jb250cm9sLWxhYmVsXCIsXG4gICAgbWF0ZXJpYWxEZWNvcmF0b3I6IFwic2QtaXRlbV9fZGVjb3JhdG9yIHNkLXJhZGlvX19kZWNvcmF0b3JcIlxuICB9LFxuICBpbWFnZXBpY2tlcjoge1xuICAgIG1haW5Sb290OiBcInNkLWVsZW1lbnQtd2l0aC1mcmFtZSBzZC1xdWVzdGlvbiBzZC1yb3dfX3F1ZXN0aW9uIHNkLXNjcm9sbGFibGVcIixcbiAgICByb290OiBcInNkLWltYWdlcGlja2VyXCIsXG4gICAgaXRlbTogXCJzZC1pbWFnZXBpY2tlcl9faXRlbVwiLFxuICAgIGl0ZW1JbmxpbmU6IFwic2QtaW1hZ2VwaWNrZXJfX2l0ZW0tLWlubGluZVwiLFxuICAgIGl0ZW1DaGVja2VkOiBcInNkLWltYWdlcGlja2VyX19pdGVtLS1jaGVja2VkXCIsXG4gICAgaXRlbURpc2FibGVkOiBcInNkLWltYWdlcGlja2VyX19pdGVtLS1kaXNhYmxlZFwiLFxuICAgIGl0ZW1Ib3ZlcjogXCJzZC1pbWFnZXBpY2tlcl9faXRlbS0tYWxsb3dob3ZlclwiLFxuICAgIGxhYmVsOiBcInNkLWltYWdlcGlja2VyX19sYWJlbFwiLFxuICAgIGl0ZW1Db250cm9sOiBcInNkLWltYWdlcGlja2VyX19jb250cm9sXCIsXG4gICAgaW1hZ2U6IFwic2QtaW1hZ2VwaWNrZXJfX2ltYWdlXCIsXG4gICAgaXRlbVRleHQ6IFwic2QtaW1hZ2VwaWNrZXJfX3RleHRcIixcbiAgICBjbGVhckJ1dHRvbjogXCJzZC1idG5cIixcbiAgICBvdGhlcjogXCJzZC1pbnB1dCBzZC1jb21tZW50XCJcbiAgfSxcbiAgbWF0cml4OiB7XG4gICAgbWFpblJvb3Q6IFwic2QtZWxlbWVudC13aXRoLWZyYW1lIHNkLXF1ZXN0aW9uIHNkLXJvd19fcXVlc3Rpb24gc2Qtc2Nyb2xsYWJsZVwiLFxuICAgIHRhYmxlV3JhcHBlcjogXCJzZC1tYXRyaXhcIixcbiAgICByb290OiBcInNkLXRhYmxlXCIsXG4gICAgcm93RXJyb3I6IFwic2QtbWF0cml4X19yb3ctLWVycm9yXCIsXG4gICAgY2VsbDogXCJzZC10YWJsZV9fY2VsbCBzZC1tYXRyaXhfX2NlbGxcIixcbiAgICBoZWFkZXJDZWxsOiBcInNkLXRhYmxlX19jZWxsIHNkLXRhYmxlX19jZWxsLS1oZWFkZXJcIixcbiAgICBsYWJlbDogXCJzZC1pdGVtIHNkLXJhZGlvIHNkLW1hdHJpeF9fbGFiZWxcIixcbiAgICBpdGVtVmFsdWU6IFwic2QtdmlzdWFsbHloaWRkZW4gc2QtaXRlbV9fY29udHJvbCBzZC1yYWRpb19fY29udHJvbFwiLFxuICAgIGl0ZW1DaGVja2VkOiBcInNkLWl0ZW0tLWNoZWNrZWQgc2QtcmFkaW8tLWNoZWNrZWRcIixcbiAgICBpdGVtRGlzYWJsZWQ6IFwic2QtaXRlbS0tZGlzYWJsZWQgc2QtcmFkaW8tLWRpc2FibGVkXCIsXG4gICAgaXRlbUhvdmVyOiBcInNkLXJhZGlvLS1hbGxvd2hvdmVyXCIsXG4gICAgbWF0ZXJpYWxEZWNvcmF0b3I6IFwic2QtaXRlbV9fZGVjb3JhdG9yIHNkLXJhZGlvX19kZWNvcmF0b3JcIixcbiAgICBpdGVtRGVjb3JhdG9yOiBcInNkLWl0ZW1fX3N2ZyBzZC1yYWRpb19fc3ZnXCIsXG4gICAgY2VsbFRleHQ6IFwic2QtbWF0cml4X190ZXh0XCIsXG4gICAgY2VsbFRleHRTZWxlY3RlZDogXCJzZC1tYXRyaXhfX3RleHQtLWNoZWNrZWRcIixcbiAgICBjZWxsVGV4dERpc2FibGVkOiBcInNkLW1hdHJpeF9fdGV4dC0tZGlzYWJsZWRcIlxuICB9LFxuICBtYXRyaXhkcm9wZG93bjoge1xuICAgIG1haW5Sb290OiBcInNkLWVsZW1lbnQtd2l0aC1mcmFtZSBzZC1xdWVzdGlvbiBzZC1yb3dfX3F1ZXN0aW9uIHNkLXNjcm9sbGFibGVcIixcbiAgICByb290OiBcInNkLXRhYmxlXCIsXG4gICAgY2VsbDogXCJzZC10YWJsZV9fY2VsbFwiLFxuICAgIGhlYWRlckNlbGw6IFwic2QtdGFibGVfX2NlbGwgc2QtdGFibGVfX2NlbGwtLWhlYWRlclwiXG4gIH0sXG4gIG1hdHJpeGR5bmFtaWM6IHtcbiAgICBtYWluUm9vdDogXCJzZC1lbGVtZW50LXdpdGgtZnJhbWUgc2QtcXVlc3Rpb24gc2Qtcm93X19xdWVzdGlvbiBzZC1zY3JvbGxhYmxlXCIsXG4gICAgcm9vdDogXCJzZC10YWJsZSBzZC1tYXRyaXhkeW5hbWljXCIsXG4gICAgY2VsbDogXCJzZC10YWJsZV9fY2VsbFwiLFxuICAgIGhlYWRlckNlbGw6IFwic2QtdGFibGVfX2NlbGwgc2QtdGFibGVfX2NlbGwtLWhlYWRlclwiLFxuICAgIGJ1dHRvbjogXCJzZC1idG5cIixcbiAgICBkZXRhaWxSb3c6IFwic2QtdGFibGVfX3JvdyBzZC10YWJsZV9fcm93LS1kZXRhaWxcIixcbiAgICBkZXRhaWxCdXR0b246IFwic2QtdGFibGVfX2NlbGwtLWRldGFpbC1idXR0b25cIixcbiAgICBkZXRhaWxCdXR0b25FeHBhbmRlZDogXCJzZC10YWJsZV9fY2VsbC0tZGV0YWlsLWJ1dHRvbi0tZXhwYW5kZWRcIixcbiAgICBkZXRhaWxJY29uOiBcInNkLWRldGFpbC1wYW5lbF9faWNvblwiLFxuICAgIGRldGFpbEljb25FeHBhbmRlZDogXCJzZC1kZXRhaWwtcGFuZWxfX2ljb24tLWV4cGFuZGVkXCIsXG4gICAgZGV0YWlsUGFuZWxDZWxsOiBcInNkLXRhYmxlX19jZWxsLS1kZXRhaWwtcGFuZWxcIixcbiAgICBhY3Rpb25zQ2VsbDogXCJzZC10YWJsZV9fY2VsbCBzZC10YWJsZV9fY2VsbC0tYWN0aW9uc1wiLFxuICAgIGJ1dHRvbkFkZDogXCJzZC1tYXRyaXhkeW5hbWljX19hZGQtYnRuXCIsXG4gICAgYnV0dG9uUmVtb3ZlOiBcInNkLW1hdHJpeGR5bmFtaWNfX3JlbW92ZS1idG5cIixcbiAgICBpY29uQWRkOiBcIlwiLFxuICAgIGljb25SZW1vdmU6IFwiXCJcbiAgfSxcbiAgcmF0aW5nOiB7XG4gICAgcm9vdDogXCJzZC1yYXRpbmdcIixcbiAgICBpdGVtOiBcInNkLXJhdGluZ19faXRlbVwiLFxuICAgIGl0ZW1Ib3ZlcjogXCJzZC1yYXRpbmdfX2l0ZW0tLWFsbG93aG92ZXJcIixcbiAgICBzZWxlY3RlZDogXCJzZC1yYXRpbmdfX2l0ZW0tLXNlbGVjdGVkXCIsXG4gICAgbWluVGV4dDogXCJzZC1yYXRpbmdfX2l0ZW0tdGV4dCBzZC1yYXRpbmdfX21pbi10ZXh0XCIsXG4gICAgaXRlbVRleHQ6IFwic2QtcmF0aW5nX19pdGVtLXRleHRcIixcbiAgICBtYXhUZXh0OiBcInNkLXJhdGluZ19faXRlbS10ZXh0IHNkLXJhdGluZ19fbWF4LXRleHRcIixcbiAgICBpdGVtRGlzYWJsZWQ6IFwic2QtcmF0aW5nX19pdGVtLS1kaXNhYmxlZFwiXG4gIH0sXG4gIGNvbW1lbnQ6IHtcbiAgICByb290OiBcInNkLWlucHV0IHNkLWNvbW1lbnRcIixcbiAgICBzbWFsbDogXCJzZC1yb3dfX3F1ZXN0aW9uLS1zbWFsbFwiLFxuICAgIGNvbnRyb2xEaXNhYmxlZDogXCJzZC1pbnB1dC0tZGlzYWJsZWRcIixcbiAgfSxcbiAgZXhwcmVzc2lvbjogXCJcIixcbiAgZmlsZToge1xuICAgIHJvb3Q6IFwic2QtZmlsZVwiLFxuICAgIG90aGVyOiBcInNkLWlucHV0IHNkLWNvbW1lbnRcIixcbiAgICBwbGFjZWhvbGRlcklucHV0OiBcInNkLXZpc3VhbGx5aGlkZGVuXCIsXG4gICAgcHJldmlldzogXCJzZC1maWxlX19wcmV2aWV3XCIsXG4gICAgZmlsZVNpZ246IFwic2QtaGlkZGVuXCIsXG4gICAgZmlsZUxpc3Q6IFwic2QtZmlsZV9fbGlzdFwiLFxuICAgIGZpbGVTaWduQm90dG9tOiBcInNkLWZpbGVfX3NpZ25cIixcbiAgICBmaWxlRGVjb3JhdG9yOiBcInNkLWZpbGVfX2RlY29yYXRvclwiLFxuICAgIGZpbGVEZWNvcmF0b3JEcmFnOiBcInNkLWZpbGVfX2RlY29yYXRvci0tZHJhZ1wiLFxuICAgIGZpbGVJbnB1dDogXCJzZC12aXN1YWxseWhpZGRlblwiLFxuICAgIG5vRmlsZUNob3NlbjogXCJzZC1kZXNjcmlwdGlvbiBzZC1maWxlX19uby1maWxlLWNob3NlblwiLFxuICAgIGNob29zZUZpbGU6IFwic2QtZmlsZV9fYnRuIHNkLWZpbGVfX2Nob29zZS1idG5cIixcbiAgICBkaXNhYmxlZDogXCJzZC1maWxlX19jaG9vc2UtYnRuLS1kaXNhYmxlZFwiLFxuICAgIHJlbW92ZUJ1dHRvbjogXCJzZC1oaWRkZW5cIixcbiAgICByZW1vdmVCdXR0b25Cb3R0b206IFwic2QtZmlsZV9fYnRuIHNkLWZpbGVfX2NsZWFuLWJ0blwiLFxuICAgIHJlbW92ZUZpbGU6IFwic2QtaGlkZGVuXCIsXG4gICAgcmVtb3ZlRmlsZVN2ZzogXCJzZC1oaWRkZW5cIixcbiAgICB3cmFwcGVyOiBcInNkLWZpbGVfX3dyYXBwZXJcIixcbiAgICBkZWZhdWx0SW1hZ2U6IFwic2QtZmlsZV9fZGVmYXVsdC1pbWFnZVwiLFxuICAgIHJlbW92ZUZpbGVCdXR0b246IFwic2QtZmlsZV9fcmVtb3ZlLWZpbGUtYnV0dG9uXCIsXG4gICAgZHJhZ0FyZWFQbGFjZWhvbGRlcjogXCJzZC1maWxlX19kcmFnLWFyZWEtcGxhY2Vob2xkZXJcIlxuICB9LFxuICBzaWduYXR1cmVwYWQ6IHtcbiAgICByb290OiBcInNkLXNpZ25hdHVyZXBhZCBzanNfc3BfY29udGFpbmVyXCIsXG4gICAgc21hbGw6IFwic2Qtcm93X19xdWVzdGlvbi0tc21hbGxcIixcbiAgICBjb250cm9sczogXCJzanNfc3BfY29udHJvbHNcIixcbiAgICBwbGFjZWhvbGRlcjogXCJzanNfc3BfcGxhY2Vob2xkZXJcIixcbiAgICBjbGVhckJ1dHRvbjogXCJzanNfc3BfY2xlYXJcIlxuICB9LFxuICBzYXZlRGF0YToge1xuICAgIHJvb3Q6IFwiXCIsXG4gICAgc2F2aW5nOiBcIlwiLFxuICAgIGVycm9yOiBcIlwiLFxuICAgIHN1Y2Nlc3M6IFwiXCIsXG4gICAgc2F2ZUFnYWluQnV0dG9uOiBcIlwiXG4gIH0sXG4gIHdpbmRvdzoge1xuICAgIHJvb3Q6IFwic3Zfd2luZG93XCIsXG4gICAgYm9keTogXCJzdl93aW5kb3dfY29udGVudFwiLFxuICAgIGhlYWRlcjoge1xuICAgICAgcm9vdDogXCJzdl93aW5kb3dfdGl0bGVcIixcbiAgICAgIHRpdGxlOiBcIlwiLFxuICAgICAgYnV0dG9uOiBcIlwiLFxuICAgICAgYnV0dG9uRXhwYW5kZWQ6IFwiXCIsXG4gICAgICBidXR0b25Db2xsYXBzZWQ6IFwiXCJcbiAgICB9XG4gIH1cbn07XG5cbnN1cnZleUNzc1tcImRlZmF1bHRWMlwiXSA9IGRlZmF1bHRWMkNzcztcbiIsImltcG9ydCB7IENzc0NsYXNzQnVpbGRlciB9IGZyb20gXCIuL3V0aWxzL2Nzc0NsYXNzQnVpbGRlclwiO1xuXG5leHBvcnQgY2xhc3MgRGVmYXVsdFRpdGxlTW9kZWwge1xuICBwdWJsaWMgc3RhdGljIGdldEljb25Dc3MoY3NzQ2xhc3NlczogYW55LCBpc0NvbGxhcHNlZDogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgQ3NzQ2xhc3NCdWlsZGVyKClcbiAgICAgIC5hcHBlbmQoY3NzQ2xhc3Nlcy5pY29uKVxuICAgICAgLmFwcGVuZChjc3NDbGFzc2VzLmljb25FeHBhbmRlZCwgIWlzQ29sbGFwc2VkKVxuICAgICAgLnRvU3RyaW5nKCk7XG4gIH1cbn0iLCJpbXBvcnQgeyBRdWVzdGlvblJhbmtpbmdNb2RlbCB9IGZyb20gXCJzcmMvcXVlc3Rpb25fcmFua2luZ1wiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4uL2l0ZW12YWx1ZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25TZWxlY3RCYXNlIH0gZnJvbSBcIi4uL3F1ZXN0aW9uX2Jhc2VzZWxlY3RcIjtcbmltcG9ydCB7IERyYWdEcm9wQ29yZSB9IGZyb20gXCIuL2NvcmVcIjtcblxuZXhwb3J0IGNsYXNzIERyYWdEcm9wQ2hvaWNlcyBleHRlbmRzIERyYWdEcm9wQ29yZTxRdWVzdGlvblNlbGVjdEJhc2U+IHtcbiAgcHJvdGVjdGVkIGdldCBkcmFnZ2VkRWxlbWVudFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJpdGVtLXZhbHVlXCI7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0U2hvcnRjdXRUZXh0KGRyYWdnZWRFbGVtZW50OiBJdGVtVmFsdWUpOiBzdHJpbmcge1xuICAgIHJldHVybiBkcmFnZ2VkRWxlbWVudC50ZXh0O1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZURyYWdnZWRFbGVtZW50U2hvcnRjdXQoXG4gICAgdGV4dDogc3RyaW5nLFxuICAgIGRyYWdnZWRFbGVtZW50Tm9kZTogSFRNTEVsZW1lbnRcbiAgKTogSFRNTEVsZW1lbnQge1xuICAgIGlmICh0aGlzLnBhcmVudEVsZW1lbnQuZ2V0VHlwZSgpID09PSBcImltYWdlcGlja2VyXCIpIHtcbiAgICAgIHJldHVybiBzdXBlci5jcmVhdGVEcmFnZ2VkRWxlbWVudFNob3J0Y3V0KHRleHQsIGRyYWdnZWRFbGVtZW50Tm9kZSk7XG4gICAgfVxuICAgIGNvbnN0IGRyYWdnZWRFbGVtZW50U2hvcnRjdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIC8vIGRyYWdnZWRFbGVtZW50U2hvcnRjdXQuaW5uZXJUZXh0ID0gdGV4dDtcbiAgICBkcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnN0eWxlLmNzc1RleHQgPSBgIFxuICAgICAgICAgIGN1cnNvcjogZ3JhYmJpbmc7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHotaW5kZXg6IDEwMDA7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMzZweDtcbiAgICAgICAgICBtaW4td2lkdGg6IDEwMHB4O1xuICAgICAgICAgIGJveC1zaGFkb3c6IDBweCA4cHggMTZweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgICAgcGFkZGluZy1yaWdodDogMTZweDtcbiAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG4gICAgICAgICAgZm9udC1mYW1pbHk6IFwiT3BlbiBTYW5zXCI7XG4gICAgICAgIGA7XG5cbiAgICBjb25zdCBpc0RlZXBDbG9uZSA9IHRydWU7XG4gICAgY29uc3QgY2xvbmUgPSA8SFRNTEVsZW1lbnQ+KFxuICAgICAgZHJhZ2dlZEVsZW1lbnROb2RlXG4gICAgICAgIC5jbG9zZXN0KFwiW2RhdGEtc3YtZHJvcC10YXJnZXQtaXRlbS12YWx1ZV1cIilcbiAgICAgICAgLmNsb25lTm9kZShpc0RlZXBDbG9uZSlcbiAgICApO1xuICAgIGNvbnN0IGNvbnRyb2xzTm9kZTogSFRNTEVsZW1lbnQgPSBjbG9uZS5xdWVyeVNlbGVjdG9yKFwiLnN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzXCIpO1xuICAgIGNvbnRyb2xzTm9kZS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuXG4gICAgY2xvbmUuY2xhc3NMaXN0LnJlbW92ZShcInN2Yy1pdGVtLXZhbHVlLS1tb3ZldXBcIik7XG4gICAgY2xvbmUuY2xhc3NMaXN0LnJlbW92ZShcInN2Yy1pdGVtLXZhbHVlLS1tb3ZlZG93blwiKTtcbiAgICB0aGlzLmRyYWdnZWRFbGVtZW50LmlzRHJhZ0Ryb3BNb3ZlRG93biA9IGZhbHNlO1xuICAgIHRoaXMuZHJhZ2dlZEVsZW1lbnQuaXNEcmFnRHJvcE1vdmVVcCA9IGZhbHNlO1xuXG4gICAgZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5hcHBlbmRDaGlsZChjbG9uZSk7XG5cbiAgICB0aGlzLmlzQm90dG9tID0gbnVsbDtcblxuICAgIHJldHVybiBkcmFnZ2VkRWxlbWVudFNob3J0Y3V0O1xuICB9XG5cbiAgcHJvdGVjdGVkIGZpbmREcm9wVGFyZ2V0Tm9kZUJ5RHJhZ092ZXJOb2RlKFxuICAgIGRyYWdPdmVyTm9kZTogSFRNTEVsZW1lbnRcbiAgKTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IHJlc3VsdDogSFRNTEVsZW1lbnQgPSBkcmFnT3Zlck5vZGUuY2xvc2VzdChcbiAgICAgIHRoaXMuZHJvcFRhcmdldERhdGFBdHRyaWJ1dGVOYW1lXG4gICAgKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldERyb3BUYXJnZXRCeURhdGFBdHRyaWJ1dGVWYWx1ZShcbiAgICBkYXRhQXR0cmlidXRlVmFsdWU6IHN0cmluZ1xuICApOiBJdGVtVmFsdWUge1xuICAgIGxldCBkcmFnT3ZlckNob2ljZTtcblxuICAgIGRyYWdPdmVyQ2hvaWNlID0gdGhpcy5wYXJlbnRFbGVtZW50LmNob2ljZXMuZmlsdGVyKFxuICAgICAgKGNob2ljZTogSXRlbVZhbHVlKSA9PiBcIlwiICsgY2hvaWNlLnZhbHVlID09IGRhdGFBdHRyaWJ1dGVWYWx1ZVxuICAgIClbMF07XG5cbiAgICByZXR1cm4gZHJhZ092ZXJDaG9pY2U7XG4gIH1cblxuICBwcml2YXRlIGdldFZpc2libGVDaG9pY2VzKCkge1xuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50RWxlbWVudDtcbiAgICBpZiAocGFyZW50LmdldFR5cGUoKSA9PT0gXCJyYW5raW5nXCIpIHJldHVybiA8UXVlc3Rpb25SYW5raW5nTW9kZWw+cGFyZW50LnJhbmtpbmdDaG9pY2VzO1xuICAgIHJldHVybiBwYXJlbnQudmlzaWJsZUNob2ljZXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNEcm9wVGFyZ2V0VmFsaWQoXG4gICAgZHJvcFRhcmdldDogSXRlbVZhbHVlXG4gICk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNob2ljZXMgPSB0aGlzLmdldFZpc2libGVDaG9pY2VzKCk7XG5cbiAgICBpZiAodGhpcy5wYXJlbnRFbGVtZW50LmdldFR5cGUoKSAhPT0gXCJpbWFnZXBpY2tlclwiKSB7XG4gICAgICBjb25zdCBkcm9wVGFyZ2V0SW5kZXggPSBjaG9pY2VzLmluZGV4T2YodGhpcy5kcm9wVGFyZ2V0KTtcbiAgICAgIGNvbnN0IGRyYWdnZWRFbGVtZW50SW5kZXggPSBjaG9pY2VzLmluZGV4T2YodGhpcy5kcmFnZ2VkRWxlbWVudCk7XG5cbiAgICAgIGlmIChkcmFnZ2VkRWxlbWVudEluZGV4ID4gZHJvcFRhcmdldEluZGV4ICYmIHRoaXMuZHJvcFRhcmdldC5pc0RyYWdEcm9wTW92ZVVwKSB7XG4gICAgICAgIHRoaXMuZHJvcFRhcmdldC5pc0RyYWdEcm9wTW92ZVVwID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRyYWdnZWRFbGVtZW50SW5kZXggPCBkcm9wVGFyZ2V0SW5kZXggJiYgdGhpcy5kcm9wVGFyZ2V0LmlzRHJhZ0Ryb3BNb3ZlRG93bikge1xuICAgICAgICB0aGlzLmRyb3BUYXJnZXQuaXNEcmFnRHJvcE1vdmVEb3duID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzaG91bGRuJ3QgYWxsb3cgdG8gZHJvcCBvbiBcImFkb3JuZXJzXCIgKHNlbGVjdGFsbCwgbm9uZSwgb3RoZXIpXG4gICAgaWYgKGNob2ljZXMuaW5kZXhPZihkcm9wVGFyZ2V0KSA9PT0gLTEpIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhbGN1bGF0ZUlzQm90dG9tKGNsaWVudFk6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNob2ljZXMgPSB0aGlzLmdldFZpc2libGVDaG9pY2VzKCk7XG4gICAgcmV0dXJuIChcbiAgICAgIGNob2ljZXMuaW5kZXhPZih0aGlzLmRyb3BUYXJnZXQpIC0gY2hvaWNlcy5pbmRleE9mKHRoaXMuZHJhZ2dlZEVsZW1lbnQpID5cbiAgICAgIDBcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFmdGVyRHJhZ092ZXIoZHJvcFRhcmdldE5vZGU6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEcm9wVGFyZ2V0RG9lc250Q2hhbmdlZCh0aGlzLmlzQm90dG9tKSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmRyb3BUYXJnZXQgPT09IHRoaXMuZHJhZ2dlZEVsZW1lbnQpIHJldHVybjtcblxuICAgIGNvbnN0IGNob2ljZXMgPSB0aGlzLmdldFZpc2libGVDaG9pY2VzKCk7XG4gICAgY29uc3QgZHJvcFRhcmdldEluZGV4ID0gY2hvaWNlcy5pbmRleE9mKHRoaXMuZHJvcFRhcmdldCk7XG4gICAgY29uc3QgZHJhZ2dlZEVsZW1lbnRJbmRleCA9IGNob2ljZXMuaW5kZXhPZih0aGlzLmRyYWdnZWRFbGVtZW50KTtcblxuICAgIGNob2ljZXMuc3BsaWNlKGRyYWdnZWRFbGVtZW50SW5kZXgsIDEpO1xuICAgIGNob2ljZXMuc3BsaWNlKGRyb3BUYXJnZXRJbmRleCwgMCwgdGhpcy5kcmFnZ2VkRWxlbWVudCk7XG5cbiAgICBpZiAodGhpcy5wYXJlbnRFbGVtZW50LmdldFR5cGUoKSA9PT0gXCJpbWFnZXBpY2tlclwiKSByZXR1cm47XG5cbiAgICBpZiAoZHJhZ2dlZEVsZW1lbnRJbmRleCAhPT0gZHJvcFRhcmdldEluZGV4KSB7XG4gICAgICBkcm9wVGFyZ2V0Tm9kZS5jbGFzc0xpc3QucmVtb3ZlKFwic3ZjLWl0ZW0tdmFsdWUtLW1vdmV1cFwiKTtcbiAgICAgIGRyb3BUYXJnZXROb2RlLmNsYXNzTGlzdC5yZW1vdmUoXCJzdmMtaXRlbS12YWx1ZS0tbW92ZWRvd25cIik7XG4gICAgICB0aGlzLmRyb3BUYXJnZXQuaXNEcmFnRHJvcE1vdmVEb3duID0gZmFsc2U7XG4gICAgICB0aGlzLmRyb3BUYXJnZXQuaXNEcmFnRHJvcE1vdmVVcCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChkcmFnZ2VkRWxlbWVudEluZGV4ID4gZHJvcFRhcmdldEluZGV4KSB7XG4gICAgICB0aGlzLmRyb3BUYXJnZXQuaXNEcmFnRHJvcE1vdmVEb3duID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoZHJhZ2dlZEVsZW1lbnRJbmRleCA8IGRyb3BUYXJnZXRJbmRleCkge1xuICAgICAgdGhpcy5kcm9wVGFyZ2V0LmlzRHJhZ0Ryb3BNb3ZlVXAgPSB0cnVlO1xuICAgIH1cbiAgICBzdXBlci5naG9zdFBvc2l0aW9uQ2hhbmdlZCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRvRHJvcCgpOiBhbnkge1xuICAgIGNvbnN0IGNob2ljZXMgPSB0aGlzLnBhcmVudEVsZW1lbnQuY2hvaWNlcztcbiAgICBjb25zdCBmaWx0ZXJlZENob2ljZXMgPSB0aGlzLmdldFZpc2libGVDaG9pY2VzKCkuZmlsdGVyKChpdGVtOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiBjaG9pY2VzLmluZGV4T2YoaXRlbSkgIT09IC0xO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgb2xkSW5kZXggPSBjaG9pY2VzLmluZGV4T2YodGhpcy5kcmFnZ2VkRWxlbWVudCk7XG4gICAgbGV0IG5ld0luZGV4ID0gZmlsdGVyZWRDaG9pY2VzLmluZGV4T2YodGhpcy5kcmFnZ2VkRWxlbWVudCk7XG5cbiAgICBjaG9pY2VzLnNwbGljZShvbGRJbmRleCwgMSk7XG4gICAgY2hvaWNlcy5zcGxpY2UobmV3SW5kZXgsIDAsIHRoaXMuZHJhZ2dlZEVsZW1lbnQpO1xuXG4gICAgcmV0dXJuIHRoaXMucGFyZW50RWxlbWVudDtcbiAgfVxuXG4gIHByb3RlY3RlZCBkb0NsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZUNob2ljZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVmlzaWJsZUNob2ljZXMoKSB7XG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5wYXJlbnRFbGVtZW50O1xuICAgIHRoaXMucGFyZW50RWxlbWVudC5nZXRUeXBlKCkgPT09IFwicmFua2luZ1wiID9cbiAgICAgIHBhcmVudC51cGRhdGVSYW5raW5nQ2hvaWNlcygpIDpcbiAgICAgIHBhcmVudFtcInVwZGF0ZVZpc2libGVDaG9pY2VzXCJdKCk7XG4gIH1cbn1cbiIsImltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcIi4uL3N1cnZleVwiO1xuaW1wb3J0IHsgQmFzZSwgRXZlbnRCYXNlIH0gZnJvbSBcIi4uL2Jhc2VcIjtcbmltcG9ydCB7IElTdXJ2ZXkgfSBmcm9tIFwiLi4vYmFzZS1pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gXCIuLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBmaW5kU2Nyb2xsYWJsZVBhcmVudCB9IGZyb20gXCIuLi91dGlscy91dGlsc1wiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRHJhZ0Ryb3BDb3JlPFQ+IGV4dGVuZHMgQmFzZSB7XG4gIEBwcm9wZXJ0eSh7XG4gICAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICAgIG9uU2V0OiAodmFsLCB0YXJnZXQ6IERyYWdEcm9wQ29yZTxUPikgPT4ge1xuICAgICAgdGFyZ2V0Lmdob3N0UG9zaXRpb25DaGFuZ2VkKCk7XG4gICAgfSxcbiAgfSlcbiAgaXNCb3R0b206IGJvb2xlYW47IC8vVE9ETyByZW5hbWUgaXNCb3R0b20gdG8gaXNTaG93R2hvc3RBdEJvdHRvbU9mRHJvcFRhcmdldFxuICBwdWJsaWMgb25HaG9zdFBvc2l0aW9uQ2hhbmdlZDogRXZlbnRCYXNlPEJhc2U+ID0gbmV3IEV2ZW50QmFzZTxCYXNlPigpO1xuICBwcm90ZWN0ZWQgZ2hvc3RQb3NpdGlvbkNoYW5nZWQoKTogdm9pZCB7XG4gICAgdGhpcy5vbkdob3N0UG9zaXRpb25DaGFuZ2VkLmZpcmUoe30sIHt9KTtcbiAgfVxuXG4gIHB1YmxpYyBvbkJlZm9yZURyb3A6IEV2ZW50QmFzZTxEcmFnRHJvcENvcmU8VD4+ID0gbmV3IEV2ZW50QmFzZSgpO1xuICBwdWJsaWMgb25BZnRlckRyb3A6IEV2ZW50QmFzZTxEcmFnRHJvcENvcmU8VD4+ID0gbmV3IEV2ZW50QmFzZSgpO1xuXG4gIHB1YmxpYyBkcmFnZ2VkRWxlbWVudDogYW55ID0gbnVsbDtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBkcmFnZ2VkRWxlbWVudFR5cGUoKTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgcGFyZW50RWxlbWVudDogVDtcbiAgcHVibGljIGRyb3BUYXJnZXQ6IGFueSA9IG51bGw7XG4gIHByb3RlY3RlZCBnZXQgZHJvcFRhcmdldERhdGFBdHRyaWJ1dGVOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBbZGF0YS1zdi1kcm9wLXRhcmdldC0ke3RoaXMuZHJhZ2dlZEVsZW1lbnRUeXBlfV1gO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgc3VydmV5KCk6IFN1cnZleU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXlWYWx1ZSB8fCB0aGlzLmNyZWF0b3Iuc3VydmV5O1xuICB9XG5cbiAgcHVibGljIHByZXZEcm9wVGFyZ2V0OiBhbnkgPSBudWxsO1xuICBwcm90ZWN0ZWQgZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dDogSFRNTEVsZW1lbnQgPSBudWxsO1xuICBwcml2YXRlIHNjcm9sbEludGVydmFsSWQ6IG51bWJlciA9IG51bGw7XG4gIHByaXZhdGUgYWxsb3dEcm9wSGVyZSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3VydmV5VmFsdWU/OiBJU3VydmV5LCBwcml2YXRlIGNyZWF0b3I/OiBhbnkpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIHN0YXJ0RHJhZyhcbiAgICBldmVudDogUG9pbnRlckV2ZW50LFxuICAgIGRyYWdnZWRFbGVtZW50OiBhbnksXG4gICAgcGFyZW50RWxlbWVudD86IGFueSxcbiAgICBkcmFnZ2VkRWxlbWVudE5vZGU/OiBIVE1MRWxlbWVudFxuICApOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQud2hpY2ggPT09IDMpIHJldHVybjsgLy9yaWdodCBtb3VzZSBidG5cblxuICAgIHRoaXMuZHJhZ2dlZEVsZW1lbnQgPSBkcmFnZ2VkRWxlbWVudDtcbiAgICB0aGlzLnBhcmVudEVsZW1lbnQgPSBwYXJlbnRFbGVtZW50O1xuXG4gICAgdGhpcy5kb1N0YXJ0RHJhZygpO1xuXG4gICAgY29uc3Qgc2hvcnRjdXRUZXh0ID0gdGhpcy5nZXRTaG9ydGN1dFRleHQodGhpcy5kcmFnZ2VkRWxlbWVudCk7XG4gICAgdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0ID0gdGhpcy5jcmVhdGVEcmFnZ2VkRWxlbWVudFNob3J0Y3V0KFxuICAgICAgc2hvcnRjdXRUZXh0LFxuICAgICAgZHJhZ2dlZEVsZW1lbnROb2RlXG4gICAgKTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZCh0aGlzLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQpO1xuICAgIHRoaXMubW92ZVNob3J0Y3V0RWxlbWVudChldmVudCk7XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIiwgdGhpcy5kcmFnT3Zlcik7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJjYW5jZWxcIiwgdGhpcy5oYW5kbGVQb2ludGVyQ2FuY2VsKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLmhhbmRsZUVzY2FwZUJ1dHRvbik7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCB0aGlzLmRyb3ApO1xuICAgIHRoaXMuZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIHRoaXMuZHJvcCk7XG4gIH1cblxuICBwcml2YXRlIGRyYWdPdmVyID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICB0aGlzLm1vdmVTaG9ydGN1dEVsZW1lbnQoZXZlbnQpO1xuICAgIHRoaXMuZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5zdHlsZS5jdXJzb3IgPSBcImdyYWJiaW5nXCI7XG5cbiAgICBjb25zdCBkcm9wVGFyZ2V0Tm9kZSA9IHRoaXMuZmluZERyb3BUYXJnZXROb2RlRnJvbVBvaW50KFxuICAgICAgZXZlbnQuY2xpZW50WCxcbiAgICAgIGV2ZW50LmNsaWVudFlcbiAgICApO1xuXG4gICAgaWYgKCFkcm9wVGFyZ2V0Tm9kZSkge1xuICAgICAgdGhpcy5iYW5Ecm9wSGVyZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZHJvcFRhcmdldCA9IHRoaXMuZ2V0RHJvcFRhcmdldEJ5Tm9kZShkcm9wVGFyZ2V0Tm9kZSwgZXZlbnQpO1xuXG4gICAgY29uc3QgaXNEcm9wVGFyZ2V0VmFsaWQgPSB0aGlzLmlzRHJvcFRhcmdldFZhbGlkKHRoaXMuZHJvcFRhcmdldCwgZHJvcFRhcmdldE5vZGUpO1xuXG4gICAgdGhpcy5kb0RyYWdPdmVyKGRyb3BUYXJnZXROb2RlKTtcblxuICAgIGlmICghaXNEcm9wVGFyZ2V0VmFsaWQpIHtcbiAgICAgIHRoaXMuYmFuRHJvcEhlcmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgaXNCb3R0b20gPSB0aGlzLmNhbGN1bGF0ZUlzQm90dG9tKGV2ZW50LmNsaWVudFksIGRyb3BUYXJnZXROb2RlKTtcblxuICAgIHRoaXMuYWxsb3dEcm9wSGVyZSA9IHRydWU7XG4gICAgaWYgKHRoaXMuaXNEcm9wVGFyZ2V0RG9lc250Q2hhbmdlZChpc0JvdHRvbSkpIHJldHVybjtcblxuICAgIHRoaXMuaXNCb3R0b20gPSBudWxsOyAvL1RPRE8gbmVlZCBmb3IgcHJvcGVydHkgY2hhbmdlIHRyaWdnZXIgd2l0aCBndWFyYW50ZWUgYnV0IGl0IHdvdWxkIGJlIGJldHRlciBub3QgdG8gd2F0Y2ggb24gaXNCb3R0b20gcHJvcGVydHkgYnV0IGhhdmUgc29tZSBldmVudCBsaWtlIG9uVmFsaWRUYXJnZXREcmFnT3ZlclxuICAgIHRoaXMuaXNCb3R0b20gPSBpc0JvdHRvbTtcbiAgICB0aGlzLmFmdGVyRHJhZ092ZXIoZHJvcFRhcmdldE5vZGUpO1xuICAgIHRoaXMucHJldkRyb3BUYXJnZXQgPSB0aGlzLmRyb3BUYXJnZXQ7XG4gIH07XG5cbiAgcHJpdmF0ZSBkcm9wID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLmFsbG93RHJvcEhlcmUpIHtcbiAgICAgIHRoaXMub25CZWZvcmVEcm9wLmZpcmUodGhpcywgbnVsbCk7XG4gICAgICBjb25zdCBuZXdFbGVtZW50ID0gdGhpcy5kb0Ryb3AoKTtcbiAgICAgIHRoaXMub25BZnRlckRyb3AuZmlyZSh0aGlzLCB7IGRyYWdnZWRFbGVtZW50OiBuZXdFbGVtZW50IH0pO1xuICAgIH1cblxuICAgIHRoaXMuY2xlYXIoKTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgaXNEcm9wVGFyZ2V0RG9lc250Q2hhbmdlZChuZXdJc0JvdHRvbTogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmRyb3BUYXJnZXQgPT09IHRoaXMucHJldkRyb3BUYXJnZXQgJiYgbmV3SXNCb3R0b20gPT09IHRoaXMuaXNCb3R0b21cbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRvU3RhcnREcmFnKCk6IHZvaWQgeyB9XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRTaG9ydGN1dFRleHQoZHJhZ2dlZEVsZW1lbnQ6IGFueSk6IHN0cmluZztcblxuICBwcm90ZWN0ZWQgY3JlYXRlRHJhZ2dlZEVsZW1lbnRTaG9ydGN1dCh0ZXh0OiBzdHJpbmcsIGRyYWdnZWRFbGVtZW50Tm9kZT86IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IGRyYWdnZWRFbGVtZW50U2hvcnRjdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIGRyYWdnZWRFbGVtZW50U2hvcnRjdXQuaW5uZXJUZXh0ID0gdGV4dDtcbiAgICBkcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnN0eWxlLmNzc1RleHQgPVxuICAgICAgXCJoZWlnaHQ6IDI0cHg7IG1pbi13aWR0aDogMTAwcHg7IGJvcmRlci1yYWRpdXM6IDM2cHg7IGJhY2tncm91bmQtY29sb3I6IHdoaXRlOyBwYWRkaW5nOiAxNnB4OyBjdXJzb3I6IGdyYWJiaW5nOyBwb3NpdGlvbjogYWJzb2x1dGU7IHotaW5kZXg6IDEwMDA7IGJveC1zaGFkb3c6IDBweCA4cHggMTZweCByZ2JhKDAsIDAsIDAsIDAuMSk7IGZvbnQtZmFtaWx5OiAnT3BlbiBTYW5zJzsgZm9udC1zaXplOiAxNnB4OyBwYWRkaW5nLWxlZnQ6IDIwcHg7IGxpbmUtaGVpZ2h0OiAyNHB4O1wiO1xuICAgIHJldHVybiBkcmFnZ2VkRWxlbWVudFNob3J0Y3V0O1xuICB9XG5cbiAgcHJvdGVjdGVkIGRvRHJhZ092ZXIoZHJvcFRhcmdldE5vZGU/OiBIVE1MRWxlbWVudCk6IHZvaWQgeyB9XG4gIHByb3RlY3RlZCBhZnRlckRyYWdPdmVyKGRyb3BUYXJnZXROb2RlPzogSFRNTEVsZW1lbnQpOiB2b2lkIHsgfVxuXG4gIHB1YmxpYyBnZXRHaG9zdFBvc2l0aW9uKGl0ZW06IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuZHJvcFRhcmdldCAhPT0gaXRlbSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKHRoaXMuaXNCb3R0b20pIHJldHVybiBcImJvdHRvbVwiO1xuICAgIHJldHVybiBcInRvcFwiO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGlzRHJvcFRhcmdldFZhbGlkKFxuICAgIGRyb3BUYXJnZXQ6IGFueSxcbiAgICBkcm9wVGFyZ2V0Tm9kZT86IEhUTUxFbGVtZW50XG4gICk6IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSBoYW5kbGVQb2ludGVyQ2FuY2VsID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICB0aGlzLmNsZWFyKCk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGhhbmRsZUVzY2FwZUJ1dHRvbiA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgIGlmIChldmVudC5rZXlDb2RlID09IDI3KSB7XG4gICAgICB0aGlzLmNsZWFyKCk7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgbW92ZVNob3J0Y3V0RWxlbWVudChldmVudDogUG9pbnRlckV2ZW50KSB7XG4gICAgdGhpcy5kb1Njcm9sbChldmVudC5jbGllbnRZLCBldmVudC5jbGllbnRYKTtcblxuICAgIGNvbnN0IHNob3J0Y3V0SGVpZ2h0ID0gdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0Lm9mZnNldEhlaWdodDtcbiAgICBjb25zdCBzaG9ydGN1dFdpZHRoID0gdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0Lm9mZnNldFdpZHRoO1xuICAgIGxldCBzaG9ydGN1dFhPZmZzZXQ7XG4gICAgbGV0IHNob3J0Y3V0WU9mZnNldDtcblxuICAgIGNvbnN0IGRyYWdnZWRJY29uID1cbiAgICAgIHRoaXMuZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5xdWVyeVNlbGVjdG9yKFwiLnN2Yy1pdGVtLXZhbHVlLWNvbnRyb2xzX19kcmFnIC5zdi1zdmctaWNvblwiKVxuICAgICAgfHwgdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnF1ZXJ5U2VsZWN0b3IoXCIuc3YtcmFua2luZy1pdGVtX19pY29uXCIpO1xuICAgIGlmIChkcmFnZ2VkSWNvbikge1xuICAgICAgY29uc3QgcmVjdE91dGVyID0gdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgcmVjdElubmVyID0gZHJhZ2dlZEljb24uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBzaG9ydGN1dFhPZmZzZXQgPSByZWN0SW5uZXIueCAtIHJlY3RPdXRlci54ICsgcmVjdElubmVyLndpZHRoIC8gMjtcbiAgICAgIHNob3J0Y3V0WU9mZnNldCA9IHJlY3RJbm5lci55IC0gcmVjdE91dGVyLnkgKyByZWN0SW5uZXIuaGVpZ2h0IC8gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgc2hvcnRjdXRYT2Zmc2V0ID0gc2hvcnRjdXRXaWR0aCAvIDI7XG4gICAgICBzaG9ydGN1dFlPZmZzZXQgPSBzaG9ydGN1dEhlaWdodCAvIDI7XG4gICAgfVxuXG4gICAgY29uc3QgZG9jdW1lbnRDbGllbnRIZWlnaHQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgIGNvbnN0IGRvY3VtZW50Q2xpZW50V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG5cbiAgICBpZiAoZXZlbnQuY2xpZW50WCArIHNob3J0Y3V0WE9mZnNldCA+PSBkb2N1bWVudENsaWVudFdpZHRoKSB7XG4gICAgICB0aGlzLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQuc3R5bGUubGVmdCA9XG4gICAgICAgIGV2ZW50LnBhZ2VYIC1cbiAgICAgICAgZXZlbnQuY2xpZW50WCArXG4gICAgICAgIGRvY3VtZW50Q2xpZW50V2lkdGggLVxuICAgICAgICBzaG9ydGN1dFdpZHRoICtcbiAgICAgICAgXCJweFwiO1xuICAgICAgdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnN0eWxlLnRvcCA9XG4gICAgICAgIGV2ZW50LnBhZ2VZIC0gc2hvcnRjdXRZT2Zmc2V0ICsgXCJweFwiO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC5jbGllbnRYIC0gc2hvcnRjdXRYT2Zmc2V0IDw9IDApIHtcbiAgICAgIHRoaXMuZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5zdHlsZS5sZWZ0ID1cbiAgICAgICAgZXZlbnQucGFnZVggLSBldmVudC5jbGllbnRYICsgXCJweFwiO1xuICAgICAgdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnN0eWxlLnRvcCA9XG4gICAgICAgIGV2ZW50LnBhZ2VZIC0gc2hvcnRjdXRZT2Zmc2V0ICsgXCJweFwiO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC5jbGllbnRZICsgc2hvcnRjdXRZT2Zmc2V0ID49IGRvY3VtZW50Q2xpZW50SGVpZ2h0KSB7XG4gICAgICB0aGlzLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQuc3R5bGUubGVmdCA9XG4gICAgICAgIGV2ZW50LnBhZ2VYIC0gc2hvcnRjdXRYT2Zmc2V0ICsgXCJweFwiO1xuICAgICAgdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnN0eWxlLnRvcCA9XG4gICAgICAgIGV2ZW50LnBhZ2VZIC1cbiAgICAgICAgZXZlbnQuY2xpZW50WSArXG4gICAgICAgIGRvY3VtZW50Q2xpZW50SGVpZ2h0IC1cbiAgICAgICAgc2hvcnRjdXRIZWlnaHQgK1xuICAgICAgICBcInB4XCI7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LmNsaWVudFkgLSBzaG9ydGN1dFlPZmZzZXQgPD0gMCkge1xuICAgICAgdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnN0eWxlLmxlZnQgPVxuICAgICAgICBldmVudC5wYWdlWCAtIHNob3J0Y3V0WE9mZnNldCArIFwicHhcIjtcbiAgICAgIHRoaXMuZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5zdHlsZS50b3AgPVxuICAgICAgICBldmVudC5wYWdlWSAtIGV2ZW50LmNsaWVudFkgKyBcInB4XCI7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnN0eWxlLmxlZnQgPVxuICAgICAgZXZlbnQucGFnZVggLSBzaG9ydGN1dFhPZmZzZXQgKyBcInB4XCI7XG4gICAgdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnN0eWxlLnRvcCA9XG4gICAgICBldmVudC5wYWdlWSAtIHNob3J0Y3V0WU9mZnNldCArIFwicHhcIjtcbiAgfVxuXG4gIHByaXZhdGUgZG9TY3JvbGwoY2xpZW50WTogbnVtYmVyLCBjbGllbnRYOiBudW1iZXIpIHtcbiAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnNjcm9sbEludGVydmFsSWQpO1xuICAgIGNvbnN0IHN0YXJ0U2Nyb2xsQm91bmRhcnkgPSA1MDtcblxuICAgIHRoaXMuZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5oaWRkZW4gPSB0cnVlO1xuICAgIGxldCBkcmFnT3Zlck5vZGUgPSA8SFRNTEVsZW1lbnQ+ZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChjbGllbnRYLCBjbGllbnRZKTtcbiAgICB0aGlzLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQuaGlkZGVuID0gZmFsc2U7XG5cbiAgICBsZXQgc2Nyb2xsYWJsZVBhcmVudE5vZGUgPSBmaW5kU2Nyb2xsYWJsZVBhcmVudChkcmFnT3Zlck5vZGUpO1xuXG4gICAgbGV0IHRvcCA9IHNjcm9sbGFibGVQYXJlbnROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcbiAgICBsZXQgYm90dG9tID0gc2Nyb2xsYWJsZVBhcmVudE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tO1xuICAgIGxldCBsZWZ0ID0gc2Nyb2xsYWJsZVBhcmVudE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICBsZXQgcmlnaHQgPSBzY3JvbGxhYmxlUGFyZW50Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodDtcblxuICAgIGNvbnN0IHJlcGVhdCA9ICgpID0+IHtcbiAgICAgIGlmIChjbGllbnRZIC0gdG9wIDw9IHN0YXJ0U2Nyb2xsQm91bmRhcnkpIHtcbiAgICAgICAgc2Nyb2xsYWJsZVBhcmVudE5vZGUuc2Nyb2xsVG9wIC09IDE1O1xuICAgICAgfSBlbHNlIGlmIChib3R0b20gLSBjbGllbnRZIDw9IHN0YXJ0U2Nyb2xsQm91bmRhcnkpIHtcbiAgICAgICAgc2Nyb2xsYWJsZVBhcmVudE5vZGUuc2Nyb2xsVG9wICs9IDE1O1xuICAgICAgfSBlbHNlIGlmIChyaWdodCAtIGNsaWVudFggPD0gc3RhcnRTY3JvbGxCb3VuZGFyeSkge1xuICAgICAgICBzY3JvbGxhYmxlUGFyZW50Tm9kZS5zY3JvbGxMZWZ0ICs9IDE1O1xuICAgICAgfSBlbHNlIGlmIChjbGllbnRYIC0gbGVmdCA8PSBzdGFydFNjcm9sbEJvdW5kYXJ5KSB7XG4gICAgICAgIHNjcm9sbGFibGVQYXJlbnROb2RlLnNjcm9sbExlZnQgLT0gMTU7XG4gICAgICB9XG4gICAgICB0aGlzLnNjcm9sbEludGVydmFsSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUocmVwZWF0KTtcbiAgICB9O1xuICAgIHRoaXMuc2Nyb2xsSW50ZXJ2YWxJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShyZXBlYXQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGJhbkRyb3BIZXJlID0gKCk6IHZvaWQgPT4ge1xuICAgIHRoaXMuZG9CYW5Ecm9wSGVyZSgpO1xuICAgIHRoaXMuYWxsb3dEcm9wSGVyZSA9IGZhbHNlO1xuICAgIHRoaXMuZHJvcFRhcmdldCA9IG51bGw7XG4gICAgdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnN0eWxlLmN1cnNvciA9IFwibm90LWFsbG93ZWRcIjtcbiAgICB0aGlzLmlzQm90dG9tID0gbnVsbDtcbiAgfTtcblxuICBwcm90ZWN0ZWQgZG9CYW5Ecm9wSGVyZSA9ICgpOiB2b2lkID0+IHsgfTtcblxuICBwcm90ZWN0ZWQgZ2V0RGF0YUF0dHJpYnV0ZVZhbHVlQnlOb2RlKG5vZGU6IEhUTUxFbGVtZW50KSB7XG4gICAgbGV0IGRhdGFzZXROYW1lID0gXCJzdkRyb3BUYXJnZXRcIjtcbiAgICBjb25zdCB3b3JkcyA9IHRoaXMuZHJhZ2dlZEVsZW1lbnRUeXBlLnNwbGl0KFwiLVwiKTtcbiAgICB3b3Jkcy5mb3JFYWNoKCh3b3JkKSA9PiB7XG4gICAgICBkYXRhc2V0TmFtZSArPSB0aGlzLmNhcGl0YWxpemVGaXJzdExldHRlcih3b3JkKTtcbiAgICB9KTtcbiAgICByZXR1cm4gbm9kZS5kYXRhc2V0W2RhdGFzZXROYW1lXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXREcm9wVGFyZ2V0QnlOb2RlKFxuICAgIGRyb3BUYXJnZXROb2RlOiBIVE1MRWxlbWVudCxcbiAgICBldmVudDogUG9pbnRlckV2ZW50XG4gICk6IGFueSB7XG4gICAgbGV0IGRhdGFBdHRyaWJ1dGVWYWx1ZSA9IHRoaXMuZ2V0RGF0YUF0dHJpYnV0ZVZhbHVlQnlOb2RlKGRyb3BUYXJnZXROb2RlKTtcblxuICAgIHJldHVybiB0aGlzLmdldERyb3BUYXJnZXRCeURhdGFBdHRyaWJ1dGVWYWx1ZShcbiAgICAgIGRhdGFBdHRyaWJ1dGVWYWx1ZSxcbiAgICAgIGRyb3BUYXJnZXROb2RlLFxuICAgICAgZXZlbnRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjYXBpdGFsaXplRmlyc3RMZXR0ZXIoc3RyaW5nOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyaW5nLnNsaWNlKDEpO1xuICB9XG5cbiAgLy9UT0RPIGFkYW5kb25lIHVucmVxdWlyZWQgcGFyYW1zIChzdXJ2ZXktZWxlbWVudHMpXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXREcm9wVGFyZ2V0QnlEYXRhQXR0cmlidXRlVmFsdWUoXG4gICAgZGF0YUF0dHJpYnV0ZVZhbHVlOiBzdHJpbmcsXG4gICAgZHJvcFRhcmdldE5vZGU/OiBIVE1MRWxlbWVudCxcbiAgICBldmVudD86IFBvaW50ZXJFdmVudFxuICApOiBhbnk7XG5cbiAgcHJvdGVjdGVkIGNhbGN1bGF0ZU1pZGRsZU9mSFRNTEVsZW1lbnQoSFRNTEVsZW1lbnQ6IEhUTUxFbGVtZW50KTogbnVtYmVyIHtcbiAgICBjb25zdCByZWN0ID0gSFRNTEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcmV0dXJuIHJlY3QueSArIHJlY3QuaGVpZ2h0IC8gMjtcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBjYWxjdWxhdGVJc0JvdHRvbShcbiAgICBjbGllbnRZOiBudW1iZXIsXG4gICAgZHJvcFRhcmdldE5vZGU/OiBIVE1MRWxlbWVudFxuICApOiBib29sZWFuO1xuXG4gIHByaXZhdGUgZmluZERyb3BUYXJnZXROb2RlRnJvbVBvaW50KFxuICAgIGNsaWVudFg6IG51bWJlcixcbiAgICBjbGllbnRZOiBudW1iZXJcbiAgKTogSFRNTEVsZW1lbnQge1xuICAgIHRoaXMuZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5oaWRkZW4gPSB0cnVlO1xuICAgIGxldCBkcmFnT3Zlck5vZGUgPSA8SFRNTEVsZW1lbnQ+ZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChjbGllbnRYLCBjbGllbnRZKTtcbiAgICB0aGlzLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQuaGlkZGVuID0gZmFsc2U7XG5cbiAgICBpZiAoIWRyYWdPdmVyTm9kZSkgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5maW5kRHJvcFRhcmdldE5vZGVCeURyYWdPdmVyTm9kZShkcmFnT3Zlck5vZGUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZpbmREcm9wVGFyZ2V0Tm9kZUJ5RHJhZ092ZXJOb2RlKGRyYWdPdmVyTm9kZTogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgcmVzdWx0OiBIVE1MRWxlbWVudCA9XG4gICAgICBkcmFnT3Zlck5vZGUucXVlcnlTZWxlY3Rvcih0aGlzLmRyb3BUYXJnZXREYXRhQXR0cmlidXRlTmFtZSkgfHxcbiAgICAgIGRyYWdPdmVyTm9kZS5jbG9zZXN0KHRoaXMuZHJvcFRhcmdldERhdGFBdHRyaWJ1dGVOYW1lKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGRvRHJvcCgpOiBhbnk7XG5cbiAgcHJvdGVjdGVkIGNsZWFyID0gKCkgPT4ge1xuICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuc2Nyb2xsSW50ZXJ2YWxJZCk7XG5cbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIiwgdGhpcy5kcmFnT3Zlcik7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJjYW5jZWxcIiwgdGhpcy5oYW5kbGVQb2ludGVyQ2FuY2VsKTtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLmhhbmRsZUVzY2FwZUJ1dHRvbik7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCB0aGlzLmRyb3ApO1xuICAgIHRoaXMuZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIHRoaXMuZHJvcCk7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0aGlzLmRyYWdnZWRFbGVtZW50U2hvcnRjdXQpO1xuXG4gICAgdGhpcy5kb0NsZWFyKCk7XG5cbiAgICB0aGlzLmRyb3BUYXJnZXQgPSBudWxsO1xuXG4gICAgdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0ID0gbnVsbDtcbiAgICB0aGlzLmRyYWdnZWRFbGVtZW50ID0gbnVsbDtcbiAgICB0aGlzLmlzQm90dG9tID0gbnVsbDtcbiAgICB0aGlzLnBhcmVudEVsZW1lbnQgPSBudWxsO1xuICAgIHRoaXMuc2Nyb2xsSW50ZXJ2YWxJZCA9IG51bGw7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGRvQ2xlYXIoKTogdm9pZCB7IH1cbn1cbiIsImltcG9ydCB7IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyB9IGZyb20gXCJzcmMvcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25yZW5kZXJlZFwiO1xuaW1wb3J0IHsgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UgfSBmcm9tIFwiLi4vcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlXCI7XG5pbXBvcnQgeyBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbCB9IGZyb20gXCIuLi9xdWVzdGlvbl9tYXRyaXhkeW5hbWljXCI7XG5pbXBvcnQgeyBEcmFnRHJvcENvcmUgfSBmcm9tIFwiLi9jb3JlXCI7XG5leHBvcnQgY2xhc3MgRHJhZ0Ryb3BNYXRyaXhSb3dzIGV4dGVuZHMgRHJhZ0Ryb3BDb3JlPFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsPiB7XG4gIHByb3RlY3RlZCBnZXQgZHJhZ2dlZEVsZW1lbnRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwibWF0cml4LXJvd1wiO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdob3N0UG9zaXRpb25DaGFuZ2VkKCk6IHZvaWQge1xuICAgIHRoaXMucGFyZW50RWxlbWVudC5yZW5kZXJlZFRhYmxlLnJvd3MuZm9yRWFjaChcbiAgICAgIChyZW5kZXJlZFJvdzogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93KSA9PiB7XG4gICAgICAgIHJlbmRlcmVkUm93Lmdob3N0UG9zaXRpb24gPSB0aGlzLmdldEdob3N0UG9zaXRpb24oXG4gICAgICAgICAgcmVuZGVyZWRSb3cucm93XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgKTtcbiAgICBzdXBlci5naG9zdFBvc2l0aW9uQ2hhbmdlZCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFNob3J0Y3V0VGV4dChkcmFnZ2VkRWxlbWVudDogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCBtYXRyaXggPSB0aGlzLnBhcmVudEVsZW1lbnQ7XG4gICAgY29uc3QgaW5kZXggPSBtYXRyaXgudmlzaWJsZVJvd3MuaW5kZXhPZihkcmFnZ2VkRWxlbWVudCkgKyAxO1xuICAgIGNvbnN0IHF1ZXN0aW9uVmFsdWUxID0gZHJhZ2dlZEVsZW1lbnQuY2VsbHMubGVuZ3RoID4gMSA/IGRyYWdnZWRFbGVtZW50LmNlbGxzWzFdLnF1ZXN0aW9uVmFsdWUgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcXVlc3Rpb25WYWx1ZTAgPSBkcmFnZ2VkRWxlbWVudC5jZWxscy5sZW5ndGggPiAwID8gZHJhZ2dlZEVsZW1lbnQuY2VsbHNbMF0ucXVlc3Rpb25WYWx1ZSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gKFxuICAgICAgcXVlc3Rpb25WYWx1ZTEgJiYgcXVlc3Rpb25WYWx1ZTEudmFsdWUgfHxcbiAgICAgIHF1ZXN0aW9uVmFsdWUwICYmIHF1ZXN0aW9uVmFsdWUwLnZhbHVlIHx8XG4gICAgICBcIlwiICsgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldERyb3BUYXJnZXRCeURhdGFBdHRyaWJ1dGVWYWx1ZShcbiAgICBkYXRhQXR0cmlidXRlVmFsdWU6IGFueVxuICApOiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSB7XG4gICAgY29uc3QgbWF0cml4ID0gdGhpcy5wYXJlbnRFbGVtZW50O1xuICAgIGxldCBkcm9wVGFyZ2V0Um93O1xuXG4gICAgZHJvcFRhcmdldFJvdyA9IG1hdHJpeC52aXNpYmxlUm93cy5maWx0ZXIoXG4gICAgICAocm93OiBhbnkpID0+IHJvdy5pZCA9PT0gZGF0YUF0dHJpYnV0ZVZhbHVlXG4gICAgKVswXTtcblxuICAgIHJldHVybiBkcm9wVGFyZ2V0Um93O1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzRHJvcFRhcmdldFZhbGlkKGRyb3BUYXJnZXQ6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmRyb3BUYXJnZXQgPT09IHRoaXMuZHJhZ2dlZEVsZW1lbnQpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCByb3dzID0gdGhpcy5wYXJlbnRFbGVtZW50LnZpc2libGVSb3dzO1xuICAgIHJldHVybiByb3dzLmluZGV4T2YoZHJvcFRhcmdldCkgIT09IC0xO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZpbmREcm9wVGFyZ2V0Tm9kZUJ5RHJhZ092ZXJOb2RlKFxuICAgIGRyYWdPdmVyTm9kZTogSFRNTEVsZW1lbnRcbiAgKTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IHJlc3VsdDogSFRNTEVsZW1lbnQgPSBkcmFnT3Zlck5vZGUuY2xvc2VzdChcbiAgICAgIHRoaXMuZHJvcFRhcmdldERhdGFBdHRyaWJ1dGVOYW1lXG4gICAgKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhbGN1bGF0ZUlzQm90dG9tKGNsaWVudFk6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJvd3MgPSB0aGlzLnBhcmVudEVsZW1lbnQudmlzaWJsZVJvd3M7XG4gICAgcmV0dXJuIChcbiAgICAgIHJvd3MuaW5kZXhPZih0aGlzLmRyb3BUYXJnZXQpIC0gcm93cy5pbmRleE9mKHRoaXMuZHJhZ2dlZEVsZW1lbnQpID4gMFxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZG9Ecm9wID0gKCk6IFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsID0+IHtcbiAgICBjb25zdCBtYXRyaXggPSB0aGlzLnBhcmVudEVsZW1lbnQ7XG4gICAgY29uc3QgZnJvbUluZGV4ID0gbWF0cml4LnZpc2libGVSb3dzLmluZGV4T2YodGhpcy5kcmFnZ2VkRWxlbWVudCk7XG4gICAgY29uc3QgdG9JbmRleCA9IG1hdHJpeC52aXNpYmxlUm93cy5pbmRleE9mKHRoaXMuZHJvcFRhcmdldCk7XG4gICAgbWF0cml4Lm1vdmVSb3dCeUluZGV4KGZyb21JbmRleCwgdG9JbmRleCk7XG5cbiAgICByZXR1cm4gbWF0cml4O1xuICB9O1xufVxuIiwiaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4uL2l0ZW12YWx1ZVwiO1xuaW1wb3J0IHsgRHJhZ0Ryb3BDaG9pY2VzIH0gZnJvbSBcIi4vY2hvaWNlc1wiO1xuZXhwb3J0IGNsYXNzIERyYWdEcm9wUmFua2luZ0Nob2ljZXMgZXh0ZW5kcyBEcmFnRHJvcENob2ljZXMge1xuICBwcm90ZWN0ZWQgZ2V0IGRyYWdnZWRFbGVtZW50VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInJhbmtpbmctaXRlbVwiO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZURyYWdnZWRFbGVtZW50U2hvcnRjdXQoXG4gICAgdGV4dDogc3RyaW5nLFxuICAgIGRyYWdnZWRFbGVtZW50Tm9kZTogSFRNTEVsZW1lbnRcbiAgKTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IGRyYWdnZWRFbGVtZW50U2hvcnRjdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIC8vIGRyYWdnZWRFbGVtZW50U2hvcnRjdXQuaW5uZXJUZXh0ID0gdGV4dDtcbiAgICBkcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnN0eWxlLmNzc1RleHQgPSBgIFxuICAgICAgICAgIGN1cnNvcjogZ3JhYmJpbmc7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIHotaW5kZXg6IDEwMDA7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMzZweDtcbiAgICAgICAgICBtaW4td2lkdGg6IDEwMHB4O1xuICAgICAgICAgIGJveC1zaGFkb3c6IDBweCA4cHggMTZweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgICAgICAgcGFkZGluZy1yaWdodDogMTZweDtcbiAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG4gICAgICAgICAgZm9udC1mYW1pbHk6IFwiT3BlbiBTYW5zXCI7XG4gICAgICAgIGA7XG5cbiAgICBjb25zdCBpc0RlZXBDbG9uZSA9IHRydWU7XG4gICAgY29uc3QgY2xvbmUgPSA8SFRNTEVsZW1lbnQ+ZHJhZ2dlZEVsZW1lbnROb2RlLmNsb25lTm9kZShpc0RlZXBDbG9uZSk7XG4gICAgZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dC5hcHBlbmRDaGlsZChjbG9uZSk7XG5cbiAgICByZXR1cm4gZHJhZ2dlZEVsZW1lbnRTaG9ydGN1dDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXREcm9wVGFyZ2V0QnlEYXRhQXR0cmlidXRlVmFsdWUoXG4gICAgZGF0YUF0dHJpYnV0ZVZhbHVlOiBzdHJpbmdcbiAgKTogSXRlbVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnRFbGVtZW50LnJhbmtpbmdDaG9pY2VzW2RhdGFBdHRyaWJ1dGVWYWx1ZV07XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNEcm9wVGFyZ2V0VmFsaWQoXG4gICAgZHJvcFRhcmdldDogSXRlbVZhbHVlLFxuICAgIGRyb3BUYXJnZXROb2RlPzogSFRNTEVsZW1lbnRcbiAgKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY2hvaWNlcyA9IHRoaXMucGFyZW50RWxlbWVudC5yYW5raW5nQ2hvaWNlcztcblxuICAgIGNvbnN0IGRyb3BUYXJnZXRJbmRleCA9IGNob2ljZXMuaW5kZXhPZih0aGlzLmRyb3BUYXJnZXQpO1xuICAgIGNvbnN0IGRyYWdnZWRFbGVtZW50SW5kZXggPSBjaG9pY2VzLmluZGV4T2YodGhpcy5kcmFnZ2VkRWxlbWVudCk7XG5cbiAgICBpZiAoZHJhZ2dlZEVsZW1lbnRJbmRleCA+IGRyb3BUYXJnZXRJbmRleCAmJiBkcm9wVGFyZ2V0Tm9kZS5jbGFzc0xpc3QuY29udGFpbnMoXCJzdi1kcmFnZHJvcC1tb3ZldXBcIikpIHtcbiAgICAgIHRoaXMucGFyZW50RWxlbWVudC5kcm9wVGFyZ2V0Tm9kZU1vdmUgPSBudWxsO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChkcmFnZ2VkRWxlbWVudEluZGV4IDwgZHJvcFRhcmdldEluZGV4ICYmIGRyb3BUYXJnZXROb2RlLmNsYXNzTGlzdC5jb250YWlucyhcInN2LWRyYWdkcm9wLW1vdmVkb3duXCIpKSB7XG4gICAgICB0aGlzLnBhcmVudEVsZW1lbnQuZHJvcFRhcmdldE5vZGVNb3ZlID0gbnVsbDtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoY2hvaWNlcy5pbmRleE9mKGRyb3BUYXJnZXQpID09PSAtMSlcbiAgICAgIC8vIHNob3VsZG4ndCBhbGxvdyB0byBkcm9wIG9uIFwiYWRvcm5lcnNcIiAoc2VsZWN0YWxsLCBub25lLCBvdGhlcilcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhbGN1bGF0ZUlzQm90dG9tKGNsaWVudFk6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNob2ljZXMgPSB0aGlzLnBhcmVudEVsZW1lbnQucmFua2luZ0Nob2ljZXM7XG4gICAgcmV0dXJuIChcbiAgICAgIGNob2ljZXMuaW5kZXhPZih0aGlzLmRyb3BUYXJnZXQpIC0gY2hvaWNlcy5pbmRleE9mKHRoaXMuZHJhZ2dlZEVsZW1lbnQpID5cbiAgICAgIDBcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFmdGVyRHJhZ092ZXIoZHJvcFRhcmdldE5vZGU6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3QgY2hvaWNlcyA9IHRoaXMucGFyZW50RWxlbWVudC5yYW5raW5nQ2hvaWNlcztcbiAgICBjb25zdCBkcm9wVGFyZ2V0SW5kZXggPSBjaG9pY2VzLmluZGV4T2YodGhpcy5kcm9wVGFyZ2V0KTtcbiAgICBjb25zdCBkcmFnZ2VkRWxlbWVudEluZGV4ID0gY2hvaWNlcy5pbmRleE9mKHRoaXMuZHJhZ2dlZEVsZW1lbnQpO1xuXG4gICAgY2hvaWNlcy5zcGxpY2UoZHJhZ2dlZEVsZW1lbnRJbmRleCwgMSk7XG4gICAgY2hvaWNlcy5zcGxpY2UoZHJvcFRhcmdldEluZGV4LCAwLCB0aGlzLmRyYWdnZWRFbGVtZW50KTtcbiAgICB0aGlzLnBhcmVudEVsZW1lbnQuc2V0UHJvcGVydHlWYWx1ZShcInJhbmtpbmdDaG9pY2VzXCIsIGNob2ljZXMpO1xuICAgIHRoaXMudXBkYXRlRHJhZ2dlZEVsZW1lbnRTaG9ydGN1dChkcm9wVGFyZ2V0SW5kZXggKyAxKTtcblxuICAgIGlmIChkcmFnZ2VkRWxlbWVudEluZGV4ICE9PSBkcm9wVGFyZ2V0SW5kZXgpIHtcbiAgICAgIGRyb3BUYXJnZXROb2RlLmNsYXNzTGlzdC5yZW1vdmUoXCJzdi1kcmFnZHJvcC1tb3ZldXBcIik7XG4gICAgICBkcm9wVGFyZ2V0Tm9kZS5jbGFzc0xpc3QucmVtb3ZlKFwic3YtZHJhZ2Ryb3AtbW92ZWRvd25cIik7XG4gICAgICB0aGlzLnBhcmVudEVsZW1lbnQuZHJvcFRhcmdldE5vZGVNb3ZlID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZHJhZ2dlZEVsZW1lbnRJbmRleCA+IGRyb3BUYXJnZXRJbmRleCkge1xuICAgICAgdGhpcy5wYXJlbnRFbGVtZW50LmRyb3BUYXJnZXROb2RlTW92ZSA9IFwiZG93blwiO1xuICAgIH1cblxuICAgIGlmIChkcmFnZ2VkRWxlbWVudEluZGV4IDwgZHJvcFRhcmdldEluZGV4KSB7XG4gICAgICB0aGlzLnBhcmVudEVsZW1lbnQuZHJvcFRhcmdldE5vZGVNb3ZlID0gXCJ1cFwiO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRHJhZ2dlZEVsZW1lbnRTaG9ydGN1dChuZXdJbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgbmV3SW5kZXhUZXh0ID0gbmV3SW5kZXggKyBcIlwiO1xuICAgIC8vIFRPRE8gc2hvdWxkIGF2b2lkIGRpcmVjdCBET00gbWFuaXB1bGF0aW9uLCBkbyB0aHJvdWdoIHRoZSBmcmFtZXdvcmtzIGluc3RlYWRcbiAgICBjb25zdCBpbmRleE5vZGU6IEhUTUxFbGVtZW50ID0gdGhpcy5kcmFnZ2VkRWxlbWVudFNob3J0Y3V0LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICBcIi5zdi1yYW5raW5nLWl0ZW1fX2luZGV4XCJcbiAgICApO1xuICAgIGluZGV4Tm9kZS5pbm5lclRleHQgPSBuZXdJbmRleFRleHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2hvc3RQb3NpdGlvbkNoYW5nZWQoKTogdm9pZCB7XG4gICAgdGhpcy5wYXJlbnRFbGVtZW50LmN1cnJlbnREcm9wVGFyZ2V0ID0gdGhpcy5kcmFnZ2VkRWxlbWVudDtcbiAgICBzdXBlci5naG9zdFBvc2l0aW9uQ2hhbmdlZCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRvRHJvcCA9ICgpOiBhbnkgPT4ge1xuICAgIHRoaXMucGFyZW50RWxlbWVudC5zZXRWYWx1ZSgpO1xuICAgIHJldHVybiB0aGlzLnBhcmVudEVsZW1lbnQ7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGhhbmRsZUVzY2FwZUJ1dHRvbiA9IChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQgPT4ge1xuICAgIGlmIChldmVudC5rZXlDb2RlID09IDI3KSB7XG4gICAgICB0aGlzLnBhcmVudEVsZW1lbnQudXBkYXRlUmFua2luZ0Nob2ljZXMoKTtcbiAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICB9XG4gIH07XG5cbiAgcHJvdGVjdGVkIGRvQ2xlYXIgPSAoKTogdm9pZCA9PiB7XG4gICAgdGhpcy5wYXJlbnRFbGVtZW50LmRyb3BUYXJnZXROb2RlTW92ZSA9IG51bGw7XG4gIH07XG59XG4iLCJpbXBvcnQgeyBEcmFnVHlwZU92ZXJNZUVudW0sIFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi4vc3VydmV5LWVsZW1lbnRcIjtcbmltcG9ydCB7IElFbGVtZW50IH0gZnJvbSBcIi4uL2Jhc2UtaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgSnNvbk9iamVjdCwgU2VyaWFsaXplciB9IGZyb20gXCIuLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBQYWdlTW9kZWwgfSBmcm9tIFwiLi4vcGFnZVwiO1xuaW1wb3J0IHsgRHJhZ0Ryb3BDb3JlIH0gZnJvbSBcIi4vY29yZVwiO1xuXG5leHBvcnQgY2xhc3MgRHJhZ0Ryb3BTdXJ2ZXlFbGVtZW50cyBleHRlbmRzIERyYWdEcm9wQ29yZTxhbnk+IHtcbiAgcHVibGljIHN0YXRpYyBuZXdHaG9zdFBhZ2U6IFBhZ2VNb2RlbCA9IG51bGw7XG4gIHB1YmxpYyBzdGF0aWMgcmVzdHJpY3REcmFnUXVlc3Rpb25CZXR3ZWVuUGFnZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHN0YXRpYyBlZGdlSGVpZ2h0OiBudW1iZXIgPSAzMDtcbiAgcHVibGljIHN0YXRpYyBuZXN0ZWRQYW5lbERlcHRoOiBudW1iZXIgPSAtMTtcbiAgcHVibGljIHN0YXRpYyBnaG9zdFN1cnZleUVsZW1lbnROYW1lID1cbiAgICBcInN2LWRyYWctZHJvcC1naG9zdC1zdXJ2ZXktZWxlbWVudC1uYW1lXCI7IC8vIGJlZm9yZSByZW5hbWluZyB1c2UgZ2xvYmEgc2VhcmNoICh3ZSBoYXZlIGFsc28gY3NzIHNlbGVjdG9ycylcblxuICBwcm90ZWN0ZWQgaXNFZGdlOiBib29sZWFuID0gZmFsc2U7XG4gIHByb3RlY3RlZCBwcmV2SXNFZGdlOiBhbnkgPSBudWxsO1xuICBwcm90ZWN0ZWQgZ2hvc3RTdXJ2ZXlFbGVtZW50OiBJRWxlbWVudCA9IG51bGw7XG5cbiAgcHJvdGVjdGVkIGdldCBkcmFnZ2VkRWxlbWVudFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJzdXJ2ZXktZWxlbWVudFwiO1xuICB9XG5cbiAgcHVibGljIHN0YXJ0RHJhZ1Rvb2xib3hJdGVtKFxuICAgIGV2ZW50OiBQb2ludGVyRXZlbnQsXG4gICAgZHJhZ2dlZEVsZW1lbnRKc29uOiBKc29uT2JqZWN0XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGRyYWdnZWRFbGVtZW50ID0gdGhpcy5jcmVhdGVFbGVtZW50RnJvbUpzb24oZHJhZ2dlZEVsZW1lbnRKc29uKTtcbiAgICB0aGlzLnN0YXJ0RHJhZyhldmVudCwgZHJhZ2dlZEVsZW1lbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZUVsZW1lbnRGcm9tSnNvbihqc29uOiBvYmplY3QpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgZWxlbWVudDogYW55ID0gdGhpcy5jcmVhdGVOZXdFbGVtZW50KGpzb24pO1xuICAgIGlmIChlbGVtZW50W1wic2V0U3VydmV5SW1wbFwiXSkge1xuICAgICAgZWxlbWVudFtcInNldFN1cnZleUltcGxcIl0odGhpcy5zdXJ2ZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50W1wic2V0RGF0YVwiXSh0aGlzLnN1cnZleSk7XG4gICAgfVxuICAgIGVsZW1lbnQucmVuZGVyV2lkdGggPSBcIjEwMCVcIjtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTmV3RWxlbWVudChqc29uOiBhbnkpOiBJRWxlbWVudCB7XG4gICAgdmFyIG5ld0VsZW1lbnQgPSBTZXJpYWxpemVyLmNyZWF0ZUNsYXNzKGpzb25bXCJ0eXBlXCJdKTtcbiAgICBuZXcgSnNvbk9iamVjdCgpLnRvT2JqZWN0KGpzb24sIG5ld0VsZW1lbnQpO1xuICAgIHJldHVybiBuZXdFbGVtZW50O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFNob3J0Y3V0VGV4dChkcmFnZ2VkRWxlbWVudDogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gZHJhZ2dlZEVsZW1lbnRbXCJ0aXRsZVwiXSB8fCBkcmFnZ2VkRWxlbWVudFtcIm5hbWVcIl07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RHJvcFRhcmdldEJ5RGF0YUF0dHJpYnV0ZVZhbHVlKFxuICAgIGRhdGFBdHRyaWJ1dGVWYWx1ZTogc3RyaW5nLFxuICAgIGRyb3BUYXJnZXROb2RlOiBIVE1MRWxlbWVudCxcbiAgICBldmVudDogUG9pbnRlckV2ZW50XG4gICk6IGFueSB7XG4gICAgdGhpcy5pc0VkZ2UgPSB0aGlzLmNhbGN1bGF0ZUlzRWRnZShkcm9wVGFyZ2V0Tm9kZSwgZXZlbnQuY2xpZW50WSk7XG5cbiAgICBpZiAoIWRhdGFBdHRyaWJ1dGVWYWx1ZSkge1xuICAgICAgLy8gcGFuZWwgZHluYW1pY1xuICAgICAgY29uc3QgbmVhcmVzdERyb3BUYXJnZXRFbGVtZW50ID0gZHJvcFRhcmdldE5vZGUucGFyZW50RWxlbWVudC5jbG9zZXN0PFxuICAgICAgICBIVE1MRWxlbWVudFxuICAgICAgPih0aGlzLmRyb3BUYXJnZXREYXRhQXR0cmlidXRlTmFtZSk7XG4gICAgICBkYXRhQXR0cmlidXRlVmFsdWUgPSB0aGlzLmdldERhdGFBdHRyaWJ1dGVWYWx1ZUJ5Tm9kZShuZWFyZXN0RHJvcFRhcmdldEVsZW1lbnQpO1xuICAgIH1cblxuICAgIGlmICghZGF0YUF0dHJpYnV0ZVZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBmaW5kIGRyb3AgdGFyZ2V0IHN1cnZleSBlbGVtZW50IG5hbWVcIik7XG4gICAgfVxuXG4gICAgaWYgKGRhdGFBdHRyaWJ1dGVWYWx1ZSA9PT0gRHJhZ0Ryb3BTdXJ2ZXlFbGVtZW50cy5naG9zdFN1cnZleUVsZW1lbnROYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcmV2RHJvcFRhcmdldDtcbiAgICB9XG5cbiAgICAvLyBkcm9wIHRvIG5ldyBwYWdlXG4gICAgaWYgKGRhdGFBdHRyaWJ1dGVWYWx1ZSA9PT0gXCJuZXdHaG9zdFBhZ2VcIikge1xuICAgICAgcmV0dXJuIERyYWdEcm9wU3VydmV5RWxlbWVudHMubmV3R2hvc3RQYWdlO1xuICAgIH1cblxuICAgIC8vIGRyb3AgdG8gcGFnZVxuICAgIGxldCBwYWdlOiBhbnkgPSB0aGlzLnN1cnZleS5nZXRQYWdlQnlOYW1lKGRhdGFBdHRyaWJ1dGVWYWx1ZSk7XG4gICAgaWYgKHBhZ2UpIHtcbiAgICAgIGlmIChcbiAgICAgICAgLy8gVE9ETyB3ZSBjYW4ndCBkcm9wIG9uIG5vdCBlbXB0eSBwYWdlIGRpcmVjdGx5IGZvciBub3dcbiAgICAgICAgcGFnZS5lbGVtZW50cy5sZW5ndGggIT09IDBcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYWdlO1xuICAgIH1cblxuICAgIC8vIGRyb3AgdG8gcXVlc3Rpb24gb3IgcGFuZWxcbiAgICBsZXQgZHJvcFRhcmdldDogYW55O1xuICAgIGxldCBxdWVzdGlvbjtcblxuICAgIHRoaXMuc3VydmV5LnBhZ2VzLmZvckVhY2goKHBhZ2U6IFBhZ2VNb2RlbCkgPT4ge1xuICAgICAgcXVlc3Rpb24gPSBwYWdlLmdldEVsZW1lbnRCeU5hbWUoZGF0YUF0dHJpYnV0ZVZhbHVlKTtcbiAgICAgIGlmIChxdWVzdGlvbikgZHJvcFRhcmdldCA9IHF1ZXN0aW9uO1xuICAgIH0pO1xuXG4gICAgLy8gZHJvcCB0byBwYW5lbGR5bmFtaWNcbiAgICBpZiAoZHJvcFRhcmdldC5nZXRUeXBlKCkgPT09IFwicGFuZWxkeW5hbWljXCIgJiYgIXRoaXMuaXNFZGdlKSB7XG4gICAgICBkcm9wVGFyZ2V0ID0gKDxhbnk+ZHJvcFRhcmdldCkudGVtcGxhdGU7XG4gICAgfVxuICAgIC8vIGRyb3AgdG8gcGFuZWxcbiAgICBlbHNlIGlmIChkcm9wVGFyZ2V0LmlzUGFuZWwpIHtcbiAgICAgIGNvbnN0IHBhbmVsRHJhZ0luZm8gPSB0aGlzLmdldFBhbmVsRHJhZ0luZm8oXG4gICAgICAgIGRyb3BUYXJnZXROb2RlLFxuICAgICAgICBkcm9wVGFyZ2V0LFxuICAgICAgICBldmVudFxuICAgICAgKTtcbiAgICAgIGRyb3BUYXJnZXQgPSBwYW5lbERyYWdJbmZvLmRyb3BUYXJnZXQ7XG4gICAgICB0aGlzLmlzRWRnZSA9IHBhbmVsRHJhZ0luZm8uaXNFZGdlO1xuICAgIH1cbiAgICAvLyBkcm9wIHRvIHF1ZXN0aW9uXG5cbiAgICAvL3F1ZXN0aW9uIGluc2lkZSBwYW5lbGR5bWFuaWNcbiAgICBpZiAoIWRyb3BUYXJnZXQucGFnZSkge1xuICAgICAgY29uc3QgbmVhcmVzdERyb3BUYXJnZXRQYWdlRWxlbWVudCA9IGRyb3BUYXJnZXROb2RlLnBhcmVudEVsZW1lbnQuY2xvc2VzdDxcbiAgICAgICAgSFRNTEVsZW1lbnRcbiAgICAgID4oXCJbZGF0YS1zdi1kcm9wLXRhcmdldC1wYWdlXVwiKTtcbiAgICAgIGRhdGFBdHRyaWJ1dGVWYWx1ZSA9IG5lYXJlc3REcm9wVGFyZ2V0UGFnZUVsZW1lbnQuZGF0YXNldC5zdkRyb3BUYXJnZXRQYWdlO1xuICAgICAgbGV0IHBhZ2U6IGFueSA9IHRoaXMuc3VydmV5LmdldFBhZ2VCeU5hbWUoZGF0YUF0dHJpYnV0ZVZhbHVlKTtcbiAgICAgIGRyb3BUYXJnZXQuX19wYWdlID0gcGFnZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZHJvcFRhcmdldDtcbiAgICAvLyBFTyBkcm9wIHRvIHF1ZXN0aW9uIG9yIHBhbmVsXG4gIH1cblxuICBwcm90ZWN0ZWQgaXNEcm9wVGFyZ2V0VmFsaWQoZHJvcFRhcmdldDogU3VydmV5RWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIGlmICghZHJvcFRhcmdldCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0aGlzLmRyb3BUYXJnZXQgPT09IHRoaXMuZHJhZ2dlZEVsZW1lbnQpIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChcbiAgICAgIERyYWdEcm9wU3VydmV5RWxlbWVudHMucmVzdHJpY3REcmFnUXVlc3Rpb25CZXR3ZWVuUGFnZXMgJiZcbiAgICAgIHRoaXMuc2hvdWxkUmVzdHJpY0RyYWdRdWVzdGlvbkJldHdlZW5QYWdlcyhkcm9wVGFyZ2V0KVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhbGN1bGF0ZUlzQm90dG9tKFxuICAgIGNsaWVudFk6IG51bWJlcixcbiAgICBkcm9wVGFyZ2V0Tm9kZT86IEhUTUxFbGVtZW50XG4gICk6IGJvb2xlYW4ge1xuICAgIC8vIHdlIHNob3VsZG4ndCByZWN1bGMgaXNCb3R0b20gaWYgZHJhZyBvdmVyIGdob3N0IHN1cnZleSBlbGVtZW50XG4gICAgaWYgKHRoaXMuZ2V0RGF0YUF0dHJpYnV0ZVZhbHVlQnlOb2RlKGRyb3BUYXJnZXROb2RlKSA9PT0gRHJhZ0Ryb3BTdXJ2ZXlFbGVtZW50cy5naG9zdFN1cnZleUVsZW1lbnROYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0JvdHRvbTtcbiAgICB9XG4gICAgY29uc3QgbWlkZGxlID0gdGhpcy5jYWxjdWxhdGVNaWRkbGVPZkhUTUxFbGVtZW50KGRyb3BUYXJnZXROb2RlKTtcbiAgICByZXR1cm4gY2xpZW50WSA+PSBtaWRkbGU7XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNEcm9wVGFyZ2V0RG9lc250Q2hhbmdlZChuZXdJc0JvdHRvbTogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmRyb3BUYXJnZXQgPT09IHRoaXMuZ2hvc3RTdXJ2ZXlFbGVtZW50KSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5kcm9wVGFyZ2V0ID09PSB0aGlzLnByZXZEcm9wVGFyZ2V0ICYmIG5ld0lzQm90dG9tID09PSB0aGlzLmlzQm90dG9tXG4gICAgICAvKiYmdGhpcy5pc0VkZ2UgPT09IHRoaXMucHJldklzRWRnZSovXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkUmVzdHJpY0RyYWdRdWVzdGlvbkJldHdlZW5QYWdlcyhkcm9wVGFyZ2V0OiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBvbGRQYWdlID0gKDxhbnk+dGhpcy5kcmFnZ2VkRWxlbWVudClbXCJwYWdlXCJdO1xuICAgIGNvbnN0IG5ld1BhZ2UgPSBkcm9wVGFyZ2V0LmlzUGFnZSA/IGRyb3BUYXJnZXQgOiBkcm9wVGFyZ2V0W1wicGFnZVwiXTtcblxuICAgIC8vIGlmIG9sZFBhZ2UgPT09IG51bGwgdGhlbiBpdCBpcyBkcm9tIHRoZSB0b29sYm94XG4gICAgcmV0dXJuIG9sZFBhZ2UgJiYgb2xkUGFnZSAhPT0gbmV3UGFnZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGFuZWxEcmFnSW5mbyhcbiAgICBIVE1MRWxlbWVudDogSFRNTEVsZW1lbnQsXG4gICAgZHJvcFRhcmdldDogYW55LFxuICAgIGV2ZW50OiBQb2ludGVyRXZlbnRcbiAgKSB7XG4gICAgbGV0IGlzRWRnZSA9IHRoaXMuaXNFZGdlO1xuXG4gICAgaWYgKCFpc0VkZ2UgJiYgZHJvcFRhcmdldC5xdWVzdGlvbnMubGVuZ3RoICE9PSAwKSB7XG4gICAgICBIVE1MRWxlbWVudCA9IHRoaXMuZmluZERlZXBlc3REcm9wVGFyZ2V0Q2hpbGQoSFRNTEVsZW1lbnQpO1xuICAgICAgZHJvcFRhcmdldCA9IHRoaXMuZ2V0RHJvcFRhcmdldEJ5Tm9kZShIVE1MRWxlbWVudCwgZXZlbnQpO1xuICAgIH1cblxuICAgIHJldHVybiB7IGRyb3BUYXJnZXQsIGlzRWRnZSB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGZpbmREZWVwZXN0RHJvcFRhcmdldENoaWxkKHBhcmVudDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSB0aGlzLmRyb3BUYXJnZXREYXRhQXR0cmlidXRlTmFtZTtcblxuICAgIGxldCByZXN1bHQgPSBwYXJlbnQ7XG4gICAgd2hpbGUgKCEhcGFyZW50KSB7XG4gICAgICByZXN1bHQgPSBwYXJlbnQ7XG4gICAgICBwYXJlbnQgPSBwYXJlbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIDxIVE1MRWxlbWVudD5yZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGNhbGN1bGF0ZUlzRWRnZShIVE1MRWxlbWVudDogSFRNTEVsZW1lbnQsIGNsaWVudFk6IG51bWJlcikge1xuICAgIGNvbnN0IG1pZGRsZSA9IHRoaXMuY2FsY3VsYXRlTWlkZGxlT2ZIVE1MRWxlbWVudChIVE1MRWxlbWVudCk7XG4gICAgcmV0dXJuIE1hdGguYWJzKGNsaWVudFkgLSBtaWRkbGUpID49IERyYWdEcm9wU3VydmV5RWxlbWVudHMuZWRnZUhlaWdodDtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY3VsYXRlSXNSaWdodCgpOiBib29sZWFuIHtcbiAgICB2YXIgcGFnZU9yUGFuZWwgPSB0aGlzLmRyb3BUYXJnZXQucGFyZW50O1xuICAgIHZhciBzcmNJbmRleCA9IHBhZ2VPclBhbmVsLmVsZW1lbnRzLmluZGV4T2YodGhpcy5kcmFnZ2VkRWxlbWVudCk7XG4gICAgdmFyIGRlc3RJbmRleCA9IHBhZ2VPclBhbmVsLmVsZW1lbnRzLmluZGV4T2YodGhpcy5kcm9wVGFyZ2V0KTtcbiAgICByZXR1cm4gc3JjSW5kZXggPCBkZXN0SW5kZXg7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWZ0ZXJEcmFnT3ZlcigpOiB2b2lkIHtcbiAgICB0aGlzLnByZXZJc0VkZ2UgPSB0aGlzLmlzRWRnZTtcbiAgICB0aGlzLmluc2VydEdob3N0RWxlbWVudEludG9TdXJ2ZXkoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBkb1N0YXJ0RHJhZygpOiB2b2lkIHtcbiAgICB0aGlzLmdob3N0U3VydmV5RWxlbWVudCA9IHRoaXMuY3JlYXRlR2hvc3RTdXJ2ZXlFbGVtZW50KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZG9CYW5Ecm9wSGVyZSA9ICgpOiB2b2lkID0+IHtcbiAgICB0aGlzLnJlbW92ZUdob3N0RWxlbWVudEZyb21TdXJ2ZXkoKTtcbiAgICB0aGlzLmlzRWRnZSA9IG51bGw7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGRvRHJvcCA9ICgpOiBhbnkgPT4ge1xuICAgIGlmICh0aGlzLmRyb3BUYXJnZXQpIHtcbiAgICAgIHJldHVybiB0aGlzLmluc2VydFJlYWxFbGVtZW50SW50b1N1cnZleSgpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIHByb3RlY3RlZCBkb0NsZWFyID0gKCk6IHZvaWQgPT4ge1xuICAgIHRoaXMucmVtb3ZlR2hvc3RFbGVtZW50RnJvbVN1cnZleSgpO1xuICAgIHRoaXMuaXNFZGdlID0gbnVsbDtcbiAgICB0aGlzLmdob3N0U3VydmV5RWxlbWVudCA9IG51bGw7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGluc2VydEdob3N0RWxlbWVudEludG9TdXJ2ZXkoKTogYm9vbGVhbiB7XG4gICAgdGhpcy5yZW1vdmVHaG9zdEVsZW1lbnRGcm9tU3VydmV5KCk7XG5cbiAgICBsZXQgaXNUYXJnZXRSb3dNdWx0aXBsZSA9IHRoaXMuY2FsY1RhcmdldFJvd011bHRpcGxlKCk7XG5cbiAgICB0aGlzLmdob3N0U3VydmV5RWxlbWVudCA9IHRoaXMuY3JlYXRlR2hvc3RTdXJ2ZXlFbGVtZW50KGlzVGFyZ2V0Um93TXVsdGlwbGUpO1xuXG4gICAgdGhpcy5naG9zdFN1cnZleUVsZW1lbnQubmFtZSA9XG4gICAgICBEcmFnRHJvcFN1cnZleUVsZW1lbnRzLmdob3N0U3VydmV5RWxlbWVudE5hbWU7IC8vIFRPRE8gd2h5IGRvIHdlIG5lZWQgc2V0dXAgaXQgbWFudWFsbHkgc2VlIGNyZWF0ZUdob3N0U3VydmV5RWxlbWVudCBtZXRob2RcblxuICAgIHRoaXMucGFyZW50RWxlbWVudCA9IHRoaXMuZHJvcFRhcmdldC5pc1BhZ2VcbiAgICAgID8gdGhpcy5kcm9wVGFyZ2V0XG4gICAgICA6ICgoPGFueT50aGlzLmRyb3BUYXJnZXQpLnBhZ2UgfHwgKDxhbnk+dGhpcy5kcm9wVGFyZ2V0KS5fX3BhZ2UpO1xuXG4gICAgaWYgKHRoaXMuaXNEcmFnT3Zlckluc2lkZUVtcHR5UGFuZWwoKSkge1xuICAgICAgdGhpcy5kcm9wVGFyZ2V0LmRyYWdUeXBlT3Zlck1lID0gRHJhZ1R5cGVPdmVyTWVFbnVtLkluc2lkZUVtcHR5UGFuZWw7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmlzRWRnZSAmJiBpc1RhcmdldFJvd011bHRpcGxlKSB7XG4gICAgICB0aGlzLmRyb3BUYXJnZXQuZHJhZ1R5cGVPdmVyTWUgPSB0aGlzLmNhbGN1bGF0ZUlzUmlnaHQoKSA/XG4gICAgICAgIERyYWdUeXBlT3Zlck1lRW51bS5NdWx0aWxpbmVSaWdodCA6XG4gICAgICAgIERyYWdUeXBlT3Zlck1lRW51bS5NdWx0aWxpbmVMZWZ0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGFyZW50RWxlbWVudC5kcmFnRHJvcFN0YXJ0KFxuICAgICAgdGhpcy5kcmFnZ2VkRWxlbWVudCxcbiAgICAgIHRoaXMuZ2hvc3RTdXJ2ZXlFbGVtZW50LFxuICAgICAgRHJhZ0Ryb3BTdXJ2ZXlFbGVtZW50cy5uZXN0ZWRQYW5lbERlcHRoXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucGFyZW50RWxlbWVudC5kcmFnRHJvcE1vdmVUbyhcbiAgICAgIHRoaXMuZHJvcFRhcmdldCxcbiAgICAgIGlzVGFyZ2V0Um93TXVsdGlwbGUgPyB0aGlzLmNhbGN1bGF0ZUlzUmlnaHQoKSA6IHRoaXMuaXNCb3R0b20sXG4gICAgICB0aGlzLmlzRWRnZVxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjVGFyZ2V0Um93TXVsdGlwbGUoKSB7XG4gICAgbGV0IHRhcmdldFBhcmVudCA9IHRoaXMuZHJvcFRhcmdldC5pc1BhZ2UgfHwgdGhpcy5kcm9wVGFyZ2V0LmlzUGFuZWwgPyB0aGlzLmRyb3BUYXJnZXQgOiB0aGlzLmRyb3BUYXJnZXQucGFyZW50O1xuXG4gICAgaWYgKHRoaXMuZHJvcFRhcmdldC5nZXRUeXBlKCkgPT09IFwicGFuZWxkeW5hbWljXCIpIHtcbiAgICAgIHRhcmdldFBhcmVudCA9IHRoaXMuZHJvcFRhcmdldC50ZW1wbGF0ZVZhbHVlO1xuICAgIH1cblxuICAgIGxldCB0YXJnZXRSb3c6IGFueTtcblxuICAgIHRhcmdldFBhcmVudC5yb3dzLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICBpZiAocm93LmVsZW1lbnRzLmluZGV4T2YodGhpcy5kcm9wVGFyZ2V0KSAhPT0gLTEpIHtcbiAgICAgICAgdGFyZ2V0Um93ID0gcm93O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgaXNUYXJnZXRSb3dNdWx0aXBsZSA9IHRhcmdldFJvdyAmJiB0YXJnZXRSb3cuZWxlbWVudHMubGVuZ3RoID4gMTtcblxuICAgIGlmICh0aGlzLmlzRWRnZSAmJiBpc1RhcmdldFJvd011bHRpcGxlKSB7XG4gICAgICB0YXJnZXRQYXJlbnQuX19wYWdlID0gdGhpcy5kcm9wVGFyZ2V0LnBhZ2U7XG4gICAgICB0aGlzLmRyb3BUYXJnZXQgPSB0YXJnZXRQYXJlbnQ7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzVGFyZ2V0Um93TXVsdGlwbGU7XG4gIH1cblxuICBwcml2YXRlIGlzRHJhZ092ZXJJbnNpZGVFbXB0eVBhbmVsKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlzRW1wdHlQYW5lbCA9IHRoaXMuZHJvcFRhcmdldC5pc1BhbmVsICYmIHRoaXMuZHJvcFRhcmdldC5xdWVzdGlvbnMubGVuZ3RoID09PSAwO1xuICAgIGNvbnN0IGlzRHJhZ092ZXJJbnNpZGUgPSAhdGhpcy5pc0VkZ2U7XG4gICAgcmV0dXJuIGlzRW1wdHlQYW5lbCAmJiBpc0RyYWdPdmVySW5zaWRlO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbW92ZUdob3N0RWxlbWVudEZyb21TdXJ2ZXkoKTogdm9pZCB7XG4gICAgY29uc3QgZHJvcFRhcmdldCA9IHRoaXMucHJldkRyb3BUYXJnZXQgfHwgdGhpcy5kcm9wVGFyZ2V0O1xuICAgIGlmICghIWRyb3BUYXJnZXQpIHtcbiAgICAgIGRyb3BUYXJnZXQuZHJhZ1R5cGVPdmVyTWUgPSBudWxsO1xuICAgIH1cbiAgICBpZiAoISF0aGlzLnBhcmVudEVsZW1lbnQpIHRoaXMucGFyZW50RWxlbWVudC5kcmFnRHJvcEZpbmlzaCh0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5zZXJ0UmVhbEVsZW1lbnRJbnRvU3VydmV5KCkge1xuICAgIHRoaXMucmVtb3ZlR2hvc3RFbGVtZW50RnJvbVN1cnZleSgpO1xuXG4gICAgY29uc3QgaXNUYXJnZXRSb3dNdWx0aXBsZSA9IHRoaXMuY2FsY1RhcmdldFJvd011bHRpcGxlKCk7XG5cbiAgICAvLyBnaG9zdCBuZXcgcGFnZVxuICAgIGlmICh0aGlzLmRyb3BUYXJnZXQuaXNQYWdlICYmICg8YW55PnRoaXMuZHJvcFRhcmdldClbXCJfaXNHaG9zdFwiXSkge1xuICAgICAgKDxhbnk+dGhpcy5kcm9wVGFyZ2V0KVtcIl9hZGRHaG9zdFBhZ2VWaWV3TW9kZWxcIl0oKTtcbiAgICB9XG4gICAgLy8gRU8gZ2hvc3QgbmV3IHBhZ2VcblxuICAgIC8vIGZha2UgdGFyZ2V0IGVsZW1lbnQgKG5lZWQgb25seSBmb3IgXCJzdGFydFdpdGhOZXdMaW5lOmZhbHNlXCIgZmVhdHVyZSlcbiAgICAvL1RPRE8gbmVlZCBmb3IgZHJhZ0Ryb3AgaGVscGVyIGluIGxpYnJhcnlcbiAgICBjb25zdCBqc29uID0gbmV3IEpzb25PYmplY3QoKS50b0pzb25PYmplY3QodGhpcy5kcmFnZ2VkRWxlbWVudCk7XG4gICAganNvbltcInR5cGVcIl0gPSB0aGlzLmRyYWdnZWRFbGVtZW50LmdldFR5cGUoKTtcbiAgICBjb25zdCBmYWtlVGFyZ2V0RWxlbWVudCA9IHRoaXMuY3JlYXRlRmFrZVRhcmdldEVsZW1lbnQoXG4gICAgICB0aGlzLmRyYWdnZWRFbGVtZW50Lm5hbWUsXG4gICAgICBqc29uXG4gICAgKTtcbiAgICAvLyBFTyBmYWtlIHRhcmdldCBlbGVtZW50XG5cbiAgICB0aGlzLnBhcmVudEVsZW1lbnQuZHJhZ0Ryb3BTdGFydChcbiAgICAgIHRoaXMuZHJhZ2dlZEVsZW1lbnQsXG4gICAgICBmYWtlVGFyZ2V0RWxlbWVudCxcbiAgICAgIERyYWdEcm9wU3VydmV5RWxlbWVudHMubmVzdGVkUGFuZWxEZXB0aFxuICAgICk7XG5cbiAgICB0aGlzLnBhcmVudEVsZW1lbnQuZHJhZ0Ryb3BNb3ZlVG8oXG4gICAgICB0aGlzLmRyb3BUYXJnZXQsXG4gICAgICBpc1RhcmdldFJvd011bHRpcGxlID8gdGhpcy5jYWxjdWxhdGVJc1JpZ2h0KCkgOiB0aGlzLmlzQm90dG9tLFxuICAgICAgdGhpcy5pc0VkZ2VcbiAgICApO1xuXG4gICAgY29uc3QgbmV3RWxlbWVudCA9IHRoaXMucGFyZW50RWxlbWVudC5kcmFnRHJvcEZpbmlzaCgpO1xuICAgIHJldHVybiBuZXdFbGVtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVGYWtlVGFyZ2V0RWxlbWVudChlbGVtZW50TmFtZTogc3RyaW5nLCBqc29uOiBhbnkpOiBhbnkge1xuICAgIGlmICghZWxlbWVudE5hbWUgfHwgIWpzb24pIHJldHVybiBudWxsO1xuICAgIHZhciB0YXJnZXRFbGVtZW50ID0gbnVsbDtcbiAgICB0YXJnZXRFbGVtZW50ID0gU2VyaWFsaXplci5jcmVhdGVDbGFzcyhqc29uW1widHlwZVwiXSk7XG4gICAgbmV3IEpzb25PYmplY3QoKS50b09iamVjdChqc29uLCB0YXJnZXRFbGVtZW50KTtcbiAgICB0YXJnZXRFbGVtZW50Lm5hbWUgPSBlbGVtZW50TmFtZTtcbiAgICBpZiAodGFyZ2V0RWxlbWVudFtcInNldFN1cnZleUltcGxcIl0pIHtcbiAgICAgIHRhcmdldEVsZW1lbnRbXCJzZXRTdXJ2ZXlJbXBsXCJdKHRoaXMuc3VydmV5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFyZ2V0RWxlbWVudFtcInNldERhdGFcIl0odGhpcy5zdXJ2ZXkpO1xuICAgIH1cbiAgICB0YXJnZXRFbGVtZW50LnJlbmRlcldpZHRoID0gXCIxMDAlXCI7XG4gICAgcmV0dXJuIHRhcmdldEVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUdob3N0U3VydmV5RWxlbWVudChpc011bHRpcGxlUm93RHJhZyA9IGZhbHNlKTogYW55IHtcbiAgICBsZXQgY2xhc3NOYW1lID0gXCJzdi1kcmFnLWRyb3AtZ2hvc3RcIjtcbiAgICBsZXQgbWluV2lkdGggPSBcIjMwMHB4XCI7XG5cbiAgICBpZiAoaXNNdWx0aXBsZVJvd0RyYWcpIHtcbiAgICAgIG1pbldpZHRoID0gXCI0cHhcIjtcbiAgICAgIGNsYXNzTmFtZSArPSBcIiBzdi1kcmFnLWRyb3AtZ2hvc3QtLXZlcnRpY2FsXCI7XG4gICAgfVxuXG4gICAgY29uc3QganNvbjogYW55ID0ge1xuICAgICAgdHlwZTogXCJodG1sXCIsXG4gICAgICBtaW5XaWR0aCxcbiAgICAgIG5hbWU6IERyYWdEcm9wU3VydmV5RWxlbWVudHMuZ2hvc3RTdXJ2ZXlFbGVtZW50TmFtZSxcbiAgICAgIGh0bWw6IGA8ZGl2IGNsYXNzPVwiJHtjbGFzc05hbWV9XCI+PC9kaXY+YCxcbiAgICB9O1xuXG4gICAgY29uc3QgZWxlbWVudCA9IDxhbnk+dGhpcy5jcmVhdGVFbGVtZW50RnJvbUpzb24oanNvbik7XG4gICAgZWxlbWVudC5zdGFydFdpdGhOZXdMaW5lID0gIWlzTXVsdGlwbGVSb3dEcmFnO1xuXG4gICAgaWYgKGlzTXVsdGlwbGVSb3dEcmFnKSB7XG4gICAgICBlbGVtZW50Lm1heFdpZHRoID0gXCI0cHhcIjtcbiAgICAgIGVsZW1lbnQucmVuZGVyV2lkdGggPSBcIjBweFwiO1xuICAgICAgZWxlbWVudC5wYWRkaW5nUmlnaHQgPSBcIjBweFwiO1xuICAgICAgZWxlbWVudC5wYWRkaW5nTGVmdCA9IFwiMHB4XCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cbn1cbiIsImltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcbi8qKlxuICogVGhlIGNsYXNzIGNvbnRhaW5zIG1ldGhvZHMgdG8gd29yayB3aXRoIGFwaS5zdXJ2ZXlqcy5pbyBzZXJ2aWNlLlxuICovXG5leHBvcnQgY2xhc3MgZHhTdXJ2ZXlTZXJ2aWNlIHtcbiAgcHVibGljIHN0YXRpYyBnZXQgc2VydmljZVVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzZXR0aW5ncy5zdXJ2ZXlTZXJ2aWNlVXJsO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgc2V0IHNlcnZpY2VVcmwodmFsOiBzdHJpbmcpIHtcbiAgICBzZXR0aW5ncy5zdXJ2ZXlTZXJ2aWNlVXJsID0gdmFsO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge31cbiAgcHVibGljIGxvYWRTdXJ2ZXkoXG4gICAgc3VydmV5SWQ6IHN0cmluZyxcbiAgICBvbkxvYWQ6IChzdWNjZXNzOiBib29sZWFuLCByZXN1bHQ6IHN0cmluZywgcmVzcG9uc2U6IGFueSkgPT4gdm9pZFxuICApIHtcbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgeGhyLm9wZW4oXG4gICAgICBcIkdFVFwiLFxuICAgICAgZHhTdXJ2ZXlTZXJ2aWNlLnNlcnZpY2VVcmwgKyBcIi9nZXRTdXJ2ZXk/c3VydmV5SWQ9XCIgKyBzdXJ2ZXlJZFxuICAgICk7XG4gICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIik7XG4gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciByZXN1bHQgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZSk7XG4gICAgICBvbkxvYWQoeGhyLnN0YXR1cyA9PSAyMDAsIHJlc3VsdCwgeGhyLnJlc3BvbnNlKTtcbiAgICB9O1xuICAgIHhoci5zZW5kKCk7XG4gIH1cbiAgcHVibGljIGdldFN1cnZleUpzb25BbmRJc0NvbXBsZXRlZChcbiAgICBzdXJ2ZXlJZDogc3RyaW5nLFxuICAgIGNsaWVudElkOiBzdHJpbmcsXG4gICAgb25Mb2FkOiAoXG4gICAgICBzdWNjZXNzOiBib29sZWFuLFxuICAgICAgc3VydmV5SnNvbjogYW55LFxuICAgICAgcmVzdWx0OiBzdHJpbmcsXG4gICAgICByZXNwb25zZTogYW55XG4gICAgKSA9PiB2b2lkXG4gICkge1xuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB4aHIub3BlbihcbiAgICAgIFwiR0VUXCIsXG4gICAgICBkeFN1cnZleVNlcnZpY2Uuc2VydmljZVVybCArXG4gICAgICAgIFwiL2dldFN1cnZleUFuZElzQ29tcGxldGVkP3N1cnZleUlkPVwiICtcbiAgICAgICAgc3VydmV5SWQgK1xuICAgICAgICBcIiZjbGllbnRJZD1cIiArXG4gICAgICAgIGNsaWVudElkXG4gICAgKTtcbiAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKTtcbiAgICB4aHIub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHJlc3VsdCA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlKTtcbiAgICAgIHZhciBzdXJ2ZXlKc29uID0gcmVzdWx0ID8gcmVzdWx0LnN1cnZleSA6IG51bGw7XG4gICAgICB2YXIgaXNDb21wbGV0ZWQgPSByZXN1bHQgPyByZXN1bHQuaXNDb21wbGV0ZWQgOiBudWxsO1xuICAgICAgb25Mb2FkKHhoci5zdGF0dXMgPT0gMjAwLCBzdXJ2ZXlKc29uLCBpc0NvbXBsZXRlZCwgeGhyLnJlc3BvbnNlKTtcbiAgICB9O1xuICAgIHhoci5zZW5kKCk7XG4gIH1cbiAgcHVibGljIHNlbmRSZXN1bHQoXG4gICAgcG9zdElkOiBzdHJpbmcsXG4gICAgcmVzdWx0OiBKU09OLFxuICAgIG9uU2VuZFJlc3VsdDogKHN1Y2Nlc3M6IGJvb2xlYW4sIHJlc3BvbnNlOiBhbnksIHJlcXVlc3Q/OiBhbnkpID0+IHZvaWQsXG4gICAgY2xpZW50SWQ6IHN0cmluZyA9IG51bGwsXG4gICAgaXNQYXJ0aWFsQ29tcGxldGVkOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgIHhoci5vcGVuKFwiUE9TVFwiLCBkeFN1cnZleVNlcnZpY2Uuc2VydmljZVVybCArIFwiL3Bvc3QvXCIpO1xuICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiKTtcbiAgICB2YXIgZGF0YSA9IHsgcG9zdElkOiBwb3N0SWQsIHN1cnZleVJlc3VsdDogSlNPTi5zdHJpbmdpZnkocmVzdWx0KSB9O1xuICAgIGlmIChjbGllbnRJZCkgKDxhbnk+ZGF0YSlbXCJjbGllbnRJZFwiXSA9IGNsaWVudElkO1xuICAgIGlmIChpc1BhcnRpYWxDb21wbGV0ZWQpICg8YW55PmRhdGEpW1wiaXNQYXJ0aWFsQ29tcGxldGVkXCJdID0gdHJ1ZTtcbiAgICB2YXIgZGF0YVN0cmluZ2lmeTogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHhoci5vbmxvYWQgPSB4aHIub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghb25TZW5kUmVzdWx0KSByZXR1cm47XG4gICAgICBvblNlbmRSZXN1bHQoeGhyLnN0YXR1cyA9PT0gMjAwLCB4aHIucmVzcG9uc2UsIHhocik7XG4gICAgfTtcbiAgICB4aHIuc2VuZChkYXRhU3RyaW5naWZ5KTtcbiAgfVxuICBwdWJsaWMgc2VuZEZpbGUoXG4gICAgcG9zdElkOiBzdHJpbmcsXG4gICAgZmlsZTogRmlsZSxcbiAgICBvblNlbmRGaWxlOiAoc3VjY2VzczogYm9vbGVhbiwgcmVzcG9uc2U6IGFueSkgPT4gdm9pZFxuICApIHtcbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgeGhyLm9ubG9hZCA9IHhoci5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFvblNlbmRGaWxlKSByZXR1cm47XG4gICAgICBvblNlbmRGaWxlKHhoci5zdGF0dXMgPT0gMjAwLCBKU09OLnBhcnNlKHhoci5yZXNwb25zZSkpO1xuICAgIH07XG4gICAgeGhyLm9wZW4oXCJQT1NUXCIsIGR4U3VydmV5U2VydmljZS5zZXJ2aWNlVXJsICsgXCIvdXBsb2FkL1wiLCB0cnVlKTtcbiAgICB2YXIgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoXCJmaWxlXCIsIGZpbGUpO1xuICAgIGZvcm1EYXRhLmFwcGVuZChcInBvc3RJZFwiLCBwb3N0SWQpO1xuICAgIHhoci5zZW5kKGZvcm1EYXRhKTtcbiAgfVxuICBwdWJsaWMgZ2V0UmVzdWx0KFxuICAgIHJlc3VsdElkOiBzdHJpbmcsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG9uR2V0UmVzdWx0OiAoXG4gICAgICBzdWNjZXNzOiBib29sZWFuLFxuICAgICAgZGF0YTogYW55LFxuICAgICAgZGF0YUxpc3Q6IEFycmF5PGFueT4sXG4gICAgICByZXNwb25zZTogYW55XG4gICAgKSA9PiB2b2lkXG4gICkge1xuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB2YXIgZGF0YSA9IFwicmVzdWx0SWQ9XCIgKyByZXN1bHRJZCArIFwiJm5hbWU9XCIgKyBuYW1lO1xuICAgIHhoci5vcGVuKFwiR0VUXCIsIGR4U3VydmV5U2VydmljZS5zZXJ2aWNlVXJsICsgXCIvZ2V0UmVzdWx0P1wiICsgZGF0YSk7XG4gICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIik7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbnVsbDtcbiAgICAgIHZhciBsaXN0ID0gbnVsbDtcbiAgICAgIGlmICh4aHIuc3RhdHVzID09IDIwMCkge1xuICAgICAgICByZXN1bHQgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZSk7XG4gICAgICAgIGxpc3QgPSBbXTtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHJlc3VsdC5RdWVzdGlvblJlc3VsdCkge1xuICAgICAgICAgIHZhciBlbCA9IHsgbmFtZToga2V5LCB2YWx1ZTogcmVzdWx0LlF1ZXN0aW9uUmVzdWx0W2tleV0gfTtcbiAgICAgICAgICBsaXN0LnB1c2goZWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBvbkdldFJlc3VsdCh4aHIuc3RhdHVzID09IDIwMCwgcmVzdWx0LCBsaXN0LCB4aHIucmVzcG9uc2UpO1xuICAgIH07XG4gICAgeGhyLnNlbmQoKTtcbiAgfVxuICBwdWJsaWMgaXNDb21wbGV0ZWQoXG4gICAgcmVzdWx0SWQ6IHN0cmluZyxcbiAgICBjbGllbnRJZDogc3RyaW5nLFxuICAgIG9uSXNDb21wbGV0ZWQ6IChzdWNjZXNzOiBib29sZWFuLCByZXN1bHQ6IHN0cmluZywgcmVzcG9uc2U6IGFueSkgPT4gdm9pZFxuICApIHtcbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgdmFyIGRhdGEgPSBcInJlc3VsdElkPVwiICsgcmVzdWx0SWQgKyBcIiZjbGllbnRJZD1cIiArIGNsaWVudElkO1xuICAgIHhoci5vcGVuKFwiR0VUXCIsIGR4U3VydmV5U2VydmljZS5zZXJ2aWNlVXJsICsgXCIvaXNDb21wbGV0ZWQ/XCIgKyBkYXRhKTtcbiAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciByZXN1bHQgPSBudWxsO1xuICAgICAgaWYgKHhoci5zdGF0dXMgPT0gMjAwKSB7XG4gICAgICAgIHJlc3VsdCA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICAgIG9uSXNDb21wbGV0ZWQoeGhyLnN0YXR1cyA9PSAyMDAsIHJlc3VsdCwgeGhyLnJlc3BvbnNlKTtcbiAgICB9O1xuICAgIHhoci5zZW5kKCk7XG4gIH1cbn1cbiIsImltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9hcmFiaWNcIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9iYXNxdWVcIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9idWxnYXJpYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9jYXRhbGFuXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vY3JvYXRpYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9jemVjaFwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2RhbmlzaFwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2R1dGNoXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vZXN0b25pYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9maW5uaXNoXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vZnJlbmNoXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vZ2VvcmdpYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9nZXJtYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9ncmVla1wiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2hlYnJld1wiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2hpbmRpXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vaHVuZ2FyaWFuXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vaWNlbGFuZGljXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vaW5kb25lc2lhblwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2l0YWxpYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9qYXBhbmVzZVwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2themFraFwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2tvcmVhblwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL2xhdHZpYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9saXRodWFuaWFuXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vbWFjZWRvbmlhblwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL25vcndlZ2lhblwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL3BlcnNpYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9wb2xpc2hcIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9wb3J0dWd1ZXNlXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vcG9ydHVndWVzZS1iclwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL3JvbWFuaWFuXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vcnVzc2lhblwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL3NlcmJpYW5cIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9zaW1wbGlmaWVkLWNoaW5lc2VcIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi9zcGFuaXNoXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vc3dhaGlsaVwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL3N3ZWRpc2hcIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi90YWppa1wiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL3RoYWlcIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi90cmFkaXRpb25hbC1jaGluZXNlXCI7XG5pbXBvcnQgXCIuLi8uLi9sb2NhbGl6YXRpb24vdHVya2lzaFwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL3VrcmFpbmlhblwiO1xuaW1wb3J0IFwiLi4vLi4vbG9jYWxpemF0aW9uL3ZpZXRuYW1lc2VcIjtcbmltcG9ydCBcIi4uLy4uL2xvY2FsaXphdGlvbi93ZWxzaFwiO1xuIiwiLy8gc3R5bGVzXG5pbXBvcnQgXCIuLi8uLi9tYWluLnNjc3NcIjtcbi8vaW1wb3J0IFwiLi4vLi4vbW9kZXJuLnNjc3NcIjtcblxuZXhwb3J0IHZhciBWZXJzaW9uOiBzdHJpbmc7XG5WZXJzaW9uID0gYCR7cHJvY2Vzcy5lbnYuVkVSU0lPTn1gO1xuXG5leHBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCIuLi8uLi9zZXR0aW5nc1wiO1xuZXhwb3J0IHsgSGVscGVycywgSGFzaFRhYmxlIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnNcIjtcbmV4cG9ydCB7XG4gIEFuc3dlckNvdW50VmFsaWRhdG9yLFxuICBFbWFpbFZhbGlkYXRvcixcbiAgTnVtZXJpY1ZhbGlkYXRvcixcbiAgUmVnZXhWYWxpZGF0b3IsXG4gIFN1cnZleVZhbGlkYXRvcixcbiAgVGV4dFZhbGlkYXRvcixcbiAgVmFsaWRhdG9yUmVzdWx0LFxuICBFeHByZXNzaW9uVmFsaWRhdG9yLFxuICBWYWxpZGF0b3JSdW5uZXJcbn0gZnJvbSBcIi4uLy4uL3ZhbGlkYXRvclwiO1xuZXhwb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4uLy4uL2l0ZW12YWx1ZVwiO1xuZXhwb3J0IHsgQmFzZSwgRXZlbnQsIEFycmF5Q2hhbmdlcywgQ29tcHV0ZWRVcGRhdGVyIH0gZnJvbSBcIi4uLy4uL2Jhc2VcIjtcbmV4cG9ydCB7XG4gIElTdXJ2ZXksXG4gIElTdXJ2ZXlFbGVtZW50LFxuICBJRWxlbWVudCxcbiAgSVBhZ2UsXG4gIElUaXRsZU93bmVyXG59IGZyb20gXCIuLi8uLi9iYXNlLWludGVyZmFjZXNcIjtcbmV4cG9ydCB7IFN1cnZleUVycm9yIH0gZnJvbSBcIi4uLy4uL3N1cnZleS1lcnJvclwiO1xuZXhwb3J0IHsgU3VydmV5RWxlbWVudENvcmUsIFN1cnZleUVsZW1lbnQsIERyYWdUeXBlT3Zlck1lRW51bSB9IGZyb20gXCIuLi8uLi9zdXJ2ZXktZWxlbWVudFwiO1xuZXhwb3J0IHsgQ2FsY3VsYXRlZFZhbHVlIH0gZnJvbSBcIi4uLy4uL2NhbGN1bGF0ZWRWYWx1ZVwiO1xuZXhwb3J0IHtcbiAgQ3VzdG9tRXJyb3IsXG4gIEFuc3dlclJlcXVpcmVkRXJyb3IsXG4gIE9uZUFuc3dlclJlcXVpcmVkRXJyb3IsXG4gIFJlcXVyZU51bWVyaWNFcnJvcixcbiAgRXhjZWVkU2l6ZUVycm9yXG59IGZyb20gXCIuLi8uLi9lcnJvclwiO1xuZXhwb3J0IHtcbiAgSUxvY2FsaXphYmxlT3duZXIsXG4gIElMb2NhbGl6YWJsZVN0cmluZyxcbiAgTG9jYWxpemFibGVTdHJpbmcsXG4gIExvY2FsaXphYmxlU3RyaW5nc1xufSBmcm9tIFwiLi4vLi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmV4cG9ydCB7IEh0bWxDb25kaXRpb25JdGVtLCBVcmxDb25kaXRpb25JdGVtIH0gZnJvbSBcIi4uLy4uL2V4cHJlc3Npb25JdGVtc1wiO1xuZXhwb3J0IHsgQ2hvaWNlc1Jlc3RmdWwsIENob2ljZXNSZXN0ZnVsbCB9IGZyb20gXCIuLi8uLi9jaG9pY2VzUmVzdGZ1bFwiO1xuZXhwb3J0IHsgRnVuY3Rpb25GYWN0b3J5LCByZWdpc3RlckZ1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL2Z1bmN0aW9uc2ZhY3RvcnlcIjtcbmV4cG9ydCB7IENvbmRpdGlvblJ1bm5lciwgRXhwcmVzc2lvblJ1bm5lciB9IGZyb20gXCIuLi8uLi9jb25kaXRpb25zXCI7XG5leHBvcnQge1xuICBPcGVyYW5kLFxuICBDb25zdCxcbiAgQmluYXJ5T3BlcmFuZCxcbiAgVmFyaWFibGUsXG4gIEZ1bmN0aW9uT3BlcmFuZCxcbiAgQXJyYXlPcGVyYW5kXG59IGZyb20gXCIuLi8uLi9leHByZXNzaW9ucy9leHByZXNzaW9uc1wiO1xuZXhwb3J0IHsgQ29uZGl0aW9uc1BhcnNlciB9IGZyb20gXCIuLi8uLi9jb25kaXRpb25zUGFyc2VyXCI7XG5leHBvcnQgeyBQcm9jZXNzVmFsdWUgfSBmcm9tIFwiLi4vLi4vY29uZGl0aW9uUHJvY2Vzc1ZhbHVlXCI7XG5leHBvcnQge1xuICBKc29uRXJyb3IsXG4gIEpzb25JbmNvcnJlY3RUeXBlRXJyb3IsXG4gIEpzb25NZXRhZGF0YSxcbiAgSnNvbk1ldGFkYXRhQ2xhc3MsXG4gIEpzb25NaXNzaW5nVHlwZUVycm9yLFxuICBKc29uTWlzc2luZ1R5cGVFcnJvckJhc2UsXG4gIEpzb25PYmplY3QsXG4gIEpzb25PYmplY3RQcm9wZXJ0eSxcbiAgSnNvblJlcXVpcmVkUHJvcGVydHlFcnJvcixcbiAgSnNvblVua25vd25Qcm9wZXJ0eUVycm9yLFxuICBTZXJpYWxpemVyLFxuICBwcm9wZXJ0eSxcbiAgcHJvcGVydHlBcnJheVxufSBmcm9tIFwiLi4vLi4vanNvbm9iamVjdFwiO1xuZXhwb3J0IHtcbiAgTWF0cml4RHJvcGRvd25DZWxsLFxuICBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZVxufSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25iYXNlXCI7XG5leHBvcnQgeyBNYXRyaXhEcm9wZG93bkNvbHVtbiwgbWF0cml4RHJvcGRvd25Db2x1bW5UeXBlcyB9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bmNvbHVtblwiO1xuZXhwb3J0IHsgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCwgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93LCBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZSB9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bnJlbmRlcmVkXCI7XG5leHBvcnQge1xuICBNYXRyaXhEcm9wZG93blJvd01vZGVsLFxuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxcbn0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duXCI7XG5leHBvcnQge1xuICBNYXRyaXhEeW5hbWljUm93TW9kZWwsXG4gIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsXG59IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9tYXRyaXhkeW5hbWljXCI7XG5leHBvcnQge1xuICBNYXRyaXhSb3dNb2RlbCxcbiAgTWF0cml4Q2VsbHMsXG4gIFF1ZXN0aW9uTWF0cml4TW9kZWwsXG4gIElNYXRyaXhEYXRhXG59IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9tYXRyaXhcIjtcbmV4cG9ydCB7XG4gIE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCxcbiAgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbFxufSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fbXVsdGlwbGV0ZXh0XCI7XG5leHBvcnQgeyBQYW5lbE1vZGVsLCBQYW5lbE1vZGVsQmFzZSwgUXVlc3Rpb25Sb3dNb2RlbCB9IGZyb20gXCIuLi8uLi9wYW5lbFwiO1xuZXhwb3J0IHsgRmxvd1BhbmVsTW9kZWwgfSBmcm9tIFwiLi4vLi4vZmxvd3BhbmVsXCI7XG5leHBvcnQgeyBQYWdlTW9kZWwgfSBmcm9tIFwiLi4vLi4vcGFnZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uLy4uL3RlbXBsYXRlLXJlbmRlcmVyXCI7XG5leHBvcnQgeyBEZWZhdWx0VGl0bGVNb2RlbCB9IGZyb20gXCIuLi8uLi9kZWZhdWx0VGl0bGVcIjtcbmV4cG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uXCI7XG5leHBvcnQgeyBRdWVzdGlvbk5vblZhbHVlIH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9ubm9udmFsdWVcIjtcbmV4cG9ydCB7IFF1ZXN0aW9uRW1wdHlNb2RlbCB9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9lbXB0eVwiO1xuZXhwb3J0IHtcbiAgUXVlc3Rpb25DaGVja2JveEJhc2UsXG4gIFF1ZXN0aW9uU2VsZWN0QmFzZVxufSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fYmFzZXNlbGVjdFwiO1xuZXhwb3J0IHsgUXVlc3Rpb25DaGVja2JveE1vZGVsIH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX2NoZWNrYm94XCI7XG5leHBvcnQgeyBRdWVzdGlvblJhbmtpbmdNb2RlbCB9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9yYW5raW5nXCI7XG5leHBvcnQgeyBRdWVzdGlvbkNvbW1lbnRNb2RlbCB9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9jb21tZW50XCI7XG5leHBvcnQgeyBRdWVzdGlvbkRyb3Bkb3duTW9kZWwgfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fZHJvcGRvd25cIjtcbmV4cG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSwgRWxlbWVudEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25mYWN0b3J5XCI7XG5leHBvcnQgeyBRdWVzdGlvbkZpbGVNb2RlbCB9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9maWxlXCI7XG5leHBvcnQgeyBRdWVzdGlvbkh0bWxNb2RlbCB9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9odG1sXCI7XG5leHBvcnQgeyBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbCB9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9yYWRpb2dyb3VwXCI7XG5leHBvcnQgeyBRdWVzdGlvblJhdGluZ01vZGVsIH0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX3JhdGluZ1wiO1xuZXhwb3J0IHsgUXVlc3Rpb25FeHByZXNzaW9uTW9kZWwgfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fZXhwcmVzc2lvblwiO1xuZXhwb3J0IHsgUXVlc3Rpb25UZXh0TW9kZWwgfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fdGV4dFwiO1xuZXhwb3J0IHsgUXVlc3Rpb25Cb29sZWFuTW9kZWwgfSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fYm9vbGVhblwiO1xuZXhwb3J0IHtcbiAgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsLFxuICBJbWFnZUl0ZW1WYWx1ZVxufSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25faW1hZ2VwaWNrZXJcIjtcbmV4cG9ydCB7IFF1ZXN0aW9uSW1hZ2VNb2RlbCB9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9pbWFnZVwiO1xuZXhwb3J0IHsgUXVlc3Rpb25TaWduYXR1cmVQYWRNb2RlbCB9IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9zaWduYXR1cmVwYWRcIjtcbmV4cG9ydCB7XG4gIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwsXG4gIFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbVxufSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25fcGFuZWxkeW5hbWljXCI7XG5leHBvcnQgeyBTdXJ2ZXlUaW1lciB9IGZyb20gXCIuLi8uLi9zdXJ2ZXl0aW1lclwiO1xuZXhwb3J0IHsgU3VydmV5UHJvZ3Jlc3NNb2RlbCB9IGZyb20gXCIuLi8uLi9zdXJ2ZXlQcm9ncmVzc1wiO1xuZXhwb3J0IHsgU3VydmV5UHJvZ3Jlc3NCdXR0b25zTW9kZWwgfSBmcm9tIFwiLi4vLi4vc3VydmV5UHJvZ3Jlc3NCdXR0b25zXCI7XG5leHBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCIuLi8uLi9zdXJ2ZXlcIjtcbmV4cG9ydCB7XG4gIFN1cnZleVRyaWdnZXIsXG4gIFN1cnZleVRyaWdnZXJDb21wbGV0ZSxcbiAgU3VydmV5VHJpZ2dlclNldFZhbHVlLFxuICBTdXJ2ZXlUcmlnZ2VyVmlzaWJsZSxcbiAgU3VydmV5VHJpZ2dlckNvcHlWYWx1ZSxcbiAgU3VydmV5VHJpZ2dlclJ1bkV4cHJlc3Npb24sXG4gIFRyaWdnZXJcbn0gZnJvbSBcIi4uLy4uL3RyaWdnZXJcIjtcbmV4cG9ydCB7IFN1cnZleVdpbmRvd01vZGVsIH0gZnJvbSBcIi4uLy4uL3N1cnZleVdpbmRvd1wiO1xuZXhwb3J0IHsgVGV4dFByZVByb2Nlc3NvciB9IGZyb20gXCIuLi8uLi90ZXh0UHJlUHJvY2Vzc29yXCI7XG5cbmV4cG9ydCB7IGR4U3VydmV5U2VydmljZSB9IGZyb20gXCIuLi8uLi9keFN1cnZleVNlcnZpY2VcIjtcbmV4cG9ydCB7IGVuZ2xpc2hTdHJpbmdzIH0gZnJvbSBcIi4uLy4uL2xvY2FsaXphdGlvbi9lbmdsaXNoXCI7XG5leHBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24sIHN1cnZleVN0cmluZ3MgfSBmcm9tIFwiLi4vLi4vc3VydmV5U3RyaW5nc1wiO1xuLy8gZXhwb3J0IHsgY3VsdHVyZUluZm8gfSBmcm9tIFwiLi4vLi4vY3VsdHVyZUluZm9cIjtcbmV4cG9ydCB7XG4gIFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0LFxuICBDdXN0b21XaWRnZXRDb2xsZWN0aW9uLFxufSBmcm9tIFwiLi4vLi4vcXVlc3Rpb25DdXN0b21XaWRnZXRzXCI7XG5leHBvcnQge1xuICBRdWVzdGlvbkN1c3RvbU1vZGVsLFxuICBRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsLFxuICBDb21wb25lbnRRdWVzdGlvbkpTT04sXG4gIENvbXBvbmVudENvbGxlY3Rpb25cbn0gZnJvbSBcIi4uLy4uL3F1ZXN0aW9uX2N1c3RvbVwiO1xuXG5leHBvcnQgeyBTdHlsZXNNYW5hZ2VyIH0gZnJvbSBcIi4uLy4uL3N0eWxlc21hbmFnZXJcIjtcbmV4cG9ydCB7IExpc3RNb2RlbCB9IGZyb20gXCIuLi8uLi9saXN0XCI7XG5leHBvcnQgeyBQb3B1cE1vZGVsLCBQb3B1cEJhc2VWaWV3TW9kZWwsIGNyZWF0ZVBvcHVwTW9kYWxWaWV3TW9kZWwgfSBmcm9tIFwiLi4vLi4vcG9wdXBcIjtcbmV4cG9ydCB7XG4gIFF1ZXN0aW9uQnV0dG9uR3JvdXBNb2RlbCxcbiAgQnV0dG9uR3JvdXBJdGVtTW9kZWwsXG4gIEJ1dHRvbkdyb3VwSXRlbVZhbHVlXG59IGZyb20gXCIuLi8uLi9xdWVzdGlvbl9idXR0b25ncm91cFwiO1xuZXhwb3J0IHsgSXNNb2JpbGUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvaXMtbW9iaWxlXCI7XG5leHBvcnQge1xuICBjb25maXJtQWN0aW9uLFxuICBkZXRlY3RJRU9yRWRnZSxcbiAgZG9LZXkyQ2xpY2tVcCxcbiAgZG9LZXkyQ2xpY2tEb3duLFxuICBsb2FkRmlsZUZyb21CYXNlNjQsXG4gIGluY3JlYXNlSGVpZ2h0QnlDb250ZW50LFxuICBjcmVhdGVTdmdcbn0gZnJvbSBcIi4uLy4uL3V0aWxzL3V0aWxzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vLi4vdXRpbHMvY3NzQ2xhc3NCdWlsZGVyXCI7XG5cbmV4cG9ydCB7IHN1cnZleUNzcyB9IGZyb20gXCIuLi8uLi9kZWZhdWx0Q3NzL2Nzc3N0YW5kYXJkXCI7XG4vL1VuY29tbWVudCB0byBpbmNsdWRlIHRoZSBcImRhdGVcIiBxdWVzdGlvbiB0eXBlLlxuLy9leHBvcnQge2RlZmF1bHQgYXMgUXVlc3Rpb25EYXRlTW9kZWx9IGZyb20gXCIuLi8uLi9wbHVnaW5zL3F1ZXN0aW9uX2RhdGVcIjtcblxuZXhwb3J0IHsgRHJhZ0Ryb3BTdXJ2ZXlFbGVtZW50cyB9IGZyb20gXCIuLi8uLi9kcmFnZHJvcC9zdXJ2ZXktZWxlbWVudHNcIjtcbmV4cG9ydCB7IERyYWdEcm9wQ2hvaWNlcyB9IGZyb20gXCIuLi8uLi9kcmFnZHJvcC9jaG9pY2VzXCI7XG4iLCIvLyBtb2RlbFxuZXhwb3J0ICogZnJvbSBcIi4vY2h1bmtzL21vZGVsXCI7XG5cbi8vIGxvY2FsaXphdGlvblxuaW1wb3J0IFwiLi9jaHVua3MvbG9jYWxpemF0aW9uXCI7XG5cbi8vIGNzcyBzdGFuZGFyZCBjbGFzc2VzXG5leHBvcnQgeyBkZWZhdWx0U3RhbmRhcmRDc3MgfSBmcm9tIFwiLi4vZGVmYXVsdENzcy9jc3NzdGFuZGFyZFwiO1xuLy8gY3NzIGJvb3RzdHJhcCBjbGFzc2VzXG5leHBvcnQgeyBkZWZhdWx0Qm9vdHN0cmFwQ3NzIH0gZnJvbSBcIi4uL2RlZmF1bHRDc3MvY3NzYm9vdHN0cmFwXCI7XG4vLyBjc3MgYm9vdHN0cmFwICsgbWF0ZXJpYWwgY2xhc3Nlc1xuZXhwb3J0IHsgZGVmYXVsdEJvb3RzdHJhcE1hdGVyaWFsQ3NzIH0gZnJvbSBcIi4uL2RlZmF1bHRDc3MvY3NzYm9vdHN0cmFwbWF0ZXJpYWxcIjtcblxuZXhwb3J0IHsgZGVmYXVsdFYyQ3NzIH0gZnJvbSBcIi4uL2RlZmF1bHRDc3MvZGVmYXVsdFYyQ3NzXCI7XG4vLyBjc3MgbW9kZXJuIGNsYXNzZXNcbmV4cG9ydCB7IG1vZGVybkNzcyB9IGZyb20gXCIuLi9kZWZhdWx0Q3NzL2Nzc21vZGVyblwiO1xuXG4vLyB1dGlsc1xuZXhwb3J0ICogZnJvbSBcIi4uL3JlbmRlcmVyRmFjdG9yeVwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL3V0aWxzL3Jlc3BvbnNpdml0eS1tYW5hZ2VyXCI7XG5leHBvcnQgeyB1bndyYXAgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9hY3Rpb25zL2FjdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4uL2FjdGlvbnMvYWRhcHRpdmUtY29udGFpbmVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vYWN0aW9ucy9jb250YWluZXJcIjtcbiIsImltcG9ydCB7IFZ1ZVN1cnZleU1vZGVsIH0gZnJvbSBcIi4uL3Z1ZS9zdXJ2ZXlNb2RlbFwiO1xuZXhwb3J0IHsgVnVlU3VydmV5TW9kZWwgYXMgTW9kZWwgfTtcbmltcG9ydCB7IFZ1ZVN1cnZleVdpbmRvd01vZGVsIH0gZnJvbSBcIi4uL3Z1ZS9zdXJ2ZXlNb2RlbFwiO1xuZXhwb3J0IHsgVnVlU3VydmV5V2luZG93TW9kZWwgYXMgV2luZG93TW9kZWwgfTtcbmV4cG9ydCB7IFN1cnZleSB9IGZyb20gXCIuLi92dWUvc3VydmV5LnZ1ZVwiO1xuZXhwb3J0IHsgQ3VzdG9tV2lkZ2V0IH0gZnJvbSBcIi4uL3Z1ZS9jdXN0b213aWRnZXQudnVlXCI7XG5leHBvcnQgeyBTdXJ2ZXlTdHJpbmcgfSBmcm9tIFwiLi4vdnVlL3N0cmluZy52dWVcIjtcbmV4cG9ydCB7IFN1cnZleVN0cmluZ1ZpZXdlciB9IGZyb20gXCIuLi92dWUvc3RyaW5nLXZpZXdlci52dWVcIjtcbmV4cG9ydCB7IFN1cnZleVN0cmluZ0VkaXRvciB9IGZyb20gXCIuLi92dWUvc3RyaW5nLWVkaXRvci52dWVcIjtcbmV4cG9ydCB7IFN1cnZleUVsZW1lbnRWdWUgfSBmcm9tIFwiLi4vdnVlL2VsZW1lbnQudnVlXCI7XG5leHBvcnQgeyBXaW5kb3cgfSBmcm9tIFwiLi4vdnVlL3dpbmRvdy52dWVcIjtcbmV4cG9ydCB7IFBhZ2UgfSBmcm9tIFwiLi4vdnVlL3BhZ2UudnVlXCI7XG5leHBvcnQgeyBSYWRpb2dyb3VwIH0gZnJvbSBcIi4uL3Z1ZS9yYWRpb2dyb3VwLnZ1ZVwiO1xuZXhwb3J0IHsgUmFkaW9ncm91cEl0ZW0gfSBmcm9tIFwiLi4vdnVlL3JhZGlvZ3JvdXBpdGVtLnZ1ZVwiO1xuZXhwb3J0IHsgT3RoZXJDaG9pY2UgfSBmcm9tIFwiLi4vdnVlL290aGVyQ2hvaWNlLnZ1ZVwiO1xuZXhwb3J0IHsgUmF0aW5nIH0gZnJvbSBcIi4uL3Z1ZS9yYXRpbmcudnVlXCI7XG5leHBvcnQgeyBDb21tZW50IH0gZnJvbSBcIi4uL3Z1ZS9jb21tZW50LnZ1ZVwiO1xuZXhwb3J0IHsgUmFua2luZyB9IGZyb20gXCIuLi92dWUvcmFua2luZy9yYW5raW5nLnZ1ZVwiO1xuZXhwb3J0IHsgUmFua2luZ0l0ZW0gfSBmcm9tIFwiLi4vdnVlL3JhbmtpbmcvcmFua2luZy1pdGVtLnZ1ZVwiO1xuZXhwb3J0IHsgQ2hlY2tib3ggfSBmcm9tIFwiLi4vdnVlL2NoZWNrYm94LnZ1ZVwiO1xuZXhwb3J0IHsgQ2hlY2tib3hJdGVtIH0gZnJvbSBcIi4uL3Z1ZS9jaGVja2JveGl0ZW0udnVlXCI7XG5leHBvcnQgeyBCdXR0b25Hcm91cCB9IGZyb20gXCIuLi92dWUvYnV0dG9uZ3JvdXAudnVlXCI7XG5leHBvcnQgeyBCdXR0b25Hcm91cEl0ZW0gfSBmcm9tIFwiLi4vdnVlL2J1dHRvbmdyb3VwaXRlbS52dWVcIjtcbmV4cG9ydCB7IFF1ZXN0aW9uVGV4dCB9IGZyb20gXCIuLi92dWUvdGV4dC52dWVcIjtcbmV4cG9ydCB7IEJvb2xlYW4gfSBmcm9tIFwiLi4vdnVlL2Jvb2xlYW5cIjtcbmV4cG9ydCB7IEJvb2xlYW5Td2l0Y2ggfSBmcm9tIFwiLi4vdnVlL2Jvb2xlYW4tc3dpdGNoLnZ1ZVwiO1xuZXhwb3J0IHsgQm9vbGVhbkNoZWNrYm94IH0gZnJvbSBcIi4uL3Z1ZS9ib29sZWFuLWNoZWNrYm94LnZ1ZVwiO1xuZXhwb3J0IHsgRW1wdHkgfSBmcm9tIFwiLi4vdnVlL2VtcHR5LnZ1ZVwiO1xuZXhwb3J0IHsgTXVsdGlwbGVUZXh0IH0gZnJvbSBcIi4uL3Z1ZS9tdWx0aXBsZXRleHQudnVlXCI7XG5leHBvcnQgeyBNYXRyaXggfSBmcm9tIFwiLi4vdnVlL21hdHJpeC52dWVcIjtcbmV4cG9ydCB7IERyb3Bkb3duIH0gZnJvbSBcIi4uL3Z1ZS9kcm9wZG93bi52dWVcIjtcbmV4cG9ydCB7IEZpbGUgfSBmcm9tIFwiLi4vdnVlL2ZpbGUudnVlXCI7XG5leHBvcnQgeyBNYXRyaXhDZWxsIH0gZnJvbSBcIi4uL3Z1ZS9tYXRyaXhjZWxsLnZ1ZVwiO1xuZXhwb3J0IHsgTWF0cml4VGFibGUgfSBmcm9tIFwiLi4vdnVlL21hdHJpeHRhYmxlLnZ1ZVwiO1xuZXhwb3J0IHsgTWF0cml4RHJvcGRvd24gfSBmcm9tIFwiLi4vdnVlL21hdHJpeGRyb3Bkb3duLnZ1ZVwiO1xuZXhwb3J0IHsgTWF0cml4RHluYW1pYyB9IGZyb20gXCIuLi92dWUvbWF0cml4ZHluYW1pYy52dWVcIjtcbmV4cG9ydCB7IEVycm9ycyB9IGZyb20gXCIuLi92dWUvZXJyb3JzLnZ1ZVwiO1xuZXhwb3J0IHsgSHRtbCB9IGZyb20gXCIuLi92dWUvaHRtbC52dWVcIjtcbmV4cG9ydCB7IEV4cHJlc3Npb24gfSBmcm9tIFwiLi4vdnVlL2V4cHJlc3Npb24udnVlXCI7XG5leHBvcnQgeyBJbWFnZVBpY2tlciB9IGZyb20gXCIuLi92dWUvaW1hZ2VwaWNrZXIudnVlXCI7XG5leHBvcnQgeyBQYW5lbER5bmFtaWMgfSBmcm9tIFwiLi4vdnVlL3BhbmVsZHluYW1pYy52dWVcIjtcbmV4cG9ydCB7IFBhbmVsRHluYW1pY1JlbW92ZSB9IGZyb20gXCIuLi92dWUvcGFuZWxkeW5hbWljcmVtb3ZlLnZ1ZVwiO1xuZXhwb3J0IHsgUGFuZWxEeW5hbWljUHJvZ3Jlc3MgfSBmcm9tIFwiLi4vdnVlL3BhbmVsZHluYW1pY3Byb2dyZXNzLnZ1ZVwiO1xuZXhwb3J0IHsgUGFuZWxEeW5hbWljUHJvZ3Jlc3NWMiB9IGZyb20gXCIuLi92dWUvcGFuZWxkeW5hbWljcHJvZ3Jlc3NWMi52dWVcIjtcbmV4cG9ydCB7IE5hdmlnYXRpb24gfSBmcm9tIFwiLi4vdnVlL25hdmlnYXRpb24udnVlXCI7XG5leHBvcnQgeyBQcm9ncmVzcyB9IGZyb20gXCIuLi92dWUvcHJvZ3Jlc3MudnVlXCI7XG5leHBvcnQgeyBQcm9ncmVzc0J1dHRvbnMgfSBmcm9tIFwiLi4vdnVlL3Byb2dyZXNzQnV0dG9ucy52dWVcIjtcbmV4cG9ydCB7IFRpbWVyUGFuZWwgfSBmcm9tIFwiLi4vdnVlL3RpbWVycGFuZWwudnVlXCI7XG5leHBvcnQgeyBQYW5lbCB9IGZyb20gXCIuLi92dWUvcGFuZWwudnVlXCI7XG5leHBvcnQgeyBGbG93UGFuZWwgfSBmcm9tIFwiLi4vdnVlL2Zsb3dwYW5lbC52dWVcIjtcbmV4cG9ydCB7IEZsb3dQYW5lbEVsZW1lbnQgfSBmcm9tIFwiLi4vdnVlL2Zsb3dwYW5lbGVsZW1lbnQudnVlXCI7XG5leHBvcnQgeyBSb3cgfSBmcm9tIFwiLi4vdnVlL3Jvdy52dWVcIjtcbmV4cG9ydCB7IEVsZW1lbnRIZWFkZXIgfSBmcm9tIFwiLi4vdnVlL2VsZW1lbnRoZWFkZXIudnVlXCI7XG5leHBvcnQgeyBRdWVzdGlvbkltYWdlIH0gZnJvbSBcIi4uL3Z1ZS9pbWFnZS52dWVcIjtcbmV4cG9ydCB7IFNpZ25hdHVyZVBhZCB9IGZyb20gXCIuLi92dWUvc2lnbmF0dXJlcGFkLnZ1ZVwiO1xuZXhwb3J0IHsgU3VydmV5SGVhZGVyIH0gZnJvbSBcIi4uL3Z1ZS9oZWFkZXIudnVlXCI7XG5leHBvcnQgeyBDdXN0b20gfSBmcm9tIFwiLi4vdnVlL2N1c3RvbS52dWVcIjtcbmV4cG9ydCB7IENvbXBvc2l0ZSB9IGZyb20gXCIuLi92dWUvY29tcG9zaXRlLnZ1ZVwiO1xuXG5leHBvcnQgeyBUaXRsZUVsZW1lbnQgfSBmcm9tIFwiLi4vdnVlL2NvbXBvbmVudHMvdGl0bGUvdGl0bGUtZWxlbWVudC52dWVcIjtcbmV4cG9ydCB7IFRpdGxlQ29udGVudCB9IGZyb20gXCIuLi92dWUvY29tcG9uZW50cy90aXRsZS90aXRsZS1jb250ZW50LnZ1ZVwiO1xuZXhwb3J0IHsgVGl0bGVBY3Rpb25zIH0gZnJvbSBcIi4uL3Z1ZS9jb21wb25lbnRzL3RpdGxlL3RpdGxlLWFjdGlvbnMudnVlXCI7XG5leHBvcnQgeyBEZWZhdWx0VGl0bGUgfSBmcm9tIFwiLi4vdnVlL2NvbXBvbmVudHMvdGl0bGUvZGVmYXVsdC10aXRsZS52dWVcIjtcbmV4cG9ydCB7IEFjdGlvbkJhclZpZXdNb2RlbCB9IGZyb20gXCIuLi92dWUvY29tcG9uZW50cy9hY3Rpb24tYmFyL2FjdGlvbi1iYXIudnVlXCI7XG5leHBvcnQgeyBTdmdJY29uIH0gZnJvbSBcIi4uL3Z1ZS9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uLnZ1ZVwiO1xuZXhwb3J0IHsgUG9wdXAgfSBmcm9tIFwiLi4vdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAudnVlXCI7XG5leHBvcnQgeyBMaXN0IH0gZnJvbSBcIi4uL3Z1ZS9jb21wb25lbnRzL2xpc3QvbGlzdC52dWVcIjtcbmV4cG9ydCB7IFN1cnZleVF1ZXN0aW9uTWF0cml4RHluYW1pY1JlbW92ZUJ1dHRvbiB9IGZyb20gXCIuLi92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9yZW1vdmUtYnV0dG9uL3JlbW92ZS1idXR0b24udnVlXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeERldGFpbEJ1dHRvbiB9IGZyb20gXCIuLi92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9kZXRhaWwtYnV0dG9uL2RldGFpbC1idXR0b24udnVlXCI7XG5leHBvcnQgeyBTdXJ2ZXlRdWVzdGlvbk1hdHJpeER5bmFtaWNEcmFnRHJvcEljb24gfSBmcm9tIFwiLi4vdnVlL2NvbXBvbmVudHMvbWF0cml4LWFjdGlvbnMvZHJhZy1kcm9wLWljb24vZHJhZy1kcm9wLWljb24udnVlXCI7XG5leHBvcnQgeyBTa2VsZXRvbiB9IGZyb20gXCIuLi92dWUvY29tcG9uZW50cy9za2VsZXRvbi52dWVcIjtcbiIsImV4cG9ydCAqIGZyb20gXCIuL2NvcmVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Z1ZS11aVwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xuaW1wb3J0IHsgU3VydmV5RXJyb3IgfSBmcm9tIFwiLi9zdXJ2ZXktZXJyb3JcIjtcbmltcG9ydCB7IElTdXJ2ZXlFcnJvck93bmVyIH0gZnJvbSBcIi4vYmFzZS1pbnRlcmZhY2VzXCI7XG5cbmV4cG9ydCBjbGFzcyBBbnN3ZXJSZXF1aXJlZEVycm9yIGV4dGVuZHMgU3VydmV5RXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgdGV4dDogc3RyaW5nID0gbnVsbCxcbiAgICBlcnJvck93bmVyOiBJU3VydmV5RXJyb3JPd25lciA9IG51bGxcbiAgKSB7XG4gICAgc3VwZXIodGV4dCwgZXJyb3JPd25lcik7XG4gIH1cbiAgcHVibGljIGdldEVycm9yVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInJlcXVpcmVkXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJyZXF1aXJlZEVycm9yXCIpO1xuICB9XG59XG5leHBvcnQgY2xhc3MgT25lQW5zd2VyUmVxdWlyZWRFcnJvciBleHRlbmRzIFN1cnZleUVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHRleHQ6IHN0cmluZyA9IG51bGwsXG4gICAgZXJyb3JPd25lcjogSVN1cnZleUVycm9yT3duZXIgPSBudWxsXG4gICkge1xuICAgIHN1cGVyKHRleHQsIGVycm9yT3duZXIpO1xuICB9XG4gIHB1YmxpYyBnZXRFcnJvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJyZXF1aXJlb25lYW5zd2VyXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJyZXF1aXJlZEVycm9ySW5QYW5lbFwiKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIFJlcXVyZU51bWVyaWNFcnJvciBleHRlbmRzIFN1cnZleUVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHRleHQ6IHN0cmluZyA9IG51bGwsXG4gICAgZXJyb3JPd25lcjogSVN1cnZleUVycm9yT3duZXIgPSBudWxsXG4gICkge1xuICAgIHN1cGVyKHRleHQsIGVycm9yT3duZXIpO1xuICB9XG4gIHB1YmxpYyBnZXRFcnJvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJyZXF1aXJlbnVtZXJpY1wiO1xuICB9XG4gIHByb3RlY3RlZCBnZXREZWZhdWx0VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwibnVtZXJpY0Vycm9yXCIpO1xuICB9XG59XG5leHBvcnQgY2xhc3MgRXhjZWVkU2l6ZUVycm9yIGV4dGVuZHMgU3VydmV5RXJyb3Ige1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1heFNpemU6IG51bWJlciwgZXJyb3JPd25lcjogSVN1cnZleUVycm9yT3duZXIgPSBudWxsKSB7XG4gICAgc3VwZXIobnVsbCwgZXJyb3JPd25lcik7XG4gICAgdGhpcy5sb2NUZXh0LnRleHQgPSB0aGlzLmdldFRleHQoKTtcbiAgfVxuICBwdWJsaWMgZ2V0RXJyb3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiZXhjZWVkc2l6ZVwiO1xuICB9XG4gIHB1YmxpYyBnZXREZWZhdWx0VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb25cbiAgICAgIC5nZXRTdHJpbmcoXCJleGNlZWRNYXhTaXplXCIpXG4gICAgICBbXCJmb3JtYXRcIl0odGhpcy5nZXRUZXh0U2l6ZSgpKTtcbiAgfVxuICBwcml2YXRlIGdldFRleHRTaXplKCkge1xuICAgIHZhciBzaXplcyA9IFtcIkJ5dGVzXCIsIFwiS0JcIiwgXCJNQlwiLCBcIkdCXCIsIFwiVEJcIl07XG4gICAgdmFyIGZpeGVkID0gWzAsIDAsIDIsIDMsIDNdO1xuICAgIGlmICh0aGlzLm1heFNpemUgPT09IDApIHtcbiAgICAgIHJldHVybiBcIjAgQnl0ZVwiO1xuICAgIH1cbiAgICB2YXIgaSA9IE1hdGguZmxvb3IoTWF0aC5sb2codGhpcy5tYXhTaXplKSAvIE1hdGgubG9nKDEwMjQpKTtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLm1heFNpemUgLyBNYXRoLnBvdygxMDI0LCBpKTtcbiAgICByZXR1cm4gdmFsdWUudG9GaXhlZChmaXhlZFtpXSkgKyBcIiBcIiArIHNpemVzW2ldO1xuICB9XG59XG5leHBvcnQgY2xhc3MgV2ViUmVxdWVzdEVycm9yIGV4dGVuZHMgU3VydmV5RXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgc3RhdHVzOiBzdHJpbmcsXG4gICAgcHVibGljIHJlc3BvbnNlOiBzdHJpbmcsXG4gICAgZXJyb3JPd25lcjogSVN1cnZleUVycm9yT3duZXIgPSBudWxsXG4gICkge1xuICAgIHN1cGVyKG51bGwsIGVycm9yT3duZXIpO1xuICB9XG4gIHB1YmxpYyBnZXRFcnJvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJ3ZWJyZXF1ZXN0XCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvblxuICAgICAgLmdldFN0cmluZyhcInVybFJlcXVlc3RFcnJvclwiKVxuICAgICAgW1wiZm9ybWF0XCJdKHRoaXMuc3RhdHVzLCB0aGlzLnJlc3BvbnNlKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIFdlYlJlcXVlc3RFbXB0eUVycm9yIGV4dGVuZHMgU3VydmV5RXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGV4dDogc3RyaW5nLCBlcnJvck93bmVyOiBJU3VydmV5RXJyb3JPd25lciA9IG51bGwpIHtcbiAgICBzdXBlcih0ZXh0LCBlcnJvck93bmVyKTtcbiAgfVxuICBwdWJsaWMgZ2V0RXJyb3JUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwid2VicmVxdWVzdGVtcHR5XCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJ1cmxHZXRDaG9pY2VzRXJyb3JcIik7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBPdGhlckVtcHR5RXJyb3IgZXh0ZW5kcyBTdXJ2ZXlFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZXh0OiBzdHJpbmcsIGVycm9yT3duZXI6IElTdXJ2ZXlFcnJvck93bmVyID0gbnVsbCkge1xuICAgIHN1cGVyKHRleHQsIGVycm9yT3duZXIpO1xuICB9XG4gIHB1YmxpYyBnZXRFcnJvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJvdGhlcmVtcHR5XCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJvdGhlclJlcXVpcmVkRXJyb3JcIik7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBVcGxvYWRpbmdGaWxlRXJyb3IgZXh0ZW5kcyBTdXJ2ZXlFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZXh0OiBzdHJpbmcsIGVycm9yT3duZXI6IElTdXJ2ZXlFcnJvck93bmVyID0gbnVsbCkge1xuICAgIHN1cGVyKHRleHQsIGVycm9yT3duZXIpO1xuICB9XG4gIHB1YmxpYyBnZXRFcnJvclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJ1cGxvYWRpbmdmaWxlXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJ1cGxvYWRpbmdGaWxlXCIpO1xuICB9XG59XG5leHBvcnQgY2xhc3MgUmVxdWlyZWRJbkFsbFJvd3NFcnJvciBleHRlbmRzIFN1cnZleUVycm9yIHtcbiAgY29uc3RydWN0b3IocHVibGljIHRleHQ6IHN0cmluZywgZXJyb3JPd25lcjogSVN1cnZleUVycm9yT3duZXIgPSBudWxsKSB7XG4gICAgc3VwZXIodGV4dCwgZXJyb3JPd25lcik7XG4gIH1cbiAgcHVibGljIGdldEVycm9yVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInJlcXVpcmVkaW5hbGxyb3dzZXJyb3JcIjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInJlcXVpcmVkSW5BbGxSb3dzRXJyb3JcIik7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBNaW5Sb3dDb3VudEVycm9yIGV4dGVuZHMgU3VydmV5RXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbWluUm93Q291bnQ6IG51bWJlcixcbiAgICBlcnJvck93bmVyOiBJU3VydmV5RXJyb3JPd25lciA9IG51bGxcbiAgKSB7XG4gICAgc3VwZXIobnVsbCwgZXJyb3JPd25lcik7XG4gIH1cbiAgcHVibGljIGdldEVycm9yVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIm1pbnJvd2NvdW50ZXJyb3JcIjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uXG4gICAgICAuZ2V0U3RyaW5nKFwibWluUm93Q291bnRFcnJvclwiKVxuICAgICAgW1wiZm9ybWF0XCJdKHRoaXMubWluUm93Q291bnQpO1xuICB9XG59XG5leHBvcnQgY2xhc3MgS2V5RHVwbGljYXRpb25FcnJvciBleHRlbmRzIFN1cnZleUVycm9yIHtcbiAgY29uc3RydWN0b3IocHVibGljIHRleHQ6IHN0cmluZywgZXJyb3JPd25lcjogSVN1cnZleUVycm9yT3duZXIgPSBudWxsKSB7XG4gICAgc3VwZXIodGV4dCwgZXJyb3JPd25lcik7XG4gIH1cbiAgcHVibGljIGdldEVycm9yVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImtleWR1cGxpY2F0aW9uZXJyb3JcIjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImtleUR1cGxpY2F0aW9uRXJyb3JcIik7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBDdXN0b21FcnJvciBleHRlbmRzIFN1cnZleUVycm9yIHtcbiAgY29uc3RydWN0b3IocHVibGljIHRleHQ6IHN0cmluZywgZXJyb3JPd25lcjogSVN1cnZleUVycm9yT3duZXIgPSBudWxsKSB7XG4gICAgc3VwZXIodGV4dCwgZXJyb3JPd25lcik7XG4gIH1cbiAgcHVibGljIGdldEVycm9yVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImN1c3RvbVwiO1xuICB9XG59XG4iLCJpbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7IElMb2NhbGl6YWJsZU93bmVyLCBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQgeyBDb25kaXRpb25SdW5uZXIgfSBmcm9tIFwiLi9jb25kaXRpb25zXCI7XG5cbmV4cG9ydCBjbGFzcyBFeHByZXNzaW9uSXRlbSBleHRlbmRzIEJhc2UgaW1wbGVtZW50cyBJTG9jYWxpemFibGVPd25lciB7XG4gIHB1YmxpYyBsb2NPd25lcjogSUxvY2FsaXphYmxlT3duZXI7XG4gIGNvbnN0cnVjdG9yKGV4cHJlc3Npb246IHN0cmluZyA9IG51bGwpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJodG1sXCIsIHRoaXMpO1xuICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJleHByZXNzaW9uaXRlbVwiO1xuICB9XG4gIHB1YmxpYyBydW5Db25kaXRpb24odmFsdWVzOiBhbnksIHByb3BlcnRpZXM6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5leHByZXNzaW9uKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIG5ldyBDb25kaXRpb25SdW5uZXIodGhpcy5leHByZXNzaW9uKS5ydW4odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGV4cHJlc3Npb24gcHJvcGVydHkuIElmIHRoaXMgZXhwcmVzc2lvbiByZXR1cm5zIHRydWUsIHRoZW4gc3VydmV5IHdpbGwgdXNlIGh0bWwgcHJvcGVydHkgdG8gc2hvdyBvbiBjb21wbGV0ZSBwYWdlLlxuICAgKi9cbiAgcHVibGljIGdldCBleHByZXNzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImV4cHJlc3Npb25cIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBleHByZXNzaW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZXhwcmVzc2lvblwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NIdG1sKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImh0bWxcIik7XG4gIH1cblxuICBwdWJsaWMgZ2V0TG9jYWxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICEhdGhpcy5sb2NPd25lciA/IHRoaXMubG9jT3duZXIuZ2V0TG9jYWxlKCkgOiBcIlwiO1xuICB9XG4gIHB1YmxpYyBnZXRNYXJrZG93bkh0bWwodGV4dDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMubG9jT3duZXIgPyB0aGlzLmxvY093bmVyLmdldE1hcmtkb3duSHRtbCh0ZXh0LCBuYW1lKSA6IG51bGw7XG4gIH1cbiAgcHVibGljIGdldFJlbmRlcmVyKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuICEhdGhpcy5sb2NPd25lciA/IHRoaXMubG9jT3duZXIuZ2V0UmVuZGVyZXIobmFtZSkgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXRSZW5kZXJlckNvbnRleHQobG9jU3RyOiBMb2NhbGl6YWJsZVN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuICEhdGhpcy5sb2NPd25lciA/IHRoaXMubG9jT3duZXIuZ2V0UmVuZGVyZXJDb250ZXh0KGxvY1N0cikgOiBsb2NTdHI7XG4gIH1cbiAgcHVibGljIGdldFByb2Nlc3NlZFRleHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5sb2NPd25lciA/IHRoaXMubG9jT3duZXIuZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0KSA6IHRleHQ7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGNsYXNzIHRoYXQgY29udGFpbnMgZXhwcmVzc2lvbiBhbmQgaHRtbCBwcm9wZXRpZXMuIEl0IHVzZXMgaW4gc3VydmV5LmNvbXBsZXRlZEh0bWxPbkNvbmRpdGlvbiBhcnJheS5cbiAqIElmIHRoZSBleHByZXNzaW9uIHJldHVybnMgdHJ1ZSB0aGVuIGh0bWwgb2YgdGhpcyBpdGVtIHVzZXMgaW5zdGVhZCBvZiBzdXJ2ZXkuY29tcGxldGVkSHRtbCBwcm9wZXJ0eVxuICogQHNlZSBTdXJ2ZXlNb2RlbC5jb21wbGV0ZWRIdG1sT25Db25kaXRpb25cbiAqIEBzZWUgU3VydmV5TW9kZWwuY29tcGxldGVkSHRtbFxuICovXG5leHBvcnQgY2xhc3MgSHRtbENvbmRpdGlvbkl0ZW0gZXh0ZW5kcyBFeHByZXNzaW9uSXRlbSB7XG4gIGNvbnN0cnVjdG9yKGV4cHJlc3Npb246IHN0cmluZyA9IG51bGwsIGh0bWw6IHN0cmluZyA9IG51bGwpIHtcbiAgICBzdXBlcihleHByZXNzaW9uKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwiaHRtbFwiLCB0aGlzKTtcbiAgICB0aGlzLmh0bWwgPSBodG1sO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiaHRtbGNvbmRpdGlvbml0ZW1cIjtcbiAgfVxuICAvKipcbiAgICogVGhlIGh0bWwgdGhhdCBzaG93cyBvbiBjb21wbGV0ZWQgKCdUaGFuayB5b3UnKSBwYWdlLiBUaGUgZXhwcmVzc2lvbiBzaG91bGQgcmV0dXJuIHRydWVcbiAgICogQHNlZSBleHByZXNzaW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGh0bWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJodG1sXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgaHRtbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJodG1sXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgbG9jSHRtbCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJodG1sXCIpO1xuICB9XG59XG5cbi8qKlxuICogQSBjbGFzcyB0aGF0IGNvbnRhaW5zIGV4cHJlc3Npb24gYW5kIHVybCBwcm9wZXRpZXMuIEl0IHVzZXMgaW4gc3VydmV5Lm5hdmlnYXRlVG9VcmxPbkNvbmRpdGlvbiBhcnJheS5cbiAqIElmIHRoZSBleHByZXNzaW9uIHJldHVybnMgdHJ1ZSB0aGVuIHVybCBvZiB0aGlzIGl0ZW0gdXNlcyBpbnN0ZWFkIG9mIHN1cnZleS5uYXZpZ2F0ZVRvVXJsIHByb3BlcnR5XG4gKiBAc2VlIFN1cnZleU1vZGVsLm5hdmlnYXRlVG9VcmxcbiAqL1xuZXhwb3J0IGNsYXNzIFVybENvbmRpdGlvbkl0ZW0gZXh0ZW5kcyBFeHByZXNzaW9uSXRlbSB7XG4gIGNvbnN0cnVjdG9yKGV4cHJlc3Npb246IHN0cmluZyA9IG51bGwsIHVybDogc3RyaW5nID0gbnVsbCkge1xuICAgIHN1cGVyKGV4cHJlc3Npb24pO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJ1cmxcIiwgdGhpcyk7XG4gICAgdGhpcy51cmwgPSB1cmw7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJ1cmxjb25kaXRpb25pdGVtXCI7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSB1cmwgdGhhdCBzdXJ2ZXkgbmF2aWdhdGVzIHRvIG9uIGNvbXBsZXRpbmcgdGhlIHN1cnZleS4gVGhlIGV4cHJlc3Npb24gc2hvdWxkIHJldHVybiB0cnVlXG4gICAqIEBzZWUgZXhwcmVzc2lvblxuICAgKi9cbiAgcHVibGljIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJ1cmxcIik7XG4gIH1cbiAgcHVibGljIHNldCB1cmwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwidXJsXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgbG9jVXJsKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInVybFwiKTtcbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImV4cHJlc3Npb25pdGVtXCIsXG4gIFtcImV4cHJlc3Npb246Y29uZGl0aW9uXCJdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25JdGVtKCk7XG4gIH0sXG4gIFwiYmFzZVwiXG4pO1xuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImh0bWxjb25kaXRpb25pdGVtXCIsXG4gIFt7IG5hbWU6IFwiaHRtbDpodG1sXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NIdG1sXCIgfV0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgSHRtbENvbmRpdGlvbkl0ZW0oKTtcbiAgfSxcbiAgXCJleHByZXNzaW9uaXRlbVwiXG4pO1xuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcInVybGNvbmRpdGlvbml0ZW1cIixcbiAgW3sgbmFtZTogXCJ1cmw6c3RyaW5nXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NVcmxcIiB9XSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBVcmxDb25kaXRpb25JdGVtKCk7XG4gIH0sXG4gIFwiZXhwcmVzc2lvbml0ZW1cIlxuKTtcbiIsImltcG9ydCB7XG4gIENvbnN0LFxuICBCaW5hcnlPcGVyYW5kLFxuICBWYXJpYWJsZSxcbiAgT3BlcmFuZCxcbiAgVW5hcnlPcGVyYW5kLFxuICBGdW5jdGlvbk9wZXJhbmQsXG4gIEFycmF5T3BlcmFuZFxufSBmcm9tIFwiLi9leHByZXNzaW9uc1wiO1xuXG4vLyBHZW5lcmF0ZWQgYnkgUEVHLmpzIHYuIDAuMTAuMCAodHMtcGVnanMgcGx1Z2luIHYuIDAuMy4xIClcbi8vXG4vLyBodHRwczovL3BlZ2pzLm9yZy8gICBodHRwczovL2dpdGh1Yi5jb20vbWV0YWRldnByby90cy1wZWdqc1xuXG5cInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJRmlsZVBvc2l0aW9uIHtcbiAgb2Zmc2V0OiBudW1iZXI7XG4gIGxpbmU6IG51bWJlcjtcbiAgY29sdW1uOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUZpbGVSYW5nZSB7XG4gIHN0YXJ0OiBJRmlsZVBvc2l0aW9uO1xuICBlbmQ6IElGaWxlUG9zaXRpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxpdGVyYWxFeHBlY3RhdGlvbiB7XG4gIHR5cGU6IFwibGl0ZXJhbFwiO1xuICB0ZXh0OiBzdHJpbmc7XG4gIGlnbm9yZUNhc2U6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNsYXNzUGFydHMgZXh0ZW5kcyBBcnJheTxzdHJpbmcgfCBJQ2xhc3NQYXJ0cz4ge31cblxuZXhwb3J0IGludGVyZmFjZSBJQ2xhc3NFeHBlY3RhdGlvbiB7XG4gIHR5cGU6IFwiY2xhc3NcIjtcbiAgcGFydHM6IElDbGFzc1BhcnRzO1xuICBpbnZlcnRlZDogYm9vbGVhbjtcbiAgaWdub3JlQ2FzZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQW55RXhwZWN0YXRpb24ge1xuICB0eXBlOiBcImFueVwiO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElFbmRFeHBlY3RhdGlvbiB7XG4gIHR5cGU6IFwiZW5kXCI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU90aGVyRXhwZWN0YXRpb24ge1xuICB0eXBlOiBcIm90aGVyXCI7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIEV4cGVjdGF0aW9uID0gSUxpdGVyYWxFeHBlY3RhdGlvbiB8IElDbGFzc0V4cGVjdGF0aW9uIHwgSUFueUV4cGVjdGF0aW9uIHwgSUVuZEV4cGVjdGF0aW9uIHwgSU90aGVyRXhwZWN0YXRpb247XG5cbmV4cG9ydCBjbGFzcyBTeW50YXhFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHVibGljIHN0YXRpYyBidWlsZE1lc3NhZ2UoZXhwZWN0ZWQ6IEV4cGVjdGF0aW9uW10sIGZvdW5kOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgZnVuY3Rpb24gaGV4KGNoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIGNoLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGl0ZXJhbEVzY2FwZShzOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHNcbiAgICAgICAgLnJlcGxhY2UoL1xcXFwvZywgXCJcXFxcXFxcXFwiKVxuICAgICAgICAucmVwbGFjZSgvXCIvZywgXCJcXFxcXFxcIlwiKVxuICAgICAgICAucmVwbGFjZSgvXFwwL2csIFwiXFxcXDBcIilcbiAgICAgICAgLnJlcGxhY2UoL1xcdC9nLCBcIlxcXFx0XCIpXG4gICAgICAgIC5yZXBsYWNlKC9cXG4vZywgXCJcXFxcblwiKVxuICAgICAgICAucmVwbGFjZSgvXFxyL2csIFwiXFxcXHJcIilcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICAgICAgLnJlcGxhY2UoL1tcXHgwMC1cXHgwRl0vZywgKGNoKSA9PiBcIlxcXFx4MFwiICsgaGV4KGNoKSlcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICAgICAgLnJlcGxhY2UoL1tcXHgxMC1cXHgxRlxceDdGLVxceDlGXS9nLCAoY2gpID0+IFwiXFxcXHhcIiArIGhleChjaCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsYXNzRXNjYXBlKHM6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gc1xuICAgICAgICAucmVwbGFjZSgvXFxcXC9nLCBcIlxcXFxcXFxcXCIpXG4gICAgICAgIC5yZXBsYWNlKC9cXF0vZywgXCJcXFxcXVwiKVxuICAgICAgICAucmVwbGFjZSgvXFxeL2csIFwiXFxcXF5cIilcbiAgICAgICAgLnJlcGxhY2UoLy0vZywgXCJcXFxcLVwiKVxuICAgICAgICAucmVwbGFjZSgvXFwwL2csIFwiXFxcXDBcIilcbiAgICAgICAgLnJlcGxhY2UoL1xcdC9nLCBcIlxcXFx0XCIpXG4gICAgICAgIC5yZXBsYWNlKC9cXG4vZywgXCJcXFxcblwiKVxuICAgICAgICAucmVwbGFjZSgvXFxyL2csIFwiXFxcXHJcIilcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICAgICAgLnJlcGxhY2UoL1tcXHgwMC1cXHgwRl0vZywgKGNoKSA9PiBcIlxcXFx4MFwiICsgaGV4KGNoKSlcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICAgICAgLnJlcGxhY2UoL1tcXHgxMC1cXHgxRlxceDdGLVxceDlGXS9nLCAoY2gpID0+IFwiXFxcXHhcIiArIGhleChjaCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlc2NyaWJlRXhwZWN0YXRpb24oZXhwZWN0YXRpb246IEV4cGVjdGF0aW9uKSB7XG4gICAgICBzd2l0Y2ggKGV4cGVjdGF0aW9uLnR5cGUpIHtcbiAgICAgICAgY2FzZSBcImxpdGVyYWxcIjpcbiAgICAgICAgICByZXR1cm4gXCJcXFwiXCIgKyBsaXRlcmFsRXNjYXBlKGV4cGVjdGF0aW9uLnRleHQpICsgXCJcXFwiXCI7XG4gICAgICAgIGNhc2UgXCJjbGFzc1wiOlxuICAgICAgICAgIGNvbnN0IGVzY2FwZWRQYXJ0cyA9IGV4cGVjdGF0aW9uLnBhcnRzLm1hcCgocGFydCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocGFydClcbiAgICAgICAgICAgICAgPyBjbGFzc0VzY2FwZShwYXJ0WzBdIGFzIHN0cmluZykgKyBcIi1cIiArIGNsYXNzRXNjYXBlKHBhcnRbMV0gYXMgc3RyaW5nKVxuICAgICAgICAgICAgICA6IGNsYXNzRXNjYXBlKHBhcnQpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIFwiW1wiICsgKGV4cGVjdGF0aW9uLmludmVydGVkID8gXCJeXCIgOiBcIlwiKSArIGVzY2FwZWRQYXJ0cyArIFwiXVwiO1xuICAgICAgICBjYXNlIFwiYW55XCI6XG4gICAgICAgICAgcmV0dXJuIFwiYW55IGNoYXJhY3RlclwiO1xuICAgICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgICAgcmV0dXJuIFwiZW5kIG9mIGlucHV0XCI7XG4gICAgICAgIGNhc2UgXCJvdGhlclwiOlxuICAgICAgICAgIHJldHVybiBleHBlY3RhdGlvbi5kZXNjcmlwdGlvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXNjcmliZUV4cGVjdGVkKGV4cGVjdGVkMTogRXhwZWN0YXRpb25bXSkge1xuICAgICAgY29uc3QgZGVzY3JpcHRpb25zID0gZXhwZWN0ZWQxLm1hcChkZXNjcmliZUV4cGVjdGF0aW9uKTtcbiAgICAgIGxldCBpOiBudW1iZXI7XG4gICAgICBsZXQgajogbnVtYmVyO1xuXG4gICAgICBkZXNjcmlwdGlvbnMuc29ydCgpO1xuXG4gICAgICBpZiAoZGVzY3JpcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZm9yIChpID0gMSwgaiA9IDE7IGkgPCBkZXNjcmlwdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoZGVzY3JpcHRpb25zW2kgLSAxXSAhPT0gZGVzY3JpcHRpb25zW2ldKSB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbnNbal0gPSBkZXNjcmlwdGlvbnNbaV07XG4gICAgICAgICAgICBqKys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRlc2NyaXB0aW9ucy5sZW5ndGggPSBqO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGRlc2NyaXB0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbnNbMF07XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbnNbMF0gKyBcIiBvciBcIiArIGRlc2NyaXB0aW9uc1sxXTtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbnMuc2xpY2UoMCwgLTEpLmpvaW4oXCIsIFwiKVxuICAgICAgICAgICAgKyBcIiwgb3IgXCJcbiAgICAgICAgICAgICsgZGVzY3JpcHRpb25zW2Rlc2NyaXB0aW9ucy5sZW5ndGggLSAxXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXNjcmliZUZvdW5kKGZvdW5kMTogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgcmV0dXJuIGZvdW5kMSA/IFwiXFxcIlwiICsgbGl0ZXJhbEVzY2FwZShmb3VuZDEpICsgXCJcXFwiXCIgOiBcImVuZCBvZiBpbnB1dFwiO1xuICAgIH1cblxuICAgIHJldHVybiBcIkV4cGVjdGVkIFwiICsgZGVzY3JpYmVFeHBlY3RlZChleHBlY3RlZCkgKyBcIiBidXQgXCIgKyBkZXNjcmliZUZvdW5kKGZvdW5kKSArIFwiIGZvdW5kLlwiO1xuICB9XG5cbiAgcHVibGljIG1lc3NhZ2U6IHN0cmluZztcbiAgcHVibGljIGV4cGVjdGVkOiBFeHBlY3RhdGlvbltdO1xuICBwdWJsaWMgZm91bmQ6IHN0cmluZyB8IG51bGw7XG4gIHB1YmxpYyBsb2NhdGlvbjogSUZpbGVSYW5nZTtcbiAgcHVibGljIG5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIGV4cGVjdGVkOiBFeHBlY3RhdGlvbltdLCBmb3VuZDogc3RyaW5nIHwgbnVsbCwgbG9jYXRpb246IElGaWxlUmFuZ2UpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5leHBlY3RlZCA9IGV4cGVjdGVkO1xuICAgIHRoaXMuZm91bmQgPSBmb3VuZDtcbiAgICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247XG4gICAgdGhpcy5uYW1lID0gXCJTeW50YXhFcnJvclwiO1xuXG4gICAgaWYgKHR5cGVvZiAoRXJyb3IgYXMgYW55KS5jYXB0dXJlU3RhY2tUcmFjZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAoRXJyb3IgYXMgYW55KS5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBTeW50YXhFcnJvcik7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNhY2hlZCB7XG4gIG5leHRQb3M6IG51bWJlcjtcbiAgcmVzdWx0OiBhbnk7XG59XG5cbmZ1bmN0aW9uIHBlZyRwYXJzZShpbnB1dDogc3RyaW5nLCBvcHRpb25zPzogSVBhcnNlT3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucyA6IHt9O1xuXG4gIGNvbnN0IHBlZyRGQUlMRUQ6IFJlYWRvbmx5PGFueT4gPSB7fTtcblxuICBjb25zdCBwZWckc3RhcnRSdWxlRnVuY3Rpb25zOiB7W2lkOiBzdHJpbmddOiBhbnl9ID0geyBFeHByZXNzaW9uOiBwZWckcGFyc2VFeHByZXNzaW9uIH07XG4gIGxldCBwZWckc3RhcnRSdWxlRnVuY3Rpb246ICgpID0+IGFueSA9IHBlZyRwYXJzZUV4cHJlc3Npb247XG5cbiAgY29uc3QgcGVnJGMwID0gZnVuY3Rpb24oaGVhZDogYW55LCB0YWlsOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBidWlsZEJpbmFyeU9wZXJhbmQoaGVhZCwgdGFpbCwgdHJ1ZSk7XG4gIH07XG4gIGNvbnN0IHBlZyRjMSA9IFwifHxcIjtcbiAgY29uc3QgcGVnJGMyID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcInx8XCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMzID0gXCJvclwiO1xuICBjb25zdCBwZWckYzQgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwib3JcIiwgdHJ1ZSk7XG4gIGNvbnN0IHBlZyRjNSA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBcIm9yXCI7IH07XG4gIGNvbnN0IHBlZyRjNiA9IFwiJiZcIjtcbiAgY29uc3QgcGVnJGM3ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIiYmXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGM4ID0gXCJhbmRcIjtcbiAgY29uc3QgcGVnJGM5ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcImFuZFwiLCB0cnVlKTtcbiAgY29uc3QgcGVnJGMxMCA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBcImFuZFwiOyB9O1xuICBjb25zdCBwZWckYzExID0gZnVuY3Rpb24oaGVhZDogYW55LCB0YWlsOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBidWlsZEJpbmFyeU9wZXJhbmQoaGVhZCwgdGFpbCk7XG4gIH07XG4gIGNvbnN0IHBlZyRjMTIgPSBcIjw9XCI7XG4gIGNvbnN0IHBlZyRjMTMgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiPD1cIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzE0ID0gXCJsZXNzb3JlcXVhbFwiO1xuICBjb25zdCBwZWckYzE1ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcImxlc3NvcmVxdWFsXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzE2ID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwibGVzc29yZXF1YWxcIjsgfTtcbiAgY29uc3QgcGVnJGMxNyA9IFwiPj1cIjtcbiAgY29uc3QgcGVnJGMxOCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCI+PVwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTkgPSBcImdyZWF0ZXJvcmVxdWFsXCI7XG4gIGNvbnN0IHBlZyRjMjAgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiZ3JlYXRlcm9yZXF1YWxcIiwgdHJ1ZSk7XG4gIGNvbnN0IHBlZyRjMjEgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gXCJncmVhdGVyb3JlcXVhbFwiOyB9O1xuICBjb25zdCBwZWckYzIyID0gXCI9XCI7XG4gIGNvbnN0IHBlZyRjMjMgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiPVwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMjQgPSBcImVxdWFsXCI7XG4gIGNvbnN0IHBlZyRjMjUgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiZXF1YWxcIiwgdHJ1ZSk7XG4gIGNvbnN0IHBlZyRjMjYgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gXCJlcXVhbFwiOyB9O1xuICBjb25zdCBwZWckYzI3ID0gXCIhPVwiO1xuICBjb25zdCBwZWckYzI4ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIiE9XCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMyOSA9IFwibm90ZXF1YWxcIjtcbiAgY29uc3QgcGVnJGMzMCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJub3RlcXVhbFwiLCB0cnVlKTtcbiAgY29uc3QgcGVnJGMzMSA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBcIm5vdGVxdWFsXCI7IH07XG4gIGNvbnN0IHBlZyRjMzIgPSBcIjxcIjtcbiAgY29uc3QgcGVnJGMzMyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCI8XCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMzNCA9IFwibGVzc1wiO1xuICBjb25zdCBwZWckYzM1ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcImxlc3NcIiwgdHJ1ZSk7XG4gIGNvbnN0IHBlZyRjMzYgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gXCJsZXNzXCI7IH07XG4gIGNvbnN0IHBlZyRjMzcgPSBcIj5cIjtcbiAgY29uc3QgcGVnJGMzOCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCI+XCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMzOSA9IFwiZ3JlYXRlclwiO1xuICBjb25zdCBwZWckYzQwID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcImdyZWF0ZXJcIiwgdHJ1ZSk7XG4gIGNvbnN0IHBlZyRjNDEgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gXCJncmVhdGVyXCI7IH07XG4gIGNvbnN0IHBlZyRjNDIgPSBcIitcIjtcbiAgY29uc3QgcGVnJGM0MyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIrXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGM0NCA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBcInBsdXNcIjsgfTtcbiAgY29uc3QgcGVnJGM0NSA9IFwiLVwiO1xuICBjb25zdCBwZWckYzQ2ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIi1cIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzQ3ID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwibWludXNcIjsgfTtcbiAgY29uc3QgcGVnJGM0OCA9IFwiKlwiO1xuICBjb25zdCBwZWckYzQ5ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIipcIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzUwID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwibXVsXCI7IH07XG4gIGNvbnN0IHBlZyRjNTEgPSBcIi9cIjtcbiAgY29uc3QgcGVnJGM1MiA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIvXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGM1MyA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBcImRpdlwiOyB9O1xuICBjb25zdCBwZWckYzU0ID0gXCIlXCI7XG4gIGNvbnN0IHBlZyRjNTUgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiJVwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjNTYgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gXCJtb2RcIjsgfTtcbiAgY29uc3QgcGVnJGM1NyA9IFwiXlwiO1xuICBjb25zdCBwZWckYzU4ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIl5cIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzU5ID0gXCJwb3dlclwiO1xuICBjb25zdCBwZWckYzYwID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcInBvd2VyXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzYxID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwicG93ZXJcIjsgfTtcbiAgY29uc3QgcGVnJGM2MiA9IFwiKj1cIjtcbiAgY29uc3QgcGVnJGM2MyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIqPVwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjNjQgPSBcImNvbnRhaW5zXCI7XG4gIGNvbnN0IHBlZyRjNjUgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiY29udGFpbnNcIiwgdHJ1ZSk7XG4gIGNvbnN0IHBlZyRjNjYgPSBcImNvbnRhaW5cIjtcbiAgY29uc3QgcGVnJGM2NyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJjb250YWluXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzY4ID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwiY29udGFpbnNcIjsgfTtcbiAgY29uc3QgcGVnJGM2OSA9IFwibm90Y29udGFpbnNcIjtcbiAgY29uc3QgcGVnJGM3MCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJub3Rjb250YWluc1wiLCB0cnVlKTtcbiAgY29uc3QgcGVnJGM3MSA9IFwibm90Y29udGFpblwiO1xuICBjb25zdCBwZWckYzcyID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIm5vdGNvbnRhaW5cIiwgdHJ1ZSk7XG4gIGNvbnN0IHBlZyRjNzMgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gXCJub3Rjb250YWluc1wiOyB9O1xuICBjb25zdCBwZWckYzc0ID0gXCJhbnlvZlwiO1xuICBjb25zdCBwZWckYzc1ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcImFueW9mXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzc2ID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwiYW55b2ZcIjsgfTtcbiAgY29uc3QgcGVnJGM3NyA9IFwiYWxsb2ZcIjtcbiAgY29uc3QgcGVnJGM3OCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJhbGxvZlwiLCB0cnVlKTtcbiAgY29uc3QgcGVnJGM3OSA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBcImFsbG9mXCI7IH07XG4gIGNvbnN0IHBlZyRjODAgPSBcIihcIjtcbiAgY29uc3QgcGVnJGM4MSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIoXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGM4MiA9IFwiKVwiO1xuICBjb25zdCBwZWckYzgzID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIilcIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzg0ID0gZnVuY3Rpb24oZXhwcjogYW55KTogYW55IHsgcmV0dXJuIGV4cHI7IH07XG4gIGNvbnN0IHBlZyRjODUgPSBmdW5jdGlvbihuYW1lOiBhbnksIHBhcmFtczogYW55KTogYW55IHsgcmV0dXJuIG5ldyBGdW5jdGlvbk9wZXJhbmQobmFtZSwgcGFyYW1zKTsgfTtcbiAgY29uc3QgcGVnJGM4NiA9IFwiIVwiO1xuICBjb25zdCBwZWckYzg3ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIiFcIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzg4ID0gXCJuZWdhdGVcIjtcbiAgY29uc3QgcGVnJGM4OSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJuZWdhdGVcIiwgdHJ1ZSk7XG4gIGNvbnN0IHBlZyRjOTAgPSBmdW5jdGlvbihleHByOiBhbnkpOiBhbnkgeyByZXR1cm4gbmV3IFVuYXJ5T3BlcmFuZChleHByLCBcIm5lZ2F0ZVwiKTsgfTtcbiAgY29uc3QgcGVnJGM5MSA9IGZ1bmN0aW9uKGV4cHI6IGFueSwgb3A6IGFueSk6IGFueSB7IHJldHVybiBuZXcgVW5hcnlPcGVyYW5kKGV4cHIsIG9wKTsgfTtcbiAgY29uc3QgcGVnJGM5MiA9IFwiZW1wdHlcIjtcbiAgY29uc3QgcGVnJGM5MyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJlbXB0eVwiLCB0cnVlKTtcbiAgY29uc3QgcGVnJGM5NCA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBcImVtcHR5XCI7IH07XG4gIGNvbnN0IHBlZyRjOTUgPSBcIm5vdGVtcHR5XCI7XG4gIGNvbnN0IHBlZyRjOTYgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwibm90ZW1wdHlcIiwgdHJ1ZSk7XG4gIGNvbnN0IHBlZyRjOTcgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gXCJub3RlbXB0eVwiOyB9O1xuICBjb25zdCBwZWckYzk4ID0gXCJ1bmRlZmluZWRcIjtcbiAgY29uc3QgcGVnJGM5OSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJ1bmRlZmluZWRcIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzEwMCA9IFwibnVsbFwiO1xuICBjb25zdCBwZWckYzEwMSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJudWxsXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxMDIgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gbnVsbDsgfTtcbiAgY29uc3QgcGVnJGMxMDMgPSBmdW5jdGlvbih2YWx1ZTogYW55KTogYW55IHsgcmV0dXJuIG5ldyBDb25zdCh2YWx1ZSk7IH07XG4gIGNvbnN0IHBlZyRjMTA0ID0gXCJ7XCI7XG4gIGNvbnN0IHBlZyRjMTA1ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIntcIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzEwNiA9IFwifVwiO1xuICBjb25zdCBwZWckYzEwNyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJ9XCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxMDggPSBmdW5jdGlvbih2YWx1ZTogYW55KTogYW55IHsgcmV0dXJuIG5ldyBWYXJpYWJsZSh2YWx1ZSk7IH07XG4gIGNvbnN0IHBlZyRjMTA5ID0gZnVuY3Rpb24odmFsdWU6IGFueSk6IGFueSB7IHJldHVybiB2YWx1ZTsgfTtcbiAgY29uc3QgcGVnJGMxMTAgPSBcIicnXCI7XG4gIGNvbnN0IHBlZyRjMTExID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIicnXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxMTIgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gXCJcIjsgfTtcbiAgY29uc3QgcGVnJGMxMTMgPSBcIlxcXCJcXFwiXCI7XG4gIGNvbnN0IHBlZyRjMTE0ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIlxcXCJcXFwiXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxMTUgPSBcIidcIjtcbiAgY29uc3QgcGVnJGMxMTYgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiJ1wiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTE3ID0gZnVuY3Rpb24odmFsdWU6IGFueSk6IGFueSB7IHJldHVybiBcIidcIiArIHZhbHVlICsgXCInXCI7IH07XG4gIGNvbnN0IHBlZyRjMTE4ID0gXCJcXFwiXCI7XG4gIGNvbnN0IHBlZyRjMTE5ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIlxcXCJcIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzEyMCA9IFwiW1wiO1xuICBjb25zdCBwZWckYzEyMSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJbXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxMjIgPSBcIl1cIjtcbiAgY29uc3QgcGVnJGMxMjMgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiXVwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTI0ID0gZnVuY3Rpb24oc2VxdWVuY2U6IGFueSk6IGFueSB7IHJldHVybiBzZXF1ZW5jZTsgfTtcbiAgY29uc3QgcGVnJGMxMjUgPSBcIixcIjtcbiAgY29uc3QgcGVnJGMxMjYgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiLFwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTI3ID0gZnVuY3Rpb24oZXhwcjogYW55LCB0YWlsOiBhbnkpOiBhbnkge1xuICAgIGlmIChleHByID09IG51bGwpXG4gICAgICByZXR1cm4gbmV3IEFycmF5T3BlcmFuZChbXSk7XG5cbiAgICB2YXIgYXJyYXkgPSBbZXhwcl07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGFpbCkpIHtcbiAgICAgIHZhciBmbGF0dGVuID0gZmxhdHRlbkFycmF5KHRhaWwpO1xuICAgICAgZm9yICh2YXIgaSA9IDM7IGkgPCBmbGF0dGVuLmxlbmd0aDsgaSArPSA0KSB7XG4gICAgICAgIGFycmF5LnB1c2goZmxhdHRlbltpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBBcnJheU9wZXJhbmQoYXJyYXkpO1xuICB9O1xuICBjb25zdCBwZWckYzEyOCA9IFwidHJ1ZVwiO1xuICBjb25zdCBwZWckYzEyOSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJ0cnVlXCIsIHRydWUpO1xuICBjb25zdCBwZWckYzEzMCA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiB0cnVlOyB9O1xuICBjb25zdCBwZWckYzEzMSA9IFwiZmFsc2VcIjtcbiAgY29uc3QgcGVnJGMxMzIgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiZmFsc2VcIiwgdHJ1ZSk7XG4gIGNvbnN0IHBlZyRjMTMzID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIGZhbHNlOyB9O1xuICBjb25zdCBwZWckYzEzNCA9IFwiMHhcIjtcbiAgY29uc3QgcGVnJGMxMzUgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiMHhcIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzEzNiA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiBwYXJzZUludCh0ZXh0KCksIDE2KTsgfTtcbiAgY29uc3QgcGVnJGMxMzcgPSAvXltcXC1dLztcbiAgY29uc3QgcGVnJGMxMzggPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbXCItXCJdLCBmYWxzZSwgZmFsc2UpO1xuICBjb25zdCBwZWckYzEzOSA9IGZ1bmN0aW9uKHNpZ246IGFueSwgbnVtOiBhbnkpOiBhbnkgeyByZXR1cm4gc2lnbiA9PSBudWxsID8gbnVtIDogLW51bTsgfTtcbiAgY29uc3QgcGVnJGMxNDAgPSBcIi5cIjtcbiAgY29uc3QgcGVnJGMxNDEgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiLlwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTQyID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIHBhcnNlRmxvYXQodGV4dCgpKTsgfTtcbiAgY29uc3QgcGVnJGMxNDMgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gcGFyc2VJbnQodGV4dCgpLCAxMCk7IH07XG4gIGNvbnN0IHBlZyRjMTQ0ID0gXCIwXCI7XG4gIGNvbnN0IHBlZyRjMTQ1ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIjBcIiwgZmFsc2UpO1xuICBjb25zdCBwZWckYzE0NiA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiAwOyB9O1xuICBjb25zdCBwZWckYzE0NyA9IGZ1bmN0aW9uKGNoYXJzOiBhbnkpOiBhbnkgeyByZXR1cm4gY2hhcnMuam9pbihcIlwiKTsgfTtcbiAgY29uc3QgcGVnJGMxNDggPSBcIlxcXFwnXCI7XG4gIGNvbnN0IHBlZyRjMTQ5ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIlxcXFwnXCIsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxNTAgPSBmdW5jdGlvbigpOiBhbnkgeyByZXR1cm4gXCInXCI7IH07XG4gIGNvbnN0IHBlZyRjMTUxID0gXCJcXFxcXFxcIlwiO1xuICBjb25zdCBwZWckYzE1MiA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJcXFxcXFxcIlwiLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTUzID0gZnVuY3Rpb24oKTogYW55IHsgcmV0dXJuIFwiXFxcIlwiOyB9O1xuICBjb25zdCBwZWckYzE1NCA9IC9eW15cIiddLztcbiAgY29uc3QgcGVnJGMxNTUgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbXCJcXFwiXCIsIFwiJ1wiXSwgdHJ1ZSwgZmFsc2UpO1xuICBjb25zdCBwZWckYzE1NiA9IGZ1bmN0aW9uKCk6IGFueSB7IHJldHVybiB0ZXh0KCk7IH07XG4gIGNvbnN0IHBlZyRjMTU3ID0gL15bXnt9XS87XG4gIGNvbnN0IHBlZyRjMTU4ID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1wie1wiLCBcIn1cIl0sIHRydWUsIGZhbHNlKTtcbiAgY29uc3QgcGVnJGMxNTkgPSAvXlswLTldLztcbiAgY29uc3QgcGVnJGMxNjAgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbW1wiMFwiLCBcIjlcIl1dLCBmYWxzZSwgZmFsc2UpO1xuICBjb25zdCBwZWckYzE2MSA9IC9eWzEtOV0vO1xuICBjb25zdCBwZWckYzE2MiA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtbXCIxXCIsIFwiOVwiXV0sIGZhbHNlLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTYzID0gL15bYS16QS1aXS87XG4gIGNvbnN0IHBlZyRjMTY0ID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1tcImFcIiwgXCJ6XCJdLCBbXCJBXCIsIFwiWlwiXV0sIGZhbHNlLCBmYWxzZSk7XG4gIGNvbnN0IHBlZyRjMTY1ID0gcGVnJG90aGVyRXhwZWN0YXRpb24oXCJ3aGl0ZXNwYWNlXCIpO1xuICBjb25zdCBwZWckYzE2NiA9IC9eWyBcXHRcXG5cXHJdLztcbiAgY29uc3QgcGVnJGMxNjcgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbXCIgXCIsIFwiXFx0XCIsIFwiXFxuXCIsIFwiXFxyXCJdLCBmYWxzZSwgZmFsc2UpO1xuXG4gIGxldCBwZWckY3VyclBvcyA9IDA7XG4gIGxldCBwZWckc2F2ZWRQb3MgPSAwO1xuICBjb25zdCBwZWckcG9zRGV0YWlsc0NhY2hlID0gW3sgbGluZTogMSwgY29sdW1uOiAxIH1dO1xuICBsZXQgcGVnJG1heEZhaWxQb3MgPSAwO1xuICBsZXQgcGVnJG1heEZhaWxFeHBlY3RlZDogRXhwZWN0YXRpb25bXSA9IFtdO1xuICBsZXQgcGVnJHNpbGVudEZhaWxzID0gMDtcblxuICBjb25zdCBwZWckcmVzdWx0c0NhY2hlOiB7W2lkOiBudW1iZXJdOiBJQ2FjaGVkfSA9IHt9O1xuXG4gIGxldCBwZWckcmVzdWx0O1xuXG4gIGlmIChvcHRpb25zLnN0YXJ0UnVsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCEob3B0aW9ucy5zdGFydFJ1bGUgaW4gcGVnJHN0YXJ0UnVsZUZ1bmN0aW9ucykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IHN0YXJ0IHBhcnNpbmcgZnJvbSBydWxlIFxcXCJcIiArIG9wdGlvbnMuc3RhcnRSdWxlICsgXCJcXFwiLlwiKTtcbiAgICB9XG5cbiAgICBwZWckc3RhcnRSdWxlRnVuY3Rpb24gPSBwZWckc3RhcnRSdWxlRnVuY3Rpb25zW29wdGlvbnMuc3RhcnRSdWxlXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gaW5wdXQuc3Vic3RyaW5nKHBlZyRzYXZlZFBvcywgcGVnJGN1cnJQb3MpO1xuICB9XG5cbiAgZnVuY3Rpb24gbG9jYXRpb24oKTogSUZpbGVSYW5nZSB7XG4gICAgcmV0dXJuIHBlZyRjb21wdXRlTG9jYXRpb24ocGVnJHNhdmVkUG9zLCBwZWckY3VyclBvcyk7XG4gIH1cblxuICBmdW5jdGlvbiBleHBlY3RlZChkZXNjcmlwdGlvbjogc3RyaW5nLCBsb2NhdGlvbjE/OiBJRmlsZVJhbmdlKSB7XG4gICAgbG9jYXRpb24xID0gbG9jYXRpb24xICE9PSB1bmRlZmluZWRcbiAgICAgID8gbG9jYXRpb24xXG4gICAgICA6IHBlZyRjb21wdXRlTG9jYXRpb24ocGVnJHNhdmVkUG9zLCBwZWckY3VyclBvcyk7XG5cbiAgICB0aHJvdyBwZWckYnVpbGRTdHJ1Y3R1cmVkRXJyb3IoXG4gICAgICBbcGVnJG90aGVyRXhwZWN0YXRpb24oZGVzY3JpcHRpb24pXSxcbiAgICAgIGlucHV0LnN1YnN0cmluZyhwZWckc2F2ZWRQb3MsIHBlZyRjdXJyUG9zKSxcbiAgICAgIGxvY2F0aW9uMVxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBlcnJvcihtZXNzYWdlOiBzdHJpbmcsIGxvY2F0aW9uMT86IElGaWxlUmFuZ2UpIHtcbiAgICBsb2NhdGlvbjEgPSBsb2NhdGlvbjEgIT09IHVuZGVmaW5lZFxuICAgICAgPyBsb2NhdGlvbjFcbiAgICAgIDogcGVnJGNvbXB1dGVMb2NhdGlvbihwZWckc2F2ZWRQb3MsIHBlZyRjdXJyUG9zKTtcblxuICAgIHRocm93IHBlZyRidWlsZFNpbXBsZUVycm9yKG1lc3NhZ2UsIGxvY2F0aW9uMSk7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKHRleHQxOiBzdHJpbmcsIGlnbm9yZUNhc2U6IGJvb2xlYW4pOiBJTGl0ZXJhbEV4cGVjdGF0aW9uIHtcbiAgICByZXR1cm4geyB0eXBlOiBcImxpdGVyYWxcIiwgdGV4dDogdGV4dDEsIGlnbm9yZUNhc2U6IGlnbm9yZUNhc2UgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRjbGFzc0V4cGVjdGF0aW9uKHBhcnRzOiBJQ2xhc3NQYXJ0cywgaW52ZXJ0ZWQ6IGJvb2xlYW4sIGlnbm9yZUNhc2U6IGJvb2xlYW4pOiBJQ2xhc3NFeHBlY3RhdGlvbiB7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJjbGFzc1wiLCBwYXJ0czogcGFydHMsIGludmVydGVkOiBpbnZlcnRlZCwgaWdub3JlQ2FzZTogaWdub3JlQ2FzZSB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGFueUV4cGVjdGF0aW9uKCk6IElBbnlFeHBlY3RhdGlvbiB7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJhbnlcIiB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGVuZEV4cGVjdGF0aW9uKCk6IElFbmRFeHBlY3RhdGlvbiB7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJlbmRcIiB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJG90aGVyRXhwZWN0YXRpb24oZGVzY3JpcHRpb246IHN0cmluZyk6IElPdGhlckV4cGVjdGF0aW9uIHtcbiAgICByZXR1cm4geyB0eXBlOiBcIm90aGVyXCIsIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGNvbXB1dGVQb3NEZXRhaWxzKHBvczogbnVtYmVyKSB7XG4gICAgbGV0IGRldGFpbHMgPSBwZWckcG9zRGV0YWlsc0NhY2hlW3Bvc107XG4gICAgbGV0IHA7XG5cbiAgICBpZiAoZGV0YWlscykge1xuICAgICAgcmV0dXJuIGRldGFpbHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHAgPSBwb3MgLSAxO1xuICAgICAgd2hpbGUgKCFwZWckcG9zRGV0YWlsc0NhY2hlW3BdKSB7XG4gICAgICAgIHAtLTtcbiAgICAgIH1cblxuICAgICAgZGV0YWlscyA9IHBlZyRwb3NEZXRhaWxzQ2FjaGVbcF07XG4gICAgICBkZXRhaWxzID0ge1xuICAgICAgICBsaW5lOiBkZXRhaWxzLmxpbmUsXG4gICAgICAgIGNvbHVtbjogZGV0YWlscy5jb2x1bW5cbiAgICAgIH07XG5cbiAgICAgIHdoaWxlIChwIDwgcG9zKSB7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHApID09PSAxMCkge1xuICAgICAgICAgIGRldGFpbHMubGluZSsrO1xuICAgICAgICAgIGRldGFpbHMuY29sdW1uID0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZXRhaWxzLmNvbHVtbisrO1xuICAgICAgICB9XG5cbiAgICAgICAgcCsrO1xuICAgICAgfVxuXG4gICAgICBwZWckcG9zRGV0YWlsc0NhY2hlW3Bvc10gPSBkZXRhaWxzO1xuXG4gICAgICByZXR1cm4gZGV0YWlscztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwZWckY29tcHV0ZUxvY2F0aW9uKHN0YXJ0UG9zOiBudW1iZXIsIGVuZFBvczogbnVtYmVyKTogSUZpbGVSYW5nZSB7XG4gICAgY29uc3Qgc3RhcnRQb3NEZXRhaWxzID0gcGVnJGNvbXB1dGVQb3NEZXRhaWxzKHN0YXJ0UG9zKTtcbiAgICBjb25zdCBlbmRQb3NEZXRhaWxzID0gcGVnJGNvbXB1dGVQb3NEZXRhaWxzKGVuZFBvcyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnQ6IHtcbiAgICAgICAgb2Zmc2V0OiBzdGFydFBvcyxcbiAgICAgICAgbGluZTogc3RhcnRQb3NEZXRhaWxzLmxpbmUsXG4gICAgICAgIGNvbHVtbjogc3RhcnRQb3NEZXRhaWxzLmNvbHVtblxuICAgICAgfSxcbiAgICAgIGVuZDoge1xuICAgICAgICBvZmZzZXQ6IGVuZFBvcyxcbiAgICAgICAgbGluZTogZW5kUG9zRGV0YWlscy5saW5lLFxuICAgICAgICBjb2x1bW46IGVuZFBvc0RldGFpbHMuY29sdW1uXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRmYWlsKGV4cGVjdGVkMTogRXhwZWN0YXRpb24pIHtcbiAgICBpZiAocGVnJGN1cnJQb3MgPCBwZWckbWF4RmFpbFBvcykgeyByZXR1cm47IH1cblxuICAgIGlmIChwZWckY3VyclBvcyA+IHBlZyRtYXhGYWlsUG9zKSB7XG4gICAgICBwZWckbWF4RmFpbFBvcyA9IHBlZyRjdXJyUG9zO1xuICAgICAgcGVnJG1heEZhaWxFeHBlY3RlZCA9IFtdO1xuICAgIH1cblxuICAgIHBlZyRtYXhGYWlsRXhwZWN0ZWQucHVzaChleHBlY3RlZDEpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGJ1aWxkU2ltcGxlRXJyb3IobWVzc2FnZTogc3RyaW5nLCBsb2NhdGlvbjE6IElGaWxlUmFuZ2UpIHtcbiAgICByZXR1cm4gbmV3IFN5bnRheEVycm9yKG1lc3NhZ2UsIFtdLCBcIlwiLCBsb2NhdGlvbjEpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGJ1aWxkU3RydWN0dXJlZEVycm9yKGV4cGVjdGVkMTogRXhwZWN0YXRpb25bXSwgZm91bmQ6IHN0cmluZyB8IG51bGwsIGxvY2F0aW9uMTogSUZpbGVSYW5nZSkge1xuICAgIHJldHVybiBuZXcgU3ludGF4RXJyb3IoXG4gICAgICBTeW50YXhFcnJvci5idWlsZE1lc3NhZ2UoZXhwZWN0ZWQxLCBmb3VuZCksXG4gICAgICBleHBlY3RlZDEsXG4gICAgICBmb3VuZCxcbiAgICAgIGxvY2F0aW9uMVxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VFeHByZXNzaW9uKCk6IE9wZXJhbmQge1xuICAgIGxldCBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczcsIHM4O1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDA7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZV8oKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gcGVnJHBhcnNlTG9naWNPcigpO1xuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzID0gW107XG4gICAgICAgIHM0ID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHM1ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNiA9IHBlZyRwYXJzZU9yU2lnbigpO1xuICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczcgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczggPSBwZWckcGFyc2VMb2dpY09yKCk7XG4gICAgICAgICAgICAgIGlmIChzOCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM1ID0gW3M1LCBzNiwgczcsIHM4XTtcbiAgICAgICAgICAgICAgICBzNCA9IHM1O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczQ7XG4gICAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM0O1xuICAgICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczQ7XG4gICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczQ7XG4gICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMzLnB1c2goczQpO1xuICAgICAgICAgIHM0ID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgczUgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNiA9IHBlZyRwYXJzZU9yU2lnbigpO1xuICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzOCA9IHBlZyRwYXJzZUxvZ2ljT3IoKTtcbiAgICAgICAgICAgICAgICBpZiAoczggIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgIHM1ID0gW3M1LCBzNiwgczcsIHM4XTtcbiAgICAgICAgICAgICAgICAgIHM0ID0gczU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczQ7XG4gICAgICAgICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczQ7XG4gICAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM0O1xuICAgICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczQ7XG4gICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICBzMSA9IHBlZyRjMChzMiwgczMpO1xuICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VPclNpZ24oKTogYW55IHtcbiAgICBsZXQgczAsIHMxO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDE7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAyKSA9PT0gcGVnJGMxKSB7XG4gICAgICBzMSA9IHBlZyRjMTtcbiAgICAgIHBlZyRjdXJyUG9zICs9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyKTsgfVxuICAgIH1cbiAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDIpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjMykge1xuICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMik7XG4gICAgICAgIHBlZyRjdXJyUG9zICs9IDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM0KTsgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgczEgPSBwZWckYzUoKTtcbiAgICB9XG4gICAgczAgPSBzMTtcblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUxvZ2ljT3IoKTogQmluYXJ5T3BlcmFuZCB7XG4gICAgbGV0IHMwLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2LCBzNztcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAyO1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VMb2dpY0FuZCgpO1xuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBbXTtcbiAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzNSA9IHBlZyRwYXJzZUFuZFNpZ24oKTtcbiAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczYgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNyA9IHBlZyRwYXJzZUxvZ2ljQW5kKCk7XG4gICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgd2hpbGUgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyLnB1c2goczMpO1xuICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczUgPSBwZWckcGFyc2VBbmRTaWduKCk7XG4gICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZUxvZ2ljQW5kKCk7XG4gICAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM0ID0gW3M0LCBzNSwgczYsIHM3XTtcbiAgICAgICAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGMwKHMxLCBzMik7XG4gICAgICAgIHMwID0gczE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlQW5kU2lnbigpOiBhbnkge1xuICAgIGxldCBzMCwgczE7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMztcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDIpID09PSBwZWckYzYpIHtcbiAgICAgIHMxID0gcGVnJGM2O1xuICAgICAgcGVnJGN1cnJQb3MgKz0gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzcpOyB9XG4gICAgfVxuICAgIGlmIChzMSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMykudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGM4KSB7XG4gICAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAzKTtcbiAgICAgICAgcGVnJGN1cnJQb3MgKz0gMztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzkpOyB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjMTAoKTtcbiAgICB9XG4gICAgczAgPSBzMTtcblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUxvZ2ljQW5kKCk6IEJpbmFyeU9wZXJhbmQge1xuICAgIGxldCBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczc7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgNDtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIHMxID0gcGVnJHBhcnNlQ29tcE9wcygpO1xuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBbXTtcbiAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzNSA9IHBlZyRwYXJzZUNvbXBhcmFibGVPcGVyYXRvcnMoKTtcbiAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczYgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNyA9IHBlZyRwYXJzZUNvbXBPcHMoKTtcbiAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNCA9IFtzNCwgczUsIHM2LCBzN107XG4gICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNSA9IHBlZyRwYXJzZUNvbXBhcmFibGVPcGVyYXRvcnMoKTtcbiAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlQ29tcE9wcygpO1xuICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzNCA9IFtzNCwgczUsIHM2LCBzN107XG4gICAgICAgICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjMTEoczEsIHMyKTtcbiAgICAgICAgczAgPSBzMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VDb21wYXJhYmxlT3BlcmF0b3JzKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMTtcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyA1O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjMTIpIHtcbiAgICAgIHMxID0gcGVnJGMxMjtcbiAgICAgIHBlZyRjdXJyUG9zICs9IDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMyk7IH1cbiAgICB9XG4gICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAxMSkudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGMxNCkge1xuICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMTEpO1xuICAgICAgICBwZWckY3VyclBvcyArPSAxMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE1KTsgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgczEgPSBwZWckYzE2KCk7XG4gICAgfVxuICAgIHMwID0gczE7XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjMTcpIHtcbiAgICAgICAgczEgPSBwZWckYzE3O1xuICAgICAgICBwZWckY3VyclBvcyArPSAyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTgpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMTQpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjMTkpIHtcbiAgICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMTQpO1xuICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDE0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjApOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzIxKCk7XG4gICAgICB9XG4gICAgICBzMCA9IHMxO1xuICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNjEpIHtcbiAgICAgICAgICBzMSA9IHBlZyRjMjI7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzIzKTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjMjQpIHtcbiAgICAgICAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA1KTtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyNSk7IH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgczEgPSBwZWckYzI2KCk7XG4gICAgICAgIH1cbiAgICAgICAgczAgPSBzMTtcbiAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAyKSA9PT0gcGVnJGMyNykge1xuICAgICAgICAgICAgczEgPSBwZWckYzI3O1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gMjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzI4KTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDgpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjMjkpIHtcbiAgICAgICAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDgpO1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSA4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMzApOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICBzMSA9IHBlZyRjMzEoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDYwKSB7XG4gICAgICAgICAgICAgIHMxID0gcGVnJGMzMjtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzMzKTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDQpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjMzQpIHtcbiAgICAgICAgICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNCk7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzM1KTsgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgIHMxID0gcGVnJGMzNigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDYyKSB7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckYzM3O1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMzOCk7IH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA3KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzM5KSB7XG4gICAgICAgICAgICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNyk7XG4gICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSA3O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNDApOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMxID0gcGVnJGM0MSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlQ29tcE9wcygpOiBCaW5hcnlPcGVyYW5kIHtcbiAgICBsZXQgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3O1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDY7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZVBsdXNNaW51c09wcygpO1xuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBbXTtcbiAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzNSA9IHBlZyRwYXJzZVBsdXNNaW51c1NpZ25zKCk7XG4gICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczcgPSBwZWckcGFyc2VQbHVzTWludXNPcHMoKTtcbiAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNCA9IFtzNCwgczUsIHM2LCBzN107XG4gICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNSA9IHBlZyRwYXJzZVBsdXNNaW51c1NpZ25zKCk7XG4gICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZVBsdXNNaW51c09wcygpO1xuICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzNCA9IFtzNCwgczUsIHM2LCBzN107XG4gICAgICAgICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjMChzMSwgczIpO1xuICAgICAgICBzMCA9IHMxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVBsdXNNaW51c1NpZ25zKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMTtcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyA3O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0Mykge1xuICAgICAgczEgPSBwZWckYzQyO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzQzKTsgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgczEgPSBwZWckYzQ0KCk7XG4gICAgfVxuICAgIHMwID0gczE7XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0NSkge1xuICAgICAgICBzMSA9IHBlZyRjNDU7XG4gICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM0Nik7IH1cbiAgICAgIH1cbiAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzQ3KCk7XG4gICAgICB9XG4gICAgICBzMCA9IHMxO1xuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVBsdXNNaW51c09wcygpOiBCaW5hcnlPcGVyYW5kIHtcbiAgICBsZXQgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3O1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDg7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZU11bERpdk9wcygpO1xuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBbXTtcbiAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzNSA9IHBlZyRwYXJzZU11bERpdlNpZ25zKCk7XG4gICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczcgPSBwZWckcGFyc2VNdWxEaXZPcHMoKTtcbiAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNCA9IFtzNCwgczUsIHM2LCBzN107XG4gICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNSA9IHBlZyRwYXJzZU11bERpdlNpZ25zKCk7XG4gICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZU11bERpdk9wcygpO1xuICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzNCA9IFtzNCwgczUsIHM2LCBzN107XG4gICAgICAgICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjMChzMSwgczIpO1xuICAgICAgICBzMCA9IHMxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZU11bERpdlNpZ25zKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMTtcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyA5O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0Mikge1xuICAgICAgczEgPSBwZWckYzQ4O1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzQ5KTsgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgczEgPSBwZWckYzUwKCk7XG4gICAgfVxuICAgIHMwID0gczE7XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0Nykge1xuICAgICAgICBzMSA9IHBlZyRjNTE7XG4gICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM1Mik7IH1cbiAgICAgIH1cbiAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzUzKCk7XG4gICAgICB9XG4gICAgICBzMCA9IHMxO1xuICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMzcpIHtcbiAgICAgICAgICBzMSA9IHBlZyRjNTQ7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzU1KTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGM1NigpO1xuICAgICAgICB9XG4gICAgICAgIHMwID0gczE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlTXVsRGl2T3BzKCk6IEJpbmFyeU9wZXJhbmQge1xuICAgIGxldCBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczc7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMTA7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZUJpbmFyeUZ1bmNPcCgpO1xuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBbXTtcbiAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICBzNCA9IHBlZyRwYXJzZV8oKTtcbiAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzNSA9IHBlZyRwYXJzZVBvd2VyU2lnbnMoKTtcbiAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczYgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNyA9IHBlZyRwYXJzZUJpbmFyeUZ1bmNPcCgpO1xuICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM0ID0gW3M0LCBzNSwgczYsIHM3XTtcbiAgICAgICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMi5wdXNoKHMzKTtcbiAgICAgICAgczMgPSBwZWckY3VyclBvcztcbiAgICAgICAgczQgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM1ID0gcGVnJHBhcnNlUG93ZXJTaWducygpO1xuICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczYgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczcgPSBwZWckcGFyc2VCaW5hcnlGdW5jT3AoKTtcbiAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczQgPSBbczQsIHM1LCBzNiwgczddO1xuICAgICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzAoczEsIHMyKTtcbiAgICAgICAgczAgPSBzMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VQb3dlclNpZ25zKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMTtcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAxMTtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gOTQpIHtcbiAgICAgIHMxID0gcGVnJGM1NztcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM1OCk7IH1cbiAgICB9XG4gICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA1KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzU5KSB7XG4gICAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA1KTtcbiAgICAgICAgcGVnJGN1cnJQb3MgKz0gNTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzYwKTsgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgczEgPSBwZWckYzYxKCk7XG4gICAgfVxuICAgIHMwID0gczE7XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VCaW5hcnlGdW5jT3AoKTogYW55IHtcbiAgICBsZXQgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3O1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDEyO1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VGYWN0b3IoKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gW107XG4gICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgczQgPSBwZWckcGFyc2VfKCk7XG4gICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczUgPSBwZWckcGFyc2VCaW5GdW5jdGlvbnMoKTtcbiAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczYgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNyA9IHBlZyRwYXJzZUZhY3RvcigpO1xuICAgICAgICAgICAgaWYgKHM3ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM3ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNCA9IFtzNCwgczUsIHM2LCBzN107XG4gICAgICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNSA9IHBlZyRwYXJzZUJpbkZ1bmN0aW9ucygpO1xuICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczYgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczcgPSBwZWckcGFyc2VGYWN0b3IoKTtcbiAgICAgICAgICAgICAgaWYgKHM3ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczcgPSBudWxsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM0ID0gW3M0LCBzNSwgczYsIHM3XTtcbiAgICAgICAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGMxMShzMSwgczIpO1xuICAgICAgICBzMCA9IHMxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUJpbkZ1bmN0aW9ucygpOiBhbnkge1xuICAgIGxldCBzMCwgczE7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMTM7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAyKSA9PT0gcGVnJGM2Mikge1xuICAgICAgczEgPSBwZWckYzYyO1xuICAgICAgcGVnJGN1cnJQb3MgKz0gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzYzKTsgfVxuICAgIH1cbiAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDgpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjNjQpIHtcbiAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDgpO1xuICAgICAgICBwZWckY3VyclBvcyArPSA4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNjUpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNykudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGM2Nikge1xuICAgICAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA3KTtcbiAgICAgICAgICBwZWckY3VyclBvcyArPSA3O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNjcpOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgIHMxID0gcGVnJGM2OCgpO1xuICAgIH1cbiAgICBzMCA9IHMxO1xuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDExKS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzY5KSB7XG4gICAgICAgIHMxID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAxMSk7XG4gICAgICAgIHBlZyRjdXJyUG9zICs9IDExO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNzApOyB9XG4gICAgICB9XG4gICAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMTApLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjNzEpIHtcbiAgICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMTApO1xuICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDEwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNzIpOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzczKCk7XG4gICAgICB9XG4gICAgICBzMCA9IHMxO1xuICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjNzQpIHtcbiAgICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNSk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzc1KTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGM3NigpO1xuICAgICAgICB9XG4gICAgICAgIHMwID0gczE7XG4gICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNSkudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGM3Nykge1xuICAgICAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpO1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzc4KTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgczEgPSBwZWckYzc5KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHMwID0gczE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VGYWN0b3IoKTogT3BlcmFuZCB7XG4gICAgbGV0IHMwLCBzMSwgczIsIHMzLCBzNCwgczU7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMTQ7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDQwKSB7XG4gICAgICBzMSA9IHBlZyRjODA7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjODEpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBwZWckcGFyc2VfKCk7XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczMgPSBwZWckcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM0ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0MSkge1xuICAgICAgICAgICAgICBzNSA9IHBlZyRjODI7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM4Myk7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzNSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgIHMxID0gcGVnJGM4NChzMyk7XG4gICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczAgPSBwZWckcGFyc2VGdW5jdGlvbk9wKCk7XG4gICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczAgPSBwZWckcGFyc2VVbmFyeUZ1bmN0aW9uT3AoKTtcbiAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczAgPSBwZWckcGFyc2VBdG9tKCk7XG4gICAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMCA9IHBlZyRwYXJzZUFycmF5T3AoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VGdW5jdGlvbk9wKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMSwgczIsIHMzLCBzNDtcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAxNTtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIHMxID0gcGVnJHBhcnNlTGV0dGVyc0FuZERpZ2l0cygpO1xuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0MCkge1xuICAgICAgICBzMiA9IHBlZyRjODA7XG4gICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM4MSk7IH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IHBlZyRwYXJzZVNlcXVlbmNlKCk7XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDEpIHtcbiAgICAgICAgICAgIHM0ID0gcGVnJGM4MjtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM4Myk7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHM0ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICBzMSA9IHBlZyRjODUoczEsIHMzKTtcbiAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlVW5hcnlGdW5jdGlvbk9wKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMSwgczIsIHMzO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDE2O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAzMykge1xuICAgICAgczEgPSBwZWckYzg2O1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzg3KTsgfVxuICAgIH1cbiAgICBpZiAoczEgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDYpLnRvTG93ZXJDYXNlKCkgPT09IHBlZyRjODgpIHtcbiAgICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDYpO1xuICAgICAgICBwZWckY3VyclBvcyArPSA2O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjODkpOyB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBwZWckcGFyc2VfKCk7XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczMgPSBwZWckcGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGM5MChzMyk7XG4gICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICBzMSA9IHBlZyRwYXJzZUF0b20oKTtcbiAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczMgPSBwZWckcGFyc2VVbkZ1bmN0aW9ucygpO1xuICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICBzMSA9IHBlZyRjOTEoczEsIHMzKTtcbiAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlVW5GdW5jdGlvbnMoKTogYW55IHtcbiAgICBsZXQgczAsIHMxO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDE3O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNSkudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGM5Mikge1xuICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpO1xuICAgICAgcGVnJGN1cnJQb3MgKz0gNTtcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzkzKTsgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgczEgPSBwZWckYzk0KCk7XG4gICAgfVxuICAgIHMwID0gczE7XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgOCkudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGM5NSkge1xuICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgOCk7XG4gICAgICAgIHBlZyRjdXJyUG9zICs9IDg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM5Nik7IH1cbiAgICAgIH1cbiAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzk3KCk7XG4gICAgICB9XG4gICAgICBzMCA9IHMxO1xuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUF0b20oKTogYW55IHtcbiAgICBsZXQgczAsIHMxLCBzMiwgczMsIHM0O1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDE4O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VfKCk7XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA5KSA9PT0gcGVnJGM5OCkge1xuICAgICAgICBzMiA9IHBlZyRjOTg7XG4gICAgICAgIHBlZyRjdXJyUG9zICs9IDk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM5OSk7IH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA0KSA9PT0gcGVnJGMxMDApIHtcbiAgICAgICAgICBzMiA9IHBlZyRjMTAwO1xuICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMDEpOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzEwMigpO1xuICAgICAgICBzMCA9IHMxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICBzMSA9IHBlZyRwYXJzZV8oKTtcbiAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMiA9IHBlZyRwYXJzZUNvbnN0VmFsdWUoKTtcbiAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgczEgPSBwZWckYzEwMyhzMik7XG4gICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHMxID0gcGVnJHBhcnNlXygpO1xuICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDEyMykge1xuICAgICAgICAgICAgczIgPSBwZWckYzEwNDtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMDUpOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczMgPSBwZWckcGFyc2VWYWx1ZUlucHV0KCk7XG4gICAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjUpIHtcbiAgICAgICAgICAgICAgICBzNCA9IHBlZyRjMTA2O1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMDcpOyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckYzEwOChzMyk7XG4gICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUNvbnN0VmFsdWUoKTogYW55IHtcbiAgICBsZXQgczAsIHMxLCBzMiwgczM7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMTk7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZUxvZ2ljVmFsdWUoKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgczEgPSBwZWckYzEwOShzMSk7XG4gICAgfVxuICAgIHMwID0gczE7XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgczEgPSBwZWckcGFyc2VBcml0aG1ldGljVmFsdWUoKTtcbiAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzEwOShzMSk7XG4gICAgICB9XG4gICAgICBzMCA9IHMxO1xuICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHMxID0gcGVnJHBhcnNlTGV0dGVyc0FuZERpZ2l0cygpO1xuICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICBzMSA9IHBlZyRjMTA5KHMxKTtcbiAgICAgICAgfVxuICAgICAgICBzMCA9IHMxO1xuICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDIpID09PSBwZWckYzExMCkge1xuICAgICAgICAgICAgczEgPSBwZWckYzExMDtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMTEpOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICBzMSA9IHBlZyRjMTEyKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjMTEzKSB7XG4gICAgICAgICAgICAgIHMxID0gcGVnJGMxMTM7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMTQpOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgIHMxID0gcGVnJGMxMTIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAzOSkge1xuICAgICAgICAgICAgICAgIHMxID0gcGVnJGMxMTU7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzExNik7IH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzMiA9IHBlZyRwYXJzZUFueUlucHV0KCk7XG4gICAgICAgICAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDM5KSB7XG4gICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJGMxMTU7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMTYpOyB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGMxMTcoczIpO1xuICAgICAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMzQpIHtcbiAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGMxMTg7XG4gICAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTE5KTsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgIHMyID0gcGVnJHBhcnNlQW55SW5wdXQoKTtcbiAgICAgICAgICAgICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDM0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgczMgPSBwZWckYzExODtcbiAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTE5KTsgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGMxMTcoczIpO1xuICAgICAgICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VBcnJheU9wKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMSwgczIsIHMzO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDIwO1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA5MSkge1xuICAgICAgczEgPSBwZWckYzEyMDtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMjEpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBwZWckcGFyc2VTZXF1ZW5jZSgpO1xuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gOTMpIHtcbiAgICAgICAgICBzMyA9IHBlZyRjMTIyO1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMjMpOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgczEgPSBwZWckYzEyNChzMik7XG4gICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVNlcXVlbmNlKCk6IEFycmF5T3BlcmFuZCB7XG4gICAgbGV0IHMwLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2LCBzNztcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAyMTtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIHMxID0gcGVnJHBhcnNlRXhwcmVzc2lvbigpO1xuICAgIGlmIChzMSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczEgPSBudWxsO1xuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gW107XG4gICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgczQgPSBwZWckcGFyc2VfKCk7XG4gICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0NCkge1xuICAgICAgICAgIHM1ID0gcGVnJGMxMjU7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEyNik7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNiA9IHBlZyRwYXJzZV8oKTtcbiAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM0ID0gW3M0LCBzNSwgczYsIHM3XTtcbiAgICAgICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICAgIHdoaWxlIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMi5wdXNoKHMzKTtcbiAgICAgICAgczMgPSBwZWckY3VyclBvcztcbiAgICAgICAgczQgPSBwZWckcGFyc2VfKCk7XG4gICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDQpIHtcbiAgICAgICAgICAgIHM1ID0gcGVnJGMxMjU7XG4gICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTI2KTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlXygpO1xuICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlRXhwcmVzc2lvbigpO1xuICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzNCA9IFtzNCwgczUsIHM2LCBzN107XG4gICAgICAgICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjMTI3KHMxLCBzMik7XG4gICAgICAgIHMwID0gczE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlTG9naWNWYWx1ZSgpOiBhbnkge1xuICAgIGxldCBzMCwgczE7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMjI7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA0KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzEyOCkge1xuICAgICAgczEgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDQpO1xuICAgICAgcGVnJGN1cnJQb3MgKz0gNDtcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEyOSk7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgIHMxID0gcGVnJGMxMzAoKTtcbiAgICB9XG4gICAgczAgPSBzMTtcbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA1KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzEzMSkge1xuICAgICAgICBzMSA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNSk7XG4gICAgICAgIHBlZyRjdXJyUG9zICs9IDU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMzIpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGMxMzMoKTtcbiAgICAgIH1cbiAgICAgIHMwID0gczE7XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlQXJpdGhtZXRpY1ZhbHVlKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMSwgczI7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMjM7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAyKSA9PT0gcGVnJGMxMzQpIHtcbiAgICAgIHMxID0gcGVnJGMxMzQ7XG4gICAgICBwZWckY3VyclBvcyArPSAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTM1KTsgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gcGVnJHBhcnNlRGlnaXRzKCk7XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGMxMzYoKTtcbiAgICAgICAgczAgPSBzMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgaWYgKHBlZyRjMTM3LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTM4KTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMxID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMiA9IHBlZyRwYXJzZU51bWJlcigpO1xuICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICBzMSA9IHBlZyRjMTM5KHMxLCBzMik7XG4gICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZU51bWJlcigpOiBhbnkge1xuICAgIGxldCBzMCwgczEsIHMyLCBzMztcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAyNDtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIHMxID0gcGVnJHBhcnNlRGlnaXRzKCk7XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDQ2KSB7XG4gICAgICAgIHMyID0gcGVnJGMxNDA7XG4gICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNDEpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczMgPSBwZWckcGFyc2VEaWdpdHMoKTtcbiAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgczEgPSBwZWckYzE0MigpO1xuICAgICAgICAgIHMwID0gczE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgczEgPSBwZWckcGFyc2VOb25aZXJvRGlnaXRzKCk7XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBwZWckcGFyc2VEaWdpdHMoKTtcbiAgICAgICAgaWYgKHMyID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczIgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGMxNDMoKTtcbiAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA0OCkge1xuICAgICAgICAgIHMxID0gcGVnJGMxNDQ7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE0NSk7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICBzMSA9IHBlZyRjMTQ2KCk7XG4gICAgICAgIH1cbiAgICAgICAgczAgPSBzMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VWYWx1ZUlucHV0KCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMSwgczI7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMjU7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IFtdO1xuICAgIHMyID0gcGVnJHBhcnNlVmFsdWVDaGFyYWN0ZXJzKCk7XG4gICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICB3aGlsZSAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczEucHVzaChzMik7XG4gICAgICAgIHMyID0gcGVnJHBhcnNlVmFsdWVDaGFyYWN0ZXJzKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgIHMxID0gcGVnJGMxNDcoczEpO1xuICAgIH1cbiAgICBzMCA9IHMxO1xuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlQW55SW5wdXQoKTogYW55IHtcbiAgICBsZXQgczAsIHMxLCBzMjtcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAyNjtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIHMxID0gW107XG4gICAgczIgPSBwZWckcGFyc2VBbnlDaGFyYWN0ZXJzKCk7XG4gICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICB3aGlsZSAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczEucHVzaChzMik7XG4gICAgICAgIHMyID0gcGVnJHBhcnNlQW55Q2hhcmFjdGVycygpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjMTQ3KHMxKTtcbiAgICB9XG4gICAgczAgPSBzMTtcblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUFueUNoYXJhY3RlcnMoKTogYW55IHtcbiAgICBsZXQgczAsIHMxO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDI3O1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjMTQ4KSB7XG4gICAgICBzMSA9IHBlZyRjMTQ4O1xuICAgICAgcGVnJGN1cnJQb3MgKz0gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE0OSk7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgIHMxID0gcGVnJGMxNTAoKTtcbiAgICB9XG4gICAgczAgPSBzMTtcbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAyKSA9PT0gcGVnJGMxNTEpIHtcbiAgICAgICAgczEgPSBwZWckYzE1MTtcbiAgICAgICAgcGVnJGN1cnJQb3MgKz0gMjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE1Mik7IH1cbiAgICAgIH1cbiAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgczEgPSBwZWckYzE1MygpO1xuICAgICAgfVxuICAgICAgczAgPSBzMTtcbiAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBpZiAocGVnJGMxNTQudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTU1KTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGMxNTYoKTtcbiAgICAgICAgfVxuICAgICAgICBzMCA9IHMxO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVZhbHVlQ2hhcmFjdGVycygpOiBhbnkge1xuICAgIGxldCBzMCwgczE7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMjg7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAocGVnJGMxNTcudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE1OCk7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgIHMxID0gcGVnJGMxNTYoKTtcbiAgICB9XG4gICAgczAgPSBzMTtcblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUxldHRlcnNBbmREaWdpdHMoKTogYW55IHtcbiAgICBsZXQgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczY7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMjk7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZUxldHRlcnMoKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gW107XG4gICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgczQgPSBwZWckcGFyc2VEaWdpdHMoKTtcbiAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzNSA9IFtdO1xuICAgICAgICBzNiA9IHBlZyRwYXJzZUxldHRlcnMoKTtcbiAgICAgICAgd2hpbGUgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczUucHVzaChzNik7XG4gICAgICAgICAgczYgPSBwZWckcGFyc2VMZXR0ZXJzKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczQgPSBbczQsIHM1XTtcbiAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHM0ID0gcGVnJHBhcnNlRGlnaXRzKCk7XG4gICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM1ID0gW107XG4gICAgICAgICAgczYgPSBwZWckcGFyc2VMZXR0ZXJzKCk7XG4gICAgICAgICAgd2hpbGUgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNS5wdXNoKHM2KTtcbiAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlTGV0dGVycygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM0ID0gW3M0LCBzNV07XG4gICAgICAgICAgICBzMyA9IHM0O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMzO1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjMTU2KCk7XG4gICAgICAgIHMwID0gczE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlRGlnaXRzKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMTtcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAzMDtcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBzMCA9IFtdO1xuICAgIGlmIChwZWckYzE1OS50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICBzMSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTYwKTsgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHdoaWxlIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMC5wdXNoKHMxKTtcbiAgICAgICAgaWYgKHBlZyRjMTU5LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICBzMSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE2MCk7IH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlTm9uWmVyb0RpZ2l0cygpOiBhbnkge1xuICAgIGxldCBzMCwgczE7XG5cbiAgICBjb25zdCBrZXkgPSBwZWckY3VyclBvcyAqIDM0ICsgMzE7XG4gICAgY29uc3QgY2FjaGVkOiBJQ2FjaGVkID0gcGVnJHJlc3VsdHNDYWNoZVtrZXldO1xuXG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcGVnJGN1cnJQb3MgPSBjYWNoZWQubmV4dFBvcztcblxuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgczAgPSBbXTtcbiAgICBpZiAocGVnJGMxNjEudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE2Mik7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICB3aGlsZSAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczAucHVzaChzMSk7XG4gICAgICAgIGlmIChwZWckYzE2MS50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNjIpOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHBlZyRyZXN1bHRzQ2FjaGVba2V5XSA9IHsgbmV4dFBvczogcGVnJGN1cnJQb3MsIHJlc3VsdDogczAgfTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUxldHRlcnMoKTogYW55IHtcbiAgICBsZXQgczAsIHMxO1xuXG4gICAgY29uc3Qga2V5ID0gcGVnJGN1cnJQb3MgKiAzNCArIDMyO1xuICAgIGNvbnN0IGNhY2hlZDogSUNhY2hlZCA9IHBlZyRyZXN1bHRzQ2FjaGVba2V5XTtcblxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gY2FjaGVkLm5leHRQb3M7XG5cbiAgICAgIHJldHVybiBjYWNoZWQucmVzdWx0O1xuICAgIH1cblxuICAgIHMwID0gW107XG4gICAgaWYgKHBlZyRjMTYzLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNjQpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgd2hpbGUgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwLnB1c2goczEpO1xuICAgICAgICBpZiAocGVnJGMxNjMudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTY0KTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICBwZWckcmVzdWx0c0NhY2hlW2tleV0gPSB7IG5leHRQb3M6IHBlZyRjdXJyUG9zLCByZXN1bHQ6IHMwIH07XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VfKCk6IGFueSB7XG4gICAgbGV0IHMwLCBzMTtcblxuICAgIGNvbnN0IGtleSA9IHBlZyRjdXJyUG9zICogMzQgKyAzMztcbiAgICBjb25zdCBjYWNoZWQ6IElDYWNoZWQgPSBwZWckcmVzdWx0c0NhY2hlW2tleV07XG5cbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICBwZWckY3VyclBvcyA9IGNhY2hlZC5uZXh0UG9zO1xuXG4gICAgICByZXR1cm4gY2FjaGVkLnJlc3VsdDtcbiAgICB9XG5cbiAgICBwZWckc2lsZW50RmFpbHMrKztcbiAgICBzMCA9IFtdO1xuICAgIGlmIChwZWckYzE2Ni50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICBzMSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTY3KTsgfVxuICAgIH1cbiAgICB3aGlsZSAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwLnB1c2goczEpO1xuICAgICAgaWYgKHBlZyRjMTY2LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTY3KTsgfVxuICAgICAgfVxuICAgIH1cbiAgICBwZWckc2lsZW50RmFpbHMtLTtcbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNjUpOyB9XG4gICAgfVxuXG4gICAgcGVnJHJlc3VsdHNDYWNoZVtrZXldID0geyBuZXh0UG9zOiBwZWckY3VyclBvcywgcmVzdWx0OiBzMCB9O1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gYnVpbGRCaW5hcnlPcGVyYW5kKGhlYWQ6IE9wZXJhbmQsIHRhaWw6IEFycmF5PGFueT4sIGlzQXJpdGhtZXRpY09wOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICByZXR1cm4gdGFpbC5yZWR1Y2UoXG4gICAgICBmdW5jdGlvbihyZXN1bHQsIGVsZW1lbnRzKSB7XG4gICAgICAgIHJldHVybiBuZXcgQmluYXJ5T3BlcmFuZChlbGVtZW50c1sxXSwgcmVzdWx0LCBlbGVtZW50c1szXSwgaXNBcml0aG1ldGljT3ApO1xuICAgICAgfSxcbiAgICAgIGhlYWQpO1xuICB9XG5cbiAgZnVuY3Rpb24gZmxhdHRlbkFycmF5KGFycmF5OiBBcnJheTxhbnk+KTogQXJyYXk8YW55PiB7XG4gICAgcmV0dXJuIFtdLmNvbmNhdC5hcHBseShbXSwgYXJyYXkpO1xuICB9XG5cbiAgcGVnJHJlc3VsdCA9IHBlZyRzdGFydFJ1bGVGdW5jdGlvbigpO1xuXG4gIGlmIChwZWckcmVzdWx0ICE9PSBwZWckRkFJTEVEICYmIHBlZyRjdXJyUG9zID09PSBpbnB1dC5sZW5ndGgpIHtcbiAgICByZXR1cm4gcGVnJHJlc3VsdDtcbiAgfSBlbHNlIHtcbiAgICBpZiAocGVnJHJlc3VsdCAhPT0gcGVnJEZBSUxFRCAmJiBwZWckY3VyclBvcyA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgcGVnJGZhaWwocGVnJGVuZEV4cGVjdGF0aW9uKCkpO1xuICAgIH1cblxuICAgIHRocm93IHBlZyRidWlsZFN0cnVjdHVyZWRFcnJvcihcbiAgICAgIHBlZyRtYXhGYWlsRXhwZWN0ZWQsXG4gICAgICBwZWckbWF4RmFpbFBvcyA8IGlucHV0Lmxlbmd0aCA/IGlucHV0LmNoYXJBdChwZWckbWF4RmFpbFBvcykgOiBudWxsLFxuICAgICAgcGVnJG1heEZhaWxQb3MgPCBpbnB1dC5sZW5ndGhcbiAgICAgICAgPyBwZWckY29tcHV0ZUxvY2F0aW9uKHBlZyRtYXhGYWlsUG9zLCBwZWckbWF4RmFpbFBvcyArIDEpXG4gICAgICAgIDogcGVnJGNvbXB1dGVMb2NhdGlvbihwZWckbWF4RmFpbFBvcywgcGVnJG1heEZhaWxQb3MpXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQYXJzZU9wdGlvbnMge1xuICBmaWxlbmFtZT86IHN0cmluZztcbiAgc3RhcnRSdWxlPzogc3RyaW5nO1xuICB0cmFjZXI/OiBhbnk7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cbmV4cG9ydCB0eXBlIFBhcnNlRnVuY3Rpb24gPSAoaW5wdXQ6IHN0cmluZywgb3B0aW9ucz86IElQYXJzZU9wdGlvbnMpID0+IGFueTtcbmV4cG9ydCBjb25zdCBwYXJzZTogUGFyc2VGdW5jdGlvbiA9IHBlZyRwYXJzZTtcblxuIiwiaW1wb3J0IHsgSGFzaFRhYmxlLCBIZWxwZXJzIH0gZnJvbSBcIi4uL2hlbHBlcnNcIjtcbmltcG9ydCB7IEZ1bmN0aW9uRmFjdG9yeSB9IGZyb20gXCIuLi9mdW5jdGlvbnNmYWN0b3J5XCI7XG5pbXBvcnQgeyBQcm9jZXNzVmFsdWUgfSBmcm9tIFwiLi4vY29uZGl0aW9uUHJvY2Vzc1ZhbHVlXCI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBPcGVyYW5kIHtcbiAgcHVibGljIHRvU3RyaW5nKGZ1bmM6IChvcDogT3BlcmFuZCkgPT4gc3RyaW5nID0gdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICBwdWJsaWMgYWJzdHJhY3QgZ2V0VHlwZSgpOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCBldmFsdWF0ZShwcm9jZXNzVmFsdWU/OiBQcm9jZXNzVmFsdWUpOiBhbnk7XG4gIHB1YmxpYyBhYnN0cmFjdCBzZXRWYXJpYWJsZXModmFyaWFibGVzOiBBcnJheTxzdHJpbmc+KTogYW55O1xuICBwdWJsaWMgaGFzRnVuY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBoYXNBc3luY0Z1bmN0aW9uKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgYWRkVG9Bc3luY0xpc3QobGlzdDogQXJyYXk8RnVuY3Rpb25PcGVyYW5kPik6IHZvaWQge31cbiAgcHVibGljIGlzRXF1YWwob3A6IE9wZXJhbmQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFvcCAmJiBvcC5nZXRUeXBlKCkgPT09IHRoaXMuZ2V0VHlwZSgpICYmIHRoaXMuaXNDb250ZW50RXF1YWwob3ApO1xuICB9XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBpc0NvbnRlbnRFcXVhbChvcDogT3BlcmFuZCk6IGJvb2xlYW47XG4gIHByb3RlY3RlZCBhcmVPcGVyYXRvcnNFcXVhbHMob3AxOiBPcGVyYW5kLCBvcDI6IE9wZXJhbmQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIW9wMSAmJiAhb3AyIHx8ICEhb3AxICYmIG9wMS5pc0VxdWFsKG9wMik7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJpbmFyeU9wZXJhbmQgZXh0ZW5kcyBPcGVyYW5kIHtcbiAgcHJpdmF0ZSBjb25zdW1lcjogRnVuY3Rpb247XG4gIHByaXZhdGUgaXNBcml0aG1ldGljVmFsdWU6IGJvb2xlYW47XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgb3BlcmF0b3JOYW1lOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBsZWZ0OiBhbnkgPSBudWxsLFxuICAgIHByaXZhdGUgcmlnaHQ6IGFueSA9IG51bGwsXG4gICAgaXNBcml0aG1ldGljT3A6IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuaXNBcml0aG1ldGljVmFsdWUgPSBpc0FyaXRobWV0aWNPcDtcbiAgICBpZiAoaXNBcml0aG1ldGljT3ApIHtcbiAgICAgIHRoaXMuY29uc3VtZXIgPSBPcGVyYW5kTWFrZXIuYmluYXJ5RnVuY3Rpb25zW1wiYXJpdGhtZXRpY09wXCJdKFxuICAgICAgICBvcGVyYXRvck5hbWVcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uc3VtZXIgPSBPcGVyYW5kTWFrZXIuYmluYXJ5RnVuY3Rpb25zW29wZXJhdG9yTmFtZV07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uc3VtZXIgPT0gbnVsbCkge1xuICAgICAgT3BlcmFuZE1ha2VyLnRocm93SW52YWxpZE9wZXJhdG9yRXJyb3Iob3BlcmF0b3JOYW1lKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJiaW5hcnlcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzQXJpdGhtZXRpYygpIHtcbiAgICByZXR1cm4gdGhpcy5pc0FyaXRobWV0aWNWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzQ29uanVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMub3BlcmF0b3JOYW1lID09IFwib3JcIiB8fCB0aGlzLm9wZXJhdG9yTmFtZSA9PSBcImFuZFwiO1xuICB9XG4gIHB1YmxpYyBnZXQgY29uanVuY3Rpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pc0Nvbmp1bmN0aW9uID8gdGhpcy5vcGVyYXRvck5hbWUgOiBcIlwiO1xuICB9XG4gIHB1YmxpYyBnZXQgb3BlcmF0b3IoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5vcGVyYXRvck5hbWU7XG4gIH1cbiAgcHVibGljIGdldCBsZWZ0T3BlcmFuZCgpIHtcbiAgICByZXR1cm4gdGhpcy5sZWZ0O1xuICB9XG4gIHB1YmxpYyBnZXQgcmlnaHRPcGVyYW5kKCkge1xuICAgIHJldHVybiB0aGlzLnJpZ2h0O1xuICB9XG4gIHByb3RlY3RlZCBpc0NvbnRlbnRFcXVhbChvcDogT3BlcmFuZCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGJPcCA9IDxCaW5hcnlPcGVyYW5kPm9wO1xuICAgIHJldHVybiBiT3Aub3BlcmF0b3IgPT09IHRoaXMub3BlcmF0b3IgJiZcbiAgICAgIHRoaXMuYXJlT3BlcmF0b3JzRXF1YWxzKHRoaXMubGVmdCwgYk9wLmxlZnQpICYmXG4gICAgICB0aGlzLmFyZU9wZXJhdG9yc0VxdWFscyh0aGlzLnJpZ2h0LCBiT3AucmlnaHQpO1xuICB9XG4gIHByaXZhdGUgZXZhbHVhdGVQYXJhbSh4OiBhbnksIHByb2Nlc3NWYWx1ZT86IFByb2Nlc3NWYWx1ZSk6IGFueSB7XG4gICAgcmV0dXJuIHggPT0gbnVsbCA/IG51bGwgOiB4LmV2YWx1YXRlKHByb2Nlc3NWYWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZXZhbHVhdGUocHJvY2Vzc1ZhbHVlPzogUHJvY2Vzc1ZhbHVlKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5jb25zdW1lci5jYWxsKFxuICAgICAgdGhpcyxcbiAgICAgIHRoaXMuZXZhbHVhdGVQYXJhbSh0aGlzLmxlZnQsIHByb2Nlc3NWYWx1ZSksXG4gICAgICB0aGlzLmV2YWx1YXRlUGFyYW0odGhpcy5yaWdodCwgcHJvY2Vzc1ZhbHVlKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgdG9TdHJpbmcoZnVuYzogKG9wOiBPcGVyYW5kKSA9PiBzdHJpbmcgPSB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIGlmICghIWZ1bmMpIHtcbiAgICAgIHZhciByZXMgPSBmdW5jKHRoaXMpO1xuICAgICAgaWYgKCEhcmVzKSByZXR1cm4gcmVzO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgXCIoXCIgK1xuICAgICAgT3BlcmFuZE1ha2VyLnNhZmVUb1N0cmluZyh0aGlzLmxlZnQsIGZ1bmMpICtcbiAgICAgIFwiIFwiICtcbiAgICAgIE9wZXJhbmRNYWtlci5vcGVyYXRvclRvU3RyaW5nKHRoaXMub3BlcmF0b3JOYW1lKSArXG4gICAgICBcIiBcIiArXG4gICAgICBPcGVyYW5kTWFrZXIuc2FmZVRvU3RyaW5nKHRoaXMucmlnaHQsIGZ1bmMpICtcbiAgICAgIFwiKVwiXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRWYXJpYWJsZXModmFyaWFibGVzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgaWYgKHRoaXMubGVmdCAhPSBudWxsKSB0aGlzLmxlZnQuc2V0VmFyaWFibGVzKHZhcmlhYmxlcyk7XG4gICAgaWYgKHRoaXMucmlnaHQgIT0gbnVsbCkgdGhpcy5yaWdodC5zZXRWYXJpYWJsZXModmFyaWFibGVzKTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNGdW5jdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgKCEhdGhpcy5sZWZ0ICYmIHRoaXMubGVmdC5oYXNGdW5jdGlvbigpKSB8fFxuICAgICAgKCEhdGhpcy5yaWdodCAmJiB0aGlzLnJpZ2h0Lmhhc0Z1bmN0aW9uKCkpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgaGFzQXN5bmNGdW5jdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgKCEhdGhpcy5sZWZ0ICYmIHRoaXMubGVmdC5oYXNBc3luY0Z1bmN0aW9uKCkpIHx8XG4gICAgICAoISF0aGlzLnJpZ2h0ICYmIHRoaXMucmlnaHQuaGFzQXN5bmNGdW5jdGlvbigpKVxuICAgICk7XG4gIH1cbiAgcHVibGljIGFkZFRvQXN5bmNMaXN0KGxpc3Q6IEFycmF5PEZ1bmN0aW9uT3BlcmFuZD4pIHtcbiAgICBpZiAoISF0aGlzLmxlZnQpIHRoaXMubGVmdC5hZGRUb0FzeW5jTGlzdChsaXN0KTtcbiAgICBpZiAoISF0aGlzLnJpZ2h0KSB0aGlzLnJpZ2h0LmFkZFRvQXN5bmNMaXN0KGxpc3QpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmFyeU9wZXJhbmQgZXh0ZW5kcyBPcGVyYW5kIHtcbiAgcHJpdmF0ZSBjb25zdW1lcjogRnVuY3Rpb247XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZXhwcmVzc2lvblZhbHVlOiBPcGVyYW5kLCBwcml2YXRlIG9wZXJhdG9yTmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNvbnN1bWVyID0gT3BlcmFuZE1ha2VyLnVuYXJ5RnVuY3Rpb25zW29wZXJhdG9yTmFtZV07XG4gICAgaWYgKHRoaXMuY29uc3VtZXIgPT0gbnVsbCkge1xuICAgICAgT3BlcmFuZE1ha2VyLnRocm93SW52YWxpZE9wZXJhdG9yRXJyb3Iob3BlcmF0b3JOYW1lKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCBvcGVyYXRvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm9wZXJhdG9yTmFtZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGV4cHJlc3Npb24oKTogT3BlcmFuZCB7XG4gICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvblZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwidW5hcnlcIjtcbiAgfVxuICBwdWJsaWMgdG9TdHJpbmcoZnVuYzogKG9wOiBPcGVyYW5kKSA9PiBzdHJpbmcgPSB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIGlmICghIWZ1bmMpIHtcbiAgICAgIHZhciByZXMgPSBmdW5jKHRoaXMpO1xuICAgICAgaWYgKCEhcmVzKSByZXR1cm4gcmVzO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgT3BlcmFuZE1ha2VyLm9wZXJhdG9yVG9TdHJpbmcodGhpcy5vcGVyYXRvck5hbWUpICtcbiAgICAgIFwiIFwiICtcbiAgICAgIHRoaXMuZXhwcmVzc2lvbi50b1N0cmluZyhmdW5jKVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGlzQ29udGVudEVxdWFsKG9wOiBPcGVyYW5kKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdU9wID0gPFVuYXJ5T3BlcmFuZD5vcDtcbiAgICByZXR1cm4gdU9wLm9wZXJhdG9yID09IHRoaXMub3BlcmF0b3IgJiYgdGhpcy5hcmVPcGVyYXRvcnNFcXVhbHModGhpcy5leHByZXNzaW9uLCB1T3AuZXhwcmVzc2lvbik7XG4gIH1cbiAgcHVibGljIGV2YWx1YXRlKHByb2Nlc3NWYWx1ZT86IFByb2Nlc3NWYWx1ZSk6IGJvb2xlYW4ge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZShwcm9jZXNzVmFsdWUpO1xuICAgIHJldHVybiB0aGlzLmNvbnN1bWVyLmNhbGwodGhpcywgdmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHNldFZhcmlhYmxlcyh2YXJpYWJsZXM6IEFycmF5PHN0cmluZz4pIHtcbiAgICB0aGlzLmV4cHJlc3Npb24uc2V0VmFyaWFibGVzKHZhcmlhYmxlcyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFycmF5T3BlcmFuZCBleHRlbmRzIE9wZXJhbmQge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdmFsdWVzOiBBcnJheTxPcGVyYW5kPikge1xuICAgIHN1cGVyKCk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJhcnJheVwiO1xuICB9XG4gIHB1YmxpYyB0b1N0cmluZyhmdW5jOiAob3A6IE9wZXJhbmQpID0+IHN0cmluZyA9IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgaWYgKCEhZnVuYykge1xuICAgICAgdmFyIHJlcyA9IGZ1bmModGhpcyk7XG4gICAgICBpZiAoISFyZXMpIHJldHVybiByZXM7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICBcIltcIiArXG4gICAgICB0aGlzLnZhbHVlc1xuICAgICAgICAubWFwKGZ1bmN0aW9uKGVsOiBPcGVyYW5kKSB7XG4gICAgICAgICAgcmV0dXJuIGVsLnRvU3RyaW5nKGZ1bmMpO1xuICAgICAgICB9KVxuICAgICAgICAuam9pbihcIiwgXCIpICtcbiAgICAgIFwiXVwiXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBldmFsdWF0ZShwcm9jZXNzVmFsdWU/OiBQcm9jZXNzVmFsdWUpOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXMubWFwKGZ1bmN0aW9uKGVsOiBPcGVyYW5kKSB7XG4gICAgICByZXR1cm4gZWwuZXZhbHVhdGUocHJvY2Vzc1ZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRWYXJpYWJsZXModmFyaWFibGVzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgdGhpcy52YWx1ZXMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgIGVsLnNldFZhcmlhYmxlcyh2YXJpYWJsZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGhhc0Z1bmN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZhbHVlcy5zb21lKChvcGVyYW5kKSA9PiBvcGVyYW5kLmhhc0Z1bmN0aW9uKCkpO1xuICB9XG4gIHB1YmxpYyBoYXNBc3luY0Z1bmN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZhbHVlcy5zb21lKChvcGVyYW5kKSA9PiBvcGVyYW5kLmhhc0FzeW5jRnVuY3Rpb24oKSk7XG4gIH1cbiAgcHVibGljIGFkZFRvQXN5bmNMaXN0KGxpc3Q6IEFycmF5PEZ1bmN0aW9uT3BlcmFuZD4pIHtcbiAgICB0aGlzLnZhbHVlcy5mb3JFYWNoKChvcGVyYW5kKSA9PiBvcGVyYW5kLmFkZFRvQXN5bmNMaXN0KGxpc3QpKTtcbiAgfVxuICBwcm90ZWN0ZWQgaXNDb250ZW50RXF1YWwob3A6IE9wZXJhbmQpOiBib29sZWFuIHtcbiAgICBjb25zdCBhT3AgPSA8QXJyYXlPcGVyYW5kPm9wO1xuICAgIGlmKGFPcC52YWx1ZXMubGVuZ3RoICE9PSB0aGlzLnZhbHVlcy5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy52YWx1ZXMubGVuZ3RoOyBpICsrKSB7XG4gICAgICBpZighYU9wLnZhbHVlc1tpXS5pc0VxdWFsKHRoaXMudmFsdWVzW2ldKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29uc3QgZXh0ZW5kcyBPcGVyYW5kIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB2YWx1ZTogYW55KSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImNvbnN0XCI7XG4gIH1cbiAgcHVibGljIHRvU3RyaW5nKGZ1bmM6IChvcDogT3BlcmFuZCkgPT4gc3RyaW5nID0gdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBpZiAoISFmdW5jKSB7XG4gICAgICB2YXIgcmVzID0gZnVuYyh0aGlzKTtcbiAgICAgIGlmICghIXJlcykgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudmFsdWUudG9TdHJpbmcoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNvcnJlY3RWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldENvcnJlY3RWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBldmFsdWF0ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldENvcnJlY3RWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRWYXJpYWJsZXModmFyaWFibGVzOiBBcnJheTxzdHJpbmc+KSB7fVxuICBwcm90ZWN0ZWQgZ2V0Q29ycmVjdFZhbHVlKHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9IFwic3RyaW5nXCIpIHJldHVybiB2YWx1ZTtcbiAgICBpZiAodGhpcy5pc0Jvb2xlYW5WYWx1ZSh2YWx1ZSkpIHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBcInRydWVcIjtcbiAgICBpZiAoXG4gICAgICB2YWx1ZS5sZW5ndGggPiAxICYmXG4gICAgICB0aGlzLmlzUXVvdGUodmFsdWVbMF0pICYmXG4gICAgICB0aGlzLmlzUXVvdGUodmFsdWVbdmFsdWUubGVuZ3RoIC0gMV0pXG4gICAgKVxuICAgICAgcmV0dXJuIHZhbHVlLnN1YnN0cigxLCB2YWx1ZS5sZW5ndGggLSAyKTtcbiAgICBpZiAoT3BlcmFuZE1ha2VyLmlzTnVtZXJpYyh2YWx1ZSkpIHtcbiAgICAgIGlmICh2YWx1ZS5pbmRleE9mKFwiMHhcIikgPT0gMCkgcmV0dXJuIHBhcnNlSW50KHZhbHVlKTtcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAxICYmIHZhbHVlWzBdID09IFwiMFwiKSByZXR1cm4gdmFsdWU7XG4gICAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgaXNDb250ZW50RXF1YWwob3A6IE9wZXJhbmQpOiBib29sZWFuIHtcbiAgICBjb25zdCBjT3AgPSA8Q29uc3Q+b3A7XG4gICAgcmV0dXJuIGNPcC52YWx1ZSA9PSB0aGlzLnZhbHVlO1xuICB9XG4gIHByaXZhdGUgaXNRdW90ZShjaDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNoID09IFwiJ1wiIHx8IGNoID09ICdcIic7XG4gIH1cbiAgcHJpdmF0ZSBpc0Jvb2xlYW5WYWx1ZSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHZhbHVlICYmXG4gICAgICAodmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0cnVlXCIgfHwgdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gXCJmYWxzZVwiKVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFZhcmlhYmxlIGV4dGVuZHMgQ29uc3Qge1xuICBzdGF0aWMgRGlzYWJsZUNvbnZlcnNpb25DaGFyID0gXCIjXCI7XG4gIHByaXZhdGUgdmFsdWVJbmZvOiBhbnkgPSB7fTtcbiAgcHJpdmF0ZSB1c2VWYWx1ZUFzSXRJczogYm9vbGVhbiA9IGZhbHNlO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHZhcmlhYmxlTmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIodmFyaWFibGVOYW1lKTtcbiAgICBpZiAoXG4gICAgICAhIXRoaXMudmFyaWFibGVOYW1lICYmXG4gICAgICB0aGlzLnZhcmlhYmxlTmFtZS5sZW5ndGggPiAxICYmXG4gICAgICB0aGlzLnZhcmlhYmxlTmFtZVswXSA9PT0gVmFyaWFibGUuRGlzYWJsZUNvbnZlcnNpb25DaGFyXG4gICAgKSB7XG4gICAgICB0aGlzLnZhcmlhYmxlTmFtZSA9IHRoaXMudmFyaWFibGVOYW1lLnN1YnN0cigxKTtcbiAgICAgIHRoaXMudXNlVmFsdWVBc0l0SXMgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInZhcmlhYmxlXCI7XG4gIH1cbiAgcHVibGljIHRvU3RyaW5nKGZ1bmM6IChvcDogT3BlcmFuZCkgPT4gc3RyaW5nID0gdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBpZiAoISFmdW5jKSB7XG4gICAgICB2YXIgcmVzID0gZnVuYyh0aGlzKTtcbiAgICAgIGlmICghIXJlcykgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgdmFyIHByZWZpeCA9IHRoaXMudXNlVmFsdWVBc0l0SXMgPyBWYXJpYWJsZS5EaXNhYmxlQ29udmVyc2lvbkNoYXIgOiBcIlwiO1xuICAgIHJldHVybiBcIntcIiArIHByZWZpeCArIHRoaXMudmFyaWFibGVOYW1lICsgXCJ9XCI7XG4gIH1cbiAgcHVibGljIGdldCB2YXJpYWJsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnZhcmlhYmxlTmFtZTtcbiAgfVxuICBwdWJsaWMgZXZhbHVhdGUocHJvY2Vzc1ZhbHVlPzogUHJvY2Vzc1ZhbHVlKTogYW55IHtcbiAgICB0aGlzLnZhbHVlSW5mby5uYW1lID0gdGhpcy52YXJpYWJsZU5hbWU7XG4gICAgcHJvY2Vzc1ZhbHVlLmdldFZhbHVlSW5mbyh0aGlzLnZhbHVlSW5mbyk7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVJbmZvLmhhc1ZhbHVlXG4gICAgICA/IHRoaXMuZ2V0Q29ycmVjdFZhbHVlKHRoaXMudmFsdWVJbmZvLnZhbHVlKVxuICAgICAgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBzZXRWYXJpYWJsZXModmFyaWFibGVzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgdmFyaWFibGVzLnB1c2godGhpcy52YXJpYWJsZU5hbWUpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRDb3JyZWN0VmFsdWUodmFsdWU6IGFueSk6IGFueSB7XG4gICAgaWYgKHRoaXMudXNlVmFsdWVBc0l0SXMpIHJldHVybiB2YWx1ZTtcbiAgICByZXR1cm4gc3VwZXIuZ2V0Q29ycmVjdFZhbHVlKHZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgaXNDb250ZW50RXF1YWwob3A6IE9wZXJhbmQpOiBib29sZWFuIHtcbiAgICBjb25zdCB2T3AgPSA8VmFyaWFibGU+b3A7XG4gICAgcmV0dXJuIHZPcC52YXJpYWJsZSA9PSB0aGlzLnZhcmlhYmxlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGdW5jdGlvbk9wZXJhbmQgZXh0ZW5kcyBPcGVyYW5kIHtcbiAgcHJpdmF0ZSBpc1JlYWR5VmFsdWU6IGJvb2xlYW47XG4gIHByaXZhdGUgYXN5blJlc3VsdDogYW55O1xuICBwdWJsaWMgb25Bc3luY1JlYWR5OiAoKSA9PiB2b2lkO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG9yaWdpbmFsVmFsdWU6IHN0cmluZywgcHJpdmF0ZSBwYXJhbWV0ZXJzOiBBcnJheU9wZXJhbmQpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuaXNSZWFkeVZhbHVlID0gZmFsc2U7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW1ldGVycykgJiYgcGFyYW1ldGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMucGFyYW1ldGVycyA9IG5ldyBBcnJheU9wZXJhbmQoW10pO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImZ1bmN0aW9uXCI7XG4gIH1cbiAgcHVibGljIGV2YWx1YXRlQXN5bmMocHJvY2Vzc1ZhbHVlOiBQcm9jZXNzVmFsdWUpIHtcbiAgICB0aGlzLmlzUmVhZHlWYWx1ZSA9IGZhbHNlO1xuICAgIHZhciBhc3luY1Byb2Nlc3NWYWx1ZSA9IG5ldyBQcm9jZXNzVmFsdWUoKTtcbiAgICBhc3luY1Byb2Nlc3NWYWx1ZS52YWx1ZXMgPSBIZWxwZXJzLmNyZWF0ZUNvcHkocHJvY2Vzc1ZhbHVlLnZhbHVlcyk7XG4gICAgYXN5bmNQcm9jZXNzVmFsdWUucHJvcGVydGllcyA9IEhlbHBlcnMuY3JlYXRlQ29weShwcm9jZXNzVmFsdWUucHJvcGVydGllcyk7XG4gICAgYXN5bmNQcm9jZXNzVmFsdWUucHJvcGVydGllcy5yZXR1cm5SZXN1bHQgPSAocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIHRoaXMuYXN5blJlc3VsdCA9IHJlc3VsdDtcbiAgICAgIHRoaXMuaXNSZWFkeVZhbHVlID0gdHJ1ZTtcbiAgICAgIHRoaXMub25Bc3luY1JlYWR5KCk7XG4gICAgfTtcbiAgICB0aGlzLmV2YWx1YXRlQ29yZShhc3luY1Byb2Nlc3NWYWx1ZSk7XG4gIH1cbiAgcHVibGljIGV2YWx1YXRlKHByb2Nlc3NWYWx1ZT86IFByb2Nlc3NWYWx1ZSk6IGFueSB7XG4gICAgaWYgKHRoaXMuaXNSZWFkeSkgcmV0dXJuIHRoaXMuYXN5blJlc3VsdDtcbiAgICByZXR1cm4gdGhpcy5ldmFsdWF0ZUNvcmUocHJvY2Vzc1ZhbHVlKTtcbiAgfVxuICBwcml2YXRlIGV2YWx1YXRlQ29yZShwcm9jZXNzVmFsdWU/OiBQcm9jZXNzVmFsdWUpOiBhbnkge1xuICAgIHJldHVybiBGdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucnVuKFxuICAgICAgdGhpcy5vcmlnaW5hbFZhbHVlLFxuICAgICAgdGhpcy5wYXJhbWV0ZXJzLmV2YWx1YXRlKHByb2Nlc3NWYWx1ZSksXG4gICAgICBwcm9jZXNzVmFsdWUucHJvcGVydGllc1xuICAgICk7XG4gIH1cblxuICBwdWJsaWMgdG9TdHJpbmcoZnVuYzogKG9wOiBPcGVyYW5kKSA9PiBzdHJpbmcgPSB1bmRlZmluZWQpIHtcbiAgICBpZiAoISFmdW5jKSB7XG4gICAgICB2YXIgcmVzID0gZnVuYyh0aGlzKTtcbiAgICAgIGlmICghIXJlcykgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3JpZ2luYWxWYWx1ZSArIFwiKFwiICsgdGhpcy5wYXJhbWV0ZXJzLnRvU3RyaW5nKGZ1bmMpICsgXCIpXCI7XG4gIH1cblxuICBwdWJsaWMgc2V0VmFyaWFibGVzKHZhcmlhYmxlczogQXJyYXk8c3RyaW5nPikge1xuICAgIHRoaXMucGFyYW1ldGVycy5zZXRWYXJpYWJsZXModmFyaWFibGVzKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzUmVhZHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNSZWFkeVZhbHVlO1xuICB9XG4gIHB1YmxpYyBoYXNGdW5jdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgaGFzQXN5bmNGdW5jdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLmlzQXN5bmNGdW5jdGlvbih0aGlzLm9yaWdpbmFsVmFsdWUpO1xuICB9XG4gIHB1YmxpYyBhZGRUb0FzeW5jTGlzdChsaXN0OiBBcnJheTxGdW5jdGlvbk9wZXJhbmQ+KSB7XG4gICAgaWYgKHRoaXMuaGFzQXN5bmNGdW5jdGlvbigpKSB7XG4gICAgICBsaXN0LnB1c2godGhpcyk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBpc0NvbnRlbnRFcXVhbChvcDogT3BlcmFuZCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZPcCA9IDxGdW5jdGlvbk9wZXJhbmQ+b3A7XG4gICAgcmV0dXJuIGZPcC5vcmlnaW5hbFZhbHVlID09IHRoaXMub3JpZ2luYWxWYWx1ZSAmJiB0aGlzLmFyZU9wZXJhdG9yc0VxdWFscyhmT3AucGFyYW1ldGVycywgdGhpcy5wYXJhbWV0ZXJzKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgT3BlcmFuZE1ha2VyIHtcbiAgc3RhdGljIHRocm93SW52YWxpZE9wZXJhdG9yRXJyb3Iob3A6IHN0cmluZykge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgb3BlcmF0b3I6ICdcIiArIG9wICsgXCInXCIpO1xuICB9XG5cbiAgc3RhdGljIHNhZmVUb1N0cmluZyhvcGVyYW5kOiBPcGVyYW5kLCBmdW5jOiAob3A6IE9wZXJhbmQpID0+IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG9wZXJhbmQgPT0gbnVsbCA/IFwiXCIgOiBvcGVyYW5kLnRvU3RyaW5nKGZ1bmMpO1xuICB9XG5cbiAgc3RhdGljIHRvT3BlcmFuZFN0cmluZyh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoXG4gICAgICAhIXZhbHVlICYmXG4gICAgICAhT3BlcmFuZE1ha2VyLmlzTnVtZXJpYyh2YWx1ZSkgJiZcbiAgICAgICFPcGVyYW5kTWFrZXIuaXNCb29sZWFuVmFsdWUodmFsdWUpXG4gICAgKVxuICAgICAgdmFsdWUgPSBcIidcIiArIHZhbHVlICsgXCInXCI7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgc3RhdGljIGlzU3BhY2VTdHJpbmcoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFzdHIgJiYgIXN0ci5yZXBsYWNlKFwiIFwiLCBcIlwiKTtcbiAgfVxuXG4gIHN0YXRpYyBpc051bWVyaWModmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmIChcbiAgICAgICEhdmFsdWUgJiZcbiAgICAgICh2YWx1ZS5pbmRleE9mKFwiLVwiKSA+IC0xIHx8XG4gICAgICAgIHZhbHVlLmluZGV4T2YoXCIrXCIpID4gMSB8fFxuICAgICAgICB2YWx1ZS5pbmRleE9mKFwiKlwiKSA+IC0xIHx8XG4gICAgICAgIHZhbHVlLmluZGV4T2YoXCJeXCIpID4gLTEgfHxcbiAgICAgICAgdmFsdWUuaW5kZXhPZihcIi9cIikgPiAtMSB8fFxuICAgICAgICB2YWx1ZS5pbmRleE9mKFwiJVwiKSA+IC0xKVxuICAgIClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAoT3BlcmFuZE1ha2VyLmlzU3BhY2VTdHJpbmcodmFsdWUpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIEhlbHBlcnMuaXNOdW1iZXIodmFsdWUpO1xuICB9XG5cbiAgc3RhdGljIGlzQm9vbGVhblZhbHVlKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgISF2YWx1ZSAmJlxuICAgICAgKHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IFwidHJ1ZVwiIHx8IHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IFwiZmFsc2VcIilcbiAgICApO1xuICB9XG4gIHN0YXRpYyBjb3VudERlY2ltYWxzKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmIChIZWxwZXJzLmlzTnVtYmVyKHZhbHVlKSAmJiBNYXRoLmZsb29yKHZhbHVlKSAhPT0gdmFsdWUpIHtcbiAgICAgIGNvbnN0IHN0cnMgPSB2YWx1ZS50b1N0cmluZygpLnNwbGl0KFwiLlwiKTtcbiAgICAgIHJldHVybiBzdHJzLmxlbmd0aCA+IDEgJiYgc3Ryc1sxXS5sZW5ndGggfHwgMDtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgc3RhdGljIHBsdXNNaW51cyhhOiBudW1iZXIsIGI6IG51bWJlciwgcmVzOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGRpZ2l0c0EgPSBPcGVyYW5kTWFrZXIuY291bnREZWNpbWFscyhhKTtcbiAgICBjb25zdCBkaWdpdHNCID0gT3BlcmFuZE1ha2VyLmNvdW50RGVjaW1hbHMoYik7XG4gICAgaWYoZGlnaXRzQSA+IDAgfHwgZGlnaXRzQiA+IDApIHtcbiAgICAgIGNvbnN0IGRpZ2l0cyA9IE1hdGgubWF4KGRpZ2l0c0EsIGRpZ2l0c0IpO1xuICAgICAgcmVzID0gcGFyc2VGbG9hdChyZXMudG9GaXhlZChkaWdpdHMpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG5zdGF0aWMgdW5hcnlGdW5jdGlvbnM6IEhhc2hUYWJsZTxGdW5jdGlvbj4gPSB7XG4gIGVtcHR5OiBmdW5jdGlvbih2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEhlbHBlcnMuaXNWYWx1ZUVtcHR5KHZhbHVlKTtcbiAgfSxcbiAgbm90ZW1wdHk6IGZ1bmN0aW9uKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIU9wZXJhbmRNYWtlci51bmFyeUZ1bmN0aW9ucy5lbXB0eSh2YWx1ZSk7XG4gIH0sXG4gIG5lZ2F0ZTogZnVuY3Rpb24odmFsdWU6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXZhbHVlO1xuICB9LFxufTtcblxuICBzdGF0aWMgYmluYXJ5RnVuY3Rpb25zOiBIYXNoVGFibGU8RnVuY3Rpb24+ID0ge1xuICAgIGFyaXRobWV0aWNPcChvcGVyYXRvck5hbWU6IHN0cmluZykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKGE6IGFueSwgYjogYW55KTogYW55IHtcbiAgICAgICAgaWYgKEhlbHBlcnMuaXNWYWx1ZUVtcHR5KGEpICYmICFPcGVyYW5kTWFrZXIuaXNTcGFjZVN0cmluZyhhKSkge1xuICAgICAgICAgIGEgPSB0eXBlb2YgYiA9PT0gXCJzdHJpbmdcIiA/IFwiXCIgOiAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChIZWxwZXJzLmlzVmFsdWVFbXB0eShiKSAmJiAhT3BlcmFuZE1ha2VyLmlzU3BhY2VTdHJpbmcoYikpIHtcbiAgICAgICAgICBiID0gdHlwZW9mIGEgPT09IFwic3RyaW5nXCIgPyBcIlwiIDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjb25zdW1lciA9IE9wZXJhbmRNYWtlci5iaW5hcnlGdW5jdGlvbnNbb3BlcmF0b3JOYW1lXTtcbiAgICAgICAgcmV0dXJuIGNvbnN1bWVyID09IG51bGwgPyBudWxsIDogY29uc3VtZXIuY2FsbCh0aGlzLCBhLCBiKTtcbiAgICAgIH07XG4gICAgfSxcbiAgICBhbmQ6IGZ1bmN0aW9uKGE6IGJvb2xlYW4sIGI6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBhICYmIGI7XG4gICAgfSxcbiAgICBvcjogZnVuY3Rpb24oYTogYm9vbGVhbiwgYjogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIGEgfHwgYjtcbiAgICB9LFxuICAgIHBsdXM6IGZ1bmN0aW9uKGE6IGFueSwgYjogYW55KTogYW55IHtcbiAgICAgIHJldHVybiBIZWxwZXJzLmNvcnJlY3RBZnRlclBsdXNNaW5pcyhhLCBiLCBhICsgYik7XG4gICAgfSxcbiAgICBtaW51czogZnVuY3Rpb24oYTogbnVtYmVyLCBiOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIEhlbHBlcnMuY29ycmVjdEFmdGVyUGx1c01pbmlzKGEsIGIsIGEgLSBiKTtcbiAgICB9LFxuICAgIG11bDogZnVuY3Rpb24oYTogbnVtYmVyLCBiOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIEhlbHBlcnMuY29ycmVjdEFmdGVyTXVsdGlwbGUoYSwgYiwgYSAqIGIpO1xuICAgIH0sXG4gICAgZGl2OiBmdW5jdGlvbihhOiBudW1iZXIsIGI6IG51bWJlcik6IG51bWJlciB7XG4gICAgICBpZiAoIWIpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIGEgLyBiO1xuICAgIH0sXG4gICAgbW9kOiBmdW5jdGlvbihhOiBudW1iZXIsIGI6IG51bWJlcik6IG51bWJlciB7XG4gICAgICBpZiAoIWIpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIGEgJSBiO1xuICAgIH0sXG4gICAgcG93ZXI6IGZ1bmN0aW9uKGE6IG51bWJlciwgYjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiBNYXRoLnBvdyhhLCBiKTtcbiAgICB9LFxuICAgIGdyZWF0ZXI6IGZ1bmN0aW9uKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgaWYgKGxlZnQgPT0gbnVsbCB8fCByaWdodCA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gbGVmdCA+IHJpZ2h0O1xuICAgIH0sXG4gICAgbGVzczogZnVuY3Rpb24obGVmdDogYW55LCByaWdodDogYW55KTogYm9vbGVhbiB7XG4gICAgICBpZiAobGVmdCA9PSBudWxsIHx8IHJpZ2h0ID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiBsZWZ0IDwgcmlnaHQ7XG4gICAgfSxcbiAgICBncmVhdGVyb3JlcXVhbDogZnVuY3Rpb24obGVmdDogYW55LCByaWdodDogYW55KTogYm9vbGVhbiB7XG4gICAgICBpZiAoT3BlcmFuZE1ha2VyLmJpbmFyeUZ1bmN0aW9ucy5lcXVhbChsZWZ0LCByaWdodCkpIHJldHVybiB0cnVlO1xuICAgICAgcmV0dXJuIE9wZXJhbmRNYWtlci5iaW5hcnlGdW5jdGlvbnMuZ3JlYXRlcihsZWZ0LCByaWdodCk7XG4gICAgfSxcbiAgICBsZXNzb3JlcXVhbDogZnVuY3Rpb24obGVmdDogYW55LCByaWdodDogYW55KTogYm9vbGVhbiB7XG4gICAgICBpZiAoT3BlcmFuZE1ha2VyLmJpbmFyeUZ1bmN0aW9ucy5lcXVhbChsZWZ0LCByaWdodCkpIHJldHVybiB0cnVlO1xuICAgICAgcmV0dXJuIE9wZXJhbmRNYWtlci5iaW5hcnlGdW5jdGlvbnMubGVzcyhsZWZ0LCByaWdodCk7XG4gICAgfSxcbiAgICBlcXVhbDogZnVuY3Rpb24obGVmdDogYW55LCByaWdodDogYW55KTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gT3BlcmFuZE1ha2VyLmlzVHdvVmFsdWVFcXVhbHMobGVmdCwgcmlnaHQpO1xuICAgIH0sXG4gICAgbm90ZXF1YWw6IGZ1bmN0aW9uKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuICFPcGVyYW5kTWFrZXIuYmluYXJ5RnVuY3Rpb25zLmVxdWFsKGxlZnQsIHJpZ2h0KTtcbiAgICB9LFxuICAgIGNvbnRhaW5zOiBmdW5jdGlvbihsZWZ0OiBhbnksIHJpZ2h0OiBhbnkpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiBPcGVyYW5kTWFrZXIuYmluYXJ5RnVuY3Rpb25zLmNvbnRhaW5zQ29yZShsZWZ0LCByaWdodCwgdHJ1ZSk7XG4gICAgfSxcbiAgICBub3Rjb250YWluczogZnVuY3Rpb24obGVmdDogYW55LCByaWdodDogYW55KTogYm9vbGVhbiB7XG4gICAgICBpZiAoIWxlZnQgJiYgIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHJpZ2h0KSkgcmV0dXJuIHRydWU7XG4gICAgICByZXR1cm4gT3BlcmFuZE1ha2VyLmJpbmFyeUZ1bmN0aW9ucy5jb250YWluc0NvcmUobGVmdCwgcmlnaHQsIGZhbHNlKTtcbiAgICB9LFxuICAgIGFueW9mOiBmdW5jdGlvbihsZWZ0OiBhbnksIHJpZ2h0OiBhbnkpOiBib29sZWFuIHtcbiAgICAgIGlmIChIZWxwZXJzLmlzVmFsdWVFbXB0eShsZWZ0KSAmJiBIZWxwZXJzLmlzVmFsdWVFbXB0eShyaWdodCkpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgaWYgKFxuICAgICAgICBIZWxwZXJzLmlzVmFsdWVFbXB0eShsZWZ0KSB8fFxuICAgICAgICAoIUFycmF5LmlzQXJyYXkobGVmdCkgJiYgbGVmdC5sZW5ndGggPT09IDApXG4gICAgICApXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChIZWxwZXJzLmlzVmFsdWVFbXB0eShyaWdodCkpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGxlZnQpKVxuICAgICAgICByZXR1cm4gT3BlcmFuZE1ha2VyLmJpbmFyeUZ1bmN0aW9ucy5jb250YWlucyhyaWdodCwgbGVmdCk7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmlnaHQpKVxuICAgICAgICByZXR1cm4gT3BlcmFuZE1ha2VyLmJpbmFyeUZ1bmN0aW9ucy5jb250YWlucyhsZWZ0LCByaWdodCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJpZ2h0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChPcGVyYW5kTWFrZXIuYmluYXJ5RnVuY3Rpb25zLmNvbnRhaW5zKGxlZnQsIHJpZ2h0W2ldKSkgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBhbGxvZjogZnVuY3Rpb24obGVmdDogYW55LCByaWdodDogYW55KTogYm9vbGVhbiB7XG4gICAgICBpZiAoIWxlZnQgJiYgIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHJpZ2h0KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJpZ2h0KSlcbiAgICAgICAgcmV0dXJuIE9wZXJhbmRNYWtlci5iaW5hcnlGdW5jdGlvbnMuY29udGFpbnMobGVmdCwgcmlnaHQpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByaWdodC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIU9wZXJhbmRNYWtlci5iaW5hcnlGdW5jdGlvbnMuY29udGFpbnMobGVmdCwgcmlnaHRbaV0pKVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgY29udGFpbnNDb3JlOiBmdW5jdGlvbihsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIGlzQ29udGFpbnM6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgaWYgKCFsZWZ0ICYmIGxlZnQgIT09IDAgJiYgbGVmdCAhPT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmICghbGVmdC5sZW5ndGgpIHtcbiAgICAgICAgbGVmdCA9IGxlZnQudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKHR5cGVvZiByaWdodCA9PT0gXCJzdHJpbmdcIiB8fCByaWdodCBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgICAgICAgIGxlZnQgPSBsZWZ0LnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgcmlnaHQgPSByaWdodC50b1VwcGVyQ2FzZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGxlZnQgPT09IFwic3RyaW5nXCIgfHwgbGVmdCBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgICAgICBpZiAoIXJpZ2h0KSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJpZ2h0ID0gcmlnaHQudG9TdHJpbmcoKTtcbiAgICAgICAgdmFyIGZvdW5kID0gbGVmdC5pbmRleE9mKHJpZ2h0KSA+IC0xO1xuICAgICAgICByZXR1cm4gaXNDb250YWlucyA/IGZvdW5kIDogIWZvdW5kO1xuICAgICAgfVxuICAgICAgdmFyIHJpZ2h0QXJyYXkgPSBBcnJheS5pc0FycmF5KHJpZ2h0KSA/IHJpZ2h0IDogW3JpZ2h0XTtcbiAgICAgIGZvciAodmFyIHJJbmRleCA9IDA7IHJJbmRleCA8IHJpZ2h0QXJyYXkubGVuZ3RoOyBySW5kZXgrKykge1xuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIHJpZ2h0ID0gcmlnaHRBcnJheVtySW5kZXhdO1xuICAgICAgICBmb3IgKDsgaSA8IGxlZnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoT3BlcmFuZE1ha2VyLmlzVHdvVmFsdWVFcXVhbHMobGVmdFtpXSwgcmlnaHQpKSBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaSA9PSBsZWZ0Lmxlbmd0aCkgcmV0dXJuICFpc0NvbnRhaW5zO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlzQ29udGFpbnM7XG4gICAgfSxcbiAgfTtcblxuICBzdGF0aWMgaXNUd29WYWx1ZUVxdWFscyh4OiBhbnksIHk6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICh4ID09PSBcInVuZGVmaW5lZFwiKSB4ID0gdW5kZWZpbmVkO1xuICAgIGlmICh5ID09PSBcInVuZGVmaW5lZFwiKSB5ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMoeCwgeSwgdHJ1ZSk7XG4gIH1cblxuICBzdGF0aWMgb3BlcmF0b3JUb1N0cmluZyhvcGVyYXRvck5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IG9wU3RyID0gT3BlcmFuZE1ha2VyLnNpZ25zW29wZXJhdG9yTmFtZV07XG4gICAgcmV0dXJuIG9wU3RyID09IG51bGwgPyBvcGVyYXRvck5hbWUgOiBvcFN0cjtcbiAgfVxuXG4gIHN0YXRpYyBzaWduczogSGFzaFRhYmxlPHN0cmluZz4gPSB7XG4gICAgbGVzczogXCI8XCIsXG4gICAgbGVzc29yZXF1YWw6IFwiPD1cIixcbiAgICBncmVhdGVyOiBcIj5cIixcbiAgICBncmVhdGVyb3JlcXVhbDogXCI+PVwiLFxuICAgIGVxdWFsOiBcIj09XCIsXG4gICAgbm90ZXF1YWw6IFwiIT1cIixcbiAgICBwbHVzOiBcIitcIixcbiAgICBtaW51czogXCItXCIsXG4gICAgbXVsOiBcIipcIixcbiAgICBkaXY6IFwiL1wiLFxuICAgIGFuZDogXCJhbmRcIixcbiAgICBvcjogXCJvclwiLFxuICAgIHBvd2VyOiBcIl5cIixcbiAgICBtb2Q6IFwiJVwiLFxuICAgIG5lZ2F0ZTogXCIhXCIsXG4gIH07XG59XG4iLCJpbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgSUVsZW1lbnQsIElRdWVzdGlvbiB9IGZyb20gXCIuL2Jhc2UtaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgUGFuZWxNb2RlbCB9IGZyb20gXCIuL3BhbmVsXCI7XG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5cbi8qKlxuICogVGhlIGZsb3cgcGFuZWwgb2JqZWN0LiBJdCBpcyBhIGNvbnRhaW5lciB3aXRoIGZsb3cgbGF5b3V0IHdoZXJlIHlvdSBjYW4gbWl4IHF1ZXN0aW9ucyB3aXRoIG1hcmtkb3duIHRleHQuXG4gKlxuICovXG5leHBvcnQgY2xhc3MgRmxvd1BhbmVsTW9kZWwgZXh0ZW5kcyBQYW5lbE1vZGVsIHtcbiAgc3RhdGljIGNvbnRlbnRFbGVtZW50TmFtZVByZWZpeCA9IFwiZWxlbWVudDpcIjtcbiAgcHVibGljIGNvbnRlbnRDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XG4gIHB1YmxpYyBvbkdldEh0bWxGb3JRdWVzdGlvbjogKHF1ZXN0aW9uOiBRdWVzdGlvbikgPT4gc3RyaW5nO1xuICBwdWJsaWMgb25DdXN0b21IdG1sUHJvZHVjaW5nOiAoKSA9PiBzdHJpbmc7XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZyA9IFwiXCIpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwiY29udGVudFwiLCB0aGlzLCB0cnVlKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcImNvbnRlbnRcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5vbkNvbnRlbnRDaGFuZ2VkKCk7XG4gICAgfSk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJmbG93cGFuZWxcIjtcbiAgfVxuICBnZXRDaGlsZHJlbkxheW91dFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJmbG93XCI7XG4gIH1cbiAgb25TdXJ2ZXlMb2FkKCk6IGFueSB7XG4gICAgc3VwZXIub25TdXJ2ZXlMb2FkKCk7XG4gICAgdGhpcy5vbkNvbnRlbnRDaGFuZ2VkKCk7XG4gIH1cbiAgcHVibGljIGdldCBjb250ZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiY29udGVudFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbnRlbnQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImNvbnRlbnRcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGxvY0NvbnRlbnQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwiY29udGVudFwiKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGh0bWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaHRtbFwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGh0bWwodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJodG1sXCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uQ29udGVudENoYW5nZWQoKTogYW55IHtcbiAgICB2YXIgaHRtbCA9IFwiXCI7XG4gICAgaWYgKCEhdGhpcy5vbkN1c3RvbUh0bWxQcm9kdWNpbmcpIHtcbiAgICAgIGh0bWwgPSB0aGlzLm9uQ3VzdG9tSHRtbFByb2R1Y2luZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBodG1sID0gdGhpcy5wcm9kdWNlSHRtbCgpO1xuICAgIH1cbiAgICB0aGlzLmh0bWwgPSBodG1sO1xuICAgIGlmICghIXRoaXMuY29udGVudENoYW5nZWRDYWxsYmFjaykgdGhpcy5jb250ZW50Q2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgcHVibGljIHByb2R1Y2VIdG1sKCk6IHN0cmluZyB7XG4gICAgdmFyIGh0bWwgPSBbXTtcbiAgICAvL2NvbnRlbnRFbGVtZW50TmFtZVByZWZpeFxuICAgIHZhciByZWdFeCA9IC97KC4qPyhlbGVtZW50OilbXiRdLio/KX0vZztcbiAgICB2YXIgc3RyID0gdGhpcy5jb250ZW50O1xuICAgIHZhciBzdGFydEluZGV4ID0gMDtcbiAgICB2YXIgcmVzID0gbnVsbDtcbiAgICB3aGlsZSAoKHJlcyA9IHJlZ0V4LmV4ZWMoc3RyKSkgIT09IG51bGwpIHtcbiAgICAgIGlmIChyZXMuaW5kZXggPiBzdGFydEluZGV4KSB7XG4gICAgICAgIGh0bWwucHVzaChzdHIuc3Vic3RyKHN0YXJ0SW5kZXgsIHJlcy5pbmRleCAtIHN0YXJ0SW5kZXgpKTtcbiAgICAgICAgc3RhcnRJbmRleCA9IHJlcy5pbmRleDtcbiAgICAgIH1cbiAgICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25Gcm9tVGV4dChyZXNbMF0pO1xuICAgICAgaWYgKCEhcXVlc3Rpb24pIHtcbiAgICAgICAgaHRtbC5wdXNoKHRoaXMuZ2V0SHRtbEZvclF1ZXN0aW9uKHF1ZXN0aW9uKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBodG1sLnB1c2goXG4gICAgICAgICAgc3RyLnN1YnN0cihzdGFydEluZGV4LCByZXMuaW5kZXggKyByZXNbMF0ubGVuZ3RoIC0gc3RhcnRJbmRleClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHN0YXJ0SW5kZXggPSByZXMuaW5kZXggKyByZXNbMF0ubGVuZ3RoO1xuICAgIH1cbiAgICBpZiAoc3RhcnRJbmRleCA8IHN0ci5sZW5ndGgpIHtcbiAgICAgIGh0bWwucHVzaChzdHIuc3Vic3RyKHN0YXJ0SW5kZXgsIHN0ci5sZW5ndGggLSBzdGFydEluZGV4KSk7XG4gICAgfVxuICAgIHJldHVybiBodG1sLmpvaW4oXCJcIikucmVwbGFjZShuZXcgUmVnRXhwKFwiPGJyPlwiLCBcImdcIiksIFwiPGJyLz5cIik7XG4gIH1cbiAgcHVibGljIGdldFF1ZXN0aW9uRnJvbVRleHQoc3RyOiBzdHJpbmcpOiBRdWVzdGlvbiB7XG4gICAgc3RyID0gc3RyLnN1YnN0cigxLCBzdHIubGVuZ3RoIC0gMik7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoRmxvd1BhbmVsTW9kZWwuY29udGVudEVsZW1lbnROYW1lUHJlZml4LCBcIlwiKS50cmltKCk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UXVlc3Rpb25CeU5hbWUoc3RyKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0SHRtbEZvclF1ZXN0aW9uKHF1ZXN0aW9uOiBRdWVzdGlvbik6IHN0cmluZyB7XG4gICAgaWYgKCEhdGhpcy5vbkdldEh0bWxGb3JRdWVzdGlvbikgcmV0dXJuIHRoaXMub25HZXRIdG1sRm9yUXVlc3Rpb24ocXVlc3Rpb24pO1xuICAgIHJldHVybiBcIlwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXRRdWVzdGlvbkh0bWxJZChxdWVzdGlvbjogUXVlc3Rpb24pOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm5hbWUgKyBcIl9cIiArIHF1ZXN0aW9uLmlkO1xuICB9XG4gIHByb3RlY3RlZCBvbkFkZEVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQsIGluZGV4OiBudW1iZXIpIHtcbiAgICBzdXBlci5vbkFkZEVsZW1lbnQoZWxlbWVudCwgaW5kZXgpO1xuICAgIHRoaXMuYWRkRWxlbWVudFRvQ29udGVudChlbGVtZW50KTtcbiAgICBlbGVtZW50LnJlbmRlcldpZHRoID0gXCJcIjtcbiAgfVxuICBwcm90ZWN0ZWQgb25SZW1vdmVFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50KSB7XG4gICAgdmFyIHNlYXJjaFN0ciA9IHRoaXMuZ2V0RWxlbWVudENvbnRlbnRUZXh0KGVsZW1lbnQpO1xuICAgIHRoaXMuY29udGVudCA9IHRoaXMuY29udGVudC5yZXBsYWNlKHNlYXJjaFN0ciwgXCJcIik7XG4gICAgc3VwZXIub25SZW1vdmVFbGVtZW50KGVsZW1lbnQpO1xuICB9XG4gIGRyYWdEcm9wTW92ZUVsZW1lbnQoc3JjOiBJRWxlbWVudCwgdGFyZ2V0OiBJRWxlbWVudCwgdGFyZ2V0SW5kZXg6IG51bWJlcikge31cbiAgcHJpdmF0ZSBhZGRFbGVtZW50VG9Db250ZW50KGVsZW1lbnQ6IElFbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICB2YXIgdGV4dCA9IHRoaXMuZ2V0RWxlbWVudENvbnRlbnRUZXh0KGVsZW1lbnQpO1xuICAgIGlmICghdGhpcy5pbnNlcnRUZXh0QXRDdXJzb3IodGV4dCkpIHtcbiAgICAgIHRoaXMuY29udGVudCA9IHRoaXMuY29udGVudCArIHRleHQ7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgaW5zZXJ0VGV4dEF0Q3Vyc29yKHRleHQ6IHN0cmluZywgcHJldk5hbWU6IHN0cmluZyA9IG51bGwpOiBib29sZWFuIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5pc0Rlc2lnbk1vZGUgfHxcbiAgICAgIHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIiB8fFxuICAgICAgIXdpbmRvdy5nZXRTZWxlY3Rpb25cbiAgICApXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgbGV0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoc2VsLmdldFJhbmdlQXQgJiYgc2VsLnJhbmdlQ291bnQpIHtcbiAgICAgIGxldCByYW5nZSA9IHNlbC5nZXRSYW5nZUF0KDApO1xuICAgICAgcmFuZ2UuZGVsZXRlQ29udGVudHMoKTtcbiAgICAgIHJhbmdlLmluc2VydE5vZGUoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCkpO1xuICAgICAgdmFyIHNlbGYgPSA8YW55PnRoaXM7XG4gICAgICBpZiAoc2VsZi5nZXRDb250ZW50KSB7XG4gICAgICAgIHZhciBzdHIgPSBzZWxmLmdldENvbnRlbnQocHJldk5hbWUpO1xuICAgICAgICB0aGlzLmNvbnRlbnQgPSBzdHI7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXRFbGVtZW50Q29udGVudFRleHQoZWxlbWVudDogSUVsZW1lbnQpIHtcbiAgICByZXR1cm4gXCJ7XCIgKyBGbG93UGFuZWxNb2RlbC5jb250ZW50RWxlbWVudE5hbWVQcmVmaXggKyBlbGVtZW50Lm5hbWUgKyBcIn1cIjtcbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImZsb3dwYW5lbFwiLFxuICBbeyBuYW1lOiBcImNvbnRlbnQ6aHRtbFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jQ29udGVudFwiIH1dLFxuICBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBGbG93UGFuZWxNb2RlbCgpO1xuICB9LFxuICBcInBhbmVsXCJcbik7XG4iLCJpbXBvcnQgeyBIYXNoVGFibGUsIEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5cbmV4cG9ydCBjbGFzcyBGdW5jdGlvbkZhY3Rvcnkge1xuICBwdWJsaWMgc3RhdGljIEluc3RhbmNlOiBGdW5jdGlvbkZhY3RvcnkgPSBuZXcgRnVuY3Rpb25GYWN0b3J5KCk7XG4gIHByaXZhdGUgZnVuY3Rpb25IYXNoOiBIYXNoVGFibGU8KHBhcmFtczogYW55W10pID0+IGFueT4gPSB7fTtcbiAgcHJpdmF0ZSBpc0FzeW5jSGFzaDogSGFzaFRhYmxlPGJvb2xlYW4+ID0ge307XG5cbiAgcHVibGljIHJlZ2lzdGVyKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBmdW5jOiAocGFyYW1zOiBhbnlbXSkgPT4gYW55LFxuICAgIGlzQXN5bmM6IGJvb2xlYW4gPSBmYWxzZVxuICApOiB2b2lkIHtcbiAgICB0aGlzLmZ1bmN0aW9uSGFzaFtuYW1lXSA9IGZ1bmM7XG4gICAgaWYgKGlzQXN5bmMpIHRoaXMuaXNBc3luY0hhc2hbbmFtZV0gPSB0cnVlO1xuICB9XG4gIHB1YmxpYyB1bnJlZ2lzdGVyKG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGRlbGV0ZSB0aGlzLmZ1bmN0aW9uSGFzaFtuYW1lXTtcbiAgICBkZWxldGUgdGhpcy5pc0FzeW5jSGFzaFtuYW1lXTtcbiAgfVxuICBwdWJsaWMgaGFzRnVuY3Rpb24obmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5mdW5jdGlvbkhhc2hbbmFtZV07XG4gIH1cbiAgcHVibGljIGlzQXN5bmNGdW5jdGlvbihuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmlzQXN5bmNIYXNoW25hbWVdO1xuICB9XG5cbiAgcHVibGljIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuZnVuY3Rpb25IYXNoID0ge307XG4gIH1cbiAgcHVibGljIGdldEFsbCgpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMuZnVuY3Rpb25IYXNoKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0LnNvcnQoKTtcbiAgfVxuICBwdWJsaWMgcnVuKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBwYXJhbXM6IGFueVtdLFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+ID0gbnVsbFxuICApOiBhbnkge1xuICAgIHZhciBmdW5jID0gdGhpcy5mdW5jdGlvbkhhc2hbbmFtZV07XG4gICAgaWYgKCFmdW5jKSByZXR1cm4gbnVsbDtcbiAgICBsZXQgY2xhc3NSdW5uZXIgPSB7XG4gICAgICBmdW5jOiBmdW5jLFxuICAgIH07XG5cbiAgICBpZiAocHJvcGVydGllcykge1xuICAgICAgZm9yICh2YXIga2V5IGluIHByb3BlcnRpZXMpIHtcbiAgICAgICAgKDxhbnk+Y2xhc3NSdW5uZXIpW2tleV0gPSBwcm9wZXJ0aWVzW2tleV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjbGFzc1J1bm5lci5mdW5jKHBhcmFtcyk7XG4gIH1cbn1cblxuZXhwb3J0IHZhciByZWdpc3RlckZ1bmN0aW9uID0gRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyO1xuXG5mdW5jdGlvbiBnZXRQYXJhbXNBc0FycmF5KHZhbHVlOiBhbnksIGFycjogYW55W10pIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHJldHVybjtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgZ2V0UGFyYW1zQXNBcnJheSh2YWx1ZVtpXSwgYXJyKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKEhlbHBlcnMuaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpO1xuICAgIH1cbiAgICBhcnIucHVzaCh2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc3VtKHBhcmFtczogYW55W10pOiBhbnkge1xuICB2YXIgYXJyOiBhbnlbXSA9IFtdO1xuICBnZXRQYXJhbXNBc0FycmF5KHBhcmFtcywgYXJyKTtcbiAgdmFyIHJlcyA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgcmVzID0gSGVscGVycy5jb3JyZWN0QWZ0ZXJQbHVzTWluaXMocmVzLCBhcnJbaV0sIHJlcyArIGFycltpXSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcInN1bVwiLCBzdW0pO1xuXG5mdW5jdGlvbiBtaW5fbWF4KHBhcmFtczogYW55W10sIGlzTWluOiBib29sZWFuKTogYW55IHtcbiAgdmFyIGFycjogYW55W10gPSBbXTtcbiAgZ2V0UGFyYW1zQXNBcnJheShwYXJhbXMsIGFycik7XG4gIHZhciByZXMgPSB1bmRlZmluZWQ7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHJlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXMgPSBhcnJbaV07XG4gICAgfVxuICAgIGlmIChpc01pbikge1xuICAgICAgaWYgKHJlcyA+IGFycltpXSkgcmVzID0gYXJyW2ldO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocmVzIDwgYXJyW2ldKSByZXMgPSBhcnJbaV07XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIG1pbihwYXJhbXM6IGFueVtdKTogYW55IHtcbiAgcmV0dXJuIG1pbl9tYXgocGFyYW1zLCB0cnVlKTtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcIm1pblwiLCBtaW4pO1xuXG5mdW5jdGlvbiBtYXgocGFyYW1zOiBhbnlbXSk6IGFueSB7XG4gIHJldHVybiBtaW5fbWF4KHBhcmFtcywgZmFsc2UpO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwibWF4XCIsIG1heCk7XG5cbmZ1bmN0aW9uIGNvdW50KHBhcmFtczogYW55W10pOiBhbnkge1xuICB2YXIgYXJyOiBhbnlbXSA9IFtdO1xuICBnZXRQYXJhbXNBc0FycmF5KHBhcmFtcywgYXJyKTtcbiAgcmV0dXJuIGFyci5sZW5ndGg7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJjb3VudFwiLCBjb3VudCk7XG5cbmZ1bmN0aW9uIGF2ZyhwYXJhbXM6IGFueVtdKTogYW55IHtcbiAgdmFyIGFycjogYW55W10gPSBbXTtcbiAgZ2V0UGFyYW1zQXNBcnJheShwYXJhbXMsIGFycik7XG4gIGNvbnN0IHJlcyA9IHN1bShwYXJhbXMpO1xuICByZXR1cm4gYXJyLmxlbmd0aCA+IDAgPyByZXMgLyBhcnIubGVuZ3RoIDogMDtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcImF2Z1wiLCBhdmcpO1xuXG5mdW5jdGlvbiBnZXRJbkFycmF5UGFyYW1zKHBhcmFtczogYW55W10pOiBhbnkge1xuICBpZiAocGFyYW1zLmxlbmd0aCAhPSAyKSByZXR1cm4gbnVsbDtcbiAgdmFyIGFyciA9IHBhcmFtc1swXTtcbiAgaWYgKCFhcnIpIHJldHVybiBudWxsO1xuICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSAmJiAhQXJyYXkuaXNBcnJheShPYmplY3Qua2V5cyhhcnIpKSkgcmV0dXJuIG51bGw7XG4gIHZhciBuYW1lID0gcGFyYW1zWzFdO1xuICBpZiAodHlwZW9mIG5hbWUgIT09IFwic3RyaW5nXCIgJiYgIShuYW1lIGluc3RhbmNlb2YgU3RyaW5nKSkgcmV0dXJuIG51bGw7XG4gIHJldHVybiB7IGRhdGE6IGFyciwgbmFtZTogbmFtZSB9O1xufVxuXG5mdW5jdGlvbiBjYWxjSW5BcnJheShcbiAgcGFyYW1zOiBhbnlbXSxcbiAgZnVuYzogKHJlczogbnVtYmVyLCB2YWw6IG51bWJlcikgPT4gbnVtYmVyXG4pOiBhbnkge1xuICB2YXIgdiA9IGdldEluQXJyYXlQYXJhbXMocGFyYW1zKTtcbiAgaWYgKCF2KSByZXR1cm4gdW5kZWZpbmVkO1xuICB2YXIgcmVzID0gdW5kZWZpbmVkO1xuICBpZiAoQXJyYXkuaXNBcnJheSh2LmRhdGEpKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2LmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gdi5kYXRhW2ldO1xuICAgICAgaWYgKCEhaXRlbSAmJiBpdGVtWzxzdHJpbmc+di5uYW1lXSkge1xuICAgICAgICByZXMgPSBmdW5jKHJlcywgaXRlbVs8c3RyaW5nPnYubmFtZV0pO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gdi5kYXRhKSB7XG4gICAgICB2YXIgaXRlbSA9IHYuZGF0YVtrZXldO1xuICAgICAgaWYgKCEhaXRlbSAmJiBpdGVtWzxzdHJpbmc+di5uYW1lXSkge1xuICAgICAgICByZXMgPSBmdW5jKHJlcywgaXRlbVs8c3RyaW5nPnYubmFtZV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBzdW1JbkFycmF5KHBhcmFtczogYW55W10pOiBhbnkge1xuICB2YXIgcmVzID0gY2FsY0luQXJyYXkocGFyYW1zLCBmdW5jdGlvbihyZXM6IG51bWJlciwgdmFsOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmIChyZXMgPT0gdW5kZWZpbmVkKSByZXMgPSAwO1xuICAgIGlmKHZhbCA9PSB1bmRlZmluZWQgfHwgdmFsID09IG51bGwpIHJldHVybiByZXM7XG4gICAgcmV0dXJuIEhlbHBlcnMuY29ycmVjdEFmdGVyUGx1c01pbmlzKHJlcywgdmFsLCByZXMgKyB2YWwpO1xuICB9KTtcbiAgcmV0dXJuIHJlcyAhPT0gdW5kZWZpbmVkID8gcmVzIDogMDtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcInN1bUluQXJyYXlcIiwgc3VtSW5BcnJheSk7XG5cbmZ1bmN0aW9uIG1pbkluQXJyYXkocGFyYW1zOiBhbnlbXSk6IGFueSB7XG4gIHJldHVybiBjYWxjSW5BcnJheShwYXJhbXMsIGZ1bmN0aW9uKHJlczogbnVtYmVyLCB2YWw6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHJlcyA9PSB1bmRlZmluZWQpIHJldHVybiB2YWw7XG4gICAgcmV0dXJuIHJlcyA8IHZhbCA/IHJlcyA6IHZhbDtcbiAgfSk7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJtaW5JbkFycmF5XCIsIG1pbkluQXJyYXkpO1xuXG5mdW5jdGlvbiBtYXhJbkFycmF5KHBhcmFtczogYW55W10pOiBhbnkge1xuICByZXR1cm4gY2FsY0luQXJyYXkocGFyYW1zLCBmdW5jdGlvbihyZXM6IG51bWJlciwgdmFsOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmIChyZXMgPT0gdW5kZWZpbmVkKSByZXR1cm4gdmFsO1xuICAgIHJldHVybiByZXMgPiB2YWwgPyByZXMgOiB2YWw7XG4gIH0pO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwibWF4SW5BcnJheVwiLCBtYXhJbkFycmF5KTtcblxuZnVuY3Rpb24gY291bnRJbkFycmF5KHBhcmFtczogYW55W10pOiBhbnkge1xuICB2YXIgcmVzID0gY2FsY0luQXJyYXkocGFyYW1zLCBmdW5jdGlvbihyZXM6IG51bWJlciwgdmFsOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmIChyZXMgPT0gdW5kZWZpbmVkKSByZXMgPSAwO1xuICAgIHJldHVybiByZXMgKyAxO1xuICB9KTtcbiAgcmV0dXJuIHJlcyAhPT0gdW5kZWZpbmVkID8gcmVzIDogMDtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcImNvdW50SW5BcnJheVwiLCBjb3VudEluQXJyYXkpO1xuXG5mdW5jdGlvbiBhdmdJbkFycmF5KHBhcmFtczogYW55W10pOiBhbnkge1xuICB2YXIgY291bnQgPSBjb3VudEluQXJyYXkocGFyYW1zKTtcbiAgaWYgKGNvdW50ID09IDApIHJldHVybiAwO1xuICByZXR1cm4gc3VtSW5BcnJheShwYXJhbXMpIC8gY291bnQ7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJhdmdJbkFycmF5XCIsIGF2Z0luQXJyYXkpO1xuXG5mdW5jdGlvbiBpaWYocGFyYW1zOiBhbnlbXSk6IGFueSB7XG4gIGlmICghcGFyYW1zICYmIHBhcmFtcy5sZW5ndGggIT09IDMpIHJldHVybiBcIlwiO1xuICByZXR1cm4gcGFyYW1zWzBdID8gcGFyYW1zWzFdIDogcGFyYW1zWzJdO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwiaWlmXCIsIGlpZik7XG5cbmZ1bmN0aW9uIGdldERhdGUocGFyYW1zOiBhbnlbXSk6IGFueSB7XG4gIGlmICghcGFyYW1zICYmIHBhcmFtcy5sZW5ndGggPCAxKSByZXR1cm4gbnVsbDtcbiAgaWYgKCFwYXJhbXNbMF0pIHJldHVybiBudWxsO1xuICByZXR1cm4gbmV3IERhdGUocGFyYW1zWzBdKTtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcImdldERhdGVcIiwgZ2V0RGF0ZSk7XG5cbmZ1bmN0aW9uIGFnZShwYXJhbXM6IGFueVtdKTogYW55IHtcbiAgaWYgKCFwYXJhbXMgJiYgcGFyYW1zLmxlbmd0aCA8IDEpIHJldHVybiBudWxsO1xuICBpZiAoIXBhcmFtc1swXSkgcmV0dXJuIG51bGw7XG4gIHZhciBiaXJ0aERhdGUgPSBuZXcgRGF0ZShwYXJhbXNbMF0pO1xuICB2YXIgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICB2YXIgYWdlID0gdG9kYXkuZ2V0RnVsbFllYXIoKSAtIGJpcnRoRGF0ZS5nZXRGdWxsWWVhcigpO1xuICB2YXIgbSA9IHRvZGF5LmdldE1vbnRoKCkgLSBiaXJ0aERhdGUuZ2V0TW9udGgoKTtcbiAgaWYgKG0gPCAwIHx8IChtID09PSAwICYmIHRvZGF5LmdldERhdGUoKSA8IGJpcnRoRGF0ZS5nZXREYXRlKCkpKSB7XG4gICAgYWdlIC09IGFnZSA+IDAgPyAxIDogMDtcbiAgfVxuICByZXR1cm4gYWdlO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwiYWdlXCIsIGFnZSk7XG5cbmZ1bmN0aW9uIGlzQ29udGFpbmVyUmVhZHlDb3JlKGNvbnRhaW5lcjogYW55KTogYm9vbGVhbiB7XG4gIGlmICghY29udGFpbmVyKSByZXR1cm4gZmFsc2U7XG4gIHZhciBxdWVzdGlvbnMgPSBjb250YWluZXIucXVlc3Rpb25zO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChxdWVzdGlvbnNbaV0uaGFzRXJyb3JzKGZhbHNlKSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gaXNDb250YWluZXJSZWFkeShwYXJhbXM6IGFueVtdKTogYW55IHtcbiAgaWYgKCFwYXJhbXMgJiYgcGFyYW1zLmxlbmd0aCA8IDEpIHJldHVybiBmYWxzZTtcbiAgaWYgKCFwYXJhbXNbMF0gfHwgIXRoaXMuc3VydmV5KSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IG5hbWUgPSBwYXJhbXNbMF07XG4gIGxldCBjb250YWluZXIgPSB0aGlzLnN1cnZleS5nZXRQYWdlQnlOYW1lKG5hbWUpO1xuICBpZiAoIWNvbnRhaW5lcikgY29udGFpbmVyID0gdGhpcy5zdXJ2ZXkuZ2V0UGFuZWxCeU5hbWUobmFtZSk7XG4gIGlmKCFjb250YWluZXIpIHtcbiAgICBjb25zdCBxdWVzdGlvbiA9IHRoaXMuc3VydmV5LmdldFF1ZXN0aW9uQnlOYW1lKG5hbWUpO1xuICAgIGlmKCFxdWVzdGlvbiB8fCAhQXJyYXkuaXNBcnJheShxdWVzdGlvbi5wYW5lbHMpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYocGFyYW1zLmxlbmd0aCA+IDEpIHtcbiAgICAgIGlmKHBhcmFtc1sxXSA8IHF1ZXN0aW9uLnBhbmVscy5sZW5ndGgpIHtcbiAgICAgICAgY29udGFpbmVyID0gcXVlc3Rpb24ucGFuZWxzW3BhcmFtc1sxXV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBxdWVzdGlvbi5wYW5lbHMubGVuZ3RoOyBpICsrKSB7XG4gICAgICAgIGlmKCFpc0NvbnRhaW5lclJlYWR5Q29yZShxdWVzdGlvbi5wYW5lbHNbaV0pKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGlzQ29udGFpbmVyUmVhZHlDb3JlKGNvbnRhaW5lcik7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJpc0NvbnRhaW5lclJlYWR5XCIsIGlzQ29udGFpbmVyUmVhZHkpO1xuXG5mdW5jdGlvbiBpc0Rpc3BsYXlNb2RlKCkge1xuICByZXR1cm4gdGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuaXNEaXNwbGF5TW9kZTtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcImlzRGlzcGxheU1vZGVcIiwgaXNEaXNwbGF5TW9kZSk7XG5cbmZ1bmN0aW9uIGN1cnJlbnREYXRlKCkge1xuICByZXR1cm4gbmV3IERhdGUoKTtcbn1cbkZ1bmN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlcihcImN1cnJlbnREYXRlXCIsIGN1cnJlbnREYXRlKTtcblxuZnVuY3Rpb24gdG9kYXkocGFyYW1zOiBhbnlbXSkge1xuICB2YXIgcmVzID0gbmV3IERhdGUoKTtcbiAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW1zKSAmJiBwYXJhbXMubGVuZ3RoID09IDEpIHtcbiAgICByZXMuc2V0RGF0ZShyZXMuZ2V0RGF0ZSgpICsgcGFyYW1zWzBdKTtcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwidG9kYXlcIiwgdG9kYXkpO1xuXG5mdW5jdGlvbiBnZXRZZWFyKHBhcmFtczogYW55W10pIHtcbiAgaWYocGFyYW1zLmxlbmd0aCAhPT0gMSB8fCAhcGFyYW1zWzBdKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gbmV3IERhdGUocGFyYW1zWzBdKS5nZXRGdWxsWWVhcigpO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwiZ2V0WWVhclwiLCBnZXRZZWFyKTtcblxuZnVuY3Rpb24gY3VycmVudFllYXIoKSB7XG4gIHJldHVybiBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XG59XG5GdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXIoXCJjdXJyZW50WWVhclwiLCBjdXJyZW50WWVhcik7XG5cbmZ1bmN0aW9uIGRpZmZEYXlzKHBhcmFtczogYW55W10pIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHBhcmFtcykgfHwgcGFyYW1zLmxlbmd0aCAhPT0gMikgcmV0dXJuIDA7XG4gIGlmICghcGFyYW1zWzBdIHx8ICFwYXJhbXNbMV0pIHJldHVybiAwO1xuICBjb25zdCBkYXRlMTogYW55ID0gbmV3IERhdGUocGFyYW1zWzBdKTtcbiAgY29uc3QgZGF0ZTI6IGFueSA9IG5ldyBEYXRlKHBhcmFtc1sxXSk7XG4gIGNvbnN0IGRpZmZUaW1lID0gTWF0aC5hYnMoZGF0ZTIgLSBkYXRlMSk7XG4gIHJldHVybiBNYXRoLmNlaWwoZGlmZlRpbWUgLyAoMTAwMCAqIDYwICogNjAgKiAyNCkpO1xufVxuRnVuY3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyKFwiZGlmZkRheXNcIiwgZGlmZkRheXMpO1xuIiwiaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhhc2hUYWJsZTxUPiB7XG4gIFtrZXk6IHN0cmluZ106IFQ7XG59XG5cbmV4cG9ydCBjbGFzcyBIZWxwZXJzIHtcbiAgLyoqXG4gICAqIEEgc3RhdGljIG1ldGhvZHMgdGhhdCByZXR1cm5zIHRydWUgaWYgYSB2YWx1ZSB1bmRlZmluZWQsIG51bGwsIGVtcHR5IHN0cmluZyBvciBlbXB0eSBhcnJheS5cbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlzVmFsdWVFbXB0eSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKCEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcbiAgICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHZhbHVlW2tleV0pKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuICF2YWx1ZSAmJiB2YWx1ZSAhPT0gMCAmJiB2YWx1ZSAhPT0gZmFsc2U7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBpc0FycmF5Q29udGFpbnNFcXVhbCh4OiBhbnksIHk6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh4KSB8fCAhQXJyYXkuaXNBcnJheSh5KSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh4Lmxlbmd0aCAhPT0geS5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHgubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBqID0gMDtcbiAgICAgIGZvciAoOyBqIDwgeS5sZW5ndGg7IGorKykge1xuICAgICAgICBpZiAoSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKHhbaV0sIHlbal0pKSBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChqID09PSB5Lmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGlzQXJyYXlzRXF1YWwoXG4gICAgeDogYW55LFxuICAgIHk6IGFueSxcbiAgICBpZ25vcmVPcmRlcjogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGNhc2VTZW5zaXRpdmU/OiBib29sZWFuLFxuICAgIHRyaW1TdHJpbmdzPyA6IGJvb2xlYW5cbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHgpIHx8ICFBcnJheS5pc0FycmF5KHkpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHgubGVuZ3RoICE9PSB5Lmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChpZ25vcmVPcmRlcikge1xuICAgICAgdmFyIHhTb3J0ZWQgPSBbXTtcbiAgICAgIHZhciB5U29ydGVkID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgeFNvcnRlZC5wdXNoKHhbaV0pO1xuICAgICAgICB5U29ydGVkLnB1c2goeVtpXSk7XG4gICAgICB9XG4gICAgICB4U29ydGVkLnNvcnQoKTtcbiAgICAgIHlTb3J0ZWQuc29ydCgpO1xuICAgICAgeCA9IHhTb3J0ZWQ7XG4gICAgICB5ID0geVNvcnRlZDtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIUhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyh4W2ldLCB5W2ldLCBpZ25vcmVPcmRlciwgY2FzZVNlbnNpdGl2ZSwgdHJpbVN0cmluZ3MpKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgaXNUd29WYWx1ZUVxdWFscyhcbiAgICB4OiBhbnksXG4gICAgeTogYW55LFxuICAgIGlnbm9yZU9yZGVyOiBib29sZWFuID0gZmFsc2UsXG4gICAgY2FzZVNlbnNpdGl2ZT86IGJvb2xlYW4sXG4gICAgdHJpbVN0cmluZ3M/IDogYm9vbGVhblxuICApOiBib29sZWFuIHtcbiAgICBpZiAoeCA9PT0geSkgcmV0dXJuIHRydWU7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh4KSAmJiB4Lmxlbmd0aCA9PT0gMCAmJiB0eXBlb2YgeSA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHkpICYmIHkubGVuZ3RoID09PSAwICYmIHR5cGVvZiB4ID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgaWYgKCh4ID09PSB1bmRlZmluZWQgfHwgeCA9PT0gbnVsbCkgJiYgeSA9PT0gXCJcIikgcmV0dXJuIHRydWU7XG4gICAgaWYgKCh5ID09PSB1bmRlZmluZWQgfHwgeSA9PT0gbnVsbCkgJiYgeCA9PT0gXCJcIikgcmV0dXJuIHRydWU7XG4gICAgaWYodHJpbVN0cmluZ3MgPT09IHVuZGVmaW5lZCkgdHJpbVN0cmluZ3MgPSBzZXR0aW5ncy5jb21wYXJhdG9yLnRyaW1TdHJpbmdzO1xuICAgIGlmKGNhc2VTZW5zaXRpdmUgPT09IHVuZGVmaW5lZCkgY2FzZVNlbnNpdGl2ZSA9IHNldHRpbmdzLmNvbXBhcmF0b3IuY2FzZVNlbnNpdGl2ZTtcblxuICAgIGlmKHR5cGVvZiB4ID09PSBcInN0cmluZ1wiICYmIHR5cGVvZiB5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBpZih0cmltU3RyaW5ncykge1xuICAgICAgICB4ID0geC50cmltKCk7XG4gICAgICAgIHkgPSB5LnRyaW0oKTtcbiAgICAgIH1cbiAgICAgIGlmKCFjYXNlU2Vuc2l0aXZlKSB7XG4gICAgICAgIHggPSB4LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHkgPSB5LnRvTG93ZXJDYXNlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4geCA9PT0geTtcbiAgICB9XG5cbiAgICBpZiAoSGVscGVycy5pc0NvbnZlcnRpYmxlVG9OdW1iZXIoeCkgJiYgSGVscGVycy5pc0NvbnZlcnRpYmxlVG9OdW1iZXIoeSkpIHtcbiAgICAgIGlmIChwYXJzZUludCh4KSA9PT0gcGFyc2VJbnQoeSkgJiYgcGFyc2VGbG9hdCh4KSA9PT0gcGFyc2VGbG9hdCh5KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHgpICYmIEhlbHBlcnMuaXNWYWx1ZUVtcHR5KHkpKSB8fFxuICAgICAgKEhlbHBlcnMuaXNWYWx1ZUVtcHR5KHgpICYmICFIZWxwZXJzLmlzVmFsdWVFbXB0eSh5KSlcbiAgICApXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCh4ID09PSB0cnVlIHx8IHggPT09IGZhbHNlKSAmJiB0eXBlb2YgeSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4geC50b1N0cmluZygpID09PSB5LnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgfVxuICAgIGlmICgoeSA9PT0gdHJ1ZSB8fCB5ID09PSBmYWxzZSkgJiYgdHlwZW9mIHggPT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIHkudG9TdHJpbmcoKSA9PT0geC50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICBpZiAoISh4IGluc3RhbmNlb2YgT2JqZWN0KSAmJiAhKHkgaW5zdGFuY2VvZiBPYmplY3QpKSByZXR1cm4geCA9PSB5O1xuICAgIGlmICghKHggaW5zdGFuY2VvZiBPYmplY3QpIHx8ICEoeSBpbnN0YW5jZW9mIE9iamVjdCkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoeFtcImVxdWFsc1wiXSkgcmV0dXJuIHguZXF1YWxzKHkpO1xuICAgIGlmICghIXgudG9KU09OICYmICEheS50b0pTT04gJiYgISF4LmdldFR5cGUgJiYgISF5LmdldFR5cGUpIHtcbiAgICAgIGlmICh4LmlzRGlwb3NlZCB8fCB5LmlzRGlwb3NlZCkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKHguZ2V0VHlwZSgpICE9PSB5LmdldFR5cGUoKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKCEheC5uYW1lICYmIHgubmFtZSAhPT0geS5uYW1lKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gdGhpcy5pc1R3b1ZhbHVlRXF1YWxzKHgudG9KU09OKCksIHkudG9KU09OKCksIGlnbm9yZU9yZGVyLCBjYXNlU2Vuc2l0aXZlLCB0cmltU3RyaW5ncyk7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KHgpICYmIEFycmF5LmlzQXJyYXkoeSkpXG4gICAgICByZXR1cm4gSGVscGVycy5pc0FycmF5c0VxdWFsKHgsIHksIGlnbm9yZU9yZGVyLCBjYXNlU2Vuc2l0aXZlLCB0cmltU3RyaW5ncyk7XG5cbiAgICBmb3IgKHZhciBwIGluIHgpIHtcbiAgICAgIGlmICgheC5oYXNPd25Qcm9wZXJ0eShwKSkgY29udGludWU7XG4gICAgICBpZiAoIXkuaGFzT3duUHJvcGVydHkocCkpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmICh4W3BdID09PSB5W3BdKSBjb250aW51ZTtcbiAgICAgIGlmICh0eXBlb2YgeFtwXSAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKCF0aGlzLmlzVHdvVmFsdWVFcXVhbHMoeFtwXSwgeVtwXSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChwIGluIHkpIHtcbiAgICAgIGlmICh5Lmhhc093blByb3BlcnR5KHApICYmICF4Lmhhc093blByb3BlcnR5KHApKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgcmFuZG9taXplQXJyYXk8VD4oYXJyYXk6IEFycmF5PFQ+KTogQXJyYXk8VD4ge1xuICAgIGZvciAodmFyIGkgPSBhcnJheS5sZW5ndGggLSAxOyBpID4gMDsgaS0tKSB7XG4gICAgICB2YXIgaiA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChpICsgMSkpO1xuICAgICAgdmFyIHRlbXAgPSBhcnJheVtpXTtcbiAgICAgIGFycmF5W2ldID0gYXJyYXlbal07XG4gICAgICBhcnJheVtqXSA9IHRlbXA7XG4gICAgfVxuICAgIHJldHVybiBhcnJheTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGdldFVuYmluZFZhbHVlKHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICghIXZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAvL2RvIG5vdCByZXR1cm4gdGhlIHNhbWUgb2JqZWN0IGluc3RhbmNlISEhXG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBjcmVhdGVDb3B5KG9iajogYW55KSB7XG4gICAgdmFyIHJlczogYW55ID0ge307XG4gICAgaWYgKCFvYmopIHJldHVybiByZXM7XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgcmVzW2tleV0gPSBvYmpba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgc3RhdGljIGlzQ29udmVydGlibGVUb051bWJlcih2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgICAhQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiZcbiAgICAgICFpc05hTih2YWx1ZSlcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgaXNOdW1iZXIodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiB2YWx1ZSA9PSBcInN0cmluZ1wiICYmXG4gICAgICAhIXZhbHVlICYmXG4gICAgICB2YWx1ZS5pbmRleE9mKFwiMHhcIikgPT0gMCAmJlxuICAgICAgdmFsdWUubGVuZ3RoID4gMzJcbiAgICApXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICFpc05hTihwYXJzZUZsb2F0KHZhbHVlKSkgJiYgaXNGaW5pdGUodmFsdWUpO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZ2V0TWF4TGVuZ3RoKG1heExlbmd0aDogbnVtYmVyLCBzdXJ2ZXlMZW5ndGg6IG51bWJlcik6IGFueSB7XG4gICAgaWYgKG1heExlbmd0aCA8IDApIHtcbiAgICAgIG1heExlbmd0aCA9IHN1cnZleUxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIG1heExlbmd0aCA+IDAgPyBtYXhMZW5ndGggOiBudWxsO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZ2V0TnVtYmVyQnlJbmRleChpbmRleDogbnVtYmVyLCBzdGFydEluZGV4U3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChpbmRleCA8IDApIHJldHVybiBcIlwiO1xuICAgIHZhciBzdGFydEluZGV4ID0gMTtcbiAgICB2YXIgcHJlZml4ID0gXCJcIjtcbiAgICB2YXIgcG9zdGZpeCA9IFwiLlwiO1xuICAgIHZhciBpc051bWVyaWMgPSB0cnVlO1xuICAgIHZhciBzdHJJbmRleCA9IFwiQVwiO1xuICAgIHZhciBzdHIgPSBcIlwiO1xuICAgIGlmICghIXN0YXJ0SW5kZXhTdHIpIHtcbiAgICAgIHN0ciA9IHN0YXJ0SW5kZXhTdHI7XG4gICAgICB2YXIgaW5kID0gc3RyLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgaGFzRGlnaXQgPSBmYWxzZTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChIZWxwZXJzLmlzQ2hhckRpZ2l0KHN0cltpXSkpIHtcbiAgICAgICAgICBoYXNEaWdpdCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBjaGVja0xldHRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIChoYXNEaWdpdCAmJiAhSGVscGVycy5pc0NoYXJEaWdpdChzdHJbaW5kXSkpIHx8XG4gICAgICAgICAgSGVscGVycy5pc0NoYXJOb3RMZXR0ZXJBbmREaWdpdChzdHJbaW5kXSlcbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgICB3aGlsZSAoaW5kID49IDAgJiYgY2hlY2tMZXR0ZXIoKSkgaW5kLS07XG4gICAgICB2YXIgbmV3UG9zdGZpeCA9IFwiXCI7XG4gICAgICBpZiAoaW5kIDwgc3RyLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgbmV3UG9zdGZpeCA9IHN0ci5zdWJzdHIoaW5kICsgMSk7XG4gICAgICAgIHN0ciA9IHN0ci5zdWJzdHIoMCwgaW5kICsgMSk7XG4gICAgICB9XG4gICAgICBpbmQgPSBzdHIubGVuZ3RoIC0gMTtcbiAgICAgIHdoaWxlIChpbmQgPj0gMCkge1xuICAgICAgICBpZiAoY2hlY2tMZXR0ZXIoKSkgYnJlYWs7XG4gICAgICAgIGluZC0tO1xuICAgICAgICBpZiAoIWhhc0RpZ2l0KSBicmVhaztcbiAgICAgIH1cbiAgICAgIHN0ckluZGV4ID0gc3RyLnN1YnN0cihpbmQgKyAxKTtcbiAgICAgIHByZWZpeCA9IHN0ci5zdWJzdHIoMCwgaW5kICsgMSk7XG4gICAgICBpZiAocGFyc2VJbnQoc3RySW5kZXgpKSBzdGFydEluZGV4ID0gcGFyc2VJbnQoc3RySW5kZXgpO1xuICAgICAgZWxzZSBpZiAoc3RySW5kZXgubGVuZ3RoID09IDEpIGlzTnVtZXJpYyA9IGZhbHNlO1xuICAgICAgaWYgKCEhbmV3UG9zdGZpeCB8fCAhIXByZWZpeCkge1xuICAgICAgICBwb3N0Zml4ID0gbmV3UG9zdGZpeDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzTnVtZXJpYykgcmV0dXJuIHByZWZpeCArIChpbmRleCArIHN0YXJ0SW5kZXgpLnRvU3RyaW5nKCkgKyBwb3N0Zml4O1xuICAgIHJldHVybiAoXG4gICAgICBwcmVmaXggKyBTdHJpbmcuZnJvbUNoYXJDb2RlKHN0ckluZGV4LmNoYXJDb2RlQXQoMCkgKyBpbmRleCkgKyBwb3N0Zml4XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGlzQ2hhck5vdExldHRlckFuZERpZ2l0KGNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gY2gudG9VcHBlckNhc2UoKSA9PSBjaC50b0xvd2VyQ2FzZSgpICYmICFIZWxwZXJzLmlzQ2hhckRpZ2l0KGNoKTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGlzQ2hhckRpZ2l0KGNoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gY2ggPj0gXCIwXCIgJiYgY2ggPD0gXCI5XCI7XG4gIH1cbiAgcHJpdmF0ZSBzdGF0aWMgY291bnREZWNpbWFscyh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAoSGVscGVycy5pc051bWJlcih2YWx1ZSkgJiYgTWF0aC5mbG9vcih2YWx1ZSkgIT09IHZhbHVlKSB7XG4gICAgICBjb25zdCBzdHJzID0gdmFsdWUudG9TdHJpbmcoKS5zcGxpdChcIi5cIik7XG4gICAgICByZXR1cm4gc3Rycy5sZW5ndGggPiAxICYmIHN0cnNbMV0ubGVuZ3RoIHx8IDA7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgY29ycmVjdEFmdGVyUGx1c01pbmlzKGE6IG51bWJlciwgYjogbnVtYmVyLCByZXM6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgZGlnaXRzQSA9IEhlbHBlcnMuY291bnREZWNpbWFscyhhKTtcbiAgICBjb25zdCBkaWdpdHNCID0gSGVscGVycy5jb3VudERlY2ltYWxzKGIpO1xuICAgIGlmKGRpZ2l0c0EgPiAwIHx8IGRpZ2l0c0IgPiAwKSB7XG4gICAgICBjb25zdCBkaWdpdHMgPSBNYXRoLm1heChkaWdpdHNBLCBkaWdpdHNCKTtcbiAgICAgIHJlcyA9IHBhcnNlRmxvYXQocmVzLnRvRml4ZWQoZGlnaXRzKSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBjb3JyZWN0QWZ0ZXJNdWx0aXBsZShhOiBudW1iZXIsIGI6IG51bWJlciwgcmVzOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGRpZ2l0cyA9IEhlbHBlcnMuY291bnREZWNpbWFscyhhKSArIEhlbHBlcnMuY291bnREZWNpbWFscyhiKTtcbiAgICBpZihkaWdpdHMgPiAwKSB7XG4gICAgICByZXMgPSBwYXJzZUZsb2F0KHJlcy50b0ZpeGVkKGRpZ2l0cykpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG59XG5pZiAoISg8YW55PlN0cmluZy5wcm90b3R5cGUpW1wiZm9ybWF0XCJdKSB7XG4gICg8YW55PlN0cmluZy5wcm90b3R5cGUpW1wiZm9ybWF0XCJdID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgcmV0dXJuIHRoaXMucmVwbGFjZSgveyhcXGQrKX0vZywgZnVuY3Rpb24obWF0Y2g6IGFueSwgbnVtYmVyOiBhbnkpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgYXJnc1tudW1iZXJdICE9IFwidW5kZWZpbmVkXCIgPyBhcmdzW251bWJlcl0gOiBtYXRjaDtcbiAgICB9KTtcbiAgfTtcbn1cbiIsImltcG9ydCB7IElMb2NhbGl6YWJsZU93bmVyLCBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQge1xuICBKc29uT2JqZWN0LFxuICBKc29uT2JqZWN0UHJvcGVydHksXG4gIFNlcmlhbGl6ZXIsXG4gIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLFxufSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgQ29uZGl0aW9uUnVubmVyIH0gZnJvbSBcIi4vY29uZGl0aW9uc1wiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7IElTdXJ2ZXkgfSBmcm9tIFwiLi9iYXNlLWludGVyZmFjZXNcIjtcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcblxuLyoqXG4gKiBBcnJheSBvZiBJdGVtVmFsdWUgaXMgdXNlZCBpbiBjaGVja294LCBkcm9wZG93biBhbmQgcmFkaW9ncm91cCBjaG9pY2VzLCBtYXRyaXggY29sdW1ucyBhbmQgcm93cy5cbiAqIEl0IGhhcyB0d28gbWFpbiBwcm9wZXJ0aWVzOiB2YWx1ZSBhbmQgdGV4dC4gSWYgdGV4dCBpcyBlbXB0eSwgdmFsdWUgaXMgdXNlZCBmb3IgZGlzcGxheWluZy5cbiAqIFRoZSB0ZXh0IHByb3BlcnR5IGlzIGxvY2FsaXphYmxlIGFuZCBzdXBwb3J0IG1hcmtkb3duLlxuICovXG5leHBvcnQgY2xhc3MgSXRlbVZhbHVlIGV4dGVuZHMgQmFzZSB7XG4gIFtpbmRleDogc3RyaW5nXTogYW55O1xuICBwdWJsaWMgc3RhdGljIGdldCBTZXBhcmF0b3IoKSB7XG4gICAgcmV0dXJuIHNldHRpbmdzLml0ZW1WYWx1ZVNlcGFyYXRvcjtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHNldCBTZXBhcmF0b3IodmFsOiBzdHJpbmcpIHtcbiAgICBzZXR0aW5ncy5pdGVtVmFsdWVTZXBhcmF0b3IgPSB2YWw7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBjcmVhdGVBcnJheShsb2NPd25lcjogSUxvY2FsaXphYmxlT3duZXIpOiBBcnJheTxJdGVtVmFsdWU+IHtcbiAgICB2YXIgaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4gPSBbXTtcbiAgICBJdGVtVmFsdWUuc2V0dXBBcnJheShpdGVtcywgbG9jT3duZXIpO1xuICAgIHJldHVybiBpdGVtcztcbiAgfVxuICBwdWJsaWMgc3RhdGljIHNldHVwQXJyYXkoXG4gICAgaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4sXG4gICAgbG9jT3duZXI6IElMb2NhbGl6YWJsZU93bmVyXG4gICkge1xuICAgIGl0ZW1zLnB1c2ggPSBmdW5jdGlvbih2YWx1ZSk6IG51bWJlciB7XG4gICAgICB2YXIgcmVzdWx0ID0gQXJyYXkucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLCB2YWx1ZSk7XG4gICAgICB2YWx1ZS5sb2NPd25lciA9IGxvY093bmVyO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIGl0ZW1zLnVuc2hpZnQgPSBmdW5jdGlvbih2YWx1ZSk6IG51bWJlciB7XG4gICAgICB2YXIgcmVzdWx0ID0gQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuY2FsbCh0aGlzLCB2YWx1ZSk7XG4gICAgICB2YWx1ZS5sb2NPd25lciA9IGxvY093bmVyO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIGl0ZW1zLnNwbGljZSA9IGZ1bmN0aW9uKFxuICAgICAgc3RhcnQ/OiBudW1iZXIsXG4gICAgICBkZWxldGVDb3VudD86IG51bWJlcixcbiAgICAgIC4uLml0ZW1zOiBJdGVtVmFsdWVbXVxuICAgICk6IEl0ZW1WYWx1ZVtdIHtcbiAgICAgIHZhciByZXN1bHQgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIHN0YXJ0LFxuICAgICAgICBkZWxldGVDb3VudCxcbiAgICAgICAgLi4uaXRlbXNcbiAgICAgICk7XG4gICAgICBpZiAoIWl0ZW1zKSBpdGVtcyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpdGVtc1tpXS5sb2NPd25lciA9IGxvY093bmVyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgc2V0RGF0YShpdGVtczogQXJyYXk8SXRlbVZhbHVlPiwgdmFsdWVzOiBBcnJheTxhbnk+KSB7XG4gICAgaXRlbXMubGVuZ3RoID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gdmFsdWVzW2ldO1xuICAgICAgdmFyIGl0ZW06IEl0ZW1WYWx1ZTtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUuZ2V0VHlwZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGl0ZW0gPSBTZXJpYWxpemVyLmNyZWF0ZUNsYXNzKHZhbHVlLmdldFR5cGUoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtID0gbmV3IEl0ZW1WYWx1ZShudWxsKTtcbiAgICAgIH1cbiAgICAgIGl0ZW0uc2V0RGF0YSh2YWx1ZSk7XG4gICAgICBpZiAoISF2YWx1ZS5vcmlnaW5hbEl0ZW0pIHtcbiAgICAgICAgaXRlbS5vcmlnaW5hbEl0ZW0gPSB2YWx1ZS5vcmlnaW5hbEl0ZW07XG4gICAgICB9XG4gICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgc3RhdGljIGdldERhdGEoaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4pOiBhbnkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHQucHVzaChpdGVtc1tpXS5nZXREYXRhKCkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZ2V0SXRlbUJ5VmFsdWUoaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4sIHZhbDogYW55KTogSXRlbVZhbHVlIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaXRlbXMpKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCB2YWxJc0VtcHR5ID0gSGVscGVycy5pc1ZhbHVlRW1wdHkodmFsKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodmFsSXNFbXB0eSAmJiBIZWxwZXJzLmlzVmFsdWVFbXB0eShpdGVtc1tpXS52YWx1ZSkpIHJldHVybiBpdGVtc1tpXTtcbiAgICAgIGlmIChIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMoaXRlbXNbaV0udmFsdWUsIHZhbCwgZmFsc2UsIHRydWUsIGZhbHNlKSkgcmV0dXJuIGl0ZW1zW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGdldFRleHRPckh0bWxCeVZhbHVlKFxuICAgIGl0ZW1zOiBBcnJheTxJdGVtVmFsdWU+LFxuICAgIHZhbDogYW55XG4gICk6IHN0cmluZyB7XG4gICAgdmFyIGl0ZW0gPSBJdGVtVmFsdWUuZ2V0SXRlbUJ5VmFsdWUoaXRlbXMsIHZhbCk7XG4gICAgcmV0dXJuIGl0ZW0gIT09IG51bGwgPyBpdGVtLmxvY1RleHQudGV4dE9ySHRtbCA6IFwiXCI7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBsb2NTdHJzQ2hhbmdlZChpdGVtczogQXJyYXk8SXRlbVZhbHVlPikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGl0ZW1zW2ldLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBzdGF0aWMgcnVuQ29uZGl0aW9uc0Zvckl0ZW1zKFxuICAgIGl0ZW1zOiBBcnJheTxJdGVtVmFsdWU+LFxuICAgIGZpbHRlcmVkSXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4sXG4gICAgcnVubmVyOiBDb25kaXRpb25SdW5uZXIsXG4gICAgdmFsdWVzOiBhbnksXG4gICAgcHJvcGVydGllczogYW55LFxuICAgIHVzZUl0ZW1FeHByZXNzaW9uOiBib29sZWFuID0gdHJ1ZVxuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gSXRlbVZhbHVlLnJ1bkNvbmRpdGlvbnNGb3JJdGVtc0NvcmUoXG4gICAgICBpdGVtcyxcbiAgICAgIGZpbHRlcmVkSXRlbXMsXG4gICAgICBydW5uZXIsXG4gICAgICB2YWx1ZXMsXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgICAgdHJ1ZSxcbiAgICAgIHVzZUl0ZW1FeHByZXNzaW9uXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHJ1bkVuYWJsZWRDb25kaXRpb25zRm9ySXRlbXMoXG4gICAgaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4sXG4gICAgcnVubmVyOiBDb25kaXRpb25SdW5uZXIsXG4gICAgdmFsdWVzOiBhbnksXG4gICAgcHJvcGVydGllczogYW55LFxuICAgIG9uSXRlbUNhbGxCYWNrPzogKGl0ZW06IEl0ZW1WYWx1ZSkgPT4gYm9vbGVhblxuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gSXRlbVZhbHVlLnJ1bkNvbmRpdGlvbnNGb3JJdGVtc0NvcmUoXG4gICAgICBpdGVtcyxcbiAgICAgIG51bGwsXG4gICAgICBydW5uZXIsXG4gICAgICB2YWx1ZXMsXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgICAgZmFsc2UsXG4gICAgICB0cnVlLFxuICAgICAgb25JdGVtQ2FsbEJhY2tcbiAgICApO1xuICB9XG4gIHByaXZhdGUgc3RhdGljIHJ1bkNvbmRpdGlvbnNGb3JJdGVtc0NvcmUoXG4gICAgaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4sXG4gICAgZmlsdGVyZWRJdGVtczogQXJyYXk8SXRlbVZhbHVlPixcbiAgICBydW5uZXI6IENvbmRpdGlvblJ1bm5lcixcbiAgICB2YWx1ZXM6IGFueSxcbiAgICBwcm9wZXJ0aWVzOiBhbnksXG4gICAgaXNWaXNpYmxlOiBib29sZWFuLFxuICAgIHVzZUl0ZW1FeHByZXNzaW9uOiBib29sZWFuID0gdHJ1ZSxcbiAgICBvbkl0ZW1DYWxsQmFjaz86IChpdGVtOiBJdGVtVmFsdWUpID0+IGJvb2xlYW5cbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCF2YWx1ZXMpIHtcbiAgICAgIHZhbHVlcyA9IHt9O1xuICAgIH1cbiAgICB2YXIgaXRlbVZhbHVlID0gdmFsdWVzW1wiaXRlbVwiXTtcbiAgICB2YXIgY2hvaWNlVmFsdWUgPSB2YWx1ZXNbXCJjaG9pY2VcIl07XG4gICAgdmFyIGhhc0NoYW5kZWQgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IGl0ZW1zW2ldO1xuICAgICAgdmFsdWVzW1wiaXRlbVwiXSA9IGl0ZW0udmFsdWU7XG4gICAgICB2YWx1ZXNbXCJjaG9pY2VcIl0gPSBpdGVtLnZhbHVlO1xuICAgICAgdmFyIGl0ZW1SdW5uZXIgPVxuICAgICAgICB1c2VJdGVtRXhwcmVzc2lvbiAmJiAhIWl0ZW0uZ2V0Q29uZGl0aW9uUnVubmVyXG4gICAgICAgICAgPyBpdGVtLmdldENvbmRpdGlvblJ1bm5lcihpc1Zpc2libGUpXG4gICAgICAgICAgOiBmYWxzZTtcbiAgICAgIGlmICghaXRlbVJ1bm5lcikge1xuICAgICAgICBpdGVtUnVubmVyID0gcnVubmVyO1xuICAgICAgfVxuICAgICAgdmFyIG5ld1ZhbHVlID0gdHJ1ZTtcbiAgICAgIGlmIChpdGVtUnVubmVyKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gaXRlbVJ1bm5lci5ydW4odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICAgIH1cbiAgICAgIGlmIChuZXdWYWx1ZSAmJiAhIW9uSXRlbUNhbGxCYWNrKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gb25JdGVtQ2FsbEJhY2soaXRlbSk7XG4gICAgICB9XG4gICAgICBpZiAoISFmaWx0ZXJlZEl0ZW1zICYmIG5ld1ZhbHVlKSB7XG4gICAgICAgIGZpbHRlcmVkSXRlbXMucHVzaChpdGVtKTtcbiAgICAgIH1cbiAgICAgIHZhciBvbGRWYWx1ZSA9IGlzVmlzaWJsZSA/IGl0ZW0uaXNWaXNpYmxlIDogaXRlbS5pc0VuYWJsZWQ7XG4gICAgICBpZiAobmV3VmFsdWUgIT0gb2xkVmFsdWUpIHtcbiAgICAgICAgaGFzQ2hhbmRlZCA9IHRydWU7XG4gICAgICAgIGlmIChpc1Zpc2libGUpIHtcbiAgICAgICAgICBpZiAoISFpdGVtLnNldElzVmlzaWJsZSkgaXRlbS5zZXRJc1Zpc2libGUobmV3VmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghIWl0ZW0uc2V0SXNFbmFibGVkKSBpdGVtLnNldElzRW5hYmxlZChuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGl0ZW1WYWx1ZSkge1xuICAgICAgdmFsdWVzW1wiaXRlbVwiXSA9IGl0ZW1WYWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHZhbHVlc1tcIml0ZW1cIl07XG4gICAgfVxuICAgIGlmIChjaG9pY2VWYWx1ZSkge1xuICAgICAgdmFsdWVzW1wiY2hvaWNlXCJdID0gY2hvaWNlVmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZXNbXCJjaG9pY2VcIl07XG4gICAgfVxuICAgIHJldHVybiBoYXNDaGFuZGVkO1xuICB9XG4gIHB1YmxpYyBvd25lclByb3BlcnR5TmFtZTogc3RyaW5nID0gXCJcIjtcbiAgLy9wcml2YXRlIGl0ZW1WYWx1ZTogYW55O1xuICBwcml2YXRlIGxvY1RleHRWYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XG4gIHByaXZhdGUgaXNWaXNpYmxlVmFsdWU6IGJvb2xlYW4gPSB0cnVlO1xuICBwcml2YXRlIHZpc2libGVDb25kaXRpb25SdW5uZXI6IENvbmRpdGlvblJ1bm5lcjtcbiAgcHJpdmF0ZSBlbmFibGVDb25kaXRpb25SdW5uZXI6IENvbmRpdGlvblJ1bm5lcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICB2YWx1ZTogYW55LFxuICAgIHRleHQ6IHN0cmluZyA9IG51bGwsXG4gICAgcHJvdGVjdGVkIHR5cGVOYW1lID0gXCJpdGVtdmFsdWVcIlxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubG9jVGV4dFZhbHVlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKG51bGwsIHRydWUpO1xuICAgIHRoaXMubG9jVGV4dFZhbHVlLm9uU3RyQ2hhbmdlZCA9IChvbGRWYWx1ZTogc3RyaW5nLCBuZXdWYWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAobmV3VmFsdWUgPT0gdGhpcy52YWx1ZSkge1xuICAgICAgICBuZXdWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHRoaXMucHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJ0ZXh0XCIsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgfTtcbiAgICB0aGlzLmxvY1RleHRWYWx1ZS5vbkdldFRleHRDYWxsYmFjayA9ICh0eHQpID0+IHtcbiAgICAgIHJldHVybiB0eHRcbiAgICAgICAgPyB0eHRcbiAgICAgICAgOiAhSGVscGVycy5pc1ZhbHVlRW1wdHkodGhpcy52YWx1ZSlcbiAgICAgICAgICA/IHRoaXMudmFsdWUudG9TdHJpbmcoKVxuICAgICAgICAgIDogbnVsbDtcbiAgICB9O1xuICAgIGlmICh0ZXh0KSB0aGlzLmxvY1RleHQudGV4dCA9IHRleHQ7XG4gICAgaWYgKCEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aGlzLnNldERhdGEodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuICAgIGlmICh0aGlzLmdldFR5cGUoKSAhPSBcIml0ZW12YWx1ZVwiKSB7XG4gICAgICBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5jcmVhdGVQcm9wZXJ0aWVzKHRoaXMpO1xuICAgIH1cbiAgICB0aGlzLm9uQ3JlYXRpbmcoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNyZWF0aW5nKCk6IGFueSB7fVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMudHlwZU5hbWUgPyB0aGlzLnR5cGVOYW1lIDogXCJpdGVtdmFsdWVcIjtcbiAgfVxuICBwdWJsaWMgZ2V0U3VydmV5KGxpdmU6IGJvb2xlYW4gPSBmYWxzZSk6IElTdXJ2ZXkge1xuICAgIHJldHVybiAhIXRoaXMubG9jT3duZXIgJiYgISEoPGFueT50aGlzLmxvY093bmVyKVtcImdldFN1cnZleVwiXVxuICAgICAgPyAoPGFueT50aGlzLmxvY093bmVyKS5nZXRTdXJ2ZXkoKVxuICAgICAgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXRMb2NhbGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHRoaXMubG9jVGV4dCAmJiB0aGlzLmxvY1RleHQubG9jYWxlKSB8fCBcIlwiO1xuICB9XG4gIHB1YmxpYyBnZXQgbG9jVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubG9jVGV4dFZhbHVlO1xuICB9XG4gIHNldExvY1RleHQobG9jVGV4dDogTG9jYWxpemFibGVTdHJpbmcpIHtcbiAgICB0aGlzLmxvY1RleHRWYWx1ZSA9IGxvY1RleHQ7XG4gIH1cbiAgcHVibGljIGdldCBsb2NPd25lcigpOiBJTG9jYWxpemFibGVPd25lciB7XG4gICAgcmV0dXJuIHRoaXMubG9jVGV4dC5vd25lcjtcbiAgfVxuICBwdWJsaWMgc2V0IGxvY093bmVyKHZhbHVlOiBJTG9jYWxpemFibGVPd25lcikge1xuICAgIHRoaXMubG9jVGV4dC5vd25lciA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidmFsdWVcIik7XG4gIH1cbiAgcHVibGljIHNldCB2YWx1ZShuZXdWYWx1ZTogYW55KSB7XG4gICAgdmFyIHRleHQ6IHN0cmluZyA9IHVuZGVmaW5lZDtcbiAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KG5ld1ZhbHVlKSkge1xuICAgICAgdmFyIHN0cjogc3RyaW5nID0gbmV3VmFsdWUudG9TdHJpbmcoKTtcbiAgICAgIHZhciBpbmRleCA9IHN0ci5pbmRleE9mKHNldHRpbmdzLml0ZW1WYWx1ZVNlcGFyYXRvcik7XG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICBuZXdWYWx1ZSA9IHN0ci5zbGljZSgwLCBpbmRleCk7XG4gICAgICAgIHRleHQgPSBzdHIuc2xpY2UoaW5kZXggKyAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmFsdWVcIiwgbmV3VmFsdWUpO1xuICAgIGlmICghIXRleHQpIHtcbiAgICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgaGFzVGV4dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sb2NUZXh0LnB1cmVUZXh0ID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXQgcHVyZVRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5sb2NUZXh0LnB1cmVUZXh0O1xuICB9XG4gIHB1YmxpYyBzZXQgcHVyZVRleHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRleHQgPSB2YWw7XG4gIH1cbiAgcHVibGljIGdldCB0ZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubG9jVGV4dC5jYWxjdWxhdGVkVGV4dDsgLy9UT0RPOiBpdCB3aWxsIGJlIGNvcnJlY3QgdG8gdXNlIHRoaXMubG9jVGV4dC50ZXh0LCBob3dldmVyIGl0IHdvdWxkIHJlcXVpcmUgYSBsb3Qgb2YgcmV3cml0aW5nIGluIENyZWF0b3JcbiAgfVxuICBwdWJsaWMgc2V0IHRleHQobmV3VGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5sb2NUZXh0LnRleHQgPSBuZXdUZXh0O1xuICB9XG4gIHB1YmxpYyBnZXQgY2FsY3VsYXRlZFRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMubG9jVGV4dC5jYWxjdWxhdGVkVGV4dDtcbiAgfVxuICBwdWJsaWMgZ2V0RGF0YSgpOiBhbnkge1xuICAgIHZhciBqc29uID0gdGhpcy50b0pTT04oKTtcbiAgICBpZiAoISFqc29uW1widmFsdWVcIl0gJiYgISFqc29uW1widmFsdWVcIl1bXCJwb3NcIl0pIHtcbiAgICAgIGRlbGV0ZSBqc29uW1widmFsdWVcIl1bXCJwb3NcIl07XG4gICAgfVxuICAgIGlmICghc2V0dGluZ3MuaXRlbVZhbHVlQWx3YXlzU2VyaWFsaXplQXNPYmplY3QgJiYgT2JqZWN0LmtleXMoanNvbikubGVuZ3RoID09IDEgJiYgIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KGpzb25bXCJ2YWx1ZVwiXSkpXG4gICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICByZXR1cm4ganNvbjtcbiAgfVxuICBwdWJsaWMgdG9KU09OKCk6IGFueSB7XG4gICAgdmFyIHJlcyA9IHt9O1xuICAgIHZhciBwcm9wZXJ0aWVzID0gU2VyaWFsaXplci5nZXRQcm9wZXJ0aWVzKHRoaXMuZ2V0VHlwZSgpKTtcbiAgICBpZiAoIXByb3BlcnRpZXMgfHwgcHJvcGVydGllcy5sZW5ndGggPT0gMCkge1xuICAgICAgcHJvcGVydGllcyA9IFNlcmlhbGl6ZXIuZ2V0UHJvcGVydGllcyhcIml0ZW12YWx1ZVwiKTtcbiAgICB9XG4gICAgdmFyIGpzb09iaiA9IG5ldyBKc29uT2JqZWN0KCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBqc29PYmoudmFsdWVUb0pzb24odGhpcywgcmVzLCBwcm9wZXJ0aWVzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgc2V0RGF0YSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKEhlbHBlcnMuaXNWYWx1ZUVtcHR5KHZhbHVlKSkgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgdmFsdWUudmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHZhciBqc29uID0gdmFsdWU7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlLnRvSlNPTiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGpzb24gPSAoPEJhc2U+dmFsdWUpLnRvSlNPTigpO1xuICAgICAgfVxuICAgICAgbmV3IEpzb25PYmplY3QoKS50b09iamVjdChqc29uLCB0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICB0aGlzLmxvY1RleHQuc3RyQ2hhbmdlZCgpO1xuICB9XG4gIHB1YmxpYyBnZXQgdmlzaWJsZUlmKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVJZlwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHZpc2libGVJZih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVJZlwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgZW5hYmxlSWYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZW5hYmxlSWZcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBlbmFibGVJZih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImVuYWJsZUlmXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBpc1Zpc2libGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWaXNpYmxlVmFsdWU7XG4gIH1cbiAgcHVibGljIHNldElzVmlzaWJsZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzVmlzaWJsZVZhbHVlID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNFbmFibGVkKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc0VuYWJsZWRcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldElzRW5hYmxlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc0VuYWJsZWRcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgYWRkVXNlZExvY2FsZXMobG9jYWxlczogQXJyYXk8c3RyaW5nPikge1xuICAgIHRoaXMuQWRkTG9jU3RyaW5nVG9Vc2VkTG9jYWxlcyh0aGlzLmxvY1RleHRWYWx1ZSwgbG9jYWxlcyk7XG4gIH1cbiAgcHVibGljIGxvY1N0cnNDaGFuZ2VkKCkge1xuICAgIHN1cGVyLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgdGhpcy5sb2NUZXh0LnN0ckNoYW5nZWQoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lOiBzdHJpbmcsIG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBpZiAobmFtZSA9PT0gXCJ2YWx1ZVwiICYmICF0aGlzLmhhc1RleHQpIHtcbiAgICAgIHRoaXMubG9jVGV4dC5vbkNoYW5nZWQoKTtcbiAgICB9XG4gICAgdmFyIGZ1bmNOYW1lID0gXCJpdGVtVmFsdWVQcm9wZXJ0eUNoYW5nZWRcIjtcbiAgICBpZiAoIXRoaXMubG9jT3duZXIgfHwgISg8YW55PnRoaXMubG9jT3duZXIpW2Z1bmNOYW1lXSkgcmV0dXJuO1xuICAgICg8YW55PnRoaXMubG9jT3duZXIpW2Z1bmNOYW1lXSh0aGlzLCBuYW1lLCBvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRDb25kaXRpb25SdW5uZXIoaXNWaXNpYmxlOiBib29sZWFuKSB7XG4gICAgaWYgKGlzVmlzaWJsZSkgcmV0dXJuIHRoaXMuZ2V0VmlzaWJsZUNvbmRpdGlvblJ1bm5lcigpO1xuICAgIHJldHVybiB0aGlzLmdldEVuYWJsZUNvbmRpdGlvblJ1bm5lcigpO1xuICB9XG4gIHByaXZhdGUgZ2V0VmlzaWJsZUNvbmRpdGlvblJ1bm5lcigpOiBDb25kaXRpb25SdW5uZXIge1xuICAgIGlmICghdGhpcy52aXNpYmxlSWYpIHJldHVybiBudWxsO1xuICAgIGlmICghdGhpcy52aXNpYmxlQ29uZGl0aW9uUnVubmVyKVxuICAgICAgdGhpcy52aXNpYmxlQ29uZGl0aW9uUnVubmVyID0gbmV3IENvbmRpdGlvblJ1bm5lcih0aGlzLnZpc2libGVJZik7XG4gICAgdGhpcy52aXNpYmxlQ29uZGl0aW9uUnVubmVyLmV4cHJlc3Npb24gPSB0aGlzLnZpc2libGVJZjtcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlQ29uZGl0aW9uUnVubmVyO1xuICB9XG4gIHByaXZhdGUgZ2V0RW5hYmxlQ29uZGl0aW9uUnVubmVyKCk6IENvbmRpdGlvblJ1bm5lciB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZUlmKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoIXRoaXMuZW5hYmxlQ29uZGl0aW9uUnVubmVyKVxuICAgICAgdGhpcy5lbmFibGVDb25kaXRpb25SdW5uZXIgPSBuZXcgQ29uZGl0aW9uUnVubmVyKHRoaXMuZW5hYmxlSWYpO1xuICAgIHRoaXMuZW5hYmxlQ29uZGl0aW9uUnVubmVyLmV4cHJlc3Npb24gPSB0aGlzLmVuYWJsZUlmO1xuICAgIHJldHVybiB0aGlzLmVuYWJsZUNvbmRpdGlvblJ1bm5lcjtcbiAgfVxuICBwdWJsaWMgb3JpZ2luYWxJdGVtOiBhbnk7XG59XG5cbkJhc2UuY3JlYXRlSXRlbVZhbHVlID0gZnVuY3Rpb24oc291cmNlOiBhbnksIHR5cGU/OiBzdHJpbmcpOiBhbnkge1xuICB2YXIgaXRlbSA9IG51bGw7XG4gIGlmICghIXR5cGUpIHtcbiAgICBpdGVtID0gSnNvbk9iamVjdC5tZXRhRGF0YS5jcmVhdGVDbGFzcyh0eXBlLCB7fSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHNvdXJjZS5nZXRUeXBlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBpdGVtID0gbmV3IEl0ZW1WYWx1ZShudWxsLCB1bmRlZmluZWQsIHNvdXJjZS5nZXRUeXBlKCkpO1xuICB9IGVsc2Uge1xuICAgIGl0ZW0gPSBuZXcgSXRlbVZhbHVlKG51bGwpO1xuICB9XG4gIGl0ZW0uc2V0RGF0YShzb3VyY2UpO1xuICByZXR1cm4gaXRlbTtcbn07XG5CYXNlLml0ZW1WYWx1ZUxvY1N0ckNoYW5nZWQgPSBmdW5jdGlvbihhcnI6IEFycmF5PGFueT4pOiB2b2lkIHtcbiAgSXRlbVZhbHVlLmxvY1N0cnNDaGFuZ2VkKGFycik7XG59O1xuSnNvbk9iamVjdFByb3BlcnR5LmdldEl0ZW1WYWx1ZXNEZWZhdWx0VmFsdWUgPSBmdW5jdGlvbih2YWw6IGFueSk6IGFueSB7XG4gIHZhciByZXMgPSBuZXcgQXJyYXk8SXRlbVZhbHVlPigpO1xuICBJdGVtVmFsdWUuc2V0RGF0YShyZXMsIHZhbCB8fCBbXSk7XG4gIHJldHVybiByZXM7XG59O1xuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcIml0ZW12YWx1ZVwiLFxuICBbXG4gICAgXCIhdmFsdWVcIixcbiAgICB7XG4gICAgICBuYW1lOiBcInRleHRcIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NUZXh0XCIsXG4gICAgfSxcbiAgICB7IG5hbWU6IFwidmlzaWJsZUlmOmNvbmRpdGlvblwiLCBzaG93TW9kZTogXCJmb3JtXCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImVuYWJsZUlmOmNvbmRpdGlvblwiLFxuICAgICAgc2hvd01vZGU6IFwiZm9ybVwiLFxuICAgICAgdmlzaWJsZUlmOiAob2JqOiBJdGVtVmFsdWUpOiBib29sZWFuID0+IHtcbiAgICAgICAgcmV0dXJuICFvYmogfHwgb2JqLm93bmVyUHJvcGVydHlOYW1lICE9PSBcInJhdGVWYWx1ZXNcIjtcbiAgICAgIH0sXG4gICAgfSxcbiAgXSxcbiAgKHZhbHVlOiBhbnkpID0+IG5ldyBJdGVtVmFsdWUodmFsdWUpXG4pO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xuaW1wb3J0IHsgQmFzZSwgQ29tcHV0ZWRVcGRhdGVyIH0gZnJvbSBcIi4vYmFzZVwiO1xuaW1wb3J0IHsgSGVscGVycywgSGFzaFRhYmxlIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQcm9wZXJ0eURlY29yYXRvck9wdGlvbnMge1xuICBkZWZhdWx0VmFsdWU/OiBhbnk7XG4gIGRlZmF1bHRTb3VyY2U/OiBzdHJpbmc7XG4gIGxvY2FsaXphYmxlPzpcbiAgfCB7IG5hbWU/OiBzdHJpbmcsIG9uR2V0VGV4dENhbGxiYWNrPzogKHN0cjogc3RyaW5nKSA9PiBzdHJpbmcsIGRlZmF1bHRTdHI/OiBzdHJpbmcgfVxuICB8IGJvb2xlYW47XG4gIG9uU2V0PzogKHZhbDogYW55LCB0YXJnZXQ6IGFueSkgPT4gdm9pZDtcbn1cblxuZnVuY3Rpb24gZW5zdXJlTG9jU3RyaW5nKFxuICB0YXJnZXQ6IGFueSxcbiAgb3B0aW9uczogSVByb3BlcnR5RGVjb3JhdG9yT3B0aW9ucyxcbiAga2V5OiBzdHJpbmdcbikge1xuICBsZXQgbG9jU3RyaW5nID0gdGFyZ2V0LmdldExvY2FsaXphYmxlU3RyaW5nKGtleSk7XG4gIGlmICghbG9jU3RyaW5nKSB7XG4gICAgbG9jU3RyaW5nID0gdGFyZ2V0LmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKGtleSwgdGFyZ2V0LCB0cnVlKTtcbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygb3B0aW9ucy5sb2NhbGl6YWJsZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgdHlwZW9mIG9wdGlvbnMubG9jYWxpemFibGUub25HZXRUZXh0Q2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIlxuICAgICkge1xuICAgICAgbG9jU3RyaW5nLm9uR2V0VGV4dENhbGxiYWNrID0gb3B0aW9ucy5sb2NhbGl6YWJsZS5vbkdldFRleHRDYWxsYmFjaztcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGdldExvY1N0cmluZ1ZhbHVlKFxuICB0YXJnZXQ6IGFueSxcbiAgb3B0aW9uczogSVByb3BlcnR5RGVjb3JhdG9yT3B0aW9ucyxcbiAga2V5OiBzdHJpbmdcbikge1xuICBlbnN1cmVMb2NTdHJpbmcodGFyZ2V0LCBvcHRpb25zLCBrZXkpO1xuICBsZXQgcmVzID0gdGFyZ2V0LmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChrZXkpO1xuICBpZighIXJlcykgcmV0dXJuIHJlcztcbiAgaWYodHlwZW9mIG9wdGlvbnMubG9jYWxpemFibGUgPT09IFwib2JqZWN0XCIgJiYgb3B0aW9ucy5sb2NhbGl6YWJsZS5kZWZhdWx0U3RyKVxuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKG9wdGlvbnMubG9jYWxpemFibGUuZGVmYXVsdFN0cik7XG4gIHJldHVybiBcIlwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvcGVydHkob3B0aW9ucz86IElQcm9wZXJ0eURlY29yYXRvck9wdGlvbnMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IGFueSwga2V5OiBzdHJpbmcpIHtcbiAgICBsZXQgcHJvY2Vzc0NvbXB1dGVkVXBkYXRlciA9IChvYmo6IGFueSwgdmFsOiBhbnkpID0+IHtcbiAgICAgIGlmICghIXZhbCAmJiB0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiICYmIHZhbC50eXBlID09PSBDb21wdXRlZFVwZGF0ZXIuQ29tcHV0ZWRVcGRhdGVyVHlwZSkge1xuICAgICAgICBCYXNlLnN0YXJ0Q29sbGVjdERlcGVuZGVuY2llcygoKSA9PiBvYmpba2V5XSA9IHZhbC51cGRhdGVyKCksIG9iaiwga2V5KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdmFsLnVwZGF0ZXIoKTtcbiAgICAgICAgY29uc3QgZGVwZW5kZW5jaWVzID0gQmFzZS5maW5pc2hDb2xsZWN0RGVwZW5kZW5jaWVzKCk7XG4gICAgICAgIHZhbC5zZXREZXBlbmRlbmNpZXMoZGVwZW5kZW5jaWVzKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWw7XG4gICAgfTtcbiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMubG9jYWxpemFibGUpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShrZXkpO1xuICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghIW9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBvcHRpb25zLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25zLmRlZmF1bHRTb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpc1tvcHRpb25zLmRlZmF1bHRTb3VyY2VdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWw6IGFueSkge1xuICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gcHJvY2Vzc0NvbXB1dGVkVXBkYXRlcih0aGlzLCB2YWwpO1xuICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShrZXksIG5ld1ZhbHVlKTtcbiAgICAgICAgICBpZiAoISFvcHRpb25zICYmIG9wdGlvbnMub25TZXQpIHtcbiAgICAgICAgICAgIG9wdGlvbnMub25TZXQobmV3VmFsdWUsIHRoaXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGdldExvY1N0cmluZ1ZhbHVlKHRoaXMsIG9wdGlvbnMsIGtleSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbDogYW55KSB7XG4gICAgICAgICAgZW5zdXJlTG9jU3RyaW5nKHRoaXMsIG9wdGlvbnMsIGtleSk7XG4gICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBwcm9jZXNzQ29tcHV0ZWRVcGRhdGVyKHRoaXMsIHZhbCk7XG4gICAgICAgICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoa2V5LCBuZXdWYWx1ZSk7XG4gICAgICAgICAgaWYgKCEhb3B0aW9ucyAmJiBvcHRpb25zLm9uU2V0KSB7XG4gICAgICAgICAgICBvcHRpb25zLm9uU2V0KG5ld1ZhbHVlLCB0aGlzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy5sb2NhbGl6YWJsZSA9PT0gXCJvYmplY3RcIiAmJiAhIW9wdGlvbnMubG9jYWxpemFibGUubmFtZSA/XG4gICAgICAgICAgb3B0aW9ucy5sb2NhbGl6YWJsZS5uYW1lIDogXCJsb2NcIiArIGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKSxcbiAgICAgICAge1xuICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZW5zdXJlTG9jU3RyaW5nKHRoaXMsIG9wdGlvbnMsIGtleSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhrZXkpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElBcnJheVByb3BlcnR5RGVjb3JhdG9yT3B0aW9ucyB7XG4gIG9uUHVzaD86IGFueTtcbiAgb25SZW1vdmU/OiBhbnk7XG4gIG9uU2V0PzogKHZhbDogYW55LCB0YXJnZXQ6IGFueSkgPT4gdm9pZDtcbn1cblxuZnVuY3Rpb24gZW5zdXJlQXJyYXkoXG4gIHRhcmdldDogYW55LFxuICBvcHRpb25zOiBJQXJyYXlQcm9wZXJ0eURlY29yYXRvck9wdGlvbnMsXG4gIGtleTogc3RyaW5nXG4pIHtcbiAgdGFyZ2V0LmVuc3VyZUFycmF5KFxuICAgIGtleSxcbiAgICAoaXRlbTogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVyID0gISFvcHRpb25zID8gb3B0aW9ucy5vblB1c2ggOiBudWxsO1xuICAgICAgaGFuZGxlciAmJiBoYW5kbGVyKGl0ZW0sIGluZGV4LCB0YXJnZXQpO1xuICAgIH0sXG4gICAgKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgaGFuZGxlciA9ICEhb3B0aW9ucyA/IG9wdGlvbnMub25SZW1vdmUgOiBudWxsO1xuICAgICAgaGFuZGxlciAmJiBoYW5kbGVyKGl0ZW0sIGluZGV4LCB0YXJnZXQpO1xuICAgIH0sXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9wZXJ0eUFycmF5KG9wdGlvbnM/OiBJQXJyYXlQcm9wZXJ0eURlY29yYXRvck9wdGlvbnMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IGFueSwga2V5OiBzdHJpbmcpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICBlbnN1cmVBcnJheSh0aGlzLCBvcHRpb25zLCBrZXkpO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKGtleSk7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiAodmFsOiBhbnkpIHtcbiAgICAgICAgZW5zdXJlQXJyYXkodGhpcywgb3B0aW9ucywga2V5KTtcbiAgICAgICAgY29uc3QgYXJyID0gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKGtleSk7XG4gICAgICAgIGlmICh2YWwgPT09IGFycikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJyKSB7XG4gICAgICAgICAgYXJyLnNwbGljZSgwLCBhcnIubGVuZ3RoLCAuLi4odmFsIHx8IFtdKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKGtleSwgdmFsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISFvcHRpb25zICYmIG9wdGlvbnMub25TZXQpIHtcbiAgICAgICAgICBvcHRpb25zLm9uU2V0KHZhbCwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU9iamVjdCB7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuLyoqXG4gKiBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhIHByb3BlcnR5IG9mIGEgc3VydmV5IGVsZW1lbnQgKHBhZ2UsIHBhbmVsLCBxdWVzdGlvbnMsIGFuZCBldGMpLlxuICogQHNlZSBhZGRQcm9wZXJ0eVxuICogQHNlZSByZW1vdmVQcm9wZXJ0eVxuICogQHNlZSBbQWRkIFByb3BlcnRpZXNdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9TdXJ2ZXktQ3JlYXRvciNhZGRwcm9wZXJ0aWVzKVxuICogQHNlZSBbUmVtb3ZlIFByb3BlcnRpZXNdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9TdXJ2ZXktQ3JlYXRvciNyZW1vdmVwcm9wZXJ0aWVzKVxuICovXG5leHBvcnQgY2xhc3MgSnNvbk9iamVjdFByb3BlcnR5IGltcGxlbWVudHMgSU9iamVjdCB7XG4gIHB1YmxpYyBzdGF0aWMgZ2V0SXRlbVZhbHVlc0RlZmF1bHRWYWx1ZTogKHZhbDogYW55KSA9PiBhbnk7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbiAgcHJpdmF0ZSBzdGF0aWMgSW5kZXggPSAxO1xuICBwcml2YXRlIHN0YXRpYyBtZXJnYWJsZVZhbHVlcyA9IFtcbiAgICBcInR5cGVWYWx1ZVwiLFxuICAgIFwiY2hvaWNlc1ZhbHVlXCIsXG4gICAgXCJiYXNlVmFsdWVcIixcbiAgICBcInJlYWRPbmx5VmFsdWVcIixcbiAgICBcInZpc2libGVWYWx1ZVwiLFxuICAgIFwiaXNTZXJpYWxpemFibGVcIixcbiAgICBcImlzTGlnaHRTZXJpYWxpemFibGVcIixcbiAgICBcImlzQ3VzdG9tXCIsXG4gICAgXCJpc0JpbmRhYmxlXCIsXG4gICAgXCJpc1VuaXF1ZVwiLFxuICAgIFwiaXNEeW5hbWljQ2hvaWNlc1wiLFxuICAgIFwiaXNMb2NhbGl6YWJsZVZhbHVlXCIsXG4gICAgXCJjbGFzc05hbWVcIixcbiAgICBcImFsdGVybmF0aXZlTmFtZVwiLFxuICAgIFwibGF5b3V0XCIsXG4gICAgXCJjbGFzc05hbWVQYXJ0XCIsXG4gICAgXCJiYXNlQ2xhc3NOYW1lXCIsXG4gICAgXCJkZWZhdWx0VmFsdWVcIixcbiAgICBcInNlcmlhbGl6YXRpb25Qcm9wZXJ0eVwiLFxuICAgIFwib25HZXRWYWx1ZVwiLFxuICAgIFwib25TZXRWYWx1ZVwiLFxuICAgIFwiZGlzcGxheU5hbWVcIixcbiAgICBcImNhdGVnb3J5XCIsXG4gICAgXCJjYXRlZ29yeUluZGV4XCIsXG4gICAgXCJ2aXNpYmxlSW5kZXhcIixcbiAgICBcIm5leHRUb1Byb3BlcnR5XCIsXG4gICAgXCJzaG93TW9kZVwiLFxuICAgIFwiZGVwZW5kZWRQcm9wZXJ0aWVzXCIsXG4gICAgXCJ2aXNpYmxlSWZcIixcbiAgICBcIm9uUHJvcGVydHlFZGl0b3JVcGRhdGVcIixcbiAgICBcIm1heExlbmd0aFwiLFxuICAgIFwibWF4VmFsdWVcIixcbiAgICBcIm1pblZhbHVlXCIsXG4gICAgXCJkYXRhTGlzdFZhbHVlXCIsXG4gIF07XG4gIHByaXZhdGUgaWRWYWx1ZTogbnVtYmVyO1xuICBwcml2YXRlIGNsYXNzSW5mb1ZhbHVlOiBKc29uTWV0YWRhdGFDbGFzcztcbiAgcHJpdmF0ZSB0eXBlVmFsdWU6IHN0cmluZyA9IG51bGw7XG4gIHByaXZhdGUgY2hvaWNlc1ZhbHVlOiBBcnJheTxhbnk+ID0gbnVsbDtcbiAgcHJpdmF0ZSBiYXNlVmFsdWU6IGFueSA9IG51bGw7XG4gIHByaXZhdGUgaXNSZXF1aXJlZFZhbHVlOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgaXNVbmlxdWVWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIHJlYWRPbmx5VmFsdWU6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSB2aXNpYmxlVmFsdWU6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBpc0xvY2FsaXphYmxlVmFsdWU6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjaG9pY2VzZnVuYzogKG9iajogYW55LCBjaG9pY2VzQ2FsbGJhY2s6IGFueSkgPT4gQXJyYXk8YW55PiA9IG51bGw7XG4gIHByaXZhdGUgZGVwZW5kZWRQcm9wZXJ0aWVzOiBBcnJheTxzdHJpbmc+ID0gbnVsbDtcbiAgcHVibGljIGlzU2VyaWFsaXphYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgcHVibGljIGlzTGlnaHRTZXJpYWxpemFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICBwdWJsaWMgaXNDdXN0b206IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGlzRHluYW1pY0Nob2ljZXM6IGJvb2xlYW4gPSBmYWxzZTsgLy9UT0RPIG9ic29sZXRlLCB1c2UgZGVwZW5kc09uIGF0dHJpYnV0ZVxuICBwdWJsaWMgaXNCaW5kYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgY2xhc3NOYW1lOiBzdHJpbmcgPSBudWxsO1xuICBwdWJsaWMgYWx0ZXJuYXRpdmVOYW1lOiBzdHJpbmcgPSBudWxsO1xuICBwdWJsaWMgY2xhc3NOYW1lUGFydDogc3RyaW5nID0gbnVsbDtcbiAgcHVibGljIGJhc2VDbGFzc05hbWU6IHN0cmluZyA9IG51bGw7XG4gIHB1YmxpYyBkZWZhdWx0VmFsdWVWYWx1ZTogYW55ID0gbnVsbDtcbiAgcHVibGljIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogc3RyaW5nID0gbnVsbDtcbiAgcHVibGljIGRpc3BsYXlOYW1lOiBzdHJpbmcgPSBudWxsO1xuICBwdWJsaWMgY2F0ZWdvcnk6IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyBjYXRlZ29yeUluZGV4OiBudW1iZXIgPSAtMTtcbiAgcHVibGljIHZpc2libGVJbmRleDogbnVtYmVyID0gLTE7XG4gIHB1YmxpYyBuZXh0VG9Qcm9wZXJ0eTogc3RyaW5nID0gbnVsbDtcbiAgcHVibGljIHNob3dNb2RlOiBzdHJpbmcgPSBudWxsO1xuICBwdWJsaWMgbWF4TGVuZ3RoOiBudW1iZXIgPSAtMTtcbiAgcHVibGljIG1heFZhbHVlOiBhbnk7XG4gIHB1YmxpYyBtaW5WYWx1ZTogYW55O1xuICBwcml2YXRlIGRhdGFMaXN0VmFsdWU6IEFycmF5PHN0cmluZz47XG4gIHB1YmxpYyBsYXlvdXQ6IHN0cmluZyA9IG51bGw7XG4gIHB1YmxpYyBvbkdldFZhbHVlOiAob2JqOiBhbnkpID0+IGFueSA9IG51bGw7XG4gIHB1YmxpYyBvblNldFZhbHVlOiAob2JqOiBhbnksIHZhbHVlOiBhbnksIGpzb25Db252OiBKc29uT2JqZWN0KSA9PiBhbnkgPSBudWxsO1xuICBwdWJsaWMgdmlzaWJsZUlmOiAob2JqOiBhbnkpID0+IGJvb2xlYW4gPSBudWxsO1xuICBwdWJsaWMgb25Qcm9wZXJ0eUVkaXRvclVwZGF0ZTogKG9iajogYW55LCBwcm9wRWRpdG9yOiBhbnkpID0+IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBjbGFzc0luZm86IEpzb25NZXRhZGF0YUNsYXNzLFxuICAgIHB1YmxpYyBuYW1lOiBzdHJpbmcsXG4gICAgaXNSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlXG4gICkge1xuICAgIHRoaXMuY2xhc3NJbmZvVmFsdWUgPSBjbGFzc0luZm87XG4gICAgdGhpcy5pc1JlcXVpcmVkVmFsdWUgPSBpc1JlcXVpcmVkO1xuICAgIHRoaXMuaWRWYWx1ZSA9IEpzb25PYmplY3RQcm9wZXJ0eS5JbmRleCsrO1xuICB9XG4gIHB1YmxpYyBnZXQgaWQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5pZFZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgY2xhc3NJbmZvKCk6IEpzb25NZXRhZGF0YUNsYXNzIHtcbiAgICByZXR1cm4gdGhpcy5jbGFzc0luZm9WYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50eXBlVmFsdWUgPyB0aGlzLnR5cGVWYWx1ZSA6IFwic3RyaW5nXCI7XG4gIH1cbiAgcHVibGljIHNldCB0eXBlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUgPT09IFwiaXRlbXZhbHVlc1wiKSB2YWx1ZSA9IFwiaXRlbXZhbHVlW11cIjtcbiAgICB0aGlzLnR5cGVWYWx1ZSA9IHZhbHVlO1xuICAgIGlmICh0aGlzLnR5cGVWYWx1ZS5pbmRleE9mKFwiW11cIikgPT09IHRoaXMudHlwZVZhbHVlLmxlbmd0aCAtIDIpIHtcbiAgICAgIHRoaXMuaXNBcnJheSA9IHRydWU7XG4gICAgICB0aGlzLmNsYXNzTmFtZSA9IHRoaXMudHlwZVZhbHVlLnN1YnN0cigwLCB0aGlzLnR5cGVWYWx1ZS5sZW5ndGggLSAyKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGlzQXJyYXkgPSBmYWxzZTtcbiAgcHVibGljIGdldCBpc1JlcXVpcmVkKCkge1xuICAgIHJldHVybiB0aGlzLmlzUmVxdWlyZWRWYWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IGlzUmVxdWlyZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5pc1JlcXVpcmVkVmFsdWUgPSB2YWw7XG4gIH1cbiAgcHVibGljIGdldCBpc1VuaXF1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1VuaXF1ZVZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXQgaXNVbmlxdWUodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5pc1VuaXF1ZVZhbHVlID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzVG9Vc2VHZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vbkdldFZhbHVlIHx8IHRoaXMuc2VyaWFsaXphdGlvblByb3BlcnR5O1xuICB9XG4gIHB1YmxpYyBnZXQgZGVmYXVsdFZhbHVlKCkge1xuICAgIHZhciByZXN1bHQ6IGFueSA9IHRoaXMuZGVmYXVsdFZhbHVlVmFsdWU7XG4gICAgaWYgKFxuICAgICAgISFKc29uT2JqZWN0UHJvcGVydHkuZ2V0SXRlbVZhbHVlc0RlZmF1bHRWYWx1ZSAmJlxuICAgICAgSnNvbk9iamVjdC5tZXRhRGF0YS5pc0Rlc2NlbmRhbnRPZih0aGlzLmNsYXNzTmFtZSwgXCJpdGVtdmFsdWVcIilcbiAgICApIHtcbiAgICAgIHJlc3VsdCA9IEpzb25PYmplY3RQcm9wZXJ0eS5nZXRJdGVtVmFsdWVzRGVmYXVsdFZhbHVlKFxuICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZVZhbHVlIHx8IFtdXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHB1YmxpYyBzZXQgZGVmYXVsdFZhbHVlKG5ld1ZhbHVlKSB7XG4gICAgdGhpcy5kZWZhdWx0VmFsdWVWYWx1ZSA9IG5ld1ZhbHVlO1xuICB9XG4gIHB1YmxpYyBpc0RlZmF1bHRWYWx1ZSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCFIZWxwZXJzLmlzVmFsdWVFbXB0eSh0aGlzLmRlZmF1bHRWYWx1ZSkpXG4gICAgICByZXR1cm4gdGhpcy5kZWZhdWx0VmFsdWUgPT0gdmFsdWU7XG4gICAgcmV0dXJuIChcbiAgICAgICh2YWx1ZSA9PT0gZmFsc2UgJiYgKHRoaXMudHlwZSA9PSBcImJvb2xlYW5cIiB8fCB0aGlzLnR5cGUgPT0gXCJzd2l0Y2hcIikpIHx8XG4gICAgICB2YWx1ZSA9PT0gXCJcIiB8fFxuICAgICAgSGVscGVycy5pc1ZhbHVlRW1wdHkodmFsdWUpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0VmFsdWUob2JqOiBhbnkpOiBhbnkge1xuICAgIGlmICh0aGlzLm9uR2V0VmFsdWUpIHJldHVybiB0aGlzLm9uR2V0VmFsdWUob2JqKTtcbiAgICBpZiAodGhpcy5zZXJpYWxpemF0aW9uUHJvcGVydHkgJiYgISFvYmpbdGhpcy5zZXJpYWxpemF0aW9uUHJvcGVydHldKVxuICAgICAgcmV0dXJuIG9ialt0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eV0uZ2V0SnNvbigpO1xuICAgIHJldHVybiBvYmpbdGhpcy5uYW1lXTtcbiAgfVxuICBwdWJsaWMgZ2V0UHJvcGVydHlWYWx1ZShvYmo6IGFueSk6IGFueSB7XG4gICAgaWYgKHRoaXMuaXNMb2NhbGl6YWJsZSkge1xuICAgICAgcmV0dXJuICEhb2JqW3RoaXMuc2VyaWFsaXphdGlvblByb3BlcnR5XVxuICAgICAgICA/IG9ialt0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eV0udGV4dFxuICAgICAgICA6IG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFZhbHVlKG9iaik7XG4gIH1cbiAgcHVibGljIGdldCBoYXNUb1VzZVNldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLm9uU2V0VmFsdWUgfHwgdGhpcy5zZXJpYWxpemF0aW9uUHJvcGVydHk7XG4gIH1cbiAgcHVibGljIHNldFZhbHVlKG9iajogYW55LCB2YWx1ZTogYW55LCBqc29uQ29udjogSnNvbk9iamVjdCkge1xuICAgIGlmICh0aGlzLm9uU2V0VmFsdWUpIHtcbiAgICAgIHRoaXMub25TZXRWYWx1ZShvYmosIHZhbHVlLCBqc29uQ29udik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eSAmJiAhIW9ialt0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eV0pXG4gICAgICAgIG9ialt0aGlzLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eV0uc2V0SnNvbih2YWx1ZSk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUludCh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT0gXCJib29sZWFuXCIgfHwgdGhpcy50eXBlID09IFwic3dpdGNoXCIpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0cnVlXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9ialt0aGlzLm5hbWVdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRPYmpUeXBlKG9ialR5cGU6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5jbGFzc05hbWVQYXJ0KSByZXR1cm4gb2JqVHlwZTtcbiAgICByZXR1cm4gb2JqVHlwZS5yZXBsYWNlKHRoaXMuY2xhc3NOYW1lUGFydCwgXCJcIik7XG4gIH1cbiAgcHVibGljIGdldENsYXNzTmFtZShjbGFzc05hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKGNsYXNzTmFtZSkgY2xhc3NOYW1lID0gY2xhc3NOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIHRoaXMuY2xhc3NOYW1lUGFydCAmJiBjbGFzc05hbWUuaW5kZXhPZih0aGlzLmNsYXNzTmFtZVBhcnQpIDwgMFxuICAgICAgPyBjbGFzc05hbWUgKyB0aGlzLmNsYXNzTmFtZVBhcnRcbiAgICAgIDogY2xhc3NOYW1lO1xuICB9XG4gIC8qKlxuICAgKiBEZXByaWNhdGVkLCBwbGVhc2UgdXNlIGdldENob2ljZXNcbiAgICovXG4gIHB1YmxpYyBnZXQgY2hvaWNlcygpOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRDaG9pY2VzKG51bGwpO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzQ2hvaWNlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmNob2ljZXNWYWx1ZSB8fCAhIXRoaXMuY2hvaWNlc2Z1bmM7XG4gIH1cbiAgcHVibGljIGdldENob2ljZXMob2JqOiBhbnksIGNob2ljZXNDYWxsYmFjazogYW55ID0gbnVsbCk6IEFycmF5PGFueT4ge1xuICAgIGlmICh0aGlzLmNob2ljZXNWYWx1ZSAhPSBudWxsKSByZXR1cm4gdGhpcy5jaG9pY2VzVmFsdWU7XG4gICAgaWYgKHRoaXMuY2hvaWNlc2Z1bmMgIT0gbnVsbCkgcmV0dXJuIHRoaXMuY2hvaWNlc2Z1bmMob2JqLCBjaG9pY2VzQ2FsbGJhY2spO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyBzZXRDaG9pY2VzKFxuICAgIHZhbHVlOiBBcnJheTxhbnk+LFxuICAgIHZhbHVlRnVuYzogKG9iajogYW55KSA9PiBBcnJheTxhbnk+ID0gbnVsbFxuICApIHtcbiAgICB0aGlzLmNob2ljZXNWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuY2hvaWNlc2Z1bmMgPSB2YWx1ZUZ1bmM7XG4gIH1cbiAgcHVibGljIGdldEJhc2VWYWx1ZSgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5iYXNlVmFsdWUpIHJldHVybiBcIlwiO1xuICAgIGlmICh0eXBlb2YgdGhpcy5iYXNlVmFsdWUgPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdGhpcy5iYXNlVmFsdWUoKTtcbiAgICByZXR1cm4gdGhpcy5iYXNlVmFsdWU7XG4gIH1cbiAgcHVibGljIHNldEJhc2VWYWx1ZSh2YWw6IGFueSkge1xuICAgIHRoaXMuYmFzZVZhbHVlID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgcmVhZE9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVhZE9ubHlWYWx1ZSAhPSBudWxsID8gdGhpcy5yZWFkT25seVZhbHVlIDogZmFsc2U7XG4gIH1cbiAgcHVibGljIHNldCByZWFkT25seSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnJlYWRPbmx5VmFsdWUgPSB2YWw7XG4gIH1cbiAgcHVibGljIGlzVmlzaWJsZShsYXlvdXQ6IHN0cmluZywgb2JqOiBhbnkgPSBudWxsKTogYm9vbGVhbiB7XG4gICAgbGV0IGlzTGF5b3V0ID0gIXRoaXMubGF5b3V0IHx8IHRoaXMubGF5b3V0ID09IGxheW91dDtcbiAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCAhaXNMYXlvdXQpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoISF0aGlzLnZpc2libGVJZiAmJiAhIW9iaikgcmV0dXJuIHRoaXMudmlzaWJsZUlmKG9iaik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIGdldCB2aXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZpc2libGVWYWx1ZSAhPSBudWxsID8gdGhpcy52aXNpYmxlVmFsdWUgOiB0cnVlO1xuICB9XG4gIHB1YmxpYyBzZXQgdmlzaWJsZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnZpc2libGVWYWx1ZSA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzTG9jYWxpemFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNMb2NhbGl6YWJsZVZhbHVlICE9IG51bGwgPyB0aGlzLmlzTG9jYWxpemFibGVWYWx1ZSA6IGZhbHNlO1xuICB9XG4gIHB1YmxpYyBzZXQgaXNMb2NhbGl6YWJsZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzTG9jYWxpemFibGVWYWx1ZSA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0IGRhdGFMaXN0KCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMuZGF0YUxpc3RWYWx1ZSkgPyB0aGlzLmRhdGFMaXN0VmFsdWUgOiBbXTtcbiAgfVxuICBwdWJsaWMgc2V0IGRhdGFMaXN0KHZhbDogQXJyYXk8c3RyaW5nPikge1xuICAgIHRoaXMuZGF0YUxpc3RWYWx1ZSA9IHZhbDtcbiAgfVxuICBwdWJsaWMgbWVyZ2VXaXRoKHByb3A6IEpzb25PYmplY3RQcm9wZXJ0eSkge1xuICAgIHZhciB2YWx1ZXNOYW1lcyA9IEpzb25PYmplY3RQcm9wZXJ0eS5tZXJnYWJsZVZhbHVlcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlc05hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLm1lcmdlVmFsdWUocHJvcCwgdmFsdWVzTmFtZXNbaV0pO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgYWRkRGVwZW5kZWRQcm9wZXJ0eShuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuZGVwZW5kZWRQcm9wZXJ0aWVzKSB7XG4gICAgICB0aGlzLmRlcGVuZGVkUHJvcGVydGllcyA9IFtdO1xuICAgIH1cbiAgICBpZiAodGhpcy5kZXBlbmRlZFByb3BlcnRpZXMuaW5kZXhPZihuYW1lKSA8IDApIHtcbiAgICAgIHRoaXMuZGVwZW5kZWRQcm9wZXJ0aWVzLnB1c2gobmFtZSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXREZXBlbmRlZFByb3BlcnRpZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuICEhdGhpcy5kZXBlbmRlZFByb3BlcnRpZXMgPyB0aGlzLmRlcGVuZGVkUHJvcGVydGllcyA6IFtdO1xuICB9XG4gIHB1YmxpYyBzY2hlbWFUeXBlKCk6IHN0cmluZyB7XG4gICAgaWYgKCEhdGhpcy5jbGFzc05hbWUpIHJldHVybiBcImFycmF5XCI7XG4gICAgaWYgKCEhdGhpcy5iYXNlQ2xhc3NOYW1lKSByZXR1cm4gXCJhcnJheVwiO1xuICAgIGlmICh0aGlzLnR5cGUgPT0gXCJib29sZWFuXCIgfHwgdGhpcy50eXBlID09IFwibnVtYmVyXCIpIHJldHVybiB0aGlzLnR5cGU7XG4gICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gIH1cbiAgcHJpdmF0ZSBtZXJnZVZhbHVlKHByb3A6IEpzb25PYmplY3RQcm9wZXJ0eSwgdmFsdWVOYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpc1t2YWx1ZU5hbWVdID09IG51bGwgJiYgcHJvcFt2YWx1ZU5hbWVdICE9IG51bGwpIHtcbiAgICAgIHRoaXNbdmFsdWVOYW1lXSA9IHByb3BbdmFsdWVOYW1lXTtcbiAgICB9XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbiB7XG4gIHByaXZhdGUgc3RhdGljIHByb3BlcnRpZXM6IElPYmplY3QgPSB7fTtcbiAgcHJpdmF0ZSBzdGF0aWMgcGFyZW50Q2xhc3NlczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICBwdWJsaWMgc3RhdGljIGFkZFByb3BlcnR5KGNsYXNzTmFtZTogc3RyaW5nLCBwcm9wZXJ0eTogYW55KSB7XG4gICAgY2xhc3NOYW1lID0gY2xhc3NOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIHByb3BzID0gQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24ucHJvcGVydGllcztcbiAgICBpZiAoIXByb3BzW2NsYXNzTmFtZV0pIHtcbiAgICAgIHByb3BzW2NsYXNzTmFtZV0gPSBbXTtcbiAgICB9XG4gICAgcHJvcHNbY2xhc3NOYW1lXS5wdXNoKHByb3BlcnR5KTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIHJlbW92ZVByb3BlcnR5KGNsYXNzTmFtZTogc3RyaW5nLCBwcm9wZXJ0eU5hbWU6IHN0cmluZykge1xuICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBwcm9wcyA9IEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLnByb3BlcnRpZXM7XG4gICAgaWYgKCFwcm9wc1tjbGFzc05hbWVdKSByZXR1cm47XG4gICAgdmFyIHByb3BlcnRpZXMgPSBwcm9wc1tjbGFzc05hbWVdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHByb3BlcnRpZXNbaV0ubmFtZSA9PSBwcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgcHJvcHNbY2xhc3NOYW1lXS5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwdWJsaWMgc3RhdGljIGFkZENsYXNzKGNsYXNzTmFtZTogc3RyaW5nLCBwYXJlbnRDbGFzc05hbWU6IHN0cmluZykge1xuICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChwYXJlbnRDbGFzc05hbWUpIHtcbiAgICAgIHBhcmVudENsYXNzTmFtZSA9IHBhcmVudENsYXNzTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5wYXJlbnRDbGFzc2VzW2NsYXNzTmFtZV0gPSBwYXJlbnRDbGFzc05hbWU7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBnZXRQcm9wZXJ0aWVzKGNsYXNzTmFtZTogc3RyaW5nKTogQXJyYXk8YW55PiB7XG4gICAgY2xhc3NOYW1lID0gY2xhc3NOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciBwcm9wcyA9IEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLnByb3BlcnRpZXM7XG4gICAgd2hpbGUgKGNsYXNzTmFtZSkge1xuICAgICAgdmFyIHByb3BlcnRpZXMgPSBwcm9wc1tjbGFzc05hbWVdO1xuICAgICAgaWYgKHByb3BlcnRpZXMpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgcmVzLnB1c2gocHJvcGVydGllc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNsYXNzTmFtZSA9IEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLnBhcmVudENsYXNzZXNbY2xhc3NOYW1lXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZVByb3BlcnRpZXMob2JqOiBhbnkpIHtcbiAgICBpZiAoIW9iaiB8fCAhb2JqLmdldFR5cGUpIHJldHVybjtcbiAgICBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5jcmVhdGVQcm9wZXJ0aWVzQ29yZShvYmosIG9iai5nZXRUeXBlKCkpO1xuICB9XG4gIHByaXZhdGUgc3RhdGljIGNyZWF0ZVByb3BlcnRpZXNDb3JlKG9iajogYW55LCBjbGFzc05hbWU6IHN0cmluZykge1xuICAgIHZhciBwcm9wcyA9IEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLnByb3BlcnRpZXM7XG4gICAgaWYgKHByb3BzW2NsYXNzTmFtZV0pIHtcbiAgICAgIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLmNyZWF0ZVByb3BlcnRpZXNJbk9iaihvYmosIHByb3BzW2NsYXNzTmFtZV0pO1xuICAgIH1cbiAgICB2YXIgcGFyZW50Q2xhc3MgPSBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5wYXJlbnRDbGFzc2VzW2NsYXNzTmFtZV07XG4gICAgaWYgKHBhcmVudENsYXNzKSB7XG4gICAgICBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5jcmVhdGVQcm9wZXJ0aWVzQ29yZShvYmosIHBhcmVudENsYXNzKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBzdGF0aWMgY3JlYXRlUHJvcGVydGllc0luT2JqKG9iajogYW55LCBwcm9wZXJ0aWVzOiBhbnlbXSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24uY3JlYXRlUHJvcGVydHlJbk9iaihvYmosIHByb3BlcnRpZXNbaV0pO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHN0YXRpYyBjcmVhdGVQcm9wZXJ0eUluT2JqKG9iajogYW55LCBwcm9wOiBKc29uT2JqZWN0UHJvcGVydHkpIHtcbiAgICBpZiAob2JqW3Byb3AubmFtZV0gfHwgb2JqLmhhc093blByb3BlcnR5KHByb3AubmFtZSkpIHJldHVybjtcbiAgICBpZiAoXG4gICAgICBwcm9wLmlzTG9jYWxpemFibGUgJiZcbiAgICAgIHByb3Auc2VyaWFsaXphdGlvblByb3BlcnR5ICYmXG4gICAgICAhb2JqW3Byb3Auc2VyaWFsaXphdGlvblByb3BlcnR5XSAmJlxuICAgICAgb2JqLmNyZWF0ZUN1c3RvbUxvY2FsaXphYmxlT2JqXG4gICAgKSB7XG4gICAgICBvYmouY3JlYXRlQ3VzdG9tTG9jYWxpemFibGVPYmoocHJvcC5uYW1lKTtcbiAgICAgIHZhciBsb2NEZXNjID0ge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gb2JqLmdldExvY2FsaXphYmxlU3RyaW5nKHByb3AubmFtZSk7XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgcHJvcC5zZXJpYWxpemF0aW9uUHJvcGVydHksIGxvY0Rlc2MpO1xuICAgICAgdmFyIGRlc2MgPSB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBvYmouZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KHByb3AubmFtZSwgcHJvcC5kZWZhdWx0VmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2OiBhbnkpIHtcbiAgICAgICAgICBvYmouc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KHByb3AubmFtZSwgdik7XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgcHJvcC5uYW1lLCBkZXNjKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGRlZmF1bHRWYWx1ZSA9IHByb3AuZGVmYXVsdFZhbHVlO1xuICAgICAgdmFyIGlzQXJyYXlQcm9wID0gZmFsc2U7XG4gICAgICBpZiAodHlwZW9mIG9iai5jcmVhdGVOZXdBcnJheSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGlmIChKc29uT2JqZWN0Lm1ldGFEYXRhLmlzRGVzY2VuZGFudE9mKHByb3AuY2xhc3NOYW1lLCBcIml0ZW12YWx1ZVwiKSkge1xuICAgICAgICAgIG9iai5jcmVhdGVOZXdBcnJheShwcm9wLm5hbWUsIGZ1bmN0aW9uIChpdGVtOiBhbnkpIHtcbiAgICAgICAgICAgIGl0ZW0ubG9jT3duZXIgPSBvYmo7XG4gICAgICAgICAgICBpdGVtLm93bmVyUHJvcGVydHlOYW1lID0gcHJvcC5uYW1lO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlzQXJyYXlQcm9wID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvL0l0IGlzIGEgc2ltcGxlIGFycmF5IHByb3BlcnR5XG4gICAgICAgIGlmIChwcm9wLnR5cGUgPT09IFwibXVsdGlwbGV2YWx1ZXNcIikge1xuICAgICAgICAgIG9iai5jcmVhdGVOZXdBcnJheShwcm9wLm5hbWUpO1xuICAgICAgICAgIGlzQXJyYXlQcm9wID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBcnJheVByb3ApIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkZWZhdWx0VmFsdWUpKSB7XG4gICAgICAgICAgICBvYmouc2V0UHJvcGVydHlWYWx1ZShwcm9wLm5hbWUsIGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghIW9iai5nZXRQcm9wZXJ0eVZhbHVlICYmICEhb2JqLnNldFByb3BlcnR5VmFsdWUpIHtcbiAgICAgICAgdmFyIGRlc2MgPSB7XG4gICAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoISFwcm9wLm9uR2V0VmFsdWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHByb3Aub25HZXRWYWx1ZShvYmopO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9iai5nZXRQcm9wZXJ0eVZhbHVlKHByb3AubmFtZSwgZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldDogZnVuY3Rpb24gKHY6IGFueSkge1xuICAgICAgICAgICAgaWYgKCEhcHJvcC5vblNldFZhbHVlKSB7XG4gICAgICAgICAgICAgIHByb3Aub25TZXRWYWx1ZShvYmosIHYsIG51bGwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb2JqLnNldFByb3BlcnR5VmFsdWUocHJvcC5uYW1lLCB2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBwcm9wLm5hbWUsIGRlc2MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSnNvbk1ldGFkYXRhQ2xhc3Mge1xuICBzdGF0aWMgcmVxdWlyZWRTeW1ib2wgPSBcIiFcIjtcbiAgc3RhdGljIHR5cGVTeW1ib2wgPSBcIjpcIjtcbiAgcHJvcGVydGllczogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PiA9IG51bGw7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBuYW1lOiBzdHJpbmcsXG4gICAgcHJvcGVydGllczogQXJyYXk8YW55PixcbiAgICBwdWJsaWMgY3JlYXRvcjogKGpzb24/OiBhbnkpID0+IGFueSA9IG51bGwsXG4gICAgcHVibGljIHBhcmVudE5hbWU6IHN0cmluZyA9IG51bGxcbiAgKSB7XG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAodGhpcy5wYXJlbnROYW1lKSB7XG4gICAgICB0aGlzLnBhcmVudE5hbWUgPSB0aGlzLnBhcmVudE5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLmFkZENsYXNzKG5hbWUsIHRoaXMucGFyZW50TmFtZSk7XG4gICAgfVxuICAgIHRoaXMucHJvcGVydGllcyA9IG5ldyBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+KCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcHJvcCA9IHRoaXMuY3JlYXRlUHJvcGVydHkocHJvcGVydGllc1tpXSk7XG4gICAgICBpZiAocHJvcCkge1xuICAgICAgICB0aGlzLnByb3BlcnRpZXMucHVzaChwcm9wKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIGZpbmQobmFtZTogc3RyaW5nKTogSnNvbk9iamVjdFByb3BlcnR5IHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMucHJvcGVydGllc1tpXS5uYW1lID09IG5hbWUpIHJldHVybiB0aGlzLnByb3BlcnRpZXNbaV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyBjcmVhdGVQcm9wZXJ0eShwcm9wSW5mbzogYW55KTogSnNvbk9iamVjdFByb3BlcnR5IHtcbiAgICB2YXIgcHJvcGVydHlOYW1lID0gdHlwZW9mIHByb3BJbmZvID09PSBcInN0cmluZ1wiID8gcHJvcEluZm8gOiBwcm9wSW5mby5uYW1lO1xuICAgIGlmICghcHJvcGVydHlOYW1lKSByZXR1cm47XG4gICAgdmFyIHByb3BlcnR5VHlwZSA9IG51bGw7XG4gICAgdmFyIHR5cGVJbmRleCA9IHByb3BlcnR5TmFtZS5pbmRleE9mKEpzb25NZXRhZGF0YUNsYXNzLnR5cGVTeW1ib2wpO1xuICAgIGlmICh0eXBlSW5kZXggPiAtMSkge1xuICAgICAgcHJvcGVydHlUeXBlID0gcHJvcGVydHlOYW1lLnN1YnN0cmluZyh0eXBlSW5kZXggKyAxKTtcbiAgICAgIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZS5zdWJzdHJpbmcoMCwgdHlwZUluZGV4KTtcbiAgICB9XG4gICAgdmFyIGlzUmVxdWlyZWQgPVxuICAgICAgdGhpcy5nZXRJc1Byb3BlcnR5TmFtZVJlcXVpcmVkKHByb3BlcnR5TmFtZSkgfHwgISFwcm9wSW5mby5pc1JlcXVpcmVkO1xuICAgIHByb3BlcnR5TmFtZSA9IHRoaXMuZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSk7XG4gICAgdmFyIHByb3AgPSBuZXcgSnNvbk9iamVjdFByb3BlcnR5KHRoaXMsIHByb3BlcnR5TmFtZSwgaXNSZXF1aXJlZCk7XG4gICAgaWYgKHByb3BlcnR5VHlwZSkge1xuICAgICAgcHJvcC50eXBlID0gcHJvcGVydHlUeXBlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHByb3BJbmZvID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBpZiAocHJvcEluZm8udHlwZSkge1xuICAgICAgICBwcm9wLnR5cGUgPSBwcm9wSW5mby50eXBlO1xuICAgICAgfVxuICAgICAgaWYgKCFIZWxwZXJzLmlzVmFsdWVFbXB0eShwcm9wSW5mby5kZWZhdWx0KSkge1xuICAgICAgICBwcm9wLmRlZmF1bHRWYWx1ZSA9IHByb3BJbmZvLmRlZmF1bHQ7XG4gICAgICB9XG4gICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHByb3BJbmZvLmlzU2VyaWFsaXphYmxlKSkge1xuICAgICAgICBwcm9wLmlzU2VyaWFsaXphYmxlID0gcHJvcEluZm8uaXNTZXJpYWxpemFibGU7XG4gICAgICB9XG4gICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHByb3BJbmZvLmlzTGlnaHRTZXJpYWxpemFibGUpKSB7XG4gICAgICAgIHByb3AuaXNMaWdodFNlcmlhbGl6YWJsZSA9IHByb3BJbmZvLmlzTGlnaHRTZXJpYWxpemFibGU7XG4gICAgICB9XG4gICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHByb3BJbmZvLm1heExlbmd0aCkpIHtcbiAgICAgICAgcHJvcC5tYXhMZW5ndGggPSBwcm9wSW5mby5tYXhMZW5ndGg7XG4gICAgICB9XG4gICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHByb3BJbmZvLmRpc3BsYXlOYW1lKSkge1xuICAgICAgICBwcm9wLmRpc3BsYXlOYW1lID0gcHJvcEluZm8uZGlzcGxheU5hbWU7XG4gICAgICB9XG4gICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHByb3BJbmZvLmNhdGVnb3J5KSkge1xuICAgICAgICBwcm9wLmNhdGVnb3J5ID0gcHJvcEluZm8uY2F0ZWdvcnk7XG4gICAgICB9XG4gICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHByb3BJbmZvLmNhdGVnb3J5SW5kZXgpKSB7XG4gICAgICAgIHByb3AuY2F0ZWdvcnlJbmRleCA9IHByb3BJbmZvLmNhdGVnb3J5SW5kZXg7XG4gICAgICB9XG4gICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHByb3BJbmZvLm5leHRUb1Byb3BlcnR5KSkge1xuICAgICAgICBwcm9wLm5leHRUb1Byb3BlcnR5ID0gcHJvcEluZm8ubmV4dFRvUHJvcGVydHk7XG4gICAgICB9XG4gICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHByb3BJbmZvLnZpc2libGVJbmRleCkpIHtcbiAgICAgICAgcHJvcC52aXNpYmxlSW5kZXggPSBwcm9wSW5mby52aXNpYmxlSW5kZXg7XG4gICAgICB9XG4gICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHByb3BJbmZvLnNob3dNb2RlKSkge1xuICAgICAgICBwcm9wLnNob3dNb2RlID0gcHJvcEluZm8uc2hvd01vZGU7XG4gICAgICB9XG4gICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHByb3BJbmZvLm1heFZhbHVlKSkge1xuICAgICAgICBwcm9wLm1heFZhbHVlID0gcHJvcEluZm8ubWF4VmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHByb3BJbmZvLm1pblZhbHVlKSkge1xuICAgICAgICBwcm9wLm1pblZhbHVlID0gcHJvcEluZm8ubWluVmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHByb3BJbmZvLmRhdGFMaXN0KSkge1xuICAgICAgICBwcm9wLmRhdGFMaXN0ID0gcHJvcEluZm8uZGF0YUxpc3Q7XG4gICAgICB9XG4gICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHByb3BJbmZvLmlzRHluYW1pY0Nob2ljZXMpKSB7XG4gICAgICAgIHByb3AuaXNEeW5hbWljQ2hvaWNlcyA9IHByb3BJbmZvLmlzRHluYW1pY0Nob2ljZXM7XG4gICAgICB9XG4gICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHByb3BJbmZvLmlzQmluZGFibGUpKSB7XG4gICAgICAgIHByb3AuaXNCaW5kYWJsZSA9IHByb3BJbmZvLmlzQmluZGFibGU7XG4gICAgICB9XG4gICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHByb3BJbmZvLmlzVW5pcXVlKSkge1xuICAgICAgICBwcm9wLmlzVW5pcXVlID0gcHJvcEluZm8uaXNVbmlxdWU7XG4gICAgICB9XG4gICAgICBpZiAocHJvcEluZm8udmlzaWJsZSA9PT0gdHJ1ZSB8fCBwcm9wSW5mby52aXNpYmxlID09PSBmYWxzZSkge1xuICAgICAgICBwcm9wLnZpc2libGUgPSBwcm9wSW5mby52aXNpYmxlO1xuICAgICAgfVxuICAgICAgaWYgKCEhcHJvcEluZm8udmlzaWJsZUlmKSB7XG4gICAgICAgIHByb3AudmlzaWJsZUlmID0gcHJvcEluZm8udmlzaWJsZUlmO1xuICAgICAgfVxuICAgICAgaWYgKCEhcHJvcEluZm8ub25Qcm9wZXJ0eUVkaXRvclVwZGF0ZSkge1xuICAgICAgICBwcm9wLm9uUHJvcGVydHlFZGl0b3JVcGRhdGUgPSBwcm9wSW5mby5vblByb3BlcnR5RWRpdG9yVXBkYXRlO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BJbmZvLnJlYWRPbmx5ID09PSB0cnVlKSB7XG4gICAgICAgIHByb3AucmVhZE9ubHkgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BJbmZvLmNob2ljZXMpIHtcbiAgICAgICAgdmFyIGNob2ljZXNGdW5jID1cbiAgICAgICAgICB0eXBlb2YgcHJvcEluZm8uY2hvaWNlcyA9PT0gXCJmdW5jdGlvblwiID8gcHJvcEluZm8uY2hvaWNlcyA6IG51bGw7XG4gICAgICAgIHZhciBjaG9pY2VzVmFsdWUgPVxuICAgICAgICAgIHR5cGVvZiBwcm9wSW5mby5jaG9pY2VzICE9PSBcImZ1bmN0aW9uXCIgPyBwcm9wSW5mby5jaG9pY2VzIDogbnVsbDtcbiAgICAgICAgcHJvcC5zZXRDaG9pY2VzKGNob2ljZXNWYWx1ZSwgY2hvaWNlc0Z1bmMpO1xuICAgICAgfVxuICAgICAgaWYgKCEhcHJvcEluZm8uYmFzZVZhbHVlKSB7XG4gICAgICAgIHByb3Auc2V0QmFzZVZhbHVlKHByb3BJbmZvLmJhc2VWYWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcEluZm8ub25HZXRWYWx1ZSkge1xuICAgICAgICBwcm9wLm9uR2V0VmFsdWUgPSBwcm9wSW5mby5vbkdldFZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BJbmZvLm9uU2V0VmFsdWUpIHtcbiAgICAgICAgcHJvcC5vblNldFZhbHVlID0gcHJvcEluZm8ub25TZXRWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wSW5mby5pc0xvY2FsaXphYmxlKSB7XG4gICAgICAgIHByb3BJbmZvLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eSA9IFwibG9jXCIgKyBwcm9wLm5hbWU7XG4gICAgICB9XG4gICAgICBpZiAocHJvcEluZm8uc2VyaWFsaXphdGlvblByb3BlcnR5KSB7XG4gICAgICAgIHByb3Auc2VyaWFsaXphdGlvblByb3BlcnR5ID0gcHJvcEluZm8uc2VyaWFsaXphdGlvblByb3BlcnR5O1xuICAgICAgICB2YXIgczogc3RyaW5nO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJvcC5zZXJpYWxpemF0aW9uUHJvcGVydHkgJiZcbiAgICAgICAgICBwcm9wLnNlcmlhbGl6YXRpb25Qcm9wZXJ0eS5pbmRleE9mKFwibG9jXCIpID09IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgcHJvcC5pc0xvY2FsaXphYmxlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHByb3BJbmZvLmlzTG9jYWxpemFibGUpIHtcbiAgICAgICAgcHJvcC5pc0xvY2FsaXphYmxlID0gcHJvcEluZm8uaXNMb2NhbGl6YWJsZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wSW5mby5jbGFzc05hbWUpIHtcbiAgICAgICAgcHJvcC5jbGFzc05hbWUgPSBwcm9wSW5mby5jbGFzc05hbWU7XG4gICAgICB9XG4gICAgICBpZiAocHJvcEluZm8uYmFzZUNsYXNzTmFtZSkge1xuICAgICAgICBwcm9wLmJhc2VDbGFzc05hbWUgPSBwcm9wSW5mby5iYXNlQ2xhc3NOYW1lO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BJbmZvLmNsYXNzTmFtZVBhcnQpIHtcbiAgICAgICAgcHJvcC5jbGFzc05hbWVQYXJ0ID0gcHJvcEluZm8uY2xhc3NOYW1lUGFydDtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wSW5mby5hbHRlcm5hdGl2ZU5hbWUpIHtcbiAgICAgICAgcHJvcC5hbHRlcm5hdGl2ZU5hbWUgPSBwcm9wSW5mby5hbHRlcm5hdGl2ZU5hbWU7XG4gICAgICB9XG4gICAgICBpZiAocHJvcEluZm8ubGF5b3V0KSB7XG4gICAgICAgIHByb3AubGF5b3V0ID0gcHJvcEluZm8ubGF5b3V0O1xuICAgICAgfVxuICAgICAgaWYgKHByb3BJbmZvLmRlcGVuZHNPbikge1xuICAgICAgICB0aGlzLmFkZERlcGVuZHNPblByb3BlcnRpZXMocHJvcCwgcHJvcEluZm8uZGVwZW5kc09uKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb3A7XG4gIH1cbiAgcHJpdmF0ZSBhZGREZXBlbmRzT25Qcm9wZXJ0aWVzKHByb3A6IEpzb25PYmplY3RQcm9wZXJ0eSwgZGVwZW5kc09uOiBhbnkpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkZXBlbmRzT24pKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlcGVuZHNPbi5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmFkZERlcGVuZHNPblByb3BlcnR5KHByb3AsIGRlcGVuZHNPbltpXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRkRGVwZW5kc09uUHJvcGVydHkocHJvcCwgZGVwZW5kc09uKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBhZGREZXBlbmRzT25Qcm9wZXJ0eShwcm9wOiBKc29uT2JqZWN0UHJvcGVydHksIGRlcGVuZHNPbjogc3RyaW5nKSB7XG4gICAgdmFyIHByb3BlcnR5ID0gdGhpcy5maW5kKGRlcGVuZHNPbik7XG4gICAgaWYgKCFwcm9wZXJ0eSkge1xuICAgICAgcHJvcGVydHkgPSBTZXJpYWxpemVyLmZpbmRQcm9wZXJ0eSh0aGlzLnBhcmVudE5hbWUsIGRlcGVuZHNPbik7XG4gICAgfVxuICAgIGlmICghcHJvcGVydHkpIHJldHVybjtcbiAgICBwcm9wZXJ0eS5hZGREZXBlbmRlZFByb3BlcnR5KHByb3AubmFtZSk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRJc1Byb3BlcnR5TmFtZVJlcXVpcmVkKHByb3BlcnR5TmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHByb3BlcnR5TmFtZS5sZW5ndGggPiAwICYmXG4gICAgICBwcm9wZXJ0eU5hbWVbMF0gPT0gSnNvbk1ldGFkYXRhQ2xhc3MucmVxdWlyZWRTeW1ib2xcbiAgICApO1xuICB9XG4gIHByaXZhdGUgZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuZ2V0SXNQcm9wZXJ0eU5hbWVSZXF1aXJlZChwcm9wZXJ0eU5hbWUpKSByZXR1cm4gcHJvcGVydHlOYW1lO1xuICAgIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZS5zbGljZSgxKTtcbiAgICByZXR1cm4gcHJvcGVydHlOYW1lO1xuICB9XG59XG5cbi8qKlxuICogVGhlIG1ldGFkYXRhIG9iamVjdC4gSXQgY29udGFpbnMgb2JqZWN0IHByb3BlcnRpZXMnIHJ1bnRpbWUgaW5mb3JtYXRpb24gYW5kIGFsbG93cyB5b3UgdG8gbW9kaWZ5IGl0LlxuICovXG5leHBvcnQgY2xhc3MgSnNvbk1ldGFkYXRhIHtcbiAgcHJpdmF0ZSBjbGFzc2VzOiBIYXNoVGFibGU8SnNvbk1ldGFkYXRhQ2xhc3M+ID0ge307XG4gIHByaXZhdGUgYWx0ZXJuYXRpdmVOYW1lczogSGFzaFRhYmxlPHN0cmluZz4gPSB7fTtcbiAgcHJpdmF0ZSBjaGlsZHJlbkNsYXNzZXM6IEhhc2hUYWJsZTxBcnJheTxKc29uTWV0YWRhdGFDbGFzcz4+ID0ge307XG4gIHByaXZhdGUgY2xhc3NQcm9wZXJ0aWVzOiBIYXNoVGFibGU8QXJyYXk8SnNvbk9iamVjdFByb3BlcnR5Pj4gPSB7fTtcbiAgcHJpdmF0ZSBjbGFzc0hhc2hQcm9wZXJ0aWVzOiBIYXNoVGFibGU8SGFzaFRhYmxlPEpzb25PYmplY3RQcm9wZXJ0eT4+ID0ge307XG4gIHB1YmxpYyBnZXRPYmpQcm9wZXJ0eVZhbHVlKG9iajogYW55LCBuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIGlmICh0aGlzLmlzT2JqV3JhcHBlcihvYmopKSB7XG4gICAgICB2YXIgb3JpZ25hbE9iaiA9IG9iai5nZXRPcmlnaW5hbE9iaigpO1xuICAgICAgdmFyIHByb3AgPSBTZXJpYWxpemVyLmZpbmRQcm9wZXJ0eShvcmlnbmFsT2JqLmdldFR5cGUoKSwgbmFtZSk7XG4gICAgICBpZiAoISFwcm9wKSByZXR1cm4gdGhpcy5nZXRPYmpQcm9wZXJ0eVZhbHVlQ29yZShvcmlnbmFsT2JqLCBwcm9wKTtcbiAgICB9XG4gICAgdmFyIHByb3AgPSBTZXJpYWxpemVyLmZpbmRQcm9wZXJ0eShvYmouZ2V0VHlwZSgpLCBuYW1lKTtcbiAgICBpZiAoIXByb3ApIHJldHVybiBvYmpbbmFtZV07XG4gICAgcmV0dXJuIHRoaXMuZ2V0T2JqUHJvcGVydHlWYWx1ZUNvcmUob2JqLCBwcm9wKTtcbiAgfVxuICBwdWJsaWMgc2V0T2JqUHJvcGVydHlWYWx1ZShvYmo6IGFueSwgbmFtZTogc3RyaW5nLCB2YWw6IGFueSkge1xuICAgIGlmIChvYmpbbmFtZV0gPT09IHZhbCkgcmV0dXJuO1xuICAgIGlmICghIW9ialtuYW1lXSAmJiAhIW9ialtuYW1lXS5zZXRKc29uKSB7XG4gICAgICBvYmpbbmFtZV0uc2V0SnNvbih2YWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmpbbmFtZV0gPSB2YWw7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0T2JqUHJvcGVydHlWYWx1ZUNvcmUob2JqOiBhbnksIHByb3A6IEpzb25PYmplY3RQcm9wZXJ0eSk6IGFueSB7XG4gICAgaWYgKCFwcm9wLmlzU2VyaWFsaXphYmxlKSByZXR1cm4gb2JqW3Byb3AubmFtZV07XG4gICAgaWYgKHByb3AuaXNMb2NhbGl6YWJsZSkge1xuICAgICAgaWYgKHByb3AuaXNBcnJheSkgcmV0dXJuIG9ialtwcm9wLm5hbWVdO1xuICAgICAgaWYgKCEhcHJvcC5zZXJpYWxpemF0aW9uUHJvcGVydHkpXG4gICAgICAgIHJldHVybiBvYmpbcHJvcC5zZXJpYWxpemF0aW9uUHJvcGVydHldLnRleHQ7XG4gICAgfVxuICAgIHJldHVybiBvYmouZ2V0UHJvcGVydHlWYWx1ZShwcm9wLm5hbWUpO1xuICB9XG4gIHByaXZhdGUgaXNPYmpXcmFwcGVyKG9iajogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhb2JqLmdldE9yaWdpbmFsT2JqICYmICEhb2JqLmdldE9yaWdpbmFsT2JqKCk7XG4gIH1cbiAgcHVibGljIGFkZENsYXNzKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBwcm9wZXJ0aWVzOiBBcnJheTxhbnk+LFxuICAgIGNyZWF0b3I6IChqc29uPzogYW55KSA9PiBhbnkgPSBudWxsLFxuICAgIHBhcmVudE5hbWU6IHN0cmluZyA9IG51bGxcbiAgKTogSnNvbk1ldGFkYXRhQ2xhc3Mge1xuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIG1ldGFEYXRhQ2xhc3MgPSBuZXcgSnNvbk1ldGFkYXRhQ2xhc3MoXG4gICAgICBuYW1lLFxuICAgICAgcHJvcGVydGllcyxcbiAgICAgIGNyZWF0b3IsXG4gICAgICBwYXJlbnROYW1lXG4gICAgKTtcbiAgICB0aGlzLmNsYXNzZXNbbmFtZV0gPSBtZXRhRGF0YUNsYXNzO1xuICAgIGlmIChwYXJlbnROYW1lKSB7XG4gICAgICBwYXJlbnROYW1lID0gcGFyZW50TmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbkNsYXNzZXNbcGFyZW50TmFtZV07XG4gICAgICBpZiAoIWNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW5DbGFzc2VzW3BhcmVudE5hbWVdID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLmNoaWxkcmVuQ2xhc3Nlc1twYXJlbnROYW1lXS5wdXNoKG1ldGFEYXRhQ2xhc3MpO1xuICAgIH1cbiAgICByZXR1cm4gbWV0YURhdGFDbGFzcztcbiAgfVxuICBwdWJsaWMgcmVtb3ZlQ2xhc3MobmFtZTogc3RyaW5nKSB7XG4gICAgdmFyIG1ldGFDbGFzcyA9IHRoaXMuZmluZENsYXNzKG5hbWUpO1xuICAgIGlmICghbWV0YUNsYXNzKSByZXR1cm47XG4gICAgZGVsZXRlIHRoaXMuY2xhc3Nlc1ttZXRhQ2xhc3MubmFtZV07XG4gICAgaWYgKCEhbWV0YUNsYXNzLnBhcmVudE5hbWUpIHtcbiAgICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGRyZW5DbGFzc2VzW21ldGFDbGFzcy5wYXJlbnROYW1lXS5pbmRleE9mKG1ldGFDbGFzcyk7XG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICB0aGlzLmNoaWxkcmVuQ2xhc3Nlc1ttZXRhQ2xhc3MucGFyZW50TmFtZV0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIG92ZXJyaWRlQ2xhc3NDcmVhdG9yZShuYW1lOiBzdHJpbmcsIGNyZWF0b3I6ICgpID0+IGFueSkge1xuICAgIHRoaXMub3ZlcnJpZGVDbGFzc0NyZWF0b3IobmFtZSwgY3JlYXRvcik7XG4gIH1cbiAgcHVibGljIG92ZXJyaWRlQ2xhc3NDcmVhdG9yKG5hbWU6IHN0cmluZywgY3JlYXRvcjogKCkgPT4gYW55KSB7XG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgbWV0YURhdGFDbGFzcyA9IHRoaXMuZmluZENsYXNzKG5hbWUpO1xuICAgIGlmIChtZXRhRGF0YUNsYXNzKSB7XG4gICAgICBtZXRhRGF0YUNsYXNzLmNyZWF0b3IgPSBjcmVhdG9yO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0UHJvcGVydGllcyhjbGFzc05hbWU6IHN0cmluZyk6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4ge1xuICAgIHZhciBtZXRhQ2xhc3MgPSB0aGlzLmZpbmRDbGFzcyhjbGFzc05hbWUpO1xuICAgIGlmICghbWV0YUNsYXNzKSByZXR1cm4gW107XG4gICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmNsYXNzUHJvcGVydGllc1ttZXRhQ2xhc3MubmFtZV07XG4gICAgaWYgKCEhcHJvcGVydGllcykgcmV0dXJuIHByb3BlcnRpZXM7XG4gICAgdGhpcy5maWxsUHJvcGVydGllc0ZvckNsYXNzKG1ldGFDbGFzcy5uYW1lKTtcbiAgICByZXR1cm4gdGhpcy5jbGFzc1Byb3BlcnRpZXNbbWV0YUNsYXNzLm5hbWVdO1xuICB9XG4gIHByaXZhdGUgZ2V0SGFzaFByb3BlcnRpZXMoY2xhc3NOYW1lOiBzdHJpbmcpOiBIYXNoVGFibGU8SnNvbk9iamVjdFByb3BlcnR5PiB7XG4gICAgdmFyIG1ldGFDbGFzcyA9IHRoaXMuZmluZENsYXNzKGNsYXNzTmFtZSk7XG4gICAgaWYgKCFtZXRhQ2xhc3MpIHJldHVybiB7fTtcbiAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuY2xhc3NIYXNoUHJvcGVydGllc1ttZXRhQ2xhc3MubmFtZV07XG4gICAgaWYgKCEhcHJvcGVydGllcykgcmV0dXJuIHByb3BlcnRpZXM7XG4gICAgdGhpcy5maWxsUHJvcGVydGllc0ZvckNsYXNzKG1ldGFDbGFzcy5uYW1lKTtcbiAgICByZXR1cm4gdGhpcy5jbGFzc0hhc2hQcm9wZXJ0aWVzW21ldGFDbGFzcy5uYW1lXTtcbiAgfVxuICBwcml2YXRlIGZpbGxQcm9wZXJ0aWVzRm9yQ2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcpIHtcbiAgICB2YXIgcHJvcGVydGllcyA9IG5ldyBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+KCk7XG4gICAgdmFyIGhhc2hQcm9wZXJ0aWVzID0ge307XG4gICAgdGhpcy5maWxsUHJvcGVydGllcyhjbGFzc05hbWUsIHByb3BlcnRpZXMsIGhhc2hQcm9wZXJ0aWVzKTtcbiAgICB0aGlzLmNsYXNzUHJvcGVydGllc1tjbGFzc05hbWVdID0gcHJvcGVydGllcztcbiAgICB0aGlzLmNsYXNzSGFzaFByb3BlcnRpZXNbY2xhc3NOYW1lXSA9IGhhc2hQcm9wZXJ0aWVzO1xuICB9XG4gIHB1YmxpYyBnZXRQcm9wZXJ0aWVzQnlPYmoob2JqOiBhbnkpOiBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+IHtcbiAgICBpZiAoIW9iaiB8fCAhb2JqLmdldFR5cGUpIHJldHVybiBbXTtcbiAgICB2YXIgcmVzOiBhbnkgPSB7fTtcbiAgICB2YXIgcHJvcHMgPSB0aGlzLmdldFByb3BlcnRpZXMob2JqLmdldFR5cGUoKSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzW3Byb3BzW2ldLm5hbWVdID0gcHJvcHNbaV07XG4gICAgfVxuICAgIHZhciBkeW5hbWljUHJvcHMgPSAhIW9iai5nZXREeW5hbWljVHlwZVxuICAgICAgPyB0aGlzLmdldFByb3BlcnRpZXMob2JqLmdldER5bmFtaWNUeXBlKCkpXG4gICAgICA6IG51bGw7XG4gICAgaWYgKGR5bmFtaWNQcm9wcyAmJiBkeW5hbWljUHJvcHMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkeW5hbWljUHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IGRQcm9wID0gZHluYW1pY1Byb3BzW2ldO1xuICAgICAgICBpZiAoISFyZXNbZFByb3AubmFtZV0pIGNvbnRpbnVlO1xuICAgICAgICByZXNbZFByb3AubmFtZV0gPSBkUHJvcDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHJlcykubWFwKChrZXkpID0+IHJlc1trZXldKTtcbiAgfVxuICBwdWJsaWMgZ2V0RHluYW1pY1Byb3BlcnRpZXNCeU9iaihcbiAgICBvYmo6IGFueSxcbiAgICBkeW5hbWljVHlwZTogc3RyaW5nID0gbnVsbFxuICApOiBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+IHtcbiAgICBpZiAoIW9iaiB8fCAhb2JqLmdldFR5cGUgfHwgKCFvYmouZ2V0RHluYW1pY1R5cGUgJiYgIWR5bmFtaWNUeXBlKSlcbiAgICAgIHJldHVybiBbXTtcbiAgICB2YXIgZFR5cGUgPSAhIWR5bmFtaWNUeXBlID8gZHluYW1pY1R5cGUgOiBvYmouZ2V0RHluYW1pY1R5cGUoKTtcbiAgICBpZiAoIWRUeXBlKSByZXR1cm4gW107XG4gICAgdmFyIGR5bmFtaWNQcm9wcyA9IHRoaXMuZ2V0UHJvcGVydGllcyhkVHlwZSk7XG4gICAgaWYgKCFkeW5hbWljUHJvcHMgfHwgZHluYW1pY1Byb3BzLmxlbmd0aCA9PSAwKSByZXR1cm4gW107XG4gICAgdmFyIGhhc2g6IGFueSA9IHt9O1xuICAgIHZhciBwcm9wcyA9IHRoaXMuZ2V0UHJvcGVydGllcyhvYmouZ2V0VHlwZSgpKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBoYXNoW3Byb3BzW2ldLm5hbWVdID0gcHJvcHNbaV07XG4gICAgfVxuICAgIHZhciByZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGR5bmFtaWNQcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGRQcm9wID0gZHluYW1pY1Byb3BzW2ldO1xuICAgICAgaWYgKCFoYXNoW2RQcm9wLm5hbWVdKSB7XG4gICAgICAgIHJlcy5wdXNoKGRQcm9wKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgaGFzT3JpZ2luYWxQcm9wZXJ0eShvYmo6IEJhc2UsIHByb3BOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmdldE9yaWdpbmFsUHJvcGVydHkob2JqLCBwcm9wTmFtZSk7XG4gIH1cbiAgcHVibGljIGdldE9yaWdpbmFsUHJvcGVydHkob2JqOiBCYXNlLCBwcm9wTmFtZTogc3RyaW5nKTogSnNvbk9iamVjdFByb3BlcnR5IHtcbiAgICB2YXIgcmVzID0gdGhpcy5maW5kUHJvcGVydHkob2JqLmdldFR5cGUoKSwgcHJvcE5hbWUpO1xuICAgIGlmICghIXJlcykgcmV0dXJuIHJlcztcbiAgICBpZiAodGhpcy5pc09ialdyYXBwZXIob2JqKSlcbiAgICAgIHJldHVybiB0aGlzLmZpbmRQcm9wZXJ0eSgoPGFueT5vYmopLmdldE9yaWdpbmFsT2JqKCkuZ2V0VHlwZSgpLCBwcm9wTmFtZSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIGdldFByb3BlcnR5KFxuICAgIGNsYXNzTmFtZTogc3RyaW5nLFxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nXG4gICk6IEpzb25PYmplY3RQcm9wZXJ0eSB7XG4gICAgY29uc3QgcHJvcCA9IHRoaXMuZmluZFByb3BlcnR5KGNsYXNzTmFtZSwgcHJvcGVydHlOYW1lKTtcbiAgICBpZiAoIXByb3ApIHJldHVybiBwcm9wO1xuICAgIGNvbnN0IGNsYXNzSW5mbyA9IHRoaXMuZmluZENsYXNzKGNsYXNzTmFtZSk7XG4gICAgaWYgKHByb3AuY2xhc3NJbmZvID09PSBjbGFzc0luZm8pIHJldHVybiBwcm9wO1xuICAgIGNvbnN0IG5ld1Byb3AgPSBuZXcgSnNvbk9iamVjdFByb3BlcnR5KGNsYXNzSW5mbywgcHJvcGVydHlOYW1lLCBwcm9wLmlzUmVxdWlyZWQpO1xuICAgIG5ld1Byb3AubWVyZ2VXaXRoKHByb3ApO1xuICAgIGNsYXNzSW5mby5wcm9wZXJ0aWVzLnB1c2gobmV3UHJvcCk7XG4gICAgdGhpcy5lbXB0eUNsYXNzUHJvcGVydGllc0hhc2goY2xhc3NJbmZvKTtcbiAgICByZXR1cm4gbmV3UHJvcDtcbiAgfVxuICBwdWJsaWMgZmluZFByb3BlcnR5KFxuICAgIGNsYXNzTmFtZTogc3RyaW5nLFxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nXG4gICk6IEpzb25PYmplY3RQcm9wZXJ0eSB7XG4gICAgdmFyIGhhc2ggPSB0aGlzLmdldEhhc2hQcm9wZXJ0aWVzKGNsYXNzTmFtZSk7XG4gICAgdmFyIHJlcyA9IGhhc2hbcHJvcGVydHlOYW1lXTtcbiAgICByZXR1cm4gISFyZXMgPyByZXMgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBmaW5kUHJvcGVydGllcyhcbiAgICBjbGFzc05hbWU6IHN0cmluZyxcbiAgICBwcm9wZXJ0eU5hbWVzOiBBcnJheTxzdHJpbmc+XG4gICk6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4ge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgaGFzaCA9IHRoaXMuZ2V0SGFzaFByb3BlcnRpZXMoY2xhc3NOYW1lKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnR5TmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwcm9wID0gaGFzaFtwcm9wZXJ0eU5hbWVzW2ldXTtcbiAgICAgIGlmIChwcm9wKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHByb3ApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHB1YmxpYyBnZXRBbGxQcm9wZXJ0aWVzQnlOYW1lKFxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nXG4gICk6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4ge1xuICAgIHZhciByZXMgPSBuZXcgQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PigpO1xuICAgIHZhciBjbGFzc2VzID0gdGhpcy5nZXRBbGxDbGFzc2VzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2xhc3NJbmZvID0gdGhpcy5maW5kQ2xhc3MoY2xhc3Nlc1tpXSk7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNsYXNzSW5mby5wcm9wZXJ0aWVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChjbGFzc0luZm8ucHJvcGVydGllc1tqXS5uYW1lID09IHByb3BlcnR5TmFtZSkge1xuICAgICAgICAgIHJlcy5wdXNoKGNsYXNzSW5mby5wcm9wZXJ0aWVzW2pdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBnZXRBbGxDbGFzc2VzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHZhciByZXMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcy5jbGFzc2VzKSB7XG4gICAgICByZXMucHVzaChuYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgY3JlYXRlQ2xhc3MobmFtZTogc3RyaW5nLCBqc29uOiBhbnkgPSB1bmRlZmluZWQpOiBhbnkge1xuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIG1ldGFEYXRhQ2xhc3MgPSB0aGlzLmZpbmRDbGFzcyhuYW1lKTtcbiAgICBpZiAoIW1ldGFEYXRhQ2xhc3MpIHJldHVybiBudWxsO1xuICAgIGlmIChtZXRhRGF0YUNsYXNzLmNyZWF0b3IpIHJldHVybiBtZXRhRGF0YUNsYXNzLmNyZWF0b3IoanNvbik7XG4gICAgdmFyIHBhcmVudE5hbWUgPSBtZXRhRGF0YUNsYXNzLnBhcmVudE5hbWU7XG4gICAgd2hpbGUgKHBhcmVudE5hbWUpIHtcbiAgICAgIG1ldGFEYXRhQ2xhc3MgPSB0aGlzLmZpbmRDbGFzcyhwYXJlbnROYW1lKTtcbiAgICAgIGlmICghbWV0YURhdGFDbGFzcykgcmV0dXJuIG51bGw7XG4gICAgICBwYXJlbnROYW1lID0gbWV0YURhdGFDbGFzcy5wYXJlbnROYW1lO1xuICAgICAgaWYgKG1ldGFEYXRhQ2xhc3MuY3JlYXRvcilcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlQ3VzdG9tVHlwZShuYW1lLCBtZXRhRGF0YUNsYXNzLmNyZWF0b3IsIGpzb24pO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZUN1c3RvbVR5cGUoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGNyZWF0b3I6IGFueSxcbiAgICBqc29uOiBhbnkgPSB1bmRlZmluZWRcbiAgKTogYW55IHtcbiAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciByZXMgPSBjcmVhdG9yKGpzb24pO1xuICAgIHZhciBjdXN0b21UeXBlTmFtZSA9IG5hbWU7XG4gICAgdmFyIGN1c3RvbVRlbXBsYXRlTmFtZSA9IHJlcy5nZXRUZW1wbGF0ZVxuICAgICAgPyByZXMuZ2V0VGVtcGxhdGUoKVxuICAgICAgOiByZXMuZ2V0VHlwZSgpO1xuICAgIHJlcy5nZXRUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGN1c3RvbVR5cGVOYW1lO1xuICAgIH07XG4gICAgcmVzLmdldFRlbXBsYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGN1c3RvbVRlbXBsYXRlTmFtZTtcbiAgICB9O1xuICAgIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLmNyZWF0ZVByb3BlcnRpZXMocmVzKTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBnZXRDaGlsZHJlbkNsYXNzZXMoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGNhbkJlQ3JlYXRlZDogYm9vbGVhbiA9IGZhbHNlXG4gICk6IEFycmF5PEpzb25NZXRhZGF0YUNsYXNzPiB7XG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgcmVzdWx0OiBBcnJheTxKc29uTWV0YWRhdGFDbGFzcz4gPSBbXTtcbiAgICB0aGlzLmZpbGxDaGlsZHJlbkNsYXNzZXMobmFtZSwgY2FuQmVDcmVhdGVkLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHVibGljIGdldFJlcXVpcmVkUHJvcGVydGllcyhuYW1lOiBzdHJpbmcpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuZ2V0UHJvcGVydGllcyhuYW1lKTtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocHJvcGVydGllc1tpXS5pc1JlcXVpcmVkKSB7XG4gICAgICAgIHJlcy5wdXNoKHByb3BlcnRpZXNbaV0ubmFtZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGFkZFByb3BlcnRpZXMoY2xhc3NOYW1lOiBzdHJpbmcsIHByb3BlcnRpZXNJbmZvczogQXJyYXk8YW55Pikge1xuICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciBtZXRhRGF0YUNsYXNzID0gdGhpcy5maW5kQ2xhc3MoY2xhc3NOYW1lKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXNJbmZvcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5hZGRDdXN0b21Qcm9wZXJ0eUNvcmUobWV0YURhdGFDbGFzcywgcHJvcGVydGllc0luZm9zW2ldKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGFkZFByb3BlcnR5KGNsYXNzTmFtZTogc3RyaW5nLCBwcm9wZXJ0eUluZm86IGFueSk6IEpzb25PYmplY3RQcm9wZXJ0eSB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ3VzdG9tUHJvcGVydHlDb3JlKHRoaXMuZmluZENsYXNzKGNsYXNzTmFtZSksIHByb3BlcnR5SW5mbyk7XG4gIH1cbiAgcHJpdmF0ZSBhZGRDdXN0b21Qcm9wZXJ0eUNvcmUoXG4gICAgbWV0YURhdGFDbGFzczogSnNvbk1ldGFkYXRhQ2xhc3MsXG4gICAgcHJvcGVydHlJbmZvOiBhbnlcbiAgKTogSnNvbk9iamVjdFByb3BlcnR5IHtcbiAgICBpZiAoIW1ldGFEYXRhQ2xhc3MpIHJldHVybiBudWxsO1xuICAgIHZhciBwcm9wZXJ0eSA9IG1ldGFEYXRhQ2xhc3MuY3JlYXRlUHJvcGVydHkocHJvcGVydHlJbmZvKTtcbiAgICBpZiAocHJvcGVydHkpIHtcbiAgICAgIHByb3BlcnR5LmlzQ3VzdG9tID0gdHJ1ZTtcbiAgICAgIHRoaXMuYWRkUHJvcGVydHlUb0NsYXNzKG1ldGFEYXRhQ2xhc3MsIHByb3BlcnR5KTtcbiAgICAgIHRoaXMuZW1wdHlDbGFzc1Byb3BlcnRpZXNIYXNoKG1ldGFEYXRhQ2xhc3MpO1xuICAgICAgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24uYWRkUHJvcGVydHkobWV0YURhdGFDbGFzcy5uYW1lLCBwcm9wZXJ0eSk7XG4gICAgfVxuICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgfVxuICBwdWJsaWMgcmVtb3ZlUHJvcGVydHkoY2xhc3NOYW1lOiBzdHJpbmcsIHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XG4gICAgdmFyIG1ldGFEYXRhQ2xhc3MgPSB0aGlzLmZpbmRDbGFzcyhjbGFzc05hbWUpO1xuICAgIGlmICghbWV0YURhdGFDbGFzcykgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBwcm9wZXJ0eSA9IG1ldGFEYXRhQ2xhc3MuZmluZChwcm9wZXJ0eU5hbWUpO1xuICAgIGlmIChwcm9wZXJ0eSkge1xuICAgICAgdGhpcy5yZW1vdmVQcm9wZXJ0eUZyb21DbGFzcyhtZXRhRGF0YUNsYXNzLCBwcm9wZXJ0eSk7XG4gICAgICB0aGlzLmVtcHR5Q2xhc3NQcm9wZXJ0aWVzSGFzaChtZXRhRGF0YUNsYXNzKTtcbiAgICAgIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLnJlbW92ZVByb3BlcnR5KFxuICAgICAgICBtZXRhRGF0YUNsYXNzLm5hbWUsXG4gICAgICAgIHByb3BlcnR5TmFtZVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBhZGRQcm9wZXJ0eVRvQ2xhc3MoXG4gICAgbWV0YURhdGFDbGFzczogSnNvbk1ldGFkYXRhQ2xhc3MsXG4gICAgcHJvcGVydHk6IEpzb25PYmplY3RQcm9wZXJ0eVxuICApIHtcbiAgICBpZiAobWV0YURhdGFDbGFzcy5maW5kKHByb3BlcnR5Lm5hbWUpICE9IG51bGwpIHJldHVybjtcbiAgICBtZXRhRGF0YUNsYXNzLnByb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gIH1cbiAgcHJpdmF0ZSByZW1vdmVQcm9wZXJ0eUZyb21DbGFzcyhcbiAgICBtZXRhRGF0YUNsYXNzOiBKc29uTWV0YWRhdGFDbGFzcyxcbiAgICBwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5XG4gICkge1xuICAgIHZhciBpbmRleCA9IG1ldGFEYXRhQ2xhc3MucHJvcGVydGllcy5pbmRleE9mKHByb3BlcnR5KTtcbiAgICBpZiAoaW5kZXggPCAwKSByZXR1cm47XG4gICAgbWV0YURhdGFDbGFzcy5wcm9wZXJ0aWVzLnNwbGljZShpbmRleCwgMSk7XG4gIH1cbiAgcHJpdmF0ZSBlbXB0eUNsYXNzUHJvcGVydGllc0hhc2gobWV0YURhdGFDbGFzczogSnNvbk1ldGFkYXRhQ2xhc3MpIHtcbiAgICB0aGlzLmNsYXNzUHJvcGVydGllc1ttZXRhRGF0YUNsYXNzLm5hbWVdID0gbnVsbDtcbiAgICB0aGlzLmNsYXNzSGFzaFByb3BlcnRpZXNbbWV0YURhdGFDbGFzcy5uYW1lXSA9IG51bGw7XG4gICAgdmFyIGNoaWxkQ2xhc3NlcyA9IHRoaXMuZ2V0Q2hpbGRyZW5DbGFzc2VzKG1ldGFEYXRhQ2xhc3MubmFtZSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZENsYXNzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuY2xhc3NQcm9wZXJ0aWVzW2NoaWxkQ2xhc3Nlc1tpXS5uYW1lXSA9IG51bGw7XG4gICAgICB0aGlzLmNsYXNzSGFzaFByb3BlcnRpZXNbY2hpbGRDbGFzc2VzW2ldLm5hbWVdID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBmaWxsQ2hpbGRyZW5DbGFzc2VzKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjYW5CZUNyZWF0ZWQ6IGJvb2xlYW4sXG4gICAgcmVzdWx0OiBBcnJheTxKc29uTWV0YWRhdGFDbGFzcz5cbiAgKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbkNsYXNzZXNbbmFtZV07XG4gICAgaWYgKCFjaGlsZHJlbikgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghY2FuQmVDcmVhdGVkIHx8IGNoaWxkcmVuW2ldLmNyZWF0b3IpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goY2hpbGRyZW5baV0pO1xuICAgICAgfVxuICAgICAgdGhpcy5maWxsQ2hpbGRyZW5DbGFzc2VzKGNoaWxkcmVuW2ldLm5hbWUsIGNhbkJlQ3JlYXRlZCwgcmVzdWx0KTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGZpbmRDbGFzcyhuYW1lOiBzdHJpbmcpOiBKc29uTWV0YWRhdGFDbGFzcyB7XG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgcmVzID0gdGhpcy5jbGFzc2VzW25hbWVdO1xuICAgIGlmICghcmVzKSB7XG4gICAgICB2YXIgbmV3TmFtZSA9IHRoaXMuYWx0ZXJuYXRpdmVOYW1lc1tuYW1lXTtcbiAgICAgIGlmICghIW5ld05hbWUgJiYgbmV3TmFtZSAhPSBuYW1lKSByZXR1cm4gdGhpcy5maW5kQ2xhc3MobmV3TmFtZSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGlzRGVzY2VuZGFudE9mKGNsYXNzTmFtZTogc3RyaW5nLCBhbmNlc3RvckNsYXNzTmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCFjbGFzc05hbWUgfHwgIWFuY2VzdG9yQ2xhc3NOYW1lKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGFuY2VzdG9yQ2xhc3NOYW1lID0gYW5jZXN0b3JDbGFzc05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgY2xhc3NfID0gdGhpcy5maW5kQ2xhc3MoY2xhc3NOYW1lKTtcbiAgICBpZiAoIWNsYXNzXykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgcGFyZW50Q2xhc3MgPSBjbGFzc187XG4gICAgZG8ge1xuICAgICAgaWYgKHBhcmVudENsYXNzLm5hbWUgPT09IGFuY2VzdG9yQ2xhc3NOYW1lKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcGFyZW50Q2xhc3MgPSB0aGlzLmNsYXNzZXNbcGFyZW50Q2xhc3MucGFyZW50TmFtZV07XG4gICAgfSB3aGlsZSAoISFwYXJlbnRDbGFzcyk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBhZGRBbHRlck5hdGl2ZUNsYXNzTmFtZShuYW1lOiBzdHJpbmcsIGFsdGVybmF0aXZlTmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5hbHRlcm5hdGl2ZU5hbWVzW2FsdGVybmF0aXZlTmFtZS50b0xvd2VyQ2FzZSgpXSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgfVxuICBwdWJsaWMgZ2VuZXJhdGVTY2hlbWEoY2xhc3NOYW1lOiBzdHJpbmcgPSB1bmRlZmluZWQpOiBhbnkge1xuICAgIGlmICghY2xhc3NOYW1lKSBjbGFzc05hbWUgPSBcInN1cnZleVwiO1xuICAgIHZhciBjbGFzc0luZm8gPSB0aGlzLmZpbmRDbGFzcyhjbGFzc05hbWUpO1xuICAgIGlmICghY2xhc3NJbmZvKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgcmVzID0ge1xuICAgICAgJHNjaGVtYTogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA3L3NjaGVtYSNcIixcbiAgICAgIHRpdGxlOiBcIlN1cnZleUpTIExpYnJhcnkganNvbiBzY2hlbWFcIixcbiAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBwcm9wZXJ0aWVzOiB7fSxcbiAgICAgIGRlZmluaXRpb25zOiB7fSxcbiAgICB9O1xuICAgIHRoaXMuZ2VuZXJhdGVTY2hlbWFQcm9wZXJ0aWVzKGNsYXNzSW5mbywgcmVzLnByb3BlcnRpZXMsIHJlcy5kZWZpbml0aW9ucyk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGdlbmVyYXRlU2NoZW1hUHJvcGVydGllcyhcbiAgICBjbGFzc0luZm86IEpzb25NZXRhZGF0YUNsYXNzLFxuICAgIHNjaGVtYVByb3BlcnRpZXM6IGFueSxcbiAgICBzY2hlbWFEZWY6IGFueVxuICApOiB2b2lkIHtcbiAgICBpZiAoIWNsYXNzSW5mbykgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2xhc3NJbmZvLnByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwcm9wID0gY2xhc3NJbmZvLnByb3BlcnRpZXNbaV07XG4gICAgICBzY2hlbWFQcm9wZXJ0aWVzW3Byb3AubmFtZV0gPSB0aGlzLmdlbmVyYXRlU2NoZW1hUHJvcGVydHkoXG4gICAgICAgIHByb3AsXG4gICAgICAgIHNjaGVtYURlZlxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBnZW5lcmF0ZVNjaGVtYVByb3BlcnR5KFxuICAgIHByb3A6IEpzb25PYmplY3RQcm9wZXJ0eSxcbiAgICBzY2hlbWFEZWY6IGFueVxuICApOiBhbnkge1xuICAgIHZhciByZXM6IGFueSA9IHsgdHlwZTogcHJvcC5zY2hlbWFUeXBlKCkgfTtcbiAgICBpZiAocHJvcC5oYXNDaG9pY2VzKSB7XG4gICAgICByZXMuZW51bSA9IHByb3AuZ2V0Q2hvaWNlcyhudWxsKTtcbiAgICB9XG4gICAgaWYgKCEhcHJvcC5jbGFzc05hbWUpIHtcbiAgICAgIHJlcy5pdGVtcyA9IHsgJHJlZjogXCIjXCIgKyBwcm9wLmNsYXNzTmFtZSB9O1xuICAgICAgdGhpcy5nZW5lcmF0ZUNoZW1hQ2xhc3MocHJvcC5jbGFzc05hbWUsIHNjaGVtYURlZik7XG4gICAgfVxuICAgIGlmICghIXByb3AuYmFzZUNsYXNzTmFtZSkge1xuICAgICAgdmFyIHVzZWRDbGFzc2VzID0gdGhpcy5nZXRDaGlsZHJlbkNsYXNzZXMocHJvcC5iYXNlQ2xhc3NOYW1lLCB0cnVlKTtcbiAgICAgIGlmIChwcm9wLmJhc2VDbGFzc05hbWUgPT0gXCJxdWVzdGlvblwiKSB7XG4gICAgICAgIHVzZWRDbGFzc2VzLnB1c2godGhpcy5maW5kQ2xhc3MoXCJwYW5lbFwiKSk7XG4gICAgICB9XG4gICAgICByZXMuaXRlbXMgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdXNlZENsYXNzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNsYXNzTmFtZSA9IHVzZWRDbGFzc2VzW2ldLm5hbWU7XG4gICAgICAgIHJlcy5pdGVtcy5wdXNoKHsgJHJlZjogXCIjXCIgKyBjbGFzc05hbWUgfSk7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVDaGVtYUNsYXNzKGNsYXNzTmFtZSwgc2NoZW1hRGVmKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIGdlbmVyYXRlQ2hlbWFDbGFzcyhjbGFzc05hbWU6IHN0cmluZywgc2NoZW1hRGVmOiBhbnkpIHtcbiAgICBpZiAoISFzY2hlbWFEZWZbY2xhc3NOYW1lXSkgcmV0dXJuO1xuICAgIHZhciBjbGFzc0luZm8gPSB0aGlzLmZpbmRDbGFzcyhjbGFzc05hbWUpO1xuICAgIGlmICghY2xhc3NJbmZvKSByZXR1cm47XG4gICAgdmFyIGhhc1BhcmVudCA9ICEhY2xhc3NJbmZvLnBhcmVudE5hbWUgJiYgY2xhc3NJbmZvLnBhcmVudE5hbWUgIT0gXCJiYXNlXCI7XG4gICAgaWYgKGhhc1BhcmVudCkge1xuICAgICAgdGhpcy5nZW5lcmF0ZUNoZW1hQ2xhc3MoY2xhc3NJbmZvLnBhcmVudE5hbWUsIHNjaGVtYURlZik7XG4gICAgfVxuICAgIHZhciByZXM6IGFueSA9IHsgdHlwZTogXCJvYmplY3RcIiwgJGlkOiBcIiNcIiArIGNsYXNzTmFtZSB9O1xuICAgIHNjaGVtYURlZltjbGFzc05hbWVdID0gcmVzO1xuICAgIHZhciBwcm9wcyA9IHt9O1xuICAgIHRoaXMuZ2VuZXJhdGVTY2hlbWFQcm9wZXJ0aWVzKGNsYXNzSW5mbywgcHJvcHMsIHNjaGVtYURlZik7XG4gICAgaWYgKGhhc1BhcmVudCkge1xuICAgICAgcmVzLmFsbE9mZiA9IFtcbiAgICAgICAgeyAkcmVmOiBcIiNcIiArIGNsYXNzSW5mby5wYXJlbnROYW1lIH0sXG4gICAgICAgIHsgcHJvcGVydGllczogcHJvcHMgfSxcbiAgICAgIF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcy5wcm9wZXJ0aWVzID0gcHJvcHM7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZmlsbFByb3BlcnRpZXMoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGxpc3Q6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4sXG4gICAgaGFzaDogSGFzaFRhYmxlPEpzb25PYmplY3RQcm9wZXJ0eT5cbiAgKSB7XG4gICAgdmFyIG1ldGFEYXRhQ2xhc3MgPSB0aGlzLmZpbmRDbGFzcyhuYW1lKTtcbiAgICBpZiAoIW1ldGFEYXRhQ2xhc3MpIHJldHVybjtcbiAgICBpZiAobWV0YURhdGFDbGFzcy5wYXJlbnROYW1lKSB7XG4gICAgICB0aGlzLmZpbGxQcm9wZXJ0aWVzKG1ldGFEYXRhQ2xhc3MucGFyZW50TmFtZSwgbGlzdCwgaGFzaCk7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWV0YURhdGFDbGFzcy5wcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcHJvcCA9IG1ldGFEYXRhQ2xhc3MucHJvcGVydGllc1tpXTtcbiAgICAgIHRoaXMuYWRkUHJvcGVydHlDb3JlKHByb3AsIGxpc3QsIGhhc2gpO1xuICAgICAgaGFzaFtwcm9wLm5hbWVdID0gcHJvcDtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBhZGRQcm9wZXJ0eUNvcmUoXG4gICAgcHJvcGVydHk6IEpzb25PYmplY3RQcm9wZXJ0eSxcbiAgICBsaXN0OiBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+LFxuICAgIGhhc2g6IEhhc2hUYWJsZTxKc29uT2JqZWN0UHJvcGVydHk+XG4gICkge1xuICAgIGlmICghaGFzaFtwcm9wZXJ0eS5uYW1lXSkge1xuICAgICAgbGlzdC5wdXNoKHByb3BlcnR5KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGluZGV4ID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdFtpXS5uYW1lID09IHByb3BlcnR5Lm5hbWUpIHtcbiAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcHJvcGVydHkubWVyZ2VXaXRoKGxpc3RbaW5kZXhdKTtcbiAgICBsaXN0W2luZGV4XSA9IHByb3BlcnR5O1xuICB9XG59XG5leHBvcnQgY2xhc3MgSnNvbkVycm9yIHtcbiAgcHVibGljIGRlc2NyaXB0aW9uOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgYXQ6IE51bWJlciA9IC0xO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdHlwZTogc3RyaW5nLCBwdWJsaWMgbWVzc2FnZTogc3RyaW5nKSB7IH1cbiAgcHVibGljIGdldEZ1bGxEZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2UgKyAodGhpcy5kZXNjcmlwdGlvbiA/IFwiXFxuXCIgKyB0aGlzLmRlc2NyaXB0aW9uIDogXCJcIik7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBKc29uVW5rbm93blByb3BlcnR5RXJyb3IgZXh0ZW5kcyBKc29uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcHJvcGVydHlOYW1lOiBzdHJpbmcsIHB1YmxpYyBjbGFzc05hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgXCJ1bmtub3ducHJvcGVydHlcIixcbiAgICAgIFwiVGhlIHByb3BlcnR5ICdcIiArXG4gICAgICBwcm9wZXJ0eU5hbWUgK1xuICAgICAgXCInIGluIGNsYXNzICdcIiArXG4gICAgICBjbGFzc05hbWUgK1xuICAgICAgXCInIGlzIHVua25vd24uXCJcbiAgICApO1xuICAgIHZhciBwcm9wZXJ0aWVzID0gSnNvbk9iamVjdC5tZXRhRGF0YS5nZXRQcm9wZXJ0aWVzKGNsYXNzTmFtZSk7XG4gICAgaWYgKHByb3BlcnRpZXMpIHtcbiAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBcIlRoZSBsaXN0IG9mIGF2YWlsYWJsZSBwcm9wZXJ0aWVzIGFyZTogXCI7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGkgPiAwKSB0aGlzLmRlc2NyaXB0aW9uICs9IFwiLCBcIjtcbiAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiArPSBwcm9wZXJ0aWVzW2ldLm5hbWU7XG4gICAgICB9XG4gICAgICB0aGlzLmRlc2NyaXB0aW9uICs9IFwiLlwiO1xuICAgIH1cbiAgfVxufVxuZXhwb3J0IGNsYXNzIEpzb25NaXNzaW5nVHlwZUVycm9yQmFzZSBleHRlbmRzIEpzb25FcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBiYXNlQ2xhc3NOYW1lOiBzdHJpbmcsXG4gICAgcHVibGljIHR5cGU6IHN0cmluZyxcbiAgICBwdWJsaWMgbWVzc2FnZTogc3RyaW5nXG4gICkge1xuICAgIHN1cGVyKHR5cGUsIG1lc3NhZ2UpO1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBcIlRoZSBmb2xsb3dpbmcgdHlwZXMgYXJlIGF2YWlsYWJsZTogXCI7XG4gICAgdmFyIHR5cGVzID0gSnNvbk9iamVjdC5tZXRhRGF0YS5nZXRDaGlsZHJlbkNsYXNzZXMoYmFzZUNsYXNzTmFtZSwgdHJ1ZSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGkgPiAwKSB0aGlzLmRlc2NyaXB0aW9uICs9IFwiLCBcIjtcbiAgICAgIHRoaXMuZGVzY3JpcHRpb24gKz0gXCInXCIgKyB0eXBlc1tpXS5uYW1lICsgXCInXCI7XG4gICAgfVxuICAgIHRoaXMuZGVzY3JpcHRpb24gKz0gXCIuXCI7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBKc29uTWlzc2luZ1R5cGVFcnJvciBleHRlbmRzIEpzb25NaXNzaW5nVHlwZUVycm9yQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBwcm9wZXJ0eU5hbWU6IHN0cmluZywgcHVibGljIGJhc2VDbGFzc05hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgYmFzZUNsYXNzTmFtZSxcbiAgICAgIFwibWlzc2luZ3R5cGVwcm9wZXJ0eVwiLFxuICAgICAgXCJUaGUgcHJvcGVydHkgdHlwZSBpcyBtaXNzaW5nIGluIHRoZSBvYmplY3QuIFBsZWFzZSB0YWtlIGEgbG9vayBhdCBwcm9wZXJ0eTogJ1wiICtcbiAgICAgIHByb3BlcnR5TmFtZSArXG4gICAgICBcIicuXCJcbiAgICApO1xuICB9XG59XG5leHBvcnQgY2xhc3MgSnNvbkluY29ycmVjdFR5cGVFcnJvciBleHRlbmRzIEpzb25NaXNzaW5nVHlwZUVycm9yQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBwcm9wZXJ0eU5hbWU6IHN0cmluZywgcHVibGljIGJhc2VDbGFzc05hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgYmFzZUNsYXNzTmFtZSxcbiAgICAgIFwiaW5jb3JyZWN0dHlwZXByb3BlcnR5XCIsXG4gICAgICBcIlRoZSBwcm9wZXJ0eSB0eXBlIGlzIGluY29ycmVjdCBpbiB0aGUgb2JqZWN0LiBQbGVhc2UgdGFrZSBhIGxvb2sgYXQgcHJvcGVydHk6ICdcIiArXG4gICAgICBwcm9wZXJ0eU5hbWUgK1xuICAgICAgXCInLlwiXG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIEpzb25SZXF1aXJlZFByb3BlcnR5RXJyb3IgZXh0ZW5kcyBKc29uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcHJvcGVydHlOYW1lOiBzdHJpbmcsIHB1YmxpYyBjbGFzc05hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgXCJyZXF1aXJlZHByb3BlcnR5XCIsXG4gICAgICBcIlRoZSBwcm9wZXJ0eSAnXCIgK1xuICAgICAgcHJvcGVydHlOYW1lICtcbiAgICAgIFwiJyBpcyByZXF1aXJlZCBpbiBjbGFzcyAnXCIgK1xuICAgICAgY2xhc3NOYW1lICtcbiAgICAgIFwiJy5cIlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEpzb25PYmplY3Qge1xuICBwcml2YXRlIHN0YXRpYyB0eXBlUHJvcGVydHlOYW1lID0gXCJ0eXBlXCI7XG4gIHByaXZhdGUgc3RhdGljIHBvc2l0aW9uUHJvcGVydHlOYW1lID0gXCJwb3NcIjtcbiAgcHJpdmF0ZSBzdGF0aWMgbWV0YURhdGFWYWx1ZSA9IG5ldyBKc29uTWV0YWRhdGEoKTtcbiAgcHVibGljIHN0YXRpYyBnZXQgbWV0YURhdGEoKSB7XG4gICAgcmV0dXJuIEpzb25PYmplY3QubWV0YURhdGFWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZXJyb3JzID0gbmV3IEFycmF5PEpzb25FcnJvcj4oKTtcbiAgcHVibGljIGxpZ2h0U2VyaWFsaXppbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHRvSnNvbk9iamVjdChvYmo6IGFueSwgc3RvcmVEZWZhdWx0cyA9IGZhbHNlKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy50b0pzb25PYmplY3RDb3JlKG9iaiwgbnVsbCwgc3RvcmVEZWZhdWx0cyk7XG4gIH1cbiAgcHVibGljIHRvT2JqZWN0KGpzb25PYmo6IGFueSwgb2JqOiBhbnkpIHtcbiAgICB0aGlzLnRvT2JqZWN0Q29yZShqc29uT2JqLCBvYmopO1xuICAgIHZhciBlcnJvciA9IHRoaXMuZ2V0UmVxdWlyZWRFcnJvcihvYmosIGpzb25PYmopO1xuICAgIGlmICghIWVycm9yKSB7XG4gICAgICB0aGlzLmFkZE5ld0Vycm9yKGVycm9yLCBqc29uT2JqKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIHRvT2JqZWN0Q29yZShqc29uT2JqOiBhbnksIG9iajogYW55KSB7XG4gICAgaWYgKCFqc29uT2JqKSByZXR1cm47XG4gICAgdmFyIHByb3BlcnRpZXMgPSBudWxsO1xuICAgIHZhciBvYmpUeXBlID0gdW5kZWZpbmVkO1xuICAgIHZhciBuZWVkQWRkRXJyb3JzID0gdHJ1ZTtcbiAgICBpZiAob2JqLmdldFR5cGUpIHtcbiAgICAgIG9ialR5cGUgPSBvYmouZ2V0VHlwZSgpO1xuICAgICAgcHJvcGVydGllcyA9IEpzb25PYmplY3QubWV0YURhdGEuZ2V0UHJvcGVydGllcyhvYmpUeXBlKTtcbiAgICAgIG5lZWRBZGRFcnJvcnMgPVxuICAgICAgICAhIW9ialR5cGUgJiYgIUpzb25PYmplY3QubWV0YURhdGEuaXNEZXNjZW5kYW50T2Yob2JqVHlwZSwgXCJpdGVtdmFsdWVcIik7XG4gICAgfVxuICAgIGlmICghcHJvcGVydGllcykgcmV0dXJuO1xuICAgIGlmIChvYmouc3RhcnRMb2FkaW5nRnJvbUpzb24pIHtcbiAgICAgIG9iai5zdGFydExvYWRpbmdGcm9tSnNvbigpO1xuICAgIH1cbiAgICBwcm9wZXJ0aWVzID0gdGhpcy5hZGREeW5hbWljUHJvcGVydGllcyhvYmosIGpzb25PYmosIHByb3BlcnRpZXMpO1xuICAgIGZvciAodmFyIGtleSBpbiBqc29uT2JqKSB7XG4gICAgICBpZiAoa2V5ID09PSBKc29uT2JqZWN0LnR5cGVQcm9wZXJ0eU5hbWUpIGNvbnRpbnVlO1xuICAgICAgaWYgKGtleSA9PT0gSnNvbk9iamVjdC5wb3NpdGlvblByb3BlcnR5TmFtZSkge1xuICAgICAgICBvYmpba2V5XSA9IGpzb25PYmpba2V5XTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcGVydHkgPSB0aGlzLmZpbmRQcm9wZXJ0eShwcm9wZXJ0aWVzLCBrZXkpO1xuICAgICAgaWYgKCFwcm9wZXJ0eSkge1xuICAgICAgICBpZiAobmVlZEFkZEVycm9ycykge1xuICAgICAgICAgIHRoaXMuYWRkTmV3RXJyb3IoXG4gICAgICAgICAgICBuZXcgSnNvblVua25vd25Qcm9wZXJ0eUVycm9yKGtleS50b1N0cmluZygpLCBvYmpUeXBlKSxcbiAgICAgICAgICAgIGpzb25PYmpcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdGhpcy52YWx1ZVRvT2JqKGpzb25PYmpba2V5XSwgb2JqLCBwcm9wZXJ0eSk7XG4gICAgfVxuICAgIGlmIChvYmouZW5kTG9hZGluZ0Zyb21Kc29uKSB7XG4gICAgICBvYmouZW5kTG9hZGluZ0Zyb21Kc29uKCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyB0b0pzb25PYmplY3RDb3JlKFxuICAgIG9iajogYW55LFxuICAgIHByb3BlcnR5OiBKc29uT2JqZWN0UHJvcGVydHksXG4gICAgc3RvcmVEZWZhdWx0cyA9IGZhbHNlXG4gICk6IGFueSB7XG4gICAgaWYgKCFvYmogfHwgIW9iai5nZXRUeXBlKSByZXR1cm4gb2JqO1xuICAgIGlmICh0eXBlb2Ygb2JqLmdldERhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIG9iai5nZXREYXRhKCk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChwcm9wZXJ0eSAhPSBudWxsICYmICFwcm9wZXJ0eS5jbGFzc05hbWUpIHtcbiAgICAgICg8YW55PnJlc3VsdClbSnNvbk9iamVjdC50eXBlUHJvcGVydHlOYW1lXSA9IHByb3BlcnR5LmdldE9ialR5cGUoXG4gICAgICAgIG9iai5nZXRUeXBlKClcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMucHJvcGVydGllc1RvSnNvbihcbiAgICAgIG9iaixcbiAgICAgIEpzb25PYmplY3QubWV0YURhdGEuZ2V0UHJvcGVydGllcyhvYmouZ2V0VHlwZSgpKSxcbiAgICAgIHJlc3VsdCxcbiAgICAgIHN0b3JlRGVmYXVsdHNcbiAgICApO1xuICAgIHRoaXMucHJvcGVydGllc1RvSnNvbihcbiAgICAgIG9iaixcbiAgICAgIHRoaXMuZ2V0RHluYW1pY1Byb3BlcnRpZXMob2JqKSxcbiAgICAgIHJlc3VsdCxcbiAgICAgIHN0b3JlRGVmYXVsdHNcbiAgICApO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHJpdmF0ZSBnZXREeW5hbWljUHJvcGVydGllcyhvYmo6IGFueSk6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4ge1xuICAgIHJldHVybiBTZXJpYWxpemVyLmdldER5bmFtaWNQcm9wZXJ0aWVzQnlPYmoob2JqKTtcbiAgfVxuICBwcml2YXRlIGFkZER5bmFtaWNQcm9wZXJ0aWVzKFxuICAgIG9iajogYW55LFxuICAgIGpzb25PYmo6IGFueSxcbiAgICBwcm9wZXJ0aWVzOiBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+XG4gICk6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4ge1xuICAgIGlmICghb2JqLmdldER5bmFtaWNQcm9wZXJ0eU5hbWUpIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgIHZhciBkeW5hbWljUHJvcE5hbWUgPSBvYmouZ2V0RHluYW1pY1Byb3BlcnR5TmFtZSgpO1xuICAgIGlmICghZHluYW1pY1Byb3BOYW1lKSByZXR1cm4gcHJvcGVydGllcztcbiAgICBpZiAoanNvbk9ialtkeW5hbWljUHJvcE5hbWVdKSB7XG4gICAgICBvYmpbZHluYW1pY1Byb3BOYW1lXSA9IGpzb25PYmpbZHluYW1pY1Byb3BOYW1lXTtcbiAgICB9XG4gICAgdmFyIGR5bmFtaWNQcm9wZXJ0aWVzID0gdGhpcy5nZXREeW5hbWljUHJvcGVydGllcyhvYmopO1xuICAgIHZhciByZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlcy5wdXNoKHByb3BlcnRpZXNbaV0pO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGR5bmFtaWNQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXMucHVzaChkeW5hbWljUHJvcGVydGllc1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBwcm9wZXJ0aWVzVG9Kc29uKFxuICAgIG9iajogYW55LFxuICAgIHByb3BlcnRpZXM6IEFycmF5PEpzb25PYmplY3RQcm9wZXJ0eT4sXG4gICAganNvbjogYW55LFxuICAgIHN0b3JlRGVmYXVsdHMgPSBmYWxzZVxuICApIHtcbiAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy52YWx1ZVRvSnNvbihvYmosIGpzb24sIHByb3BlcnRpZXNbaV0sIHN0b3JlRGVmYXVsdHMpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgdmFsdWVUb0pzb24oXG4gICAgb2JqOiBhbnksXG4gICAgcmVzdWx0OiBhbnksXG4gICAgcHJvcGVydHk6IEpzb25PYmplY3RQcm9wZXJ0eSxcbiAgICBzdG9yZURlZmF1bHRzID0gZmFsc2VcbiAgKSB7XG4gICAgaWYgKFxuICAgICAgcHJvcGVydHkuaXNTZXJpYWxpemFibGUgPT09IGZhbHNlIHx8XG4gICAgICAocHJvcGVydHkuaXNMaWdodFNlcmlhbGl6YWJsZSA9PT0gZmFsc2UgJiYgdGhpcy5saWdodFNlcmlhbGl6aW5nKVxuICAgIClcbiAgICAgIHJldHVybjtcbiAgICB2YXIgdmFsdWUgPSBwcm9wZXJ0eS5nZXRWYWx1ZShvYmopO1xuICAgIGlmICghc3RvcmVEZWZhdWx0cyAmJiBwcm9wZXJ0eS5pc0RlZmF1bHRWYWx1ZSh2YWx1ZSkpIHJldHVybjtcbiAgICBpZiAodGhpcy5pc1ZhbHVlQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YXIgYXJyVmFsdWUgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYXJyVmFsdWUucHVzaCh0aGlzLnRvSnNvbk9iamVjdENvcmUodmFsdWVbaV0sIHByb3BlcnR5LCBzdG9yZURlZmF1bHRzKSk7XG4gICAgICB9XG4gICAgICB2YWx1ZSA9IGFyclZhbHVlLmxlbmd0aCA+IDAgPyBhcnJWYWx1ZSA6IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gdGhpcy50b0pzb25PYmplY3RDb3JlKHZhbHVlLCBwcm9wZXJ0eSwgc3RvcmVEZWZhdWx0cyk7XG4gICAgfVxuICAgIHZhciBoYXNWYWx1ZSA9XG4gICAgICB0eXBlb2Ygb2JqW1wiZ2V0UHJvcGVydHlWYWx1ZVwiXSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICBvYmpbXCJnZXRQcm9wZXJ0eVZhbHVlXCJdKHByb3BlcnR5Lm5hbWUsIG51bGwpICE9PSBudWxsO1xuICAgIGlmICgoc3RvcmVEZWZhdWx0cyAmJiBoYXNWYWx1ZSkgfHwgIXByb3BlcnR5LmlzRGVmYXVsdFZhbHVlKHZhbHVlKSkge1xuICAgICAgcmVzdWx0W3Byb3BlcnR5Lm5hbWVdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHB1YmxpYyB2YWx1ZVRvT2JqKHZhbHVlOiBhbnksIG9iajogYW55LCBwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5KSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybjtcbiAgICB0aGlzLnJlbW92ZVBvcyhwcm9wZXJ0eSwgdmFsdWUpO1xuICAgIGlmIChwcm9wZXJ0eSAhPSBudWxsICYmIHByb3BlcnR5Lmhhc1RvVXNlU2V0VmFsdWUpIHtcbiAgICAgIHByb3BlcnR5LnNldFZhbHVlKG9iaiwgdmFsdWUsIHRoaXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1ZhbHVlQXJyYXkodmFsdWUpKSB7XG4gICAgICB0aGlzLnZhbHVlVG9BcnJheSh2YWx1ZSwgb2JqLCBwcm9wZXJ0eS5uYW1lLCBwcm9wZXJ0eSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBuZXdPYmogPSB0aGlzLmNyZWF0ZU5ld09iaih2YWx1ZSwgcHJvcGVydHkpO1xuICAgIGlmIChuZXdPYmoubmV3T2JqKSB7XG4gICAgICB0aGlzLnRvT2JqZWN0Q29yZSh2YWx1ZSwgbmV3T2JqLm5ld09iaik7XG4gICAgICB2YWx1ZSA9IG5ld09iai5uZXdPYmo7XG4gICAgfVxuICAgIGlmICghbmV3T2JqLmVycm9yKSB7XG4gICAgICBpZiAocHJvcGVydHkgIT0gbnVsbCkge1xuICAgICAgICBwcm9wZXJ0eS5zZXRWYWx1ZShvYmosIHZhbHVlLCB0aGlzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ialtwcm9wZXJ0eS5uYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIHJlbW92ZVBvcyhwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5LCB2YWx1ZTogYW55KSB7XG4gICAgaWYgKCFwcm9wZXJ0eSB8fCAhcHJvcGVydHkudHlwZSB8fCBwcm9wZXJ0eS50eXBlLmluZGV4T2YoXCJ2YWx1ZVwiKSA8IDApXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5yZW1vdmVQb3NGcm9tT2JqKHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIHJlbW92ZVBvc0Zyb21PYmoob2JqOiBhbnkpIHtcbiAgICBpZiAoIW9iaikgcmV0dXJuO1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlUG9zRnJvbU9iaihvYmpbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoISFvYmpbSnNvbk9iamVjdC5wb3NpdGlvblByb3BlcnR5TmFtZV0pIHtcbiAgICAgIGRlbGV0ZSBvYmpbSnNvbk9iamVjdC5wb3NpdGlvblByb3BlcnR5TmFtZV07XG4gICAgfVxuICB9XG4gIHByaXZhdGUgaXNWYWx1ZUFycmF5KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVOZXdPYmoodmFsdWU6IGFueSwgcHJvcGVydHk6IEpzb25PYmplY3RQcm9wZXJ0eSk6IGFueSB7XG4gICAgdmFyIHJlc3VsdDogYW55ID0geyBuZXdPYmo6IG51bGwsIGVycm9yOiBudWxsIH07XG4gICAgdmFyIGNsYXNzTmFtZSA9IHZhbHVlW0pzb25PYmplY3QudHlwZVByb3BlcnR5TmFtZV07XG4gICAgaWYgKCFjbGFzc05hbWUgJiYgcHJvcGVydHkgIT0gbnVsbCAmJiBwcm9wZXJ0eS5jbGFzc05hbWUpIHtcbiAgICAgIGNsYXNzTmFtZSA9IHByb3BlcnR5LmNsYXNzTmFtZTtcbiAgICB9XG4gICAgY2xhc3NOYW1lID0gcHJvcGVydHkuZ2V0Q2xhc3NOYW1lKGNsYXNzTmFtZSk7XG4gICAgcmVzdWx0Lm5ld09iaiA9IGNsYXNzTmFtZVxuICAgICAgPyBKc29uT2JqZWN0Lm1ldGFEYXRhLmNyZWF0ZUNsYXNzKGNsYXNzTmFtZSwgdmFsdWUpXG4gICAgICA6IG51bGw7XG4gICAgcmVzdWx0LmVycm9yID0gdGhpcy5jaGVja05ld09iamVjdE9uRXJyb3JzKFxuICAgICAgcmVzdWx0Lm5ld09iaixcbiAgICAgIHZhbHVlLFxuICAgICAgcHJvcGVydHksXG4gICAgICBjbGFzc05hbWVcbiAgICApO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHJpdmF0ZSBjaGVja05ld09iamVjdE9uRXJyb3JzKFxuICAgIG5ld09iajogYW55LFxuICAgIHZhbHVlOiBhbnksXG4gICAgcHJvcGVydHk6IEpzb25PYmplY3RQcm9wZXJ0eSxcbiAgICBjbGFzc05hbWU6IHN0cmluZ1xuICApOiBKc29uRXJyb3Ige1xuICAgIHZhciBlcnJvciA9IG51bGw7XG4gICAgaWYgKG5ld09iaikge1xuICAgICAgZXJyb3IgPSB0aGlzLmdldFJlcXVpcmVkRXJyb3IobmV3T2JqLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcm9wZXJ0eS5iYXNlQ2xhc3NOYW1lKSB7XG4gICAgICAgIGlmICghY2xhc3NOYW1lKSB7XG4gICAgICAgICAgZXJyb3IgPSBuZXcgSnNvbk1pc3NpbmdUeXBlRXJyb3IoXG4gICAgICAgICAgICBwcm9wZXJ0eS5uYW1lLFxuICAgICAgICAgICAgcHJvcGVydHkuYmFzZUNsYXNzTmFtZVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXJyb3IgPSBuZXcgSnNvbkluY29ycmVjdFR5cGVFcnJvcihcbiAgICAgICAgICAgIHByb3BlcnR5Lm5hbWUsXG4gICAgICAgICAgICBwcm9wZXJ0eS5iYXNlQ2xhc3NOYW1lXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIHRoaXMuYWRkTmV3RXJyb3IoZXJyb3IsIHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGVycm9yO1xuICB9XG4gIHByaXZhdGUgZ2V0UmVxdWlyZWRFcnJvcihvYmo6IGFueSwganNvblZhbHVlOiBhbnkpOiBKc29uRXJyb3Ige1xuICAgIGlmICghb2JqLmdldFR5cGUgfHwgdHlwZW9mIG9iai5nZXREYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBudWxsO1xuICAgIHZhciBjbGFzc05hbWUgPSBvYmouZ2V0VHlwZSgpO1xuICAgIHZhciByZXF1aXJlZFByb3BlcnRpZXMgPSBKc29uT2JqZWN0Lm1ldGFEYXRhLmdldFJlcXVpcmVkUHJvcGVydGllcyhcbiAgICAgIGNsYXNzTmFtZVxuICAgICk7XG4gICAgaWYgKCFyZXF1aXJlZFByb3BlcnRpZXMpIHJldHVybiBudWxsO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVxdWlyZWRQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIWpzb25WYWx1ZVtyZXF1aXJlZFByb3BlcnRpZXNbaV1dKSB7XG4gICAgICAgIHJldHVybiBuZXcgSnNvblJlcXVpcmVkUHJvcGVydHlFcnJvcihyZXF1aXJlZFByb3BlcnRpZXNbaV0sIGNsYXNzTmFtZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByaXZhdGUgYWRkTmV3RXJyb3IoZXJyb3I6IEpzb25FcnJvciwganNvbk9iajogYW55KSB7XG4gICAgaWYgKGpzb25PYmogJiYganNvbk9ialtKc29uT2JqZWN0LnBvc2l0aW9uUHJvcGVydHlOYW1lXSkge1xuICAgICAgZXJyb3IuYXQgPSBqc29uT2JqW0pzb25PYmplY3QucG9zaXRpb25Qcm9wZXJ0eU5hbWVdLnN0YXJ0O1xuICAgIH1cbiAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yKTtcbiAgfVxuICBwcml2YXRlIHZhbHVlVG9BcnJheShcbiAgICB2YWx1ZTogQXJyYXk8YW55PixcbiAgICBvYmo6IGFueSxcbiAgICBrZXk6IGFueSxcbiAgICBwcm9wZXJ0eTogSnNvbk9iamVjdFByb3BlcnR5XG4gICkge1xuICAgIGlmIChvYmpba2V5XSAmJiB2YWx1ZS5sZW5ndGggPiAwKSBvYmpba2V5XS5zcGxpY2UoMCwgb2JqW2tleV0ubGVuZ3RoKTtcbiAgICB2YXIgdmFsdWVSZXMgPSBvYmpba2V5XSA/IG9ialtrZXldIDogW107XG4gICAgdGhpcy5hZGRWYWx1ZXNJbnRvQXJyYXkodmFsdWUsIHZhbHVlUmVzLCBwcm9wZXJ0eSk7XG4gICAgaWYgKCFvYmpba2V5XSkgb2JqW2tleV0gPSB2YWx1ZVJlcztcbiAgfVxuICBwcml2YXRlIGFkZFZhbHVlc0ludG9BcnJheShcbiAgICB2YWx1ZTogQXJyYXk8YW55PixcbiAgICByZXN1bHQ6IEFycmF5PGFueT4sXG4gICAgcHJvcGVydHk6IEpzb25PYmplY3RQcm9wZXJ0eVxuICApIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbmV3VmFsdWUgPSB0aGlzLmNyZWF0ZU5ld09iaih2YWx1ZVtpXSwgcHJvcGVydHkpO1xuICAgICAgaWYgKG5ld1ZhbHVlLm5ld09iaikge1xuICAgICAgICBpZiAoISF2YWx1ZVtpXS5uYW1lKSB7XG4gICAgICAgICAgbmV3VmFsdWUubmV3T2JqLm5hbWUgPSB2YWx1ZVtpXS5uYW1lO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5wdXNoKG5ld1ZhbHVlLm5ld09iaik7XG4gICAgICAgIHRoaXMudG9PYmplY3RDb3JlKHZhbHVlW2ldLCBuZXdWYWx1ZS5uZXdPYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFuZXdWYWx1ZS5lcnJvcikge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIGZpbmRQcm9wZXJ0eShcbiAgICBwcm9wZXJ0aWVzOiBBcnJheTxKc29uT2JqZWN0UHJvcGVydHk+LFxuICAgIGtleTogYW55XG4gICk6IEpzb25PYmplY3RQcm9wZXJ0eSB7XG4gICAgaWYgKCFwcm9wZXJ0aWVzKSByZXR1cm4gbnVsbDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwcm9wID0gcHJvcGVydGllc1tpXTtcbiAgICAgIGlmIChwcm9wLm5hbWUgPT0ga2V5IHx8IHByb3AuYWx0ZXJuYXRpdmVOYW1lID09IGtleSkgcmV0dXJuIHByb3A7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogQW4gYWxpYXMgZm9yIHRoZSBtZXRhZGF0YSBvYmplY3QuIEl0IGNvbnRhaW5zIG9iamVjdCBwcm9wZXJ0aWVzJyBydW50aW1lIGluZm9ybWF0aW9uIGFuZCBhbGxvd3MgeW91IHRvIG1vZGlmeSBpdC5cbiAqIEBzZWUgSnNvbk1ldGFkYXRhXG4gKi9cbmV4cG9ydCB2YXIgU2VyaWFsaXplciA9IEpzb25PYmplY3QubWV0YURhdGE7XG4iLCJpbXBvcnQgeyBwcm9wZXJ0eSwgcHJvcGVydHlBcnJheSB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHsgQWN0aW9uQ29udGFpbmVyIH0gZnJvbSBcIi4vYWN0aW9ucy9jb250YWluZXJcIjtcclxuaW1wb3J0IHsgQWN0aW9uLCBJQWN0aW9uIH0gZnJvbSBcIi4vYWN0aW9ucy9hY3Rpb25cIjtcclxuaW1wb3J0IHsgQ3NzQ2xhc3NCdWlsZGVyIH0gZnJvbSBcIi4vdXRpbHMvY3NzQ2xhc3NCdWlsZGVyXCI7XHJcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBMaXN0TW9kZWwgZXh0ZW5kcyBBY3Rpb25Db250YWluZXIge1xyXG4gIEBwcm9wZXJ0eSh7IGRlZmF1bHRWYWx1ZTogZmFsc2UgfSkgbmVlZEZpbHRlcjogYm9vbGVhbjtcclxuICBAcHJvcGVydHkoeyBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pIGlzRXhwYW5kZWQ6IGJvb2xlYW47XHJcbiAgQHByb3BlcnR5KCkgc2VsZWN0ZWRJdGVtOiBJQWN0aW9uO1xyXG4gIEBwcm9wZXJ0eSh7XHJcbiAgICBvblNldDogKF8sIHRhcmdldDogTGlzdE1vZGVsKSA9PiB7XHJcbiAgICAgIHRhcmdldC5maWx0ZXJCeVRleHQodGFyZ2V0LmZpbHRlcmVkVGV4dCk7XHJcbiAgICB9XHJcbiAgfSkgZmlsdGVyZWRUZXh0OiBzdHJpbmc7XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgSU5ERU5UOiBudW1iZXIgPSAxNjtcclxuICBwdWJsaWMgc3RhdGljIE1JTkVMRU1FTlRDT1VOVDogbnVtYmVyID0gMTA7XHJcblxyXG4gIHByaXZhdGUgaGFzVGV4dChpdGVtOiBBY3Rpb24sIGZpbHRlcmVkVGV4dEluTG93OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICghZmlsdGVyZWRUZXh0SW5Mb3cpIHJldHVybiB0cnVlO1xyXG4gICAgbGV0IHRleHRJbkxvdyA9IChpdGVtLnRpdGxlIHx8IFwiXCIpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XHJcbiAgICByZXR1cm4gdGV4dEluTG93LmluZGV4T2YoZmlsdGVyZWRUZXh0SW5Mb3cudG9Mb2NhbGVMb3dlckNhc2UoKSkgPiAtMTtcclxuICB9XHJcbiAgcHJpdmF0ZSB1cGRhdGVJdGVtVmlzaWJsZSh0ZXh0OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuYWN0aW9ucy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICBpdGVtLnZpc2libGUgPSB0aGlzLmhhc1RleHQoaXRlbSwgdGV4dCk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBmaWx0ZXJCeVRleHQodGV4dDogc3RyaW5nKSB7XHJcbiAgICBpZiAoIXRoaXMubmVlZEZpbHRlcikgcmV0dXJuO1xyXG5cclxuICAgIGlmICghIXRoaXMub25GaWx0ZXJlZFRleHRDaGFuZ2UpIHtcclxuICAgICAgdGhpcy5vbkZpbHRlcmVkVGV4dENoYW5nZSh0ZXh0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudXBkYXRlSXRlbVZpc2libGUodGV4dCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihpdGVtczogQXJyYXk8SUFjdGlvbj4sIHB1YmxpYyBvbkl0ZW1TZWxlY3Q6IChpdGVtOiBBY3Rpb24pID0+IHZvaWQsIHB1YmxpYyBhbGxvd1NlbGVjdGlvbjogYm9vbGVhbiwgc2VsZWN0ZWRJdGVtPzogSUFjdGlvbiwgcHJpdmF0ZSBvbkZpbHRlcmVkVGV4dENoYW5nZT86ICh0ZXh0OiBzdHJpbmcpID0+IHZvaWQpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLnNldEl0ZW1zKGl0ZW1zKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gc2VsZWN0ZWRJdGVtO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG9uU2V0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5uZWVkRmlsdGVyID0gKHRoaXMuYWN0aW9ucyB8fCBbXSkubGVuZ3RoID4gTGlzdE1vZGVsLk1JTkVMRU1FTlRDT1VOVDtcclxuICAgIHN1cGVyLm9uU2V0KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VsZWN0SXRlbSA9IChpdGVtVmFsdWU6IEFjdGlvbikgPT4ge1xyXG4gICAgdGhpcy5pc0V4cGFuZGVkID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5hbGxvd1NlbGVjdGlvbikge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IGl0ZW1WYWx1ZTtcclxuICAgIH1cclxuICAgIGlmICghIXRoaXMub25JdGVtU2VsZWN0KSB7XHJcbiAgICAgIHRoaXMub25JdGVtU2VsZWN0KGl0ZW1WYWx1ZSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgcHVibGljIGlzSXRlbURpc2FibGVkOiAoaXRlbVZhbHVlOiBBY3Rpb24pID0+IGJvb2xlYW4gPSAoaXRlbVZhbHVlOiBBY3Rpb24pID0+IHtcclxuICAgIHJldHVybiBpdGVtVmFsdWUuZW5hYmxlZCAhPT0gdW5kZWZpbmVkICYmICFpdGVtVmFsdWUuZW5hYmxlZDtcclxuICB9O1xyXG5cclxuICBwdWJsaWMgaXNJdGVtU2VsZWN0ZWQ6IChpdGVtVmFsdWU6IEFjdGlvbikgPT4gYm9vbGVhbiA9IChpdGVtVmFsdWU6IEFjdGlvbikgPT4ge1xyXG4gICAgcmV0dXJuICEhdGhpcy5hbGxvd1NlbGVjdGlvbiAmJiAhIXRoaXMuc2VsZWN0ZWRJdGVtICYmIHRoaXMuc2VsZWN0ZWRJdGVtLmlkID09IGl0ZW1WYWx1ZS5pZDtcclxuICB9O1xyXG5cclxuICBwdWJsaWMgZ2V0SXRlbUNsYXNzOiAoaXRlbVZhbHVlOiBBY3Rpb24pID0+IHN0cmluZyA9IChpdGVtVmFsdWU6IEFjdGlvbikgPT4ge1xyXG4gICAgcmV0dXJuIG5ldyBDc3NDbGFzc0J1aWxkZXIoKVxyXG4gICAgICAuYXBwZW5kKFwic3YtbGlzdF9faXRlbVwiKVxyXG4gICAgICAuYXBwZW5kKFwic3YtbGlzdF9faXRlbS0tZGlzYWJsZWRcIiwgdGhpcy5pc0l0ZW1EaXNhYmxlZChpdGVtVmFsdWUpKVxyXG4gICAgICAuYXBwZW5kKFwic3YtbGlzdF9faXRlbS0tc2VsZWN0ZWRcIiwgdGhpcy5pc0l0ZW1TZWxlY3RlZChpdGVtVmFsdWUpKVxyXG4gICAgICAudG9TdHJpbmcoKTtcclxuICB9O1xyXG5cclxuICBwdWJsaWMgZ2V0SXRlbUluZGVudCA9IChpdGVtVmFsdWU6IGFueSkgPT4ge1xyXG4gICAgY29uc3QgbGV2ZWw6IG51bWJlciA9IGl0ZW1WYWx1ZS5sZXZlbCB8fCAwO1xyXG4gICAgcmV0dXJuIChsZXZlbCArIDEpICogTGlzdE1vZGVsLklOREVOVCArIFwicHhcIjtcclxuICB9O1xyXG5cclxuICBwdWJsaWMgZ2V0IGZpbHRlcmVkVGV4dFBsYWNlaG9sZGVyKCkge1xyXG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJmaWx0ZXJlZFRleHRQbGFjZWhvbGRlclwiKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gPEVsZW1lbnQ+ZXZlbnQudGFyZ2V0O1xyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gXCJBcnJvd0Rvd25cIiB8fCBldmVudC5rZXlDb2RlID09PSA0MCkge1xyXG4gICAgICBpZiAoISFjdXJyZW50RWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcpIHtcclxuICAgICAgICAoPEhUTUxFbGVtZW50PmN1cnJlbnRFbGVtZW50Lm5leHRFbGVtZW50U2libGluZykuZm9jdXMoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjdXJyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkICYmICg8SFRNTEVsZW1lbnQ+Y3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZCkuZm9jdXMoKTtcclxuICAgICAgfVxyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09IFwiQXJyb3dVcFwiIHx8IGV2ZW50LmtleUNvZGUgPT09IDM4KSB7XHJcbiAgICAgIGlmICghIWN1cnJlbnRFbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpIHtcclxuICAgICAgICAoPEhUTUxFbGVtZW50PmN1cnJlbnRFbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmcpLmZvY3VzKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5sYXN0RWxlbWVudENoaWxkICYmICg8SFRNTEVsZW1lbnQ+Y3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5sYXN0RWxlbWVudENoaWxkKS5mb2N1cygpO1xyXG4gICAgICB9XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHB1YmxpYyByZWZyZXNoKCkge1xyXG4gICAgdGhpcy5maWx0ZXJlZFRleHQgPSBcIlwiO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xuaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElMb2NhbGl6YWJsZU93bmVyIHtcbiAgZ2V0TG9jYWxlKCk6IHN0cmluZztcbiAgZ2V0TWFya2Rvd25IdG1sKHRleHQ6IHN0cmluZywgbmFtZTogc3RyaW5nKTogc3RyaW5nO1xuICBnZXRQcm9jZXNzZWRUZXh0KHRleHQ6IHN0cmluZyk6IHN0cmluZztcbiAgZ2V0UmVuZGVyZXIobmFtZTogc3RyaW5nKTogc3RyaW5nO1xuICBnZXRSZW5kZXJlckNvbnRleHQobG9jU3RyOiBMb2NhbGl6YWJsZVN0cmluZyk6IGFueTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSUxvY2FsaXphYmxlU3RyaW5nIHtcbiAgZ2V0TG9jYWxlVGV4dChsb2M6IHN0cmluZyk6IHN0cmluZztcbiAgc2V0TG9jYWxlVGV4dChsb2M6IHN0cmluZywgbmV3VmFsdWU6IHN0cmluZyk6IGFueTtcbiAgZ2V0SnNvbigpOiBhbnk7XG4gIGdldExvY2FsZXMoKTogQXJyYXk8c3RyaW5nPjtcbiAgZ2V0SXNNdWx0aXBsZSgpOiBib29sZWFuO1xufVxuLyoqXG4gKiBUaGUgY2xhc3MgcmVwcmVzZW50cyB0aGUgc3RyaW5nIHRoYXQgc3VwcG9ydHMgbXVsdGktbGFuZ3VhZ2VzIGFuZCBtYXJrZG93bi5cbiAqIEl0IHVzZXMgaW4gYWxsIG9iamVjdHMgd2hlcmUgc3VwcG9ydCBmb3IgbXVsdGktbGFuZ3VhZ2VzIGFuZCBtYXJrZG93biBpcyByZXF1aXJlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIExvY2FsaXphYmxlU3RyaW5nIGltcGxlbWVudHMgSUxvY2FsaXphYmxlU3RyaW5nIHtcbiAgcHVibGljIHN0YXRpYyBTZXJpYWxpemVBc09iamVjdDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgc3RhdGljIGdldCBkZWZhdWx0TG9jYWxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHNldHRpbmdzLmRlZmF1bHRMb2NhbGVOYW1lO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgc2V0IGRlZmF1bHRMb2NhbGUodmFsOiBzdHJpbmcpIHtcbiAgICBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZSA9IHZhbDtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGRlZmF1bHRSZW5kZXJlciA9IFwic3Ytc3RyaW5nLXZpZXdlclwiO1xuICBwdWJsaWMgc3RhdGljIGVkaXRhYmxlUmVuZGVyZXIgPSBcInN2LXN0cmluZy1lZGl0b3JcIjtcbiAgcHJpdmF0ZSB2YWx1ZXMgPSB7fTtcbiAgcHJpdmF0ZSBodG1sVmFsdWVzID0ge307XG4gIHByaXZhdGUgcmVuZGVyZWRUZXh0OiBzdHJpbmc7XG4gIHByaXZhdGUgY2FsY3VsYXRlZFRleHRWYWx1ZTogc3RyaW5nO1xuICBwdWJsaWMgbG9jYWxpemF0aW9uTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgb25HZXRUZXh0Q2FsbGJhY2s6IChzdHI6IHN0cmluZykgPT4gc3RyaW5nO1xuICBwdWJsaWMgb25HZXREZWZhdWx0VGV4dENhbGxiYWNrOiAoKSA9PiBzdHJpbmc7XG4gIHB1YmxpYyBvblN0ckNoYW5nZWQ6IChvbGRWYWx1ZTogc3RyaW5nLCBuZXdWYWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICBwdWJsaWMgb25TZWFyY2hDaGFuZ2VkOiAoKSA9PiB2b2lkO1xuICBwdWJsaWMgc2hhcmVkRGF0YTogTG9jYWxpemFibGVTdHJpbmc7XG4gIHB1YmxpYyBzZWFyY2hUZXh0OiBzdHJpbmc7XG4gIHB1YmxpYyBzZWFyY2hJbmRleDogbnVtYmVyO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgb3duZXI6IElMb2NhbGl6YWJsZU93bmVyLFxuICAgIHB1YmxpYyB1c2VNYXJrZG93bjogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHB1YmxpYyBuYW1lPzogc3RyaW5nXG4gICkge1xuICAgIHRoaXMub25DcmVhdGluZygpO1xuICB9XG4gIHB1YmxpYyBnZXRJc011bHRpcGxlKCk6IGJvb2xlYW4geyByZXR1cm4gZmFsc2U7IH1cbiAgcHVibGljIGdldCBsb2NhbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMub3duZXIgJiYgdGhpcy5vd25lci5nZXRMb2NhbGUgPyB0aGlzLm93bmVyLmdldExvY2FsZSgpIDogXCJcIjtcbiAgfVxuICBwdWJsaWMgc3RyQ2hhbmdlZCgpIHtcbiAgICB0aGlzLnNlYXJjaGFibGVUZXh0ID0gdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLnJlbmRlcmVkVGV4dCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgdGhpcy5jYWxjdWxhdGVkVGV4dFZhbHVlID0gdGhpcy5jYWxjVGV4dCgpO1xuICAgIGlmICh0aGlzLnJlbmRlcmVkVGV4dCAhPT0gdGhpcy5jYWxjdWxhdGVkVGV4dFZhbHVlKSB7XG4gICAgICB0aGlzLnJlbmRlcmVkVGV4dCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuY2FsY3VsYXRlZFRleHRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5vbkNoYW5nZWQoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wdXJlVGV4dDtcbiAgfVxuICBwdWJsaWMgc2V0IHRleHQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxlVGV4dCh0aGlzLmxvY2FsZSwgdmFsdWUpO1xuICB9XG4gIHB1YmxpYyBnZXQgY2FsY3VsYXRlZFRleHQoKTogc3RyaW5nIHtcbiAgICB0aGlzLnJlbmRlcmVkVGV4dCA9XG4gICAgICB0aGlzLmNhbGN1bGF0ZWRUZXh0VmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHRoaXMuY2FsY3VsYXRlZFRleHRWYWx1ZVxuICAgICAgICA6IHRoaXMuY2FsY1RleHQoKTtcbiAgICB0aGlzLmNhbGN1bGF0ZWRUZXh0VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyZWRUZXh0O1xuICB9XG4gIHByaXZhdGUgY2FsY1RleHQoKTogc3RyaW5nIHtcbiAgICB2YXIgcmVzID0gdGhpcy5wdXJlVGV4dDtcbiAgICBpZiAoXG4gICAgICByZXMgJiZcbiAgICAgIHRoaXMub3duZXIgJiZcbiAgICAgIHRoaXMub3duZXIuZ2V0UHJvY2Vzc2VkVGV4dCAmJlxuICAgICAgcmVzLmluZGV4T2YoXCJ7XCIpID4gLTFcbiAgICApIHtcbiAgICAgIHJlcyA9IHRoaXMub3duZXIuZ2V0UHJvY2Vzc2VkVGV4dChyZXMpO1xuICAgIH1cbiAgICBpZiAodGhpcy5vbkdldFRleHRDYWxsYmFjaykgcmVzID0gdGhpcy5vbkdldFRleHRDYWxsYmFjayhyZXMpO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGdldCBwdXJlVGV4dCgpIHtcbiAgICB2YXIgbG9jID0gdGhpcy5sb2NhbGU7XG4gICAgaWYgKCFsb2MpIGxvYyA9IHNldHRpbmdzLmRlZmF1bHRMb2NhbGVOYW1lO1xuICAgIHZhciByZXMgPSB0aGlzLmdldFZhbHVlKGxvYyk7XG4gICAgaWYgKCFyZXMgJiYgbG9jID09IHNldHRpbmdzLmRlZmF1bHRMb2NhbGVOYW1lKSB7XG4gICAgICByZXMgPSB0aGlzLmdldFZhbHVlKHN1cnZleUxvY2FsaXphdGlvbi5kZWZhdWx0TG9jYWxlKTtcbiAgICB9XG4gICAgaWYgKCFyZXMgJiYgbG9jICE9PSBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZSkge1xuICAgICAgcmVzID0gdGhpcy5nZXRWYWx1ZShzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZSk7XG4gICAgfVxuICAgIGlmICghcmVzICYmICEhdGhpcy5sb2NhbGl6YXRpb25OYW1lKSB7XG4gICAgICByZXMgPSBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKHRoaXMubG9jYWxpemF0aW9uTmFtZSk7XG4gICAgfVxuICAgIGlmICghcmVzKSByZXMgPSBcIlwiO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGdldCBoYXNIdG1sKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc0h0bWxWYWx1ZSgpO1xuICB9XG4gIHB1YmxpYyBnZXQgaHRtbCgpIHtcbiAgICBpZiAoIXRoaXMuaGFzSHRtbCkgcmV0dXJuIFwiXCI7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SHRtbFZhbHVlKCk7XG4gIH1cbiAgcHVibGljIGdldCBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFZhbHVlc0tleXMoKS5sZW5ndGggPT0gMDtcbiAgfVxuICBwdWJsaWMgZ2V0IHRleHRPckh0bWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzSHRtbCA/IHRoaXMuZ2V0SHRtbFZhbHVlKCkgOiB0aGlzLmNhbGN1bGF0ZWRUZXh0O1xuICB9XG4gIHB1YmxpYyBnZXQgcmVuZGVyZWRIdG1sKCkge1xuICAgIHJldHVybiB0aGlzLnRleHRPckh0bWw7XG4gIH1cbiAgcHVibGljIGdldExvY2FsZVRleHQobG9jOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghbG9jKSBsb2MgPSBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZTtcbiAgICB2YXIgcmVzID0gdGhpcy5nZXRWYWx1ZShsb2MpO1xuICAgIHJldHVybiByZXMgPyByZXMgOiBcIlwiO1xuICB9XG4gIHByaXZhdGUgZ2V0TG9jYWxlVGV4dFdpdGhEZWZhdWx0KGxvYzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgcmVzID0gdGhpcy5nZXRMb2NhbGVUZXh0KGxvYyk7XG4gICAgaWYoIXJlcyAmJiB0aGlzLm9uR2V0RGVmYXVsdFRleHRDYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMub25HZXREZWZhdWx0VGV4dENhbGxiYWNrKCk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIHNldExvY2FsZVRleHQobG9jOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUgPT0gdGhpcy5nZXRMb2NhbGVUZXh0V2l0aERlZmF1bHQobG9jKSkgcmV0dXJuO1xuICAgIGlmIChcbiAgICAgIHZhbHVlICYmXG4gICAgICBsb2MgJiZcbiAgICAgIGxvYyAhPSBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZSAmJlxuICAgICAgIXRoaXMuZ2V0VmFsdWUobG9jKSAmJlxuICAgICAgdmFsdWUgPT0gdGhpcy5nZXRMb2NhbGVUZXh0KHNldHRpbmdzLmRlZmF1bHRMb2NhbGVOYW1lKVxuICAgIClcbiAgICAgIHJldHVybjtcbiAgICB2YXIgY3VyTG9jID0gdGhpcy5sb2NhbGU7XG4gICAgaWYgKCFsb2MpIGxvYyA9IHNldHRpbmdzLmRlZmF1bHRMb2NhbGVOYW1lO1xuICAgIGlmICghY3VyTG9jKSBjdXJMb2MgPSBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZTtcbiAgICB2YXIgaGFzT25TdHJDaGFuZ2VkID0gdGhpcy5vblN0ckNoYW5nZWQgJiYgbG9jID09PSBjdXJMb2M7XG4gICAgdmFyIG9sZFZhbHVlID0gaGFzT25TdHJDaGFuZ2VkID8gdGhpcy5wdXJlVGV4dCA6IHVuZGVmaW5lZDtcblxuICAgIGRlbGV0ZSAoPGFueT50aGlzKS5odG1sVmFsdWVzW2xvY107XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgaWYgKHRoaXMuZ2V0VmFsdWUobG9jKSkgdGhpcy5kZWxldGVWYWx1ZShsb2MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBsb2MgIT0gc2V0dGluZ3MuZGVmYXVsdExvY2FsZU5hbWUgJiZcbiAgICAgICAgICB2YWx1ZSA9PSB0aGlzLmdldExvY2FsZVRleHQoc2V0dGluZ3MuZGVmYXVsdExvY2FsZU5hbWUpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuc2V0TG9jYWxlVGV4dChsb2MsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2V0VmFsdWUobG9jLCB2YWx1ZSk7XG4gICAgICAgICAgaWYgKGxvYyA9PSBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5kZWxldGVWYWx1ZXNFcXVhbHNUb0RlZmF1bHQodmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnN0ckNoYW5nZWQoKTtcbiAgICBpZiAoaGFzT25TdHJDaGFuZ2VkKSB7XG4gICAgICB0aGlzLm9uU3RyQ2hhbmdlZChvbGRWYWx1ZSwgdmFsdWUpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgaGFzTm9uRGVmYXVsdFRleHQoKTogYm9vbGVhbiB7XG4gICAgdmFyIGtleXMgPSB0aGlzLmdldFZhbHVlc0tleXMoKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBrZXlzLmxlbmd0aCA+IDEgfHwga2V5c1swXSAhPSBzZXR0aW5ncy5kZWZhdWx0TG9jYWxlTmFtZTtcbiAgfVxuICBwdWJsaWMgZ2V0TG9jYWxlcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIga2V5cyA9IHRoaXMuZ2V0VmFsdWVzS2V5cygpO1xuICAgIGlmIChrZXlzLmxlbmd0aCA9PSAwKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGtleXM7XG4gIH1cbiAgcHVibGljIGdldEpzb24oKTogYW55IHtcbiAgICBpZiAoISF0aGlzLnNoYXJlZERhdGEpIHJldHVybiB0aGlzLnNoYXJlZERhdGEuZ2V0SnNvbigpO1xuICAgIHZhciBrZXlzID0gdGhpcy5nZXRWYWx1ZXNLZXlzKCk7XG4gICAgaWYgKGtleXMubGVuZ3RoID09IDApIHJldHVybiBudWxsO1xuICAgIGlmIChcbiAgICAgIGtleXMubGVuZ3RoID09IDEgJiZcbiAgICAgIGtleXNbMF0gPT0gc2V0dGluZ3MuZGVmYXVsdExvY2FsZU5hbWUgJiZcbiAgICAgICFzZXR0aW5ncy5zZXJpYWxpemVMb2NhbGl6YWJsZVN0cmluZ0FzT2JqZWN0XG4gICAgKVxuICAgICAgcmV0dXJuICg8YW55PnRoaXMpLnZhbHVlc1trZXlzWzBdXTtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXM7XG4gIH1cbiAgcHVibGljIHNldEpzb24odmFsdWU6IGFueSkge1xuICAgIGlmICghIXRoaXMuc2hhcmVkRGF0YSkge1xuICAgICAgdGhpcy5zaGFyZWREYXRhLnNldEpzb24odmFsdWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnZhbHVlcyA9IHt9O1xuICAgIHRoaXMuaHRtbFZhbHVlcyA9IHt9O1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aGlzLnNldExvY2FsZVRleHQobnVsbCwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgdGhpcy5zZXRMb2NhbGVUZXh0KGtleSwgdmFsdWVba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RyQ2hhbmdlZCgpO1xuICB9XG4gIHB1YmxpYyBnZXQgcmVuZGVyQXMoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMub3duZXIgfHwgdHlwZW9mIHRoaXMub3duZXIuZ2V0UmVuZGVyZXIgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIExvY2FsaXphYmxlU3RyaW5nLmRlZmF1bHRSZW5kZXJlcjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3duZXIuZ2V0UmVuZGVyZXIodGhpcy5uYW1lKSB8fCBMb2NhbGl6YWJsZVN0cmluZy5kZWZhdWx0UmVuZGVyZXI7XG4gIH1cbiAgcHVibGljIGdldCByZW5kZXJBc0RhdGEoKTogYW55IHtcbiAgICBpZiAoIXRoaXMub3duZXIgfHwgdHlwZW9mIHRoaXMub3duZXIuZ2V0UmVuZGVyZXJDb250ZXh0ICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vd25lci5nZXRSZW5kZXJlckNvbnRleHQodGhpcykgfHwgdGhpcztcbiAgfVxuICBwdWJsaWMgZXF1YWxzKG9iajogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCEhdGhpcy5zaGFyZWREYXRhKSByZXR1cm4gdGhpcy5zaGFyZWREYXRhLmVxdWFscyhvYmopO1xuICAgIGlmICghb2JqIHx8ICFvYmoudmFsdWVzKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIEhlbHBlcnMuaXNUd29WYWx1ZUVxdWFscyh0aGlzLnZhbHVlcywgb2JqLnZhbHVlcywgZmFsc2UsIHRydWUsIGZhbHNlKTtcbiAgfVxuICBwcml2YXRlIHNlYXJjaGFibGVUZXh0OiBzdHJpbmc7XG4gIHB1YmxpYyBzZXRGaW5kVGV4dCh0ZXh0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5zZWFyY2hUZXh0ID09IHRleHQpIHJldHVybjtcbiAgICB0aGlzLnNlYXJjaFRleHQgPSB0ZXh0O1xuICAgIGlmICghdGhpcy5zZWFyY2hhYmxlVGV4dCkge1xuICAgICAgbGV0IHRleHRPckh0bWwgPSB0aGlzLnRleHRPckh0bWw7XG4gICAgICB0aGlzLnNlYXJjaGFibGVUZXh0ID0gISF0ZXh0T3JIdG1sID8gdGV4dE9ySHRtbC50b0xvd2VyQ2FzZSgpIDogXCJcIjtcbiAgICB9XG4gICAgdmFyIHN0ciA9IHRoaXMuc2VhcmNoYWJsZVRleHQ7XG4gICAgdmFyIGluZGV4ID0gISFzdHIgJiYgISF0ZXh0ID8gc3RyLmluZGV4T2YodGV4dCkgOiB1bmRlZmluZWQ7XG4gICAgaWYgKGluZGV4IDwgMCkgaW5kZXggPSB1bmRlZmluZWQ7XG4gICAgaWYgKGluZGV4ICE9IHVuZGVmaW5lZCB8fCB0aGlzLnNlYXJjaEluZGV4ICE9IGluZGV4KSB7XG4gICAgICB0aGlzLnNlYXJjaEluZGV4ID0gaW5kZXg7XG4gICAgICBpZiAoISF0aGlzLm9uU2VhcmNoQ2hhbmdlZCkge1xuICAgICAgICB0aGlzLm9uU2VhcmNoQ2hhbmdlZCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zZWFyY2hJbmRleCAhPSB1bmRlZmluZWQ7XG4gIH1cbiAgcHVibGljIG9uQ2hhbmdlZCgpIHt9XG4gIHByb3RlY3RlZCBvbkNyZWF0aW5nKCkge31cbiAgcHJpdmF0ZSBoYXNIdG1sVmFsdWUoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLm93bmVyIHx8ICF0aGlzLnVzZU1hcmtkb3duKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHJlbmRlcmVkVGV4dCA9IHRoaXMuY2FsY3VsYXRlZFRleHQ7XG4gICAgaWYgKCFyZW5kZXJlZFRleHQpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgbG9jID0gdGhpcy5sb2NhbGU7XG4gICAgaWYgKCFsb2MpIGxvYyA9IHNldHRpbmdzLmRlZmF1bHRMb2NhbGVOYW1lO1xuICAgICg8YW55PnRoaXMpLmh0bWxWYWx1ZXNbbG9jXSA9IHRoaXMub3duZXIuZ2V0TWFya2Rvd25IdG1sKFxuICAgICAgcmVuZGVyZWRUZXh0LFxuICAgICAgdGhpcy5uYW1lXG4gICAgKTtcbiAgICByZXR1cm4gKDxhbnk+dGhpcykuaHRtbFZhbHVlc1tsb2NdID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXRIdG1sVmFsdWUoKTogc3RyaW5nIHtcbiAgICB2YXIgbG9jID0gdGhpcy5sb2NhbGU7XG4gICAgaWYgKCFsb2MpIGxvYyA9IHNldHRpbmdzLmRlZmF1bHRMb2NhbGVOYW1lO1xuICAgIHJldHVybiAoPGFueT50aGlzKS5odG1sVmFsdWVzW2xvY107XG4gIH1cbiAgcHJpdmF0ZSBkZWxldGVWYWx1ZXNFcXVhbHNUb0RlZmF1bHQoZGVmYXVsdFZhbHVlOiBzdHJpbmcpIHtcbiAgICB2YXIga2V5cyA9IHRoaXMuZ2V0VmFsdWVzS2V5cygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGtleXNbaV0gPT0gc2V0dGluZ3MuZGVmYXVsdExvY2FsZU5hbWUpIGNvbnRpbnVlO1xuICAgICAgaWYgKHRoaXMuZ2V0VmFsdWUoa2V5c1tpXSkgPT0gZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGVsZXRlVmFsdWUoa2V5c1tpXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0VmFsdWUobG9jOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghIXRoaXMuc2hhcmVkRGF0YSkgcmV0dXJuIHRoaXMuc2hhcmVkRGF0YS5nZXRWYWx1ZShsb2MpO1xuICAgIHJldHVybiAoPGFueT50aGlzKS52YWx1ZXNbbG9jXTtcbiAgfVxuICBwcml2YXRlIHNldFZhbHVlKGxvYzogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKCEhdGhpcy5zaGFyZWREYXRhKSB0aGlzLnNoYXJlZERhdGEuc2V0VmFsdWUobG9jLCB2YWx1ZSk7XG4gICAgZWxzZSAoPGFueT50aGlzKS52YWx1ZXNbbG9jXSA9IHZhbHVlO1xuICB9XG4gIHByaXZhdGUgZGVsZXRlVmFsdWUobG9jOiBzdHJpbmcpIHtcbiAgICBpZiAoISF0aGlzLnNoYXJlZERhdGEpIHRoaXMuc2hhcmVkRGF0YS5kZWxldGVWYWx1ZShsb2MpO1xuICAgIGVsc2UgZGVsZXRlICg8YW55PnRoaXMpLnZhbHVlc1tsb2NdO1xuICB9XG4gIHByaXZhdGUgZ2V0VmFsdWVzS2V5cygpOiBzdHJpbmdbXSB7XG4gICAgaWYgKCEhdGhpcy5zaGFyZWREYXRhKSByZXR1cm4gdGhpcy5zaGFyZWREYXRhLmdldFZhbHVlc0tleXMoKTtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy52YWx1ZXMpO1xuICB9XG59XG4vKipcbiAqIFRoZSBjbGFzcyByZXByZXNlbnRzIHRoZSBsaXN0IG9mIHN0cmluZ3MgdGhhdCBzdXBwb3J0cyBtdWx0aS1sYW5ndWFnZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBMb2NhbGl6YWJsZVN0cmluZ3MgaW1wbGVtZW50cyBJTG9jYWxpemFibGVTdHJpbmcge1xuICBwcml2YXRlIHZhbHVlczogYW55ID0ge307XG4gIHB1YmxpYyBvblZhbHVlQ2hhbmdlZDogKG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBhbnkpID0+IHZvaWQ7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBvd25lcjogSUxvY2FsaXphYmxlT3duZXIpIHt9XG4gIHB1YmxpYyBnZXRJc011bHRpcGxlKCk6IGJvb2xlYW4geyByZXR1cm4gdHJ1ZTsgfVxuICBwdWJsaWMgZ2V0IGxvY2FsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5vd25lciAmJiB0aGlzLm93bmVyLmdldExvY2FsZSA/IHRoaXMub3duZXIuZ2V0TG9jYWxlKCkgOiBcIlwiO1xuICB9XG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWUoXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCB2YWx1ZSh2YWw6IEFycmF5PHN0cmluZz4pIHtcbiAgICB0aGlzLnNldFZhbHVlKFwiXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCB0ZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgPyB0aGlzLnZhbHVlLmpvaW4oXCJcXG5cIikgOiBcIlwiO1xuICB9XG4gIHB1YmxpYyBzZXQgdGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSAhIXZhbCA/IHZhbC5zcGxpdChcIlxcblwiKSA6IFtdO1xuICB9XG4gIHB1YmxpYyBnZXRMb2NhbGVUZXh0KGxvYzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB2YXIgcmVzID0gdGhpcy5nZXRWYWx1ZUNvcmUobG9jLCAhbG9jIHx8IGxvYyA9PT0gdGhpcy5sb2NhbGUpO1xuICAgIGlmICghcmVzIHx8ICFBcnJheS5pc0FycmF5KHJlcykgfHwgcmVzLmxlbmd0aCA9PSAwKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gcmVzLmpvaW4oXCJcXG5cIik7XG4gIH1cbiAgcHVibGljIHNldExvY2FsZVRleHQobG9jOiBzdHJpbmcsIG5ld1ZhbHVlOiBzdHJpbmcpOiBhbnkge1xuICAgIHZhciB2YWwgPSAhIW5ld1ZhbHVlID8gbmV3VmFsdWUuc3BsaXQoXCJcXG5cIikgOiBudWxsO1xuICAgIHRoaXMuc2V0VmFsdWUobG9jLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXRWYWx1ZShsb2M6IHN0cmluZyk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmdldFZhbHVlQ29yZShsb2MpO1xuICB9XG4gIHByaXZhdGUgZ2V0VmFsdWVDb3JlKGxvYzogc3RyaW5nLCB1c2VEZWZhdWx0OiBib29sZWFuID0gdHJ1ZSk6IEFycmF5PHN0cmluZz4ge1xuICAgIGxvYyA9IHRoaXMuZ2V0TG9jYWxlKGxvYyk7XG4gICAgaWYgKHRoaXMudmFsdWVzW2xvY10pIHJldHVybiB0aGlzLnZhbHVlc1tsb2NdO1xuICAgIGlmICh1c2VEZWZhdWx0KSB7XG4gICAgICB2YXIgZGVmTG9jID0gc2V0dGluZ3MuZGVmYXVsdExvY2FsZU5hbWU7XG4gICAgICBpZiAobG9jICE9PSBkZWZMb2MgJiYgdGhpcy52YWx1ZXNbZGVmTG9jXSkgcmV0dXJuIHRoaXMudmFsdWVzW2RlZkxvY107XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuICBwdWJsaWMgc2V0VmFsdWUobG9jOiBzdHJpbmcsIHZhbDogQXJyYXk8c3RyaW5nPikge1xuICAgIGxvYyA9IHRoaXMuZ2V0TG9jYWxlKGxvYyk7XG4gICAgY29uc3Qgb2xkVmFsdWUgPSBIZWxwZXJzLmNyZWF0ZUNvcHkodGhpcy52YWx1ZXMpO1xuICAgIGlmICghdmFsIHx8IHZhbC5sZW5ndGggPT0gMCkge1xuICAgICAgZGVsZXRlIHRoaXMudmFsdWVzW2xvY107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWVzW2xvY10gPSB2YWw7XG4gICAgfVxuICAgIGlmKCEhdGhpcy5vblZhbHVlQ2hhbmdlZCkge1xuICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlZChvbGRWYWx1ZSwgdGhpcy52YWx1ZXMpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgaGFzVmFsdWUobG9jOiBzdHJpbmcgPSBcIlwiKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmlzRW1wdHkgJiYgdGhpcy5nZXRWYWx1ZShsb2MpLmxlbmd0aCA+IDA7XG4gIH1cbiAgcHVibGljIGdldCBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFZhbHVlc0tleXMoKS5sZW5ndGggPT0gMDtcbiAgfVxuICBwcml2YXRlIGdldExvY2FsZShsb2M6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCEhbG9jKSByZXR1cm4gbG9jO1xuICAgIGxvYyA9IHRoaXMubG9jYWxlO1xuICAgIHJldHVybiAhIWxvYyA/IGxvYyA6IHNldHRpbmdzLmRlZmF1bHRMb2NhbGVOYW1lO1xuICB9XG4gIHB1YmxpYyBnZXRMb2NhbGVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHZhciBrZXlzID0gdGhpcy5nZXRWYWx1ZXNLZXlzKCk7XG4gICAgaWYgKGtleXMubGVuZ3RoID09IDApIHJldHVybiBbXTtcbiAgICByZXR1cm4ga2V5cztcbiAgfVxuICBwdWJsaWMgZ2V0SnNvbigpOiBhbnkge1xuICAgIHZhciBrZXlzID0gdGhpcy5nZXRWYWx1ZXNLZXlzKCk7XG4gICAgaWYgKGtleXMubGVuZ3RoID09IDApIHJldHVybiBudWxsO1xuICAgIGlmIChcbiAgICAgIGtleXMubGVuZ3RoID09IDEgJiZcbiAgICAgIGtleXNbMF0gPT0gc2V0dGluZ3MuZGVmYXVsdExvY2FsZU5hbWUgJiZcbiAgICAgICFzZXR0aW5ncy5zZXJpYWxpemVMb2NhbGl6YWJsZVN0cmluZ0FzT2JqZWN0XG4gICAgKSByZXR1cm4gKDxhbnk+dGhpcykudmFsdWVzW2tleXNbMF1dO1xuICAgIHJldHVybiBIZWxwZXJzLmNyZWF0ZUNvcHkodGhpcy52YWx1ZXMpO1xuICB9XG4gIHB1YmxpYyBzZXRKc29uKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnZhbHVlcyA9IHt9O1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuc2V0VmFsdWUobnVsbCwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgdGhpcy5zZXRWYWx1ZShrZXksIHZhbHVlW2tleV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldFZhbHVlc0tleXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcyk7XG4gIH1cbn1cbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgYXJhYmljU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcItin2YTYs9in2KjZglwiLFxuICBwYWdlTmV4dFRleHQ6IFwi2KfZhNiq2KfZhNmKXCIsXG4gIGNvbXBsZXRlVGV4dDogXCLYpdix2LPYp9mEINin2YTYqNmK2KfZhtin2KpcIixcbiAgcHJldmlld1RleHQ6IFwi2YXYudin2YrZhtipXCIsXG4gIGVkaXRUZXh0OiBcItiq2LnYr9mK2YRcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcItio2K/Yp9mK2KlcIixcbiAgb3RoZXJJdGVtVGV4dDogXCLZhti1INii2K7YsVwiLFxuICBub25lSXRlbVRleHQ6IFwi2YTYpyDYtNmK2KFcIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwi2KfYrtiq2LEg2KfZhNmD2YRcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcInsxfSDYtdmB2K3YqSB7MH0g2YXZhlwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwi2LPYrNmEIHswfSDZhdmGIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwi2KrZhdiqINin2YTYpdis2KfYqNipINi52YTZiSDYo9iz2KbZhNipIHswfSAvIHsxfVwiLFxuICBlbXB0eVN1cnZleTogXCLZhNinINiq2YjYrNivINi12YHYrdipINmF2LHYptmK2Kkg2KPZiCDYs9ik2KfZhCDZgdmKINin2YTZhtmF2YjYsNisXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwi2LTZg9ix2Kcg2YTZg9mFINmE2KfYs9iq2YPZhdin2YQg2KfZhNmG2YXZiNiw2KwhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCLYqti42YfYsSDYs9is2YTYp9iq2YbYpyDYo9mG2YMg2YLYryDYo9mD2YXZhNiqINmH2LDYpyDYp9mE2KfYs9iq2LfZhNin2Lkg2KjYp9mE2YHYudmELlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIi4uLtmK2KrZhSDYqtit2YXZitmEINin2YTZhtmF2YjYsNisXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIi4uLtin2K7YqtixXCIsXG4gIHZhbHVlOiBcItin2YTZgtmK2YXYqVwiLFxuICByZXF1aXJlZEVycm9yOiBcIi7Zitix2KzZiSDYp9mE2KXYrNin2KjYqSDYudmE2Ykg2KfZhNiz2KTYp9mEXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcItin2YTYsdis2KfYoSDYp9mE2KXYrNin2KjYqSDYudmE2Ykg2LPYpNin2YQg2YjYp9it2K8g2LnZhNmJINin2YTYo9mC2YQuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwi2YrYsdis2Ykg2KfZhNil2KzYp9io2Kkg2LnZhNmJINin2YTYo9iz2KbZhNipINmB2Yog2KzZhdmK2Lkg2KfZhNi12YHZiNmBXCIsXG4gIG51bWVyaWNFcnJvcjogXCLZitis2Kgg2KPZhiDYqtmD2YjZhiDYp9mE2YLZitmF2Kkg2LHZgtmF2YrYqS5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCLYp9mE2LHYrNin2KEg2KXYr9iu2KfZhCDZhdinINmE2Kcg2YrZgtmEINi52YYgezB9INit2LHZiNmBXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwi2KfZhNix2KzYp9ihINil2K/Yrtin2YQg2KPZgtmEINmF2YYgezB9INit2LHZiNmBXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwi2YrYsdis2Ykg2KXYr9iu2KfZhCDYo9mD2KvYsSDZhdmGIHswfSDZiNij2YLZhCDZhdmGIHsxfSDYrdix2YjZgVwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcItmK2LHYrNmJINmF2YTYoSDZhdinINmE2Kcg2YrZgtmEINi52YYgezB9INin2YTYtdmB2YjZgVwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCLZitix2KzZiSDYqtit2K/ZitivINmF2Kcg2YTYpyDZitmC2YQg2LnZhiB7MH0g2KfZhNmF2KrYutmK2LHYp9iqXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcItmK2LHYrNmJINiq2K3Yr9mK2K8g2YXYpyDZhNinINmK2LLZitivINi52YYgezB9INin2YTZhdiq2LrZitix2KfYqlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwi2YgnezB9JyDZitis2Kgg2KPZhiDYqtmD2YjZhiDZhdiz2KfZiNmK2Kkg2KPZiCDYo9mD2KvYsSDZhdmGIHsxfSDZiNiq2LPYp9mI2Yog2KPZiCDYo9mC2YQg2YXZhiB7Mn3Yp1wiLFxuICBudW1lcmljTWluOiBcItmIJ3swfScg2YrYrNioINij2YYg2KrZg9mI2YYg2YXYs9in2YjZitipINij2Ygg2KPZg9ir2LEg2YXZhiB7MX3Yp1wiLFxuICBudW1lcmljTWF4OiBcItmIJ3swfScg2YrYrNioINij2YYg2KrZg9mI2YYg2YXYs9in2YjZitipINij2Ygg2KPZgtmEINmF2YYgezF92KdcIixcbiAgaW52YWxpZEVtYWlsOiBcItin2YTYsdis2KfYoSDYpdiv2K7Yp9mEINio2LHZitivINin2YTZg9iq2LHZiNmG2Yog2LXYrdmK2K1cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwi2YrYrNioINij2YYg2YrYudix2LYg2KfZhNiq2LnYqNmK2LE6IHswfSAn2LXZiNin2KgnLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwi2LfZhNioINil2LHYrNin2Lkg2K7Yt9ijICd7MH0nLiB7MX3Yp1wiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwi2LnYp9ivINi32YTYqCDYp9mE2KjZitin2YbYp9iqINmB2KfYsdi6INij2YggJ9in2YTZhdiz2KfYsScg2LrZitixINi12K3ZititIFwiLFxuICBleGNlZWRNYXhTaXplOiBcItmK2YbYqNi62Yog2KPZhNinINmK2KrYrNin2YjYsiDYrdis2YUg2KfZhNmF2YTZgSB7MH3Yp1wiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwi2KfZhNix2KzYp9ihINil2K/Yrtin2YQg2YLZitmF2Kkg2KPYrtix2YlcIixcbiAgdXBsb2FkaW5nRmlsZTogXCLYqtit2YXZitmEINin2YTZhdmE2YEg2KfZhNiu2KfYtSDYqNmDLiDZitix2KzZiSDYp9mE2KfZhtiq2LjYp9ixINi52K/YqSDYq9mI2KfZhiDZiNin2YTZhdit2KfZiNmE2Kkg2YTYp9it2YLZi9inXCIsXG4gIGxvYWRpbmdGaWxlOiBcItis2KfYsSDYp9mE2KrYrdmF2YrZhC4uLlwiLFxuICBjaG9vc2VGaWxlOiBcItin2K7YqtixINin2YTZhdmE2YHYp9iqLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCLZhNmFINiq2YLZhSDYqNin2K7YqtmK2KfYsSDZhdmE2YFcIixcbiAgY29uZmlybURlbGV0ZTogXCLZh9mEINiq2LHZitivINit2LDZgSDYp9mE2LPYrNmE2J9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCLZitis2Kgg2KPZhiDYqtmD2YjZhiDZh9iw2Ycg2KfZhNmC2YrZhdipINmB2LHZitiv2KkuXCIsXG4gIGFkZENvbHVtbjogXCLYo9i22YEg2KfZhNi52YXZiNivXCIsXG4gIGFkZFJvdzogXCLYp9i22KfZgdipINi12YFcIixcbiAgcmVtb3ZlUm93OiBcItil2LLYp9mE2Kkg2LXZgVwiLFxuICBhZGRQYW5lbDogXCLYp9i22YEg2KzYr9mK2K9cIixcbiAgcmVtb3ZlUGFuZWw6IFwi2KXYstin2YTYqVwiLFxuICBjaG9pY2VzX0l0ZW06IFwi2KjZhtivXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwi2LnZhdmI2K9cIixcbiAgbWF0cml4X3JvdzogXCLYtdmBXCIsXG4gIHNhdmluZ0RhdGE6IFwi2YrYqtmFINit2YHYuCDYp9mE2YbYqtin2KbYrCDYudmE2Ykg2KfZhNiu2KfYr9mFIC4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwi2K3Yr9irINiu2LfYoyDZiNmE2YUg2YbYqtmF2YPZhiDZhdmGINit2YHYuCDYp9mE2YbYqtin2KbYrC5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwi2KrZhSDYrdmB2Lgg2KfZhNmG2KrYp9im2Kwg2KjZhtis2KfYrSFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcItit2KfZiNmEINmF2KzYr9iv2KdcIixcbiAgdGltZXJNaW46IFwi2K/ZgtmK2YLYqVwiLFxuICB0aW1lclNlYzogXCLYq9in2YbZitipXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwi2YTZgtivINij2YbZgdmC2KogezB9INi52YTZiSDZh9iw2Ycg2KfZhNi12YHYrdipINmIIHsxfSDYpdis2YXYp9mE2KfZiy5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwi2YTZgtivINij2YbZgdmC2KogezB9INi52YTZiSDZh9iw2Ycg2KfZhNi12YHYrdipLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcItmE2YLYryDYo9mG2YHZgtiqIHswfSDYpdis2YXYp9mE2KfZiy5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcItmE2YLYryDYo9mG2YHZgtiqIHswfSDZhdmGIHsxfSDZgdmKINmH2LDZhyDYp9mE2LXZgdit2Kkg2YggezJ9INmF2YYg2KXYrNmF2KfZhNmKIHszfS5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwi2YTZgtivINij2YbZgdmC2KogezB9INmF2YYgezF9INmB2Yog2YfYsNmHINin2YTYtdmB2K3YqS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCLZhNmC2K8g2KPZhtmB2YLYqiB7MH0g2YXZhiDYpdis2YXYp9mE2YogezF9LlwiLFxuICBjbGVhbkNhcHRpb246IFwi2YbYuNmK2YFcIixcbiAgY2xlYXJDYXB0aW9uOiBcItmI2KfYttitXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcItin2K7YqtixINmF2YTZgVwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCLZgtmFINio2KXYstin2YTYqSDZh9iw2Kcg2KfZhNmF2YTZgVwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcItmG2LnZhVwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwi2YTYp1wiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCLZh9mEINij2YbYqiDZhdiq2KPZg9ivINij2YbZgyDYqtix2YrYryDYpdiy2KfZhNipINmH2LDYpyDYp9mE2YXZhNmBOiB7MH3Yn1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwi2YfZhCDYo9mG2Kog2YXYqtij2YPYryDYo9mG2YMg2KrYsdmK2K8g2KXYstin2YTYqSDZg9in2YHYqSDYp9mE2YXZhNmB2KfYqtifXCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCLYudmG2YjYp9mGINin2YTYs9ik2KfZhFwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJhclwiXSA9IGFyYWJpY1N1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJhclwiXSA9IFwi2KfZhNi52LHYqNmK2KlcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgYmFzcXVlU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIkF1cnJla29hXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJIdXJyZW5nb2FcIixcbiAgY29tcGxldGVUZXh0OiBcIkJ1a2F0dVwiLFxuICBwcmV2aWV3VGV4dDogXCJBdXJyZWJpc3RhXCIsXG4gIGVkaXRUZXh0OiBcIkVkaXRhdHVcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIkhhc2lcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJCZXN0ZSBiYXQgKHplaGF6dHUpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJCYXQgZXJlIGV6XCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIkd1enRpYSBoYXV0YXR1XCIsXG4gIHByb2dyZXNzVGV4dDogXCJ7MX0tKGUpdGlrIHswfSBvcnJpYWxkZVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiezB9IGVycmlnaXN0cm8gezF9LShlKXRpa1wiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiRXJhbnR6dW5kYWtvIGdhbGRlcmFrIHswfS97MX1cIixcbiAgZW1wdHlTdXJ2ZXk6IFwiRXogZGFnbyBvcnJpYWxkZSBiaXN0YXJhZ2FycmlyaWsgZWRvIGV6IGRhZ28gZ2FsZGVyYXJpay5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJFc2tlcnJpayBhc2tvIGdhbGRldGVnaWEgZXJhbnR6dXRlYWdhdGlrIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOiBcIkd1cmUgZGF0dWVrIGRpb3RlIGRhZ29lbmVrbyBnYWxkZXRlZ2lhIGVyYW50enVuIGR1enVsYS5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJHYWxkZXRlZ2lhIGthcmdhdHplbi4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJIYXV0YXR1Li4uXCIsXG4gIHZhbHVlOiBcImJhbGlvYVwiLFxuICByZXF1aXJlZEVycm9yOiBcIk1lc2VkZXosIGdhbGRlcmEgZXJhbnR6dW4uXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIk1lc2VkZXosIGd1dHhpZW5leiBnYWxkZXJhIGJhdCBlcmFudHp1bi5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJNZXNlZGV6LCBlcnJlbmthZGFrbyBnYWxkZXJhIGd1enRpYWsgZXJhbnR6dW4uXCIsXG4gIG51bWVyaWNFcnJvcjogXCJFc3RpbWF6aW9hIHplbmJha2l6a29hIGl6YW4gYmVoYXIgZHUuXCIsXG4gIG1pbkVycm9yOiBcIkJhbGlvYSBleiBkYSB7MH0gYmFpbm8gdHhpa2lhZ29hIGl6YW4gYmVoYXJcIixcbiAgbWF4RXJyb3I6IFwiQmFsaW9hIGV6IGRhIHswfSBiYWlubyBoYW5kaWFnb2EgaXphbiBiZWhhclwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIk1lc2VkZXosIGd1dHhpZW5leiB7MH0ga2FyYWt0ZXJlIGVyYWJpbGkgYmVoYXIgZGlyYS5cIixcbiAgdGV4dE1heExlbmd0aDogXCJNZXNlZGV6LCBnZWhpZW5leiB7MH0ga2FyYWt0ZXJlIGVyYWJpbGkgYmVoYXIgZGlyYS5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCJNZXNlZGV6LCBnZWhpZW5leiB7MH0gZXRhIGd1dHhpZW5leiB7MX0ga2FyYWt0ZXJlIGVyYWJpbGkgYmVoYXIgZGlyYS5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJNZXNlZGV6LCBndXR4aWVuZXogezB9IGVycmVua2FkYSBiZXRlLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJNZXNlZGV6LCBndXR4aWVuZXogezB9IGF1a2VyYSBoYXV0YXR1LlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJNZXNlZGV6LCB7MH0gYXVrZXJhIGJhaW5vIGdlaGlhZ28gZXogaGF1dGF0dS5cIixcbiAgbnVtZXJpY01pbk1heDogXCJFbCAnezB9JyBkZWJlIGRlIHNlciBpZ3VhbCBvIG3DoXMgZGUgezF9IHkgaWd1YWwgbyBtZW5vcyBkZSB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCInezB9JyB7MX0gYmFpbm8gaGFuZGlhZ29hIGVkbyBiZXJkaW4gaXphbiBiZWhhciBkYVwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nIHsxfSBiYWlubyB0eGlraWFnbyBlZG8gYmVyZGluIGl6YW4gYmVoYXIgZGFcIixcbiAgaW52YWxpZEVtYWlsOiBcIk1lc2VkZXosIGJhbGlvemtvIGVtYWlsYSBpZGF0eiBlemF6dS5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiezB9IGFkaWVyYXpwZW5hayAnZWdpYXprb2EnIGl0enVsaSBiZWhhcmtvIGx1a2UuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJFc2thZXJhayAnezB9JyBlcnJvcmVhIGl0enVsaSBkdS4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjogXCJMYSBzb2xpY2l0dWQgcmVncmVzw7MgdmFjw61vIGRlIGRhdGEgbyBsYSBwcm9waWVkYWQgJ3RyYXllY3RvcmlhJyBubyBlcyBjb3JyZWN0YVwiLFxuICBleGNlZWRNYXhTaXplOiBcIkZpdHhhdGVnaWFyZW4gdGFtYWluYSBleiBkYSB7MH0gYmFpbm8gaGFuZGlhZ29hIGl6YW4gYmVoYXIuXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJNZXNlZGV6LCBiZXN0ZSBlc3RpbWF6aW9hIGdlaGl0dS5cIixcbiAgdXBsb2FkaW5nRmlsZTogXCJadXJlIGZpdHhhdGVnaWEgaWdvdHplbiBhcmkgZGEuIE1lc2VkZXosIHNlZ3VuZG8gYmF0enVrIGl0eGFyb24gZXRhIHNhaWF0dSBiZXJyaXJvLlwiLFxuICBsb2FkaW5nRmlsZTogXCJLYXJnYXR6ZW4uLi5cIixcbiAgY2hvb3NlRmlsZTogXCJGaXR4YXRlZ2lhKGspIGhhdXRhdHUuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIkV6IGRhIGlub2xha28gZml0eGF0ZWdpcmlrIGhhdXRhdHVcIixcbiAgY29uZmlybURlbGV0ZTogXCLCv0VycmVnaXN0cm9hIGJvcnJhdHUgbmFoaSBhbCBkdXp1P1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIkJhbGlvIGhhdSBiYWthcnJhIGl6YW4gYmVoYXIgZHUuXCIsXG4gIGFkZENvbHVtbjogXCJadXRhYmUgYmF0IGdlaGl0dVwiLFxuICBhZGRSb3c6IFwiRXJyZW5rYWRhIGJhdCBnZWhpdHVcIixcbiAgcmVtb3ZlUm93OiBcIkVycmVua2FkYSBiYXQga2VuZHVcIixcbiAgZW1wdHlSb3dzVGV4dDogXCJFeiBkYWdvIGVycmVua2FkYXJpay5cIixcbiAgYWRkUGFuZWw6IFwiQmVycmlhIGdlaGl0dVwiLFxuICByZW1vdmVQYW5lbDogXCJLZW5kdVwiLFxuICBjaG9pY2VzX0l0ZW06IFwiYXJ0aWt1bHVhXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiWnV0YWJlYVwiLFxuICBtYXRyaXhfcm93OiBcIkVycmVua2FkYVwiLFxuICBtdWx0aXBsZXRleHRfaXRlbW5hbWU6IFwidGVzdHVhXCIsXG4gIHNhdmluZ0RhdGE6IFwiRXJhbnR6dW5hayB6ZXJiaXR6YXJpYW4gZ29yZGV0emVuIGFyaSBkaXJhLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJFcnJvcmVyZW4gYmF0IGdlcnRhdHUgZXRhIGVyYW50enVuYWsgZXogZGlyYSB6ZXJiaXR6YXJpYW4gZ29yZGUgYWhhbCBpemFuLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJFcmFudHp1bmFrIGVnb2tpIGdvcmRlIGRpcmEhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJCZXJyaXJvIHNhaWF0dS5cIixcbiAgdGltZXJNaW46IFwibWluXCIsXG4gIHRpbWVyU2VjOiBcInNlZ1wiLFxuICB0aW1lclNwZW50QWxsOiBcInswfSBlcmFiaWxpIGR1enUgb3JyaWFsZGUgaG9uZXRhbiBldGEgb3JvdGFyYSB7MX0uXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIlp1ayB7MH0gZXJhYmlsaSBkdXp1LlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIk9yb3RhcmEgZ2FzdGF0dSBkdXp1LlwiLFxuICB0aW1lckxpbWl0QWxsOiBcInswfSBnYXN0YXR1IGR1enUgezF9LShlKXRpayBvcnJpYWxkZSBob25ldGFuIGV0YSBvcm90YXJhIHsyfSB7M30tKGUpdGlrLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJ7MH0gZ2FzdGF0dSBkdXp1IG9ycmlhbGRlIGhvbmV0YW4gezF9LShlKXRpay5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJadWsgb3JvdGFyYSB7MH0gZ2FzdGF0dSBkdXp1IHsxfS0oZSl0aWsuXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJHYXJiaXR1XCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJIdXN0dVwiLFxuICBzaWduYXR1cmVQbGFjZUhvbGRlcjogXCJTaW5hdHUgaGVtZW5cIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwiRml0eGF0ZWdpYSBoYXV0YXR1XCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIkZpdHhhdGVnaSBoYXUgZXphYmF0dVwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIkJhaVwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiRXpcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiWml1ciB6YXVkZSBodXJyZW5nbyBmaXR4YXRlZ2lhIGV6YWJhdHUgbmFoaSBkdXp1bGE6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIlppdXIgYWwgemF1ZGUgZml0eGF0ZWdpIGd1enRpYWsgZXphYmF0dSBuYWhpIGRpdHV6dWxhP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiR2FsZGVyYXJlbiBpemVuYnVydWFcIixcbiAgbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcIkV6ZXp0YXR1XCIsXG4gIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIkV6YXJyaVwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJldVwiXSA9IGJhc3F1ZVN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJldVwiXSA9IFwiRXVza2FyYVwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBidWxnYXJpYW5TdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwi0J3QsNC30LDQtFwiLFxuICBwYWdlTmV4dFRleHQ6IFwi0J3QsNC/0YDQtdC0XCIsXG4gIGNvbXBsZXRlVGV4dDogXCLQmtGA0LDQuVwiLFxuICBwcmV2aWV3VGV4dDogXCLQktC40LfRg9Cw0LvQuNC30LDRhtC40Y9cIixcbiAgZWRpdFRleHQ6IFwi0YDQtdC00LDQutGC0LjRgNCw0L3QtVwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwi0J3QsNGH0LDQu9C+XCIsXG4gIG90aGVySXRlbVRleHQ6IFwi0JTRgNGD0LPQviAo0L7Qv9C40YjQtdGC0LUpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCLQndC40YLQviDQtdC00LjQvVwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCLQktGB0LjRh9C60LhcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcItGB0YLRgC4gezB9LCDQvtCx0YnQviDRgdGC0YAuIHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwi0JfQsNC/0LjRgSB7MH0g0L7RgiB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcItCe0YLQs9C+0LLQvtGA0LXQvdC4INC90LAgezB9IC8gezF9INCy0YrQv9GA0L7RgdCwXCIsXG4gIGVtcHR5U3VydmV5OiBcItCQ0L3QutC10YLQsNGC0LAg0L3QtSDRgdGK0LTRitGA0LbQsCDQstC40LTQuNC80Lgg0YHRgtGA0LDQvdC40YbQuCDQuNC70Lgg0LLRitC/0YDQvtGB0LguXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwi0JHQu9Cw0LPQvtC00LDRgNC40Lwg0LLQuCDQt9CwINGD0YfQsNGB0YLQuNC10YLQviDQsiDQsNC90LrQtdGC0LDRgtCwIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOiBcItCY0LfQs9C70LXQttC00LAsINGH0LUg0LLQuNC1INCy0LXRh9C1INGB0YLQtSDQv9C+0L/RitC70L3QuNC70Lgg0LDQvdC60LXRgtCw0YLQsC5cIixcbiAgbG9hZGluZ1N1cnZleTogXCLQl9Cw0YDQtdC20LTQsNC90LUg0L3QsCDQsNC90LrQtdGC0LDRgtCwLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcItCY0LfQsdC10YDQtdGC0LUuLi5cIixcbiAgdmFsdWU6IFwidmFsdWVcIixcbiAgcmVxdWlyZWRFcnJvcjogXCLQnNC+0LvRjywg0L7RgtCz0L7QstC+0YDQtdGC0LUg0L3QsCDRgdC70LXQtNC90LjRjyDQstGK0L/RgNC+0YEuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcItCc0L7Qu9GPLCDQvtGC0LPQvtCy0L7RgNC10YLQtSDQv9C+0L3QtSDQvdCwINC10LTQuNC9INC+0YIg0LLRitC/0YDQvtGB0LjRgtC1LlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcItCc0L7Qu9GPLCDQvtGC0LPQvtCy0L7RgNC10YLQtSDQvdCwINCy0YrQv9GA0L7RgdC40YLQtSDQvdCwINCy0YHQuNGH0LrQuCDRgNC10LTQvtCy0LUuXCIsXG4gIG51bWVyaWNFcnJvcjogXCLQodGC0L7QudC90L7RgdGC0YLQsCDRgdC70LXQtNCy0LAg0LTQsCDQsdGK0LTQtSDRh9C40YHQu9C+LlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcItCc0L7Qu9GPLCDQuNC30L/QvtC70LfQstCw0LnRgtC1INC/0L7QvdC1IHswfSDRgdC40LzQstC+0LvQsC5cIixcbiAgdGV4dE1heExlbmd0aDogXCLQnNC+0LvRjywg0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDQvdC1INC/0L7QstC10YfQtSDQvtGCIHswfSDRgdC40LzQstC+0LvQsC5cIixcbiAgdGV4dE1pbk1heExlbmd0aDpcbiAgICBcItCc0L7Qu9GPLCDQuNC30L/QvtC70LfQstCw0LnRgtC1INC/0L7QstC10YfQtSDQvtGCIHswfSDQuCDQv9C+LdC80LDQu9C60L4g0L7RgiB7MX0g0YHQuNC80LLQvtC70LAuXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwi0JzQvtC70Y8sINC/0L7Qv9GK0LvQvdC10YLQtSDQv9C+0L3QtSB7MH0g0YDQtdC00LAuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcItCc0L7Qu9GPLCDQuNC30LHQtdGA0LXRgtC1INC/0L7QvdC1IHswfSDQstCw0YDQuNCw0L3RgtCwLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCLQnNC+0LvRjywg0LjQt9Cx0LXRgNC10YLQtSDQvdC1INC/0L7QstC10YfQtSDQvtGCIHswfSDQstCw0YDQuNCw0L3RgtCwLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwi0KHRgtC+0LnQvdC+0YHRgtGC0LAgJ3swfScg0YHQu9C10LTQstCwINC00LAg0LHRitC00LUg0YDQsNCy0L3QsCDQuNC70Lgg0L/Qvi3Qs9C+0LvRj9C80LAg0L7RgiB7MX0g0Lgg0YDQsNCy0L3QsCDQuNC70Lgg0L/Qvi3QvNCw0LvQutCwINC+0YIgezJ9XCIsXG4gIG51bWVyaWNNaW46IFwi0KHRgtC+0LnQvdC+0YHRgtGC0LAgJ3swfScg0YHQu9C10LTQstCwINC00LAg0LHRitC00LUg0YDQsNCy0L3QsCDQuNC70Lgg0L/Qvi3Qs9C+0LvRj9C80LAg0L7RgiB7MX1cIixcbiAgbnVtZXJpY01heDogXCLQodGC0L7QudC90L7RgdGC0YLQsCAnezB9JyDRgdC70LXQtNCy0LAg0LTQsCDQsdGK0LTQtSDRgNCw0LLQvdCwINC40LvQuCDQv9C+LdC80LDQu9C60LAg0L7RgiB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcItCc0L7Qu9GPLCDQstGK0LLQtdC00LXRgtC1INCy0LDQu9C40LTQtdC9INCw0LTRgNC10YEg0L3QsCDQtdC70LXQutGC0YDQvtC90L3QsCDQv9C+0YnQsC5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwi0JjQt9GA0LDQt9GK0YI6IHswfSDRgtGA0Y/QsdCy0LAg0LTQsCDQtNCw0LLQsCDRgNC10LfRg9C70YLQsNGCICd0cnVlJyAo0LjRgdGC0LjQvdCwKS5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcItCX0LDRj9Cy0LrQsNGC0LAg0LLQvtC00Lgg0LTQviDQs9GA0LXRiNC60LAgJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCLQl9Cw0Y/QstC60LDRgtCwINC90LUg0LLRgNGK0YnQsCDQtNCw0L3QvdC4INC40LvQuCDRh9Cw0YHRgtGC0LAgJ3BhdGgnICjQv9GK0YIg0LTQviDRgtGK0YDRgdC10L3QuNGPINGA0LXRgdGD0YDRgSDQvdCwINGB0YrRgNCy0YrRgNCwKSDQtSDQvdC10L/RgNCw0LLQuNC70L3QviDQt9Cw0LTQsNC00LXQvdCwXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwi0KDQsNC30LzQtdGA0YrRgiDQvdCwINGE0LDQudC70LAg0YHQu9C10LTQstCwINC00LAg0L3QtSDQv9GA0LXQstC40YjQsNCy0LAgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwi0JzQvtC70Y8sINCy0YrQstC10LTQtdGC0LUg0LTRgNGD0LPQsNGC0LAg0YHRgtC+0LnQvdC+0YHRgi5cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcItCS0LDRiNC40YIg0YTQsNC50Lsg0YHQtSDQt9Cw0YDQtdC20LTQsCDQvdCwINGB0YrRgNCy0YrRgNCwLiDQnNC+0LvRjywg0LjQt9GH0LDQutCw0LnRgtC1INC90Y/QutC+0LvQutC+INGB0LXQutGD0L3QtNC4INC4INGC0L7Qs9Cw0LLQsCDQvtC/0LjRgtCy0LDQudGC0LUg0L7RgtC90L7QstC+LlwiLFxuICBsb2FkaW5nRmlsZTogXCLQl9Cw0YDQtdC20LTQsNC90LUuLi5cIixcbiAgY2hvb3NlRmlsZTogXCLQmNC30LHQtdGA0LXRgtC1INGE0LDQudC7KNC+0LLQtSkuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcItCd0Y/QvNCwINC40LfQsdGA0LDQvSDRhNCw0LnQu1wiLFxuICBjb25maXJtRGVsZXRlOiBcItCW0LXQu9Cw0LXRgtC1INC70Lgg0LTQsCDQuNC30YLRgNC40LXRgtC1INC30LDQv9C40YHQsD9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCLQodGC0L7QudC90L7RgdGC0YLQsCDRgdC70LXQtNCy0LAg0LTQsCDQsdGK0LTQtSDRg9C90LjQutCw0LvQvdCwLlwiLFxuICBhZGRDb2x1bW46IFwi0JTQvtCx0LDQstGP0L3QtSDQvdCwINC60L7Qu9C+0L3QsFwiLFxuICBhZGRSb3c6IFwi0JTQvtCx0LDQstGP0L3QtSDQvdCwINGA0LXQtFwiLFxuICByZW1vdmVSb3c6IFwi0J/RgNC10LzQsNGF0LLQsNC90LUg0L3QsCDRgNC10LRcIixcbiAgYWRkUGFuZWw6IFwi0JTQvtCx0LDQstGP0L3QtSDQvdCwINC/0LDQvdC10LtcIixcbiAgcmVtb3ZlUGFuZWw6IFwi0J/RgNC10LzQsNGF0LLQsNC90LUg0L3QsCDQv9Cw0L3QtdC7XCIsXG4gIGNob2ljZXNfSXRlbTogXCLQtdC70LXQvNC10L3RglwiLFxuICBtYXRyaXhfY29sdW1uOiBcItCa0L7Qu9C+0L3QsFwiLFxuICBtYXRyaXhfcm93OiBcItCg0LXQtFwiLFxuICBzYXZpbmdEYXRhOiBcItCg0LXQt9GD0LvRgtCw0YLQuNGC0LUg0YHQtSDQt9Cw0L/QsNC30LLQsNGCINC90LAg0YHRitGA0LLRitGA0LAuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOlxuICAgIFwi0J/QvtGA0LDQtNC4INCy0YrQt9C90LjQutC90LDQu9CwINCz0YDQtdGI0LrQsCDRgNC10LfRg9C70YLQsNGC0LjRgtC1INC90LUg0LzQvtC20LDRhdCwINC00LAg0LHRitC00LDRgiDQt9Cw0L/QsNC30LXQvdC4LlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCLQoNC10LfRg9C70YLQsNGC0LjRgtC1INCx0Y/RhdCwINC30LDQv9Cw0LfQtdC90Lgg0YPRgdC/0LXRiNC90L4hXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCLQndC+0LIg0L7Qv9C40YJcIixcbiAgdGltZXJNaW46IFwi0LzQuNC9XCIsXG4gIHRpbWVyU2VjOiBcItGB0LXQulwiLFxuICB0aW1lclNwZW50QWxsOiBcItCS0LjQtSDQuNC30L/QvtC70LfQstCw0YXRgtC1IHswfSDQvdCwINGC0LDQt9C4INGB0YLRgNCw0L3QuNGG0LAg0Lgg0L7QsdGJ0L4gezF9LlwiLFxuICB0aW1lclNwZW50UGFnZTogXCLQktC40LUg0LjQt9C/0L7Qu9C30LLQsNGF0YLQtSB7MH0g0L3QsCDRgtCw0LfQuCDRgdGC0YDQsNC90LjRhtCwLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcItCS0LjQtSDQuNC30L/QvtC70LfQstCw0YXRgtC1INC+0LHRidC+IHswfS5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcItCS0LjQtSDQuNC30L/QvtC30LLQsNGF0YLQtSB7MH0g0L7RgiB7MX0g0L3QsCDRgtCw0LfQuCDRgdGC0YDQsNC90LjRhtCwINC4INC+0LHRidC+IHsyfSDQvtGCIHszfS5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwi0JLQuNC1INC40LfQv9C+0LvQt9Cy0LDRhdGC0LUgezB9INC+0YIgezF9INC90LAg0YLQsNC30Lgg0YHRgtGA0LDQvdC40YbQsC5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCLQktC40LUg0LjQt9C/0L7Qu9C30LLQsNGF0YLQtSDQvtCx0YnQviB7MH0g0L7RgiB7MX0uXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCLQmNC30YfQuNGB0YLQstCw0L3QtVwiLFxuICBjbGVhckNhcHRpb246IFwi0J3QsNGH0LDQu9C90L4g0YHRitGB0YLQvtGP0L3QuNC1XCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcItCY0LfQsdC10YDQtdGC0LUg0YTQsNC50LtcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwi0J/RgNC10LzQsNGF0LLQsNC90LUg0L3QsCDRhNCw0LnQu9CwXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwi0JTQsFwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwi0J3QtVwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCLQndCw0LjRgdGC0LjQvdCwINC70Lgg0LjRgdC60LDRgtC1INC00LAg0L/RgNC10LzQsNGF0L3QtdGC0LUg0YLQvtC30Lgg0YTQsNC50Ls6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcItCd0LDQuNGB0YLQuNC90LAg0LvQuCDQuNGB0LrQsNGC0LUg0LTQsCDQv9GA0LXQvNCw0YXQvdC10YLQtSDQstGB0LjRh9C60Lgg0YTQsNC50LvQvtCy0LU/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCLQl9Cw0LPQu9Cw0LLQuNC1INC90LAg0LLRitC/0YDQvtGB0LBcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiYmdcIl0gPSBidWxnYXJpYW5TdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wiYmdcIl0gPSBcItCx0YrQu9Cz0LDRgNGB0LrQuFwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBjYXRhbGFuU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIkFudGVyaW9yXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJTZWfDvGVudFwiLFxuICBjb21wbGV0ZVRleHQ6IFwiQ29tcGxldFwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIlVuIGFsdHJlIChkZXNjcmlndWkpXCIsXG4gIHByb2dyZXNzVGV4dDogXCJQw6BnaW5hIHswfSBkZSB7MX1cIixcbiAgZW1wdHlTdXJ2ZXk6IFwiTm8gaGkgaGEgY2FwIHDDoGdpbmEgdmlzaWJsZSBvIHByZWd1bnRhIGEgbCdlbnF1ZXN0YS5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJHcsOgY2llcyBwZXIgY29tcGxldGFyIGwnZW5xdWVzdGEhXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiTCdlbnF1ZXN0YSBzJ2VzdMOgIGNhcnJlZ2FudCAuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiU2VsZWNjaW9uYSAuLi5cIixcbiAgcmVxdWlyZWRFcnJvcjogXCJTaSB1cyBwbGF1IGNvbnRlc3RpIGxhIHByZWd1bnRhLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlNpIHVzIHBsYXUgY29udGVzdGkgbGVzIHByZWd1bnRlcyBkZSBjYWRhIGZpbGVyYS5cIixcbiAgbnVtZXJpY0Vycm9yOiBcIkwnZXN0aW1hY2nDsyBoYSBkZSBzZXIgbnVtw6hyaWNhLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIlNpIHVzIHBsYXUgZW50cmUgYWxtZW55cyB7MH0gc8OtbWJvbHMuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiU2kgdXMgcGxhdSBlbnRyZSBtZW55cyBkZSB7MH0gc8OtbWJvbHMuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiU2kgdXMgcGxhdSBlbnRyZSBtw6lzIGRlIHswfSBpIG1lbnlzIGRlIHsxfSBzw61tYm9scy5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJTaSB1cyBwbGF1IG9tcGxpIGFsbWVueXMgezB9IGZpbGVyZXMuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlNpIHVzIHBsYXUgc2VsZWNjaW9uaSBhbG1lbnlzIHswfSB2YXJpYW50cy5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiU2kgdXMgcGxhdSBzZWxlY2Npb25pIG5vIG3DqXMgZGUgezB9IHZhcmlhbnRzLlwiLFxuICBudW1lcmljTWluTWF4OiBcIkVsICd7MH0nIGRldSBzZXIgaWd1YWwgbyBtw6lzIGRlIHsxfSBpIGlndWFsIG8gbWVueXMgZGUgezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiRWwgJ3swfScgaGEgZGUgc2VyIGlndWFsIG8gbcOpcyBkZSB7MX1cIixcbiAgbnVtZXJpY01heDogXCJFbCAnezB9JyBoYSBkZSBzZXIgaWd1YWwgbyBtZW55cyBkZSB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIlNpIHVzIHBsYXUgYWZlZ2l1IHVuIGNvcnJldSBlbGVjdHLDsm5pYyB2w6BsaWQuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJMYSBzb2zCt2xpY2l0dWQgdmEgdG9ybmFyIGVycm9yICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiTGEgc29swrdsaWNpdHVkIHZhIHRvcm5hciBidWlkYSBkZSBkYXRlcyBvIGxhIHByb3BpZXRhdCAndHJhamVjdMOycmlhJyBubyDDqXMgY29ycmVjdGFcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJMYSBtaWRhIGRlIGwnYXJ4aXUgbm8gcG90IGV4Y2VkaXIgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiU2kgdXMgcGxhdSBhZmVnaXUgbCdhbHRyYSBlc3RpbWFjacOzLlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiRWwgc2V1IGFyeGl1IHMnZXN0w6AgcHVqYW50LiBTaSB1cyBwbGF1IGVzcGVyaSB1bnMgc2Vnb25zIGkgaW50ZW50ZXUtaG8gZGUgbm91LlwiLFxuICBhZGRSb3c6IFwiQWZlZ2l1IHVuYSBmaWxlcmFcIixcbiAgcmVtb3ZlUm93OiBcIkVsaW1pbmFyIHVuYSBmaWxlcmFcIixcbiAgY2hvaWNlc19maXJzdEl0ZW06IFwicHJpbWVyIGFydGljbGVcIixcbiAgY2hvaWNlc19zZWNvbmRJdGVtOiBcInNlZ29uIGFydGljbGVcIixcbiAgY2hvaWNlc190aGlyZEl0ZW06IFwidGVyY2VyIGFydGljbGVcIixcbiAgbWF0cml4X2NvbHVtbjogXCJDb2x1bW5hXCIsXG4gIG1hdHJpeF9yb3c6IFwiRmlsZXJhXCJcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiY2FcIl0gPSBjYXRhbGFuU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImNhXCJdID0gXCJjYXRhbMOgXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGNyb2F0aWFuU3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIlByZXRob2RuaVwiLFxuICBwYWdlTmV4dFRleHQ6IFwiU2xqZWRlxIdpXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJLb21wbGV0YW5cIixcbiAgcHJldmlld1RleHQ6IFwiUHJlZ2xlZFwiLFxuICBlZGl0VGV4dDogXCJVcmXEkWl2YW5qZVwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiUG/EjWV0YWtcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJPc3RhbGkgKG9waXMpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJOaXRrb1wiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJTZWxlY3QgQWxsXCIsXG4gIHByb2dyZXNzVGV4dDogXCJTdHJhbmljYSB7MH0gb2QgezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJaYXBpc2EgezB9IG9kIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiT2Rnb3ZvcmlvIG5hIHswfS97MX0gcGl0YW5qYVwiLFxuICBlbXB0eVN1cnZleTogXCJVIGFua2V0aSBuZW1hIHZpZGxqaXZlIHN0cmFuaWNlIGlsaSBwaXRhbmphLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIkh2YWxhIHZhbSDFoXRvIHN0ZSB6YXZyxaFpbGkgYW5rZXR1IVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwiTmHFoWkgemFwaXNpIHBva2F6dWp1IGRhIHN0ZSB2ZcSHIHphdnLFoWlsaSBvdnUgYW5rZXR1LlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIkFua2V0YSBvIHXEjWl0YXZhbmplLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIk9kYWJlcml0ZS4uLlwiLFxuICB2YWx1ZTogXCJ2cmlqZWRub3N0XCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiTW9saW0gdmFzIG9kZ292b3JpdGUgbmEgcGl0YW5qZS5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiTW9saW0gdmFzIG9kZ292b3JpdGUgbmEgYmFyZW0gamVkbm8gcGl0YW5qZS5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJPZGdvdm9yaXRlIG5hIHBpdGFuamEgdSBzdmltIHJlZG92aW1hLlwiLFxuICBudW1lcmljRXJyb3I6IFwiVnJpamVkbm9zdCBiaSB0cmViYWxhIGJpdGkgYnJvasSNYW5hLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIlVuZXNpdGUgbmFqbWFuamUgezB9IHpuYWsob3ZhKS5cIixcbiAgdGV4dE1heExlbmd0aDogXCJVbmVzaXRlIG1hbmplIG9kIHswfSB6bmFrKG92YSkuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiVW5lc2l0ZSB2acWhZSBvZCB7MH0gaSBtYW5qZSBvZCB7MX0gem5ha292YS5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJNb2xpbW8gaXNwdW5pdGUgbmFqbWFuamUgezB9IHJlZGFrYS5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiT2RhYmVyaXRlIGJhcmVtIHswfSB2YXJpamFudGUuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIk9kYWJlcml0ZSBuZSB2acWhZSBvZCB7MH0gdmFyaWphbnRpLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiJ3swfSdiaSB0cmViYW8gYml0aSBqZWRuYWsgaWxpIHZpxaFlIG9kIHsxfSBpIGplZG5hayBpbGkgbWFuamkgb2QgezJ9LlwiLFxuICBudW1lcmljTWluOiBcIid7MH0nIGJpIHRyZWJhbyBiaXRpIGplZG5hayBpbGkgdmnFoWUgb2QgezF9LlwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nIGJpIHRyZWJhbyBiaXRpIGplZG5hayBpbGkgbWFuamkgb2QgezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCJVbmVzaXRlIHZhbGphbnUgZS1tYWlsIGFkcmVzdS5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiSXpyYXo6IHswfSB0cmViYSB2cmF0aXRpICd0cnVlJy5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIlphaHRqZXYgdnJhdGlvIHBvZ3JlxaFrdSAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIlphaHRqZXYgamUgdnJhdGlvIHByYXpuZSBwb2RhdGtlIGlsaSBqZSAncGF0aCcgc3ZvanN0dm8gbmV0b8SNbmEuXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiVmVsacSNaW5hIGRhdG90ZWtlIG5lIHNtaWplIHByZWxheml0aSB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJVbmVzaXRlIGRydWd1IHZyaWplZG5vc3QuXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCJWYcWhYSBkYXRvdGVrYSBzZSBwcmVub3NpLiBQcmnEjWVrYWp0ZSBuZWtvbGlrbyBzZWt1bmRpIGkgcG9rdcWhYWp0ZSBwb25vdm5vLlwiLFxuICBsb2FkaW5nRmlsZTogXCJVxI1pdGF2YW5qZS4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIk9kYWJlcml0ZSBkYXRvdGVrdS4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiTmlqZSBvZGFicmFuYSBkYXRvdGVrYVwiLFxuICBjb25maXJtRGVsZXRlOiBcIsW9ZWxpdGUgbGkgaXpicmlzYXRpIHphcGlzP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIlRhIGJpIHZyaWplZG5vc3QgdHJlYmFsYSBiaXRpIGplZGluc3R2ZW5hLlwiLFxuICBhZGRDb2x1bW46IFwiRG9kYXZhbmplIHN0dXBjYVwiLFxuICBhZGRSb3c6IFwiRG9kYXZhbmplIHJlZGFrYVwiLFxuICByZW1vdmVSb3c6IFwiVWtsb25pdGlcIixcbiAgYWRkUGFuZWw6IFwiRG9kYXZhbmplIG5vdmloXCIsXG4gIHJlbW92ZVBhbmVsOiBcIlVrbG9uaXRpXCIsXG4gIGNob2ljZXNfSXRlbTogXCJzdGF2a3VcIixcbiAgbWF0cml4X2NvbHVtbjogXCJTdHVwY2FcIixcbiAgbWF0cml4X3JvdzogXCJSZWRha1wiLFxuICBzYXZpbmdEYXRhOiBcIlJlenVsdGF0aSBzZSBzcHJlbWFqdSBuYSBwb3NsdcW+aXRlbGp1Li4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJEb8WhbG8gamUgZG8gcG9ncmXFoWtlIGkgbmlzbW8gbW9nbGkgc3ByZW1pdGkgcmV6dWx0YXRlLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJSZXp1bHRhdGkgc3UgdXNwamXFoW5vIHNwcmVtbGplbmkhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJQb2t1xaFhaiBwb25vdm9cIixcbiAgdGltZXJNaW46IFwibWluXCIsXG4gIHRpbWVyU2VjOiBcInNlY1wiLFxuICB0aW1lclNwZW50QWxsOiBcIlZpIHN0ZSBwcm92ZWxpIHswfSBuYSBvdm9qIHN0cmFuaWNpIGkgezF9IHVrdXBuby5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwiUG90cm/FoWlsaSBzdGUgezB9IG5hIG92dSBzdHJhbmljdS5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJZb3UgaGF2ZSBzcGVudCB7MH0gaW4gdG90YWwuIHswfS5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIlZpIHN0ZSBwcm92ZWxpIHswfSBvZCB7MX0gbmEgb3ZvaiBzdHJhbmljaSBpIHsyfSBvZCB7M30gdWt1cG5vLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJQb3Ryb8WhaW8gc2kgezB9IG9kIHsxfSBuYSBvdm9qIHN0cmFuaWNpLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIlVrdXBubyBzdGUgcG90cm/FoWlsaSB7MH0gb2QgezF9LlwiLFxuICBjbGVhbkNhcHRpb246IFwiT8SNaXN0aXRpXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJPxI1pc3RpdGlcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwiT2RhYmVyaXRlIGRhdG90ZWt1XCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIlVrbG9uaXRlIG92dSBkYXRvdGVrdVwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIkRhXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOZVwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJKZXN0ZSBsaSBzaWd1cm5pIGRhIMW+ZWxpdGUgdWtsb25pdGkgb3Z1IGRhdG90ZWt1OiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJKZXN0ZSBsaSBzaWd1cm5pIGRhIMW+ZWxpdGUgdWtsb25pdGkgc3ZlIGRhdG90ZWtlP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiTmFzbG92IHBpdGFuamFcIixcbiAgbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcIk90a2F6YXRpXCIsXG4gIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIlByaW1pamVuaXRpXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImhyXCJdID0gY3JvYXRpYW5TdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wiaHJcIl0gPSBcImhydmF0c2tpXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGN6ZWNoU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIlDFmWVkY2hvesOtXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJEYWzFocOtXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJIb3Rvdm9cIixcbiAgcHJldmlld1RleHQ6IFwiTsOhaGxlZFwiLFxuICBlZGl0VGV4dDogXCJVcHJhdml0XCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJTdGFydFwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIkppbsOhIG9kcG92xJvEjyAobmFwacWhdGUpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCLFvcOhZG7DvVwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJWeWJyYXQgdsWhZVwiLFxuICBwcm9ncmVzc1RleHQ6IFwiU3RyYW5hIHswfSB6IHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiWsOhem5hbSB7MH0geiB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIlpvZHBvdsSbemVuw6kgb3TDoXpreTogezB9IC8gezF9XCIsXG4gIGVtcHR5U3VydmV5OiBcIlByxa96a3VtdSBuZW9ic2FodWplIMW+w6FkbsOpIG90w6F6a3kuXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiRMSba3VqZW1lIHphIHZ5cGxuxJtuw60gcHLFr3prdW11IVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwiTmHFoWUgesOhem5hbXkgdWthenVqw60sIMW+ZSBqc3RlIHRlbnRvIHByxa96a3VtIGppxb4gZG9rb27EjWlsaS5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJQcm9iw61ow6EgbmHEjcOtdMOhbsOtIHByxa96a3VtdS4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJWeWJlci4uLlwiLFxuICB2YWx1ZTogXCJob2Rub3RhXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiT2Rwb3bEm3p0ZSBwcm9zw61tIG5hIG90w6F6a3UuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIlBsZWFzZSBhbnN3ZXIgYXQgbGVhc3Qgb25lIHF1ZXN0aW9uLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIk9kcG92xJt6dGUgcHJvc8OtbSBuYSB2xaFlY2hueSBvdMOhemt5LlwiLFxuICBudW1lcmljRXJyb3I6IFwiViB0b210byBwb2xpIGx6ZSB6YWRhdCBwb3V6ZSDEjcOtc2xhLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIlphZGVqdGUgcHJvc8OtbSBhbGVzcG/FiCB7MH0gem5ha8WvLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIlphZGVqdGUgcHJvc8OtbSBtw6luxJsgbmXFviB7MH0gem5ha8WvLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIlphZGVqdGUgcHJvc8OtbSB2w61jZSBuZcW+IHswfSBhIG3DqW7EmyBuZcW+IHsxfSB6bmFrxa8uXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiVnlwbMWIdGUgcHJvc8OtbSBhbGVzcG/FiCB7MH0gxZnDoWRrxa8uXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlZ5YmVydGUgcHJvc8OtbSBhbGVzcG/FiCB7MH0gdmFyaWFudHkuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIk5ldnliw61yZWp0ZSBwcm9zw61tIHbDrWNlIG5lxb4gezB9IHZhcmlhbnQuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCJPZHBvdsSbxI8gJ3swfScgYnkgbcSbbG8gYsO9dCB2xJt0xaHDrSBuZWJvIHJvdm5vIHsxfSBhIG1lbsWhw60gbmVibyByb3ZubyB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCJPZHBvdsSbxI8gJ3swfScgYnkgbcSbbG8gYsO9dCB2xJt0xaHDrSBuZWJvIHJvdm5vIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIk9kcG92xJvEjyAnezB9JyBieSBtxJtsbyBiw710IG1lbsWhw60gbmVibyByb3ZubyB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIlphZGVqdGUgcHJvc8OtbSBwbGF0bm91IGUtbWFpbG92b3UgYWRyZXN1LlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCJWw71yYXo6IHswfSBieSBtxJtsIHZyw6F0aXQgaG9kbm90dSDigJ50cnVl4oCcLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiUG/FvmFkYXZlayB2csOhdGlsIGNoeWJ1ICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIlBvxb5hZGF2ZWsgbmV2csOhdGlsIGRhdGEgbmVibyBjZXN0YSBqZSBuZXBsYXRuw6FcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJWZWxpa29zdCBzb3Vib3J1IGJ5IG5lbcSbbGEgYsO9dCB2xJt0xaHDrSBuZcW+IHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlphZGVqdGUgcHJvc8OtbSBqaW5vdSBob2Rub3R1LlwiLFxuICB1cGxvYWRpbmdGaWxlOiBcIlbDocWhIHNvdWJvciBzZSBuYWhyw6F2w6EuIFprdXN0ZSB0byBwcm9zw61tIHphIG7Em2tvbGlrIHNla3VuZC5cIixcbiAgbG9hZGluZ0ZpbGU6IFwiTmHEjcOtdMOhbsOtLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiVnliZXJ0ZSBzb3Vib3J5IC4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiTmVuw60genZvbGVuw70gxb7DoWRuw70gc291Ym9yXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiQ2hjZXRlIHNtYXphdCB6w6F6bmFtP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIlRhdG8gaG9kbm90YSBieSBtxJtsYSBiw710IGplZGluZcSNbsOhLlwiLFxuICBhZGRDb2x1bW46IFwiUMWZaWRhdCBzbG91cGVjXCIsXG4gIGFkZFJvdzogXCJQxZlpZGF0IMWZw6FkZWtcIixcbiAgcmVtb3ZlUm93OiBcIk9kc3RyYW5pdFwiLFxuICBhZGRQYW5lbDogXCJQxZlpZGF0IG5vdsO9XCIsXG4gIHJlbW92ZVBhbmVsOiBcIk9kc3RyYW5pdFwiLFxuICBjaG9pY2VzX0l0ZW06IFwicG9sb8W+a2FcIixcbiAgbWF0cml4X2NvbHVtbjogXCJTbG91cGVjXCIsXG4gIG1hdHJpeF9yb3c6IFwixZjDoWRla1wiLFxuICBzYXZpbmdEYXRhOiBcIlbDvXNsZWRreSBzZSB1a2zDoWRhasOtIG5hIHNlcnZlciAuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIkRvxaFsbyBrIGNoeWLEmyBhIHbDvXNsZWRreSBqc21lIG5lbW9obGkgdWxvxb5pdC5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiVsO9c2xlZGt5IGJ5bHkgw7pzcMSbxaFuxJsgdWxvxb5lbnkhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJaa3VzIHRvIHpub3Z1XCIsXG4gIHRpbWVyTWluOiBcIm1pblwiLFxuICB0aW1lclNlYzogXCJzZWtcIixcbiAgdGltZXJTcGVudEFsbDogXCJOYSB0w6l0byBzdHLDoW5jZSBqc3RlIHV0cmF0aWxpIGNlbGtlbSB7MH0gYSBjZWxrZW0gezF9LlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJOYSB0w6l0byBzdHLDoW5jZSBqc3RlIHV0cmF0aWxpIHswfS5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJDZWxrZW0ganN0ZSB1dHJhdGlsaSB7MH0uXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCJOYSB0w6l0byBzdHLDoW5jZSBqc3RlIHV0cmF0aWxpIHswfSB6IHsxfSBhIGNlbGtlbSB7Mn0geiB7M30uXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIk5hIHTDqXRvIHN0csOhbmNlIGpzdGUgc3Ryw6F2aWxpIHswfSB6IHsxfS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJDZWxrb3bEmyBqc3RlIHV0cmF0aWxpIHswfSB6IHsxfS5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIsSMaXN0w71cIixcbiAgY2xlYXJDYXB0aW9uOiBcIlByxa9obGVkbsOhXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIlZ5YmVydGUgc291Ym9yXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIk9kZWJlcnRlIHRlbnRvIHNvdWJvclwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIkFub1wiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiTmVcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiT3ByYXZkdSBjaGNldGUgb2RlYnJhdCB0ZW50byBzb3Vib3I6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIk9wcmF2ZHUgY2hjZXRlIG9kc3RyYW5pdCB2xaFlY2hueSBzb3Vib3J5P1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiTsOhemV2IG90w6F6a3lcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiY3NcIl0gPSBjemVjaFN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJjc1wiXSA9IFwixI1lxaF0aW5hXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGRhbmlzaFN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJUaWxiYWdlXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJWaWRlcmVcIixcbiAgY29tcGxldGVUZXh0OiBcIkbDpnJkaWdcIixcbiAgcHJldmlld1RleHQ6IFwiRm9ycHJlbWllcmVcIixcbiAgZWRpdFRleHQ6IFwiUmVkaWfDqXJcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIlN0YXJ0XCIsXG4gIG90aGVySXRlbVRleHQ6IFwiVmFsZ2ZyaXQgc3Zhci4uLlwiLFxuICBub25lSXRlbVRleHQ6IFwiSW5nZW5cIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiVsOmbGcgYWxsZVwiLFxuICBwcm9ncmVzc1RleHQ6IFwiU2lkZSB7MH0gYWYgezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJPcHRhZyB7MH0gYWYgezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJCZXN2YXJlZGUgezB9IC8gezF9IHNww7hyZ3Ntw6VsXCIsXG4gIGVtcHR5U3VydmV5OiBcIkRlciBlciBpbmdlbiBzeW5saWdlIHNww7hyZ3Ntw6VsLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIk1hbmdlIHRhayBmb3IgZGluIGJlc3ZhcmVsc2UhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCJWb3JlcyBkYXRhIHZpc2VyIGF0IGR1IGFsbGVyZWRlIGhhciBnZW5uZW1mw7hydCBkZXR0ZSBzcMO4cmdlc2tlbWEuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiU3DDuHJnZXNrZW1hZXQgaGVudGVzIGZyYSBzZXJ2ZXJlbi4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJWw6ZsZy4uLlwiLFxuICB2YWx1ZTogXCJ2w6ZyZGlcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJCZXN2YXIgdmVubGlnc3Qgc3DDuHJnc23DpWxldC5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiQmVzdmFyIHZlbmxpZ3N0IG1pbmRzdCDDqXQgc3DDuHJnc23DpWwuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiQmVzdmFyIHZlbmxpZ3N0IHNww7hyZ3Ntw6VsIGkgYWxsZSByw6Zra2VyLlwiLFxuICBudW1lcmljRXJyb3I6IFwiQW5naXYgZXQgdGFsLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIkFuZ2l2IG1pbmRzdCB7MH0gdGVnbi5cIixcbiAgdGV4dE1heExlbmd0aDogXCJQbGVhc2UgZW50ZXIgbGVzcyB0aGFuIHswfSBjaGFyYWN0ZXJzLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIkFuZ2l2IG1lcmUgZW5kIHswfSBvZyBtaW5kcmUgZW5kIHsxfSB0ZWduLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIlVkZnlsZCBtaW5kc3QgezB9IHLDpmtrZXIuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlbDpmxnIHZlbmxpZ3N0IG1pbmRzdCB7MH0gc3Zhcm11bGlnaGVkKGVyKS5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiVsOmbGcgdmVubGlnc3QgZsOmcnJlIHswfSBzdmFybXVsaWdoZWRlcihlcikuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCInezB9JyBza2FsIHbDpnJlIGxpZyBtZWQgZWxsZXIgc3TDuHJyZSBlbmQgezF9IG9nIGxpZyBtZWQgZWxsZXIgbWluZHJlIGVuZCB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCInezB9JyBza2FsIHbDpnJlIGxpZyBtZWQgZWxsZXIgc3TDuHJyZSBlbmQgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScgc2thbCB2w6ZyZSBsaWcgbWVkIGVsbGVyIG1pbmRyZSBlbmQgezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCJBbmdpdiB2ZW5saWdzdCBlbiBneWxkaWcgZS1tYWlsIGFkcmVzc2UuXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIlVkdHJ5a2tldDogezB9IHNrYWwgcmV0dXJuZXJlICd0cnVlJy5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIkZvcmVzcMO4cmdzbGVuIHJldHVybmVyZWRlIGZlamxlbiAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIkZvcmVzcMO4cmdzbGVuIHJldHVybmVyZWRlIGluZ2VuIGRhdGEgZWxsZXIgJ3BhdGgnIHBhcmFtZXRlcmVuIGVyIGZvcmtlcnRcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJGaWxzdMO4cnJlbHNlbiBtw6UgaWtrZSBvdmVyc3RpZ2UgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiQW5naXYgZW4gdsOmcmRpIGZvciBkaXQgdmFsZ2ZyaWUgc3Zhci5cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIkRpbiBmaWwgYmxpdmVyIHVwbG9hZGV0LiBWZW50IG5vZ2xlIHNla3VuZGVyIG9nIHByw7h2IGV2ZW50dWVsdCBpZ2VuLlwiLFxuICBsb2FkaW5nRmlsZTogXCJJbmRsw6ZzZXIuLi5cIixcbiAgY2hvb3NlRmlsZTogXCJWw6ZsZyBmaWwoZXIpLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJJbmdlbiBmaWwgZXIgdmFsZ3RcIixcbiAgY29uZmlybURlbGV0ZTogXCJWaWwgZHUgZmplcm5lIGRlbj9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJEZW5uZSB2w6ZyZGkgc2thbCB2w6ZyZSB1bmlrLlwiLFxuICBhZGRDb2x1bW46IFwiVGlsZsO4aiBrb2xvbm5lXCIsXG4gIGFkZFJvdzogXCJUaWxmw7hqIHLDpmtrZVwiLFxuICByZW1vdmVSb3c6IFwiRmplcm5cIixcbiAgYWRkUGFuZWw6IFwiVGlsZsO4aiBueVwiLFxuICByZW1vdmVQYW5lbDogXCJGamVyblwiLFxuICBjaG9pY2VzX0l0ZW06IFwidmFsZ1wiLFxuICBtYXRyaXhfY29sdW1uOiBcIktvbG9ubmVcIixcbiAgbWF0cml4X3JvdzogXCJSw6Zra2VcIixcbiAgc2F2aW5nRGF0YTogXCJSZXN1bHRhdGVybmUgYmxpdmVyIGdlbXQgcMOlIHNlcnZlcmVuLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJEZXIgb3BzdG9kIGVuIGZlamwgb2cgdmkga3VubmUgaWtrZSBnZW1tZSByZXN1bHRhdGV0LlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJSZXN1bHRhdGV0IGJsZXYgZ2VtdCFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIlByw7h2IGlnZW5cIixcbiAgdGltZXJNaW46IFwibWluXCIsXG4gIHRpbWVyU2VjOiBcInNla1wiLFxuICB0aW1lclNwZW50QWxsOiBcIkR1IGhhciBicnVndCB7MH0gcMOlIGRlbm5lIHNpZGUgb2cgezF9IGkgYWx0LlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJEdSBoYXIgYnJ1Z3QgezB9IHDDpSBkZW5uZSBzaWRlLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIkR1IGhhciBicnVndCB7MH0gaSBhbHQuXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCJEdSBoYXIgYnJ1Z3QgezB9IGFmIHsxfSBww6UgZGVubmUgc2lkZSBvZyB7Mn0gYWYgezN9IGkgYWx0LlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJEdSBoYXIgYnJ1Z3QgezB9IGFmIHsxfSBww6UgZGVubmUgc2lkZS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJEdSBoYXIgYnJ1Z3QgezB9IGFmIHsxfSBpIGFsdC5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIlJlbnNcIixcbiAgY2xlYXJDYXB0aW9uOiBcIkZqZXJuXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIlbDpmxnIGZpbFwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCJGamVybiBkZW5uZSBmaWxcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJKYVwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiSW5nZW5cIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiRXIgZHUgc2lra2VyIHDDpSwgYXQgZHUgdmlsIGZqZXJuZSBkZW5uZSBmaWw6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIkVyIGR1IHNpa2tlciBww6UsIGF0IGR1IHZpbCBmamVybmUgYWxsZSBmaWxlcj9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIlNww7hyZ3Ntw6VscyB0aXRlbFwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJkYVwiXSA9IGRhbmlzaFN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJkYVwiXSA9IFwiZGFuc2tcIjtcbiIsIi8vQ3JlYXRlZCBvbiBiZWhhbGYgaHR0cHM6Ly9naXRodWIuY29tL0ZyYW5rMTNcbi8vTW9kaWZpZWQgb24gYmVoYWxmIFJvZWxhbmQgVmVyYmFrZWxcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgZHV0Y2hTdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiVm9yaWdlXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJWb2xnZW5kZVwiLFxuICBjb21wbGV0ZVRleHQ6IFwiVmVyemVuZGVuXCIsXG4gIHByZXZpZXdUZXh0OiBcIlZvb3JiZWVsZFwiLFxuICBlZGl0VGV4dDogXCJCZXdlcmtcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIkJlZ2luIG1ldFwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIkFuZGVycywgbmwuXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJHZWVuXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIlNlbGVjdGVlciBBbGxlc1wiLFxuICBwcm9ncmVzc1RleHQ6IFwiUGFnaW5hIHswfSB2YW4gezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJSZWNvcmQgezB9IG9mIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiR2VhbnR3b29yZCB7MH0vezF9IHZyYWdlblwiLFxuICBlbXB0eVN1cnZleTogXCJFciBpcyBnZWVuIHppY2h0YmFyZSBwYWdpbmEgb2YgdnJhYWcgaW4gZGV6ZSB2cmFnZW5saWpzdFwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIkJlZGFua3Qgdm9vciBoZXQgaW52dWxsZW4gdmFuIGRlIHZyYWdlbmxpanN0XCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgICBcIk9uemUgZ2VnZXZlbnMgdG9uZW4gYWFuIGRhdCBqZSBkZXplIHZyYWdlbmxpanN0IHJlZWRzIGJlYW50d29vcmQgaGVidC5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJEZSB2cmFnZW5saWpzdCBpcyBhYW4gaGV0IGxhZGVuLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIktpZXMuLi5cIixcbiAgdmFsdWU6IFwid2FhcmRlXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiRGl0IGlzIGVlbiB2ZXJlaXN0ZSB2cmFhZ1wiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJHZWxpZXZlIHRlbiBtaW5zdGUgZWVuIHZyYWFnIHRlIGJlYW50d29vcmRlbi5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJEZXplIHZyYWFnIHZlcmVpc3Qgw6nDqW4gYW50d29vcmQgcGVyIHJpalwiLFxuICBudW1lcmljRXJyb3I6IFwiSGV0IGFudHdvb3JkIG1vZXQgZWVuIGdldGFsIHppam5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCJWdWwgbWluc3RlbnMgezB9IGthcmFrdGVycyBpblwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIkdlbGlldmUgbWluZGVyIGRhbiB7MH0ga2FyYWt0ZXJzIGluIHRlIHZ1bGxlbi5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCJHZWxpZXZlIG1lZXIgZGFuIHswfSBlbiBtaW5kZXIgZGFuIHsxfSBrYXJha3RlcnMgaW4gdGUgdnVsbGVuLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIkdlbGlldmUgdGVuIG1pbnN0ZSB7MH0gcmlqZW4gaW4gdGUgdnVsbGVuLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJTZWxlY3RlZXIgbWluaW11bSB7MH0gYW50d29vcmRlblwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJTZWxlY3RlZXIgbmlldCBtZWVyIGRhbiB7MH0gYW50d29vcmRlblwiLFxuICBudW1lcmljTWluTWF4OlxuICAgICAgXCJVdyBhbnR3b29yZCAnezB9JyBtb2V0IGdyb3RlciBvZiBnZWxpamsgemlqbiBhYW4gezF9IGVuIGtsZWluZXIgb2YgZ2VsaWprIGFhbiB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCJVdyBhbnR3b29yZCAnezB9JyBtb2V0IGdyb3RlciBvZiBnZWxpamsgemlqbiBhYW4gezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiVXcgYW50d29vcmQgJ3swfScgbW9ldCBncm90ZXIgb2YgZ2VsaWprIHppam4gYWFuIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwiVnVsIGVlbiBnZWxkaWcgZS1tYWlsYWRyZXMgaW5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiRGUgdWl0ZHJ1a2tpbmc6IHswfSBtb2V0ICd3YWFyJyB0ZXJ1Z2dldmVuLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiRGUgdnJhYWcga2VlcmRlIGVlbiBmb3V0IHRlcnVnICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgICAgXCJEZSB2cmFhZyBnYWYgZWVuIGxlZWcgYW50d29vcmQgdGVydWcgb2YgZGUgJ3BhZCcgZWlnZW5zY2hhcCBpcyBuaWV0IGNvcnJlY3RcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJEZSBncm9vdHRlIHZhbiBoZXQgYmVzdGFuZCBtYWcgbmlldCBncm90ZXIgemlqbiBkYW4gezB9XCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJWdWwgaGV0IHZlbGQgJ0FuZGVycywgbmwuJyBpblwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgICAgXCJVdyBiZXN0YW5kIHdvcmR0IG9wZ2VsYWRlbi4gR2VsaWV2ZSBlbmtlbGUgc2Vjb25kZW4gdGUgd2FjaHRlbiBlbiBvcG5pZXV3IHRlIHByb2JlcmVuLlwiLFxuICBsb2FkaW5nRmlsZTogXCJPcGxhZGVuLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiS2llcyB1dyBiZXN0YW5kKGVuKS4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiR2VlbiBiZXN0YW5kIGdla296ZW5cIixcbiAgY29uZmlybURlbGV0ZTogXCJXaWwgamUgZGV6ZSBnZWdldmVucyB2ZXJ3aWpkZXJlbj9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJEZXplIHdhYXJkZSBtb2V0IHVuaWVrIHppam4uXCIsXG4gIGFkZENvbHVtbjogXCJWb2VnIGtvbG9tIHRvZVwiLFxuICBhZGRSb3c6IFwiVm9lZyByaWogdG9lXCIsXG4gIHJlbW92ZVJvdzogXCJWZXJ3aWpkZXJcIixcbiAgYWRkUGFuZWw6IFwiTmlldXdlIHRvZXZvZWdlblwiLFxuICByZW1vdmVQYW5lbDogXCJWZXJ3aWpkZXJcIixcbiAgY2hvaWNlc19JdGVtOiBcIm9uZGVyd2VycFwiLFxuICBtYXRyaXhfY29sdW1uOiBcIktvbG9tXCIsXG4gIG1hdHJpeF9yb3c6IFwiUmlqXCIsXG4gIHNhdmluZ0RhdGE6IFwiRGUgcmVzdWx0YXRlbiB3b3JkZW4gYmV3YWFyZCBvcCBkZSBzZXJ2ZXIuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIkVyIHdhcyBlZW4gcHJvYmxlZW0gZW4gd2Uga29uZGVuIGRlIHJlc3VsdGF0ZW4gbmlldCBiZXdhcmVuLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJEZSByZXN1bHRhdGVuIHdlcmRlbiBzdWNjZXN2b2wgYmV3YWFyZCFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIlByb2JlZXIgb3BuaWV1d1wiLFxuICB0aW1lck1pbjogXCJtaW5pbXVtXCIsXG4gIHRpbWVyU2VjOiBcInNlY1wiLFxuICB0aW1lclNwZW50QWxsOiBcIlUgaGVlZnQgezB9IGdlc3BlbmRlZXJkIG9wIGRlemUgcGFnaW5hIGVuIHsxfSBpbiB0b3RhYWwuXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIlUgaGVlZnQgezB9IG9wIGRlemUgcGFnaW5hIGdlc3BlbmRlZXJkLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIlUgaGVlZnQgaW4gdG90YWFsIHswfSBnZXNwZW5kZWVyZC5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICAgIFwiVSBoZWVmdCB7MH0gdmFuIHsxfSBvcCBkZXplIHBhZ2luYSBnZXNwZW5kZWVyZCBlbiB7Mn0gdmFuIHszfSBpbiB0b3RhYWwuXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIlUgaGVlZnQgezB9IHZhbiB7MX0gZ2VzcGVuZGVlcmQgb3AgZGV6ZSBwYWdpbmEuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiVSBoZWVmdCB7MH0gdmFuIHsxfSBpbiBoZXQgdG90YWFsLlwiLFxuICBjbGVhbkNhcHRpb246IFwiS3VpcyBvcFwiLFxuICBjbGVhckNhcHRpb246IFwiS3VpcyBvcFwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJHZWtvemVuIGJlc3RhbmRcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiVmVyd2lqZGVyIGRlemUgZmlsZVwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIkphXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOZWVuXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIkJlbnQgdSB6ZWtlciBkYXQgdSBkZXplIGZpbGUgd2lsdCB2ZXJ3aWpkZXJlbjogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiQmVudCB1IHpla2VyIGRhdCB1IGFsIGRlemUgZmlsZXMgd2lsdCB2ZXJ3aWpkZXJlbj9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIlRpdGVsIHZhbiBkZSB2cmFhZ1wiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJubFwiXSA9IGR1dGNoU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcIm5sXCJdID0gXCJuZWRlcmxhbmRzXCI7XG4iLCIvL1VuY29tbWVudCB0aGlzIGxpbmUgb24gY3JlYXRpbmcgYSB0cmFuc2xhdGlvbiBmaWxlXG4vL2ltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgZW5nbGlzaFN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJQcmV2aW91c1wiLFxuICBwYWdlTmV4dFRleHQ6IFwiTmV4dFwiLFxuICBjb21wbGV0ZVRleHQ6IFwiQ29tcGxldGVcIixcbiAgcHJldmlld1RleHQ6IFwiUHJldmlld1wiLFxuICBlZGl0VGV4dDogXCJFZGl0XCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJTdGFydFwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIk90aGVyIChkZXNjcmliZSlcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIk5vbmVcIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiU2VsZWN0IEFsbFwiLFxuICBwcm9ncmVzc1RleHQ6IFwiUGFnZSB7MH0gb2YgezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJSZWNvcmQgezB9IG9mIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiQW5zd2VyZWQgezB9L3sxfSBxdWVzdGlvbnNcIixcbiAgZW1wdHlTdXJ2ZXk6IFwiVGhlcmUgaXMgbm8gdmlzaWJsZSBwYWdlIG9yIHF1ZXN0aW9uIGluIHRoZSBzdXJ2ZXkuXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiVGhhbmsgeW91IGZvciBjb21wbGV0aW5nIHRoZSBzdXJ2ZXkhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCJPdXIgcmVjb3JkcyBzaG93IHRoYXQgeW91IGhhdmUgYWxyZWFkeSBjb21wbGV0ZWQgdGhpcyBzdXJ2ZXkuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiTG9hZGluZyBTdXJ2ZXkuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiQ2hvb3NlLi4uXCIsXG4gIHZhbHVlOiBcInZhbHVlXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiUmVzcG9uc2UgcmVxdWlyZWQuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIlJlc3BvbnNlIHJlcXVpcmVkOiBhbnN3ZXIgYXQgbGVhc3Qgb25lIHF1ZXN0aW9uLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlJlc3BvbnNlIHJlcXVpcmVkOiBhbnN3ZXIgcXVlc3Rpb25zIGluIGFsbCByb3dzLlwiLFxuICBudW1lcmljRXJyb3I6IFwiVGhlIHZhbHVlIHNob3VsZCBiZSBudW1lcmljLlwiLFxuICBtaW5FcnJvcjogXCJUaGUgdmFsdWUgc2hvdWxkIG5vdCBiZSBsZXNzIHRoYW4gezB9XCIsXG4gIG1heEVycm9yOiBcIlRoZSB2YWx1ZSBzaG91bGQgbm90IGJlIGdyZWF0ZXIgdGhhbiB7MH1cIixcbiAgdGV4dE1pbkxlbmd0aDogXCJQbGVhc2UgZW50ZXIgYXQgbGVhc3QgezB9IGNoYXJhY3RlcihzKS5cIixcbiAgdGV4dE1heExlbmd0aDogXCJQbGVhc2UgZW50ZXIgbm8gbW9yZSB0aGFuIHswfSBjaGFyYWN0ZXIocykuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6XG4gICAgXCJQbGVhc2UgZW50ZXIgYXQgbGVhc3QgezB9IGFuZCBubyBtb3JlIHRoYW4gezF9IGNoYXJhY3RlcnMuXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiUGxlYXNlIGZpbGwgaW4gYXQgbGVhc3QgezB9IHJvdyhzKS5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCB7MH0gdmFyaWFudChzKS5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiUGxlYXNlIHNlbGVjdCBubyBtb3JlIHRoYW4gezB9IHZhcmlhbnQocykuXCIsXG4gIG51bWVyaWNNaW5NYXg6IFwiVGhlICd7MH0nIHNob3VsZCBiZSBhdCBsZWFzdCB7MX0gYW5kIGF0IG1vc3QgezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiVGhlICd7MH0nIHNob3VsZCBiZSBhdCBsZWFzdCB7MX1cIixcbiAgbnVtZXJpY01heDogXCJUaGUgJ3swfScgc2hvdWxkIGJlIGF0IG1vc3QgezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlLW1haWwgYWRkcmVzcy5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiVGhlIGV4cHJlc3Npb246IHswfSBzaG91bGQgcmV0dXJuICd0cnVlJy5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIlRoZSByZXF1ZXN0IHJldHVybmVkIGVycm9yICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiVGhlIHJlcXVlc3QgcmV0dXJuZWQgZW1wdHkgZGF0YSBvciB0aGUgJ3BhdGgnIHByb3BlcnR5IGlzIGluY29ycmVjdFwiLFxuICBleGNlZWRNYXhTaXplOiBcIlRoZSBmaWxlIHNpemUgc2hvdWxkIG5vdCBleGNlZWQgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiUmVzcG9uc2UgcmVxdWlyZWQ6IGVudGVyIGFub3RoZXIgdmFsdWUuXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCJZb3VyIGZpbGUgaXMgdXBsb2FkaW5nLiBQbGVhc2Ugd2FpdCBzZXZlcmFsIHNlY29uZHMgYW5kIHRyeSBhZ2Fpbi5cIixcbiAgbG9hZGluZ0ZpbGU6IFwiTG9hZGluZy4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIkNob29zZSBmaWxlKHMpLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJObyBmaWxlIGNob3NlblwiLFxuICBmaWxlRHJhZ0FyZWFQbGFjZWhvbGRlcjogXCJEcm9wIGEgZmlsZSBoZXJlIG9yIGNsaWNrIHRoZSBidXR0b24gYmVsb3cgdG8gbG9hZCB0aGUgZmlsZS5cIixcbiAgY29uZmlybURlbGV0ZTogXCJEbyB5b3Ugd2FudCB0byBkZWxldGUgdGhlIHJlY29yZD9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJUaGlzIHZhbHVlIHNob3VsZCBiZSB1bmlxdWUuXCIsXG4gIGFkZENvbHVtbjogXCJBZGQgY29sdW1uXCIsXG4gIGFkZFJvdzogXCJBZGQgcm93XCIsXG4gIHJlbW92ZVJvdzogXCJSZW1vdmVcIixcbiAgZW1wdHlSb3dzVGV4dDogXCJUaGVyZSBhcmUgbm8gcm93cy5cIixcbiAgYWRkUGFuZWw6IFwiQWRkIG5ld1wiLFxuICByZW1vdmVQYW5lbDogXCJSZW1vdmVcIixcbiAgY2hvaWNlc19JdGVtOiBcIml0ZW1cIixcbiAgbWF0cml4X2NvbHVtbjogXCJDb2x1bW5cIixcbiAgbWF0cml4X3JvdzogXCJSb3dcIixcbiAgbXVsdGlwbGV0ZXh0X2l0ZW1uYW1lOiBcInRleHRcIixcbiAgc2F2aW5nRGF0YTogXCJUaGUgcmVzdWx0cyBhcmUgYmVpbmcgc2F2ZWQgb24gdGhlIHNlcnZlci4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiQW4gZXJyb3Igb2NjdXJyZWQgYW5kIHdlIGNvdWxkIG5vdCBzYXZlIHRoZSByZXN1bHRzLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJUaGUgcmVzdWx0cyB3ZXJlIHNhdmVkIHN1Y2Nlc3NmdWxseSFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIlRyeSBhZ2FpblwiLFxuICB0aW1lck1pbjogXCJtaW5cIixcbiAgdGltZXJTZWM6IFwic2VjXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiWW91IGhhdmUgc3BlbnQgezB9IG9uIHRoaXMgcGFnZSBhbmQgezF9IGluIHRvdGFsLlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJZb3UgaGF2ZSBzcGVudCB7MH0gb24gdGhpcyBwYWdlLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIllvdSBoYXZlIHNwZW50IHswfSBpbiB0b3RhbC5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIllvdSBoYXZlIHNwZW50IHswfSBvZiB7MX0gb24gdGhpcyBwYWdlIGFuZCB7Mn0gb2YgezN9IGluIHRvdGFsLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJZb3UgaGF2ZSBzcGVudCB7MH0gb2YgezF9IG9uIHRoaXMgcGFnZS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJZb3UgaGF2ZSBzcGVudCB7MH0gb2YgezF9IGluIHRvdGFsLlwiLFxuICBjbGVhbkNhcHRpb246IFwiQ2xlYW5cIixcbiAgY2xlYXJDYXB0aW9uOiBcIkNsZWFyXCIsXG4gIHNpZ25hdHVyZVBsYWNlSG9sZGVyOiBcIlNpZ24gaGVyZVwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJDaG9vc2UgZmlsZVwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCJSZW1vdmUgdGhpcyBmaWxlXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiWWVzXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOb1wiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd2FudCB0byByZW1vdmUgdGhpcyBmaWxlOiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd2FudCB0byByZW1vdmUgYWxsIGZpbGVzP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiUXVlc3Rpb24gVGl0bGVcIixcbiAgbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcIkNhbmNlbFwiLFxuICBtb2RhbEFwcGx5QnV0dG9uVGV4dDogXCJBcHBseVwiLFxuICBmaWx0ZXJlZFRleHRQbGFjZWhvbGRlcjogXCJUeXBlIHRvIHNlYXJjaC4uLlwiLFxufTtcblxuLy9VbmNvbW1lbnQgdGhlc2UgdHdvIGxpbmVzIG9uIGNyZWF0aW5nIGEgdHJhbnNsYXRpb24gZmlsZS4gWW91IHNob3VsZCByZXBsYWNlIFwiZW5cIiBhbmQgZW5TdHJpbmdzIHdpdGggeW91ciBsb2NhbGUgKFwiZnJcIiwgXCJkZVwiIGFuZCBzbyBvbikgYW5kIHlvdXIgdmFyaWFibGUuXG4vL3N1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiZW5cIl0gPSBlbmdsaXNoU3RyaW5ncztcbi8vc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wiZW5cIl0gPSBcIkVuZ2xpc2hcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgZXN0b25pYW5TdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiVGFnYXNpXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJFZGFzaVwiLFxuICBjb21wbGV0ZVRleHQ6IFwiTMO1cGV0YVwiLFxuICBwcmV2aWV3VGV4dDogXCJFZWx2YWFkZVwiLFxuICBlZGl0VGV4dDogXCJNdXVkYVwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiQWx1c3RhXCIsXG4gIG90aGVySXRlbVRleHQ6IFwiTXV1ICh0w6Rwc3VzdGEpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJNaXR0ZSBtaWRhZ2lcIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiVmFsaSBrw7Vpa1wiLFxuICBwcm9ncmVzc1RleHQ6IFwiTGVoZWvDvGxnIHswfS97MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIktpcmplIHswfS97MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIlZhc3RhdHVkIHswfSBrw7xzaW11c3QgezF9LXN0XCIsXG4gIGVtcHR5U3VydmV5OiBcIlNlbGxlcyB1dXJpbmd1cyBlaSBvbGUgw7xodGtpIG7DpGh0YXZhdCBsZWhla8O8bGdlIHbDtWkga8O8c2ltdXN0LlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIkFpdMOkaCwgZXQgdmFzdGFzaWQgYW5rZWVkaWxlIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwiTWVpZSBhbmRtZXRlbCBvbGVkIHNhIHNlbGxlbGUgYW5rZWVkaWxlIGp1YmEgdmFzdGFudWQuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiTGFlbiBhbmtlZXRpLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIlZhbGkuLi5cIixcbiAgdmFsdWU6IFwidsOkw6RydHVzXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiUGFsdW4gdmFzdGEga8O8c2ltdXNlbGUuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIlBhbHVuIHZhc3RhIHbDpGhlbWFsdCDDvGhlbGUga8O8c2ltdXNlbGUuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiUGFsdW4gYW5uYSB2YXN0dXMgaWdhbCByZWFsLlwiLFxuICBudW1lcmljRXJyb3I6IFwiU2VlIHBlYWtzIG9sZW1hIG51bWJyaWxpbmUgdsOkw6RydHVzLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIlBhbHVuIHNpc2VzdGEgdsOkaGVtYWx0IHswfSB0w6RoZW3DpHJraS5cIixcbiAgdGV4dE1heExlbmd0aDogXCJQYWx1biDDpHJhIHNpc2VzdGEgcm9oa2VtIGt1aSB7MH0gdMOkaGVtw6Rya2kuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiU2lzZXN0YSBwYWx1biB7MH0gLSB7MX0gdMOkaGVtw6Rya2kuXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiU2lzZXN0YSBwbGF1biB2w6RoZW1hbHQgezB9IHJpZGEuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlBhbHVuIHZhbGkgdsOkaGVtYWx0IHswfSB2YXJpYW50aS5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiUGFsdW4gdmFsaSBrw7VpZ2Ugcm9oa2VtIHswfSB2YXJpYW50aS5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIid7MH0nIHBlYWtzIG9sZW1hIHbDtXJkbmUgdsO1aSBzdXVyZW0ga3VpIHsxfSBqYSB2w7VyZG5lIHbDtWkgdsOkaWtzZW0ga3VpIHsyfVwiLFxuICBudW1lcmljTWluOiBcIid7MH0nIHBlYWtzIG9sZW1hIHbDtXJkbmUgdsO1aSBzdXVyZW0ga3VpIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nIHBlYWtzIG9sZW1hIHbDtXJuZGUgdsO1aSB2w6Rpa3NlbSBrdWkgezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCJTaXNlc3RhIHBhbHVuIGtvcnJla3RuZSBlLXBvc3RpIGFhZHJlc3MuXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIkF2YWxkaXM6IHswfSBwZWFrcyB0YWdhc3RhbWEgdMO1ZXNlLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiVGFvdGx1cyB0YWdhc3RhcyB2ZWEg4oCeezB94oCdLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiVGFvdGx1cyB0YWdhc3RhcyB0w7xoamFkIGFuZG1lZCB2w7VpIGF0cmlidXV0ICdwYXRoJyBvbiB2YWxlXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiRmFpbGkgc3V1cnVzIGVpIHRvaGkgw7xsZXRhZGEgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiU2lzZXN0YSBwYWx1biBtdXUgdmFzdHVzLlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiU2ludSBmYWlsIGxhZWIgw7xsZXMuIFBhbHVuIG9vdGEgbcO1bmVkIHNla3VuZGlkIG5pbmcgcHJvb3ZpIHNlZWrDpHJlbCB1dWVzdGkuXCIsXG4gIGxvYWRpbmdGaWxlOiBcIkxhZW4uLi5cIixcbiAgY2hvb3NlRmlsZTogXCJWYWxpIGZhaWwoaWQpLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJGYWlsaSBwb2xlIHZhbGl0dWRcIixcbiAgY29uZmlybURlbGV0ZTogXCJLYXMgdGFoYWQga2lyamUga3VzdHV0YWRhP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIlNlZSB2w6TDpHJ0dXMgcGVhYiBvbGVtYSB1bmlrYWFsbmUuXCIsXG4gIGFkZENvbHVtbjogXCJMaXNhIHZlZXJnXCIsXG4gIGFkZFJvdzogXCJMaXNhIHJpZGFcIixcbiAgcmVtb3ZlUm93OiBcIkVlbWFsZGFcIixcbiAgYWRkUGFuZWw6IFwiTGlzYSB1dXNcIixcbiAgcmVtb3ZlUGFuZWw6IFwiRWVtYWxkYVwiLFxuICBjaG9pY2VzX0l0ZW06IFwiw7xrc3VzXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiVmVlcmdcIixcbiAgbWF0cml4X3JvdzogXCJSaWRhXCIsXG4gIHNhdmluZ0RhdGE6IFwiU2FsdmVzdGFuIGFuZG1lZCBzZXJ2ZXJpcy4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiVGVra2lzIHZpZ2EgbmluZyBtZSBlaSBzYWFudWQgdmFzdHVzZWlkIHNhbHZlc3RhZGEuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIlZhc3R1c3RlIHNhbHZlc3RhbWluZSDDtW5uZXN0dXMhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJQcm9vdmkgdXVlc3RpXCIsXG4gIHRpbWVyTWluOiBcIm1pblwiLFxuICB0aW1lclNlYzogXCJzZWtcIixcbiAgdGltZXJTcGVudEFsbDogXCJPbGVkIHZlZXRudWQgezB9IHNlbGxlbCBsZWhlbCBuaW5nIGtva2t1IHsxfS5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwiT2xlZCB2ZWV0bnVkIHswfSBzZWxsZWwgbGVoZWwuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiT2xlZCB2ZWV0bnVkIHswfSBrb2trdS5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIk9sZWQga3VsdXRhbnVkIHswfSB2w7VpbWFsaWt1c3QgezF9IHNlbGxlbCBsZWhlbCBuaW5nIHsyfSB2w7VpbWFsaWt1c3QgezN9IGtva2t1LlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJPbGVkIGt1bHV0YW51ZCB7MH0gdsO1aW1hbGlrdXN0IHsxfSBzZWxsZWwgbGVoZWwuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiT2xlZCBrdWx1dGFudWQgezB9IHbDtWltYWxpa3VzdCB7MX0ga29ndWFqYXN0LlwiLFxuICBjbGVhbkNhcHRpb246IFwiUHVoYXN0YVwiLFxuICBjbGVhckNhcHRpb246IFwiUHVoYXN0YVwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJWYWxpIGZhaWxcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiRWVtYWxkYSBzZWUgZmFpbFwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIkphaFwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiRWlcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiT2xlZCBzYSBraW5kZWwsIGV0IHNvb3ZpZCBzZWxsZSBmYWlsaSBlZW1hbGRhZGE6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIk9sZWQgc2Ega2luZGVsLCBldCBzb292aWQgZWVtYWxkYWRhIGvDtWlrIGZhaWxpZD9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIkvDvHNpbXVzZSBwZWFsa2lyaVwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJldFwiXSA9IGVzdG9uaWFuU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImV0XCJdID0gXCJlZXN0aSBrZWVsXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGZpbm5pc2hTdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiRWRlbGxpbmVuXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJTZXVyYWF2YVwiLFxuICBjb21wbGV0ZVRleHQ6IFwiVmFsbWlzXCIsXG4gIHByZXZpZXdUZXh0OiBcIkVzaWthdHNlbHVcIixcbiAgZWRpdFRleHQ6IFwiTXVva2thYVwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiQWxvaXRhXCIsXG4gIG90aGVySXRlbVRleHQ6IFwiTXV1ICh0YXJrZW5uYSlcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIkVpIG1pdMOkw6RuXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIlZhbGl0c2Uga2Fpa2tpXCIsXG4gIHByb2dyZXNzVGV4dDogXCJTaXZ1IHswfSAvIHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiT3NpbyB7MH0gLyB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIk9sZXQgdmFzdGFubnV0IHswfSAvIHsxfSBreXN5bXlrc2Vlbi5cIixcbiAgZW1wdHlTdXJ2ZXk6XG4gICAgXCJUw6Rzc8OkIGt5c2VseXNzw6QgZWkgb2xlIHlodMOkw6RuIG7DpGt5dmlsbMOkIG9sZXZhYSBzaXZ1YSB0YWkga3lzeW15c3TDpC5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJLaWl0b3Mga3lzZWx5eW4gdmFzdGFhbWlzZXN0YSFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcIlRpZXRvamVtbWUgbXVrYWFuIG9sZXQgam8gc3Vvcml0dGFudXQgdMOkbcOkbiBreXNlbHluLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIkt5c2VsecOkIGxhZGF0YWFuIHBhbHZlbGltZWx0YS4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJWYWxpdHNlLi4uXCIsXG4gIHZhbHVlOiBcImFydm9cIixcbiAgcmVxdWlyZWRFcnJvcjogXCJWYXN0YWEga3lzeW15a3NlZW4sIGtpaXRvcy5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiVmFzdGFhIGFpbmFraW4geWh0ZWVuIGt5c3lteWtzZWVuLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlZhc3RhYSBreXN5bXlrc2lpbiBrYWlraWxsYSByaXZlaWxsw6QuXCIsXG4gIG51bWVyaWNFcnJvcjogXCJBcnZvbiB0dWxlZSBvbGxhIG51bWVlcmluZW4uXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiU3nDtnTDpCB2w6RoaW50w6TDpG4gezB9IG1lcmtracOkLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIsOEbMOkIHN5w7Z0w6QgeWxpIHswfSBtZXJra2nDpC5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCJTecO2dMOkIHbDpGhpbnTDpMOkbiB7MH0gamEgZW5pbnTDpMOkbiB7MX0gbWVya2tpw6QuXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiVMOkeXTDpCB2w6RoaW50w6TDpG4gezB9IHJpdmnDpC5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiVmFsaXRzZSB2w6RoaW50w6TDpG4gezB9IHZhaWh0b2VodG9hLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJWYWxpdHNlIGVuaW50w6TDpG4gezB9IHZhaWh0b2VodG9hLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiTHV2dW4gJ3swfScgdHVsZWUgb2xsYSB2w6RoaW50w6TDpG4gezF9IGphIGtvcmtlaW50YWFuIHsyfS5cIixcbiAgbnVtZXJpY01pbjogXCJMdXZ1biAnezB9JyB0dWxlZSBvbGxhIHbDpGhpbnTDpMOkbiB7MX0uXCIsXG4gIG51bWVyaWNNYXg6IFwiTHV2dW4gJ3swfScgdHVsZWUgb2xsYSBrb3JrZWludGFhbiB7MX0uXCIsXG4gIGludmFsaWRFbWFpbDogXCJTecO2dMOkIHZhbGlkaSBzw6Roa8O2cG9zdGlvc29pdGUuXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIkxhdXNla2tlZW46IHswfSBwaXTDpGlzaSBwYWxhdXR0YWEgJ3RydWUnLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiUHl5bnTDtiBwYWxhdXR0aSB2aXJoZWVuIHswfS4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIlB5eW50w7YgcGFsYXV0dGkgdHloasOkbiB0aWVkb3N0b24gdGFpICdwYXRoJy1hc2V0dXMgb24gdsOkw6Ryw6RcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJUaWVkb3N0b24ga29rbyBlaSBzYWEgb2xsYSBzdXVyZW1waSBrdWluIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlRhcmtlbm5hIHZhc3RhdXN0YXNpIHRla3N0aWtlbnR0w6TDpG4uXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCJUaWVkb3N0b2EgbMOkaGV0ZXTDpMOkbi4gT2RvdGEgbXV1dGFtYSBzZWt1bnRpIGphIHlyaXTDpCB1dWRlbGxlZW4uXCIsXG4gIGxvYWRpbmdGaWxlOiBcIkxhZGF0YWFuLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiVmFsaXRzZSB0aWVkb3N0byh0KS4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiRWkgdGllZG9zdG9hIHZhbGl0dHVuYVwiLFxuICBjb25maXJtRGVsZXRlOiBcIkhhbHVhdGtvIHBvaXN0YWEgb3Npb24/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiVMOkbcOkIGFydm8gb24gam8ga8OkeXTDtnNzw6QuIFN5w7Z0w6QgdG9pbmVuIGFydm8uXCIsXG4gIGFkZENvbHVtbjogXCJMaXPDpMOkIHNhcmFrZVwiLFxuICBhZGRSb3c6IFwiTGlzw6TDpCByaXZpXCIsXG4gIHJlbW92ZVJvdzogXCJQb2lzdGFcIixcbiAgZW1wdHlSb3dzVGV4dDogXCJFaSByaXZlasOkXCIsXG4gIGFkZFBhbmVsOiBcIkxpc8Okw6QgdXVzaVwiLFxuICByZW1vdmVQYW5lbDogXCJQb2lzdGFcIixcbiAgY2hvaWNlc19JdGVtOiBcImtvaGRlXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiU2FyYWtlXCIsXG4gIG1hdHJpeF9yb3c6IFwiUml2aVwiLFxuICBzYXZpbmdEYXRhOiBcIlRpZXRvamEgdGFsbGVubmV0YWFuIHBhbHZlbGltZWxsZS4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiVGFwYWh0dWkgdmlyaGUsIGVtbWVrw6Qgdm9pbmVldCB0YWxsZW50YWEga3lzZWx5biB0aWV0b2phLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJUaWVkb3QgdGFsbGVubmV0dGlpbiBvbm5pc3R1bmVlc3RpIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiWXJpdMOkIHV1ZGVsbGVlblwiLFxuICB0aW1lck1pbjogXCJtaW5cIixcbiAgdGltZXJTZWM6IFwic2VrXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiT2xldCBrw6R5dHTDpG55dCB7MH0gdMOkbGzDpCBzaXZ1bGxhIGphIHlodGVlbnPDpCB7MX0uXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIk9sZXQga8OkeXR0w6RueXQgezB9IHTDpGxsw6Qgc2l2dWxsYS5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJPbGV0IGvDpHl0dMOkbnl0IHlodGVlbnPDpCB7MH0uXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCJPbGV0IGvDpHl0dMOkbnl0IHTDpGxsw6Qgc2l2dWxsYSB7MH0gLyB7MX0gamEgeWh0ZWVuc8OkIHsyfSAvIHszfS5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiT2xldCBrw6R5dHTDpG55dCB7MH0gLyB7MX0gdMOkbGzDpCBzaXZ1bGxhLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIk9sZXQga8OkeXR0w6RueXQgeWh0ZWVuc8OkIHswfSAvIHsxfS5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIlB5eWhpXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJUeWhqZW5uw6RcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwiVmFsaXRzZSB0aWVkb3N0b1wiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCJQb2lzdGEgdMOkbcOkIHRpZWRvc3RvXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiS3lsbMOkXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJFaVwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJIYWx1YXRrbyB2YXJtYXN0aSBwb2lzdGFhIHTDpG3DpG4gdGllZG9zdG9uOiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJIYWx1YXRrbyB2YXJtYXN0aSBwb2lzdGFhIGthaWtraSB0aWVkb3N0b3Q/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJLeXN5bXlrc2VuIG90c2lra29cIixcbiAgbW9kYWxDYW5jZWxCdXR0b25UZXh0OiBcIlBlcnV1dGFcIixcbiAgbW9kYWxBcHBseUJ1dHRvblRleHQ6IFwiS8OkeXTDpFwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJmaVwiXSA9IGZpbm5pc2hTdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wiZmlcIl0gPSBcInN1b21pXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGZyZW5jaFN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJQcsOpY8OpZGVudFwiLFxuICBwYWdlTmV4dFRleHQ6IFwiU3VpdmFudFwiLFxuICBjb21wbGV0ZVRleHQ6IFwiVGVybWluZXJcIixcbiAgcHJldmlld1RleHQ6IFwiQXBlcsOndVwiLFxuICBlZGl0VGV4dDogXCJNb2RpZmllclwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiQ29tbWVuY2VyXCIsXG4gIG90aGVySXRlbVRleHQ6IFwiQXV0cmUgKHByw6ljaXNlcilcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIkF1Y3VuXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIlRvdXQgc8OpbGVjdGlvbm5lclwiLFxuICBwcm9ncmVzc1RleHQ6IFwiUGFnZSB7MH0gc3VyIHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiRW5yZWdpc3RyZW1lbnQgezB9IHN1ciB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcInswfS97MX0gcXVlc3Rpb24ocykgcsOpcG9uZHVlKHMpXCIsXG4gIGVtcHR5U3VydmV5OiBcIklsIG4neSBhIG5pIHBhZ2UgdmlzaWJsZSBuaSBxdWVzdGlvbiB2aXNpYmxlIGRhbnMgY2UgcXVlc3Rpb25uYWlyZVwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIk1lcmNpIGQnYXZvaXIgcsOpcG9uZHUgYXUgcXVlc3Rpb25uYWlyZSAhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6IFwiTm9zIGRvbm7DqWVzIGluZGlxdWVudCBxdWUgdm91cyBhdmV6IGTDqWrDoCByZW1wbGkgY2UgcXVlc3Rpb25uYWlyZS5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJMZSBxdWVzdGlvbm5haXJlIGVzdCBlbiBjb3VycyBkZSBjaGFyZ2VtZW50Li4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIkNob2lzaXNzZXouLi5cIixcbiAgdmFsdWU6IFwidmFsZXVyXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiTGEgcsOpcG9uc2Ugw6AgY2V0dGUgcXVlc3Rpb24gZXN0IG9ibGlnYXRvaXJlLlwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJNZXJjaSBkZSByw6lwb25kcmUgYXUgbW9pbnMgw6AgdW5lIHF1ZXN0aW9uLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlRvdXRlcyBsZXMgbGlnbmVzIHNvbnQgb2JsaWdhdG9pcmVzXCIsXG4gIG51bWVyaWNFcnJvcjogXCJMYSByw6lwb25zZSBkb2l0IMOqdHJlIHVuIG5vbWJyZS5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCJNZXJjaSBkZSBzYWlzaXIgYXUgbW9pbnMgezB9IGNhcmFjdMOocmVzLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIk1lcmNpIGRlIHNhaXNpciBtb2lucyBkZSB7MH0gY2FyYWN0w6hyZXMuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiTWVyY2kgZGUgc2Fpc2lyIGVudHJlIHswfSBldCB7MX0gY2FyYWN0w6hyZXMuXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiTWVyY2kgZGUgY29tcGzDqXRlciBhdSBtb2lucyB7MH0gbGlnbmVzLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJNZXJjaSBkZSBzw6lsZWN0aW9ubmVyIGF1IG1pbmltdW0gezB9IHLDqXBvbnNlcy5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiTWVyY2kgZGUgc8OpbGVjdGlvbm5lciBhdSBtYXhpbXVtIHswfSByw6lwb25zZXMuXCIsXG4gIG51bWVyaWNNaW5NYXg6IFwiVm90cmUgcsOpcG9uc2UgJ3swfScgZG9pdCDDqnRyZSBzdXDDqXJpZXVyZSBvdSDDqWdhbGUgw6AgezF9IGV0IGluZsOpcmlldXJlIG91IMOpZ2FsZSDDoCB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCJWb3RyZSByw6lwb25zZSAnezB9JyBkb2l0IMOqdHJlIHN1cMOpcmlldXJlIG91IMOpZ2FsZSDDoCB7MX1cIixcbiAgbnVtZXJpY01heDogXCJWb3RyZSByw6lwb25zZSAnezB9JyBkb2l0IMOqdHJlIGluZsOpcmlldXJlIG91IMOpZ2FsZSDDoCB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIk1lcmNpIGQnZW50cmVyIHVuZSBhZHJlc3NlIG1haWwgdmFsaWRlLlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCJMJ2V4cHJlc3Npb246IHswfSBkb2l0IHJldG91cm5lciAndHJ1ZScuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJMYSByZXF1w6p0ZSBhIHJlbnZvecOpIHVuZSBlcnJldXIgJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwiTGEgcmVxdcOqdGUgYSByZW52b3nDqSBkZXMgZG9ubsOpZXMgdmlkZXMgb3UgbGEgcHJvcHJpw6l0w6kgJ3BhdGgnIGVzdCBpbmNvcnJlY3RlXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiTGEgdGFpbGxlIGR1IGZpY2hpZXIgbmUgZG9pdCBwYXMgZXhjw6lkZXIgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiTWVyY2kgZGUgcHLDqWNpc2VyIGxlIGNoYW1wICdBdXRyZScuXCIsXG4gIHVwbG9hZGluZ0ZpbGU6IFwiVm90cmUgZmljaGllciBlc3QgZW4gY291cnMgZGUgY2hhcmdlbWVudC4gTWVyY2kgZCdhdHRlbmRyZSBxdWVscXVlcyBzZWNvbmRlcyBldCBkZSByw6llc3NheWVyLlwiLFxuICBsb2FkaW5nRmlsZTogXCJDaGFyZ2VtZW50Li4uXCIsXG4gIGNob29zZUZpbGU6IFwiQWpvdXRlciBkZXMgZmljaGllcnMuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIkF1Y3VuIGZpY2hpZXIgYWpvdXTDqVwiLFxuICBjb25maXJtRGVsZXRlOiBcIlZvdWxlei12b3VzIHN1cHByaW1lciBjZXQgZW5yZWdpc3RyZW1lbnQgP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIkNldHRlIHZhbGV1ciBkb2l0IMOqdHJlIHVuaXF1ZS5cIixcbiAgYWRkQ29sdW1uOiBcIkFqb3V0ZXIgdW5lIGNvbG9ubmVcIixcbiAgYWRkUm93OiBcIkFqb3V0ZXIgdW5lIGxpZ25lXCIsXG4gIHJlbW92ZVJvdzogXCJTdXBwcmltZXJcIixcbiAgYWRkUGFuZWw6IFwiQWpvdXRlclwiLFxuICByZW1vdmVQYW5lbDogXCJTdXBwcmltZXJcIixcbiAgY2hvaWNlc19JdGVtOiBcIml0ZW1cIixcbiAgbWF0cml4X2NvbHVtbjogXCJDb2xvbm5lXCIsXG4gIG1hdHJpeF9yb3c6IFwiTGlnbmVcIixcbiAgc2F2aW5nRGF0YTogXCJMZXMgcsOpc3VsdGF0cyBzb250IGVuIGNvdXJzIGRlIHNhdXZlZ2FyZGUgc3VyIGxlIHNlcnZldXIuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIlVuZSBlcnJldXIgZXN0IHN1cnZlbnVlIGV0IGEgZW1ww6pjaMOpIGxhIHNhdXZlZ2FyZGUgZGVzIHLDqXN1bHRhdHMuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIkxlcyByw6lzdWx0YXRzIG9udCBiaWVuIMOpdMOpIGVucmVnaXN0csOpcyAhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJSw6llc3NheWVyXCIsXG4gIHRpbWVyTWluOiBcIm1pblwiLFxuICB0aW1lclNlYzogXCJzZWNcIixcbiAgdGltZXJTcGVudEFsbDogXCJWb3VzIGF2ZXogcGFzc8OpIHswfSBzdXIgY2V0dGUgcGFnZSBldCB7MX0gYXUgdG90YWwuXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIlZvdXMgYXZleiBwYXNzw6kgezB9IHN1ciBjZXR0ZSBwYWdlLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIlZvdXMgYXZleiBwYXNzw6kgezB9IGF1IHRvdGFsLlwiLFxuICB0aW1lckxpbWl0QWxsOiBcIlZvdXMgYXZleiBwYXNzw6kgezB9IHN1ciB7MX0gc3VyIGNldHRlIHBhZ2UgZXQgezJ9IHN1ciB7M30gYXUgdG90YWwuXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIlZvdXMgYXZleiBwYXNzw6kgezB9IHN1ciB7MX0gc3VyIGNldHRlIHBhZ2UuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiVm91cyBhdmV6IHBhc3PDqSB7MH0gc3VyIHsxfSBhdSB0b3RhbC5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIk5ldHRveWVyXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJWaWRlclwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJBam91dGVyIHVuIGZpY2hpZXJcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiRW5sZXZlciBjZSBmaWNoaWVyXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiT3VpXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOb25cIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiw4p0ZXMtdm91cyBjZXJ0YWlucyBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZSBmaWNoaWVyIDogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiw4p0ZXMtdm91cyBjZXJ0YWlucyBkZSB2b3Vsb2lyIHN1cHByaW1lciB0b3VzIGxlcyBmaWNoaWVycz9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIlRpdHJlIGRlIGxhIHF1ZXN0aW9uXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImZyXCJdID0gZnJlbmNoU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImZyXCJdID0gXCJmcmFuw6dhaXNcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgZ2VvcmdpYW5TdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwi4YOj4YOZ4YOQ4YOcXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCLhg6jhg5Thg5vhg5Phg5Thg5JcIixcbiAgY29tcGxldGVUZXh0OiBcIuGDk+GDkOGDoeGDoOGDo+GDmuGDlOGDkeGDkFwiLFxuICBwcm9ncmVzc1RleHQ6IFwi4YOS4YOV4YOU4YOg4YOT4YOYIHswfSAvIHsxfVwiLFxuICBlbXB0eVN1cnZleTogXCLhg5Dhg6Dhg6rhg5Thg6Dhg5fhg5gg4YOZ4YOY4YOX4YOu4YOV4YOQIOGDkOGDoCDhg5Dhg6Dhg5jhg6EuXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwi4YOS4YOb4YOQ4YOT4YOa4YOd4YOR4YOXIOGDmeGDmOGDl+GDruGDleGDkOGDoOGDmOGDoSDhg6jhg5Thg5Xhg6Hhg5Thg5Hhg5jhg6Hhg5fhg5Xhg5jhg6EhXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwi4YOp4YOQ4YOi4YOV4YOY4YOg4YOX4YOV4YOQIOGDoeGDlOGDoOGDleGDlOGDoOGDmOGDk+GDkOGDnC4uLlwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIuGDoeGDruGDleGDkCAo4YOS4YOX4YOu4YOd4YOV4YOXIOGDm+GDmOGDo+GDl+GDmOGDl+GDlOGDlylcIixcbiAgb3B0aW9uc0NhcHRpb246IFwi4YOQ4YOg4YOp4YOU4YOV4YOQLi4uXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwi4YOS4YOX4YOu4YOd4YOV4YOXIOGDo+GDnuGDkOGDoeGDo+GDruGDlOGDlyDhg5nhg5jhg5fhg67hg5Xhg5Dhg6EuXCIsXG4gIG51bWVyaWNFcnJvcjogXCLhg57hg5Dhg6Hhg6Phg67hg5gg4YOj4YOc4YOT4YOQIOGDmOGDp+GDneGDoSDhg6Dhg5jhg6rhg67hg5Xhg5guXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwi4YOS4YOX4YOu4YOd4YOV4YOXIOGDqOGDlOGDmOGDp+GDleGDkOGDnOGDlOGDlyDhg5Dhg6Dhg5Dhg5zhg5Dhg5nhg5rhg5Thg5EgezB9IOGDoeGDmOGDm+GDkeGDneGDmuGDnS5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwi4YOS4YOX4YOu4YOd4YOV4YOXIOGDkOGDmOGDoOGDqeGDmOGDlOGDlyDhg5Dhg6Dhg5Dhg5zhg5Dhg5nhg5rhg5Thg5EgezB9IOGDleGDkOGDoOGDmOGDkOGDnOGDouGDmC5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwi4YOS4YOX4YOu4YOd4YOV4YOXIOGDkOGDmOGDoOGDqeGDmOGDlOGDlyDhg5Dhg6Dhg5Dhg6Phg5vhg5Thg6Lhg5Thg6EgezB9IOGDleGDkOGDoOGDmOGDkOGDnOGDouGDmC5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIid7MH0nIOGDo+GDnOGDk+GDkCDhg5jhg6fhg53hg6Eg4YOb4YOU4YOi4YOYIOGDkOGDnCDhg6Lhg53hg5rhg5gsIOGDleGDmOGDk+GDoOGDlCB7MX0sIOGDk+GDkCDhg5zhg5Dhg5nhg5rhg5Thg5Hhg5gg4YOQ4YOcIOGDouGDneGDmuGDmCDhg5Xhg5jhg5Phg6Dhg5QgezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiJ3swfScg4YOj4YOc4YOT4YOQIOGDmOGDp+GDneGDoSDhg5vhg5Thg6Lhg5gg4YOQ4YOcIOGDouGDneGDmuGDmCDhg5Xhg5jhg5Phg6Dhg5QgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScg4YOj4YOc4YOT4YOQIOGDmOGDp+GDneGDoSDhg5zhg5Dhg5nhg5rhg5Thg5Hhg5gg4YOQ4YOcIOGDouGDneGDmuGDmCDhg5Xhg5jhg5Phg6Dhg5QgezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCLhg5Lhg5fhg67hg53hg5Xhg5cg4YOo4YOU4YOY4YOn4YOV4YOQ4YOc4YOd4YOXIOGDlOGDmi4g4YOk4YOd4YOh4YOi4YOY4YOhIOGDoOGDlOGDkOGDmuGDo+GDoOGDmCDhg5vhg5jhg6Hhg5Dhg5vhg5Dhg6Dhg5fhg5guXCIsXG4gIG90aGVyUmVxdWlyZWRFcm9yOiBcIuGDkuGDl+GDruGDneGDleGDlyDhg6jhg5Thg5Dhg5Xhg6Hhg5Thg5cg4YOV4YOU4YOa4YOYICfhg6Hhg67hg5Xhg5AnXCJcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wia2FcIl0gPSBnZW9yZ2lhblN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJrYVwiXSA9IFwi4YOl4YOQ4YOg4YOX4YOj4YOa4YOYXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGdlcm1hblN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJadXLDvGNrXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJXZWl0ZXJcIixcbiAgY29tcGxldGVUZXh0OiBcIkFic2NobGllw59lblwiLFxuICBwcmV2aWV3VGV4dDogXCJWb3JzY2hhdVwiLFxuICBlZGl0VGV4dDogXCJCZWFyYmVpdGVuXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJTdGFydFwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIlNvbnN0aWdlcyAoQml0dGUgYW5nZWJlbilcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIk5pY2h0cyB0cmlmZnQgenVcIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiQWxsZXMgYXVzd8OkaGxlblwiLFxuICBwcm9ncmVzc1RleHQ6IFwiU2VpdGUgezB9IHZvbiB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIkVpbnRyYWcgezB9IHZvbiB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcInswfS97MX0gRnJhZ2VuIGJlYW50d29ydGV0XCIsXG4gIGVtcHR5U3VydmV5OiBcIkVzIHNpbmQga2VpbmUgRnJhZ2VuIHZvcmhhbmRlbi5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJWaWVsZW4gRGFuaywgZGFzcyBTaWUgZGllIFVtZnJhZ2UgYWJnZXNjaGxvc3NlbiBoYWJlbiFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcIldpciBoYWJlbiBmZXN0Z2VzdGVsbHQsIGRhc3MgU2llIGRpZXNlIFVtZnJhZ2UgYmVyZWl0cyBhYmdlc2NobG9zc2VuIGhhYmVuLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIlVtZnJhZ2Ugd2lyZCBnZWxhZGVuLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIkJpdHRlIGF1c3fDpGhsZW4uLi5cIixcbiAgdmFsdWU6IFwiV2VydFwiLFxuICByZXF1aXJlZEVycm9yOiBcIkJpdHRlIGJlYW50d29ydGVuIFNpZSBkaWVzZSBGcmFnZS5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiQml0dGUgYmVhbnR3b3J0ZW4gU2llIG1pbmRlc3RlbnMgZWluZSBGcmFnZS5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJCaXR0ZSBiZWFudHdvcnRlbiBTaWUgYWxsZSBGcmFnZW4uXCIsXG4gIG51bWVyaWNFcnJvcjogXCJEZXIgV2VydCBtdXNzIGVpbmUgWmFobCBzZWluLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIkJpdHRlIGdlYmVuIFNpZSBtaW5kZXN0ZW5zIHswfSBaZWljaGVuIGVpbi5cIixcbiAgdGV4dE1heExlbmd0aDogXCJCaXR0ZSBnZWJlbiBTaWUgbmljaHQgbWVociBhbHMgezB9IFplaWNoZW4gZWluLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIkJpdHRlIGdlYmVuIFNpZSBtaW5kZXN0ZW5zIHswfSB1bmQgbWF4aW1hbCB7MX0gWmVpY2hlbiBlaW4uXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiQml0dGUgbWFjaGVuIFNpZSBpbiBtaW5kZXN0ZW5zIHswfSBaZWlsZW4gZWluZSBFaW5nYWJlLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJCaXR0ZSB3w6RobGVuIFNpZSBtaW5kZXN0ZW5zIHswfSBBbnR3b3J0KGVuKSBhdXMuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIkJpdHRlIHfDpGhsZW4gU2llIG5pY2h0IG1laHIgYWxzIHswfSBBbnR3b3J0KGVuKSBhdXMuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCInezB9JyBtdXNzIGdyw7bDn2VyIG9kZXIgZ2xlaWNoIHsxfSB1bmQga2xlaW5lciBvZGVyIGdsZWljaCB7Mn0gc2VpblwiLFxuICBudW1lcmljTWluOiBcIid7MH0nIG11c3MgZ3LDtsOfZXIgb2RlciBnbGVpY2ggezF9IHNlaW5cIixcbiAgbnVtZXJpY01heDogXCInezB9JyBtdXNzIGtsZWluZXIgb2RlciBnbGVpY2ggezF9IHNlaW5cIixcbiAgaW52YWxpZEVtYWlsOiBcIkJpdHRlIGdlYmVuIFNpZSBlaW5lIGfDvGx0aWdlIEUtTWFpbC1BZHJlc3NlIGVpbi5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiRGVyIEF1c2RydWNrOiB7MH0gbXVzcyBkZW4gV2VydCAnd2FocicgenVyw7xja2dlYmVuLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiRWluIE5ldHp3ZXJrZGllbnN0IGhhdCBmb2xnZW5kZW4gRmVobGVyIHp1csO8Y2tnZWdlYmVuICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiRWluZSBOZXR6d2Vya2RpZW5zdCBoYXQgdW5nw7xsdGlnZSBEYXRlbiB6dXLDvGNrZ2VnZWJlblwiLFxuICBleGNlZWRNYXhTaXplOiBcIkRpZSBEYXRlaSBkYXJmIG5pY2h0IGdyw7bDn2VyIGFscyB7MH0gc2Vpbi5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIkJpdHRlIGdlYmVuIFNpZSBlaW5lbiBXZXJ0IGFuLlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiQml0dGUgd2FydGVuIFNpZSBiaXMgZGVyIFVwbG9hZCBJaHJlciBEYXRlaWVuIGFiZ2VzY2hsb3NzZW4gaXN0LlwiLFxuICBsb2FkaW5nRmlsZTogXCJXaXJkIGhvY2hnZWxhZGVuLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiRGF0ZWkoZW4pIGF1c3fDpGhsZW4uLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIktlaW5lIERhdGVpIGF1c2dld8OkaGx0XCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiV29sbGVuIFNpZSBkZW4gRWludHJhZyBsw7ZzY2hlbj9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJEaWVzZXIgV2VydCBtdXNzIGVpbm1hbGlnIHNlaW4uXCIsXG4gIGFkZENvbHVtbjogXCJTcGFsdGUgaGluenVmw7xnZW5cIixcbiAgYWRkUm93OiBcIlplaWxlIGhpbnp1ZsO8Z2VuXCIsXG4gIHJlbW92ZVJvdzogXCJFbnRmZXJuZW5cIixcbiAgYWRkUGFuZWw6IFwiTmV1IGhpbnp1ZsO8Z2VuXCIsXG4gIHJlbW92ZVBhbmVsOiBcIkVudGZlcm5lblwiLFxuICBjaG9pY2VzX0l0ZW06IFwiRWxlbWVudFwiLFxuICBtYXRyaXhfY29sdW1uOiBcIlNwYWx0ZVwiLFxuICBtYXRyaXhfcm93OiBcIlplaWxlXCIsXG4gIHNhdmluZ0RhdGE6IFwiRGllIEVyZ2Vibmlzc2Ugd2VyZGVuIGF1ZiBkZW0gU2VydmVyIGdlc3BlaWNoZXJ0Li4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJFcyBpc3QgZWluIEZlaGxlciBhdWZnZXRyZXRlbi4gRGllIEVyZ2Vibmlzc2Uga29ubnRlbiBuaWNodCBnZXNwZWljaGVydCB3ZXJkZW4uXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIkRpZSBFcmdlYm5pc3NlIHd1cmRlbiBnZXNwZWljaGVydCFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIkVybmV1dCBhYnNlbmRlblwiLFxuICB0aW1lck1pbjogXCJNaW4uXCIsXG4gIHRpbWVyU2VjOiBcIlNlay5cIixcbiAgdGltZXJTcGVudEFsbDogXCJTaWUgd2FyZW4gezB9IGF1ZiBkaWVzZXIgU2VpdGUgdW5kIGJyYXVjaHRlbiBpbnNnZXNhbXQgezF9LlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJTaWUgd2FyZW4gezB9IGF1ZiBkaWVzZXIgU2VpdGUuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiU2llIGhhYmVuIGluc2dlc2FtdCB7MH0gZ2VicmF1Y2h0LlwiLFxuICB0aW1lckxpbWl0QWxsOlxuICAgIFwiU2llIHdhcmVuIHswfSB2b24gezF9IGF1ZiBkaWVzZXIgU2VpdGUgdW5kIGJyYXVjaHRlbiBpbnNnZXNhbXQgezJ9IHZvbiB7M30uXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIlNpZSB3YXJlbiB7MH0gdm9uIHsxfSBhdWYgZGllc2VyIFNlaXRlLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIlNpZSBoYWJlbiBpbnNnZXNhbXQgezB9IHZvbiB7MX0gZ2VicmF1Y2h0LlwiLFxuICBjbGVhbkNhcHRpb246IFwiQWxsZXMgbMO2c2NoZW5cIixcbiAgY2xlYXJDYXB0aW9uOiBcIkF1c3dhaGwgZW50ZmVybmVuXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIkRhdGVpIGF1c3fDpGhsZW5cIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiRGF0ZWkgbMO2c2NoZW5cIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJKYVwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiTmVpblwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJTaW5kIFNpZSBzaWNoZXIsIGRhc3MgU2llIGRpZXNlIERhdGVpIGzDtnNjaGVuIG3DtmNodGVuOiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJTaW5kIFNpZSBzaWNoZXIsIGRhc3MgU2llIGFsbGUgRGF0ZWllbiBsw7ZzY2hlbiBtw7ZjaHRlbj9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIkZyYWdlbnRpdGVsXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImRlXCJdID0gZ2VybWFuU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImRlXCJdID0gXCJkZXV0c2NoXCI7XG4iLCIvL0NyZWF0ZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2FnZWxvc3BhbmFnaW90YWtpc1xuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBncmVla1N1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCLOoM+Bzr/Ot86zzr/Pjc68zrXOvc6/XCIsXG4gIHBhZ2VOZXh0VGV4dDogXCLOlc+Az4zOvM61zr3Ov1wiLFxuICBjb21wbGV0ZVRleHQ6IFwizp/Ou86/zrrOu86uz4HPic+DzrdcIixcbiAgcHJldmlld1RleHQ6IFwizqDPgc6/zrXPgM65z4POus+Mz4DOt8+DzrdcIixcbiAgZWRpdFRleHQ6IFwizpXPgM61zr7Otc+BzrPOsc+Dzq/OsVwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwizpHPgc+Hzq5cIixcbiAgb3RoZXJJdGVtVGV4dDogXCLOhs67zrvOvyAoz4DOsc+BzrHOus6xzrvPjiDOtM65zrXPhc66z4HOuc69zq/Pg8+EzrUpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCLOms6xzr3Orc69zrHPglwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCLOlc+AzrnOu86/zrPOriDPjM67z4nOvVwiLFxuICBwcm9ncmVzc1RleHQ6IFwizqPOtc67zq/OtM6xIHswfSDOsc+Az4wgezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCLOlc6zzrPPgc6xz4bOriB7MH0gzrHPgM+MIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwizpHPgM6xzr3PhM6uzrjOt866zrHOvSB7MH0gLyB7MX0gzrXPgc+Jz4TOrs+DzrXOuc+CXCIsXG4gIGVtcHR5U3VydmV5OlxuICAgIFwizpTOtc69IM+Fz4DOrM+Bz4fOtc65IM66zrHOvM6vzrEgzr/Pgc6xz4TOriDPg861zrvOr860zrEgzq4gzr/Pgc6xz4TOriDOtc+Bz47PhM63z4POtyDPg861IM6xz4XPhM+MIM+Ezr8gzrXPgc+Jz4TOt868zrHPhM6/zrvPjM6zzrnOvy5cIixcbiAgY29tcGxldGluZ1N1cnZleTpcbiAgICBcIs6Vz4XPh86xz4HOuc+Dz4TOv8+NzrzOtSDOs865zrEgz4TOt869IM+Dz4XOvM+AzrvOrs+Bz4nPg863IM6xz4XPhM6/z40gz4TOv8+FIM61z4HPic+EzrfOvM6xz4TOv867zr/Os86vzr/PhSFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcIs6kzrEgzrHPgc+HzrXOr86xIM68zrHPgiDOtM61zq/Ph869zr/Phc69IM+Mz4TOuSDOrc+HzrXPhM61IM6uzrTOtyDOv867zr/Ous67zrfPgc+Oz4POtc65IM6xz4XPhM6uzr0gz4TOt869IM6tz4HOtc+Fzr3OsS5cIixcbiAgbG9hZGluZ1N1cnZleTogXCLOpM6/IM61z4HPic+EzrfOvM6xz4TOv867z4zOs865zr8gz4bOv8+Bz4TPjs69zrXPhM6xzrkgzrHPgM6/IM+Ezr8gzrTOuc6xzrrOv868zrnPg8+Ezq4uLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwizpXPgM65zrvOrc6+z4TOtS4uLlwiLFxuICB2YWx1ZTogXCLOsc6+zq/OsVwiLFxuICByZXF1aXJlZEVycm9yOiBcIs6gzrHPgc6xzrrOsc67z44gzrHPgM6xzr3PhM6uz4PPhM61IM+Dz4TOt869IM61z4HPjs+EzrfPg863LlwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCLOkc+AzrHOvc+Ezq7Pg8+EzrUgz4POtSDPhM6/z4XOu86sz4fOuc+Dz4TOv869IM68zq/OsSDOtc+Bz47PhM63z4POty5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjpcbiAgICBcIs6gzrHPgc6xzrrOsc67z44gzrHPgM6xzr3PhM6uz4PPhM61IM+Dz4TOuc+CIM61z4HPic+Ezq7Pg861zrnPgiDPg861IM+MzrvOtc+CIM+EzrnPgiDOs8+BzrHOvM68zq3Pgi5cIixcbiAgbnVtZXJpY0Vycm9yOiBcIs6XIM+EzrnOvM6uIM+Az4HOrc+AzrXOuSDOvc6xIM61zq/Ovc6xzrkgzrHPgc65zrjOvM63z4TOuc66zq4uXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwizqDOsc+BzrHOus6xzrvPjiDPg8+FzrzPgM67zrfPgc+Oz4PPhM61IM+Ezr/Phc67zqzPh865z4PPhM6/zr0gezB9IM+Dz43OvM6yzr/Ou86xLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIs6VzrnPg86xzrPOrM6zzrXPhM61IM67zrnOs8+Mz4TOtc+Bzr/Phc+CIM6xz4DPjCB7MH0gz4fOsc+BzrHOus+Ezq7Pgc61z4IuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwizpXOuc+DzrHOs86szrPOtc+EzrUgz4DOtc+BzrnPg8+Dz4zPhM61z4HOv8+Fz4IgzrHPgM+MIHswfSDOus6xzrkgzrvOuc6zz4zPhM61z4HOv8+Fz4IgzrHPgM+MIHsxfSDPh86xz4HOsc66z4TOrs+BzrXPgi5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCLOoM6xz4HOsc66zrHOu8+OIM+Dz4XOvM+AzrvOt8+Bz47Pg8+EzrUgz4TOv8+FzrvOrM+HzrnPg8+Ezr/OvSB7MH0gzrPPgc6xzrzOvM6tz4IuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIs6gzrHPgc6xzrrOsc67z44gzrXPgM65zrvOrc6+z4TOtSDPhM6/z4XOu86sz4fOuc+Dz4TOv869IHswfSDPgM6xz4HOsc67zrvOsc6zzq3Pgi5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwizqDOsc+BzrHOus6xzrvPjiDOtc+AzrnOu86tzr7PhM61IM+Mz4fOuSDPgM6xz4HOsc+AzqzOvc+JIM6xz4DOvyB7MH0gz4DOsc+BzrHOu867zrHOs86tz4IuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCLOpM6/ICd7MH0nIM64zrEgz4DPgc6tz4DOtc65IM69zrEgzrXOr869zrHOuSDOr8+Dzr8gzq4gzrzOtc6zzrHOu8+Nz4TOtc+Bzr8gzrHPgM6/IM+Ezr8gezF9IM66zrHOuSDOr8+Dzr8gzq4gzrzOuc66z4HPjM+EzrXPgc6/IM6xz4DOvyDPhM6/IHsyfVwiLFxuICBudW1lcmljTWluOiBcIs6kzr8gJ3swfScgz4DPgc6tz4DOtc65IM69zrEgzrXOr869zrHOuSDOvM61zrPOsc67z43PhM61z4HOvyDOriDOuc+Dzr8gzrzOtSDPhM6/IHsxfVwiLFxuICBudW1lcmljTWF4OiBcIs6kzr8gJ3swfScgz4DPgc6tz4DOtc65IM69zrEgzrXOr869zrHOuSDOvM65zrrPgc+Mz4TOtc+Bzr8gzq4gzq/Pg86/IM6xz4DOvyDPhM6/IHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwizqDOsc+BzrHOus6xzrvPjiDOtM+Oz4PPhM61IM68zrnOsSDOsc+Azr/OtM61zrrPhM6uIM60zrnOtc+NzrjPhc69z4POtyBlLW1haWwuXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIs6XIM6tzrrPhs+BzrHPg863OiB7MH0gzrjOsSDPgM+Bzq3PgM61zrkgzr3OsSDOtc+AzrnPg8+Ez4HOrc+IzrXOuSAndHJ1ZScuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCLOlyDOsc6vz4TOt8+DzrcgzrXPgM6tz4PPhM+BzrXPiM61IM+Dz4bOrM67zrzOsSAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIs6XIM6xzq/PhM63z4POtyDOtc+Azq3Pg8+Ez4HOtc+IzrUgzrrOtc69zqwgzrTOtc60zr/OvM6tzr3OsSDOriDOtyDOuc60zrnPjM+EzrfPhM6xICfOvM6/zr3Ov8+AzqzPhM65L3BhdGgnIM61zq/Ovc6xzrkgzrXPg8+GzrHOu868zq3Ovc63XCIsXG4gIGV4Y2VlZE1heFNpemU6IFwizqTOvyDOvM6tzrPOtc64zr/PgiDOtM61zr0gzrzPgM6/z4HOtc6vIM69zrEgz4XPgM61z4HOss6xzq/Ovc61zrkgz4TOsSB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCLOoM6xz4HOsc66zrHOu8+OIM+Dz4XOvM+AzrvOt8+Bz47Pg8+EzrUgz4TOt869IM+EzrnOvM6uIM6zzrnOsSDPhM6/IM+AzrXOtM6vzr8gJ86szrvOu86/Jy5cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIs6kzr8gzrHPgc+HzrXOr86/IM+DzrHPgiDOsc69zrXOss6xzq/Ovc61zrkuIM6gzrHPgc6xzrrOsc67z44gz4DOtc+BzrnOvM6tzr3Otc+EzrUgzrrOsc+Azr/Ouc6xIM60zrXPhc+EzrXPgc+MzrvOtc+Az4TOsSDOus6xzrkgzrTOv866zrnOvM6sz4PPhM61IM6+zrHOvc6sLlwiLFxuICBsb2FkaW5nRmlsZTogXCLOps+Mz4HPhM+Jz4POty4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIs6Vz4DOuc67zr/Os86uIM6xz4HPh861zq/Pic69IC4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwizpTOtc69IM6tz4fOtc65IM61z4DOuc67zrXOs861zq8gzrHPgc+HzrXOr86/XCIsXG4gIGNvbmZpcm1EZWxldGU6IFwizpjOrc67zrXPhM61IM69zrEgzrTOuc6xzrPPgc6sz4jOtc+EzrUgz4TOt869IM61zrPOs8+BzrHPhs6uO1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIs6Rz4XPhM6uIM63IM+EzrnOvM6uIM+Az4HOrc+AzrXOuSDOvc6xIM61zq/Ovc6xzrkgzrzOv869zrHOtM65zrrOri5cIixcbiAgYWRkQ29sdW1uOiBcIs6gz4HOv8+DzrjOrs66zrcgz4PPhM6uzrvOt8+CXCIsXG4gIGFkZFJvdzogXCLOoM+Bzr/Pg864zq7Ous63IM6zz4HOsc68zrzOrs+CXCIsXG4gIHJlbW92ZVJvdzogXCLOkc+GzrHOr8+BzrXPg863XCIsXG4gIGFkZFBhbmVsOiBcIs6gz4HOv8+DzrjOtc+DzrUgzr3Otc6/XCIsXG4gIHJlbW92ZVBhbmVsOiBcIs6Rz4bOsc65z4HPjlwiLFxuICBjaG9pY2VzX0l0ZW06IFwizrXOr860zr/PglwiLFxuICBtYXRyaXhfY29sdW1uOiBcIs6jz4TOrs67zrdcIixcbiAgbWF0cml4X3JvdzogXCLOo861zrnPgc6sXCIsXG4gIHNhdmluZ0RhdGE6IFwizqTOsSDOsc+Azr/PhM61zrvOrc+DzrzOsc+EzrEgzrHPgM6/zrjOt866zrXPjc6/zr3PhM6xzrkgz4PPhM6/zr0gzrTOuc6xzrrOv868zrnPg8+Ezq4gLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCLOoM6xz4HOv8+Fz4POuc6sz4PPhM63zrrOtSDPg8+GzqzOu868zrEgzrrOsc65IM60zrXOvSDOrs+EzrHOvSDOtM+Fzr3Osc+Ezq4gzrcgzrHPgM6/zrjOrs66zrXPhc+Dzrcgz4TPic69IM6xz4DOv8+EzrXOu861z4POvM6sz4TPic69LlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCLOpM6xIM6xz4DOv8+EzrXOu86tz4POvM6xz4TOsSDOsc+Azr/OuM63zrrOtc+Nz4TOt866zrHOvSDOvM61IM61z4DOuc+Ez4XPh86vzrEhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCLOoM+Bzr/Pg8+AzqzOuM63z4POtSDOvs6xzr3OrFwiLFxuICB0aW1lck1pbjogXCLOtc67zqzPh1wiLFxuICB0aW1lclNlYzogXCLOtM61z4XPhFwiLFxuICB0aW1lclNwZW50QWxsOiBcIs6Iz4fOtc+EzrUgzrTOsc+AzrHOvc6uz4POtc65IHswfSDPg861IM6xz4XPhM6uzr0gz4TOtyDPg861zrvOr860zrEgzrrOsc65IHsxfSDPg8+Fzr3Ov867zrnOus6sLlwiLFxuICB0aW1lclNwZW50UGFnZTogXCLOiM+HzrXPhM61IM6+zr/OtM6tz4jOtc65IHswfSDPg861IM6xz4XPhM6uzr0gz4TOtyDPg861zrvOr860zrEuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwizojPh861z4TOtSDOvs6/zrTOrc+IzrXOuSDPg8+Fzr3Ov867zrnOus6sIHswfS5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIs6Iz4fOtc+EzrUgzrTOsc+AzrHOvc6uz4POtc65IHswfSDOsc+Az4wgezF9IM+DzrUgzrHPhc+Ezq7OvSDPhM63IM+DzrXOu86vzrTOsSDOus6xzrkgezJ9IM6xz4DPjCB7M30gz4PPhc69zr/Ou865zrrOrC5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwizojPh861z4TOtSDOvs6/zrTOrc+IzrXOuSB7MH0gzrHPgM+MIHsxfSDPg861IM6xz4XPhM6uzr0gz4TOtyDPg861zrvOr860zrEuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwizojPh861z4TOtSDOvs6/zrTOrc+IzrXOuSB7MH0gzrHPgM+MIHsxfSDPg8+Fzr3Ov867zrnOus6sLlwiLFxuICBjbGVhbkNhcHRpb246IFwizprOkc6YzpHOoc6XXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCLOo86xz4bOrlwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCLOlc+AzrnOu86tzr7PhM61IM+Ezr8gzrHPgc+HzrXOr86/XCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIs6azrHPhM6xz4HOs86uz4PPhM61IM6xz4XPhM+MIM+Ezr8gzrHPgc+HzrXOr86/XCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwizp3Osc6vXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCLOn8+HzrlcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwizpXOr8+Dz4TOtSDOss6tzrLOsc65zr/OuSDPjM+EzrkgzrjOrc67zrXPhM61IM69zrEgzrrOsc+EzrHPgc6zzq7Pg861z4TOtSDOsc+Fz4TPjCDPhM6/IM6xz4HPh861zq/OvzogezB9O1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwizpXOr8+Dz4TOtSDOss6tzrLOsc65zr/OuSDPjM+EzrkgzrjOrc67zrXPhM61IM69zrEgzrrOsc+EzrHPgc6zzq7Pg861z4TOtSDPjM67zrEgz4TOsSDOsc+Bz4fOtc6vzrE7XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCLOpM6vz4TOu86/z4IgzrXPgc+Oz4TOt8+DzrfPglwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJnclwiXSA9IGdyZWVrU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImdyXCJdID0gXCLOtc67zrvOt869zrnOus6sXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGhlYnJld1N1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCLXkNeX15XXqNeUXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCLXp9eT15nXnteUXCIsXG4gIGNvbXBsZXRlVGV4dDogXCLXodeZ15XXnVwiLFxuICBwcmV2aWV3VGV4dDogXCLXqtem15XXkteUINee16fXk9eZ157XlFwiLFxuICBlZGl0VGV4dDogXCLXnNa316LWsteo15XWudeaXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCLXlNa316rXl9a415zWuNeUXCIsXG4gIG90aGVySXRlbVRleHQ6IFwi15DXl9eoICjXoNeQINec16rXkNeoKVwiLFxuICBub25lSXRlbVRleHQ6IFwi15DXoyDXkNeX15NcIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwi15HXl9eoINeU15vXnFwiLFxuICBwcm9ncmVzc1RleHQ6IFwi15PXoyB7MX0g157XqteV15ogezB9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCLXlNen15zXmNeUIHswfSDXnteq15XXmiB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcItei16DXlCDXotecINep15DXnNeV16pcIixcbiAgZW1wdHlTdXJ2ZXk6IFwi15DXmdefINep15DXnNeV16pcIixcbiAgY29tcGxldGluZ1N1cnZleTogXCLXqteV15PXlCDXotecINee15nXnNeV15kg15TXqdeQ15zXldefIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwi15TXqNep15XXnteV16og16nXnNeg15Ug157XqNeQ15XXqiDXqdeb15HXqCDXodeZ15nXnteqINeQ16og15TXoden16gg15TXlteULlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIteY16LXmdeg15Qg157XlNep16jXqi4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCLXkdeX16guLi5cIixcbiAgdmFsdWU6IFwi16LXqNeaXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwi15DXoNeQINeU16nXkSDXotecINeU16nXkNec15RcIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwi15DXoNeQINei16DXlCDXnNek15fXldeqINei15wg16nXkNec15Qg15DXl9eqLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIteQ16DXkCDXoteg15Qg16LXnCDXqdeQ15zXldeqINeR15vXnCDXlNep15XXqNeV16ouXCIsXG4gIG51bWVyaWNFcnJvcjogXCLXlNeq16nXldeR15Qg16bXqNeZ15vXlCDXnNeU15nXldeqINee16HXpNeoLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIteU15bXnyDXnNek15fXldeqIHswfSDXqteV15XXmdedLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIteU15bXnyDXpNeX15XXqiDXni0gezB9INeq15XXldeZ150uXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwi15TXltefINeZ15XXqteoINeeLSB7MH0g15XXpNeX15XXqiDXni0gezF9INeq15XXldeZ150uXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwi15DXoNeQINee15zXkCDXnNek15fXldeqIHswfSDXqdeV16jXldeqLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCLXkdeX16gg15zXpNeX15XXqiB7MH0g15DXpNep16jXldeZ15XXqi5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwi15HXl9eoINei15MgezB9INeQ16TXqdeo15XXmdeV16ouXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCInezB9JyDXl9eZ15nXkSDXnNeU15nXldeqINep15XXldeUINeQ15Ug15LXk9eV15wg154gezF9LCDXldep15XXldeUINecLSB7Mn0g15DXlSDXpNeX15XXqiDXni0ge319XCIsXG4gIG51bWVyaWNNaW46IFwiJ3swfScg15fXmdeZ15Eg15zXlNeZ15XXqiDXqdeV15XXlCDXkNeVINeS15PXldecINeeIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nINeX15nXmdeRINec15TXmdeV16og16nXldeV15Qg15DXlSDXp9eY158g154gezF9XCIsXG4gIGludmFsaWRFbWFpbDogJ9eU15bXnyDXm9eq15XXkdeqINeT15XXkFwi15wg15fXlden15nXqi4nLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCLXlNeR15nXmNeV15k6IHswfSDXpteo15nXmiDXnNeU15fXlteZ16ggJ9eQ157XqicuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCLXlNeR16fXqdeUINeU15fXlteZ16jXlCDXkNeqINeU16nXkteZ15DXlCAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIteU15HXp9ep15Qg15TXl9eW15nXqNeUINeg16rXldeg15nXnSDXqNeZ16fXmdedINeQ15Ug16nXlNee15DXpNeZ15nXnyAn16DXqteZ15EnINep15LXldeZXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwi15LXldeT15wg15TXp9eV15HXpSDXnNeQINeZ16LXnNeUINei15wgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6ICfXoNeQINec15TXlteZ158g16DXqteV16DXmdedINeR16nXk9eUIFwi15DXl9eoXCInLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwi15TXp9eV15HXpSDXqdec15og16DXmNei158uINeU157XqtefINee16HXpNeoINep16DXmdeV16og15XXoNeh15Qg16nXldeRLlwiLFxuICBsb2FkaW5nRmlsZTogXCLXmNeV16LXny4uLlwiLFxuICBjaG9vc2VGaWxlOiBcItec15HXl9eV16gg16fXkdem15nXnS4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwi15zXkCDXoNeR15fXqCDXp9eV15HXpVwiLFxuICBjb25maXJtRGVsZXRlOiBcIteU15DXnSDXkNeq15Qg16jXldem15Qg15zXnteX15XXpyDXkNeqINeU16jXqdeV157XlD9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCLXoteo15og15bXlCDXpteo15nXmiDXnNeU15nXldeqINeZ15nXl9eV15PXmS5cIixcbiAgYWRkQ29sdW1uOiBcIteU15XXodejINei157XldeT15RcIixcbiAgYWRkUm93OiBcItec15TXldeh15nXoyDXqdeV16jXlFwiLFxuICByZW1vdmVSb3c6IFwi15zWsNeU1rfXoda015nXqFwiLFxuICBhZGRQYW5lbDogXCLXlNeV16HXoyDXl9eT16lcIixcbiAgcmVtb3ZlUGFuZWw6IFwi15zWsNeU1rfXoda015nXqFwiLFxuICBjaG9pY2VzX0l0ZW06IFwi16TXqNeZ15hcIixcbiAgbWF0cml4X2NvbHVtbjogXCLXmNeV16hcIixcbiAgbWF0cml4X3JvdzogXCLXqdeB15XWvNeo1rjXlFwiLFxuICBzYXZpbmdEYXRhOiBcIteU16rXldem15DXldeqINeg16nXnteo15XXqiDXkdep16jXqiAuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIteQ15nXqNei15Qg16nXkteZ15DXlCDXldec15Ag15TXptec15fXoNeVINec16nXnteV16gg15DXqiDXlNeq15XXpteQ15XXqi5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwi15TXqteV16bXkNeV16og16DXqdee16jXlSDXkdeU16bXnNeX15QhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCLXoNeh15Qg16nXldeRXCIsXG4gIHRpbWVyTWluOiBcIteT16fXlFwiLFxuICB0aW1lclNlYzogXCLXqdeg15nXldeqXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwi15TXldem15DXqiB7MH0g15HXk9ejINeW15Qg15XXkdeh15og15TXm9ecIHsxfS5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwi15TXldem15DXqiB7MH0g15HXk9ejINeW15QuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwi15TXldem15DXqiDXodeb15XXnSDXm9eV15zXnCDXqdecIHswfS5cIixcbiAgdGltZXJMaW1pdEFsbDpcbiAgICBcIteU15XXpteQ16ogezB9INee16rXldeaIHsxfSDXkdeT16Mg15bXlCDXlS0gezJ9INee16rXldeaIHszfSDXkdeh15og15TXm9ecLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCLXlNeV16bXkNeqIHswfSDXnteq15XXmiB7MX0g15HXk9ejINeW15QuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwi15TXldem15DXqiDXodeb15XXnSDXm9eV15zXnCDXqdecIHswfSDXnteq15XXmiB7MX0uXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCLXnNaw16DWt9en15XWudeqXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCLXkdeo15XXqFwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCLXkdeX16gg16fXldeR16VcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwi15TXodeoINen15XXkdelINeW15RcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCLXm9efXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCLXnNeQXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIteU15DXnSDXkNeq15Qg15HXmNeV15cg16nXkdeo16bXldeg15og15zXlNeh15nXqCDXp9eV15HXpSDXlteUOiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCLXlNeQ150g15DXqteUINeR15jXldeXINep15HXqNem15XXoNeaINec15TXodeZ16gg15DXqiDXm9ecINeU16fXkdem15nXnT9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIteb15XXqteo16og16nXkNec15RcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiaGVcIl0gPSBoZWJyZXdTdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wiaGVcIl0gPSBcItei15HXqNeZ16pcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgaGluZGlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwi4KSq4KS/4KSb4KSy4KS+XCIsXG4gIHBhZ2VOZXh0VGV4dDogXCLgpIXgpJfgpLLgpL5cIixcbiAgY29tcGxldGVUZXh0OiBcIuCkquClguCksOCkvlwiLFxuICBwcmV2aWV3VGV4dDogXCLgpKrgpYLgpLDgpY3gpLXgpLjgpK7gpYDgpJXgpY3gpLfgpL5cIixcbiAgZWRpdFRleHQ6IFwi4KS44KSC4KSq4KS+4KSm4KS/4KSkXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCLgpLbgpYHgpLDgpYJcIixcbiAgb3RoZXJJdGVtVGV4dDogXCLgpKbgpYLgpLjgpLDgpL4gKOCkteCksOCljeCko+CkqCDgpJXgpLDgpYfgpIIpXCIsXG4gIG5vbmVJdGVtVGV4OiBcIuCkleCli+CkiCDgpKjgpLngpYDgpIJcIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwi4KS44KSt4KWAIOCkleCkviDgpJrgpK/gpKgg4KSV4KSw4KWH4KSCXCIsXG4gIHByb2dyZXNzVGV4dDogXCLgpKrgpYPgpLfgpY3gpKAgMSDgpK7gpYfgpIIg4KS44KWHIDBcIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIiDgpKbgpLjgpY3gpKTgpL7gpLXgpYfgpJwgezF9IOCkleClhyB7MH1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcInsxfSDgpLjgpLXgpL7gpLLgpYvgpIIg4KSu4KWH4KSCIOCkuOClhyB7MH0g4KSV4KWHIOCknOCkteCkvuCkrCDgpKbgpL/gpI9cIixcbiAgZW1wdHlTdXJ2ZXk6IFwi4KS44KSw4KWN4KS14KWH4KSV4KWN4KS34KSjIOCkruClh+CkgiDgpJXgpYvgpIgg4KSm4KWD4KS24KWN4KSv4KSu4KS+4KSoIOCkquClg+Ckt+CljeCkoCDgpK/gpL4g4KSq4KWN4KSw4KS24KWN4KSoIOCkqOCkueClgOCkgiDgpLngpYhcIixcbiAgY29tcGxldGluZ1N1cnZleTogXCLgpLjgpLDgpY3gpLXgpYfgpJXgpY3gpLfgpKMg4KSV4KWLIOCkquClguCksOCkviDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpKfgpKjgpY3gpK/gpLXgpL7gpKZcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTogXCIg4KS54KSu4KS+4KSw4KWHIOCksOCkv+CkleClieCksOCljeCkoSDgpKzgpKTgpL7gpKTgpYcg4KS54KWI4KSCIOCkleCkvyDgpIbgpKog4KSq4KS54KSy4KWHIOCkueClgCDgpIfgpLgg4KS44KSw4KWN4KS14KWH4KSV4KWN4KS34KSjIOCkleCliyDgpKrgpYLgpLDgpL4g4KSV4KSwIOCkmuClgeCkleClhyDgpLngpYjgpIJcIixcbiAgbG9hZGluZ1N1cnZleTogXCLgpLjgpLDgpY3gpLXgpYfgpJXgpY3gpLfgpKMg4KSW4KWB4KSyIOCksOCkueCkviDgpLngpYgu4oCmXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIuCkmuClgeCkqOClh+CkglwiLFxuICB2YWx1ZTogXCLgpK7gpYLgpLLgpY3gpK9cIixcbiAgcmVxdWlyZWRFcnJvcjogXCLgpJXgpYPgpKrgpK/gpL4g4KSq4KWN4KSw4KS24KWN4KSoIOCkleCkviDgpIngpKTgpY3gpKTgpLAg4KSm4KWH4KSCXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIuCkleClg+CkquCkr+CkviDgpJXgpK4g4KS44KWHIOCkleCkriDgpI/gpJUg4KSq4KWN4KSw4KS24KWN4KSoIOCkleCkviDgpIngpKTgpY3gpKTgpLAg4KSm4KWH4KSCXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwi4KSV4KWD4KSq4KSv4KS+IOCkuOCkreClgCDgpKrgpILgpJXgpY3gpKTgpL/gpK/gpYvgpIIg4KSu4KWH4KSCIOCkuOCkteCkvuCksuCli+CkgiDgpJXgpYcg4KSc4KS14KS+4KSsIOCkpuClh+CkglwiLFxuICBudW1lcmljRXJyb3I6IFwi4KSu4KWC4KSy4KWN4KSvIOCkuOCkguCkluCljeCkr+CkvuCkpOCljeCkruCklSDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwi4KSV4KWD4KSq4KSv4KS+IOCkleCkriDgpLjgpYcg4KSV4KSuIHswfSDgpLXgpLDgpY3gpKMg4KSm4KSw4KWN4KScIOCkleCksOClh+CkglwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIuCkleClg+CkquCkr+CkviB7MH0g4KS44KWHIOCkleCkriDgpLXgpLDgpY3gpKMg4KSm4KSw4KWN4KScIOCkleCksOClh+CkglwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIuCkleClg+CkquCkr+CkviB7MH0g4KS44KWHIOCkheCkp+Ckv+CklSDgpJTgpLAgezF9IOCkuOClhyDgpJXgpK4g4KSq4KS+4KSk4KWN4KSw4KWL4KSCIOCkruClh+CkgiDgpKrgpY3gpLDgpLXgpYfgpLYg4KSV4KSw4KWH4KSCXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwi4KSV4KWD4KSq4KSv4KS+IOCkleCkriDgpLjgpYcg4KSV4KSuIHswfSDgpKrgpILgpJXgpY3gpKTgpL/gpK/gpYvgpIIg4KSV4KWLIOCkreCksOClh+CkglwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCLgpJXgpYPgpKrgpK/gpL4g4KSV4KSuIOCkuOClhyDgpJXgpK4gezB9IOCkteCkv+CkleCksuCljeCkqiDgpJXgpL4g4KSa4KSv4KSoIOCkleCksOClh+CkglwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCLgpJXgpYPgpKrgpK/gpL4gezB9IOCkteCkv+CkleCksuCljeCkquCli+CkgiDgpLjgpYcg4KSF4KSn4KS/4KSVIOCkqOCkueClgOCkgiDgpJrgpYHgpKjgpYfgpIJcIixcbiAgbnVtZXJpY01pbk1heDogXCInezB9JyB7MX0g4KS44KWHIOCkrOCksOCkvuCkrOCksCDgpK/gpL4g4KSF4KSn4KS/4KSVIOCklOCksCB7Mn0g4KS44KWHIOCkrOCksOCkvuCkrOCksCDgpK/gpL4g4KSV4KSuIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI9cIixcbiAgbnVtZXJpY01pbjogXCInezB9JyB7MX0g4KS44KWHIOCkrOCksOCkvuCkrOCksCDgpK/gpL4g4KSF4KSn4KS/4KSVIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI9cIixcbiAgbnVtZXJpY01heDogXCInezB9JyB7MX0g4KS44KWHIOCkrOCksOCkvuCkrOCksCDgpK/gpL4g4KSV4KSuIOCkueCli+CkqOCkviDgpJrgpL7gpLngpL/gpI9cIixcbiAgaW52YWxpZEVtYWlsOiBcIuCkleClg+CkquCkr+CkviDgpI/gpJUg4KS14KWI4KSnIOCkiOCkruClh+CksiDgpKrgpKTgpL4g4KSm4KSw4KWN4KScIOCkleCksOClh+CkglwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCLgpIXgpK3gpL/gpLXgpY3gpK/gpJXgpY3gpKTgpL86IHswfSDgpJXgpYsgJyDgpLjgpJogJyDgpLLgpYzgpJ/gpKjgpL4g4KSa4KS+4KS54KS/4KSPXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCLgpIXgpKjgpYHgpLDgpYvgpKcg4KSy4KWM4KSf4KS+4KSv4KS+IOCkpOCljeCksOClgeCkn+CkvyAnezB9JyAuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwi4KSF4KSo4KWB4KSw4KWL4KSnIOCkqOClhyDgpJbgpL7gpLLgpYAg4KSh4KWH4KSf4KS+IOCkteCkvuCkquCkuCDgpJXgpLAg4KSm4KS/4KSv4KS+IOCkueCliCBcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCLgpKvgpLzgpL7gpIfgpLIg4KSV4KS+IOCkhuCkleCkvuCksCB7MH0g4KS44KWHIOCkheCkp+Ckv+CklSDgpKjgpLngpYDgpIIg4KS54KWL4KSo4KS+IOCkmuCkvuCkueCkv+CkjyAg4KSv4KS+IOCkq+Ckv+CksCAn4KSq4KS+4KSlJyDgpKrgpY3gpLDgpYngpKrgpLDgpY3gpJ/gpYAg4KSX4KSy4KSkIOCkueCliFwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwi4KSV4KWD4KSq4KSv4KS+IOCkpuClguCkuOCksOCkviDgpK7gpYLgpLLgpY3gpK8g4KSm4KSw4KWN4KScIOCkleCksOClh+CkglwiLFxuICB1cGxvYWRpbmdGaWxlOiBcIuCkhuCkquCkleClgCDgpKvgpL7gpIfgpLIg4KSF4KSq4KSy4KWL4KShIOCkueCliyDgpLDgpLngpYAg4KS54KWI4KWkIOCkleClg+CkquCkr+CkviDgpJXgpIgg4KS44KWH4KSV4KSC4KShIOCkh+CkguCkpOCknOCkvuCksCDgpJXgpLDgpYfgpIIg4KSU4KSwIOCkq+Ckv+CksCDgpLjgpYcg4KSq4KWN4KSw4KSv4KS+4KS4IOCkleCksOClh+CkguClpFwiLFxuICBsb2FkaW5nRmlsZTogXCLgpLLgpYvgpKHgpL/gpILgpJdcIixcbiAgY2hvb3NlRmlsZTogXCLgpKvgpLzgpL7gpIfgpLIg4KSa4KWB4KSo4KWH4KSCXCIsXG4gIG5vRmlsZUNob3NlbjogXCLgpJXgpYvgpIgg4KSr4KS+4KSH4KSyIOCkqOCkueClgOCkgiDgpJrgpYHgpKjgpYAg4KSX4KSIXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwi4KSV4KWN4KSv4KS+IOCkhuCkqiDgpLDgpL/gpJXgpYngpLDgpY3gpKEg4KS54KSf4KS+4KSo4KS+IOCkmuCkvuCkueCkpOClhyDgpLngpYjgpIJcIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCLgpK/gpLkg4KSu4KS+4KSoIOCkheCkqOCli+CkluCkviDgpLngpYvgpKjgpL4g4KSa4KS+4KS54KS/4KSPXCIsXG4gIGFkZENvbHVtbjogXCLgpJXgpYngpLLgpK4g4KSc4KWL4KSh4KS84KWH4KSCXCIsXG4gIGFkZFJvdzogXCLgpKrgpILgpJXgpY3gpKTgpL8g4KSc4KWL4KSh4KS84KWH4KSCXCIsXG4gIHJlbW92ZVJvdzogXCLgpLngpJ/gpL7gpI9cIixcbiAgYWRkUGFuZWw6IFwi4KSo4KSv4KS+IOCknOCli+CkoeCkvOClh+CkglwiLFxuICByZW1vdmVQYW5lbDogXCLgpLngpJ/gpL7gpI9cIixcbiAgY2hvaWNlc19JdGVtOiBcIuCkruCkplwiLFxuICBtYXRyaXhfY29sdW1uOiBcIuCkleClieCksuCkrlwiLFxuICBtYXRyaXhfcm93OiBcIuCkquCkguCkleCljeCkpOCkv1wiLFxuICBzYXZpbmdEYXRhOiBcIuCkquCksOCkv+Cko+CkvuCkriDgpLjgpLDgpY3gpLXgpLAg4KSq4KSwIOCkuOClh+CktSDgpLngpYsg4KSw4KS54KWHIOCkueCliOCkglwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwi4KSP4KSVIOCkpOCljeCksOClgeCkn+CkvyDgpLngpYHgpIgg4KSU4KSwIOCkueCkriDgpKrgpLDgpL/gpKPgpL7gpK7gpYvgpIIg4KSV4KWLIOCkqOCkueClgOCkgiDgpLjgpYfgpLUg4KSV4KSwIOCkuOCkleClh1wiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCLgpKrgpLDgpL/gpKPgpL7gpK4g4KS44KSr4KSy4KSk4KS+4KSq4KWC4KSw4KWN4KS14KSVIOCkuOClh+CktSDgpLngpYsg4KSX4KSPXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCLgpKvgpL/gpLAg4KSV4KWL4KS24KS/4KS2IOCkleCksOCli1wiLFxuICB0aW1lck1pbjogXCLgpK7gpL/gpKjgpJ9cIixcbiAgdGltZXJTZWM6IFwi4KS44KWH4KSV4KSC4KShXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwi4KSG4KSq4KSo4KWHIOCkh+CkuCDgpKrgpYPgpLfgpY3gpKAg4KSq4KSwIHswfSDgpJbgpLDgpY3gpJog4KSV4KS/4KSPIOCkueCliOCkgiDgpJTgpLAg4KSV4KWB4KSyIHsxfVwiLFxuICB0aW1lclNwZW50UGFnZTogXCLgpIbgpKrgpKjgpYcg4KSH4KS4IOCkquClg+Ckt+CljeCkoCDgpKrgpLAgezB9IOCkluCksOCljeCkmiDgpJXgpL/gpK/gpL4g4KS54KWIXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwi4KSG4KSq4KSo4KWHIOCkleClgeCksiB7MH0g4KSW4KSw4KWN4KSaIOCkleCkv+Ckr+CkviDgpLngpYhcIixcbiAgdGltZXJMaW1pdEFsbDogXCLgpIbgpKrgpKjgpYcg4KSH4KS4IOCkquClg+Ckt+CljeCkoCDgpKrgpLAgezF9IOCkleClgCB7MH0g4KSU4KSwIOCkleClgeCksiB7M30g4KSV4KWAIHsyfSDgpJbgpLDgpY3gpJog4KSV4KWAIOCkueCliOClpFwiLFxuICB0aW1lckxpbWl0UGFnZTogXCLgpIbgpKrgpKjgpYcg4KSH4KS4IOCkquClg+Ckt+CljeCkoCDgpKrgpLAgezF9IOCkleCkviB7MH0g4KSW4KSw4KWN4KSaIOCkleCkv+Ckr+CkviDgpLngpYhcIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCLgpIbgpKrgpKjgpYcg4KSV4KWB4KSyIHsxfSDgpJXgpYAgezB9IOCkluCksOCljeCkmiDgpJXgpYAg4KS54KWIXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCLgpLjgpL7gpKtcIixcbiAgY2xlYXJDYXB0aW9uOiBcIuCkuOCljeCkquCkt+CljeCkn1wiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCLgpKvgpLzgpL7gpIfgpLIg4KSa4KWB4KSo4KWH4KSCXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIuCkh+CkuCDgpKvgpL7gpIfgpLIg4KSV4KWLIOCkqOCkv+CkleCkvuCksuClh+CkglwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIuCkueCkvuCkgVwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwi4KSo4KS54KWA4KSCXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIuCkleCljeCkr+CkviDgpIbgpKog4KS44KWB4KSo4KS/4KS24KWN4KSa4KS/4KSkIOCkueCliOCkgiDgpJXgpL8g4KSG4KSqIOCkh+CkuCDgpKvgpLzgpL7gpIfgpLIg4KSV4KWLIOCkueCkn+CkvuCkqOCkviDgpJrgpL7gpLngpKTgpYcg4KS54KWI4KSCOiB7MH1cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIuCkleCljeCkr+CkviDgpIbgpKog4KS44KWB4KSo4KS/4KS24KWN4KSa4KS/4KSkIOCkueCliOCkgiDgpJXgpL8g4KSG4KSqIOCkuOCkreClgCDgpKvgpLzgpL7gpIfgpLLgpYvgpIIg4KSV4KWLIOCkueCkn+CkvuCkqOCkviDgpJrgpL7gpLngpKTgpYcg4KS54KWI4KSCXCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCLgpKrgpY3gpLDgpLbgpY3gpKgg4KSV4KS+IOCktuClgOCksOCljeCkt+CklVwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJoaVwiXSA9IGhpbmRpU3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImhpXCJdID0gXCJoaW5kaVwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBodW5nYXJpYW5TdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiVmlzc3phXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJUb3bDoWJiXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJLw6lzelwiLFxuICBwcmV2aWV3VGV4dDogXCJFbMWRbsOpemV0XCIsXG4gIGVkaXRUZXh0OiBcIlN6ZXJrZXN6dMOpc1wiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiUmFqdFwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIkVnecOpYiAoYWRqYSBtZWcpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJFZ3lpayBzZW1cIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiTWluZGV0IGtpdsOhbGFzenRcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcInswfS4vezF9IG9sZGFsXCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJ7MH0gLyB7MX0gcmVrb3JkXCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJWw6FsYXN6b2x0IGvDqXJkw6lzZWs6IHswfSAvIHsxfVwiLFxuICBlbXB0eVN1cnZleTogXCJUaGVyZSBpcyBubyB2aXNpYmxlIHBhZ2Ugb3IgcXVlc3Rpb24gaW4gdGhlIHN1cnZleS5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJLw7ZzesO2bmrDvGssIGhvZ3kga2l0w7ZsdMO2dHRlIGZlbG3DqXLDqXPDvG5rZXQhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6IFwiTcOhciBraXTDtmx0w7Z0dGUgYSBmZWxtw6lyw6lzdC5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJGZWxtw6lyw6lzIGJldMO2bHTDqXNlLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIlbDoWxhc3N6b24uLi5cIixcbiAgdmFsdWU6IFwiw6lydMOpa1wiLFxuICByZXF1aXJlZEVycm9yOiBcIkvDqXJqw7xrLCB2w6FsYXN6b2xqYSBtZWcgZXp0IGEga8OpcmTDqXN0IVwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJLw6lyasO8aywgdsOhbGFzem9sam9uIGxlZ2Fsw6FiYiBlZ3kga8OpcmTDqXNyZS5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJLw6lyasO8ayBhZGpvbiB2w6FsYXN6dCBtaW5kZW4gc29yYmFuIVwiLFxuICBudW1lcmljRXJyb3I6IFwiQXogw6lydMOpayBzesOhbSBrZWxsLCBob2d5IGxlZ3llbiFcIixcbiAgdGV4dE1pbkxlbmd0aDogXCJBZGpvbiBtZWcgbGVnYWzDoWJiIHswfSBrYXJha3RlcnQhXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiTGVnZmVsamViYiB7MH0ga2FyYWt0ZXJ0IGFkam9uIG1lZyFcIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCJBZGpvbiBtZWcgbGVnYWzDoWJiIHswfSwgZGUgbGVnZmVsamViYiB7MX0ga2FyYWt0ZXJ0IVwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIlTDtmx0c8O2biBraSBtaW5pbXVtIHswfSBzb3J0IVwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJWw6FsYXNzem9uIGtpIGxlZ2Fsw6FiYiB7MH0gbGVoZXTFkXPDqWdldCFcIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiTmUgdsOhbGFzc3pvbiB0w7ZiYmV0LCBtaW50IHswfSBsZWhldMWRc8OpZyFcIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIid7MH0nIGxlZ3llbiBuYWd5b2JiLCB2YWd5IGVneWVubMWRLCBtaW50IHsxfSDDqXMga2lzZWJiLCB2YWd5IGVneWVubMWRLCBtaW50IHsyfSFcIixcbiAgbnVtZXJpY01pbjogXCInezB9JyBsZWd5ZW4gbGVnYWzDoWJiIHsxfSFcIixcbiAgbnVtZXJpY01heDogXCJUaGUgJ3swfScgbmUgbGVneWVuIG5hZ3lvYmIsIG1pbnQgezF9IVwiLFxuICBpbnZhbGlkRW1haWw6IFwiQWRqb24gbWVnIGVneSB2YWzDs3MgZW1haWwgY8OtbWV0IVwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCJBIGvDtnZldGtlesWRIGtpZmVqZXrDqXM6IHswfSB2aXNzemEga2VsbCBhZG5pYSBheiDigJ5pZ2F64oCdIMOpcnTDqWtldC5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIkEgbGVrw6lyZGV6w6lzIGhpYsOhdmFsIHTDqXJ0IHZpc3N6YTogJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCJBIGxla8OpcmRlesOpcyDDvHJlcyBhZGF0dGFsIHTDqXJ0IHZpc3N6YSwgdmFneSBhICdwYXRoJyBwYXJhbcOpdGVyIGhlbHl0ZWxlbi5cIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJBIG3DqXJldCBuZW0gbGVoZXQgbmFneW9iYiwgbWludCB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJBZGphIG1lZyBheiBlZ3nDqWIgw6lydMOpa2V0IVwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiRmVsdMO2bHTDqXMgZm9seWFtYXRiYW4uIFbDoXJqb24gcMOhciBtw6Fzb2RwZXJjZXQsIG1hamQgcHLDs2LDoWxqYSDDumpyYS5cIixcbiAgbG9hZGluZ0ZpbGU6IFwiQmV0w7ZsdMOpcy4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIkbDoWpsb2sga2l2w6FsYXN6dMOhc2EgLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJOaW5jcyBraXbDoWxhc3p0dmEgZsOhamxcIixcbiAgY29uZmlybURlbGV0ZTogXCJUw7ZybGkgZXp0IGEgcmVrb3Jkb3Q/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiQXogw6lydMOpa25layBlZ3llZGluZWsga2VsbCBsZW5uaWUuXCIsXG4gIGFkZENvbHVtbjogXCJPc3psb3AgaG96esOhYWTDoXNhXCIsXG4gIGFkZFJvdzogXCJTb3IgaG96esOhYWTDoXNhXCIsXG4gIHJlbW92ZVJvdzogXCJFbHTDoXZvbMOtdMOhc1wiLFxuICBhZGRQYW5lbDogXCLDmmogaG96esOhYWTDoXNhXCIsXG4gIHJlbW92ZVBhbmVsOiBcIkVsdMOhdm9sw610w6FzXCIsXG4gIGNob2ljZXNfSXRlbTogXCJlbGVtXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiT3N6bG9wXCIsXG4gIG1hdHJpeF9yb3c6IFwiU29yXCIsXG4gIHNhdmluZ0RhdGE6IFwiRXJlZG3DqW55IG1lbnTDqXNlIGEgc3plcnZlcnJlLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJFZ3kgaGliYSBmb2x5dMOhbiBuZW0gdHVkdHVrIGVsbWVudGVuaSBheiBlcmVkbcOpbnl0LlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJFcmVkbcOpbnkgc2lrZXJlc2VuIG1lbnR2ZSFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIlByw7Niw6FsamEgw7pqcmFcIixcbiAgdGltZXJNaW46IFwibWluXCIsXG4gIHRpbWVyU2VjOiBcInNlY1wiLFxuICB0aW1lclNwZW50QWxsOiBcIsOWbiB7MH0gw7Zzc3plZ2V0IGvDtmx0w7Z0dCBlemVuIGF6IG9sZGFsb24sIMOpcyDDtnNzemVzZW4gezF9LlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJ7MH0gw7Zzc3plZ2V0IGvDtmx0w7Z0dCBlemVuIGF6IG9sZGFsb24uXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiw5Zzc3plc2VuIHswfSBrw7ZsdMO2dHQuXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCLDlm4gezB9IC8gezF9IMO2c3N6ZWdldCBrw7ZsdMO2dHQgZXplbiBheiBvbGRhbG9uLCDDqXMgw7Zzc3plc2VuIHsyfSAvIHszfS5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiw5ZuIHswfSAvIHsxfSDDtnNzemVnZXQga8O2bHTDtnR0IGV6ZW4gYXogb2xkYWxvbi5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCLDlnNzemVzZW4gezB9IC8gezF9IMO2c3N6ZWdldCBrw7ZsdMO2dHQgZWwuXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJUaXN6dGFcIixcbiAgY2xlYXJDYXB0aW9uOiBcIkVnecOpcnRlbG3FsVwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJWw6FsYXNzeiBmw6FqbHRcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiVMOhdm9sw610c2EgZWwgZXp0IGEgZsOhamx0XCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiSWdlblwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiTmVtXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIkJpenRvc2FuIGVsdMOhdm9sw610amEgZXp0IGEgZsOhamx0OiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJCaXp0b3NhbiBlbCBha2FyamEgdMOhdm9sw610YW5pIGF6IMO2c3N6ZXMgZsOhamx0P1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiS8OpcmTDqXMgY8OtbWVcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiaHVcIl0gPSBodW5nYXJpYW5TdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wiaHVcIl0gPSBcIm1hZ3lhclwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBpY2VsYW5kaWNTdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiVGlsYmFrYVwiLFxuICBwYWdlTmV4dFRleHQ6IFwiw4FmcmFtXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJMb2tpw7BcIixcbiAgcHJldmlld1RleHQ6IFwiRm9yc2tvw7BhXCIsXG4gIGVkaXRUZXh0OiBcIkJyZXl0YVwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiQnlyamHDsHVcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJIaW5uIChza8O9cmluZylcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIkVuZ2lublwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJWZWxqYSBhbGx0XCIsXG4gIHByb2dyZXNzVGV4dDogXCJTw63DsGEgezB9IG9mIHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiVGFrYSB1cHAgezB9IGFmIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiU3ZhcmHDsCB7MH0gLyB7MX0gc3B1cm5pbmd1bVwiLFxuICBlbXB0eVN1cnZleTogXCLDnmHDsCBlciBlbmdpbm4gc8Otw7BhIGXDsGEgc3B1cm5pbmdhciDDrSDDvmVzc2FyaSBrw7ZubnVuLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIlRha2sgZnlyaXIgYcOwIGZ5bGxqYSDDunQgw75lc3NhIGvDtm5udW4hXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCJTa3LDoXIgb2trYXIgc8O9bmEgYcOwIMO+w7ogaGVmdXIgw75lZ2FyIGxva2nDsCDDvmVzc2FyaSBrw7ZubnVuLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIkvDtm5udW5pbiBlciBhw7AgaGxhw7BhLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIlZlbGR1Li4uXCIsXG4gIHZhbHVlOiBcImdpbGRpXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiVmluc2FtbGVnYXN0IHN2YXJpw7Agc3B1cm5pbmd1bm5pLlwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJWaW5zYW1sZWdhc3Qgc3ZhcmHDsHUgYcOwIG1pbm5zdGEga29zdGkgZWlubmkgc3B1cm5pbmd1LlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlZpbnNhbWxlZ2FzdCBzdmFyacOwIHNwdXJuaW5ndW0gw60gw7ZsbHVtIHLDtsOwdW0uXCIsXG4gIG51bWVyaWNFcnJvcjogXCLDnmV0dGEgZ2lsZGkgdmVyw7B1ciBhw7AgdmVyYSB0YWxhLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIsOeYcOwIMOmdHRpIGHDsCB2ZXJhIG1pbm5zdCB7MH0gdMOha24uXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiw55hw7Agw6Z0dGkgYcOwIHZlcmEgbWVzdCB7MH0gdMOha24uXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiw55hw7Agw6Z0dGkgYcOwIHZlcmEgZmxlaXJpIGVuIHswfSBvZyBmw6ZycmkgZW4gezF9IHTDoWtuLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIlZpbnNhbWxlZ2FzdCBmeWxsacOwIMO6ciBhw7AgbWlubnN0YSBrb3N0aSB7MH0gcmHDsGlyLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJWaW5zYW1sZWdhc3QgdmVsamnDsCBhw7AgbWlubnN0YSBrb3N0aSB7MH0gbcO2Z3VsZWlrYS5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiVmluc2FtbGVnYXN0IHZlbGppw7AgZWtraSBmbGVpcmkgZW4gezB9IG3Dtmd1bGVpa2EuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCInezB9JyDDpnR0aSBhw7AgdmVyYSBtZWlyYSBlbiBlw7BhIGphZm50IG9nIHsxfSBtaW5uYSBlbiBlw7BhIGphZm50IG9nIHsyfVwiLFxuICBudW1lcmljTWluOiBcInswfScgw6Z0dGkgYcOwIHZlcmEgbWVpcmEgZW4gZcOwYSBqYWZudCBvZyB7MX1cIixcbiAgbnVtZXJpY01heDogXCInezB9JyDDpnR0aSBhw7AgdmVyYSBtaW5uYSBlbiBlw7BhIGphZm50IG9nIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwiVmluc2FtbGVnYXN0IHNsw6Fpw7AgaW5uIGdpbHQgbmV0ZmFuZy5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiVGrDoW5pbmdpbjogezB9IMOmdHRpIGHDsCBza2lsYSAnc2F0dCcuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJCZWnDsG5pbm4gc2tpbGHDsGkgZWZ0aXJmYXJhbmFkaSB2aWxsdSAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjogXCJCZWnDsG5pbm5nIHNraWxhw7BpIGVuZ3VtIGfDtmdudW0gZcOwYSBzbMOzw7Bpbm4gdmFyIHLDtm5nXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiU2tyw6Fpbm4gc2thbCBla2tpIHZlcmEgc3TDpnJyaSBlbiB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJWaW5hbWxlZ2FzdCBmeWxsacOwIMO6dCBoaXR0IGdpbGRpw7AuXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCJTa3LDoWlubiDDvsOtbiB2YXIgc2VuZC4gVmluc2FtbGVnYXN0IGLDrcOwacOwIMOtIG5va2tyYXIgc2Vrw7puZHVyIG9nIHJleW5pw7AgYWZ0dXIuXCIsXG4gIGxvYWRpbmdGaWxlOiBcIkhsZcOwdXIgLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiVmVsZHUgc2tyw6FyIC4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiRW5naW4gc2tyw6EgdmFsaW5cIixcbiAgY29uZmlybURlbGV0ZTogXCJWaWx0dSBlecOwYSBza3LDoW5uaT9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCLDnmV0dGEgZ2lsZGkgw6Z0dGkgYcOwIHZlcmEgZWluc3Rha3QuXCIsXG4gIGFkZENvbHVtbjogXCJCw6Z0YSB2acOwIGTDoWxraVwiLFxuICBhZGRSb3c6IFwiQsOmdGEgdmnDsCByw7bDsFwiLFxuICByZW1vdmVSb3c6IFwiRmphcmzDpmdqYVwiLFxuICBhZGRQYW5lbDogXCJCw6Z0YSB2acOwIG7DvWp1XCIsXG4gIHJlbW92ZVBhbmVsOiBcIkZqYXJsw6Znw7B1XCIsXG4gIGNob2ljZXNfSXRlbTogXCJobHV0dXJcIixcbiAgbWF0cml4X2NvbHVtbjogXCJEw6Fsa3VyXCIsXG4gIG1hdHJpeF9yb3c6IFwiUsO2w7BcIixcblxuICBzYXZpbmdEYXRhOiBcIk5pw7B1cnN0w7bDsHVybmFyIGVydSBhw7Agc3BhcmEgw6EgbmV0w75qw7NuaW51bSAuLi4gXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJWaWxsYSBrb20gdXBwIG9nIHZpw7AgZ8OhdHVtIGVra2kgdmlzdGHDsCBuacOwdXJzdMO2w7B1cm5hci5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiw4FyYW5ndXJpbm4gdmFyIHZpc3Rhw7B1ciBtZcOwIGfDs8OwdW0gw6FyYW5ncmkhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJSZXluZHUgYWZ0dXJcIixcbiAgdGltZXJNaW46IFwibcOtblwiLFxuICB0aW1lclNlYzogXCJzZWtcIixcbiAgdGltZXJTcGVudEFsbDogXCLDnsO6IGhlZnVyIGV5dHQgezB9IMOhIMO+ZXNzYXJpIHPDrcOwdSBvZyB7MX0gc2FtdGFscy5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwiw57DuiBoZWZ1ciBleXR0IHswfSDDoSDDvmVzc2FyaSBzw63DsHUuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiw57DuiBoZWZ1ciBleXR0IHswfSBzYW10YWxzLlwiLFxuICB0aW1lckxpbWl0QWxsOlxuICAgIFwiw57DuiBoZWZ1ciBleXR0IHswfSBhZiB7MX0gw6Egw75lc3Nhcmkgc8Otw7B1IG9nIHsyfSBhZiB7M30gc2FtdGFscy5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiw57DuiBoZWZ1ciBleXR0IHswfSBhZiB7MX0gw6Egw75lc3Nhcmkgc8Otw7B1LlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIsOew7ogaGVmdXIgZXl0dCB7MH0gYWYgezF9IHNhbXRhbHMuXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJIcmVpbnRcIixcbiAgY2xlYXJDYXB0aW9uOiBcIkhyZWluc2FcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwiVmVsZHUgc2tyw6FcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiRmphcmzDpmfDsHUgw75lc3NhIHNrcsOhXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiSsOhXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOZWlcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiRXJ0dSB2aXNzIHVtIGHDsCDDvsO6IHZpbGppciBmamFybMOmZ2phIMO+ZXNzYSBza3LDoTogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiRXJ0dSB2aXNzIHVtIGHDsCDDvsO6IHZpbGppciBmamFybMOmZ2phIGFsbGFyIHNrcsOhcj9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIlNwdXJuaW5nYXJ0aXRpbGxcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiaXNcIl0gPSBpY2VsYW5kaWNTdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wiaXNcIl0gPSBcIsOtc2xlbnNrYVwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBpbmRvbmVzaWFuU3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIlNlYmVsdW1ueWFcIixcbiAgcGFnZU5leHRUZXh0OiBcIlNlbGFuanV0bnlhXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJTZWxlc2FpXCIsXG4gIHByZXZpZXdUZXh0OiBcIlByYXRpbmphdVwiLFxuICBlZGl0VGV4dDogXCJTdW50aW5nXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJNdWxhaVwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIkxhaW5ueWEgKGplbGFza2FuKVwiLFxuICBub25lSXRlbVRleHQ6IFwiVGlkYWsgQWRhXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIlBpbGloIFNlbXVhXCIsXG4gIHByb2dyZXNzVGV4dDogXCJIYWxhbWFuIHswfSBkYXJpIHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiUmVrYW0gezB9IGRhcmkgezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJNZW5qYXdhYiBwZXJ0YW55YWFuIHswfSAvIHsxfVwiLFxuICBlbXB0eVN1cnZleTogXCJUaWRhayBhZGEgaGFsYW1hbiBhdGF1IHBlcnRhbnlhYW4gZGFsYW0gc3VydmVpLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIlRlcmltYSBrYXNpaCB0ZWxhaCBtZW55ZWxlc2Fpa2FuIHN1cnZlaSFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcIkNhdGF0YW4ga2FtaSBtZW51bmp1a2thbiBiYWh3YSBBbmRhIHRlbGFoIG1lbnllbGVzYWlrYW4gc3VydmVpIGluaS5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJNZW11YXQgc3VydmVpLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIlBpbGloLi4uXCIsXG4gIHZhbHVlOiBcIm5pbGFpXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiU2lsYWhrYW4gamF3YWIgcGVydGFueWFhbiBiZXJpa3V0LlwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJTaWxhaGthbiBqYXdhYiBzZXRpZGFrbnlhIHNhdHUgcGV0YW55YWFuLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlNpbGFoa2FuIGphd2FiIHBlcnRhbnlhYW4gcGFkYSBzZW11YSBiYXJpcy5cIixcbiAgbnVtZXJpY0Vycm9yOiBcIk5pbGFpIGhhcnVzIGJlcnVwYSBhbmdrYS5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCJTaWxhaGthbiBtYXN1a2thbiBzZXRpZGFrbnlhIHswfSBrYXJha3Rlci5cIixcbiAgdGV4dE1heExlbmd0aDogXCJTaWxhaGthbiBtYXN1a2thbiBrdXJhbmcgezB9IGthcmFrdGVyLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOlxuICAgIFwiUFNpbGFoa2FuIG1hc3Vra2FuIGxlYmloIGRhcmkgezB9IGRhbiBrdXJhbmcgZGFyaSB7MX0ga2FyYWt0ZXIuXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiU2lsYWhrYW4gaXNpIHNldGlkYWtueWEgezB9IGJhcmlzLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJTaWxhaGthbiBwaWxpaCBzZXRpZGFrbnlhIHswfSB2YXJpYW4uXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIlNpbGFoa2FuIHBpbGloIHRpZGFrIGxlYmloIGRhcmkgezB9IHZhcmlhbi5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIid7MH0nIGhhcnVzIHNhbWEgZGVuZ2FuIGF0YXUgbGViaWggZGFyaSB7MX0gZGFuIGhhcnVzIHNhbWEgZGVuZ2FuIGF0YXUga3VyYW5nIGRhcmkgezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiJ3swfScgaGFydXMgc2FtYSBkZW5nYW4gYXRhdSBsZWJpaCBkYXJpIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nIGhhcnVzIHNhbWEgZGVuZ2FuIGF0YXUga3VyYW5nIGRhcmkgezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCJTaWxhaGthbiBtYXN1a2thbiBlLW1haWwgeWFuZyBiZW5hci5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiRWtzcHJlc2k6IHswfSBoYXJ1cyBtZW5nZW1iYWxpa2FuICdiZW5hcicuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJQZXJtaW50YWFuIG1lbmdlbWJhbGlrYW4ga2VzYWxhaGFuICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiUGVybWludGFhbiBtZW5nZW1iYWxpa2FuIGRhdGEga29zb25nIGF0YXUgcHJvcGVydGkgJ3BhdGgnIHNhbGFoLlwiLFxuICBleGNlZWRNYXhTaXplOiBcIlVrdXJhbiBiZXJrYXMgdGlkYWsgYm9sZWggbWVsZWJpaGkgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiU2lsYWhrYW4gbWFzdWtrYW4gbmlsYWkgbGFpbm5ueWEuXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCJCZXJrYXMgQW5kYSBzZWRhbmcgZGl1bmdnYWguIFNpbGFoa2FuIHR1bmdndSBiZWJlcmFwYSBzYWF0IGF0YXUgY29iYSBsYWdpLlwiLFxuICBsb2FkaW5nRmlsZTogXCJNZW11YXQuLi5cIixcbiAgY2hvb3NlRmlsZTogXCJQaWxpaCBiZXJrYXMuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIlRpZGFrIGFkYSBmaWxlIHlhbmcgZGlwaWxpaFwiLFxuICBjb25maXJtRGVsZXRlOiBcIkFwYWthaCBBbmRhIGluZ2luIG1lbmdoYXB1cyBjYXRhdGFuP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIk5pbGFpIGhhcnVzIHVuaWsuXCIsXG4gIGFkZENvbHVtbjogXCJUYW1iYWgga29sb21cIixcbiAgYWRkUm93OiBcIlRhbWJhaCBiYXJpc1wiLFxuICByZW1vdmVSb3c6IFwiSGFwdXNcIixcbiAgYWRkUGFuZWw6IFwiVGFtYmFoIGJhcnVcIixcbiAgcmVtb3ZlUGFuZWw6IFwiSGFwdXNcIixcbiAgY2hvaWNlc19JdGVtOiBcIml0ZW1cIixcbiAgbWF0cml4X2NvbHVtbjogXCJLb2xvbVwiLFxuICBtYXRyaXhfcm93OiBcIkJhcmlzXCIsXG4gIHNhdmluZ0RhdGE6IFwiSGFzaWwgc2VkYW5nIGRpc2ltcGFuIHBhZGEgc2VydmVyLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJLZXNhbGFoYW4gdGVyamFkaSBkYW4ga2FtaSB0aWRhayBkYXBhdCBtZW55aW1wYW4gaGFzaWwuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIkhhc2lsIHRlbGFoIHN1a3NlcyBkaXNpbXBhbiFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIkNvYmEgbGFnaVwiLFxuICB0aW1lck1pbjogXCJtZW5pdFwiLFxuICB0aW1lclNlYzogXCJkZXRpa1wiLFxuICB0aW1lclNwZW50QWxsOlxuICAgIFwiQW5kYSB0ZWxhaCBtZW5naGFiaXNrYW4gezB9IHBhZGEgaGFsYW1hbiBpbmkgZGFuIHsxfSBzZWNhcmEga2VzZWx1cnVoYW4uXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIllBbmRhIHRlbGFoIG1lbmdoYWJpc2thbiB7MH0gcGFkYSBoYWxhbWFuIGluaS5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJBbmRhIHRlbGFoIG1lbmdoYWJpc2thbiB7MH0gc2VjYXJhIGtlc2VsdXJ1aGFuLlwiLFxuICB0aW1lckxpbWl0QWxsOlxuICAgIFwiQW5kYSB0ZWxhaCBtZW5naGFiaXNrYW4gezB9IGRhcmkgezF9IHBhZGEgaGFsYW1hbiBpbmkgZGFuIHsyfSBkYXJpIHszfSBzZWNhcmEga2VzZWx1cnVoYW4uXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIkFuZGEgdGVsYWggbWVuZ2hhYmlza2FuIHswfSBkYXJpIHsxfSBwYWRhIGhhbGFtYW4gaW5pLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIkFuZGEgdGVsYWggbWVuZ2hhYmlza2FuIHswfSBkYXJpIHsxfSBzZWNhcmEga2VzZWx1cnVoYW4uXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJCZXJzaWhrYW5cIixcbiAgY2xlYXJDYXB0aW9uOiBcIkJlcnNpaGthblwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJQaWxpaCBGaWxlXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIkhhcHVzIGJlcmthcyBpbmlcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJJeWFcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIlRpZGFrXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIkFuZGEgeWFraW4gaW5naW4gbWVuZ2hhcHVzIGZpbGUgaW5pOiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJBbmRhIHlha2luIGluZ2luIG1lbmdoYXB1cyBzZW11YSBmaWxlP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiSnVkdWwgcGVydGFueWFhblwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJpZFwiXSA9IGluZG9uZXNpYW5TdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wiaWRcIl0gPSBcImJhaGFzYSBJbmRvbmVzaWFcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgaXRhbGlhblN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJQcmVjZWRlbnRlXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJTdWNjZXNzaXZvXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJTYWx2YVwiLFxuICBwcmV2aWV3VGV4dDogXCJBbnRlcHJpbWFcIixcbiAgZWRpdFRleHQ6IFwiTW9kaWZpY2FcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIkluaXppb1wiLFxuICBvdGhlckl0ZW1UZXh0OiBcIkFsdHJvIChkZXNjcml2aSlcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIk5lc3N1bm9cIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiU2VsZXppb25hIHR1dHRpXCIsXG4gIHByb2dyZXNzVGV4dDogXCJQYWdpbmEgezB9IGRpIHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiUmVjb3JkIGRpIHswfSBkaSB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIlJpc3Bvc3RlIGEgezB9L3sxfSBkb21hbmRlXCIsXG4gIGVtcHR5U3VydmV5OiBcIk5vbiBjaSBzb25vIHBhZ2luZSBvIGRvbWFuZGUgdmlzaWJpbGkgbmVsIHF1ZXN0aW9uYXJpby5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJHcmF6aWUgcGVyIGF2ZXIgY29tcGxldGF0byBpbCBxdWVzdGlvbmFyaW8hXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCJJIG5vc3RyaSByZWNvcmRzIG1vc3RyYW5vIGNoZSBoYWkgZ2nDoCBjb21wbGV0YXRvIHF1ZXN0byBxdWVzdGlvbmFyaW8uXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiQ2FyaWNhbWVudG8gZGVsIHF1ZXN0aW9uYXJpbyBpbiBjb3Jzby4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJTY2VnbGkuLi5cIixcbiAgdmFsdWU6IFwidmFsb3JlXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiQ2FtcG8gb2JibGlnYXRvcmlvXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIlBlciBGYXZvcmUsIHJpc3BvbmRpIGFkIGFsbWVubyB1bmEgZG9tYW5kYS5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJDb21wbGV0YXJlIHR1dHRlIGxlIHJpZ2hlXCIsXG4gIG51bWVyaWNFcnJvcjogXCJJbCB2YWxvcmUgZGV2ZSBlc3NlcmUgbnVtZXJpY29cIixcbiAgdGV4dE1pbkxlbmd0aDogXCJJbnNlcmlyZSBhbG1lbm8gezB9IGNhcmF0dGVyaVwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIkx1bmdoZXp6YSBtYXNzaW1hIGNvbnNlbnRpdGEgezB9IGNhcmF0dGVyaVwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOlxuICAgIFwiSW5zZXJpcmUgdW5hIHN0cmluZ2EgY29uIG1pbmltbyB7MH0gZSBtYXNzaW1vIHsxfSBjYXJhdHRlcmlcIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJDb21wbGV0YXJlIGFsbWVubyB7MH0gcmlnaGUuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlNlbGV6aW9uYXJlIGFsbWVubyB7MH0gdmFyaWFudGkuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcIlNlbGV6aW9uYXJlIG1hc3NpbW8gezB9IHZhcmlhbnRpLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiJ3swfScgZGV2ZSBlc3NlcmUgdWd1YWxlIG8gc3VwZXJpb3JlIGEgezF9IGUgdWd1YWxlIG8gaW5mZXJpb3JlIGEgezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiJ3swfScgZGV2ZSBlc3NlcmUgdWd1YWxlIG8gc3VwZXJpb3JlIGEgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScgZGV2ZSBlc3NlcmUgdWd1YWxlIG8gaW5mZXJpb3JlIGEgezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCJJbnNlcmlyZSBpbmRpcml6em8gbWFpbCB2YWxpZG9cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiTCdlc3ByZXNzaW9uZTogezB9IGRvdnJlYmJlIHRvcm5hcmUgJ3Zlcm8nLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiTGEgcmljaGllc3RhIGhhIHJpc3Bvc3RvIGNvbiB1biBlcnJvcmUgJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCJMYSByaWNoaWVzdGEgaGEgcmlzcG9zdG8gbnVsbCBvcHB1cmUgaWwgcGVyY29yc28gbm9uIMOoIGNvcnJldHRvXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiSWwgZmlsZSBub24gcHXDsiBlY2NlZGVyZSB7MH1cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIkluc2VyaXJlIGlsIHZhbG9yZSAnYWx0cm8nXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCJGaWxlIGluIGNhcmljYW1lbnRvLiBBdHRlbmRpIGFsY3VuaSBzZWNvbmRpIGUgcmlwcm92YVwiLFxuICBsb2FkaW5nRmlsZTogXCJDYXJpY2FtZW50by4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIlNlbGV6aW9uYXJlIGZpbGUocykuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIk5lc3N1biBmaWxlIHNlbGV6aW9uYXRvXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiU2VpIHNpY3VybyBkaSB2b2xlciBlbG1pbmFyZSBpbCByZWNvcmQ/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiUXVlc3RvIHZhbG9yZSBkZXZlIGVzc2VyZSB1bml2b2NvLlwiLFxuICBhZGRDb2x1bW46IFwiQWdnaXVuZ2kgY29sb25uYVwiLFxuICBhZGRSb3c6IFwiQWdnaXVuZ2kgcmlnYVwiLFxuICByZW1vdmVSb3c6IFwiUmltdW92aSByaWdhXCIsXG4gIGFkZFBhbmVsOiBcIkFnZ2l1bmdpIHJpZ2FcIixcbiAgcmVtb3ZlUGFuZWw6IFwiRWxpbWluYVwiLFxuICBjaG9pY2VzX0l0ZW06IFwiRWxlbWVudG9cIixcbiAgbWF0cml4X2NvbHVtbjogXCJDb2xvbm5hXCIsXG4gIG1hdHJpeF9yb3c6IFwiUmlnYVwiLFxuICBzYXZpbmdEYXRhOiBcIlNhbHZhdGFnZ2lvIGRhdGkgc3VsIHNlcnZlci4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiU2kgw6ggdmVyaWZpY2F0byB1biBlcnJvcmUgZSBub24gw6ggc3RhdG8gcG9zc2liaWxlIHNhbHZhcmUgaSByaXN1bHRhdGkuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIkkgcmlzdWx0YXRpIHNvbm8gc3RhdGkgc2FsdmF0aSBjb24gc3VjY2Vzc28hXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJSaXByb3ZhXCIsXG4gIHRpbWVyTWluOiBcIm1pblwiLFxuICB0aW1lclNlYzogXCJzZWNcIixcbiAgdGltZXJTcGVudEFsbDogXCJIYWkgaW1waWVnYXRvIHswfSBzdSBxdWVzdGEgcGFnaW5hIGUgezF9IGluIHRvdGFsZS5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwiSGFpIGltcGllZ2F0byB7MH0gc3UgcXVlc3RhIHBhZ2luYS5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJIYWkgaW1waWVnYXRvIHswfSBpbiB0b3RhbGUuXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCJIYWkgaW1waWVnYXRvIHswfSBkaSB7MX0gc3UgcXVlc3RhIHBhZ2luYSBlIHsyfSBkaSB7M30gaW4gdG90YWxlLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJIYWkgaW1waWVnYXRvIHswfSBkaSB7MX0gc3UgcXVlc3RhIHBhZ2luYS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJIYWkgaW1waWVnYXRvIHswfSBkaSB7MX0gaW4gdG90YWxlLlwiLFxuICBjbGVhbkNhcHRpb246IFwiUHVsaXNjaVwiLFxuICBjbGVhckNhcHRpb246IFwiQ2FuY2VsbGFcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwiU2NlZ2xpZXJlIGlsIGZpbGVcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiUmltdW92ZXJlIHF1ZXN0byBmaWxlXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiU8OsXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOb1wiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJTZWkgc2ljdXJvIGRpIHZvbGVyIGVsbWluYXJlIHF1ZXN0byBmaWxlOiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJTZWkgc2ljdXJvIGRpIHZvbGVyIGVsbWluYXJlIHR1dHRpIGkgZmlsZXM/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJUaXRvbG8gZGVsbGEgZG9tYW5kYVwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJpdFwiXSA9IGl0YWxpYW5TdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wiaXRcIl0gPSBcIml0YWxpYW5vXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xyXG5cclxuZXhwb3J0IHZhciBqYXBhbmVzZVN1cnZleVN0cmluZ3MgPSB7XHJcbiAgcGFnZVByZXZUZXh0OiBcIuWJjeOBuFwiLFxyXG4gIHBhZ2VOZXh0VGV4dDogXCLmrKHjgbhcIixcclxuICBjb21wbGV0ZVRleHQ6IFwi5a6M5LqGXCIsXHJcbiAgcHJldmlld1RleHQ6IFwi44OX44Os44OT44Ol44O8XCIsXHJcbiAgZWRpdFRleHQ6IFwi57eo6ZuGXCIsXHJcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIuOCueOCv+ODvOODiFwiLFxyXG4gIG90aGVySXRlbVRleHQ6IFwi44Gd44Gu5LuW77yI6Kqs5piO77yJXCIsXHJcbiAgbm9uZUl0ZW1UZXh0OiBcIuOBquOBl1wiLFxyXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIuOBmeOBueOBpumBuOaKnlwiLFxyXG4gIHByb2dyZXNzVGV4dDogXCJ7MH0vezF96aCBXCIsXHJcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcInsxfeOBrnswfeOCkuiomOmMsuOBmeOCi1wiLFxyXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJ7MH0vezF944Gu6LOq5ZWP44Gr5Zue562U44GX44G+44GX44Gf44CCXCIsXHJcbiAgZW1wdHlTdXJ2ZXk6IFwi44GT44Gu6Kq/5p+744Gr6KGo56S644Gn44GN44KL44Oa44O844K444KE6LOq5ZWP44Gv44GC44KK44G+44Gb44KTXCIsXHJcbiAgY29tcGxldGluZ1N1cnZleTogXCLoqr/mn7vjgpLlrozkuobjgZfjgabjgY/jgozjgabjgYLjgorjgYzjgajjgYbjgZTjgZbjgYTjgb7jgZfjgZ9cIixcclxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxyXG4gICAgXCLlvZPnpL7jga7oqJjpjLLjgavjgojjgovjgajjgIHjgZPjga7oqr/mn7vjga/jgZnjgafjgavlrozkuobjgZfjgabjgYTjgb7jgZnjgIJcIixcclxuICBsb2FkaW5nU3VydmV5OiBcIuiqv+afu+OCkuODgOOCpuODs+ODreODvOODieS4rVwiLFxyXG4gIG9wdGlvbnNDYXB0aW9uOiBcIumBuOaKnlwiLFxyXG4gIHZhbHVlOiBcIuWApOaJk+OBoVwiLFxyXG4gIHJlcXVpcmVkRXJyb3I6IFwi6LOq5ZWP44Gr44GK562U44GI5LiL44GV44GEXCIsXHJcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwi5pyA5L2O44Gn44KCMeOBpOOBruizquWVj+OBq+etlOOBiOOBpuOBj+OBoOOBleOBhOOAglwiLFxyXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwi6LOq5ZWP44Gr44Gv5YWo5YiX44Gn5Zue562U44GX44Gm44GP44Gg44GV44GE44CCXCIsXHJcbiAgbnVtZXJpY0Vycm9yOiBcIuaVsOWtl+OBp+OBlOiomOWFpeS4i+OBleOBhFwiLFxyXG4gIHRleHRNaW5MZW5ndGg6IFwiezB9IOaWh+Wtl+S7peS4iuOBp+WFpeWKm+OBl+OBpuS4i+OBleOBhFwiLFxyXG4gIHRleHRNYXhMZW5ndGg6IFwiezB95paH5a2X5Lul5LiL44Gn5YWl5Yqb44GX44Gm44GP44Gg44GV44GE44CCXCIsXHJcbiAgdGV4dE1pbk1heExlbmd0aDogXCJ7MH3ku6XkuIp7MX3mnKrmuoDjga7mloflrZfjgpLlhaXlipvjgZfjgabjgY/jgaDjgZXjgYTjgIJcIixcclxuICBtaW5Sb3dDb3VudEVycm9yOiBcInswfeihjOS7peS4iuOBp+WFpeWKm+OBl+OBpuS4i+OBleOBhFwiLFxyXG4gIG1pblNlbGVjdEVycm9yOiBcInswfeeorumhnuS7peS4iuOCkumBuOaKnuOBl+OBpuS4i+OBleOBhFwiLFxyXG4gIG1heFNlbGVjdEVycm9yOiBcInswfeS7peS4iuOBruODkOODquOCouODs+ODiOOCkumBuOaKnuOBl+OBquOBhOOBp+OBj+OBoOOBleOBhOOAglwiLFxyXG4gIG51bWVyaWNNaW5NYXg6XHJcbiAgICBcInswfeOBr3sxfeS7peS4iuOBp+OBguOCiuOAgXsyfeS7peS4i+OBp+OBguOCi+OBk+OBqOOBjOacm+OBvuOBl+OBhOOAglwiLFxyXG4gIG51bWVyaWNNaW46IFwiJ3swfScg44Gv5ZCM562J44GLezF944KI44KK5aSn44GN44GP44Gq44GR44KM44Gw44Gq44KK44G+44Gb44KTXCIsXHJcbiAgbnVtZXJpY01heDogXCInezB9JyDjga/lkIznrYnjgYt7MX3jgojjgorlsI/jgZXjgY/jgarjgZHjgozjgbDjgarjgorjgb7jgZvjgpNcIixcclxuICBpbnZhbGlkRW1haWw6IFwi5pyJ5Yq544Gq44Oh44O844Or44Ki44OJ44Os44K544KS44GU6KiY5YWl5LiL44GV44GEXCIsXHJcbiAgaW52YWxpZEV4cHJlc3Npb246IFwi5byP44GvIHswfeOBryd0cnVlJ+OCkui/lOOBmeOBueOBjeOBp+OBmeOAglwiLFxyXG4gIHVybFJlcXVlc3RFcnJvcjogXCLjg6rjgq/jgqjjgrnjg4jjga/jgqjjg6njg7wgJ3swfScg44KS6L+U44GX44G+44GX44Gf44CCezF9XCIsXHJcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxyXG4gICAgXCLjg6rjgq/jgqjjgrnjg4jjgYznqbrjga7jg4fjg7zjgr/jgpLov5TjgZfjgZ/jgYvjgIEncGF0aCcg44OX44Ot44OR44OG44Kj44GM5q2j44GX44GP44GC44KK44G+44Gb44KT44CCXCIsXHJcbiAgZXhjZWVkTWF4U2l6ZTogXCLjg5XjgqHjgqTjg6vjga7jgrXjgqTjgrrjga97MH3jgpLotoXjgYjjgabjga/jgYTjgZHjgb7jgZvjgpNcIixcclxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwi44Gd44Gu5LuW44Gu5YCk44KS5YWl5Yqb44GX44Gm44GP44Gg44GV44GE44CCXCIsXHJcbiAgdXBsb2FkaW5nRmlsZTpcclxuICAgIFwi44OV44Kh44Kk44Or44KS44Ki44OD44OX44Ot44O844OJ5Lit44Gn44GZ44CC44GX44Gw44KJ44GP44GX44Gm44GL44KJ5YaN5bqm44GK6Kmm44GX5LiL44GV44GEXCIsXHJcbiAgbG9hZGluZ0ZpbGU6IFwi6Kqt44G/6L6844G/5LitXCIsXHJcbiAgY2hvb3NlRmlsZTogXCLjg5XjgqHjgqTjg6vjgpLpgbjmip5cIixcclxuICBub0ZpbGVDaG9zZW46IFwi6YG45oqe44GV44KM44Gf44OV44Kh44Kk44Or44Gv44GC44KK44G+44Gb44KTXCIsXHJcbiAgY29uZmlybURlbGV0ZTogXCLjg6zjgrPjg7zjg4njgpLliYrpmaTjgZfjgb7jgZnjgYvvvJ9cIixcclxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIuOBk+OBruWApOOBr+S4gOaEj+OBp+OBquOBkeOCjOOBsOOBquOCiuOBvuOBm+OCk+OAglwiLFxyXG4gIGFkZENvbHVtbjogXCLliJfjga7ov73liqBcIixcclxuICBhZGRSb3c6IFwi6L+95Yqg6KGMXCIsXHJcbiAgcmVtb3ZlUm93OiBcIumZpOWOu1wiLFxyXG4gIGFkZFBhbmVsOiBcIuaWsOimj+i/veWKoFwiLFxyXG4gIHJlbW92ZVBhbmVsOiBcIumZpOWOu1wiLFxyXG4gIGNob2ljZXNfSXRlbTogXCLlk4Hnm65cIixcclxuICBtYXRyaXhfY29sdW1uOiBcIuOCs+ODqeODoFwiLFxyXG4gIG1hdHJpeF9yb3c6IFwi6KGMXCIsXHJcbiAgc2F2aW5nRGF0YTogXCLntZDmnpzjga/jgrXjg7zjg5Djg7zjgavkv53lrZjjgZXjgozjgabjgYTjgb7jgZkuLi7jgIJcIixcclxuICBzYXZpbmdEYXRhRXJyb3I6IFwi44Ko44Op44O844GM55m655Sf44GX44CB57WQ5p6c44KS5L+d5a2Y44Gn44GN44G+44Gb44KT44Gn44GX44Gf44CCXCIsXHJcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwi57WQ5p6c44Gv54Sh5LqL44Gr5L+d5a2Y44GV44KM44G+44GX44GfXCIsXHJcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIuOCguOBhuS4gOW6puippuOBl+OBpuOBv+OBpuOBj+OBoOOBleOBhOOAglwiLFxyXG4gIHRpbWVyTWluOiBcIuWDheWwkVwiLFxyXG4gIHRpbWVyU2VjOiBcIuOCu+ODg+OCr1wiLFxyXG4gIHRpbWVyU3BlbnRBbGw6IFwi44GC44Gq44Gf44Gv44GT44Gu44Oa44O844K444GrezB944KS6LK744KE44GX44CB5ZCI6KiI44GnezF944KS6LK744KE44GX44G+44GX44Gf44CCXCIsXHJcbiAgdGltZXJTcGVudFBhZ2U6IFwi44GC44Gq44Gf44Gv44GT44Gu44Oa44O844K444GrezB944KS6LK744KE44GX44G+44GX44Gf44CCXCIsXHJcbiAgdGltZXJTcGVudFN1cnZleTogXCLlkIjoqIjjgad7MH3jgpLkvb/jgaPjgZ/jgZPjgajjgavjgarjgorjgb7jgZnjgIJcIixcclxuICB0aW1lckxpbWl0QWxsOlxyXG4gICAgXCLjgZPjga7jg5rjg7zjgrjjgat7MX3jga7jgYbjgaF7MH3jgpLosrvjgoTjgZfjgIF7M33jga7jgYbjgaF7Mn3jgpLlkIjoqIjjgafosrvjgoTjgZfjgb7jgZfjgZ/jgIJcIixcclxuICB0aW1lckxpbWl0UGFnZTogXCLjgZPjga7jg5rjg7zjgrjjgad7MX3jga57MH3jgpLkvb/jgaPjgZ/jgZPjgajjgYzjgYLjgorjgb7jgZnjgIJcIixcclxuICB0aW1lckxpbWl0U3VydmV5OiBcIuWQiOioiOOBp3sxfeOBrnswfeOCkuS9v+OBo+OBn+OBk+OBqOOBjOOBguOCiuOBvuOBmeOAglwiLFxyXG4gIGNsZWFuQ2FwdGlvbjogXCLliYrpmaRcIixcclxuICBjbGVhckNhcHRpb246IFwi56m655m9XCIsXHJcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwi44OV44Kh44Kk44Or44KS6YG45oqeXCIsXHJcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwi44GT44Gu44OV44Kh44Kk44Or44KS5YmK6ZmkXCIsXHJcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCLlmatcIixcclxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwi5ZCmXCIsXHJcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwi44GT44Gu44OV44Kh44Kk44Or44KS5YmK6Zmk44GX44Gm44KC44KI44KN44GX44GE44Gn44GZ44GL77yfezB9P1wiLFxyXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCLjgZnjgbnjgabjga7jg5XjgqHjgqTjg6vjgpLliYrpmaTjgZfjgabjgoLjgojjgo3jgZfjgYTjgafjgZnjgYvvvJ9cIixcclxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwi6LOq5ZWP5ZCNXCIsXHJcbn07XHJcblxyXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImphXCJdID0gamFwYW5lc2VTdXJ2ZXlTdHJpbmdzO1xyXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJqYVwiXSA9IFwi5pel5pys6KqeXCI7XHJcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIga2F6YWtoU3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcItCQ0YDRgtKb0LBcIixcbiAgcGFnZU5leHRUZXh0OiBcItCa0LXQu9C10YHRllwiLFxuICBjb21wbGV0ZVRleHQ6IFwi0JTQsNC50YvQvVwiLFxuICBwcmV2aWV3VGV4dDogXCLQkNC70LTRi9C9INCw0LvQsCDSm9Cw0YDQsNGDXCIsXG4gIGVkaXRUZXh0OiBcItCg0LXQtNCw0LrRhtC40Y/Qu9Cw0YNcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcItCR0LDRgdGC0LDRg1wiLFxuICBvdGhlckl0ZW1UZXh0OiBcItCR0LDRgdKb0LAgKNOp0YLRltC90LXQvNGW0LcsINC20LDQt9GL0qPRi9C3KVwiLFxuICBub25lSXRlbVRleHQ6IFwi0JbQvtKbXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcItCR0LDRgNC70YvSk9GL0L0g0YLQsNKj0LTQsNGDXCIsXG4gIHByb2dyZXNzVGV4dDogXCJ7MH0g0LTQtdC9IHsxfSDQsdC10YIgXCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJ7MH0g0LTQtdC9IHsxfSDQttCw0LfQsdCwXCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJ7MH0vezF9INGB0rHRgNCw0pvRgtCw0YDSk9CwINC20LDRg9Cw0L9cIixcbiAgZW1wdHlTdXJ2ZXk6IFwi0JHRltGAINC00LUg0LHRltGAINGB0rHRgNCw0psg0LbQvtKbLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcItCh0LDRg9Cw0LvQvdCw0LzQsNC90Ysg0YLQvtC70YLRi9GA0pPQsNC90YvSo9GL0Lcg0q/RiNGW0L0g0YDQsNGF0LzQtdGCIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOiBcItCh0ZbQtyDQsdKx0Lsg0YHQsNGD0LDQu9C90LDQvNCw0L3RiyDTqdGC0ZbQvyDSm9C+0LnQtNGL0qPRi9C3LlwiLFxuICBsb2FkaW5nU3VydmV5OiBcItCh0LXRgNCy0LXRgNC00LXQvSDQttKv0LrRgtC10YMuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwi0KLQsNKj0LTQsNGDLi4uXCIsXG4gIHZhbHVlOiBcItC805nQvdGWXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwi06jRgtGW0L3QtdC80ZbQtywg0YHSsdGA0LDSm9Kb0LAg0LbQsNGD0LDQvyDQsdC10YDRltKj0ZbQty5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwi06jRgtGW0L3QtdC80ZbQtywg0LrQtdC8INC00LXQs9C10L3QtNC1INCx0ZbRgCDRgdKx0YDQsNKb0pvQsCDQttCw0YPQsNC/INCx0LXRgNGW0qPRltC3LlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcItOo0YLRltC90LXQvNGW0LcsINOZ0YDQsdGW0YAg0LbQvtC70LTRi9KjINGB0rHRgNCw0pPQsNC90Ysg0LbQsNGD0LDQvyDQsdC10YDRltKj0ZbQty5cIixcbiAgbnVtZXJpY0Vycm9yOiBcItCW0LDRg9Cw0L8g0YHQsNC9INGC0q/RgNGW0L3QtNC1INCx0L7Qu9GD0Ysg0LrQtdGA0LXQui5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCLTqNGC0ZbQvdC10LzRltC3LCB7MH0g0LTQtdC9INC606nQvyDRgtCw0qPQsdCwINC10L3Qs9GW0LfRltKj0ZbQty5cIixcbiAgdGV4dE1heExlbmd0aDogXCLTqNGC0ZbQvdC10LzRltC3LCB7MH0g0LTQtdC9INCw0Lcg0YLQsNKj0LHQsCDQtdC90LPRltC30ZbSo9GW0LcuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwi06jRgtGW0L3QtdC80ZbQtywgezB9INCw0Lcg0LbTmdC90LUgezF9INC606nQvyDRgtCw0qPQsdCwINC10L3Qs9GW0LfRltKj0ZbQty5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCLTqNGC0ZbQvdC10LzRltC3LCB7MH0g0LTQtdC9INC60LXQvCDQtdC80LXRgSDQttC+0Lsg0YLQvtC70YLRi9GA0YvSo9GL0LcuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcItOo0YLRltC90LXQvNGW0LcsINGC0YvQvCDQsdC+0LvQvNCw0YHQsCB7MH0g0L3SsdGB0pvQsCDRgtCw0qPQtNCw0qPRi9C3LlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCLTqNGC0ZbQvdC10LzRltC3LCB7MH0g0L3SsdGB0pvQsNC00LDQvSDQutOp0L8g0YLQsNKj0LTQsNC80LDSo9GL0LcuXCIsXG4gIG51bWVyaWNNaW5NYXg6IFwiJ3swfScgezF9INC00LXQvSDQutC10Lwg0LXQvNC10YEg0LbTmdC90LUgezJ9INC00LXQvSDQutOp0L8g0LXQvNC10YEg0LHQvtC70YMg0LrQtdGA0LXQulwiLFxuICBudW1lcmljTWluOiBcIid7MH0nIHsxfSDQtNC10L0g0LrQtdC8INC10LzQtdGBINCx0L7Qu9GDINC60LXRgNC10LpcIixcbiAgbnVtZXJpY01heDogXCInezB9JyB7MX0g0LTQtdC9INC606nQvyDQtdC80LXRgSDQsdC+0LvRgyDQutC10YDQtdC6XCIsXG4gIGludmFsaWRFbWFpbDogXCLTqNGC0ZbQvdC10LzRltC3LCDQttCw0YDQsNC80LTRiyDRjdC70LXQutGC0YDQvtC90LTRi9KbINC/0L7RiNGC0LDSo9GL0LfQtNGLINC10L3Qs9GW0LfRltKj0ZbQty5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiezB9INOp0YDQvdC10LPRliAgJ3RydWUnINKb0LDQudGC0LDRgNGDINC60LXRgNC10LouXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCLQodKx0YDQsNGC0YvQvCDSm9Cw0YLQtdC70ZbQutGC0ZYg0pvQsNC50YLQsNGA0LTRiyd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcItCh0rHRgNCw0YLRi9C80pPQsCDQttCw0YPQsNC/INCx0L7RgSDQutC10LvQtNGWINC90LXQvNC10YHQtSAncGF0aCcg0pvQsNGB0LjQtdGC0ZYg0pvQsNGC0LUg0LrTqdGA0YHQtdGC0ZbQu9Cz0LXQvSBcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCLQpNCw0LnQu9C00YvSoyDQvNOp0LvRiNC10YDRliB7MH0g0LDRgdC/0LDRgyDQutC10YDQtdC6LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwi06jRgtGW0L3QtdC80ZbQtywg4oCc0JHQsNGB0pvQsOKAnSDQttC+0LvRi9C90LAg0LTQtdGA0LXQutGC0ZYg0LXQvdCz0ZbQt9GW0qPRltC3XCIsXG4gIHVwbG9hZGluZ0ZpbGU6IFwi0KHRltC30LTRltKjINGE0LDQudC70YvSo9GL0Lcg0LbSr9C60YLQtdC70ZbQvyDQttCw0YLRi9GALiDQkdGW0YDQvdC10YjQtSDRgdC10LrRg9C90LQg0YLQvtGB0YvQvywg0pvQsNC50YLQsNC00LDQvSDQsdCw0LnSm9Cw0L8g0LrTqdGA0ZbSo9GW0LcuXCIsXG4gIGxvYWRpbmdGaWxlOiBcItCW0q/QutGC0LXRgy4uLlwiLFxuICBjaG9vc2VGaWxlOiBcItCk0LDQudC70LTQsNGA0LTRiyDRgtCw0qPQtNCw0qPRi9C3Li4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCLQpNCw0LnQuyDRgtCw0qPQtNCw0LvRi9C90LHQsNC00YtcIixcbiAgY29uZmlybURlbGV0ZTogXCLQodGW0Lcg0LbQsNC30LHQsNC90Ysg0LbQvtGP0YLRi9C90YvSo9GL0LfSk9CwINGB0LXQvdGW0LzQtNGW0YHRltC3INCx0LU/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwi0JHSsdC7INC805nQvSDQsdGW0YDQtdCz0LXQuSDQsdC+0LvRgyDQutC10YDQtdC6LlwiLFxuICBhZGRDb2x1bW46IFwi0JHQsNKT0LDQvdCwINKb0L7RgdGDXCIsXG4gIGFkZFJvdzogXCLQltC+0LvQtNGLINKb0L7RgdGDXCIsXG4gIHJlbW92ZVJvdzogXCLTqNGI0ZbRgNGDXCIsXG4gIGFkZFBhbmVsOiBcItCW0LDSo9CwINKb0L7RgdGDXCIsXG4gIHJlbW92ZVBhbmVsOiBcItOo0YjRltGA0YNcIixcbiAgY2hvaWNlc19JdGVtOiBcItCd0rHRgdKb0LBcIixcbiAgbWF0cml4X2NvbHVtbjogXCLQkdCw0pPQsNC90LBcIixcbiAgbWF0cml4X3JvdzogXCLQltC+0LtcIixcbiAgc2F2aW5nRGF0YTogXCLQndOZ0YLQuNC20LXQu9C10YAg0YHQtdGA0LLQtdGA0LTQtSDRgdCw0pvRgtCw0LvQsNC00YsuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcItKa0LDRgtC10LvRltC6INGC0YPRi9C90LTQsNC00YssINC905nRgtC40LbQtSDRgdCw0pvRgtCw0LvRi9C90LHQsNC00YsuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcItCd05nRgtC40LbQtSDQvtC50LTQsNKT0YvQtNCw0Lkg0YHQsNKb0YLQsNC70LTRiyFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcItKa0LDQudGC0LDQtNCw0L0g0LHQsNC50pvQsNC/INC606nRgNGDXCIsXG4gIHRpbWVyTWluOiBcItC80LjQvVwiLFxuICB0aW1lclNlYzogXCLRgdC10LpcIixcbiAgdGltZXJTcGVudEFsbDogXCLQodGW0Lcg0LHSsdC7INCx0LXRgtGC0LUgezB9INC60LXRgtGW0YDQtNGW0qPRltC3INC205nQvdC1INCx0LDRgNC70YvSk9GLIHsxfS5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwi0KHRltC3INCx0rHQuyDQsdC10YLRgtC1IHswfSDQutC10YLRltGA0LTRltKj0ZbQty5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCLQodGW0Lcg0YHQsNGD0LDQu9C90LDQvNCwINC60LXQt9GW0L3QtNC1IHswfSDQutC10YLRltGA0LTRltKj0ZbQty5cIixcbiAgdGltZXJMaW1pdEFsbDogXCLQodGW0Lcg0LHSsdC7INCx0LXRgtGC0LUgezB9INC00LXQvSB7MX0g0LrQtdGC0ZbRgNC00ZbSo9GW0Lcg0LbTmdC90LUgezJ9INC00LXQvSB7M30g0LHSr9C60ZbQuyDRgdCw0YPQsNC70L3QsNC80LAg0q/RiNGW0L0uXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcItCh0ZbQtyDQsdKx0Lsg0LHQtdGC0YLQtSB7MH0g0LTQtdC9IHsxfSDQutC10YLRltGA0LTRltKj0ZbQty5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCLQodGW0Lcg0LHSr9C60ZbQuyDRgdCw0YPQsNC70L3QsNC80LAg0q/RiNGW0L0gezB9INC00LXQvSB7MX0g0LrQtdGC0ZbRgNC00ZbSo9GW0LcgXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCLQotCw0LfQsNC70LDRg1wiLFxuICBjbGVhckNhcHRpb246IFwi0KLQsNC30LDQu9Cw0YNcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwi0KTQsNC50Lsg0YLQsNKj0LTQsNKj0YvQt1wiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCLQpNCw0LnQu9C00Ysg0LbQvtC50YvSo9GL0LdcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCLQmNOZXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCLQltC+0ptcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwi0KHRltC3INCx0rHQuyDRhNCw0LnQu9C00Ysg0LbQvtGP0YLRi9C90YvSo9GL0LfSk9CwINGB0LXQvdGW0LzQtNGW0YHRltC3INCx0LU6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcItCh0ZbQtyDQsdCw0YDQu9GL0psg0YTQsNC50LvQtNCw0YDQtNGLINC20L7Rj9GC0YvQvdGL0qPRi9C30pPQsCDRgdC10L3RltC80LTRltGB0ZbQtyDQsdC1P1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwi0KHSsdGA0LDSm9GC0YvSoyDQsNGC0LDRg9GLXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcImtrXCJdID0ga2F6YWtoU3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImtrXCJdID0gXCJLYXpha2hcIjsiLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGtvcmVhblN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCLsnbTsoIRcIixcbiAgcGFnZU5leHRUZXh0OiBcIuuLpOydjFwiLFxuICBjb21wbGV0ZVRleHQ6IFwi7JmE66OMXCIsXG4gIHByZXZpZXdUZXh0OiBcIuyLnOyCrFwiLFxuICBlZGl0VGV4dDogXCLtjrjsp5HtlZjri6RcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIuyLnOyekVwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIuq4sO2DgCjshKTrqoUpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCLsl4bsnYxcIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwi66qo65GQIOyEoO2DnVwiLFxuICBwcm9ncmVzc1RleHQ6IFwi7Y6Y7J207KeAIHsxfSDspJEgezB9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJ7MH0gLyB7MX0g6riw66GdXCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJ7MH0gLyB7MX0g6rCc7J2YIOyniOusuOyXkCDri7Xrs4Ag7ZWoXCIsXG4gIGVtcHR5U3VydmV5OiBcIuyEpOusuOyngOyXkCDrs7Tsl6zsp4DripQg7Y6Y7J207KeA64KYIOyniOusuOydtCDsl4bsirXri4jri6RcIixcbiAgY29tcGxldGluZ1N1cnZleTogXCLshKTrrLgg7KGw7IKs66W8IOyZhOujjO2VtCDso7zshZTshJwg6rCQ7IKs7ZWp64uI64ukIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOiBcIuq4sOuhneyXkCDrlLDrpbTrqbQg7J2066+4IOyEpOusuCDsobDsgqzrpbwg66eI7LmY7IWo7Iq164uI64ukLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIuyEpOusuOyhsOyCrOqwgCDroZzrk5zspJHsnoXri4jri6QuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwi7ISg7YOd7ZWY7Iut7Iuc7JikLi4uXCIsXG4gIHZhbHVlOiBcIuqwklwiLFxuICByZXF1aXJlZEVycm9yOiBcIuyniOusuOyXkCDri7XtlZjsi5zsmKQuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIu2VmOuCmCDsnbTsg4HsnZgg7KeI66y47JeQIOuLte2VmOyLreyLnOyYpC5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCLrqqjrk6Ag7ZaJ7JeQIOyeiOuKlCDsp4jrrLjsl5Ag64u17ZWY7Iut7Iuc7JikLlwiLFxuICBudW1lcmljRXJyb3I6IFwi6rCS7J2AIOyIq+yekOyXrOyVvCDtlanri4jri6QuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwi64u167OA7J2YIOq4uOydtOuKlCDstZzshowgezB97J6Q7Jes7JW8IOyeheuLiOuLpC5cIixcbiAgdGV4dE1heExlbmd0aDogXCLri7Xrs4DsnZgg6ri47J2064qUIHswfeyekOulvCDstIjqs7wg7ZWgIOyImCDsl4bsirXri4jri6QuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwi64u167OA7J2YIOq4uOydtOuKlCB7MH0gLSB7MX3snpAg7IKs7J207Jes7JW8IO2VqeuLiOuLpC5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCLstZzshowgezB96rCc7J2YIO2WieydhCDssYTsmrDsi63si5zsmKRcIixcbiAgbWluU2VsZWN0RXJyb3I6IFwi7LWc7IaMIHswfeqwnOydmCDrs4DsiJjrpbwg7ISg7YOd7ZWY7Iut7Iuc7JikLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCLstZzrjIAgezB96rCc7J2YIOuzgOyImOulvCDshKDtg53tlZjsi63si5zsmKQuXCIsXG4gIG51bWVyaWNNaW5NYXg6IFwiJ3swfSfsnYAgezF967O064ukIO2BrOqxsOuCmCDqsJnqs6AgezJ967O064ukIOyekeqxsOuCmCDqsJnslYTslbztlanri4jri6QuXCIsXG4gIG51bWVyaWNNaW46IFwiJ3swfSfsnYAgezF967O064ukIO2BrOqxsOuCmCDqsJnslYTslbztlanri4jri6QuXCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfSfsnYAgezF967O064ukIOyekeqxsOuCmCDqsJnslYTslbztlanri4jri6QuXCIsXG4gIGludmFsaWRFbWFpbDogXCLsmKzrsJTrpbgg7J2066mU7J28IOyjvOyGjOulvCDsnoXroKXtlZjsi63si5zsmKQuXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIu2RnO2YhOyLnTogezB97J2AICfssLgn7J207Ja07JW8IO2VqeuLiOuLpC5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIid7MH0n7Jy866GcIOyemOuqu+uQnCDsmpTssq3snoXri4jri6QuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwi67mE7Ja07J6I64qUIOuNsOydtO2EsOulvCDsmpTssq3tlojqsbDrgpgg7J6Y66q765CcIOyGjeyEseydmCDqsr3roZzsnoXri4jri6QuXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwi7YyM7J28IO2BrOq4sOqwgCB7MH3snYQg7LSI6rO8IO2VoCDsiJgg7JeG7Iq164uI64ukLlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwi64uk66W4IOyniOusuOydhCDsnpHshLHtlZjsi63si5zsmKQuXCIsXG4gIHVwbG9hZGluZ0ZpbGU6IFwi7YyM7J28IOyXheuhnOuTnCDspJHsnoXri4jri6QuIOyeoOyLnCDtm4Qg64uk7IucIOyLnOuPhO2VmOyLreyLnOyYpC5cIixcbiAgbG9hZGluZ0ZpbGU6IFwi66Gc65OcIOykkS4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIu2MjOydvCDshKDtg50uLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIuyEoO2DneuQnCDtjIzsnbzsnbQg7JeG7Iq164uI64ukXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwi6riw66Gd7J2EIOyCreygnO2VmOyLnOqyoOyKteuLiOq5jD9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCIg7J20IOqwkuydgCDqs6DsnKDtlbTslbztlanri4jri6QuXCIsXG4gIGFkZENvbHVtbjogXCLsl7Qg7LaU6rCAXCIsXG4gIGFkZFJvdzogXCLtlokg7LaU6rCAXCIsXG4gIHJlbW92ZVJvdzogXCLsoJzqsbBcIixcbiAgYWRkUGFuZWw6IFwi7IOI66Gt6rKMIOy2lOqwgFwiLFxuICByZW1vdmVQYW5lbDogXCLsoJzqsbBcIixcbiAgY2hvaWNlc19JdGVtOiBcIu2VreuqqVwiLFxuICBtYXRyaXhfY29sdW1uOiBcIuyXtFwiLFxuICBtYXRyaXhfcm93OiBcIu2WiVwiLFxuICBzYXZpbmdEYXRhOiBcIuqysOqzvOqwgCDshJzrsoTsl5Ag7KCA7J6lIOykkeyeheuLiOuLpC4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwi7Jik66WY6rCAIOuwnOyDne2VmOyXrCDqsrDqs7zrpbwg7KCA7J6l7ZWgIOyImCDsl4bsirXri4jri6QuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIuqysOqzvOqwgCDshLHqs7XsoIHsnLzroZwg7KCA7J6l65CY7JeI7Iq164uI64ukIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwi64uk7IucIOyLnOuPhO2VmOyLreyLnOyYpFwiLFxuICB0aW1lck1pbjogXCLrtoRcIixcbiAgdGltZXJTZWM6IFwi7LSIXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwi7ZiE7J6sIO2OmOydtOyngOyXkOyEnCB7MH3snYQg7IaM7JqU7ZW0IOy0nSB7MX3snbQg6rG466C47Iq164uI64ukLlwiLFxuICB0aW1lclNwZW50UGFnZTogXCLtmITsnqwg7Y6Y7J207KeA7JeQ7IScIHswXeydtCDqsbjroLjsirXri4jri6RcIixcbiAgdGltZXJTcGVudFN1cnZleTogXCLstJ0gezB97J20IOqxuOuguOyKteuLiOuLpC5cIixcbiAgdGltZXJMaW1pdEFsbDogXCLtmITsnqwg7Y6Y7J207KeA7JeQ7IScIHswfS97MX3snYQg7IaM7JqU7ZW0IOy0nSB7Mn0vezN97J20IOqxuOuguOyKteuLiOuLpC5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwi7ZiE7J6sIO2OmOydtOyngOyXkOyEnCB7MH0vezF97J20IOqxuOuguOyKteuLiOuLpC5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCLstJ0gezB9L3sxfeydtCDqsbjroLjsirXri4jri6QuXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCLri6bquLBcIixcbiAgY2xlYXJDYXB0aW9uOiBcIuyngOyasOq4sFwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCLtjIzsnbzsnYQg7ISg7YOdXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIuydtCDtjIzsnbwg7KCc6rGwXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwi7JiIXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCLslYTri4hcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiezB9IO2MjOydvOydhCDsoJzqsbAg7ZWY7Iuc6rKg7Iq164uI6rmMP1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwi66qo65OgIO2MjOydvOydhCDsoJzqsbAg7ZWY7Iuc6rKg7Iq164uI6rmMP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwi7KeI66y4IOygnOuqqVwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJrb1wiXSA9IGtvcmVhblN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJrb1wiXSA9IFwi7ZWc6rWt7Ja0XCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIGxhdHZpYW5TdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiQXRwYWthxLxcIixcbiAgcGFnZU5leHRUZXh0OiBcIlTEgWzEgWtcIixcbiAgY29tcGxldGVUZXh0OiBcIlBhYmVpZ3RcIixcbiAgcHJldmlld1RleHQ6IFwiUHJpZWvFoXNrYXTEq2p1bXNcIixcbiAgZWRpdFRleHQ6IFwiUmVkacSjxJN0XCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJTxIFrdFwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIkNpdHMgKGzFq2R6dSwgYXByYWtzdGlldCEpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJOYXZcIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiSXp2xJNsxJN0aWVzIHZpc3VzXCIsXG4gIHByb2dyZXNzVGV4dDogXCJMYXBwdXNlIHswfSBubyB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIkllcmFrc3TEq3QgezB9IG5vIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiQXRiaWxkxJNqYSB1eiBqYXV0xIFqdW1pZW0gezB9IC8gezF9XCIsXG4gIGVtcHR5U3VydmV5OiBcIk5hdiBuZXZpZW5hIGphdXTEgWp1bWEuXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiUGF0ZWljYW1pZXMgSnVtcyBwYXIgYW5rZXRhcyBhaXpwaWxkxKvFoWFudSFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcIk3Fq3N1IGllcmFrc3RpIGxpZWNpbmEsIGthIGrFq3MgamF1IGVzYXQgYWl6cGlsZMSramlzIMWhbyBhcHRhdWp1LlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIkllbMSBZGUgbm8gc2VydmVyYS4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJJenbEk2zEk3RpZXMuLi5cIixcbiAgdmFsdWU6IFwidmFsdWVcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJMxatkenUsIGF0YmlsZGlldCB1eiBqYXV0xIFqdW11IVwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJMxatkenUsIGF0YmlsZGlldCB1eiB2aXNtYXogdmllbnUgamF1dMSBanVtdS5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJMxatkenUsIGF0YmlsZGlldCB1eiBqYXV0xIFqdW1pZW0gdmlzxIFzIHJpbmTEgXMuXCIsXG4gIG51bWVyaWNFcnJvcjogXCJBdGJpbGRlaSBpciBqxIFixat0IHNrYWl0bGltLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIkzFq2R6dSwgaWV2YWRpZXQgdmlzbWF6IHswfSBzaW1ib2x1cy5cIixcbiAgdGV4dE1heExlbmd0aDogXCJMxatkenUsIGlldmFkaWV0IG1hesSBayBuZWvEgSB7MH0gcmFrc3R6xKttZXMuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiTMWrZHp1LCBpZXZhZGlldCB2YWlyxIFrIG5la8SBIHswfSByYWtzdHrEq21lcyB1biBtYXrEgWsgbmVrxIEgezF9IHJha3N0esSrbWVzLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIkzFq2R6dSwgYWl6cGlsZGlldCB2aXNtYXogezB9IHJpbmRhcy5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiTMWrZHp1LCBpenbEk2xpZXRpZXMgdmlzbWF6IHswfSB2YXJpYW50dS5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiTMWrZHp1LCBpenbEk2xpZXRpZXMgbmUgdmFpcmFrIHBhciB7MH0gdmFyaWFudGllbS5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIid7MH0nIGrEgWLFq3QgdmllbsSBZGFtIHZhaSBsaWVsxIFrYW0gbmVrxIEgezF9LCB1biB2aWVuxIFkYW0gdmFpIG1hesSBa2FtLCBuZWvEgSB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCInezB9JyBqxIFixat0IHZpZW7EgWRhbSB2YWkgbGllbMSBa2FtIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nIGrEgWLFq3QgdmllbsSBZGFtIHZhaSBsaWVsxIFrYW0gezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCJMxatkenUsIGlldmFkaWV0IHBhdGllc3UgZS1wYXN0YSBhZHJlc2khXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIkl6dGVpY2llbmFtOiB7MH0gasSBYXRncmllxb4g4oCcdHJ1ZeKAnS5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIlBpZXByYXPEq2p1bcSBIHRpa2EgYXRncmllenRhIGvEvMWrZGEg4oCcezB94oCdLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiUGllcHJhc8SranVtcyBhdGdyaWV6YSB0dWvFoXVzIGRhdHVzIHZhaSByZWt2aXrEq3RzIOKAnHBhdGjigJ0gaXIgbmVwYXJlaXpzXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiRmFpbGEgbGllbHVtcyBuZWRyxKtrc3QgcMSBcnNuaWVndCB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJMxatkenUsIGlldmFkaWV0IGRhdHVzIGxhdWvEgSAnQ2l0cydcIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIkrFq3N1IGZhaWxzIHRpZWsgYXVnxaF1cGllbMSBZMSTdHMuIEzFq2R6dSwgdXpnYWlkaWV0IHZhaXLEgWthcyBzZWt1bmRlcyB1biBtxJPEo2luaWV0IHbEk2xyZWl6LlwiLFxuICBsb2FkaW5nRmlsZTogXCJOb3RpZWsgaWVsxIFkZSAuLi5cIixcbiAgY2hvb3NlRmlsZTogXCJJenbEk2xpZXRpZXMgZmFpbHVzIC4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiTmF2IGl6dsSTbMSTdHMgbmV2aWVucyBmYWlsc1wiLFxuICBjb25maXJtRGVsZXRlOiBcIlZhaSB2xJNsYXRpZXMgaXpkesSTc3QgaWVyYWtzdHU/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwixaBhaSB2xJNydMSrYmFpIGrEgWLFq3QgdW5pa8SBbGFpLlwiLFxuICBhZGRDb2x1bW46IFwiUGlldmllbm90IGtvbG9ubnVcIixcbiAgYWRkUm93OiBcIlBpZXZpZW5vdCByaW5kdVwiLFxuICByZW1vdmVSb3c6IFwiTm/FhmVtdFwiLFxuICBhZGRQYW5lbDogXCJQaWV2aWVubyBqYXVudVwiLFxuICByZW1vdmVQYW5lbDogXCJOb8WGZW10XCIsXG4gIGNob2ljZXNfSXRlbTogXCJsaWV0YVwiLFxuICBtYXRyaXhfY29sdW1uOiBcIlNsZWphXCIsXG4gIG1hdHJpeF9yb3c6IFwiUmluZGFcIixcbiAgc2F2aW5nRGF0YTogXCJSZXp1bHTEgXRpIHRpZWsgc2FnbGFixIF0aSBzZXJ2ZXLEqyAuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIlJhZMSBcyBrxLzFq2RhLCB1biBtxJNzIG5ldmFyxJNqxIFtIHNhZ2xhYsSBdCByZXp1bHTEgXR1cy5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiUmV6dWx0xIF0aSB0aWthIHZlaWtzbcSrZ2kgc2FnbGFixIF0aSFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIk3Ek8SjaW5pIHbEk2xyZWl6XCIsXG4gIHRpbWVyTWluOiBcIm1pblwiLFxuICB0aW1lclNlYzogXCJzZWtcIixcbiAgdGltZXJTcGVudEFsbDogXCLFoGFqxIEgbGFwxIEgZXNhdCBpenTEk3LEk2ppcyB7MH0gdW4ga29wxIEgezF9LlwiLFxuICB0aW1lclNwZW50UGFnZTogXCLFoGFqxIEgbGFwxIEgZXNhdCBpenTEk3LEk2ppcyB7MH0uXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiS29wxIEgZXNhdCBpenTEk3LEk2ppcyB7MH0uXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCLFoGFqxIEgbGFwxIEgZXNhdCBpenTEk3LEk2ppcyB7MH0gbm8gezF9IHVuIGtvcMSBIHsyfSBubyB7M30uXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIsWgYWrEgSBsYXDEgSBlc2F0IGl6dMSTcsSTamlzIHswfSBubyB7MX0uXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiS29wxIEgZXNhdCBpenTEk3LEk2ppcyB7MH0gbm8gezF9LlwiLFxuICBjbGVhbkNhcHRpb246IFwiVMSrcnNcIixcbiAgY2xlYXJDYXB0aW9uOiBcIlNrYWlkcnNcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwiSXp2xJNsxJN0aWVzIGZhaWx1XCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIk5vxYZlbWlldCDFoW8gZmFpbHVcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJKxIFcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk7Ek1wiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJWYWkgdGllxaHEgW0gdsSTbGF0aWVzIG5vxYZlbXQgxaFvIGZhaWx1OiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJWYWkgdGllxaHEgW0gdsSTbGF0aWVzIG5vxYZlbXQgdmlzdXMgZmFpbHVzP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiSmF1dMSBanVtYSBub3NhdWt1bXNcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wibHZcIl0gPSBsYXR2aWFuU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImx2XCJdID0gXCJsYXR2aWXFoXVcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgbGl0aHVhbmlhU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIkF0Z2FsXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJUb2xpYXVcIixcbiAgY29tcGxldGVUZXh0OiBcIkJhaWd0aVwiLFxuICBwcmV2aWV3VGV4dDogXCJQZXLFvmnFq3JhXCIsXG4gIGVkaXRUZXh0OiBcIlJlZGFndW90aVwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiUHJhZMSXdGlcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJLaXRhICjEr3Zlc3RpKVwiLFxuICBub25lSXRlbVRleHQ6IFwiTsSXcmFcIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiUGFzaXJpbmt0aSB2aXN1c1wiLFxuICBwcm9ncmVzc1RleHQ6IFwiUHVzbGFwaXMgezB9IGnFoSB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIsSucmHFoXl0aSB7MH0gacWhIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiQXRzYWvElyDEryB7MH0gLyB7MX0ga2xhdXNpbXVzXCIsXG4gIGVtcHR5U3VydmV5OiBcIkFwa2xhdXNvamUgbsSXcmEgbWF0b21vIHB1c2xhcGlvIGFyIGtsYXVzaW1vLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIkTEl2tvamFtZSB1xb4gZGFseXZhdmltxIUgYXBrbGF1c29qZSFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTogXCJNxatzxbMgxK9yYcWhYWkgcm9kbywga2FkIGphdSBhdGxpa290ZSDFoWnEhSBhcGtsYXVzxIUuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiUHJhxaFvbWUgcGFsYXVrdGkuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiUGFzaXJpbmt0aS4uLlwiLFxuICB2YWx1ZTogXCJyZWlrxaFtxJdcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJCxat0aW5hIGF0c2FreXRpIMSvIMWhxK8ga2xhdXNpbcSFLlwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJCxat0aW5hIGF0c2FreXRpIGJlbnQgxK8gdmllbsSFIGtsYXVzaW3EhS5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJQcmHFoW9tZSBhdHNha3l0aSDEryBrbGF1c2ltdXMgdmlzb3NlIGVpbHV0xJdzZS5cIixcbiAgbnVtZXJpY0Vycm9yOiBcIlR1cmkgYsWrdGkgc2thacSNaWFpLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIlByYcWhb21lIHN1dmVzdGkgYmVudCB7MH0gc2ltYm9saXVzLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIlByYcWhb21lIHN1dmVzdGkgbWHFvmlhdSBuZWkgezB9IHNpbWJvbGnFsy5cIixcbiAgdGV4dE1pbk1heExlbmd0aDpcbiAgICBcIlByYcWhb21lIHN1dmVzdGkgZGF1Z2lhdSBuZWkgezB9IGlyIG1hxb5pYXUgbmVpIHsxfSBzaW1ib2xpxbMuXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiUHJhxaFvbWUgc3V2ZXN0aSBuZSBtYcW+aWF1IG5laSB7MH0gZWlsdcSNacWzLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJQcmHFoW9tZSBwYXNpcmlua3RpIGJlbnQgezB9IHZhcmlhbnTFsy5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiUGFzaXJpbmtpdGUgbmUgZGF1Z2lhdSBrYWlwIHswfSB2YXJpYW50dXMuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCInezB9JyB0dXJpIGLFq3RpIGx5Z3VzIGFyYmEgZGlkZXNuaXMgbmVpIHsxfSBpciBseWd1cyBhcmJhIG1hxb5lc25pcyBuZWkgezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiJ3swfScgdHVyxJd0xbMgYsWrdGkgbHlndXMgYXJiYSBkaWRlc25pcyBuZWkgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScgdHVyxJd0xbMgYsWrdGkgbHlndXMgYXIgbWHFvmVzbmlzIHXFviB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIlByYcWhb21lIMSvdmVzdGkgZ2FsaW9qYW50xK8gZWxla3Ryb25pbmlvIHBhxaF0byBhZHJlc8SFLlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCJSZWlrxaFtxJc6IHswfSB0dXJpIGdyxIXFvmludGkgJ3RydWUnLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiVcW+a2xhdXNhIGdyxIXFvmlubyBrbGFpZMSFJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCJVxb5rbGF1c2EgZ3LEhcW+aW5vIHR1xaHEjWl1cyBkdW9tZW5pcyBhcmJhICdwYXRoJyBzYXZ5YsSXIHlyYSBuZXRlaXNpbmdhXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiRmFpbG8gZHlkaXMgbmV0dXJpIHZpcsWheXRpIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIsSudmVza2l0ZSBraXTEhSByZWlrxaFtxJkuXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCJKxatzxbMgZmFpbGFzIHlyYSBrZWxpYW1hcy4gUGFsYXVraXRlIGtlbGV0xIUgc2VrdW5kxb5pxbMgaXIgYmFuZHlraXRlIGRhciBrYXJ0xIUuXCIsXG4gIGxvYWRpbmdGaWxlOiBcIlByYcWhb21lIHBhbGF1a3RpLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiUGFzaXJpbmt0aSBmYWlsxIUodXMpLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJOZXBhc2lyaW5rdGFzIGpva3MgZmFpbGFzXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiQXIgbm9yaXRlIGnFoXRyaW50aSDEr3JhxaHEhT9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCLFoGkgcmVpa8WhbcSXIHR1csSXdMWzIGLFq3RpIHVuaWthbGkuXCIsXG4gIGFkZENvbHVtbjogXCJQcmlkxJd0aSBzdHVscGVsxK9cIixcbiAgYWRkUm93OiBcIlByaWTEl3RpIGVpbHV0xJlcIixcbiAgcmVtb3ZlUm93OiBcIknFoXRyaW50aVwiLFxuICBhZGRQYW5lbDogXCJQcmlkxJd0aSBuYXVqxIVcIixcbiAgcmVtb3ZlUGFuZWw6IFwiScWhdHJpbnRpXCIsXG4gIGNob2ljZXNfSXRlbTogXCJlbGVtZW50YXNcIixcbiAgbWF0cml4X2NvbHVtbjogXCJTdHVscGVsaXNcIixcbiAgbWF0cml4X3JvdzogXCJFaWx1dMSXXCIsXG4gIHNhdmluZ0RhdGE6IFwiUmV6dWx0YXRhaSBzYXVnb21pIHNlcnZlcnlqZS4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwixK52eWtvIGtsYWlkYSBpciBtZXMgbmVnYWzEl2pvbWUgacWhc2F1Z290aSByZXp1bHRhdMWzLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJSZXp1bHRhdGFpIGJ1dm8gacWhc2F1Z290aSBzxJdrbWluZ2FpIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiQmFuZHl0aSBkYXIga2FydMSFXCIsXG4gIHRpbWVyTWluOiBcIm1pblwiLFxuICB0aW1lclNlYzogXCJzZWtcIixcbiAgdGltZXJTcGVudEFsbDogXCJQcmFsZWlkb3RlIHswfSDFoWlhbWUgcHVzbGFweWplIGlyIHsxfSBpxaEgdmlzby5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwiUHJhbGVpZG90ZSB7MH0gxaFpYW1lIHB1c2xhcHlqZS5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJQcmFsZWlkb3RlIHswfSBpxaEgdmlzby5cIixcbiAgdGltZXJMaW1pdEFsbDogXCJQcmFsZWlkb3RlIHswfSBpxaEgezF9IMWhaWFtZSBwdXNsYXB5amUgaXIgezJ9IGnFoSB7M30gacWhIHZpc28uXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIlByYWxlaWRvdGUgezB9IGnFoSB7MX0gxaFpYW1lIHB1c2xhcHlqZS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJQcmFsZWlkb3RlIHswfSBpxaEgezF9IGnFoSB2aXNvLlwiLFxuICBjbGVhbkNhcHRpb246IFwiScWhdmFseXRpXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJWYWx5dGlcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwiUGFzaXJpbmt0aSBmYWlsxIVcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiScWhdHJpbnRpIMWhxK8gZmFpbMSFXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiVGFpcFwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiTmVcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiQXIgdGlrcmFpIG5vcml0ZSBwYcWhYWxpbnRpIMWhxK8gZmFpbMSFOiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJBciB0aWtyYWkgbm9yaXRlIHBhxaFhbGludGkgdmlzdXMgZmFpbHVzP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiS2xhdXNpbW8gcGF2YWRpbmltYXNcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wibHRcIl0gPSBsaXRodWFuaWFTdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wibHRcIl0gPSBcImxpZXR1dmnFs1wiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBtYWNlZG9uaWFuU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcItCf0YDQtdGC0YXQvtC00L3QsFwiLFxuICBwYWdlTmV4dFRleHQ6IFwi0KHQu9C10LTQvdC+XCIsXG4gIGNvbXBsZXRlVGV4dDogXCLQl9Cw0LLRgNGI0LhcIixcbiAgcHJldmlld1RleHQ6IFwi0J/RgNC10LPQu9C10LRcIixcbiAgZWRpdFRleHQ6IFwi0KPRgNC10LTRg9Cy0LDRmtC1XCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCLQl9Cw0L/QvtGH0L3QtdGC0LVcIixcbiAgb3RoZXJJdGVtVGV4dDogXCLQlNGA0YPQs9C+ICjQvtC/0LjRiNC4KVwiLFxuICBub25lSXRlbVRleHQ6IFwi0J3QuNGI0YLQvlwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCLQodC10LvQtdC60YLQuNGA0LDRmCDRgdC1XCIsXG4gIHByb2dyZXNzVGV4dDogXCLQodGC0YDQsNC90LjRhtCwIHswfSDQvtC0IHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwi0KHQvdC40LzQuCB7MH0g0L7QtCB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcItCe0LTQs9C+0LLQvtGA0LXQvdC4INC90LAgezB9IC8gezF9INC/0YDQsNGI0LDRmtCwXCIsXG4gIGVtcHR5U3VydmV5OiBcItCd0LXQvNCwINCy0LjQtNC70LjQstCwINGB0YLRgNCw0L3QuNGG0LAg0LjQu9C4INC/0YDQsNGI0LDRmtC1INCy0L4g0LjRgdGC0YDQsNC20YPQstCw0ZrQtdGC0L4uXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwi0JLQuCDQsdC70LDQs9C+0LTQsNGA0LjQvNC1INGI0YLQviDQs9C+INC30LDQstGA0YjQuNCy0YLQtSDQuNGB0YLRgNCw0LbRg9Cy0LDRmtC10YLQviFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcItCd0LDRiNC40YLQtSDQt9Cw0L/QuNGB0Lgg0L/QvtC60LDQttGD0LLQsNCw0YIg0LTQtdC60LAg0LLQtdGc0LUg0YHRgtC1INCz0L4g0LfQsNCy0YDRiNC40LvQtSDQvtCy0LAg0LjRgdGC0YDQsNC20YPQstCw0ZrQtS5cIixcbiAgbG9hZGluZ1N1cnZleTogXCLQkNC90LrQtdGC0LDRgtCwINGB0LUg0LLRh9C40YLRg9Cy0LAgLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcItCY0LfQsdC10YDQtdGC0LUgLi4uXCIsXG4gIHZhbHVlOiBcItCy0YDQtdC00L3QvtGB0YJcIixcbiAgcmVxdWlyZWRFcnJvcjogXCLQktC1INC80L7Qu9Cw0LwsINC+0LTQs9C+0LLQvtGA0LXRgtC1INC90LAg0L/RgNCw0YjQsNGa0LXRgtC+LlwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCLQktC1INC80L7Qu9Cw0LwsINC+0LTQs9C+0LLQvtGA0LXRgtC1INCx0LDRgNC10Lwg0L3QsCDQtdC00L3QviDQv9GA0LDRiNCw0ZrQtS5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCLQktC1INC80L7Qu9C40LzQtSwg0L7QtNCz0L7QstC+0YDQtdGC0LUg0L3QsCDQv9GA0LDRiNCw0ZrQsCDQstC+INGB0LjRgtC1INGA0LXQtNC+0LLQuC5cIixcbiAgbnVtZXJpY0Vycm9yOiBcItCS0YDQtdC00L3QvtGB0YLQsCDRgtGA0LXQsdCwINC00LAg0LHQuNC00LUg0L3Rg9C80LXRgNC40YfQutCwLlwiLFxuICBtaW5FcnJvcjogXCLQktGA0LXQtNC90L7RgdGC0LAg0L3QtSDRgtGA0LXQsdCwINC00LAg0LHQuNC00LUg0L/QvtC80LDQu9CwINC+0LQgezB9XCIsXG4gIG1heEVycm9yOiBcItCS0YDQtdC00L3QvtGB0YLQsCDQvdC1INGC0YDQtdCx0LAg0LTQsCDQsdC40LTQtSDQv9C+0LPQvtC70LXQvNCwINC+0LQgezB9XCIsXG4gIHRleHRNaW5MZW5ndGg6IFwi0JLQvdC10YHQtdGC0LUg0L3QsNGY0LzQsNC70LrRgyB7MH0g0LfQvdCw0Lov0YbQuC5cIixcbiAgdGV4dE1heExlbmd0aDogXCLQktC90LXRgdC10YLQtSDQvdC1INC/0L7QstC10ZzQtSDQvtC0IHswfSDQt9C90LDQui/RhtC4LlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcItCS0L3QtdGB0LXRgtC1INC90LDRmNC80LDQu9C60YMgezB9INC4INC90LUg0L/QvtCy0LXRnNC1INC+0LQgezF9INC30L3QsNGG0LguXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwi0J/QvtC/0L7Qu9C90LXRgtC1INC90LDRmNC80LDQu9C60YMgezB9INGA0LXQtCjQvtCy0LgpLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCLQktC1INC80L7Qu9C40LzQtSDQuNC30LHQtdGA0LXRgtC1INC90LDRmNC80LDQu9C60YMgezB9INCy0LDRgNC40ZjQsNC90YLQsCjQuCkuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcItCY0LfQsdC10YDQtdGC0LUg0L3QtSDQv9C+0LLQtdGc0LUg0L7QtCB7MH0g0LLQsNGA0LjRmNCw0L3RgtCwKNC4KS5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIid7MH0nINGC0YDQtdCx0LAg0LTQsCDQsdC40LTQtSDQvdCw0ZjQvNCw0LvQutGDIHsxfSDQuCDQvdCw0ZjQvNC90L7Qs9GDIHsyfVwiLFxuICBudW1lcmljTWluOiBcIid7MH0nINGC0YDQtdCx0LAg0LTQsCDQsdC40LTQtSDQvdCw0ZjQvNCw0LvQutGDIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nINGC0YDQtdCx0LAg0LTQsCDQsdC40LTQtSDQvdCw0ZjQvNC90L7Qs9GDIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwi0JLQtSDQvNC+0LvQuNC80LUg0LLQvdC10YHQtdGC0LUg0LLQsNC70LjQtNC90LAg0LUt0LzQsNC40Lsg0LDQtNGA0LXRgdCwLlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCLQmNC30YDQsNC30L7RgjogezB9INGC0YDQtdCx0LAg0LTQsCDRgdC1INCy0YDQsNGC0LggJ3RydWUnLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwi0JHQsNGA0LDRmtC10YLQviDQstGA0LDRgtC4INCz0YDQtdGI0LrQsCAnezB9Jy4gezF9IFwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCLQkdCw0YDQsNGa0LXRgtC+INCy0YDQsNGC0Lgg0L/RgNCw0LfQvdC4INC/0L7QtNCw0YLQvtGG0Lgg0LjQu9C4INGB0LLQvtGY0YHRgtCy0L7RgtC+ICdwYXRoJyDQtSDQvdC10YLQvtGH0L3QvlwiLFxuICBleGNlZWRNYXhTaXplOiBcItCT0L7Qu9C10LzQuNC90LDRgtCwINC90LAg0LTQsNGC0L7RgtC10LrQsNGC0LAg0L3QtSDRgtGA0LXQsdCwINC00LAg0L3QsNC00LzQuNC90YPQstCwIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcItCS0L3QtdGB0LXRgtC1INGY0LAg0LTRgNGD0LPQsNGC0LAg0LLRgNC10LTQvdC+0YHRgi5cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcItCS0LDRiNCw0YLQsCDQtNCw0YLQvtGC0LXQutCwINGB0LUg0L/QvtGB0YLQsNCy0YPQstCwLiDQktC1INC80L7Qu9C40LzQtSDQv9C+0YfQtdC60LDRmNGC0LUg0L3QtdC60L7Qu9C60YMg0YHQtdC60YPQvdC00Lgg0Lgg0L7QsdC40LTQtdGC0LUg0YHQtSDQv9C+0LLRgtC+0YDQvdC+LlwiLFxuICBsb2FkaW5nRmlsZTogXCLQodC1INCy0YfQuNGC0YPQstCwIC4uLlwiLFxuICBjaG9vc2VGaWxlOiBcItCY0LfQsdC10YDQtdGC0LUg0LTQsNGC0L7RgtC10LrQsCAo0LgpIC4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwi0J3QtSDRgdC1INC40LfQsdGA0LDQvdC4INC00LDRgtC+0YLQtdC60LhcIixcbiAgY29uZmlybURlbGV0ZTogXCLQlNCw0LvQuCDRgdCw0LrQsNGC0LUg0LTQsCDQs9C+INC40LfQsdGA0LjRiNC10YLQtSDQt9Cw0L/QuNGB0L7Rgj9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCLQntCy0LDQsCDQstGA0LXQtNC90L7RgdGCINGC0YDQtdCx0LAg0LTQsCDQsdC40LTQtSDQtdC00LjQvdGB0YLQstC10L3QsC5cIixcbiAgYWRkQ29sdW1uOiBcItCU0L7QtNCw0Zgg0LrQvtC70L7QvdCwXCIsXG4gIGFkZFJvdzogXCLQlNC+0LTQsNC00Lgg0YDQtdC0XCIsXG4gIHJlbW92ZVJvdzogXCLQntGC0YHRgtGA0LDQvdC4XCIsXG4gIGVtcHR5Um93c1RleHQ6IFwi0J3QtdC80LAg0YDQtdC00L7QstC4LlwiLFxuICBhZGRQYW5lbDogXCLQlNC+0LTQsNC00Lgg0L3QvtCy0L5cIixcbiAgcmVtb3ZlUGFuZWw6IFwi0J7RgtGB0YLRgNCw0L3QuFwiLFxuICBjaG9pY2VzX0l0ZW06IFwi0YHRgtCw0LLQutCwXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwi0JrQvtC70L7QvdCwXCIsXG4gIG1hdHJpeF9yb3c6IFwi0KDQtdC0XCIsXG4gIHNhdmluZ0RhdGE6IFwi0KDQtdC30YPQu9GC0LDRgtC40YLQtSDRgdC1INC30LDRh9GD0LLRg9Cy0LDQsNGCINC90LAg0YHQtdGA0LLQtdGA0L7RgiAuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcItCd0LDRgdGC0LDQvdCwINCz0YDQtdGI0LrQsCDQuCDQvdC1INC80L7QttC10LLQvNC1INC00LAg0LPQuCDQt9Cw0YfRg9Cy0LDQvNC1INGA0LXQt9GD0LvRgtCw0YLQuNGC0LUuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcItCg0LXQt9GD0LvRgtCw0YLQuNGC0LUg0LHQtdCwINGD0YHQv9C10YjQvdC+INC30LDRh9GD0LLQsNC90LghXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCLQntCx0LjQtNC4INGB0LUg0L/QvtCy0YLQvtGA0L3QvlwiLFxuICB0aW1lck1pbjogXCLQvNC40L1cIixcbiAgdGltZXJTZWM6IFwi0YHQtdC6XCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwi0J/QvtC80LjQvdCw0LLRgtC1IHswfSDQvdCwINC+0LLQsNCwINGB0YLRgNCw0L3QuNGG0LAg0Lgg0LLQutGD0L/QvdC+IHsxfS5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwi0J/QvtC80LjQvdCw0LLRgtC1IHswfSDQvdCwINC+0LLQsNCwINGB0YLRgNCw0L3QuNGG0LAuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwi0JLQuNC1INC/0L7RgtGA0L7RiNC40LLRgtC1INCy0LrRg9C/0L3QviB7MH0uXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCLQn9C+0LzQuNC90LDQstGC0LUgezB9INC+0LQgezF9INC90LAg0L7QstCw0LAg0YHRgtGA0LDQvdC40YbQsCDQuCB7Mn0g0L7QtCB7M30g0LLQutGD0L/QvdC+LlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCLQn9C+0LzQuNC90LDQstGC0LUgezB9INC+0LQgezF9INC90LAg0L7QstCw0LAg0YHRgtGA0LDQvdC40YbQsC5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCLQktC40LUg0L/QvtGC0YDQvtGI0LjQstGC0LUg0LLQutGD0L/QvdC+IHswfSDQvtC0IHsxfS5cIixcbiAgY2xlYW5DYXB0aW9uOiBcItCn0LjRgdGC0LhcIixcbiAgY2xlYXJDYXB0aW9uOiBcItCU0LAg0YDQsNGB0YfQuNGB0YLQuFwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCLQmNC30LHQtdGA0LXRgtC1INC00LDRgtC+0YLQtdC60LBcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwi0J7RgtGB0YLRgNCw0L3QtdGC0LUg0ZjQsCDQvtCy0LDQsCDQtNCw0YLQvtGC0LXQutCwXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwi0JTQsFwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwi0J3QtVwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCLQlNCw0LvQuCDRgdGC0LUg0YHQuNCz0YPRgNC90Lgg0LTQtdC60LAg0YHQsNC60LDRgtC1INC00LAg0ZjQsCDQvtGC0YHRgtGA0LDQvdC40YLQtSDQvtCy0LDQsCDQtNCw0YLQvtGC0LXQutCwOiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCLQlNCw0LvQuCDRgdGC0LUg0YHQuNCz0YPRgNC90Lgg0LTQtdC60LAg0YHQsNC60LDRgtC1INC00LAg0LPQuCDQvtGC0YHRgtGA0LDQvdC40YLQtSDRgdC40YLQtSDQtNCw0YLQvtGC0LXQutC4P1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwi0J3QsNGB0LvQvtCyINC90LAg0L/RgNCw0YjQsNGa0LXRgtC+XCIsXG4gIG1vZGFsQ2FuY2VsQnV0dG9uVGV4dDogXCLQntGC0LrQsNC20LhcIixcbiAgbW9kYWxBcHBseUJ1dHRvblRleHQ6IFwi0JDQv9C70LjRhtC40YDQsNGYXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcIm1rXCJdID0gbWFjZWRvbmlhblN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJta1wiXSA9IFwi0JzQsNC60LXQtNC+0L3RgdC60LhcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgbm9yd2VnaWFuU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIkZvcnJpZ2VcIixcbiAgcGFnZU5leHRUZXh0OiBcIk5lc3RlXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJGdWxsZsO4clwiLFxuICBwcmV2aWV3VGV4dDogXCJGb3Jow6VuZHN2aXNuaW5nXCIsXG4gIGVkaXRUZXh0OiBcIlJlZGlnZXJlXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJTdGFydFwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIkFubmV0IChiZXNrcml2KVwiLFxuICBub25lSXRlbVRleHQ6IFwiSW5nZW5cIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiVmVsZyBhbGxlXCIsXG4gIHByb2dyZXNzVGV4dDogXCJTaWRlIHswfSBhdiB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIlRhIG9wcCB7MH0gYXYgezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJCZXN2YXJ0ZSB7MH0gLyB7MX0gc3DDuHJzbcOlbFwiLFxuICBlbXB0eVN1cnZleTogXCJEZXQgZXIgaW5nZW4gc3lubGlnIHNpZGUgZWxsZXIgc3DDuHJzbcOlbCBpIHVuZGVyc8O4a2Vsc2VuLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIlRha2sgZm9yIGF0IGR1IGZ1bGxmw7hydGUgdW5kZXJzw7hrZWxzZW4hXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCJWw6VyZSBkYXRhIHZpc2VyIGF0IGR1IGFsbGVyZWRlIGhhciBnamVubm9tZsO4cnQgZGVubmUgdW5kZXJzw7hrZWxzZW4uXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiVW5kZXJzw7hrZWxzZW4gbGFzdGVyLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIlZlbGcuLi5cIixcbiAgdmFsdWU6IFwidmVyZGlcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJWZW5ubGlnc3Qgc3ZhciBww6Ugc3DDuHJzbcOlbGV0LlwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJWZW5ubGlnc3Qgc3ZhciBww6UgbWluc3QgZXR0IHNww7hyc23DpWwuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiVmVubmxpZ3N0IHN2YXIgcMOlIHNww7hyc23DpWwgaSBhbGxlIHJhZGVyLlwiLFxuICBudW1lcmljRXJyb3I6IFwiVmVyZGllbiBza2FsIHbDpnJlIG51bWVyaXNrLlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIlZlbm5saWdzdCBza3JpdiBpbm4gbWluc3QgezB9IHRlZ24uXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiVmVubmxpZ3N0IHNrcml2IGlubiBtaW5kcmUgZW5uIHswfSB0ZWduLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIlZlbm5saWdzdCBza3JpdiBpbm4gbWVyIGVubiB7MH0gb2cgbWluZHJlIGVubiB7MX0gdGVnbi5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJWZW5ubGlnc3QgZnlsbCBpbm4gbWluc3QgezB9IHJhZGVyLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJWZW5ubGlnc3QgdmVsZyBtaW5zdCB7MH0gdmFyaWFudGVyLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJWZW5ubGlnc3QgaWtrZSB2ZWxnIG1lciBlbm4gezB9IHZhcmlhbnRlci5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIid7MH0nIGLDuHIgdsOmcmUgbGlrIGVsbGVyIG1lciBlbm4gezF9IG9nIGxpayBlbGxlciBtaW5kcmUgZW5uIHsyfVwiLFxuICBudW1lcmljTWluOiBcIid7MH0nIGLDuHIgdsOmcmUgbGlrIGVsbGVyIG1lciBlbm4gezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScgYsO4ciB2w6ZyZSBsaWsgZWxsZXIgbWluZHJlIGVubiB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIlZlbm5saWdzdCBza3JpdiBpbm4gZW4gZ3lsZGlnIGUtcG9zdCBhZHJlc3NlLlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCJVdHRyeWtrZXQ6IHswfSBza2FsIHJldHVybmVyZSAnc2FudCcuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJGb3Jlc3DDuHJzZWxlbiByZXR1cm5lcnRlIGZlaWxlbiAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIkZvcmVzcMO4cnNlbGVuIHJldHVybmVydGUgdG9tbWUgZGF0YSwgZWxsZXIgJ3N0aScgLWVnZW5za2FwZW4gZXIgZmVpbFwiLFxuICBleGNlZWRNYXhTaXplOiBcIkZpbHN0w7hycmVsc2VuIGLDuHIgaWtrZSBvdmVyc3RpZ2UgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiVmVubmxpZ3N0IHNrcml2IGlubiBkZW4gYW5kcmUgdmVyZGllbi5cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIkZpbGVuIGRpbiBsYXN0ZXMgb3BwLiBWZW5ubGlnc3QgdmVudCBub2VuIHNla3VuZGVyIG9nIHByw7h2IGlnamVuLlwiLFxuICBsb2FkaW5nRmlsZTogXCJMYXN0ZXIgaW5uIC4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIlZlbGcgZmlsIChlcikgLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJJbmdlbiBmaWwgdmFsZ3RcIixcbiAgY29uZmlybURlbGV0ZTogXCLDmG5za2VyIGR1IMOlIHNsZXR0ZSBwb3N0ZW4/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiRGVubmUgdmVyZGllbiBza2FsIHbDpnJlIHVuaWsuXCIsXG4gIGFkZENvbHVtbjogXCJMZWdnIHRpbCBrb2xvbm5lXCIsXG4gIGFkZFJvdzogXCJMZWdnIHRpbCByYWRcIixcbiAgcmVtb3ZlUm93OiBcIkZqZXJuXCIsXG4gIGFkZFBhbmVsOiBcIkxlZ2cgdGlsIG55XCIsXG4gIHJlbW92ZVBhbmVsOiBcIkZqZXJuZVwiLFxuICBjaG9pY2VzX0l0ZW06IFwiZWxlbWVudFwiLFxuICBtYXRyaXhfY29sdW1uOiBcIktvbG9ubmVcIixcbiAgbWF0cml4X3JvdzogXCJSYWRcIixcbiAgc2F2aW5nRGF0YTogXCJSZXN1bHRhdGVuZSBsYWdyZXMgcMOlIHNlcnZlcmVuIC4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiRGV0IG9wcHN0byBlbiBmZWlsLCBvZyB2aSBrdW5uZSBpa2tlIGxhZ3JlIHJlc3VsdGF0ZW5lLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJSZXN1bHRhdGVuZSBibGUgbGFncmV0IVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiUHLDuHYgaWdqZW5cIixcbiAgdGltZXJNaW46IFwibWluXCIsXG4gIHRpbWVyU2VjOiBcInNla1wiLFxuICB0aW1lclNwZW50QWxsOiBcIkR1IGhhciB0aWxicmFrdCB7MH0gcMOlIGRlbm5lIHNpZGVuIG9nIHsxfSB0b3RhbHQuXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIkR1IGhhciB0aWxicmFrdCB7MH0gcMOlIGRlbm5lIHNpZGVuLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIkR1IGhhciB0aWxicmFrdCB7MH0gdG90YWx0LlwiLFxuICB0aW1lckxpbWl0QWxsOlxuICAgIFwiRHUgaGFyIHRpbGJyYWt0IHswfSBhdiB7MX0gcMOlIGRlbm5lIHNpZGVuIG9nIHRvdGFsdCB7Mn0gYXYgezN9LlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJEdSBoYXIgdGlsYnJha3QgezB9IGF2IHsxfSBww6UgZGVubmUgc2lkZW4uXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiRHUgaGFyIHRpbGJyYWt0IHswfSBhdiB7MX0gdG90YWx0LlwiLFxuICBjbGVhbkNhcHRpb246IFwiUmVuc1wiLFxuICBjbGVhckNhcHRpb246IFwiS2xhclwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJWZWxnIEZpbFwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCJGamVybiBkZW5uZSBmaWxlblwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIkphXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOZWlcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiRXIgZHUgc2lra2VyIHDDpSBhdCBkdSB2aWwgZmplcm5lIGRlbm5lIGZpbGVuOiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJFciBkdSBzaWtrZXIgcMOlIGF0IGR1IHZpbCBmamVybmUgYWxsZSBmaWxlbmU/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJTcMO4cnNtw6Vsc3RpdHRlbFwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJub1wiXSA9IG5vcndlZ2lhblN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJub1wiXSA9IFwibm9yc2tcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgcGVyc2lhblN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCLZgtio2YTbjFwiLFxuICBwYWdlTmV4dFRleHQ6IFwi2KjYudiv24xcIixcbiAgY29tcGxldGVUZXh0OiBcItiq2qnZhduM2YRcIixcbiAgcHJldmlld1RleHQ6IFwi2b7bjNi0INmG2YXYp9uM2LRcIixcbiAgZWRpdFRleHQ6IFwi2YjbjNix2KfbjNi0XCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCLYtNix2YjYuVwiLFxuICBvdGhlckl0ZW1UZXh0OiBcItiv24zar9ixKNiq2YjYttuM2K0pXCIsXG4gIG5vbmVJdGVtVGV4dDogXCLZh9uM2oZcIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwi2KfZhtiq2K7Yp9ioINmH2YXZh1wiLFxuICBwcm9ncmVzc1RleHQ6IFwi2LXZgdit2YcgezB9INin2LIgezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCLZhdmI2LHYryB7MH0g2KfYsiB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcItiq2LnYr9in2K8g2b7Yp9iz2K4gezB9L3sxfSDYs9mI2KfZhFwiLFxuICBlbXB0eVN1cnZleTogXCLYtdmB2K3ZhyDYp9uMINuM2Kcg2q/YstuM2YbZhyDYp9uMINio2LHYp9uMINin24zZhiDZvtix2LPYtNmG2KfZhdmHINmF2YjYrNmI2K8g2YbbjNiz2KouXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwi2KfYsiDYtNmF2Kcg2KjYp9io2Kog2KraqdmF24zZhCDYp9uM2YYg2b7Ysdiz2LTZhtin2YXZhyDZhdiq2LTaqdix24zZhVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwi2KjZhyDZhti42LEg2YXbjCDYsdiz2K8g2YfZhSDZh9mFINin2qnZhtmI2YYg2b7Ysdiz2LTZhtin2YXZhyDYsdinINiq2qnZhduM2YQg2qnYsdiv2Ycg2KfbjNivLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcItiv2LHYrdin2YQg2KfbjNis2KfYryDZvtix2LPYtNmG2KfZhdmHXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcItin2YbYqtiu2KfYqCDaqdmG24zYry4uLlwiLFxuICB2YWx1ZTogXCLZhdmC2K/Yp9ixXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwi2YTYt9mB2Kcg2KjZhyDYs9mI2KfZhCDZvtin2LPYriDYr9mH24zYr1wiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCLZhNi32YHYpyDYrdiv2KfZgtmEINio2Ycg24zaqSDYs9mI2KfZhCDZvtin2LPYriDYr9mH24zYry5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCLZhNi32YHYpyDYs9mI2KfZhNin2Kog2KrZhdin2YUg2LPYt9ix2YfYpyDYsdinINm+2KfYs9iuINiv2YfbjNivLlwiLFxuICBudW1lcmljRXJyb3I6IFwi2YXZgtiv2KfYsSDYqNin24zYryDYudiv2K/bjCDYqNin2LTYr1wiLFxuICB0ZXh0TWluTGVuZ3RoOiBcItmE2LfZgdinINit2K/Yp9mC2YQgIHswfSDYrdix2YEg2YjYp9ix2K8g2qnZhtuM2K9cIixcbiAgdGV4dE1heExlbmd0aDogXCLZhNi32YHYpyDaqdmF2KrYsSDYp9iyICB7MH0g2K3YsdmBINmI2KfYsdivINqp2YbbjNivLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcItmE2LfZgdinINio24zYtNiq2LEg2KfYsiAgezB9INit2LHZgSDZiCDaqdmF2KrYsSDYp9iyIHsxfSDYrdix2YEg2YjYp9ix2K8g2qnZhtuM2K8uXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwi2YTYt9mB2Kcg2K3Yr9in2YLZhCB7MH0g2LPYt9ixINmI2KfYsdivINqp2YbbjNivLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCLYrdiv2KfZgtmEIHswfSDYp9mG2KrYrtin2Kgg2qnZhtuM2K8uXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcItmE2LfZgdinINio24zYtNiq2LEg2KfYsiAgezB9INin2YbYqtiu2KfYqCDaqdmG24zYry5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgIFwiJ3swfScg2KjYp9uM2K8g2KjbjNmGIHsxfSDZiCB7Mn0g2KjYp9i02K9cIixcbiAgbnVtZXJpY01pbjogXCInezB9JyDYqNiy2LHar9iq2LEg2YXYs9in2YjbjCB7MX0g2KjYp9i02K9cIixcbiAgbnVtZXJpY01heDogXCInezB9JyDYqNin24zYryDaqdmI2obaqdiq2LEg24zYpyDZhdiz2KfZiNuMIHsxfSDYqNin2LTYr1wiLFxuICBpbnZhbGlkRW1haWw6IFwi2YTYt9mB2Kcg2KfbjNmF24zZhCDYtdit24zYrSDYr9ix2Kwg2qnZhtuM2K9cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwi2LnYqNin2LHYqjogezB9INm+2KfYs9iuINio2KfbjNivICd0cnVlJyDYqNin2LTYry5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcItiv2LHYrtmI2KfYs9iqINio2Kcg2K7Yt9inINix2YjYqNix2Ygg2LTYrzogJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICBcItiv2LHYrtmI2KfYs9iqINmF2LPbjNix24wg2K7Yp9mE24wg2KjYp9iy2q/YtNiqINiv2KfYr9mHINuM2Kcg2YXYs9uM2LEg2K/Ysdiz2Kog2KrZhti424zZhSDZhti02K/Zh1wiLFxuICBleGNlZWRNYXhTaXplOiBcItio24zYtNiq2LHbjNmGINit2KzZhSDZhdis2KfYsiDZgdin24zZhDogezB9XCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCLZhdmC2K/Yp9ixICfYr9uM2q/YsScg2LHYpyDZiNin2LHYryDaqdmG24zYr1wiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgXCLZgdin24zZhCDYr9ixINit2KfZhCDYotuM2YTZiNivINin2LPYqi4g2YTYt9mB2Kcg2LXYqNixINqp2YbbjNivLlwiLFxuICBsb2FkaW5nRmlsZTogXCLYqNin2LHar9uM2LHbjC4uLlwiLFxuICBjaG9vc2VGaWxlOiBcItin2YbYqtiu2KfYqCDZgdin24zZhCjZh9inKS4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwi2YfbjNqGINmB2KfbjNmE24wg2KfZhtiq2K7Yp9ioINmG2LTYr9mHXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwi2KLbjNinINmF2KfbjNmEINio2Ycg2K3YsNmBINin24zZhiDYsdiv24zZgSDZh9iz2KrbjNiv2J9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCLYp9uM2YYg2YXZgtiv2KfYsSDYqNin24zYryDYutuM2LEg2Kraqdix2KfYsduMINio2KfYtNivXCIsXG4gIGFkZENvbHVtbjogXCLYs9iq2YjZhiDYrNiv24zYr1wiLFxuICBhZGRSb3c6IFwi2LPYt9ixINis2K/bjNivXCIsXG4gIHJlbW92ZVJvdzogXCLYrdiw2YFcIixcbiAgYWRkUGFuZWw6IFwi2KzYr9uM2K9cIixcbiAgcmVtb3ZlUGFuZWw6IFwi2K3YsNmBXCIsXG4gIGNob2ljZXNfSXRlbTogXCLYotuM2KrZhVwiLFxuICBtYXRyaXhfY29sdW1uOiBcItiz2KrZiNmGXCIsXG4gIG1hdHJpeF9yb3c6IFwi2LPYt9ixXCIsXG4gIHNhdmluZ0RhdGE6IFwi2YbYqtin24zYrCDYr9ixINit2KfZhCDYsNiu24zYsdmHINiz2KfYstuMINiv2LEg2LPYsdmI2LEg2KfYs9iqXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCLYrti32KfbjNuMINiv2LEg2LDYrtuM2LHZhyDYs9in2LLbjCDZhtiq2KfbjNisINix2K4g2K/Yp9iv2Ycg2KfYs9iqXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcItmG2KrYp9uM2Kwg2KjYpyDZhdmI2YHZgtuM2Kog2LDYrtuM2LHZhyDYtNivXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCLZhdis2K/YryDYqtmE2KfYtCDaqdmG24zYr1wiLFxuICB0aW1lck1pbjogXCLYr9mC24zZgtmHXCIsXG4gIHRpbWVyU2VjOiBcItir2KfZhtuM2YdcIixcbiAgdGltZXJTcGVudEFsbDogXCLYtNmF2Kcg2YXYr9iqIHswfSDYr9ixINin24zZhiDYtdmB2K3ZhyDZiCDZhdiv2KogezF9INix2Kcg2K/YsSDZhdis2YXZiNi5INiz2b7YsduMINqp2LHYr9mHINin24zYry5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwi2LTZhdinINmF2K/YqiB7MH0g2LHYpyDYr9ixINin24zZhiDYtdmB2K3ZhyDYs9m+2LHbjCDaqdix2K/ZhyDYp9uM2K8uXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwi2LTZhdinINmF2K/YqiB7MH0g2LHYpyDYr9ixINmF2KzZhdmI2Lkg2LPZvtix24wg2qnYsdiv2Ycg2KfbjNivLlwiLFxuICB0aW1lckxpbWl0QWxsOlxuICAgIFwi2LTZhdinINmF2K/YqiB7MH0g2KfYsiB7MX0g2K/YsSDYp9uM2YYg2LXZgdit2Ycg2Ygg2YXYr9iqIHsyfSDYp9iyIHszfSDYsdinINiv2LEg2YXYrNmF2YjYuSDYs9m+2LHbjCDaqdix2K/ZhyDYp9uM2K8uXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIti02YXYpyDZhdiv2KogezB9INin2LIgezF9INix2Kcg2K/YsSDYp9uM2YYg2LXZgdit2Ycg2LPZvtix24wg2qnYsdiv2Ycg2KfbjNivLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIti02YXYpyDZhdiv2KogezB9INin2LIgezF9INix2Kcg2K/YsSDZhdis2YXZiNi5INiz2b7YsduMINqp2LHYr9mHINin24zYry5cIixcbiAgY2xlYW5DYXB0aW9uOiBcItm+2Kfaqdiz2KfYstuMXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCLYrtin2YTbjCDaqdix2K/ZhlwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCLYp9mG2KrYrtin2Kgg2YHYp9uM2YRcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwi2K3YsNmBINin24zZhiDZgdin24zZhFwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcItio2YTZh1wiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwi2K7bjNixXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcItii24zYpyDZhduM2K7ZiNin2YfbjNivINin24zZhiDZgdin24zZhCDYsdinINm+2KfaqSDaqdmG24zYrzogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwi2KLbjNinINmF24zYrtmI2KfZh9uM2K8g2KrZhdin2YUg2YHYp9uM2YQg2YfYpyDYsdinINm+2KfaqSDaqdmG24zYrz9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIti52YbZiNin2YYg2LPZiNin2YRcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiZmFcIl0gPSBwZXJzaWFuU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImZhXCJdID0gXCLZgdin2LHZktiz2ZDZiVwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBwb2xpc2hTdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiV3N0ZWN6XCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJEYWxlalwiLFxuICBjb21wbGV0ZVRleHQ6IFwiR290b3dlXCIsXG4gIHByZXZpZXdUZXh0OiBcIlByZW1pZXJhXCIsXG4gIGVkaXRUZXh0OiBcIkVkeWNqYVwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiU3RhcnRcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJJbm5hIG9kcG93aWVkxbogKHdwaXN6KVwiLFxuICBub25lSXRlbVRleHQ6IFwiQnJha1wiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJXeWJpZXJ6IHdzenlzdGtpZVwiLFxuICBwcm9ncmVzc1RleHQ6IFwiU3Ryb25hIHswfSB6IHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiWmFwaXMgezB9IHogezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJPZHBvd2llZHppIG5hIHswfS97MX0gcHl0YW5pYVwiLFxuICBlbXB0eVN1cnZleTogXCJOaWUgbWEgd2lkb2N6bnljaCBweXRhxYQuXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiRHppxJlrdWplbXkgemEgd3lwZcWCbmllbmllIGFua2lldHkhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCJaIG5hc3p5Y2ggemFwaXPDs3cgd3luaWthLCDFvGUgd3lwZcWCbmnFgmXFmyBqdcW8IHTEmSBhbmtpZXTEmS5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJUcndhIHdjenl0eXdhbmllIGFua2lldHkuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiV3liaWVyei4uLlwiLFxuICB2YWx1ZTogXCJXYXJ0b8WbxIdcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJQcm9zesSZIG9kcG93aWVkemllxIcgbmEgdG8gcHl0YW5pZS5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiUHJvc3rEmSBvZHBvd2llZHppZcSHIG5hIGNvIG5ham1uaWVqIGplZG5vIHB5dGFuaWUuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiUHJvc3rEmSBvZHBvd2llZHppZcSHIG5hIHdzenlzdGtpZSBweXRhbmlhLlwiLFxuICBudW1lcmljRXJyb3I6IFwiVyB0eW0gcG9sdSBtb8W8bmEgd3Bpc2HEhyB0eWxrbyBsaWN6YnkuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiUHJvc3rEmSB3cGlzYcSHIGNvIG5ham1uaWVqIHswfSB6bmFrw7N3LlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIlByb3N6xJkgd3Bpc2HEhyBtbmllaiBuacW8IHswfSB6bmFrw7N3LlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIlByb3N6xJkgd3Bpc2HEhyB3acSZY2VqIG5pxbwgezB9IGkgbW5pZWogbmnFvCB7MX0gem5ha8Ozdy5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJQcm9zesSZIHV6dXBlxYJuacSHIHByenluYWptbmllaiB7MH0gd2llcnN6eS5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiUHJvc3rEmSB3eWJyYcSHIGNvIG5ham1uaWVqIHswfSBwb3p5Y2ppLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJQcm9zesSZIHd5YnJhxIcgbmllIHdpxJljZWogbmnFvCB7MH0gcG96eWNqaS5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIk9kcG93aWVkxbogJ3swfScgcG93aW5uYSBiecSHIHdpxJlrc3phIGx1YiByw7N3bmEgezF9IG9yYXogbW5pZWpzemEgbHViIHLDs3duYSB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCJPZHBvd2llZMW6ICd7MH0nIHBvd2lubmEgYnnEhyB3acSZa3N6YSBsdWIgcsOzd25hIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIk9kcG93aWVkxbogJ3swfScgcG93aW5uYSBiecSHIG1uaWVqc3phIGx1YiByw7N3bmEgezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCJQcm9zesSZIHBvZGHEhyBwcmF3aWTFgm93eSBhZHJlcyBlbWFpbC5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiV3lyYcW8ZW5pZTogezB9IHBvd2lubm8gd3JhY2HEhyAncHJhd2R6aXdlJy5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIsW7xIVkYW5pZSB6d3LDs2NpxYJvIGLFgsSFZCAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIsW7xIVkYW5pZSBuaWUgendyw7NjacWCbyBkYW55Y2ggYWxibyDFm2NpZcW8a2EgamVzdCBuaWVwcmF3aWTFgm93YVwiLFxuICBleGNlZWRNYXhTaXplOiBcIlJvem1pYXIgcHJ6ZXPFgmFuZWdvIHBsaWt1IG5pZSBtb8W8ZSBwcnpla3JhY3phxIcgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiUHJvc3rEmSBwb2RhxIcgaW5uxIUgb2Rwb3dpZWTFui5cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIlRyd2EgcHJ6ZW5vc3plbmllIFR3b2plZ28gcGxpa3UsIHByb3N6xJkgc3Byw7Nib3dhxIcgcG9ub3duaWUgemEga2lsa2Egc2VrdW5kLlwiLFxuICBsb2FkaW5nRmlsZTogXCLFgWFkb3dhbmllLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiV3liaWVyeiBwbGlrKGkpLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJOaWUgd3licmFubyDFvGFkbmVnbyBwbGlrdVwiLFxuICBjb25maXJtRGVsZXRlOiBcIkNoY2VzeiBza2Fzb3dhxIcgbmFncmFuaWU/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiVGEgd2FydG/Fm8SHIHBvd2lubmEgYnnEhyB3eWrEhXRrb3dhLlwiLFxuICBhZGRDb2x1bW46IFwiRG9kYWoga29sdW1uxJlcIixcbiAgYWRkUm93OiBcIkRvZGFqIHdpZXJzelwiLFxuICByZW1vdmVSb3c6IFwiVXN1xYRcIixcbiAgYWRkUGFuZWw6IFwiRG9kYWogcGFuZWxcIixcbiAgcmVtb3ZlUGFuZWw6IFwiVXN1xYRcIixcbiAgY2hvaWNlc19JdGVtOiBcImVsZW1lbnRcIixcbiAgbWF0cml4X2NvbHVtbjogXCJLb2x1bW5hXCIsXG4gIG1hdHJpeF9yb3c6IFwiV2llcnN6XCIsXG4gIHNhdmluZ0RhdGE6IFwiWmFwaXN1asSZIHd5bmlraSBhbmtpZXR5IG5hIHNlcndlcnplLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJXeXN0xIVwacWCIGLFgsSFZCBpIHd5bmlraSBuaWUgbW9nxYJ5IHpvc3RhxIcgemFwaXNhbmUuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIld5bmlraSB6b3N0YcWCeSBwb3ByYXduaWUgemFwaXNhbmUhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJTcHLDs2J1aiBwb25vd25pZVwiLFxuICB0aW1lck1pbjogXCJtaW5cIixcbiAgdGltZXJTZWM6IFwic2VrXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiU3DEmWR6acWCZcWbIHswfSBuYSB0ZWogc3Ryb25pZSBhIHcgc3VtaWUgezF9LlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJTcMSZZHppxYJlxZsgezB9IG5hIHRlaiBzdHJvbmllLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIlNwxJlkemnFgmXFmyB3IHN1bWllIHswfS5cIixcbiAgdGltZXJMaW1pdEFsbDogXCJTcMSZZHppxYJlxZsgezB9IHogezF9IG5hIHRlaiBzdHJvbmllIGEgdyBzdW1pZSB7Mn0geiB7M30uXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIlNwxJlkemnFgmXFmyB7MH0geiB7MX0gbmEgdGVqIHN0cm9uaWVcIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJTcMSZZHppxYJlxZsgezB9IHogezF9LlwiLFxuICBjbGVhbkNhcHRpb246IFwiV3ljennFm8SHXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJKYXNuZVwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJXeWJpZXJ6IHBsaWtcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiVXN1xYQgdGVuIHBsaWtcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJUYWtcIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIk5pZVwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJKZXN0ZcWbIHBld2llbiwgxbxlIGNoY2VzeiB1c3VuxIXEhyB0ZW4gcGxpazogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiSmVzdGXFmyBwZXdpZW4sIMW8ZSBjaGNlc3ogdXN1bsSFxIcgd3N6eXN0a2llIHBsaWtpP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiVHl0dcWCIHB5dGFuaWFcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wicGxcIl0gPSBwb2xpc2hTdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wicGxcIl0gPSBcInBvbHNraVwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBwb3J0dWd1ZXNlQnJTdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiQW50ZXJpb3JcIixcbiAgcGFnZU5leHRUZXh0OiBcIlByw7N4aW1vXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJGaW5hbGl6YXJcIixcbiAgcHJldmlld1RleHQ6IFwiUHLDqS12aXN1YWxpemHDp8Ojb1wiLFxuICBlZGl0VGV4dDogXCJFZGl0YXJcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcIkNvbWXDp2FyXCIsXG4gIG90aGVySXRlbVRleHQ6IFwiT3V0cm9zIChkZXNjcmV2ZXIpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJOZW5odW1cIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiU2VsZWNpb25hciBUb2Rvc1wiLFxuICBwcm9ncmVzc1RleHQ6IFwiUMOhZ2luYSB7MH0gZGUgezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJSZWdpc3RybyB7MH0gZGUgezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJSZXNwb3N0YXMgezB9L3sxfSBwZXJndW50YXNcIixcbiAgZW1wdHlTdXJ2ZXk6IFwiTsOjbyBow6EgcMOhZ2luYSB2aXPDrXZlbCBvdSBwZXJndW50YSBuYSBwZXNxdWlzYS5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJPYnJpZ2FkbyBwb3IgZmluYWxpemFyIGEgcGVzcXVpc2EhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCJOb3Nzb3MgcmVnaXN0cm9zIG1vc3RyYW0gcXVlIHZvY8OqIGrDoSBmaW5hbGl6b3UgYSBwZXNxdWlzYS5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJBIHBlc3F1aXNhIGVzdMOhIGNhcnJlZ2FuZG8uLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiU2VsZWNpb25lLi4uXCIsXG4gIHZhbHVlOiBcInZhbG9yXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiUG9yIGZhdm9yLCByZXNwb25kYSBhIHBlcmd1bnRhLlwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJQb3IgZmF2b3IsIHJlc3BvbmRhIHBlbG8gbWVub3MgdW1hIHBlcmd1bnRhLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOlxuICAgIFwiUG9yIGZhdm9yLCByZXNwb25kYSBhcyBwZXJndW50YXMgZW0gdG9kYXMgYXMgbGluaGFzLlwiLFxuICBudW1lcmljRXJyb3I6IFwiTyB2YWxvciBkZXZlIHNlciBudW3DqXJpY28uXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiUG9yIGZhdm9yLCBpbnNpcmEgcGVsbyBtZW5vcyB7MH0gY2FyYWN0ZXJlcy5cIixcbiAgdGV4dE1heExlbmd0aDogXCJQb3IgZmF2b3IsIGluc2lyYSBtZW5vcyBkZSB7MH0gY2FyYWN0ZXJlcy5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCJQb3IgZmF2b3IsIGluc2lyYSBtYWlzIGRlIHswfSBlIG1lbm9zIGRlIHsxfSBjYXJhY3RlcmVzLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIlByZWVuY2hhIHBlbG8gbWVub3MgezB9IGxpbmhhcy5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiU2VsZWNpb25lIHBlbG8gbWVub3MgezB9IG9ww6fDtWVzLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJQb3IgZmF2b3IsIHNlbGVjaW9uZSBuw6NvIG1haXMgZG8gcXVlIHswfSBvcMOnw7Vlcy5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIk8gJ3swfScgZGV2ZSBzZXIgaWd1YWwgb3Ugc3VwZXJpb3IgYSB7MX0gZSBpZ3VhbCBvdSBtZW5vciBxdWUgezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiTyAnezB9JyBkZXZlIHNlciBpZ3VhbCBvdSBzdXBlcmlvciBhIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIk8gJ3swfScgZGV2ZSBzZXIgaWd1YWwgb3UgaW5mZXJpb3IgYSB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIlBvciBmYXZvciwgaW5mb3JtZSB1bSBlLW1haWwgdsOhbGlkby5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiQSBleHByZXNzw6NvOiB7MH0gZGV2ZSByZXRvcm5hciAndmVyZGFkZWlybycuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJBIHJlcXVpc2nDp8OjbyByZXRvcm5vdSBvIGVycm8gJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCJBIHJlcXVpc2nDp8OjbyBuw6NvIHJldG9ybm91IGRhZG9zIG91IG8gJ2NhbWluaG8nIGRhIHJlcXVpc2nDp8OjbyBuw6NvIGVzdMOhIGNvcnJldG9cIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJPIHRhbWFuaG8gZG8gYXJxdWl2byBuw6NvIGRldmUgZXhjZWRlciB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJQb3IgZmF2b3IsIGluZm9ybWUgbyBvdXRybyB2YWxvci5cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIlNldSBhcnF1aXZvIGVzdMOhIHNlbmRvIGNhcnJlZ2Fkby4gUG9yIGZhdm9yLCBhZ3VhcmRlIGFsZ3VucyBzZWd1bmRvcyBlIHRlbnRlIG5vdmFtZW50ZS5cIixcbiAgbG9hZGluZ0ZpbGU6IFwiQ2FycmVnYW5kby4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIlNlbGVjaW9uZSBvKHMpIGFycXVpdm8ocykuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIk5lbmh1bSBhcnF1aXZvIGVzY29saGlkb1wiLFxuICBjb25maXJtRGVsZXRlOiBcIlRlbSBjZXJ0ZXphIHF1ZSBkZXNlamEgZGVsZXRhcj9cIixcbiAga2V5RHVwbGljYXRpb25FcnJvcjogXCJFc3NlIHZhbG9yIGRldmUgc2VyIMO6bmljby5cIixcbiAgYWRkQ29sdW1uOiBcIkFkaWNpb25hciBjb2x1bmFcIixcbiAgYWRkUm93OiBcIkFkaWNpb25hciBsaW5oYVwiLFxuICByZW1vdmVSb3c6IFwiUmVtb3ZlciBsaW5oYVwiLFxuICBhZGRQYW5lbDogXCJBZGljaW9uYXIgbm92b1wiLFxuICByZW1vdmVQYW5lbDogXCJSZW1vdmVyXCIsXG4gIGNob2ljZXNfSXRlbTogXCJpdGVtXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiQ29sdW5hXCIsXG4gIG1hdHJpeF9yb3c6IFwiTGluaGFcIixcbiAgc2F2aW5nRGF0YTogXCJPcyByZXN1bHRhZG9zIGVzdG8gc2VuZG8gc2Fsdm9zIG5vIHNlcnZpZG9yLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJPY29ycmV1IHVtIGVycm8gZSBuw6NvIGZvaSBwb3Nzw612ZWwgc2FsdmFyIG9zIHJlc3VsdGFkb3MuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIk9zIHJlc3VsdGFkb3MgZm9yYW0gc2Fsdm9zIGNvbSBzdWNlc3NvIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiVGVudGUgbm92YW1lbnRlXCIsXG4gIHRpbWVyTWluOiBcIm1pblwiLFxuICB0aW1lclNlYzogXCJzZWdcIixcbiAgdGltZXJTcGVudEFsbDogXCJWb2PDqiBnYXN0b3UgezB9IG5lc3RhIHDDoWdpbmEgZSB7MX0gbm8gdG90YWwuXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIlZvY8OqIGdhc3RvdSB7MH0gbmVzdGEgcMOhZ2luYS5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJWb2PDqiBnYXN0b3UgezB9IG5vIHRvdGFsLlwiLFxuICB0aW1lckxpbWl0QWxsOiBcIlZvY8OqIGdhc3RvdSB7MH0gZGUgezF9IG5lc3RhIHDDoWdpbmEgZSB7Mn0gZGUgezN9IG5vIHRvdGFsLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJWb2PDqiBnYXN0b3UgezB9IGRlIHsxfSBuZXN0YSBww6FnaW5hLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIlZvY8OqIGdhc3RvdSB7MH0gZGUgezF9IG5vIHRvdGFsLlwiLFxuICBjbGVhbkNhcHRpb246IFwiTGltcGFyXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJMaW1wYXJcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwiRXNjb2xoZXIgYXJxdWl2b1wiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCJSZW1vdmVyIGVzdGUgYXJxdWl2b1wiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIlNpbVwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiTsOjb1wiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJUZW0gY2VydGV6YSBxdWUgZGVzZWphIHJlbW92ZXIgZXN0ZSBhcnF1aXZvOiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJUZW0gY2VydGV6YSBxdWUgZGVzZWphIHJlbW92ZXIgdG9kb3Mgb3MgYXJxdWl2b3M/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJUw610dWxvIGRhIHF1ZXN0w6NvXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcInB0LWJyXCJdID0gcG9ydHVndWVzZUJyU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcInB0LWJyXCJdID0gXCJwb3J0dWd1w6pzIGJyYXNpbGVpcm9cIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgcG9ydHVndWVzZVN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJBbnRlcmlvclwiLFxuICBwYWdlTmV4dFRleHQ6IFwiUHLDs3hpbW9cIixcbiAgY29tcGxldGVUZXh0OiBcIkZpbmFsaXphclwiLFxuICBwcmV2aWV3VGV4dDogXCJQcsOpLXZpc3VhbGl6YcOnw6NvXCIsXG4gIGVkaXRUZXh0OiBcIkVkaXRhclwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiQ29tZcOnYXJcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJPdXRyb3MgKGRlc2NyZXZlcilcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIk5lbmh1bVwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJTZWxlY2lvbmFyIFRvZG9zXCIsXG4gIHByb2dyZXNzVGV4dDogXCJQw6FnaW5hIHswfSBkZSB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIlJlZ2lzdG8gezB9IGRlIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiUmVzcG9zdGFzIHswfS97MX0gcGVyZ3VudGFzXCIsXG4gIGVtcHR5U3VydmV5OiBcIk7Do28gaMOhIHDDoWdpbmEgdmlzw612ZWwgb3UgcGVyZ3VudGEgbm8gcXVlc3Rpb27DoXJpby5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJPYnJpZ2FkbyBwb3IgZmluYWxpemFyIG8gcXVlc3Rpb27DoXJpbyFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcIk9zIG5vc3NvcyByZWdpc3RvcyBtb3N0cmFtIHF1ZSBqw6EgZmluYWxpem91IG8gcXVlc3Rpb27DoXJpby5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJPIHF1ZXN0aW9uw6FyaW8gZXN0w6EgYSBjYXJyZWdhci4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJTZWxlY2lvbmUuLi5cIixcbiAgdmFsdWU6IFwidmFsb3JcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJQb3IgZmF2b3IsIHJlc3BvbmRhIMOgIHBlcmd1bnRhLlwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJQb3IgZmF2b3IsIHJlc3BvbmRhIHBlbG8gbWVub3MgYSB1bWEgcGVyZ3VudGEuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6XG4gICAgXCJQb3IgZmF2b3IsIHJlc3BvbmRhIMOgcyBwZXJndW50YXMgZW0gdG9kYXMgYXMgbGluaGFzLlwiLFxuICBudW1lcmljRXJyb3I6IFwiTyB2YWxvciBkZXZlIHNlciBudW3DqXJpY28uXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiUG9yIGZhdm9yLCBpbnNpcmEgcGVsbyBtZW5vcyB7MH0gY2FyYWN0ZXJlcy5cIixcbiAgdGV4dE1heExlbmd0aDogXCJQb3IgZmF2b3IsIGluc2lyYSBtZW5vcyBkZSB7MH0gY2FyYWN0ZXJlcy5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCJQb3IgZmF2b3IsIGluc2lyYSBtYWlzIGRlIHswfSBlIG1lbm9zIGRlIHsxfSBjYXJhY3RlcmVzLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIlByZWVuY2hhIHBlbG8gbWVub3MgezB9IGxpbmhhcy5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwiU2VsZWNpb25lIHBlbG8gbWVub3MgezB9IG9ww6fDtWVzLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJQb3IgZmF2b3IsIHNlbGVjaW9uZSBubyBtw6F4aW1vIHswfSBvcMOnw7Vlcy5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIk8gJ3swfScgZGV2ZSBzZXIgaWd1YWwgb3Ugc3VwZXJpb3IgYSB7MX0gZSBpZ3VhbCBvdSBtZW5vciBxdWUgezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiTyAnezB9JyBkZXZlIHNlciBpZ3VhbCBvdSBzdXBlcmlvciBhIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIk8gJ3swfScgZGV2ZSBzZXIgaWd1YWwgb3UgaW5mZXJpb3IgYSB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIlBvciBmYXZvciwgaW5zaXJhIHVtIGUtbWFpbCB2w6FsaWRvLlwiLFxuICBpbnZhbGlkRXhwcmVzc2lvbjogXCJBIGV4cHJlc3PDo286IHswfSBkZXZlIHJldG9ybmFyICd2ZXJkYWRlaXJvJy5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIk8gcGVkaWRvIHJldG9ybm91IG8gZXJybyAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIk8gcGVkaWRvIG7Do28gcmV0b3Jub3UgZGFkb3Mgb3UgbyAnY2FtaW5obycgZG8gcGVkaWRvIG7Do28gZXN0w6EgY29ycmV0b1wiLFxuICBleGNlZWRNYXhTaXplOiBcIk8gdGFtYW5obyBkbyBhcnF1aXZvIG7Do28gZGV2ZSBleGNlZGVyIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlBvciBmYXZvciwgaW5zaXJhIG8gb3V0cm8gdmFsb3IuXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCJPIHNldSBmaWNoZWlybyBlc3TDoSBhIGNhcnJlZ2FyLiBQb3IgZmF2b3IsIGFndWFyZGUgYWxndW5zIHNlZ3VuZG9zIGUgdGVudGUgbm92YW1lbnRlLlwiLFxuICBsb2FkaW5nRmlsZTogXCJBIGNhcnJlZ2FyLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiU2VsZWNpb25lIG8ocykgYXJxdWl2byhzKS4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiTmVuaHVtIGZpY2hlaXJvIGVzY29saGlkb1wiLFxuICBjb25maXJtRGVsZXRlOiBcIlRlbSBhIGNlcnRlemEgcXVlIGRlc2VqYSBhcGFnYXI/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiRXN0ZSB2YWxvciBkZXZlIHNlciDDum5pY28uXCIsXG4gIGFkZENvbHVtbjogXCJBZGljaW9uYXIgY29sdW5hXCIsXG4gIGFkZFJvdzogXCJBZGljaW9uYXIgbGluaGFcIixcbiAgcmVtb3ZlUm93OiBcIlJlbW92ZXIgbGluaGFcIixcbiAgYWRkUGFuZWw6IFwiQWRpY2lvbmFyIG5vdm9cIixcbiAgcmVtb3ZlUGFuZWw6IFwiUmVtb3ZlclwiLFxuICBjaG9pY2VzX0l0ZW06IFwiaXRlbVwiLFxuICBtYXRyaXhfY29sdW1uOiBcIkNvbHVuYVwiLFxuICBtYXRyaXhfcm93OiBcIkxpbmhhXCIsXG4gIHNhdmluZ0RhdGE6IFwiT3MgcmVzdWx0YWRvcyBlc3TDo28gYSBzZXIgZ3VhcmRhZG9zIG5vIHNlcnZpZG9yLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJPY29ycmV1IHVtIGVycm8gZSBuw6NvIGZvaSBwb3Nzw612ZWwgZ3VhcmRhciBvcyByZXN1bHRhZG9zLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJPcyByZXN1bHRhZG9zIGZvcmFtIGd1YXJkYWRvcyBjb20gc3VjZXNzbyFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIlRlbnRlIG5vdmFtZW50ZVwiLFxuICB0aW1lck1pbjogXCJtaW5cIixcbiAgdGltZXJTZWM6IFwic2VnXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiVm9jw6ogZ2FzdG91IHswfSBuZXN0YSBww6FnaW5hIGUgezF9IG5vIHRvdGFsLlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJWb2PDqiBnYXN0b3UgezB9IG5lc3RhIHDDoWdpbmEuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiVm9jw6ogZ2FzdG91IHswfSBubyB0b3RhbC5cIixcbiAgdGltZXJMaW1pdEFsbDogXCJWb2PDqiBnYXN0b3UgezB9IGRlIHsxfSBuZXN0YSBww6FnaW5hIGUgezJ9IGRlIHszfSBubyB0b3RhbC5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiVm9jw6ogZ2FzdG91IHswfSBkZSB7MX0gbmVzdGEgcMOhZ2luYS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJWb2PDqiBnYXN0b3UgezB9IGRlIHsxfSBubyB0b3RhbC5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIkxpbXBhclwiLFxuICBjbGVhckNhcHRpb246IFwiTGltcGFyXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIkVzY29saGVyIGZpY2hlaXJvXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIlJlbW92ZXIgZXN0ZSBmaWNoZWlyb1wiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIlNpbVwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiTsOjb1wiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJUZW0gYSBjZXJ0ZXphIHF1ZSBkZXNlamEgcmVtb3ZlciBlc3RlIGZpY2hlaXJvOiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJUZW0gYSBjZXJ0ZXphIHF1ZSBkZXNlamEgcmVtb3ZlciB0b2RvcyBvcyBmaWNoZWlyb3M/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCJUw610dWxvIGRhIHF1ZXN0w6NvXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcInB0XCJdID0gcG9ydHVndWVzZVN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJwdFwiXSA9IFwicG9ydHVndcOqc1wiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciByb21hbmlhblN1cnZleVN0cmluZ3M6IGFueSA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIlByZWNlZGVudFwiLFxuICBwYWdlTmV4dFRleHQ6IFwiVXJtxIN0b3JcIixcbiAgY29tcGxldGVUZXh0OiBcIkZpbmFsaXphcmVcIixcbiAgcHJldmlld1RleHQ6IFwicHJldml6dWFsaXphcmVcIixcbiAgZWRpdFRleHQ6IFwiRWRpdGHIm2lcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcInN0YXJ0XCIsXG4gIG90aGVySXRlbVRleHQ6IFwiQWx0dWwocHJlY2l6YcWjaSlcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIk5pY2kgdW51bFwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJTZWxlY3RlYXrEgyB0b3RcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIlBhZ2luYSB7MH0gZGluIHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwiw45ucmVnaXN0cmFyZSB7MH0gZGluIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiUsSDc3B1bnN1cmkgbGEgezB9IC8gezF9IMOubnRyZWLEg3JpXCIsXG4gIGVtcHR5U3VydmV5OiBcIk51IHN1bnQgw65udHJlYsSDcmkgcGVudHJ1IGFjZXN0IGNoZXN0aW9uYXJcIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJWxIMgbXVsxaN1bWltIHBlbnRydSB0aW1wdWwgYWNvcmRhdCFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcIkRpbiDDrm5yZWdpc3RyxINyaWxlIG5vYXN0cmUgcmVpZXNlIGPEgyBhyJtpIGNvbXBsZXRhdCBkZWphIGFjZXN0IGNoZXN0aW9uYXIuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiQ2hlc3Rpb25hcnVsIHNlIMOubmNhcmPEgy4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJBbGVnZcWjaS4uLlwiLFxuICB2YWx1ZTogXCJ2YWxvYXJlXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwiUsSDc3B1bnN1bCBsYSBhY2Vhc3TEgyDDrm50cmViYXJlIGVzdGUgb2JsaWdhdG9yaXUuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIlbEgyBydWfEg20gc8SDIHLEg3NwdW5kZcibaSBsYSBjZWwgcHXIm2luIG8gw65udHJlYmFyZS5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJUb2F0ZSByxINzcHVuc3VyaWxlIHN1bnQgb2JsaWdhdG9yaWlcIixcbiAgbnVtZXJpY0Vycm9yOiBcIlLEg3NwdW5zdWwgdHJlYnVpZSBzxIMgZmllIG51bWVyaWMuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiVHJlYnVpZSBzxIMgaW50cm9kdWNlyJtpIG1pbmltIHswfSBjYXJhY3RlcmUuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiVHJlYnVpZSBzxIMgaW50cm9kdWNlyJtpIG1heGltIHswfSBjYXJhY3RlcmUuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6XG4gICAgXCJUcmVidWllIHPEgyBpbnRyb2R1Y2XIm2kgbWFpIG11bHQgZGUgezB9IMiZaSBtYWkgcHXIm2luIGRlIHsxfSBjYXJhY3RlcmUuXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiVHJlYnVpZSBzxIMgY29tcGxldGHIm2kgbWluaW0gezB9IHLDom5kdXJpLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJUcmVidWllIHPEgyBzZWxlY3RhyJtpIG1pbmltIHswfSBvcMWjaXVuaS5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiVHJlYnVpZSBzxIMgc2VsZWN0YcibaSBtYXhpbSB7MH0gb3DFo2l1bmkuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCJSxINzcHVuc3VsICd7MH0nIHRyZWJ1aWUgc8SDIGZpZSBtYWkgbWFyZSBzYXUgZWdhbCBjYSB7MX0gxZ/DriBtYWkgbWljIHNhdSBlZ2FsIGN1IHsyfVwiLFxuICBudW1lcmljTWluOiBcIlLEg3NwdW5zdWwgJ3swfScgdHJlYnVpZSBzxIMgZmllIG1haSBtYXJlIHNhdSBlZ2FsIGNhIHsxfVwiLFxuICBudW1lcmljTWF4OiBcIlLEg3NwdW5zdWwgJ3swfScgdHJlYnVpZSBzxIMgZmllIG1haSBtaWMgc2F1IGVnYWwgY2EgezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCJUcmVidWllIHPEgyBpbnRyb2R1Y2XFo2kgbyBhZHJlc2EgZGUgZW1haWwgdmFsaWTEgy5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiRXhwcmVzaWE6IHswfSBhciB0cmVidWkgc8SDIHJldHVybmV6ZSDigJ5hZGV2xINyYXTigJ0uXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJSZXF1ZXN0LXVsIGEgcmV0dXJuYXQgZXJvYXJlYSAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIlJlcXVlc3QtdWwgbnUgYSByZXR1cm5hdCBkYXRlIHNhdSBwcm9wcmlldGF0ZWEgJ3BhdGgnIGVzdGUgaW5jb3JlY3TEg1wiLFxuICBleGNlZWRNYXhTaXplOiBcIkRpbWVuc2l1bmVhIGZpxZ9pZXJ1bHVpIG51IHRyZWJ1aWUgc8SDIGRlcMSDxZ9lYXNjxIMgezB9LlwiLFxuICBvdGhlclJlcXVpcmVkRXJyb3I6IFwiVHJlYnVpZSBzxIMgY29tcGxldGHIm2kgY8OibXB1bCAnQWx0dWwnLlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiRmnImWllcnVsIGR1bW5lYXZvYXN0csSDIGVzdGUgw65uIGN1cnMgZGUgw65uY8SDcmNhcmUuIFbEgyBydWfEg20gYciZdGVwdGHIm2kgY8OidGV2YSBzZWN1bmRlIMiZaSByZXZlbmnIm2kgYXBvaS5cIixcbiAgbG9hZGluZ0ZpbGU6IFwiU2Ugw65uY2FyY8SDLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiQWxlZ2UgZmlzaWVyZWxlLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJOaWNpdW4gZmnImWllciBhbGVzXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiU3VudGXIm2kgc2lndXIgY8SDIGRvcmnIm2kgc8SDIMiZdGVyZ2XIm2kgw65ucmVnaXN0cmFyZWE/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiVmFsb2FyZWEgdHJlYnVpZSBzxIMgZmllIHVuaWPEgy5cIixcbiAgYWRkQ29sdW1uOiBcIkFkxIN1Z2HIm2kgY29sb2FuxINcIixcbiAgYWRkUm93OiBcIkFkxIN1Z2FyZSByw6JuZFwiLFxuICByZW1vdmVSb3c6IFwiyJh0ZXJnZXJlXCIsXG4gIGFkZFBhbmVsOiBcIkFkxIN1Z2FyZVwiLFxuICByZW1vdmVQYW5lbDogXCLImHRlcmdlcmVcIixcbiAgY2hvaWNlc19JdGVtOiBcIm9wyJtpdW5lXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiQ29sb2FuxINcIixcbiAgbWF0cml4X3JvdzogXCJSw6JuZFwiLFxuICBzYXZpbmdEYXRhOiBcIlJlenVsdGF0ZWxlIHN1bnQgw65uIGN1cnMgZGUgc2FsdmFyZS4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiQSBpbnRlcnZlbml0IG8gZXJvYXJlLCByZXp1bHRhdGVsZSBudSBhdSBwdXR1dCBmaSBzYWx2YXRlLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJSZXp1bHRhdGVsZSBhdSBmb3N0IHNhbHZhdGUgY3Ugc3VjY2VzIVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiw45uY2VyY2HIm2kgZGluIG5vdVwiLFxuICB0aW1lck1pbjogXCJtaW5cIixcbiAgdGltZXJTZWM6IFwic2VjXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiQcibaSBwZXRyZWN1dCB7MH0gcGUgYWNlYXN0xIMgcGFnaW7EgyDImWkgezF9IMOubiB0b3RhbC5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwiQcibaSBwZXRyZWN1dCB7MH0gcGUgYWNlYXN0xIMgcGFnaW7Egy5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJByJtpIHBldHJlY3V0IHswfSDDrm4gdG90YWwuXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCJByJtpIHBldHJlY3V0IHswfSBkaW4gezF9IHBlIGFjZWFzdMSDIHBhZ2luxIMgyJlpIHsyfSBkaW4gezN9IMOubiB0b3RhbC5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiQcibaSBwZXRyZWN1dCB7MH0gZGluIHsxfSBwZSBhY2Vhc3TEgyBwYWdpbsSDLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIkHIm2kgcGV0cmVjdXQgezB9IGRpbiB7MX0gw65uIHRvdGFsLlwiLFxuICBjbGVhbkNhcHRpb246IFwiQ3VyYXRcIixcbiAgY2xlYXJDYXB0aW9uOiBcImNsYXJcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwiQWxlZ2UgZmnImWllcnVsXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIkVsaW1pbmHIm2kgYWNlc3QgZmnImWllclwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcImRhXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOdVwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJTaWd1ciBkb3JpyJtpIHPEgyBlbGltaW5hyJtpIGFjZXN0IGZpyJlpZXI6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIlNpZ3VyIGRvcmnIm2kgc8SDIGVsaW1pbmHIm2kgdG9hdGUgZmnImWllcmVsZT9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIlRpdGx1bCBpbnRyZWJhcmlpXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcInJvXCJdID0gcm9tYW5pYW5TdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wicm9cIl0gPSBcInJvbcOibsSDXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIHJ1c3NpYW5TdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwi0J3QsNC30LDQtFwiLFxuICBwYWdlTmV4dFRleHQ6IFwi0JTQsNC70LXQtVwiLFxuICBjb21wbGV0ZVRleHQ6IFwi0JPQvtGC0L7QstC+XCIsXG4gIHByZXZpZXdUZXh0OiBcItCf0YDQtdC00LLQsNGA0LjRgtC10LvRjNC90YvQuSDQv9GA0L7RgdC80L7RgtGAXCIsXG4gIGVkaXRUZXh0OiBcItCg0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40LVcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcItCd0LDRh9Cw0YLRjFwiLFxuICBvdGhlckl0ZW1UZXh0OiBcItCU0YDRg9Cz0L7QtSAo0L/QvtC20LDQu9GD0LnRgdGC0LAsINC+0L/QuNGI0LjRgtC1KVwiLFxuICBub25lSXRlbVRleHQ6IFwi0J3QtdGCXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcItCS0YvQsdGA0LDRgtGMINCy0YHRkVwiLFxuICBwcm9ncmVzc1RleHQ6IFwi0KHRgtGA0LDQvdC40YbQsCB7MH0g0LjQtyB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcItCX0LDQv9C40YHRjCB7MH0g0LjQtyB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcItCe0YLQstC10YLRiyDQvdCwIHswfS97MX3QstC+0L/RgNC+0YHRi1wiLFxuICBlbXB0eVN1cnZleTogXCLQndC10YIg0L3QuCDQvtC00L3QvtCz0L4g0LLQvtC/0YDQvtGB0LAuXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwi0JHQu9Cw0LPQvtC00LDRgNC40Lwg0JLQsNGBINC30LAg0LfQsNC/0L7Qu9C90LXQvdC40LUg0LDQvdC60LXRgtGLIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwi0JLRiyDRg9C20LUg0L/RgNC+0YXQvtC00LjQu9C4INGN0YLQvtGCINC+0L/RgNC+0YEuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwi0JfQsNCz0YDRg9C30LrQsCDRgSDRgdC10YDQstC10YDQsC4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCLQktGL0LHRgNCw0YLRjC4uLlwiLFxuICB2YWx1ZTogXCLQt9C90LDRh9C10L3QuNC1XCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwi0J/QvtC20LDQu9GD0LnRgdGC0LAsINC+0YLQstC10YLRjNGC0LUg0L3QsCDQstC+0L/RgNC+0YEuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcItCf0L7QttCw0LvRg9C50YHRgtCwLCDQvtGC0LLQtdGC0YzRgtC1INC/0L4g0LrRgNCw0LnQvdC10Lkg0LzQtdGA0LUg0L3QsCDQvtC00LjQvSDQstC+0L/RgNC+0YEuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwi0J/QvtC20LDQu9GD0LnRgdGC0LAsINC+0YLQstC10YLRjNGC0LUg0L3QsCDQstC+0L/RgNC+0YHRiyDQsiDQutCw0LbQtNC+0Lkg0YHRgtGA0L7QutC1LlwiLFxuICBudW1lcmljRXJyb3I6IFwi0J7RgtCy0LXRgiDQtNC+0LvQttC10L0g0LHRi9GC0Ywg0YfQuNGB0LvQvtC8LlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcItCf0L7QttCw0LvRg9C50YHRgtCwINCy0LLQtdC00LjRgtC1INCx0L7Qu9GM0YjQtSB7MH0g0YHQuNC80LLQvtC70L7Qsi5cIixcbiAgdGV4dE1heExlbmd0aDogXCLQn9C+0LbQsNC70YPQudGB0YLQsCDQstCy0LXQtNC40YLQtSDQvNC10L3RjNGI0LUgezB9INGB0LjQvNCy0L7Qu9C+0LIuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwi0J/QvtC20LDQu9GD0LnRgdGC0LAg0LLQstC10LTQuNGC0LUg0LHQvtC70YzRiNC1IHswfSDQuCDQvNC10L3RjNGI0LUgezF9INGB0LjQvNCy0L7Qu9C+0LIuXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwi0J/QvtC20LDQu9GD0LnRgdGC0LAsINC30LDQv9C+0LvQvdC40YLQtSDQvdC1INC80LXQvdGM0YjQtSB7MH0g0YHRgtGA0L7Qui5cIixcbiAgbWluU2VsZWN0RXJyb3I6IFwi0J/QvtC20LDQu9GD0LnRgdGC0LAsINCy0YvQsdC10YDQuNGC0LUg0YXQvtGC0Y8g0LHRiyB7MH0g0LLQsNGA0LjQsNC90YLQvtCyLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCLQn9C+0LbQsNC70YPQudGB0YLQsCwg0LLRi9Cx0LXRgNC40YLQtSDQvdC1INCx0L7Qu9C10LUgezB9INCy0LDRgNC40LDQvdGC0L7Qsi5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIid7MH0nINC00L7Qu9C20L3QviDQsdGL0YLRjCDQvdC1INC80LXQvdGM0YjQtSDRh9C10LwgezF9LCDQuCDQvdC1INCx0L7Qu9GM0YjQtSDRh9C10LwgezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiJ3swfScg0LTQvtC70LbQvdC+INCx0YvRgtGMINC90LUg0LzQtdC90YzRiNC1INGH0LXQvCB7MX1cIixcbiAgbnVtZXJpY01heDogXCInezB9JyDQtNC+0LvQttC90L4g0LHRi9GC0Ywg0L3QtSDQsdC+0LvRjNGI0LUg0YfQtdC8IHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwi0J/QvtC20LDQu9GD0LnRgdGC0LAsINCy0LLQtdC00LjRgtC1INC00LXQudGB0YLQstC40YLQtdC70YzQvdGL0Lkg0LDQtNGA0LXRgSDRjdC70LXQutGC0YDQvtC90L3QvtC5INC/0L7Rh9GC0YsuXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcItCS0YvRgNCw0LbQtdC90LjQtSB7MH0g0LTQvtC70LbQvdC+INCy0L7Qt9Cy0YDQsNGJ0LDRgtGMICd0cnVlJy5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcItCX0LDQv9GA0L7RgSDQstC10YDQvdGD0Lsg0L7RiNC40LHQutGDICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwi0J7RgtCy0LXRgiDQvdCwINC30LDQv9GA0L7RgSDQv9GA0LjRiNC10Lsg0L/Rg9GB0YLQvtC5INC40LvQuCDRgdCy0L7QudGB0YLQstC+ICdwYXRoJyDRg9C60LDQt9Cw0L3QviDQvdC10LLQtdGA0L3QvlwiLFxuICBleGNlZWRNYXhTaXplOiBcItCg0LDQt9C80LXRgCDRhNCw0LnQu9CwINC90LUg0LTQvtC70LbQtdC9INC/0YDQtdCy0YvRiNCw0YLRjCB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCLQn9C+0LbQsNC70YPQudGB0YLQsCwg0LLQstC10LTQuNGC0LUg0LTQsNC90L3Ri9C1INCyINC/0L7Qu9C1ICfQlNGA0YPQs9C+0LUnXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCLQktCw0Ygg0YTQsNC50Lsg0LfQsNCz0YDRg9C20LDQtdGC0YHRjy4g0J/QvtC00L7QttC00LjRgtC1INC90LXRgdC60L7Qu9GM0LrQviDRgdC10LrRg9C90LQg0Lgg0L/QvtC/0YDQvtCx0YPQudGC0LUg0YHQvdC+0LLQsC5cIixcbiAgbG9hZGluZ0ZpbGU6IFwi0JfQsNCz0YDRg9C30LrQsC4uLlwiLFxuICBjaG9vc2VGaWxlOiBcItCS0YvQsdC10YDQuNGC0LUg0YTQsNC50Lso0YspLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCLQpNCw0LnQuyDQvdC1INCy0YvQsdGA0LDQvVwiLFxuICBjb25maXJtRGVsZXRlOiBcItCS0Ysg0YLQvtGH0L3QviDRhdC+0YLQuNGC0LUg0YPQtNCw0LvQuNGC0Ywg0LfQsNC/0LjRgdGMP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcItCt0YLQviDQt9C90LDRh9C10L3QuNC1INC00L7Qu9C20L3QviDQsdGL0YLRjCDRg9C90LjQutCw0LvRjNC90YvQvC5cIixcbiAgYWRkQ29sdW1uOiBcItCU0L7QsdCw0LLQuNGC0Ywg0LrQvtC70L7QvdC60YNcIixcbiAgYWRkUm93OiBcItCU0L7QsdCw0LLQuNGC0Ywg0YHRgtGA0L7QutGDXCIsXG4gIHJlbW92ZVJvdzogXCLQo9C00LDQu9C40YLRjFwiLFxuICBhZGRQYW5lbDogXCLQlNC+0LHQsNCy0LjRgtGMINC90L7QstGD0Y5cIixcbiAgcmVtb3ZlUGFuZWw6IFwi0KPQtNCw0LvQuNGC0YxcIixcbiAgY2hvaWNlc19JdGVtOiBcItCS0LDRgNC40LDQvdGCXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwi0JrQvtC70L7QvdC60LBcIixcbiAgbWF0cml4X3JvdzogXCLQodGC0YDQvtC60LBcIixcbiAgc2F2aW5nRGF0YTogXCLQoNC10LfRg9C70YzRgtCw0YLRiyDRgdC+0YXRgNCw0L3Rj9GO0YLRgdGPINC90LAg0YHQtdGA0LLQtdGALi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCLQn9GA0L7QuNC30L7RiNC70LAg0L7RiNC40LHQutCwLCDRgNC10LfRg9C70YzRgtCw0YIg0L3QtSDQsdGL0Lsg0YHQvtGF0YDQsNC90ZHQvS5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwi0KDQtdC30YPQu9GM0YLQsNGCINGD0YHQv9C10YjQvdC+INGB0L7RhdGA0LDQvdGR0L0hXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCLQn9C+0L/RgNC+0LHQvtCy0LDRgtGMINGB0L3QvtCy0LBcIixcbiAgdGltZXJNaW46IFwi0LzQuNC9XCIsXG4gIHRpbWVyU2VjOiBcItGB0LXQulwiLFxuICB0aW1lclNwZW50QWxsOiBcItCS0Ysg0L/QvtGC0YDQsNGC0LjQu9C4IHswfSDQvdCwINGN0YLQvtC5INGB0YLRgNCw0L3QuNGG0LUg0LggezF9INCy0YHQtdCz0L4uXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcItCS0Ysg0L/QvtGC0YDQsNGC0LjQu9C4IHswfSDQvdCwINGN0YLQvtC5INGB0YLRgNCw0L3QuNGG0LUuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwi0JLRiyDQv9C+0YLRgNCw0YLQuNC70LggezB9INCyINGC0LXRh9C10L3QuNC1INGC0LXRgdGC0LAuXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCLQktGLINC/0L7RgtGA0LDRgtC40LvQuCB7MH0g0LjQtyB7MX0g0L3QsCDRjdGC0L7QuSDRgdGC0YDQsNC90LjRhtC1INC4IHsyfSDQuNC3IHszfSDQtNC70Y8g0LLRgdC10LPQviDRgtC10YHRgtCwLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCLQktGLINC/0L7RgtGA0LDRgtC40LvQuCB7MH0g0LjQtyB7MX0g0L3QsCDRjdGC0L7QuSDRgdGC0YDQsNC90LjRhtC1LlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcItCS0Ysg0L/QvtGC0YDQsNGC0LjQu9C4IHswfSDQuNC3IHsxfSDQtNC70Y8g0LLRgdC10LPQviDRgtC10YHRgtCwLlwiLFxuICBjbGVhbkNhcHRpb246IFwi0J7Rh9C40YHRgtC40YLRjFwiLFxuICBjbGVhckNhcHRpb246IFwi0J7Rh9C40YHRgtC40YLRjFwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCLQktGL0LHQtdGA0LjRgtC1INGE0LDQudC7XCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcItCj0LTQsNC70LjRgtGMINGE0LDQudC7XCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwi0JTQsFwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwi0J3QtdGCXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcItCS0Ysg0YPQstC10YDQtdC90YssINGH0YLQviDRhdC+0YLQuNGC0LUg0YPQtNCw0LvQuNGC0Ywg0Y3RgtC+0YIg0YTQsNC50Ls6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcItCS0Ysg0YPQstC10YDQtdC90YssINGH0YLQviDRhdC+0YLQuNGC0LUg0YPQtNCw0LvQuNGC0Ywg0LLRgdC1INGE0LDQudC70Ys/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCLQndCw0LfQstCw0L3QuNC1INCy0L7Qv9GA0L7RgdCwXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcInJ1XCJdID0gcnVzc2lhblN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJydVwiXSA9IFwi0YDRg9GB0YHQutC40LlcIjtcbiIsIi8vVW5jb21tZW50IHRoaXMgbGluZSBvbiBjcmVhdGluZyBhIHRyYW5zbGF0aW9uIGZpbGVcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgc2VyYmlhblN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJOYXphZFwiLFxuICBwYWdlTmV4dFRleHQ6IFwiRGFsamVcIixcbiAgY29tcGxldGVUZXh0OiBcIlphdnLFoWlcIixcbiAgcHJldmlld1RleHQ6IFwiUHJlZ2xlZGFqXCIsXG4gIGVkaXRUZXh0OiBcIkl6bWVuaVwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiWmFwb8SNbmlcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJEcnVnbyAodXBpxaFpKVwiLFxuICBub25lSXRlbVRleHQ6IFwiTmnFoXRhXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIkl6YWJlcmkgc3ZlXCIsXG4gIHByb2dyZXNzVGV4dDogXCJTdHJhbmljYSB7MH0gb2QgezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJVcGlzIHswfSBvZCB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIk9kZ292b3Jlbm8gbmEgezB9L3sxfSBwaXRhbmphXCIsXG4gIGVtcHR5U3VydmV5OiBcIk5lbWEgdmlkbGppdmloIHN0cmFuaWNhIGlsaSBwaXRhbmphIHUgYW5rZXRpLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIkh2YWxhIG5hIHBvcHVuamF2YW5qdSBhbmtldGUhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgICBcIlByZW1hIG5hxaFpbSBwb2RhY2ltYSwgdmXEhyBzdGUgcG9wdW5pbGkgb3Z1IGFua2V0dS5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJVxI1pdGF2YW0gYW5rZXR1Li4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIkl6YWJlcmkuLi5cIixcbiAgdmFsdWU6IFwidnJlZG5vc3RcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJNb2xpbW8gb2Rnb3Zvcml0ZSBuYSBvdm8gcGl0YW5qZS5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiTW9saW1vIG9kZ292b3JpdGUgbmEgYmFyIGplZG5vIHBpdGFuamUuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiTW9saW1vIG9kZ292b3JpdGUgbmEgcGl0YW5qYSB1IHN2aW0gcmVkb3ZpbWEuXCIsXG4gIG51bWVyaWNFcnJvcjogXCJWcmVkbm9zdCBiaSB0cmViYWxvIGRhIGJ1ZGUgbnVtZXJpxI1rYS5cIixcbiAgbWluRXJyb3I6IFwiVnJlZG5vc3QgbmUgYmkgdHJlYmFsbyBkYSBidWRlIG1hbmphIG9kIHswfVwiLFxuICBtYXhFcnJvcjogXCJWcmVkbm9zdCBuZSBiaSB0cmViYWxvIGRhIGJ1ZGUgdmXEh2Egb2QgezB9XCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiTW9saW1vIHVuZXNpdGUgYmFyIHswfSB6bmFrKG92KWEuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwiTW9saW1vIHVuZXNpdGUgbmFqdmnFoWUgezB9IHpuYWsob3YpYS5cIixcbiAgdGV4dE1pbk1heExlbmd0aDpcbiAgICAgIFwiTW9saW1vIHVuZXNpdGUgbmFqbWFuamUgezB9IGkgbmUgdmnFoWUgb2QgezF9IHpuYWsob3YpYS5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJNb2xpbW8gcG9wdW5pdGUgbmFqbWFuamUgezB9IHJlZChvdmEpLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJNb2xpbW8gaXphYmVyaXRlIG5ham1hbmplIHswfSBvcGNpamEvZS5cIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwiTW9saW1vIGl6YWJlcml0ZSBuYWp2acWhZSB7MH0gb3BjaWphL2UuXCIsXG4gIG51bWVyaWNNaW5NYXg6IFwiJ3swfScgYmkgdHJlYmFsbyBkYSBidWRlIG5ham1hbmplIHsxfSBpIG5hanZpxaFlIHsyfVwiLFxuICBudW1lcmljTWluOiBcIid7MH0nIGJpIHRyZWJhbG8gZGEgYnVkZSBuYWptYW5qZSB7MX1cIixcbiAgbnVtZXJpY01heDogXCInezB9JyBiaSB0cmViYWxvIGRhIGJ1ZGUgbmFqdmnFoWUgezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCJNb2xpbW8gdW5lc2l0ZSBpc3ByYXZudSBlLW1haWwgYWRyZXN1LlwiLFxuICAvLyB2cmF0aXRpIFwidHJ1ZVwiID9cbiAgaW52YWxpZEV4cHJlc3Npb246IFwiSXpyYXo6IHswfSBiaSB0cmViYWxvIGRhIGJ1ZGUgdGHEjWFuLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiWmFodGV2IGplIG5hacWhYW8gbmEgZ3JlxaFrdSAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICAgIFwiWmFodGV2IG5pamUgcHJvbmHFoWFvIHBvZGF0a2UsIGlsaSBqZSBwdXRhbmphIG5ldGHEjW5hXCIsXG4gIGV4Y2VlZE1heFNpemU6IFwiVmVsacSNaW5hIGZhamxhIG5lIGJpIHRyZWJhbG8gZGEgcHJlbGF6aSB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJNb2xpbW8gdW5lc2l0ZSBkcnVndSB2cmVkbm9zdC5cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICAgIFwiRmFqbCBzZSDFoWFsamUuIE1vbGltbyBzYcSNZWthanRlIG5la28gdnJlbWUgaSBwb2t1xaFhanRlIHBvbm92by5cIixcbiAgbG9hZGluZ0ZpbGU6IFwiVcSNaXRhdmFuamUuLi5cIixcbiAgY2hvb3NlRmlsZTogXCJJemFiZXJpdGUgZmFqbG92ZS4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiTmlqZSBpemFicmFuIG5pamVkYW4gZmFqbFwiLFxuICBjb25maXJtRGVsZXRlOiBcIkRhIGxpIMW+ZWxpdGUgZGEgaXpicmnFoWV0ZSB1bm9zP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIk92YSB2cmVkbm9zdCB0cmViYSBkYSBidWRlIGplZGluc3R2ZW5hLlwiLFxuICBhZGRDb2x1bW46IFwiRG9kYWoga29sb251XCIsXG4gIGFkZFJvdzogXCJEb2RhaiByZWRcIixcbiAgcmVtb3ZlUm93OiBcIlVrbG9uaVwiLFxuICBlbXB0eVJvd3NUZXh0OiBcIk5lbWEgcmVkb3ZhLlwiLFxuICBhZGRQYW5lbDogXCJEb2RhaiBub3ZvXCIsXG4gIHJlbW92ZVBhbmVsOiBcIlVrbG9uaVwiLFxuICBjaG9pY2VzX0l0ZW06IFwic3RhdmthXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiS29sb25hXCIsXG4gIG1hdHJpeF9yb3c6IFwiUmVkXCIsXG4gIG11bHRpcGxldGV4dF9pdGVtbmFtZTogXCJ0ZWtzdFwiLFxuICBzYXZpbmdEYXRhOiBcIlUgdG9rdSBqZSDEjXV2YW5qZSBwb2RhdGFrYSBuYSBzZXJ2ZXJ1Li4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJEb8WhbG8gamUgZG8gZ3JlxaFrZSBpIHJlenVsdGF0aSBuaXN1IHNhxI11dmFuaS5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiUmV6dWx0YXRpIHN1IHVzcGXFoW5vIHNhxI11dmFuaSFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIlBva3XFoWFqdGUgcG9ub3ZvXCIsXG4gIHRpbWVyTWluOiBcIm1pblwiLFxuICB0aW1lclNlYzogXCJzZWtcIixcbiAgdGltZXJTcGVudEFsbDogXCJQcm92ZWxpIHN0ZSB7MH0gbmEgb3ZvaiBzdHJhbmljaSBpIHsxfSB1a3Vwbm8uXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIlByb3ZlbGkgc3RlIHswfSBuYSBvdm9qIHN0cmFuaWNpLlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIlByb3ZlbGkgc3RlIHswfSB1a3Vwbm8uXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgICBcIlByb3ZlbGkgc3RlIHswfSBvZCB7MX0gbmEgb3ZvaiBzdHJhbmljaSBpIHsyfSBvZCB7M30gdWt1cG5vLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJQcm92ZWxpIHN0ZSB7MH0gb2QgezF9IG5hIG92b2ogc3RyYW5pY2kuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiUHJvdmVsaSBzdGUgezB9IG9kIHsxfSB1a3Vwbm8uXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCJPxI1pc3RpXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJQb25pxaF0aVwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJJemFiZXJpIGZhamxcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiVWtsb25pIG92YWogZmFqbFwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIkRhXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOZVwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJEYSBsaSBzdGUgc2lndXJuaSBkYSDFvmVsaXRlIGRhIHVrbG9uaXRlIG92YWogZmFqbDogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwiRGEgbGkgc3RlIHNpZ3VybmkgZGEgxb5lbGl0ZSBkYSB1a2xvbml0ZSBzdmUgZmFqbG92ZT9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIk5hc2xvdiBwaXRhbmphXCIsXG4gIG1vZGFsQ2FuY2VsQnV0dG9uVGV4dDogXCJPdGthxb5pXCIsXG4gIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIlByaW1lbmlcIixcbn07XG5cbi8vVW5jb21tZW50IHRoZXNlIHR3byBsaW5lcyBvbiBjcmVhdGluZyBhIHRyYW5zbGF0aW9uIGZpbGUuIFlvdSBzaG91bGQgcmVwbGFjZSBcImVuXCIgYW5kIGVuU3RyaW5ncyB3aXRoIHlvdXIgbG9jYWxlIChcImZyXCIsIFwiZGVcIiBhbmQgc28gb24pIGFuZCB5b3VyIHZhcmlhYmxlLlxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJyc1wiXSA9IHNlcmJpYW5TdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1wicnNcIl0gPSBcIlNycHNraVwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBzaW1wbGlmaWVkQ2hpbmVzZVN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCLkuIrkuIDpobVcIixcbiAgcGFnZU5leHRUZXh0OiBcIuS4i+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+W5raIXCIsXG4gIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIuehruWumlwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJ6aC1jblwiXSA9IHNpbXBsaWZpZWRDaGluZXNlU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcInpoLWNuXCJdID0gXCLnroDkvZPkuK3mlodcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgc3BhbmlzaFN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJBbnRlcmlvclwiLFxuICBwYWdlTmV4dFRleHQ6IFwiU2lndWllbnRlXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJDb21wbGV0YXJcIixcbiAgcHJldmlld1RleHQ6IFwiVmlzdGEgcHJldmlhXCIsXG4gIGVkaXRUZXh0OiBcIkVkaXRhXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJDb21pZW56YVwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIk90cm8gKGRlc2NyaWJhKVwiLFxuICBub25lSXRlbVRleHQ6IFwiTmluZ3Vub1wiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJTZWxlY2Npb25hciB0b2RvXCIsXG4gIHByb2dyZXNzVGV4dDogXCJQw6FnaW5hIHswfSBkZSB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIlJlZ2lzdHJvIHswfSBkZSB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIlJlc3BvbmRpw7MgYSB7MH0vezF9IHByZWd1bnRhc1wiLFxuICBlbXB0eVN1cnZleTogXCJObyBoYXkgcMOhZ2luYSB2aXNpYmxlIG8gcHJlZ3VudGEgZW4gbGEgZW5jdWVzdGEuXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXk6IFwiR3JhY2lhcyBwb3IgY29tcGxldGFyIGxhIGVuY3Vlc3RhIVwiLFxuICBjb21wbGV0aW5nU3VydmV5QmVmb3JlOlxuICAgIFwiTnVlc3Ryb3MgcmVnaXN0cm9zIG11ZXN0cmFuIHF1ZSB5YSBoYSBjb21wbGV0YWRvIGVzdGEgZW5jdWVzdGEuXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwiTGEgZW5jdWVzdGEgZXN0w6EgY2FyZ2FuZG8uLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiU2VsZWNjaW9uZS4uLlwiLFxuICB2YWx1ZTogXCJ2YWxvclwiLFxuICByZXF1aXJlZEVycm9yOiBcIlBvciBmYXZvciBjb250ZXN0ZSBsYSBwcmVndW50YS5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiUG9yIGZhdm9yLCByZXNwb25kYSBhbCBtZW5vcyB1bmEgcHJlZ3VudGEuXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwiUG9yIGZhdm9yIGNvbnRlc3RlIGxhcyBwcmVndW50YXMgZW4gY2FkYSBoaWxlcmEuXCIsXG4gIG51bWVyaWNFcnJvcjogXCJMYSBlc3RpbWFjacOzbiBkZWJlIHNlciBudW3DqXJpY2EuXCIsXG4gIG1pbkVycm9yOiBcIkxhIGVzdGltYWNpw7NuIG5vIGRlYmUgc2VyIG1lbm9yIHF1ZSB7MH1cIixcbiAgbWF4RXJyb3I6IFwiTGEgZXN0aW1hY2nDs24gbm8gZGViZSBzZXIgbWF5b3IgcXVlIHswfVwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIlBvciBmYXZvciBlbnRyZSBwb3IgbG8gbWVub3MgezB9IHPDrW1ib2xvcy5cIixcbiAgdGV4dE1heExlbmd0aDogXCJQb3IgZmF2b3IgZW50cmUgbWVub3MgZGUgezB9IHPDrW1ib2xvcy5cIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCJQb3IgZmF2b3IgZW50cmUgbcOhcyBkZSB7MH0geSBtZW5vcyBkZSB7MX0gc8OtbWJvbG9zLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIlBvciBmYXZvciBsbGVuZSBwb3IgbG8gbWVub3MgezB9IGhpbGVyYXMuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlBvciBmYXZvciBzZWxlY2Npb25lIHBvciBsbyBtZW5vcyB7MH0gdmFyaWFudGVzLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJQb3IgZmF2b3Igc2VsZWNjaW9uZSBubyBtw6FzIGRlIHswfSB2YXJpYW50ZXMuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCJFbCAnezB9JyBkZWJlIGRlIHNlciBpZ3VhbCBvIG3DoXMgZGUgezF9IHkgaWd1YWwgbyBtZW5vcyBkZSB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCJFbCAnezB9JyBkZWJlIHNlciBpZ3VhbCBvIG3DoXMgZGUgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiRWwgJ3swfScgZGViZSBzZXIgaWd1YWwgbyBtZW5vcyBkZSB7MX1cIixcbiAgaW52YWxpZEVtYWlsOiBcIlBvciBmYXZvciBhZ3JlZ3VlIHVuIGNvcnJlbyBlbGVjdHLDs25pY28gdsOhbGlkby5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiTGEgZXhwcmVzacOzbjogezB9IGRlYmVyw61hIGRldm9sdmVyICd2ZXJkYWRlcm8nLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiTGEgc29saWNpdHVkIHJlZ3Jlc8OzIGVycm9yICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiTGEgc29saWNpdHVkIHJlZ3Jlc8OzIHZhY8OtbyBkZSBkYXRhIG8gbGEgcHJvcGllZGFkICd0cmF5ZWN0b3JpYScgbm8gZXMgY29ycmVjdGFcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJFbCB0YW1hw7FvIGRlbCBhcmNoaXZvIG5vIGRlYmUgZGUgZXhjZWRlciB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJQb3IgZmF2b3IgYWdyZWd1ZSBsYSBvdHJhIGVzdGltYWNpw7NuLlwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwiU3UgYXJjaGl2byBzZSBlc3TDoSBzdWJpZW5kby4gUG9yIGZhdm9yIGVzcGVyZSB1bm9zIHNlZ3VuZG9zIGUgaW50ZW50ZSBkZSBudWV2by5cIixcbiAgbG9hZGluZ0ZpbGU6IFwiQ2FyZ2FuZG8uLi5cIixcbiAgY2hvb3NlRmlsZTogXCJFbGlqYSBhcmNoaXZvKHMpLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCJObyBzZSBoYSBlbGVnaWRvIG5pbmfDum4gYXJjaGl2b1wiLFxuICBjb25maXJtRGVsZXRlOiBcIsK/UXVpZXJlcyBib3JyYXIgZWwgcmVnaXN0cm8/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiRXN0ZSB2YWxvciBkZWJlIHNlciDDum5pY28uXCIsXG4gIGFkZENvbHVtbjogXCJBw7FhZGlyIGNvbHVtbmFcIixcbiAgYWRkUm93OiBcIkFncmVndWUgdW5hIGhpbGVyYVwiLFxuICByZW1vdmVSb3c6IFwiRWxpbWluYXIgdW5hIGhpbGVyYVwiLFxuICBlbXB0eVJvd3NUZXh0OiBcIk5vIGhheSBoaWxlcmFzLlwiLFxuICBhZGRQYW5lbDogXCJBw7FhZGlyIG51ZXZvXCIsXG4gIHJlbW92ZVBhbmVsOiBcIlJldGlyZVwiLFxuICBjaG9pY2VzX0l0ZW06IFwiYXJ0w61jdWxvXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiQ29sdW1uYVwiLFxuICBtYXRyaXhfcm93OiBcIkhpbGVyYVwiLFxuICBtdWx0aXBsZXRleHRfaXRlbW5hbWU6IFwidGV4dG9cIixcbiAgc2F2aW5nRGF0YTogXCJMb3MgcmVzdWx0YWRvcyBzZSBlc3TDoW4gZ3VhcmRhbmRvIGVuIGVsIHNlcnZpZG9yLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJMb3MgcmVzdWx0YWRvcyBzZSBlc3TDoW4gZ3VhcmRhbmRvIGVuIGVsIHNlcnZpZG9yLi4uXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIsKhTG9zIHJlc3VsdGFkb3Mgc2UgZ3VhcmRhcm9uIGNvbiDDqXhpdG8hXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJJbnTDqW50YWxvIGRlIG51ZXZvLlwiLFxuICB0aW1lck1pbjogXCJtaW5cIixcbiAgdGltZXJTZWM6IFwic2VjXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiSGFzIGdhc3RhZG8gezB9IGVuIGVzdGEgcMOhZ2luYSB5IHsxfSBlbiB0b3RhbC5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwiVXN0ZWQgaGEgcGFzYWRvIHswfSBlbiBlc3RhIHDDoWdpbmEuXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiSGFzIGdhc3RhZG8gZW4gdG90YWwuXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCJIYXMgZ2FzdGFkbyB7MH0gZGUgezF9IGVuIGVzdGEgcMOhZ2luYSB5IHsyfSBkZSB7M30gZW4gdG90YWwuXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIkhhcyBnYXN0YWRvIHswfSBkZSB7MX0gZW4gZXN0YSBww6FnaW5hLlwiLFxuICB0aW1lckxpbWl0U3VydmV5OiBcIlVzdGVkIGhhIGdhc3RhZG8gezB9IGRlIHsxfSBlbiB0b3RhbC5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIkxpbXBpYVwiLFxuICBjbGVhckNhcHRpb246IFwiRGVzcGVqZW5cIixcbiAgc2lnbmF0dXJlUGxhY2VIb2xkZXI6IFwiRmlybWEgYXF1aVwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJFbGlqYSBlbCBhcmNoaXZvXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIkVsaW1pbmEgZXN0ZSBhcmNoaXZvXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiU8OtXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOb1wiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCLCv0VzdMOhcyBzZWd1cm8gZGUgcXVlIHF1aWVyZXMgZWxpbWluYXIgZXN0ZSBhcmNoaXZvOiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCLCv0VzdMOhcyBzZWd1cm8gZGUgcXVlIHF1aWVyZXMgZWxpbWluYXIgdG9kb3MgbG9zIGFyY2hpdm9zP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiVMOtdHVsbyBkZSBsYSBwcmVndW50YVwiLFxuICBtb2RhbENhbmNlbEJ1dHRvblRleHQ6IFwiQW51bGFyXCIsXG4gIG1vZGFsQXBwbHlCdXR0b25UZXh0OiBcIkFwbGljYXJcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiZXNcIl0gPSBzcGFuaXNoU3VydmV5U3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcImVzXCJdID0gXCJlc3Bhw7FvbFwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciBzd2FoaWxpU3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIklsaXlvdGFuZ3VsaWFcIixcbiAgcGFnZU5leHRUZXh0OiBcIklmdWF0YXlvXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJLYW1pbGlcIixcbiAgcHJldmlld1RleHQ6IFwiSGFraWtpXCIsXG4gIGVkaXRUZXh0OiBcIkhhcmlyaVwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiQW56YVwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIk55aW5naW5lIChlbGV6YSlcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIkhha3VuYVwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJDaGFndWEgWm90ZVwiLFxuICBwcm9ncmVzc1RleHQ6IFwiVWt1cmFzYSB7MH0gd2EgezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJSZWtvZGkgezB9IHlhIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwiWWFsaXlvamliaXdhIHswfS97MX0gbWFzd2FsaVwiLFxuICBlbXB0eVN1cnZleTogXCJIYWt1bmEgdWt1cmFzYSB1bmFvb25la2FuYSBhdSBzd2FsaSBrYXRpa2EgdXRhZml0aS5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJBc2FudGkga3dhIGt1a2FtaWxpc2hhIHV0YWZpdGkhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCJSZWNvZGkgemV0dSB6aW5hdHVvbnllc2hhIHRheWFyaSB1bWVrYW1pbGlzaGEgdXRhZml0aS5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJUdW5hYW5kYWEgdXRhZml0aS4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJDaGFndWEuLi5cIixcbiAgdmFsdWU6IFwidGhhbWFuaVwiLFxuICByZXF1aXJlZEVycm9yOiBcIlRhZmFkaGFsaSBqaWJ1IGhpbGkgc3dhbGkuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIlRhZmFkaGFsaSBqaWJ1IHN3YWxpIGFuZ2FsYXUgbW9qYS5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJUYWZhZGhhbGkgamlidSBtYXN3YWxpIGthdGlrYSBzYWZ1IHpvdGUuXCIsXG4gIG51bWVyaWNFcnJvcjogXCJUaGFtYW5pIGluYXBhc3dhIGt1d2EgeWEgbmFtYmFyaS5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCJUYWZhZGhhbGkgaW5naXphIGFuZ2FsYXV7MH0gaHVzaWthLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIlRhZmFkaGFsaSBpbmdpemEgaXNpb3ppZGkgezB9IGh1c2lrYS5cIixcbiAgdGV4dE1pbk1heExlbmd0aDpcbiAgICBcIlRhZmFkaGFsaSBpbmdpemEga2l3YW5nbyB6YWlkaSB5YSB7MH0gbmEga2lzaWNob3B1bmd1YSB7MX0gaHVzaWthLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIlRhZmFkaGFsaSBqYXphIGlzaW9wdW5ndWEgezB9IHNhZnUuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlRhZmFkaGFsaSBjaGFndWEgYW5nYWxhdSB7MH0gbGFoYWphLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJUYWZhZGhhbGkgY2hhbmd1YSBpc2lvemlkaSB7MH0gbGFoYWphLlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiICd7MH0nIGluYXBhc3dhIGt1d2Egc2F3YSBhdSB6YWlkaSB5YSB7MX0gbmEgc2F3YSBhdSBjaGluaSB5YSB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCIgJ3swfSdpbmFwYXN3YSBrdXdhIHNhd2EgYXUgemFpZGkgeWEgezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiICd7MH0naW5hcGFzd2Ega3V3YSBzYXdhIGF1IGNoaW5pIHlhIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwiVGFmYWRoYWxpIGluZ2l6YSBhbndhbmkgaGFsYWxpIHlhIGJhcnVhLXBlcGUuXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIlVzZW1pOnswfSBpbmFwYXN3YSBrdXJ1ZGkgJ2t3ZWxpJy5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIk9tYmkgbGluYSBrb3NhICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiT21iaSBsaWxpcnVkaXNoYSBkYXRhIHR1cHUgYXUgdGhlICdwYXRoJyBtYWxpIHlhIG5qaWEgc2lvIHNhaGloaVwiLFxuICBleGNlZWRNYXhTaXplOiBcIlNhaXppIHlhIGZhaWxpIGhhaXBhc3dpIGt1emlkaSB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCJUYWZhZGhhbGkgaW5naXphIHRoYW1hbmkgbnlpbmdpbmUuXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCJGYWlsaSB5YWtvIGluYXBha2lhLlRhZmFkaGFsaSBzdWJpcmkgc2VrdW5kZSBrYWRoYWEgbmEgdWphcmlidSB0ZW5hLlwiLFxuICBsb2FkaW5nRmlsZTogXCJJbmFwYWtpYS4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIkNoYWd1YSBmYWlsaS4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiSHVqYWNoYWd1YSBmYWlsaVwiLFxuICBjb25maXJtRGVsZXRlOiBcIkplISBVbmF0YWthIGt1ZnV0YSByZWtvZGk/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiVGhhbWFuaSBoaWkgaW5hcGFzd2Ega3V3YSB5YSBraXBla2VlLlwiLFxuICBhZGRDb2x1bW46IFwiT25nZXphIEtvbGFtdVwiLFxuICBhZGRSb3c6IFwiT25nZXphIHNhZnVcIixcbiAgcmVtb3ZlUm93OiBcIlRvYVwiLFxuICBhZGRQYW5lbDogXCJPbmdlemEgbXB5YVwiLFxuICByZW1vdmVQYW5lbDogXCJUb2FcIixcbiAgY2hvaWNlc19JdGVtOiBcImtpdHVcIixcbiAgbWF0cml4X2NvbHVtbjogXCJLb2xhbXVcIixcbiAgbWF0cml4X3JvdzogXCJTYWZ1XCIsXG4gIHNhdmluZ0RhdGE6IFwiTWF0b2tlbyB5YW1laGlmYWRoaXdhIGt3YSBzZXZhLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJLb3NhIGxpbWV0b2tlYSBuYSBoYXR1a3V3ZXphIGt1aGlmYWRoaSBtYXRva2VvLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJNYXRva2VvIHlhbWVoaWZhZGhpd2EhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJKYXJpYnUgdGVuYVwiLFxuICB0aW1lck1pbjogXCJkYWtpa2FcIixcbiAgdGltZXJTZWM6IFwic2VrdW5kZVwiLFxuICB0aW1lclNwZW50QWxsOiBcIlVtZXR1bWlhIHswfSBrd2VueWUgdWt1cmFzYSBodXUgbmEgezF9IGt3YSBqdW1sYS5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwiVW1ldHVtaWEgezB9IGt3ZW55ZSB1a3VyYXNhIGh1dS5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJVbWV0dW1pYSB7MH0ga3dhIGp1bWxhLlwiLFxuICB0aW1lckxpbWl0QWxsOiBcIlVtZXR1bWlhIHswfSB5YSB7MX0ga3dlbnllIHVrdXJhc2EgaHV1IHsyfSB3YSB7M30ga3dhIGp1bWxhLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJVbWV0dW1pYSB7MH0geWEgezF9IGt3ZW55ZSB1a3VyYXNhIGh1dS5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCJVbWV0dW1pYSB7MH0geWEgezF9IGt3YSBqdW1sYS5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIlNhZmlzaGFcIixcbiAgY2xlYXJDYXB0aW9uOiBcIk9uZG9hXCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcIkNoYWd1YSBmYWlsaVwiLFxuICByZW1vdmVGaWxlQ2FwdGlvbjogXCJPbmRvYSBmYWlsaVwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIk5kaW9cIixcbiAgYm9vbGVhblVuY2hlY2tlZExhYmVsOiBcIkhhcGFuYVwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJKZSEgVW5hIHVoYWtpa2Ega3V3YSB1bmF0YWthIGt1b25kb2EgZmFpbGkgaGlpOiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJKZSEgVW5hIHVoYWtpa2Ega3V3YSB1bmF0YWthIGt1b25kb2EgZmFpbGkgem90ZT9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIktpY2h3YSBjaGEgU3dhbGlcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wic3dcIl0gPSBzd2FoaWxpU3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcInN3XCJdID0gXCJzd2FoaWxpXCI7XG4iLCIvL0NyZWF0ZSBieSBNYXR0aWFzIEFzcGx1bmRcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgc3dlZGlzaFN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJGw7ZyZWfDpWVuZGVcIixcbiAgcGFnZU5leHRUZXh0OiBcIk7DpHN0YVwiLFxuICBjb21wbGV0ZVRleHQ6IFwiRsOkcmRpZ1wiLFxuICBwcmV2aWV3VGV4dDogXCJGw7ZyaGFuZHN2aXNuaW5nXCIsXG4gIGVkaXRUZXh0OiBcIlJlZGlnZXJhXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJTdGFydFwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIkFubmF0IChiZXNrcml2KVwiLFxuICBub25lSXRlbVRleHQ6IFwiSW5nZW5cIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiVsOkbGogYWxsYVwiLFxuICBwcm9ncmVzc1RleHQ6IFwiU2lkYSB7MH0gYXYgezF9XCIsXG4gIHBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dDogXCJTcGVsYSBpbiB7MH0gYXYgezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCJCZXN2YXJhZGUgezB9IC8gezF9IGZyw6Vnb3JcIixcbiAgZW1wdHlTdXJ2ZXk6IFwiRGV0IGZpbm5zIGluZ2VuIHN5bmxpZyBzaWRhIGVsbGVyIGZyw6VnYSBpIGVua8OkdGVuLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIlRhY2sgZsO2ciBhdHQgZHUgZ2Vub21mw7ZydCBlbmvDpHRlbiEhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCJWw6VyYSByZWdpc3RlciB2aXNhciBhdHQgZHUgcmVkYW4gaGFyIHNsdXRmw7ZydCBkZW5uYSB1bmRlcnPDtmtuaW5nLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIkVua8OkdGVuIGxhZGRhcy4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJWw6Rsai4uLlwiLFxuICB2YWx1ZTogXCJ2w6RyZGVcIixcbiAgcmVxdWlyZWRFcnJvcjogXCJWYXIgdsOkbmxpZyBiZXN2YXJhIGZyw6VnYW4uXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcIlbDpG5saWdlbiBzdmFyYSBww6UgbWluc3QgZW4gZnLDpWdhLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlZhciB2w6RubGlnIGJlc3ZhcmEgZnLDpWdvcm5hIHDDpSBhbGxhIHJhZGVyLlwiLFxuICBudW1lcmljRXJyb3I6IFwiVsOkcmRldCBza2EgdmFyYSBudW1lcmlza3QuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiVmFyIHbDpG5saWcgYW5nZSBtaW5zdCB7MH0gdGVja2VuLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIkFuZ2UgZsOkcnJlIMOkbiB7MH0gdGVja2VuLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIkFuZ2UgbWVyIMOkbiB7MH0gb2NoIGbDpHJyZSDDpG4gezF9IHRlY2tlbi5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCJWYXIgdsOkbmxpZyBmeWxsIGkgbWluc3QgezB9IHJhZGVyLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJWYXIgdsOkbmxpZyB2w6RsaiDDpXRtaW5zdG9uZSB7MH0gdmFyaWFudGVyLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJWYXIgdsOkbmxpZyB2w6RsaiBpbnRlIGZsZXIgw6RuIHswfSB2YXJpYW50ZXIuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCInezB9JyBza2EgdmFyYSBsaWthIG1lZCBlbGxlciBtZXIgw6RuIHsxfSBzYW10IGxpa2EgbWVkIGVsbGVyIG1pbmRyZSDDpG4gezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiJ3swfScgc2thIHZhcmEgbGlrYSBtZWQgZWxsZXIgbWVyIMOkbiB7MX1cIixcbiAgbnVtZXJpY01heDogXCInezB9JyBza2EgdmFyYSBsaWthIG1lZCBlbGxlciBtaW5kcmUgw6RuIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwiVmFyIHbDpG5saWcgYW5nZSBlbiBrb3JyZWt0IGUtcG9zdGFkcmVzcy5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiVXR0cnlja2V0OiB7MH0gc2thIHJldHVybmVyYSAndHJ1ZScuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCJGw7ZyZnLDpWdhbiByZXR1cm5lcmFkZSBmZWxldCAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIkFudGluZ2VuIHJldHVybmVyYWRlIGbDtnJmcsOlZ2FuIGluZ2VuIGRhdGEgZWxsZXIgc8OlIMOkciBlZ2Vuc2thcGVuICdwYXRoJyBpbnRlIGtvcnJla3RcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJGaWxzdG9ybGVrZW4gZsOlciBlaiDDtnZlcnN0aWdhIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlZhciB2w6RubGlnIGFuZ2UgZGV0IGFuZHJhIHbDpHJkZXQuXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCJEaW4gZmlsIGxhZGRhcyB1cHAuIFZhciB2w6RubGlnIHbDpG50YSBuw6VncmEgc2VrdW5kZXIgb2NoIGbDtnJzw7ZrIHNlZGFuIGlnZW4uXCIsXG4gIGxvYWRpbmdGaWxlOiBcIkzDpHNlciBpbi4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIlbDpGxqIGZpbCAoZXIpIC4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiSW5nZW4gZmlsIHZhbGRcIixcbiAgY29uZmlybURlbGV0ZTogXCJWaWxsIGR1IHJhZGVyYSBwb3N0ZW4/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiRGV0dGEgdsOkcmRlIHNrYSB2YXJhIHVuaWt0LlwiLFxuICBhZGRDb2x1bW46IFwiTMOkZ2cgdGlsbCBrb2x1bW5cIixcbiAgYWRkUm93OiBcIkzDpGdnIHRpbGwgcmFkXCIsXG4gIHJlbW92ZVJvdzogXCJUYSBib3J0XCIsXG4gIGFkZFBhbmVsOiBcIkzDpGdnIHRpbGwgbnlcIixcbiAgcmVtb3ZlUGFuZWw6IFwiVGEgYm9ydFwiLFxuICBjaG9pY2VzX0l0ZW06IFwiQXJ0aWtlbFwiLFxuICBtYXRyaXhfY29sdW1uOiBcIktvbHVtblwiLFxuICBtYXRyaXhfcm93OiBcIlJhZFwiLFxuICBzYXZpbmdEYXRhOiBcIlJlc3VsdGF0ZW4gc3BhcmFzIHDDpSBzZXJ2ZXJuIC4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiRXR0IGZlbCBpbnRyw6RmZmFkZSBvY2ggdmkga3VuZGUgaW50ZSBzcGFyYSByZXN1bHRhdGVuLlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJSZXN1bHRhdGVuIHNwYXJhZGVzIGZyYW1nw6VuZ3NyaWt0IVwiLFxuICBzYXZlQWdhaW5CdXR0b246IFwiRsO2cnPDtmsgaWdlblwiLFxuICB0aW1lck1pbjogXCJtaW5cIixcbiAgdGltZXJTZWM6IFwic2VrXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiRHUgaGFyIHNwZW5kZXJhdCB7MH0gcMOlIGRlbiBow6RyIHNpZGFuIG9jaCB7MX0gdG90YWx0LlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJEdSBoYXIgc3BlbmRlcmF0IHswfSBww6UgZGVuIGjDpHIgc2lkYW4uXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwiRHUgaGFyIHNwZW5kZXJhdCB7MH0gdG90YWx0LlwiLFxuICB0aW1lckxpbWl0QWxsOlxuICAgIFwiRHUgaGFyIHNwZW5kZXJhdCB7MH0gYXYgezF9IHDDpSBkZW4gaMOkciBzaWRhbiBvY2ggezJ9IGF2IHszfSB0b3RhbHQuXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIkR1IGhhciBzcGVuZGVyYXQgezB9IGF2IHsxfSBww6UgZGVuIGjDpHIgc2lkYW4uXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiRHUgaGFyIHNwZW5kZXJhdCB7MH0gYXYgezF9IHRvdGFsdC5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIlJlbmFcIixcbiAgY2xlYXJDYXB0aW9uOiBcIktsYXJcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwiVsOkbGogRklMXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIlRhIGJvcnQgZGVuIGjDpHIgZmlsZW5cIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJKYVwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwiTmVqXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIsOEciBkdSBzw6RrZXIgcMOlIGF0dCBkdSB2aWxsIHRhIGJvcnQgZGVuIGjDpHIgZmlsZW46IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIsOEciBkdSBzw6RrZXIgcMOlIGF0dCBkdSB2aWxsIHRhIGJvcnQgYWxsYSBmaWxlcj9cIixcbiAgcXVlc3Rpb25UaXRsZVBhdHRlcm5UZXh0OiBcIkZyw6VnZXRpdGVsXCIsXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcInN2XCJdID0gc3dlZGlzaFN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJzdlwiXSA9IFwic3ZlbnNrYVwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciB0YWppa1N1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCLQkdC+0LfQs9Cw0YjRglwiLFxuICBwYWdlTmV4dFRleHQ6IFwi0J7Rj9C90LTQsFwiLFxuICBjb21wbGV0ZVRleHQ6IFwi0JjSt9GA0L4g0YjRg9C0XCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCLQntKT0L7Qt1wiLFxuICBvdGhlckl0ZW1UZXh0OiBcItCU0LjQs9Cw0YAgKNC70YPRgtGE0LDQvSDRgtCw0LLRgdC40YQg0LrRg9C90LXQtClcIixcbiAgbm9uZUl0ZW1UZXh0OiBcItCd0LVcIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwi0rLQsNC80LDRgNC+INC40L3RgtC40YXQvtCxINC60LDRgNC00LDQvVwiLFxuICBwcm9ncmVzc1RleHQ6IFwi0KHQsNKz0LjRhNCw0LggezB9INCw0LcgezF9XCIsXG4gIGVtcHR5U3VydmV5OiBcItCv0LPQvtC9INGB0LDQstC+0Lsg0LLRg9K30YPQtCDQvdCw0LTQvtGA0LDQtC5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCLQotCw0YjQsNC60LrRg9GAINCx0LDRgNC+0Lgg0L/Rg9GAINC60LDRgNC00LDQvdC4INGB0LDQstC+0LvQvdC+0LzQsCFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcItCo0YPQvNC+INCw0LvQu9Cw0LrQsNC5INC40L0g0L/Rg9GA0YHQuNGI0YDQviDQsNC90rfQvtC8INC00L7QtNCw0LXQtC5cIixcbiAgbG9hZGluZ1N1cnZleTogXCLQkdC+0YDQs9C40YDToyDQsNC3INGB0LXRgNCy0LXRgC4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCLQmNC90YLQuNGF0L7QsSDQutCw0YDQtNCw0L0uLi5cIixcbiAgdmFsdWU6IFwi0pvQuNC80LzQsNGCXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwi0JjQu9GC0LjQvNC+0YEsINCx0LAg0YHQsNCy0L7QuyDSt9Cw0LLQvtCxINC00LjSs9C10LQuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcItCY0LvRgtC40LzQvtGBLCDQsNKb0LDQu9Cw0L0g0LHQsCDRj9C6INGB0LDQstC+0Lsg0rfQsNCy0L7QsSDQtNC40rPQtdC0LlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcItCY0LvRgtC40LzQvtGBLCDQsdCwINKz0LDQvNCw0Lgg0YHQsNCy0L7Qu9Kz0L4g0LTQsNGAINKz0LDQvNCw0Lgg0YHQsNGC0YDSs9C+INK30LDQstC+0LEg0LTQuNKz0LXQtC5cIixcbiAgbnVtZXJpY0Vycm9yOiBcItK20LDQstC+0LEg0LHQvtGP0LQg0YDQsNKb0LDQvCDQsdC+0YjQsNC0LlwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcItCY0LvRgtC40LzQvtGBLCDQsNC3IHswfSDQt9C40ZHQtNGC0LDRgCDRgNCw0LzQtyDQstC+0YDQuNC0INC60YPQvdC10LQuXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwi0JjQu9GC0LjQvNC+0YEsINCw0LcgezB9INC60LDQvNGC0LDRgCDRgNCw0LzQtyDQstC+0YDQuNC0INC60YPQvdC10LQuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwi0JjQu9GC0LjQvNC+0YEsINCw0LcgezB9INC30LjRkdC00YLQsNGAINCy0LAg0LDQtyB7MX0g0LrQsNC80YLQsNGAINGA0LDQvNC3INCy0L7RgNC40LQg0LrRg9C90LXQtC5cIixcbiAgbWluUm93Q291bnRFcnJvcjogXCLQmNC70YLQuNC80L7RgSwg0L3QsCDQutCw0LzRgtCw0YAg0LDQtyB7MH0g0YHQsNGC0YAg0L/Rg9GAINC60YPQvdC10LQuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcItCY0LvRgtC40LzQvtGBLCDQsNKb0LDQu9Cw0L0gezB9INCy0LDRgNC40LDQvdGCINC40L3RgtC40YXQvtCxINC60YPQvdC10LQuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcItCY0LvRgtC40LzQvtGBLCDQvdCwINC30LjRkdC00YLQsNGAINCw0LcgezB9INCy0LDRgNC40LDQvdGCINC40L3RgtC40YXQvtCxINC60YPQvdC10LQuXCIsXG4gIG51bWVyaWNNaW5NYXg6XG4gICAgXCInezB9JyDQsdC+0Y/QtCDQvdCwINC60LDQvCDQsNC3IHsxfSDQstCwINC90LAg0LHQuNGB0ZHRgCDQsNC3IHsyfSDQsdC+0YjQsNC0XCIsXG4gIG51bWVyaWNNaW46IFwiJ3swfScg0LHQvtGP0LQg0L3QsCDQutCw0Lwg0LDQtyB7MX0g0LHQvtGI0LDQtFwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nINCx0L7Rj9C0INC90LAg0LfQuNGR0LQg0LDQtyB7MX0g0LHQvtGI0LDQtFwiLFxuICBpbnZhbGlkRW1haWw6IFwi0JjQu9GC0LjQvNC+0YEsINC/0L7Rh9GC0LDQuCDRjdC70LXQutGC0YDQvtC90LjQuCDQstC+0pvQtdC40YDQviDQstC+0YDQuNC0INC60YPQvdC10LQuXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcItCY0YTQvtC00LDQuCB7MH0g0LHQvtGP0LQgJ3RydWUnINCx0LDRgNCz0LDRgNC00L7QvdCw0LQuXCIsXG4gIHVybFJlcXVlc3RFcnJvcjogXCLQlNCw0YDRhdC+0YHRgiDRhdCw0YLQvtCz06Mg0LHQvtC30LPQsNGA0LTQvtC90LQgJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6XG4gICAgXCLSttCw0LLQvtCxINCx0LAg0LTQsNGA0YXQvtGB0YIg0YXQvtC706Mg0L7QvNCw0LQg0ZEg0YXQvtGB0LjRj9GC0LggJ3BhdGgnINC90L7QtNGD0YDRg9GB0YIg0LzRg9Cw0LnRj9C9INC60LDRgNC00LAg0YjRg9C00LDQsNGB0YJcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCLQkNC90LTQvtC30LDQuCDRhNCw0LnQuyDQsdC+0Y/QtCDQvdCwINC60LDQu9C+0L0g0LDQtyB7MH0g0LHQvtGI0LDQtC5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcItCY0LvRgtC40LzQvtGBLCDQsdCwINC80LDQudC00L7QvdC4ICfQlNC40LPQsNGAJyDQtNC+0LTQsNKz0L7RgNC+INCy0L7RgNC40LQg0LrRg9C90LXQtFwiLFxuICB1cGxvYWRpbmdGaWxlOlxuICAgIFwi0KTQsNC50LvQuCDRiNGD0LzQviDQsdC+0YAg0YjRg9C00LAg0LjRgdGC0L7QtNCw0LDRgdGCLiDQr9C60YfQsNC90LQg0YHQvtC90LjRjyDQuNC90YLQuNC30L7RgCDRiNCw0LLQtdC0INCy0LAg0LHQvtGA0Lgg0LTQuNCz0LDRgCDQutOv0YjQuNGIINC60YPQvdC10LQuXCIsXG4gIGxvYWRpbmdGaWxlOiBcItCR0L7RgNC60YPQvdOjLi4uXCIsXG4gIGNob29zZUZpbGU6IFwi0KTQsNC50Lso0rPQvikt0YDQviDQuNC90YLQuNGF0L7QsSDQutGD0L3QtdC0Li4uXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwi0KjRg9C80L4g0LzRg9GC0LzQsNC40L0g0rPQsNGB0YLQtdC0LCDQutC4INC80LXRhdC+0rPQtdC0INCy0L7RgNC40LTRgNC+INGC0L7Qt9CwINC60YPQvdC10LQ/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwi0JjQvSDQsNGA0LfQuNGIINCx0L7Rj9C0INCx0LXQvdCw0LfQuNGAINCx0L7RiNCw0LQuXCIsXG4gIGFkZENvbHVtbjogXCLQmNC70L7QstCw0Lgg0YHRg9GC0YPQvVwiLFxuICBhZGRSb3c6IFwi0JjQu9C+0LLQsNC4INGB0LDRgtGAXCIsXG4gIHJlbW92ZVJvdzogXCLQndC10YHRgiDQutCw0YDQtNCw0L1cIixcbiAgYWRkUGFuZWw6IFwi0JjQu9C+0LLQsCDQutCw0YDQtNCw0L1cIixcbiAgcmVtb3ZlUGFuZWw6IFwi0J3QtdGB0YIg0LrQsNGA0LTQsNC9XCIsXG4gIGNob2ljZXNfSXRlbTogXCLQktCw0YDQuNCw0L3RglwiLFxuICBtYXRyaXhfY29sdW1uOiBcItCh0YPRgtGD0L1cIixcbiAgbWF0cml4X3JvdzogXCLQodCw0YLRgFwiLFxuICBzYXZpbmdEYXRhOiBcItCd0LDRgtC40rfQsCDQsdCwINGB0LXRgNCy0LXRgCDRgdCw0LHRgiDRiNGD0LTQsCDQuNGB0YLQvtC00LDQsNC90LQuLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcItCl0LDRgtC+0LPToyDQsdCwINCw0LzQsNC7INC+0LzQsNC0LCDQvdCw0YLQuNK30LAg0YHQsNCx0YIg0L3QsNGI0YPQtC5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwi0J3QsNGC0LjSt9CwINCx0L7QvNGD0LLQsNGE0YTQsNC60LjRj9GCINGB0LDQsdGCINGI0YPQtCFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcItCR0L7RgNC4INC00LjQs9Cw0YAg0LrTr9GI0LjRiCDQutCw0YDQtNCw0L3QtFwiLFxuICB0aW1lck1pbjogXCLQtNCw0ptcIixcbiAgdGltZXJTZWM6IFwi0YHQvtC9XCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwi0KjRg9C80L4gezB9INC00LDRgCDQuNC9INGB0LDSs9C40YTQsCDQstCwIHsxfSDQtNCw0YAg0YPQvNGD0Lwg0YHQsNGA0YQg0LrQsNGA0LTQtdC0LlwiLFxuICB0aW1lclNwZW50UGFnZTogXCLQqNGD0LzQviB7MH0g0LTQsNGAINC40L0g0YHQsNKz0LjRhNCwINGB0LDRgNGEINC60LDRgNC00LXQtC5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCLQqNGD0LzQviB7MH0g0LTQsNGAINC40L0g0YLQtdGB0YIg0YHQsNGA0YQg0L3QsNC80YPQtNC10LQuXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCLQqNGD0LzQviB7MH0g0LDQtyB7MX0g0LTQsNGAINC40L0g0YHQsNKz0LjRhNCwINCy0LAgezJ9INCw0LcgezN9INC00LDRgCDRg9C80YPQvCDRgdCw0YDRhCDQutCw0YDQtNC10LQg0LTQsNGAINC00L7RhdC40LvQuCDQuNC9INGC0LXRgdGCLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCLQqNGD0LzQviB7MH0g0LDQtyB7MX0g0LTQsNGAINC40L0g0YHQsNKz0LjRhNCwINGB0LDRgNGEINC60LDRgNC00LXQtC5cIixcbiAgdGltZXJMaW1pdFN1cnZleTogXCLQqNGD0LzQviB7MH0g0LDQtyB7MX0g0LTQsNGAINKz0LDQvNCw0Lgg0YLQtdGB0YIg0YHQsNGA0YQg0LrQsNGA0LTQtdC0LlwiLFxuICBjbGVhbkNhcHRpb246IFwi0KLQvtC30LAg0LrQsNGA0LTQsNC9XCIsXG4gIGNsZWFyQ2FwdGlvbjogXCLQotC+0LfQsCDQutCw0YDQtNCw0L1cIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwi0KTQsNC50LvRgNC+INC90LXRgdGCINC60LDRgNC00LDQvVwiXG59O1xuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcInRnXCJdID0gdGFqaWtTdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1widGdcIl0gPSBcItGC0L7St9C40LrTo1wiO1xuIiwiLy9DcmVhdGVkIGJ5IFBhZGV0IFRhd2Vla3Vua2FuXG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIHRoYWlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwi4LiB4LmI4Lit4LiZ4Lir4LiZ4LmJ4LiyXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCLguJbguLHguJTguYTguJtcIixcbiAgY29tcGxldGVUZXh0OiBcIuC4quC4s+C5gOC4o+C5h+C4iFwiLFxuICBwcmV2aWV3VGV4dDogXCLguJTguLnguJXguLHguKfguK3guKLguYjguLLguIdcIixcbiAgZWRpdFRleHQ6IFwi4LmB4LiB4LmJ4LmE4LiCXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCLguYDguKPguLTguYjguKFcIixcbiAgb3RoZXJJdGVtVGV4dDogXCLguK3guLfguYjguJnguYYgKOC5guC4m+C4o+C4lOC4o+C4sOC4muC4uClcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIuC5hOC4oeC5iOC4oeC4tVwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCLguYDguKXguLfguK3guIHguJfguLHguYnguIfguKvguKHguJRcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIuC4q+C4meC5ieC4suC4l+C4teC5iCB7MH0g4LiI4Liy4LiBIHsxfVwiLFxuICBwYW5lbER5bmFtaWNQcm9ncmVzc1RleHQ6IFwi4Lij4Liy4Lii4LiB4Liy4Lij4LiX4Li14LmIIHswfSDguIjguLLguIEgezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCLguITguLPguJXguK3guJrguJfguLXguYggezB9L3sxfSDguIjguLPguJnguKfguJnguITguLPguJbguLLguKFcIixcbiAgZW1wdHlTdXJ2ZXk6IFwi4LmE4Lih4LmI4Lih4Li14Lir4LiZ4LmJ4Liy4LmA4Lie4LiI4LiX4Li14LmI4Lih4Lit4LiH4LmA4Lir4LmH4LiZIOC4q+C4o+C4t+C4rSDguITguLPguJbguLLguKHguYPguJkgc3VydmV5IOC4meC4teC5iVwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIuC4guC4reC4muC4hOC4uOC4k+C4l+C4teC5iOC4l+C4syBzdXJ2ZXkg4LiI4LiZ4LmA4Liq4Lij4LmH4LiIXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCLguKPguLLguKLguIHguLLguKPguILguK3guIfguYDguKPguLLguYHguKrguJTguIfguKfguYjguLLguITguLjguJPguYTguJTguYnguJfguLMgc3VydmV5IOC5gOC4quC4o+C5h+C4iOC5gOC4o+C4teC4ouC4muC4o+C5ieC4reC4ouC5geC4peC5ieC4p1wiLFxuICBsb2FkaW5nU3VydmV5OiBcIuC4geC4s+C4peC4seC4h+C5guC4q+C4peC4lCBTdXJ2ZXkuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwi4LmA4Lil4Li34Lit4LiBLi4uXCIsXG4gIHZhbHVlOiBcIuC4guC5ieC4reC4oeC4ueC4pVwiLFxuICByZXF1aXJlZEVycm9yOiBcIuC4geC4o+C4uOC4k+C4suC4leC4reC4muC4hOC4s+C4luC4suC4oVwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCLguIHguKPguLjguJPguLLguJXguK3guJrguILguLHguYnguJnguJXguYjguLPguKvguJnguLbguYjguIfguITguLPguJbguLLguKFcIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCLguIHguKPguLjguJPguLLguJXguK3guJrguITguLPguJbguLLguKHguYPguJnguJfguLjguIHguYbguYHguJbguKdcIixcbiAgbnVtZXJpY0Vycm9yOiBcIuC4guC5ieC4reC4oeC4ueC4peC4l+C4teC5iOC5g+C4quC5iOC4leC5ieC4reC4h+C5gOC4m+C5h+C4meC4leC4seC4p+C5gOC4peC4glwiLFxuICB0ZXh0TWluTGVuZ3RoOiBcIuC4geC4o+C4uOC4k+C4suC5g+C4quC5iOC4guC4seC5ieC4meC4leC5iOC4s+C4iOC4s+C4meC4p+C4mSB7MH0g4LiV4Lix4Lin4Lit4Lix4LiB4Lip4LijXCIsXG4gIHRleHRNYXhMZW5ndGg6IFwi4LiB4Lij4Li44LiT4Liy4LmD4Liq4LmI4LmE4Lih4LmI4LmA4LiB4Li04LiZ4LiI4Liz4LiZ4Lin4LiZIHswfSDguJXguLHguKfguK3guLHguIHguKnguKNcIixcbiAgdGV4dE1pbk1heExlbmd0aDogXCLguIHguKPguLjguJPguLLguYPguKrguYjguILguLHguYnguJnguJXguYjguLPguIjguLPguJnguKfguJkgezB9IOC5geC4peC4sOC5hOC4oeC5iOC5gOC4geC4tOC4meC4iOC4s+C4meC4p+C4mSB7MX0g4LiV4Lix4Lin4Lit4Lix4LiB4Lip4LijXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwi4LiB4Lij4Li44LiT4Liy4LmD4Liq4LmI4LiC4Lix4LmJ4LiZ4LiV4LmI4Liz4LiI4Liz4LiZ4Lin4LiZIHswfSDguYHguJbguKdcIixcbiAgbWluU2VsZWN0RXJyb3I6IFwi4LiB4Lij4Li44LiT4Liy4LmA4Lil4Li34Lit4LiB4Lit4Lii4LmI4Liy4LiH4LiZ4LmJ4Lit4LiiIHswfSDguKPguLLguKLguIHguLLguKNcIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwi4LiB4Lij4Li44LiT4Liy4LmA4Lil4Li34Lit4LiB4LmE4Lih4LmI4LmA4LiB4Li04LiZIHswfSDguKPguLLguKLguIHguLLguKNcIixcbiAgbnVtZXJpY01pbk1heDogXCInezB9JyDguJXguYnguK3guIfguKHguLLguIHguIHguKfguYjguLLguKvguKPguLfguK3guYDguJfguYjguLLguIHguLHguJogezF9IOC5geC4peC4sOC4meC5ieC4reC4ouC4geC4p+C5iOC4suC4q+C4o+C4t+C4reC5gOC4l+C5iOC4suC4geC4seC4miB7Mn1cIixcbiAgbnVtZXJpY01pbjogXCInezB9JyDguJXguYnguK3guIfguKHguLLguIHguIHguKfguYjguLLguKvguKPguLfguK3guYDguJfguYjguLLguIHguLHguJogezF9XCIsXG4gIG51bWVyaWNNYXg6IFwiJ3swfScg4LiZ4LmJ4Lit4Lii4LiB4Lin4LmI4Liy4Lir4Lij4Li34Lit4LmA4LiX4LmI4Liy4LiB4Lix4LiaIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwi4LiB4Lij4Li44LiT4Liy4LmD4Liq4LmI4Lit4Li14LmA4Lih4Lil4LmM4LmB4Lit4LiU4LmA4LiU4Lij4Liq4LiX4Li14LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiHXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIlRoZSBleHByZXNzaW9uOiB7MH0g4LiV4LmJ4Lit4LiH4Lij4Li14LmA4LiX4Li04Lij4LmM4LiZICd0cnVlJy5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIuC4o+C4teC5gOC4hOC4p+C4quC4o+C4teC5gOC4l+C4tOC4o+C5jOC4mSBlcnJvciAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcIuC4o+C4teC5gOC4hOC4p+C4quC4o+C4teC5gOC4l+C4tOC4o+C5jOC4meC4guC5ieC4reC4oeC4ueC4peC4p+C5iOC4suC4h+C5gOC4m+C4peC5iOC4siDguKvguKPguLfguK0gJ3BhdGgnIHByb3BlcnR5IOC5hOC4oeC5iOC4luC4ueC4geC4leC5ieC4reC4h1wiLFxuICBleGNlZWRNYXhTaXplOiBcIuC4guC4meC4suC4lOC5hOC4n+C4peC5jOC4leC5ieC4reC4h+C5hOC4oeC5iOC5gOC4geC4tOC4mSB7MH0uXCIsXG4gIG90aGVyUmVxdWlyZWRFcnJvcjogXCLguIHguKPguLjguJPguLLguYPguKrguYjguITguYjguLLguK3guLfguYjguJlcIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIuC5hOC4n+C4peC5jOC4guC4reC4h+C4hOC4uOC4k+C4geC4s+C4peC4seC4h+C4reC4seC4nuC5guC4q+C4peC4lOC4reC4ouC4ueC5iC4g4LiB4Lij4Li44LiT4Liy4Lij4Lit4Liq4Lix4LiB4LiE4Lij4Li54LmI4LmB4Lil4LmJ4Lin4LiX4Liz4LiB4Liy4Lij4Lil4Lit4LiH4Lit4Li14LiB4LiE4Lij4Lix4LmJ4LiHXCIsXG4gIGxvYWRpbmdGaWxlOiBcIuC4geC4s+C4peC4seC4h+C5guC4q+C4peC4lC4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIuC5gOC4peC4t+C4reC4geC5hOC4n+C4peC5jC4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwi4LmE4Lih4LmI4LmE4Lif4Lil4LmM4LiX4Li14LmI4LmA4Lil4Li34Lit4LiBXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwi4LiE4Li44LiT4LiV4LmJ4Lit4LiH4LiB4Liy4Lij4Lil4Lia4Lij4Liy4Lii4LiB4Liy4Lij4LiZ4Li14LmJ4LiI4Lij4Li04LiH4Lir4Lij4Li34Lit4LmE4Lih4LmIP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIuC4guC5ieC4reC4oeC4ueC4peC4meC4teC5ieC4leC5ieC4reC4h+C5gOC4m+C5h+C4mSB1bmlxdWUuXCIsXG4gIGFkZENvbHVtbjogXCLguYDguJ7guLTguYjguKHguITguK3guKXguLHguKHguJnguYxcIixcbiAgYWRkUm93OiBcIuC5gOC4nuC4tOC5iOC4oeC5geC4luC4p1wiLFxuICByZW1vdmVSb3c6IFwi4Lil4LiaXCIsXG4gIGFkZFBhbmVsOiBcIuC5gOC4nuC4tOC5iOC4oVwiLFxuICByZW1vdmVQYW5lbDogXCLguKXguJpcIixcbiAgY2hvaWNlc19JdGVtOiBcIuC4iuC4tOC5ieC4mVwiLFxuICBtYXRyaXhfY29sdW1uOiBcIuC4hOC4reC4peC4seC4oeC4meC5jFwiLFxuICBtYXRyaXhfcm93OiBcIuC5geC4luC4p1wiLFxuICBzYXZpbmdEYXRhOiBcIuC4nOC4peC4peC4seC4nuC4l+C5jOC4geC4s+C4peC4seC4h+C4muC4seC4meC4l+C4tuC4geC4peC4h+C4l+C4teC5iOC5gOC4i+C4tOC4o+C5jOC4n+C5gOC4p+C4reC4o+C5jC4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwi4Lih4Li14LiE4Lin4Liy4Lih4Lic4Li04LiU4Lie4Lil4Liy4LiU4LmA4LiB4Li04LiU4LiC4Li24LmJ4LiZ4Liq4LmI4LiH4Lic4Lil4LmD4Lir4LmJ4LmE4Lih4LmI4Liq4Liy4Lih4Liy4Lij4LiW4Lia4Lix4LiZ4LiX4Li24LiB4Lic4Lil4LmE4LiU4LmJXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIuC4muC4seC4meC4l+C4tuC4geC4quC4s+C5gOC4o+C5h+C4iOC5geC4peC5ieC4p1wiLFxuICBzYXZlQWdhaW5CdXR0b246IFwi4Lij4Lia4LiB4Lin4LiZ4Lil4Lit4LiH4Lit4Li14LiB4LiE4Lij4Lix4LmJ4LiHXCIsXG4gIHRpbWVyTWluOiBcIuC4meC4suC4l+C4tVwiLFxuICB0aW1lclNlYzogXCLguKfguLTguJnguLLguJfguLVcIixcbiAgdGltZXJTcGVudEFsbDogXCLguITguLjguJPguYPguIrguYnguYDguKfguKXguLIgezB9IOC4muC4meC4q+C4meC5ieC4suC4meC4teC5ieC5geC4peC4sCB7MX0g4Lij4Lin4Lih4LiX4Lix4LmJ4LiH4Lir4Lih4LiUXCIsXG4gIHRpbWVyU3BlbnRQYWdlOiBcIuC4hOC4uOC4k+C5g+C4iuC5ieC5gOC4p+C4peC4siB7MH0g4Lia4LiZ4Lir4LiZ4LmJ4Liy4LiZ4Li14LmJXCIsXG4gIHRpbWVyU3BlbnRTdXJ2ZXk6IFwi4LiE4Li44LiT4LmD4LiK4LmJ4LmA4Lin4Lil4LiyIHswfSDguKPguKfguKHguJfguLHguYnguIfguKvguKHguJRcIixcbiAgdGltZXJMaW1pdEFsbDogXCLguITguLjguJPguYPguIrguYnguYDguKfguKXguLIgezB9IOC4guC4reC4hyB7MX0g4Lia4LiZ4Lir4LiZ4LmJ4Liy4LiZ4Li14LmJ4LmB4Lil4LiwIHsyfSDguILguK3guIcgezN9IOC4o+C4p+C4oeC4l+C4seC5ieC4h+C4q+C4oeC4lFwiLFxuICB0aW1lckxpbWl0UGFnZTogXCLguITguLjguJPguYPguIrguYnguYDguKfguKXguLIgezB9IOC4guC4reC4hyB7MX0g4Lia4LiZ4Lir4LiZ4LmJ4Liy4LiZ4Li14LmJXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwi4LiE4Li44LiT4LmD4LiK4LmJ4LmA4Lin4Lil4LiyIHswfSDguILguK3guIcgezF9IOC4o+C4p+C4oeC4l+C4seC5ieC4h+C4q+C4oeC4lFwiLFxuICBjbGVhbkNhcHRpb246IFwi4LiE4Lil4Li14LiZXCIsXG4gIGNsZWFyQ2FwdGlvbjogXCLguYDguITguKXguLXguKLguKPguYxcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwi4LmA4Lil4Li34Lit4LiB4LmE4Lif4Lil4LmMXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIuC4meC4s+C5hOC4n+C4peC5jOC4meC4teC5ieC4reC4reC4gVwiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcIuC5g+C4iuC5iFwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwi4LmE4Lih4LmI4LmD4LiK4LmIXCIsXG4gIGNvbmZpcm1SZW1vdmVGaWxlOiBcIuC4hOC4uOC4k+C5geC4meC5iOC5g+C4iOC4l+C4teC5iOC4iOC4sOC4meC4s+C5hOC4n+C4peC5jOC4meC4teC5ieC4reC4reC4geC5g+C4iuC5iOC4q+C4o+C4t+C4reC5hOC4oeC5iDogezB9P1wiLFxuICBjb25maXJtUmVtb3ZlQWxsRmlsZXM6IFwi4LiE4Li44LiT4LmB4LiZ4LmI4LmD4LiI4LiX4Li14LmI4LiI4Liw4LiZ4Liz4LmE4Lif4Lil4LmM4LiX4Lix4LmJ4LiH4Lir4Lih4LiU4Lit4Lit4LiB4LmD4LiK4LmI4Lir4Lij4Li34Lit4LmE4Lih4LmIXCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCLguIrguLfguYjguK3guITguLPguJbguLLguKFcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1widGhcIl0gPSB0aGFpU3RyaW5ncztcbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVOYW1lc1tcInRoXCJdID0gXCLguYTguJfguKJcIjtcbiIsImltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgdHJhZGl0aW9uYWxDaGluZXNlU3VydmV5U3RyaW5ncyA9IHtcbiAgcGFnZVByZXZUZXh0OiBcIuS4iuS4gOmggVwiLFxuICBwYWdlTmV4dFRleHQ6IFwi5LiL5LiA6aCBXCIsXG4gIGNvbXBsZXRlVGV4dDogXCLmj5DkuqTllY/ljbdcIixcbiAgb3RoZXJJdGVtVGV4dDogXCLloavlr6vlhbbku5bnrZTmoYhcIixcbiAgcHJvZ3Jlc3NUZXh0OiBcIuesrCB7MH0g6aCBLCDlhbEgezF9IOmggVwiLFxuICBlbXB0eVN1cnZleTogXCLllY/ljbfkuK3mspLmnInllY/poYzmiJbpoIHpnaJcIixcbiAgY29tcGxldGluZ1N1cnZleTogXCLmhJ/orJ3mgqjnmoTlj4PoiIchXCIsXG4gIGxvYWRpbmdTdXJ2ZXk6IFwi5ZWP5Y236LyJ5YWl5LitLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIuiri+mBuOaThy4uLlwiLFxuICByZXF1aXJlZEVycm9yOiBcIuiri+Whq+Wvq+atpOWVj+mhjFwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIuiri+Whq+Wvq+aJgOacieihjOS4reWVj+mhjFwiLFxuICBudW1lcmljRXJyb3I6IFwi562U5qGI5b+F6aCI5piv5YCL5pW45a2XXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwi562U5qGI6ZW35bqm6Iez5bCRIHswfSDlgIvlrZflhYNcIixcbiAgdGV4dE1heExlbmd0aDogXCLnrZTmoYjplbfluqbkuI3og73otoXpgY4gezB9IOWAi+Wtl+WFg1wiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIuetlOahiOmVt+W6puW/hemgiOWcqCB7MH0gLSB7MX0g5YCL5a2X5YWD5LmL6ZaTXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwi5pyA5bCR6ZyA6KaB5aGr5a+rIHswfSDooYznrZTmoYhcIixcbiAgbWluU2VsZWN0RXJyb3I6IFwi5pyA5bCR6ZyA6KaB6YG45pOHIHswfSDpoIXnrZTmoYhcIixcbiAgbWF4U2VsZWN0RXJyb3I6IFwi5pyA5aSa5Y+q6IO96YG45pOHIHswfSDpoIXnrZTmoYhcIixcbiAgbnVtZXJpY01pbk1heDogXCLnrZTmoYggJ3swfScg5b+F6aCI5aSn5pa8562J5pa8IHsxfSDkuJTlsI/mlrznrYnmlrwgezJ9XCIsXG4gIG51bWVyaWNNaW46IFwi562U5qGIICd7MH0nIOW/hemgiOWkp+aWvOetieaWvCB7MX1cIixcbiAgbnVtZXJpY01heDogXCLnrZTmoYggJ3swfScg5b+F6aCI5bCP5pa8562J5pa8IHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwi6KuL6Ly45YWl5pyJ5pWI55qEIEVtYWlsIOWcsOWdgFwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwi6LyJ5YWl6YG46aCF5pmC55m855Sf6Yyv6KqkICd7MH0nOiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOiBcIuacquiDvei8ieWFpeacieaViOeahOmBuOmgheaIluiri+axguWPg+aVuOi3r+W+keacieiqpFwiLFxuICBleGNlZWRNYXhTaXplOiBcIuaWh+S7tuWkp+Wwj+S4jeiDvei2hemBjiB7MH1cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIuiri+WujOaIkOWFtuS7luWVj+mhjFwiLFxuICB1cGxvYWRpbmdGaWxlOiBcIuaWh+S7tuS4iuWCs+S4rS4uLiDoq4vogJDlv4PnrYnlvoXlub7np5Llvozph43oqaZcIixcbiAgYWRkUm93OiBcIua3u+WKoOetlOahiFwiLFxuICByZW1vdmVSb3c6IFwi5Yiq6Zmk562U5qGIXCIsXG4gIGNob2ljZXNfSXRlbTogXCLpgbjpoIVcIixcbiAgbWF0cml4X2NvbHVtbjogXCLliJdcIixcbiAgbWF0cml4X3JvdzogXCLooYxcIixcbiAgc2F2aW5nRGF0YTogXCLmraPlnKjlsIfntZDmnpzkv53lrZjliLDmnI3li5nlmaguLi5cIixcbiAgc2F2aW5nRGF0YUVycm9yOiBcIuWcqOS/neWtmOe1kOaenOmBjueoi+S4reeZvOeUn+S6humMr+iqpO+8jOe1kOaenOacquiDveS/neWtmFwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCLntZDmnpzkv53lrZjmiJDlip8hXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCLoq4vph43oqaZcIlxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJ6aC10d1wiXSA9IHRyYWRpdGlvbmFsQ2hpbmVzZVN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJ6aC10d1wiXSA9IFwi57mB6auU5Lit5paHXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIHR1cmtpc2hTdXJ2ZXlTdHJpbmdzID0ge1xuICBwYWdlUHJldlRleHQ6IFwiR2VyaVwiLFxuICBwYWdlTmV4dFRleHQ6IFwixLBsZXJpXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJBbmtldGkgVGFtYW1sYVwiLFxuICBwcmV2aWV3VGV4dDogXCLDlm4gaXpsZW1lXCIsXG4gIGVkaXRUZXh0OiBcIkTDvHplbmxlXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJCYcWfbGF0XCIsXG4gIG90aGVySXRlbVRleHQ6IFwiRGnEn2VyIChhw6fEsWtsYXnEsW7EsXopXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJZb2tcIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwiSGVwc2luaSBzZcOnXCIsXG4gIHByb2dyZXNzVGV4dDogXCJTYXlmYSB7MH0gLyB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIkthecSxdCB7MH0gLyB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIlNvcnVsYXLEsSBjZXZhcGxhZMSxIHswfSAvIHsxfVwiLFxuICBlbXB0eVN1cnZleTogXCJBbmtldHRlIGfDtnLDvG50w7xsZW5lY2VrIHNheWZhIHlhIGRhIHNvcnUgbWV2Y3V0IGRlxJ9pbC5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJBbmtldGltaXppIHRhbWFtbGFkxLHEn8SxbsSxeiBpw6dpbiB0ZcWfZWtrw7xyIGVkZXJpei5cIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcIkthecSxdGxhcsSxbcSxeiwgYnUgYW5rZXRpIHphdGVuIHRhbWFtbGFkxLHEn8SxbsSxesSxIGfDtnN0ZXJpeW9yLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcIkFua2V0IHN1bnVjdWRhbiB5w7xrbGVuaXlvciAuLi5cIixcbiAgb3B0aW9uc0NhcHRpb246IFwiU2XDp2luaXogLi4uXCIsXG4gIHZhbHVlOiBcImRlxJ9lclwiLFxuICByZXF1aXJlZEVycm9yOiBcIkzDvHRmZW4gc29ydXlhIGNldmFwIHZlcmluaXpcIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiTMO8dGZlbiBlbiBheiBiaXIgc29ydXl1IHlhbsSxdGxhecSxbi5cIixcbiAgcmVxdWlyZWRJbkFsbFJvd3NFcnJvcjogXCJMw7x0ZmVuIHTDvG0gc2F0xLFybGFyZGFraSBzb3J1bGFyxLEgY2V2YXBsYXnEsW7EsXouXCIsXG4gIG51bWVyaWNFcnJvcjogXCJHaXJpbGVuIGRlxJ9lciBudW1lcmlrIG9sbWFsxLFkxLFyXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiRW4gYXogezB9IHNlbWJvbCBnaXJpbml6LlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIkzDvHRmZW4gezB9IGthcmFrdGVyZGVuIGF6IGdpcmluLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIkzDvHRmZW4gezB9IOKAmWRlbiBmYXpsYSB2ZSB7MX0g4oCZZGVuIGF6IGthcmFrdGVyIGdpcmluLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIkzDvHRmZW4gZW4gYXogezB9IHNhdMSxcsSxIGRvbGR1cnVuLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJMw7x0ZmVuIGVuIGF6IHswfSBzZcOnZW5lxJ9pIHNlw6dpbml6LlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJMw7x0ZmVuIHswfSBhZGV0dGVuIGZhemxhIHNlw6dtZXlpbml6LlwiLFxuICBudW1lcmljTWluTWF4OlxuICAgIFwiVGhlICd7MH0nIHNob3VsZCBiZSBlcXVhbCBvciBtb3JlIHRoYW4gezF9IGFuZCBlcXVhbCBvciBsZXNzIHRoYW4gezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiJ3swfScgZGXEn2VyaSB7MX0gZGXEn2VyaW5lIGXFn2l0IHZleWEgYsO8ecO8ayBvbG1hbMSxZMSxclwiLFxuICBudW1lcmljTWF4OiBcIid7MH0nIGRlxJ9lcmkgezF9IGRlxJ9lcmluZSBlxZ9pdCB5YSBkYSBrw7zDp8O8ayBvbG1hbMSxZMSxci5cIixcbiAgaW52YWxpZEVtYWlsOiBcIkzDvHRmZW4gZ2XDp2VybGkgYmlyIGVwb3N0YSBhZHJlc2kgZ2lyaW5pei5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwixLBmYWRlOiB7MH0gJ3RydWUnIGTDtm5kw7xybWVsaWRpci5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcIlRhbGViaSDFn3UgaGF0YXnEsSBkw7ZuZMO8ICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiVGFsZXAgaGVyaGFuZ2kgYmlyIHZlcmkgZMO2bm1lZGkgeWEgZGEgJ3BhdGgnIMO2emVsbGnEn2kgaGF0YWzEsS5cIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJEb3N5YSBib3l1dHUgezB9IGRlxJ9lcmluaSBnZcOnZW1lei5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIkzDvHRmZW4gZGnEn2VyIGRlxJ9lcmxlcmkgZ2lyaW5pei5cIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcIkRvc3lhbsSxeiB5w7xrbGVuaXlvci4gTMOcdGZlbiBiaXJrYcOnIHNhbml5ZSBiZWtsZXlpbiB2ZSB0ZWtyYXIgZGVuZXlpbi5cIixcbiAgbG9hZGluZ0ZpbGU6IFwiWcO8a2xlbml5b3IuLi5cIixcbiAgY2hvb3NlRmlsZTogXCJEb3N5YWxhcsSxIHNlw6dpbiAuLi5cIixcbiAgbm9GaWxlQ2hvc2VuOiBcIkRvc3lhIHNlw6dpbGkgZGXEn2lsXCIsXG4gIGNvbmZpcm1EZWxldGU6IFwiS2F5ZMSxIHNpbG1layBpc3RpeW9yIG11c3VudXo/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiQnUgZGXEn2VyIGJlbnplcnNpeiBvbG1hbMSxZMSxci5cIixcbiAgYWRkQ29sdW1uOiBcIlPDvHR1biBla2xleWluXCIsXG4gIGFkZFJvdzogXCJTYXTEsXIgRWtsZVwiLFxuICByZW1vdmVSb3c6IFwiS2FsZMSxclwiLFxuICBhZGRQYW5lbDogXCJZZW5pIGVrbGVcIixcbiAgcmVtb3ZlUGFuZWw6IFwiS2FsZMSxcm1ha1wiLFxuICBjaG9pY2VzX0l0ZW06IFwiZcWfeWFcIixcbiAgbWF0cml4X2NvbHVtbjogXCJTw7x0dW5cIixcbiAgbWF0cml4X3JvdzogXCJLw7xyZWsgw6dla21la1wiLFxuICBzYXZpbmdEYXRhOiBcIlNvbnXDp2xhciBzdW51Y3V5YSBrYXlkZWRpbGl5b3IgLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJCaXIgaGF0YSBvbHXFn3R1IHZlIHNvbnXDp2xhcsSxIGtheWRlZGVtZWRpay5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwiU29udcOnbGFyIGJhxZ9hcsSxeWxhIGtheWRlZGlsZGkhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJUZWtyYXIgZGVuZXlpblwiLFxuICB0aW1lck1pbjogXCJtaW5cIixcbiAgdGltZXJTZWM6IFwic2FuaXllXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiQnUgc2F5ZmFkYSB7MH0gdmUgdG9wbGFtZGEgezF9IGhhcmNhZMSxbsSxei5cIixcbiAgdGltZXJTcGVudFBhZ2U6IFwiQnUgc2F5ZmF5YSB7MH0gaGFyY2FkxLFuxLF6LlwiLFxuICB0aW1lclNwZW50U3VydmV5OiBcIlRvcGxhbWRhIHswfSBoYXJjYWTEsW7EsXouXCIsXG4gIHRpbWVyTGltaXRBbGw6XG4gICAgXCJCdSBzYXlmYXlhIHswfSAvIHsxfSB2ZSB0b3BsYW1kYSB7Mn0gLyB7M30gaGFyY2FkxLFuxLF6LlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCJCdSBzYXlmYXlhIHswfSAvIHsxfSBoYXJjYWTEsW7EsXouXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiVG9wbGFtZGEgezB9IC8gezF9IGhhcmNhZMSxbsSxei5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIlRlbWl6XCIsXG4gIGNsZWFyQ2FwdGlvbjogXCJBw6fEsWtcIixcbiAgY2hvb3NlRmlsZUNhcHRpb246IFwiRG9zeWEgc2XDp2luXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIkJ1IGRvc3lhecSxIGthbGTEsXJcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJFdmV0XCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJIYXnEsXJcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiQnUgZG9zeWF5xLEga2FsZMSxcm1hayBpc3RlZGnEn2luaXpkZW4gZW1pbiBtaXNpbml6OiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCJUw7xtIGRvc3lhbGFyxLEga2FsZMSxcm1hayBpc3RlZGnEn2luaXpkZW4gZW1pbiBtaXNpbml6P1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiU29ydSBiYcWfbMSxxJ/EsVwiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJ0clwiXSA9IHR1cmtpc2hTdXJ2ZXlTdHJpbmdzO1xuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZU5hbWVzW1widHJcIl0gPSBcInTDvHJrw6dlXCI7XG4iLCJpbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi4vc3VydmV5U3RyaW5nc1wiO1xuXG5leHBvcnQgdmFyIHVrcmFpbmlhblN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCLQndCw0LfQsNC0XCIsXG4gIHBhZ2VOZXh0VGV4dDogXCLQlNCw0LvRllwiLFxuICBjb21wbGV0ZVRleHQ6IFwi0JfQsNCy0LXRgNGI0LjRgtC4XCIsXG4gIHByZXZpZXdUZXh0OiBcItCf0L7Qv9C10YDQtdC00L3RltC5INC/0LXRgNC10LPQu9GP0LRcIixcbiAgZWRpdFRleHQ6IFwi0KDQtdC00LDQs9GD0LLQsNGC0LhcIixcbiAgc3RhcnRTdXJ2ZXlUZXh0OiBcItCf0L7Rh9Cw0YLQuFwiLFxuICBvdGhlckl0ZW1UZXh0OiBcItCG0L3RiNC1ICjQsdGD0LTRjCDQu9Cw0YHQutCwLCDQvtC/0LjRiNGW0YLRjClcIixcbiAgbm9uZUl0ZW1UZXh0OiBcItCW0L7QtNC10L1cIixcbiAgc2VsZWN0QWxsSXRlbVRleHQ6IFwi0JLQuNCx0YDQsNGC0Lgg0LLRgdC1XCIsXG4gIHByb2dyZXNzVGV4dDogXCLQodGC0L7RgNGW0L3QutCwIHswfSDQtyB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcItCX0LDQv9C40YEgezB9INGW0LcgezF9XCIsXG4gIHF1ZXN0aW9uc1Byb2dyZXNzVGV4dDogXCLQktGW0LTQv9C+0LLRltC70Lgg0L3QsCB7MH0vezF9INC/0LjRgtCw0L3RjFwiLFxuICBlbXB0eVN1cnZleTogXCLQndC10LzQsNGUINC20L7QtNC90L7Qs9C+INC/0LjRgtCw0L3QvdGPLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcItCU0Y/QutGD0ZTQvNC+INCS0LDQvCDQt9CwINC30LDQv9C+0LLQvdC10L3QvdGPINCw0L3QutC10YLQuCFcIixcbiAgY29tcGxldGluZ1N1cnZleUJlZm9yZTpcbiAgICBcItCS0Lgg0LLQttC1INC/0YDQvtGF0L7QtNC40LvQuCDRhtC1INC+0L/QuNGC0YPQstCw0L3QvdGPLlwiLFxuICBsb2FkaW5nU3VydmV5OiBcItCX0LDQstCw0L3RgtCw0LbQtdC90L3RjyDQvtC/0LjRgtGD0LLQsNC90L3Rjy4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCLQktC40LHRgNCw0YLQuC4uLlwiLFxuICB2YWx1ZTogXCLQt9C90LDRh9C10L3QvdGPXCIsXG4gIHJlcXVpcmVkRXJyb3I6IFwi0JHRg9C00Ywg0LvQsNGB0LrQsCwg0LTQsNC50YLQtSDQstGW0LTQv9C+0LLRltC00YwuXCIsXG4gIHJlcXVpcmVkRXJyb3JJblBhbmVsOiBcItCR0YPQtNGMINC70LDRgdC60LAsINC00LDQudGC0LUg0LLRltC00L/QvtCy0ZbQtNGMINGF0L7Rh9CwINCxINC90LAg0L7QtNC90LUg0L/QuNGC0LDQvdC90Y8uXCIsXG4gIHJlcXVpcmVkSW5BbGxSb3dzRXJyb3I6IFwi0JHRg9C00Ywg0LvQsNGB0LrQsCwg0LTQsNC50YLQtSDQstGW0LTQv9C+0LLRltC00Ywg0L3QsCDQv9C40YLQsNC90L3RjyDQsiDQutC+0LbQvdC+0LzRgyDRgNGP0LTQutGDLlwiLFxuICBudW1lcmljRXJyb3I6IFwi0JLRltC00L/QvtCy0ZbQtNGMINC/0L7QstC40L3QvdCwINCx0YPRgtC4INGH0LjRgdC70L7QvC5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCLQkdGD0LTRjCDQu9Cw0YHQutCwINCy0LLQtdC00ZbRgtGMINCx0ZbQu9GM0YjQtSB7MH0g0YHQuNC80LLQvtC70ZbQsi5cIixcbiAgdGV4dE1heExlbmd0aDogXCLQkdGD0LTRjCDQu9Cw0YHQutCwINCy0LLQtdC00ZbRgtGMINC80LXQvdGI0LUgezB9INGB0LjQvNCy0L7Qu9GW0LIuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwi0JHRg9C00Ywg0LvQsNGB0LrQsCDQstCy0LXQtNGW0YLRjCDQsdGW0LvRjNGI0LUgezB9INC4INC80LXQvdGI0LUgezF9INGB0LjQvNCy0L7Qu9GW0LIuXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwi0JHRg9C00Ywg0LvQsNGB0LrQsCwg0LfQsNC/0L7QstC90ZbRgtGMINC90LUg0LzQtdC90YjQtSB7MH0g0YDRj9C00LrRltCyLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCLQkdGD0LTRjCDQu9Cw0YHQutCwLCDQstC40LHQtdGA0ZbRgtGMINGF0L7Rh9CwINCxIHswfSDQstCw0YDRltCw0L3RgtGW0LIuXCIsXG4gIG1heFNlbGVjdEVycm9yOiBcItCR0YPQtNGMINC70LDRgdC60LAsINCy0LjQsdC10YDRltGC0Ywg0L3QtSDQsdGW0LvRjNGI0LUgezB9INCy0LDRgNGW0LDQvdGC0ZbQsi5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIid7MH0nINC/0L7QstC40L3QvdC+INCx0YPRgtC4INC90LUg0LzQtdC90YjQtSDQvdGW0LYgezF9LCDRliDQvdC1INCx0ZbQu9GM0YjQtSDQvdGW0LYgezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiJ3swfScg0L/QvtCy0LjQvdC90L4g0LHRg9GC0Lgg0L3QtSDQvNC10L3RiNC1INC90ZbQtiB7MX1cIixcbiAgbnVtZXJpY01heDogXCInezB9JyDQv9C+0LLQuNC90L3QviDQsdGD0YLQuCDQvdC1INCx0ZbQu9GM0YjQtSDQvdGW0LYgezF9XCIsXG4gIGludmFsaWRFbWFpbDogXCLQkdGD0LTRjCDQu9Cw0YHQutCwLCDQstCy0LXQtNGW0YLRjCDQtNGW0LnRgdC90YMg0LDQtNGA0LXRgdGDINC10LvQtdC60YLRgNC+0L3QvdC+0Zcg0L/QvtGI0YLQuC5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwi0JLQuNGA0LDQtyB7MH0g0L/QvtCy0LjQvdC10L0g0L/QvtCy0LXRgNGC0LDRgtC4ICd0cnVlJy5cIixcbiAgdXJsUmVxdWVzdEVycm9yOiBcItCX0LDQv9C40YIg0L/QvtCy0LXRgNC90YPQsiDQv9C+0LzQuNC70LrRgyAnezB9Jy4gezF9XCIsXG4gIHVybEdldENob2ljZXNFcnJvcjpcbiAgICBcItCS0ZbQtNC/0L7QstGW0LTRjCDQvdCwINC30LDQv9C40YIg0L/QvtCy0LXRgNC90YPQu9Cw0YHRjCDQv9C+0YDQvtC20L3RjNC+0Y4g0LDQsdC+INCy0LvQsNGB0YLQuNCy0ZbRgtGMICdwYXRoJyDQstC60LDQt9Cw0L3QviDQvdC10LLRltGA0L3QvlwiLFxuICBleGNlZWRNYXhTaXplOiBcItCg0L7Qt9C80ZbRgCDRhNCw0LnQu9GDINC90LUg0L/QvtCy0LjQvdC10L0g0L/QtdGA0LXQstC40YnRg9Cy0LDRgtC4IHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcItCR0YPQtNGMINC70LDRgdC60LAsINCy0LLQtdC00ZbRgtGMINC00LDQvdGWINCyINC/0L7Qu9C1ICfQhtC90YjQtSdcIixcbiAgdXBsb2FkaW5nRmlsZTpcbiAgICBcItCS0LDRiCDRhNCw0LnQuyDQt9Cw0LLQsNC90YLQsNC20YPRlNGC0YzRgdGPLiDQl9Cw0YfQtdC60LDQudGC0LUg0LTQtdC60ZbQu9GM0LrQsCDRgdC10LrRg9C90LQg0ZYg0YHQv9GA0L7QsdGD0LnRgtC1INC30L3QvtCy0YMuXCIsXG4gIGxvYWRpbmdGaWxlOiBcItCX0LDQstCw0L3RgtCw0LbQtdC90L3Rjy4uLlwiLFxuICBjaG9vc2VGaWxlOiBcItCS0LjQsdC10YDRltGC0Ywg0YTQsNC50Lso0LgpLi4uXCIsXG4gIG5vRmlsZUNob3NlbjogXCLQpNCw0LnQuyDQvdC1INCy0LjQsdGA0LDQvdC+XCIsXG4gIGNvbmZpcm1EZWxldGU6IFwi0JLQuCDRhdC+0YfQtdGC0LUg0LLQuNC00LDQu9C40YLQuCDQt9Cw0L/QuNGBP1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcItCm0LUg0LfQvdCw0YfQtdC90L3RjyDQv9C+0LLQuNC90L3QviDQsdGD0YLQuCDRg9C90ZbQutCw0LvRjNC90LjQvC5cIixcbiAgYWRkQ29sdW1uOiBcItCU0L7QtNCw0YLQuCDQutC+0LvQvtC90LrRg1wiLFxuICBhZGRSb3c6IFwi0JTQvtC00LDRgtC4INGA0Y/QtNC+0LpcIixcbiAgcmVtb3ZlUm93OiBcItCS0LjQtNCw0LvQuNGC0LhcIixcbiAgYWRkUGFuZWw6IFwi0JTQvtC00LDRgtC4INC90L7QstGDXCIsXG4gIHJlbW92ZVBhbmVsOiBcItCS0LjQtNCw0LvQuNGC0LhcIixcbiAgY2hvaWNlc19JdGVtOiBcItCS0LDRgNGW0LDQvdGCXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwi0JrQvtC70L7QvdC60LBcIixcbiAgbWF0cml4X3JvdzogXCLQoNGP0LTQvtC6XCIsXG4gIHNhdmluZ0RhdGE6IFwi0KDQtdC30YPQu9GM0YLQsNGC0Lgg0LfQsdC10YDRltCz0LDRjtGC0YzRgdGPINC90LAg0YHQtdGA0LLQtdGALi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCLQktGW0LTQsdGD0LvQsNGB0Y8g0L/QvtC80LjQu9C60LAsINGA0LXQt9GD0LvRjNGC0LDRgiDQvdC1INCx0YPQsiDQt9Cx0LXRgNC10LbQtdC90LjQuS5cIixcbiAgc2F2aW5nRGF0YVN1Y2Nlc3M6IFwi0KDQtdC30LLRg9C70YzRgtCw0YIg0YPRgdC/0ZbRiNC90L4g0LfQsdC10YDQtdC20LXQvdC40LkhXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCLQodC/0YDQvtCx0YPQstCw0YLQuCDQt9C90L7QstGDXCIsXG4gIHRpbWVyTWluOiBcItGF0LJcIixcbiAgdGltZXJTZWM6IFwi0YHQtdC6XCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwi0JLQuCDQstC40YLRgNCw0YLQuNC70LggezB9INC90LAg0YbRltC5INGB0YLQvtGA0ZbQvdGG0ZYg0ZYgezF9INC30LDQs9Cw0LvQvtC8LlwiLFxuICB0aW1lclNwZW50UGFnZTogXCLQktC4INCy0LjRgtGA0LDRgtC40LvQuCB7MH0g0L3QsCDRhtGW0Lkg0YHRgtC+0YDRltC90YbRli5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCLQktC4INCy0LjRgtGA0LDRgtC40LvQuCB7MH0g0L/RgNC+0YLRj9Cz0L7QvCDRgtC10YHRgtGDLlwiLFxuICB0aW1lckxpbWl0QWxsOlxuICAgIFwi0JLQuCDQstC40YLRgNCw0YLQuNC70LggezB9INC3IHsxfSDQvdCwINGG0ZbQuSDRgdGC0L7RgNGW0L3RhtGWINGWIHsyfSDQtyB7M30g0LTQu9GPINCy0YHRjNC+0LPQviDRgtC10YHRgtGDLlwiLFxuICB0aW1lckxpbWl0UGFnZTogXCLQktC4INCy0LjRgtGA0LDRgtC40LvQuCB7MH0g0LcgezF9INC90LAg0YbRltC5INGB0YLQvtGA0ZbQvdGG0ZYuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwi0JLQuCDQstC40YLRgNCw0YLQuNC70LggezB9INC3IHsxfSDQtNC70Y8g0LLRgdGM0L7Qs9C+INGC0LXRgdGC0YMuXCIsXG4gIGNsZWFuQ2FwdGlvbjogXCLQntGH0LjRgdGC0LjRgtC4XCIsXG4gIGNsZWFyQ2FwdGlvbjogXCLQntGH0LjRgdGC0LjRgtC4XCIsXG4gIGNob29zZUZpbGVDYXB0aW9uOiBcItCS0LjQsdC10YDRltGC0Ywg0YTQsNC50LtcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwi0JLQuNC00LDQu9C40YLQuCDRhNCw0LnQu1wiLFxuICBib29sZWFuQ2hlY2tlZExhYmVsOiBcItCi0LDQulwiLFxuICBib29sZWFuVW5jaGVja2VkTGFiZWw6IFwi0J3RllwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCLQktC4INCy0L/QtdCy0L3QtdC90ZYsINGJ0L4g0YXQvtGH0LXRgtC1INCy0LjQtNCw0LvQuNGC0Lgg0YbQtdC5INGE0LDQudC7OiB7MH0/XCIsXG4gIGNvbmZpcm1SZW1vdmVBbGxGaWxlczogXCLQktC4INCy0L/QtdCy0L3QtdC90ZYsINGJ0L4g0YXQvtGH0LXRgtC1INCy0LjQtNCw0LvQuNGC0Lgg0LLRgdGWINGE0LDQudC70Lg/XCIsXG4gIHF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dDogXCLQndCw0LfQstCwINC30LDQv9C40YLQsNC90L3Rj1wiLFxufTtcblxuc3VydmV5TG9jYWxpemF0aW9uLmxvY2FsZXNbXCJ1YVwiXSA9IHVrcmFpbmlhblN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJ1YVwiXSA9IFwi0YPQutGA0LDRl9C90YHRjNC60LBcIjtcbiIsIi8vVW5jb21tZW50IHRoaXMgbGluZSBvbiBjcmVhdGluZyBhIHRyYW5zbGF0aW9uIGZpbGVcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuLi9zdXJ2ZXlTdHJpbmdzXCI7XG5cbmV4cG9ydCB2YXIgdmlldG5hbWVzZVN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJUcuG7nyB24buBXCIsXG4gIHBhZ2VOZXh0VGV4dDogXCJUaeG6v3AgdGhlb1wiLFxuICBjb21wbGV0ZVRleHQ6IFwiSG/DoG4gdGjDoG5oXCIsXG4gIHByZXZpZXdUZXh0OiBcIlhlbSB0csaw4bubY1wiLFxuICBlZGl0VGV4dDogXCJDaOG7iW5oIHPhu61hXCIsXG4gIHN0YXJ0U3VydmV5VGV4dDogXCJC4bqvdCDEkeG6p3VcIixcbiAgb3RoZXJJdGVtVGV4dDogXCJLaMOhYyAobcO0IHThuqMpXCIsXG4gIG5vbmVJdGVtVGV4dDogXCJUcuG7kW5nXCIsXG4gIHNlbGVjdEFsbEl0ZW1UZXh0OiBcIkNo4buNbiB04bqldCBj4bqjXCIsXG4gIHByb2dyZXNzVGV4dDogXCJUcmFuZyB7MH0gLyB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIkTDsm5nIHswfSAvIHsxfVwiLFxuICBxdWVzdGlvbnNQcm9ncmVzc1RleHQ6IFwixJDDoyB0cuG6oyBs4budaSB7MH0vezF9IGPDonUgaOG7j2lcIixcbiAgZW1wdHlTdXJ2ZXk6IFwiS2jDtG5nIGPDsyB0cmFuZyBob+G6t2MgY8OidSBo4buPaSBuw6BvIMSRxrDhu6NjIGhp4buDbiB0aOG7iyB0cm9uZyBjdeG7mWMga2jhuqNvIHPDoXQgbsOgeS5cIixcbiAgY29tcGxldGluZ1N1cnZleTogXCJD4bqjbSDGoW4gxJHDoyBob8OgbiB0aMOgbmgga2jhuqNvIHPDoXQhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6XG4gICAgXCJI4buTIHPGoSBjaMO6bmcgdMO0aSBjaG8gdGjhuqV5IHLhurFuZyBi4bqhbiDEkcOjIGhvw6BuIHRow6BuaCBjdeG7mWMga2jhuqNvIHPDoXQgbsOgeS5cIixcbiAgbG9hZGluZ1N1cnZleTogXCLEkGFuZyB04bqjaSBraOG6o28gc8OhdC4uLlwiLFxuICBvcHRpb25zQ2FwdGlvbjogXCJDaOG7jW4uLi5cIixcbiAgdmFsdWU6IFwiR2nDoSB0cuG7i1wiLFxuICByZXF1aXJlZEVycm9yOiBcIlZ1aSBsw7JuZyB0cuG6oyBs4budaSBjw6J1IGjhu49pLlwiLFxuICByZXF1aXJlZEVycm9ySW5QYW5lbDogXCJWdWkgbMOybmcgdHLhuqMgbOG7nWkgw610IG5o4bqldCBt4buZdCBjw6J1IGjhu49pLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIlZ1aSBsw7JuZyB0cuG6oyBs4budaSBjw6FjIGPDonUgaOG7j2kgdHLDqm4gdOG6pXQgY+G6oyBjw6FjIGTDsm5nLlwiLFxuICBudW1lcmljRXJyb3I6IFwiR2nDoSB0cuG7iyBuw6puIGzDoCBraeG7g3Ugc+G7kS5cIixcbiAgdGV4dE1pbkxlbmd0aDogXCJWdWkgbMOybmcgbmjhuq1wIMOtdCBuaOG6pXQgezB9IGvDrSB04buxLlwiLFxuICB0ZXh0TWF4TGVuZ3RoOiBcIlZ1aSBsw7JuZyBuaOG6rXAgw610IGjGoW4gezB9IGvDrSB04buxLlwiLFxuICB0ZXh0TWluTWF4TGVuZ3RoOiBcIlZ1aSBsw7JuZyBuaOG6rXAgbmhp4buBdSBoxqFuIHswfSBob+G6t2Mgw610IGjGoW4gezF9IGvDrSB04buxLlwiLFxuICBtaW5Sb3dDb3VudEVycm9yOiBcIlZ1aSBsw7JuZyBuaOG6rXAgw610IG5o4bqldCB7MH0gZMOybmcuXCIsXG4gIG1pblNlbGVjdEVycm9yOiBcIlZ1aSBsw7JuZyBjaOG7jW4gw610IG5o4bqldCB7MH0gbG/huqFpLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJWdWkgbMOybmcga2jDtG5nIGNo4buNbiBuaGnhu4F1IGjGoW4gezB9IGxv4bqhaS5cIixcbiAgbnVtZXJpY01pbk1heDpcbiAgICBcIkdpw6EgdHLhu4sgJ3swfScgbsOqbiBi4bqxbmcgaG/hurdjIGzhu5tuIGjGoW4gezF9IHbDoCBi4bqxbmcgaG/hurdjIG5o4buPIGjGoW4gezJ9XCIsXG4gIG51bWVyaWNNaW46IFwiR2nDoSB0cuG7iyAnezB9JyBuw6puIGLhurFuZyBob+G6t2MgbOG7m24gaMahbiB7MX1cIixcbiAgbnVtZXJpY01heDogXCJHacOhIHRy4buLICd7MH0nIG7Dqm4gYuG6sW5nIGhv4bq3YyBuaOG7jyBoxqFuIHsxfVwiLFxuICBpbnZhbGlkRW1haWw6IFwiVnVpIGzDsm5nIMSRaeG7gW4gxJHhu4thIGNo4buJIGVtYWlsIGjhu6NwIGzhu4cuXCIsXG4gIGludmFsaWRFeHByZXNzaW9uOiBcIkJp4buDdSB0aOG7qWM6IHswfSBuw6puIHRy4bqjIHbhu4EgJ3RydWUnLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiWcOqdSBj4bqndSB0cuG6oyB24buBIGzhu5dpICd7MH0nLiB7MX1cIixcbiAgdXJsR2V0Q2hvaWNlc0Vycm9yOlxuICAgIFwiWcOqdSBj4bqndSB0cuG6oyB24buBIGThu68gbGnhu4d1IHRy4buRbmcgaG/hurdjIHRodeG7mWMgdMOtbmggJ3BhdGgnIGtow7RuZyDEkcO6bmdcIixcbiAgZXhjZWVkTWF4U2l6ZTogXCJLw61jaCB0aMaw4bubYyB04bqtcCB0aW4ga2jDtG5nIG7Dqm4gdsaw4bujdCBxdcOhIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlZ1aSBsw7JuZyDEkWnhu4FuIGdpw6EgdHLhu4sga2jDoWMuXCIsXG4gIHVwbG9hZGluZ0ZpbGU6XG4gICAgXCJU4bqtcCB0aW4gxJFhbmcgxJHGsOG7o2MgdOG6o2kgbMOqbi4gVnVpIGzDsm5nIGNo4budIG3hu5l0IGzDumMgdsOgIHRo4butIGzhuqFpLlwiLFxuICBsb2FkaW5nRmlsZTogXCLEkGFuZyB04bqjaS4uLlwiLFxuICBjaG9vc2VGaWxlOiBcIkNo4buNbiBjw6FjIHThuq1wIHRpbi4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiS2jDtG5nIGPDsyB04bqtcCB0aW4gbsOgbyDEkcaw4bujYyBjaOG7jW5cIixcbiAgY29uZmlybURlbGV0ZTogXCJC4bqhbiBtdeG7kW4geMOzYSBkw7JuZyBuw6B5P1wiLFxuICBrZXlEdXBsaWNhdGlvbkVycm9yOiBcIkdpw6EgdHLhu4sgbsOgeSBraMO0bmcgbsOqbiBi4buLIHRyw7luZyBs4bq3cC5cIixcbiAgYWRkQ29sdW1uOiBcIlRow6ptIGPhu5l0XCIsXG4gIGFkZFJvdzogXCJUaMOqbSBkw7JuZ1wiLFxuICByZW1vdmVSb3c6IFwiWMOzYVwiLFxuICBhZGRQYW5lbDogXCJUaMOqbSBt4bubaVwiLFxuICByZW1vdmVQYW5lbDogXCJYw7NhXCIsXG4gIGNob2ljZXNfSXRlbTogXCJt4bulY1wiLFxuICBtYXRyaXhfY29sdW1uOiBcIkPhu5l0XCIsXG4gIG1hdHJpeF9yb3c6IFwiRMOybmdcIixcbiAgc2F2aW5nRGF0YTogXCJL4bq/dCBxdeG6oyDEkWFuZyBsxrB1IGzhuqFpIHRyw6puIGjhu4cgdGjhu5FuZy4uLlwiLFxuICBzYXZpbmdEYXRhRXJyb3I6IFwiQ8OzIGzhu5dpIHjhuqN5IHJhIHbDoCBjaMO6bmcgdGEga2jDtG5nIHRo4buDIGzGsHUga+G6v3QgcXXhuqMuXCIsXG4gIHNhdmluZ0RhdGFTdWNjZXNzOiBcIkvhur90IHF14bqjIMSRw6MgxJHGsOG7o2MgbMawdSB0aMOgbmggY8O0bmchXCIsXG4gIHNhdmVBZ2FpbkJ1dHRvbjogXCJUaOG7rSBs4bqhaVwiLFxuICB0aW1lck1pbjogXCJwaMO6dFwiLFxuICB0aW1lclNlYzogXCJnacOieVwiLFxuICB0aW1lclNwZW50QWxsOiBcIkLhuqFuIMSRw6Mgc+G7rSBk4bulbmcgezB9IHRyw6puIHRyYW5nIG7DoHkgdsOgIHsxfSB0csOqbiB0b8OgbiBi4buZLlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJC4bqhbiDEkcOjIHPhu60gZOG7pW5nIHswfSB0csOqbiB0cmFuZy5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJC4bqhbiDEkcOjIHPhu60gZOG7pW5nIHswfSB0csOqbiB0b8OgbiBi4buZLlwiLFxuICB0aW1lckxpbWl0QWxsOlxuICAgIFwiQuG6oW4gxJHDoyBz4butIGThu6VuZyB7MH0gLyB7MX0gdHLDqm4gdHJhbmcgbsOgeSB2w6AgezJ9IC8gezN9IHRyw6puIHRvw6BuIGLhu5kuXCIsXG4gIHRpbWVyTGltaXRQYWdlOiBcIkLhuqFuIMSRw6Mgc+G7rSBk4bulbmcgezB9IC8gezF9IHRyw6puIHRyYW5nIG7DoHkuXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiQuG6oW4gxJHDoyBz4butIGThu6VuZyB7MH0gLyB7MX0gdHLDqm4gdG/DoG4gYuG7mS5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIljDs2EgdOG6pXQgY+G6o1wiLFxuICBjbGVhckNhcHRpb246IFwiWMOzYVwiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJDaOG7jW4gdOG6rXAgdGluXCIsXG4gIHJlbW92ZUZpbGVDYXB0aW9uOiBcIljDs2EgdOG6rXAgdGluXCIsXG4gIGJvb2xlYW5DaGVja2VkTGFiZWw6IFwiQ8OzXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJLaMO0bmdcIixcbiAgY29uZmlybVJlbW92ZUZpbGU6IFwiQuG6oW4gY8OzIGNo4bqvYyBjaOG6r24gbXXhu5FuIHjDs2EgdOG6rXAgdGluIG7DoHk6IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIkLhuqFuIGPDsyBjaOG6r2MgY2jhuq9uIG114buRbiB4w7NhIHRvw6BuIGLhu5kgdOG6rXAgdGluP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiVGnDqnUgxJHhu4EgY8OidSBo4buPaVwiLFxufTtcblxuLy9VbmNvbW1lbnQgdGhlc2UgdHdvIGxpbmVzIG9uIGNyZWF0aW5nIGEgdHJhbnNsYXRpb24gZmlsZS4gWW91IHNob3VsZCByZXBsYWNlIFwiZW5cIiBhbmQgZW5TdHJpbmdzIHdpdGggeW91ciBsb2NhbGUgKFwiZnJcIiwgXCJkZVwiIGFuZCBzbyBvbikgYW5kIHlvdXIgdmFyaWFibGUuXG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlc1tcInZpXCJdID0gdmlldG5hbWVzZVN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJ2aVwiXSA9IFwiVmnhu4d0IE5hbVwiO1xuIiwiaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4uL3N1cnZleVN0cmluZ3NcIjtcblxuZXhwb3J0IHZhciB3ZWxzaFN1cnZleVN0cmluZ3MgPSB7XG4gIHBhZ2VQcmV2VGV4dDogXCJCbGFlbm9yb2xcIixcbiAgcGFnZU5leHRUZXh0OiBcIk5lc2FmXCIsXG4gIGNvbXBsZXRlVGV4dDogXCJDd2JsaGF1XCIsXG4gIHByZXZpZXdUZXh0OiBcIlJoYWdvbHdnXCIsXG4gIGVkaXRUZXh0OiBcIkdvbHlndVwiLFxuICBzdGFydFN1cnZleVRleHQ6IFwiRGVjaHJhdVwiLFxuICBvdGhlckl0ZW1UZXh0OiBcIkFyYWxsIChkaXNncmlmaXdjaClcIixcbiAgbm9uZUl0ZW1UZXh0OiBcIkRpbVwiLFxuICBzZWxlY3RBbGxJdGVtVGV4dDogXCJEZXdpcyB5IEN5ZmFuIFwiLFxuICBwcm9ncmVzc1RleHQ6IFwiVHVkYWxlbiB7MH0gbyB7MX1cIixcbiAgcGFuZWxEeW5hbWljUHJvZ3Jlc3NUZXh0OiBcIkNvZm5vZCB7MH0gbyB7MX1cIixcbiAgcXVlc3Rpb25zUHJvZ3Jlc3NUZXh0OiBcIldlZGkgYXRlYiB7MH0vezF9IGN3ZXN0aXduXCIsXG4gIGVtcHR5U3VydmV5OiBcIkRvZXMgZGltIG1vZGQgZ3dlbGQgdHVkYWxlbiBuYSBjaHdlc3Rpd24geW4geXIgYXJvbHdnLlwiLFxuICBjb21wbGV0aW5nU3VydmV5OiBcIkRpb2xjaCBhbSBsZW53aeKAmXIgaG9saWFkdXIhXCIsXG4gIGNvbXBsZXRpbmdTdXJ2ZXlCZWZvcmU6IFwiUnlkeWNoIGNoaSB3ZWRpIGxsZW53aeKAmXIgYXJvbHdnIGh3biB5biBiYXJvZCB5biDDtGwgZWluIGNvZm5vZGlvbi5cIixcbiAgbG9hZGluZ1N1cnZleTogXCJXcnRoaeKAmW4gTGx3eXRob+KAmXIgQXJvbHdnLi4uXCIsXG4gIG9wdGlvbnNDYXB0aW9uOiBcIkRld2lzd2NoLi4uXCIsXG4gIHZhbHVlOiBcImd3ZXJ0aFwiLFxuICByZXF1aXJlZEVycm9yOiBcIkF0ZWJ3Y2ggeSBjd2VzdGl3bi5cIixcbiAgcmVxdWlyZWRFcnJvckluUGFuZWw6IFwiQXRlYndjaCBvIGxlaWFmIHVuIGN3ZXN0aXduLlwiLFxuICByZXF1aXJlZEluQWxsUm93c0Vycm9yOiBcIkF0ZWJ3Y2ggeSBjd2VzdGl5bmF1IHltIG1ob2Igcmhlcy5cIixcbiAgbnVtZXJpY0Vycm9yOiBcIkR5bGFp4oCZciBnd2VydGggZm9kIHluIHJoaWYuXCIsXG4gIHRleHRNaW5MZW5ndGg6IFwiUmhvd2NoIG8gbGVpYWYgezB9IG5vZC5cIixcbiAgdGV4dE1heExlbmd0aDogXCJSaG93Y2ggbGFpIG5hIHswfSBub2QuXCIsXG4gIHRleHRNaW5NYXhMZW5ndGg6IFwiUmhvd2NoIG8gbGVpYWYgezB9IG5vZCBvbmQgZGltIG13eSBuYSB7MX0uXCIsXG4gIG1pblJvd0NvdW50RXJyb3I6IFwiTGxlbndjaCBvIGxlaWFmIHswfSByaGVzLlwiLFxuICBtaW5TZWxlY3RFcnJvcjogXCJEZXdpc3djaCBvIGxlaWFmIHswfSBhbXJ5d2lvbHluLlwiLFxuICBtYXhTZWxlY3RFcnJvcjogXCJQZWlkaXdjaCDDoiBkZXdpcyBtd3kgbmEgezB9IGFtcnl3aW9seW4uXCIsXG4gIG51bWVyaWNNaW5NYXg6IFwiRHlsYWnigJlyICd7MH0nIGZvZCB5ciB1biBmYXRoIMOiIHsxfSBuZXXigJluIGZ3eSwgYeKAmXIgZmF0aCDDoiB7Mn0gbmV14oCZbiBsbGFpXCIsXG4gIG51bWVyaWNNaW46IFwiRHlsYWnigJlyICd7MH0nIGZvZCB5ciB1biBmYXRoIMOiIHsxfSBuZXXigJluIGZ3eVwiLFxuICBudW1lcmljTWF4OiBcIkR5bGFp4oCZciAnezB9JyBmb2QgeXIgdW4gZmF0aCDDoiB7MX0gbmV14oCZbiBsbGFpXCIsXG4gIGludmFsaWRFbWFpbDogXCJSaG93Y2ggZ3lmZWlyaWFkIGUtYm9zdCBkaWx5cy5cIixcbiAgaW52YWxpZEV4cHJlc3Npb246IFwiRHlsYWnigJlyIG15bmVnaWFkIHswfSBhcndhaW4gYXQgJ3RydWUnLlwiLFxuICB1cmxSZXF1ZXN0RXJyb3I6IFwiUm9lZGQgeSBjYWlzIHdlZGkgYXJ3YWluIGF0IHkgZ3dhbGwgJ3swfScuIHsxfVwiLFxuICB1cmxHZXRDaG9pY2VzRXJyb3I6IFwiUm9lZGQgeSBjYWlzIHdlZGkgYXJ3YWluIGF0IGRkYXRhIGd3YWcgbmV1IG1hZSBwcmlvZHdlZGQgeSDigJhwYXRo4oCZIHluIGFuZ2h5d2lyIFwiLFxuICBleGNlZWRNYXhTaXplOiBcIkRkeWxhaeKAmXIgZmZlaWwgZGRpbSBib2QgeW4gZnd5IG5hIHswfS5cIixcbiAgb3RoZXJSZXF1aXJlZEVycm9yOiBcIlJob3djaCB5IGd3ZXJ0aCBhcmFsbC5cIixcbiAgdXBsb2FkaW5nRmlsZTogXCJNYWUgZWljaCBmZmVpbCB3cnRoaeKAmW4gbGx3eXRobyBpIGZ5bnkuIEFyaG9zd2NoIHljaHlkaWcgbyBlaWxpYWRhdSBhIHJob2kgY3lubmlnIGFyYWxsIGFybmkuXCIsXG4gIGxvYWRpbmdGaWxlOiBcIldydGhp4oCZbiBsbHd5dGhvLi4uXCIsXG4gIGNob29zZUZpbGU6IFwiRGV3aXN3Y2ggZmZlaWwoaWF1KS4uLlwiLFxuICBub0ZpbGVDaG9zZW46IFwiSGViIGRkZXdpcyBmZmVpbCBcIixcbiAgY29uZmlybURlbGV0ZTogXCJZZHljaCBjaGkgYW0gZGRpbGV14oCZciBjb2Zub2Q/XCIsXG4gIGtleUR1cGxpY2F0aW9uRXJyb3I6IFwiRHlsYWnigJlyIGd3ZXJ0aCBod24gZm9kIHluIHVuaWdyeXcuXCIsXG4gIGFkZENvbHVtbjogXCJZY2h3YW5lZ3UgY29sb2ZuIFwiLFxuICBhZGRSb3c6IFwiWWNod2FuZWd1IHJoZXNcIixcbiAgcmVtb3ZlUm93OiBcIlR5bm51XCIsXG4gIGFkZFBhbmVsOiBcIlljaHdhbmVndSBv4oCZciBuZXd5ZGRcIixcbiAgcmVtb3ZlUGFuZWw6IFwiVHlubnVcIixcbiAgY2hvaWNlc19JdGVtOiBcImVpdGVtXCIsXG4gIG1hdHJpeF9jb2x1bW46IFwiQ29sb2ZuXCIsXG4gIG1hdHJpeF9yb3c6IFwiUmhlc1wiLFxuICBzYXZpbmdEYXRhOiBcIk1hZeKAmXIgY2FubHluaWFkYXXigJluIGNhZWwgZXUgY2FkdyBhciB5IGd3ZWlueWRkLi4uXCIsXG4gIHNhdmluZ0RhdGFFcnJvcjogXCJSb2VkZCBnd2FsbCBhIGRvZWRkIGRpbSBtb2RkIGNhZHfigJlyIGNhbmx5bmlhZGF1LlwiLFxuICBzYXZpbmdEYXRhU3VjY2VzczogXCJXZWRpIGxsd3lkZG8gaSBnYWR34oCZciBjYW5seW5pYWRhdSFcIixcbiAgc2F2ZUFnYWluQnV0dG9uOiBcIlJob3djaCBneW5uaWcgYXJhbGwgYXJuaVwiLFxuICB0aW1lck1pbjogXCJtdW5cIixcbiAgdGltZXJTZWM6IFwiZWlsXCIsXG4gIHRpbWVyU3BlbnRBbGw6IFwiUnlkeWNoIGNoaSB3ZWRpIHRyZXVsaW8gezB9IGFyIHkgZHVkYWxlbiBob24gYSB7MX0gZ3lkYeKAmWkgZ2lseWRkLlwiLFxuICB0aW1lclNwZW50UGFnZTogXCJSeWR5Y2ggY2hpIHdlZGkgdHJldWxpbyB7MH0gYXIgeSBkdWRhbGVuIGhvbi5cIixcbiAgdGltZXJTcGVudFN1cnZleTogXCJSeWR5Y2ggY2hpIHdlZGkgdHJldWxpbyB7MH0gZ3lkYeKAmWkgZ2lseWRkLlwiLFxuICB0aW1lckxpbWl0QWxsOiBcIlJ5ZHljaCBjaGkgd2VkaSB0cmV1bGlvIHswfSBvIHsxfSBhciB5IGR1ZGFsZW4gaG9uIGEgezJ9IG8gezN9IGd5ZGHigJlpIGdpbHlkZC5cIixcbiAgdGltZXJMaW1pdFBhZ2U6IFwiUnlkeWNoIGNoaSB3ZWRpIHRyZXVsaW8gezB9IG8gezF9IGFyIHkgZHVkYWxlbiBob24uXCIsXG4gIHRpbWVyTGltaXRTdXJ2ZXk6IFwiUnlkeWNoIGNoaSB3ZWRpIHRyZXVsaW8gezB9IG8gezF9IGd5ZGHigJlpIGdpbHlkZC5cIixcbiAgY2xlYW5DYXB0aW9uOiBcIkdsYW5oYXVcIixcbiAgY2xlYXJDYXB0aW9uOiBcIkNsaXJpb1wiLFxuICBjaG9vc2VGaWxlQ2FwdGlvbjogXCJEZXdpc3djaCBmZmVpbCBcIixcbiAgcmVtb3ZlRmlsZUNhcHRpb246IFwiVHlubnXigJlyIGZmZWlsIGhvbiBcIixcbiAgYm9vbGVhbkNoZWNrZWRMYWJlbDogXCJJYXduXCIsXG4gIGJvb2xlYW5VbmNoZWNrZWRMYWJlbDogXCJOYVwiLFxuICBjb25maXJtUmVtb3ZlRmlsZTogXCJZZHljaCBjaGnigJluIHNpxbVyIGVpY2ggYm9kIGFtIGR5bm514oCZciBmZmVpbCBob246IHswfT9cIixcbiAgY29uZmlybVJlbW92ZUFsbEZpbGVzOiBcIllkeWNoIGNoaeKAmW4gc2nFtXIgZWljaCBib2QgYW0gZHlubnUgcG9iIGZmZWlsP1wiLFxuICBxdWVzdGlvblRpdGxlUGF0dGVyblRleHQ6IFwiVGVpdGwgeSBDd2VzdGl3biBcIixcbn07XG5cbnN1cnZleUxvY2FsaXphdGlvbi5sb2NhbGVzW1wiY3lcIl0gPSB3ZWxzaFN1cnZleVN0cmluZ3M7XG5zdXJ2ZXlMb2NhbGl6YXRpb24ubG9jYWxlTmFtZXNbXCJjeVwiXSA9IFwiY3ltcmFlZ1wiO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luIiwiaW1wb3J0IHsgSGFzaFRhYmxlIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uUnVubmVyIH0gZnJvbSBcIi4vY29uZGl0aW9uc1wiO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcblxuLyoqXG4gKiBBIE1vZGVsIGZvciBhIG1hdHJpeCBiYXNlIHF1ZXN0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25NYXRyaXhCYXNlTW9kZWw8VFJvdywgVENvbHVtbj4gZXh0ZW5kcyBRdWVzdGlvbiB7XG4gIHByb3RlY3RlZCBmaWx0ZXJlZENvbHVtbnM6IEFycmF5PFRDb2x1bW4+O1xuICBwcm90ZWN0ZWQgZmlsdGVyZWRSb3dzOiBBcnJheTxJdGVtVmFsdWU+O1xuICBwcm90ZWN0ZWQgZ2VuZXJhdGVkVmlzaWJsZVJvd3M6IEFycmF5PFRSb3c+ID0gbnVsbDtcbiAgcHJvdGVjdGVkIGdlbmVyYXRlZFRvdGFsUm93OiBUUm93ID0gbnVsbDtcbiAgcHVibGljIHZpc2libGVSb3dzQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xuXG4gIHByb3RlY3RlZCBjcmVhdGVDb2x1bW5WYWx1ZXMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVJdGVtVmFsdWVzKFwiY29sdW1uc1wiKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHRoaXMuZmlsdGVyZWRSb3dzID0gbnVsbDtcbiAgICB0aGlzLmZpbHRlcmVkQ29sdW1ucyA9IG51bGw7XG4gICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jcmVhdGVDb2x1bW5WYWx1ZXMoKTtcbiAgICB0aGlzLnJvd3MgPSB0aGlzLmNyZWF0ZUl0ZW1WYWx1ZXMoXCJyb3dzXCIpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwibWF0cml4YmFzZVwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNDb21wb3NpdGVRdWVzdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gZmFsc2UsIHRvIGhpZGUgdGFibGUgaGVhZGVyLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0cnVlLlxuICAgKi9cbiAgcHVibGljIGdldCBzaG93SGVhZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93SGVhZGVyXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd0hlYWRlcih2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93SGVhZGVyXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGNvbHVtbnMuIEEgY29sdW1uIGhhcyBhIHZhbHVlIGFuZCBhbiBvcHRpb25hbCB0ZXh0XG4gICAqL1xuICBnZXQgY29sdW1ucygpOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29sdW1uc1wiKTtcbiAgfVxuICBzZXQgY29sdW1ucyhuZXdWYWx1ZTogQXJyYXk8YW55Pikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbHVtbnNcIiwgbmV3VmFsdWUpO1xuICB9XG4gIHB1YmxpYyBnZXQgdmlzaWJsZUNvbHVtbnMoKTogQXJyYXk8YW55PiB7XG4gICAgcmV0dXJuICEhdGhpcy5maWx0ZXJlZENvbHVtbnMgPyB0aGlzLmZpbHRlcmVkQ29sdW1ucyA6IHRoaXMuY29sdW1ucztcbiAgfVxuICAvKipcbiAgICogVGhlIGxpc3Qgb2Ygcm93cy4gQSByb3cgaGFzIGEgdmFsdWUgYW5kIGFuIG9wdGlvbmFsIHRleHRcbiAgICovXG4gIGdldCByb3dzKCk6IEFycmF5PGFueT4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyb3dzXCIpO1xuICB9XG4gIHNldCByb3dzKG5ld1ZhbHVlOiBBcnJheTxhbnk+KSB7XG4gICAgdmFyIG5ld1Jvd3MgPSB0aGlzLnByb2Nlc3NSb3dzT25TZXQobmV3VmFsdWUpO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJvd3NcIiwgbmV3Um93cyk7XG4gICAgdGhpcy5maWx0ZXJJdGVtcygpO1xuICB9XG4gIHByb3RlY3RlZCBwcm9jZXNzUm93c09uU2V0KG5ld1Jvd3M6IEFycmF5PGFueT4pIHtcbiAgICByZXR1cm4gbmV3Um93cztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VmlzaWJsZVJvd3MoKTogQXJyYXk8VFJvdz4ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGlzdCBvZiB2aXNpYmxlIHJvd3MgYXMgbW9kZWwgb2JqZWN0cy5cbiAgICogQHNlZSByb3dzVmlzaWJsZUlmXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZpc2libGVSb3dzKCk6IEFycmF5PFRSb3c+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRWaXNpYmxlUm93cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIGV4cHJlc3Npb24gdGhhdCByZXR1cm5zIHRydWUgb3IgZmFsc2UuIEl0IHJ1bnMgYWdhaW5zdCBlYWNoIHJvdyBpdGVtIGFuZCBpZiBmb3IgdGhpcyBpdGVtIGl0IHJldHVybnMgdHJ1ZSwgdGhlbiB0aGUgaXRlbSBpcyB2aXNpYmxlIG90aGVyd2lzZSB0aGUgaXRlbSBiZWNvbWVzIGludmlzaWJsZS4gUGxlYXNlIHVzZSB7aXRlbX0gdG8gZ2V0IHRoZSBjdXJyZW50IGl0ZW0gdmFsdWUgaW4gdGhlIGV4cHJlc3Npb24uXG4gICAqIEBzZWUgdmlzaWJsZUlmXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJvd3NWaXNpYmxlSWYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicm93c1Zpc2libGVJZlwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJvd3NWaXNpYmxlSWYodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyb3dzVmlzaWJsZUlmXCIsIHZhbCk7XG4gICAgdGhpcy5maWx0ZXJJdGVtcygpO1xuICB9XG4gIC8qKlxuICAgKiBBbiBleHByZXNzaW9uIHRoYXQgcmV0dXJucyB0cnVlIG9yIGZhbHNlLiBJdCBydW5zIGFnYWluc3QgZWFjaCBjb2x1bW4gaXRlbSBhbmQgaWYgZm9yIHRoaXMgaXRlbSBpdCByZXR1cm5zIHRydWUsIHRoZW4gdGhlIGl0ZW0gaXMgdmlzaWJsZSBvdGhlcndpc2UgdGhlIGl0ZW0gYmVjb21lcyBpbnZpc2libGUuIFBsZWFzZSB1c2Uge2l0ZW19IHRvIGdldCB0aGUgY3VycmVudCBpdGVtIHZhbHVlIGluIHRoZSBleHByZXNzaW9uLlxuICAgKiBAc2VlIHJvd3NWaXNpYmxlSWZcbiAgICovXG4gIHB1YmxpYyBnZXQgY29sdW1uc1Zpc2libGVJZigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb2x1bW5zVmlzaWJsZUlmXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY29sdW1uc1Zpc2libGVJZih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbHVtbnNWaXNpYmxlSWZcIiwgdmFsKTtcbiAgICB0aGlzLmZpbHRlckl0ZW1zKCk7XG4gIH1cbiAgcHVibGljIHJ1bkNvbmRpdGlvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIHN1cGVyLnJ1bkNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIHRoaXMucnVuSXRlbXNDb25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICBwcm90ZWN0ZWQgZmlsdGVySXRlbXMoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuYXJlSW52aXNpYmxlRWxlbWVudHNTaG93aW5nKSB7XG4gICAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24gfHwgIXRoaXMuZGF0YSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLnJ1bkl0ZW1zQ29uZGl0aW9uKFxuICAgICAgdGhpcy5nZXREYXRhRmlsdGVyZWRWYWx1ZXMoKSxcbiAgICAgIHRoaXMuZ2V0RGF0YUZpbHRlcmVkUHJvcGVydGllcygpXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25Db2x1bW5zQ2hhbmdlZCgpIHt9XG4gIHByb3RlY3RlZCBvblJvd3NDaGFuZ2VkKCkge1xuICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMudmlzaWJsZVJvd3NDaGFuZ2VkQ2FsbGJhY2spO1xuICB9XG4gIHByb3RlY3RlZCBzaG91bGRSdW5Db2x1bW5FeHByZXNzaW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5zdXJ2ZXkgfHwgIXRoaXMuc3VydmV5LmFyZUludmlzaWJsZUVsZW1lbnRzU2hvd2luZztcbiAgfVxuICBwcm90ZWN0ZWQgaGFzUm93c0FzSXRlbXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJvdGVjdGVkIHJ1bkl0ZW1zQ29uZGl0aW9uKFxuICAgIHZhbHVlczogSGFzaFRhYmxlPGFueT4sXG4gICAgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT5cbiAgKTogYm9vbGVhbiB7XG4gICAgdmFyIG9sZFZpc2libGVSb3dzID0gbnVsbDtcbiAgICBpZiAoISF0aGlzLmZpbHRlcmVkUm93cyAmJiAhSGVscGVycy5pc1ZhbHVlRW1wdHkodGhpcy5kZWZhdWx0VmFsdWUpKSB7XG4gICAgICBvbGRWaXNpYmxlUm93cyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmZpbHRlcmVkUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBvbGRWaXNpYmxlUm93cy5wdXNoKHRoaXMuZmlsdGVyZWRSb3dzW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIGhhc0NoYW5nZXMgPVxuICAgICAgdGhpcy5oYXNSb3dzQXNJdGVtcygpICYmIHRoaXMucnVuQ29uZGl0aW9uc0ZvclJvd3ModmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB2YXIgaGFzQ29sdW1uc0NoYW5nZWQgPSB0aGlzLnJ1bkNvbmRpdGlvbnNGb3JDb2x1bW5zKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgaGFzQ2hhbmdlcyA9IGhhc0NvbHVtbnNDaGFuZ2VkIHx8IGhhc0NoYW5nZXM7XG4gICAgaWYgKGhhc0NoYW5nZXMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgISF0aGlzLnN1cnZleSAmJlxuICAgICAgICB0aGlzLnN1cnZleS5pc0NsZWFyVmFsdWVPbkhpZGRlbiAmJlxuICAgICAgICAoISF0aGlzLmZpbHRlcmVkQ29sdW1ucyB8fCAhIXRoaXMuZmlsdGVyZWRSb3dzKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKTtcbiAgICAgIH1cbiAgICAgIGlmICghIW9sZFZpc2libGVSb3dzKSB7XG4gICAgICAgIHRoaXMucmVzdG9yZU5ld1Zpc2libGVSb3dzVmFsdWVzKG9sZFZpc2libGVSb3dzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2xlYXJHZW5lcmF0ZWRSb3dzKCk7XG4gICAgICBpZiAoaGFzQ29sdW1uc0NoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5vbkNvbHVtbnNDaGFuZ2VkKCk7XG4gICAgICB9XG4gICAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc0NoYW5nZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGNsZWFyR2VuZXJhdGVkUm93cygpIHtcbiAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzID0gbnVsbDtcbiAgfVxuICBwcml2YXRlIHJ1bkNvbmRpdGlvbnNGb3JSb3dzKFxuICAgIHZhbHVlczogSGFzaFRhYmxlPGFueT4sXG4gICAgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT5cbiAgKTogYm9vbGVhbiB7XG4gICAgdmFyIHNob3dJbnZpc2liaWxlID1cbiAgICAgICEhdGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuYXJlSW52aXNpYmxlRWxlbWVudHNTaG93aW5nO1xuICAgIHZhciBydW5uZXIgPVxuICAgICAgIXNob3dJbnZpc2liaWxlICYmICEhdGhpcy5yb3dzVmlzaWJsZUlmXG4gICAgICAgID8gbmV3IENvbmRpdGlvblJ1bm5lcih0aGlzLnJvd3NWaXNpYmxlSWYpXG4gICAgICAgIDogbnVsbDtcbiAgICB0aGlzLmZpbHRlcmVkUm93cyA9IFtdO1xuICAgIHZhciBoYXNDaGFuZ2VkID0gSXRlbVZhbHVlLnJ1bkNvbmRpdGlvbnNGb3JJdGVtcyhcbiAgICAgIHRoaXMucm93cyxcbiAgICAgIHRoaXMuZmlsdGVyZWRSb3dzLFxuICAgICAgcnVubmVyLFxuICAgICAgdmFsdWVzLFxuICAgICAgcHJvcGVydGllcyxcbiAgICAgICFzaG93SW52aXNpYmlsZVxuICAgICk7XG4gICAgaWYgKHRoaXMuZmlsdGVyZWRSb3dzLmxlbmd0aCA9PT0gdGhpcy5yb3dzLmxlbmd0aCkge1xuICAgICAgdGhpcy5maWx0ZXJlZFJvd3MgPSBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gaGFzQ2hhbmdlZDtcbiAgfVxuICBwcml2YXRlIHJ1bkNvbmRpdGlvbnNGb3JDb2x1bW5zKFxuICAgIHZhbHVlczogSGFzaFRhYmxlPGFueT4sXG4gICAgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT5cbiAgKTogYm9vbGVhbiB7XG4gICAgdmFyIHVzZUNvbHVtbnNFeHByZXNzaW9uID1cbiAgICAgICEhdGhpcy5zdXJ2ZXkgJiYgIXRoaXMuc3VydmV5LmFyZUludmlzaWJsZUVsZW1lbnRzU2hvd2luZztcbiAgICB2YXIgcnVubmVyID1cbiAgICAgIHVzZUNvbHVtbnNFeHByZXNzaW9uICYmICEhdGhpcy5jb2x1bW5zVmlzaWJsZUlmXG4gICAgICAgID8gbmV3IENvbmRpdGlvblJ1bm5lcih0aGlzLmNvbHVtbnNWaXNpYmxlSWYpXG4gICAgICAgIDogbnVsbDtcbiAgICB0aGlzLmZpbHRlcmVkQ29sdW1ucyA9IFtdO1xuICAgIHZhciBoYXNDaGFuZ2VkID0gSXRlbVZhbHVlLnJ1bkNvbmRpdGlvbnNGb3JJdGVtcyhcbiAgICAgIHRoaXMuY29sdW1ucyxcbiAgICAgIDxhbnk+dGhpcy5maWx0ZXJlZENvbHVtbnMsXG4gICAgICBydW5uZXIsXG4gICAgICB2YWx1ZXMsXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgICAgdGhpcy5zaG91bGRSdW5Db2x1bW5FeHByZXNzaW9uKClcbiAgICApO1xuICAgIGlmICh0aGlzLmZpbHRlcmVkQ29sdW1ucy5sZW5ndGggPT09IHRoaXMuY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRDb2x1bW5zID0gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGhhc0NoYW5nZWQ7XG4gIH1cbiAgcHVibGljIGNsZWFySW5jb3JyZWN0VmFsdWVzKCkge1xuICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgIGlmICghdmFsKSByZXR1cm47XG4gICAgdmFyIG5ld1ZhbCA9IG51bGw7XG4gICAgdmFyIGlzQ2hhbmdlZCA9IGZhbHNlO1xuICAgIHZhciByb3dzID0gISF0aGlzLmZpbHRlcmVkUm93cyA/IHRoaXMuZmlsdGVyZWRSb3dzIDogdGhpcy5yb3dzO1xuICAgIHZhciBjb2x1bW5zID0gISF0aGlzLmZpbHRlcmVkQ29sdW1ucyA/IHRoaXMuZmlsdGVyZWRDb2x1bW5zIDogdGhpcy5jb2x1bW5zO1xuICAgIGZvciAodmFyIGtleSBpbiB2YWwpIHtcbiAgICAgIGlmIChcbiAgICAgICAgSXRlbVZhbHVlLmdldEl0ZW1CeVZhbHVlKHJvd3MsIGtleSkgJiZcbiAgICAgICAgSXRlbVZhbHVlLmdldEl0ZW1CeVZhbHVlKGNvbHVtbnMsIHZhbFtrZXldKVxuICAgICAgKSB7XG4gICAgICAgIGlmIChuZXdWYWwgPT0gbnVsbCkgbmV3VmFsID0ge307XG4gICAgICAgICg8YW55Pm5ld1ZhbClba2V5XSA9IHZhbFtrZXldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzQ2hhbmdlZCkge1xuICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbDtcbiAgICB9XG4gICAgc3VwZXIuY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2xlYXJJbnZpc2libGVWYWx1ZXNJblJvd3MoKSB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKSByZXR1cm47XG4gICAgdmFyIG5ld0RhdGEgPSB0aGlzLmdldFVuYmluZFZhbHVlKHRoaXMudmFsdWUpO1xuICAgIHZhciByb3dzID0gdGhpcy5yb3dzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IHJvd3NbaV0udmFsdWU7XG4gICAgICBpZiAoISFuZXdEYXRhW2tleV0gJiYgIXJvd3NbaV0uaXNWaXNpYmxlKSB7XG4gICAgICAgIGRlbGV0ZSBuZXdEYXRhW2tleV07XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmlzVHdvVmFsdWVFcXVhbHMobmV3RGF0YSwgdGhpcy52YWx1ZSkpIHJldHVybjtcbiAgICB0aGlzLnZhbHVlID0gbmV3RGF0YTtcbiAgfVxuICBwcml2YXRlIHJlc3RvcmVOZXdWaXNpYmxlUm93c1ZhbHVlcyhvbGRWaXNpYmxlUm93czogYW55KSB7XG4gICAgdmFyIHJvd3MgPSAhIXRoaXMuZmlsdGVyZWRSb3dzID8gdGhpcy5maWx0ZXJlZFJvd3MgOiB0aGlzLnJvd3M7XG4gICAgdmFyIHZhbCA9IHRoaXMuZGVmYXVsdFZhbHVlO1xuICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMuZ2V0VW5iaW5kVmFsdWUodGhpcy52YWx1ZSk7XG4gICAgdmFyIGlzQ2hhbmdlZCA9IGZhbHNlO1xuICAgIGZvciAodmFyIGtleSBpbiB2YWwpIHtcbiAgICAgIGlmIChcbiAgICAgICAgSXRlbVZhbHVlLmdldEl0ZW1CeVZhbHVlKHJvd3MsIGtleSkgJiZcbiAgICAgICAgIUl0ZW1WYWx1ZS5nZXRJdGVtQnlWYWx1ZShvbGRWaXNpYmxlUm93cywga2V5KVxuICAgICAgKSB7XG4gICAgICAgIGlmIChuZXdWYWx1ZSA9PSBudWxsKSBuZXdWYWx1ZSA9IHt9O1xuICAgICAgICAoPGFueT5uZXdWYWx1ZSlba2V5XSA9IHZhbFtrZXldO1xuICAgICAgICBpc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNDaGFuZ2VkKSB7XG4gICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBuZWVkUmVzcG9uc2l2ZVdpZHRoKCkge1xuICAgIC8vVE9ETzogbWFrZSBpdCBtb3IgaW50ZWxsaWdlbnRcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcIm1hdHJpeGJhc2VcIixcbiAgW1xuICAgIFwiY29sdW1uc1Zpc2libGVJZjpjb25kaXRpb25cIixcbiAgICBcInJvd3NWaXNpYmxlSWY6Y29uZGl0aW9uXCIsXG4gICAgeyBuYW1lOiBcInNob3dIZWFkZXI6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gIF0sXG4gIHVuZGVmaW5lZCxcbiAgXCJxdWVzdGlvblwiXG4pO1xuIiwiaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQge1xuICBJUGFnZSxcbiAgSVBhbmVsLFxuICBJRWxlbWVudCxcbiAgSVN1cnZleUVsZW1lbnQsXG4gIElRdWVzdGlvbixcbn0gZnJvbSBcIi4vYmFzZS1pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBEcmFnRHJvcEluZm8sIFBhbmVsTW9kZWxCYXNlLCBRdWVzdGlvblJvd01vZGVsIH0gZnJvbSBcIi4vcGFuZWxcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IENzc0NsYXNzQnVpbGRlciB9IGZyb20gXCIuL3V0aWxzL2Nzc0NsYXNzQnVpbGRlclwiO1xuaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tIFwiLi9zdXJ2ZXlcIjtcblxuLyoqXG4gKiBUaGUgcGFnZSBvYmplY3QuIEl0IGhhcyBlbGVtZW50cyBjb2xsZWN0aW9uLCB0aGF0IGNvbnRhaW5zIHF1ZXN0aW9ucyBhbmQgcGFuZWxzLlxuICovXG5leHBvcnQgY2xhc3MgUGFnZU1vZGVsIGV4dGVuZHMgUGFuZWxNb2RlbEJhc2UgaW1wbGVtZW50cyBJUGFnZSB7XG4gIHByaXZhdGUgaGFzU2hvd25WYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcgPSBcIlwiKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMubG9jVGl0bGUub25HZXRUZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgICBpZiAoc2VsZi5udW0gPiAwKSByZXR1cm4gc2VsZi5udW0gKyBcIi4gXCIgKyB0ZXh0O1xuICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwibmF2aWdhdGlvblRpdGxlXCIsIHRoaXMsIHRydWUpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJuYXZpZ2F0aW9uRGVzY3JpcHRpb25cIiwgdGhpcywgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJwYWdlXCI7XG4gIH1cbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzUGFnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuU2hvd1RpdGxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoPGFueT50aGlzLnN1cnZleSkuc2hvd1BhZ2VUaXRsZXM7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIHNob3cgdGl0bGUgaW4gbmF2aWdhdGlvbiBidXR0b25zLiBJZiB0aGUgdmFsdWUgaXMgZW1wdHkgdGhlbiBwYWdlIG5hbWUgaXMgdXNlZC5cbiAgICogQHNlZSBzdXJ2ZXkucHJvZ3Jlc3NCYXJUeXBlXG4gICAqL1xuICBwdWJsaWMgZ2V0IG5hdmlnYXRpb25UaXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcIm5hdmlnYXRpb25UaXRsZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IG5hdmlnYXRpb25UaXRsZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibmF2aWdhdGlvblRpdGxlXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBsb2NOYXZpZ2F0aW9uVGl0bGUoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwibmF2aWdhdGlvblRpdGxlXCIpO1xuICB9XG4gIHB1YmxpYyBnZXQgbmF2aWdhdGlvbkRlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibmF2aWdhdGlvbkRlc2NyaXB0aW9uXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbmF2aWdhdGlvbkRlc2NyaXB0aW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJuYXZpZ2F0aW9uRGVzY3JpcHRpb25cIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGxvY05hdmlnYXRpb25EZXNjcmlwdGlvbigpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJuYXZpZ2F0aW9uRGVzY3JpcHRpb25cIik7XG4gIH1cbiAgcHVibGljIGdldCBwYXNzZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInBhc3NlZFwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBwYXNzZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGFzc2VkXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGRlbGV0ZSgpIHtcbiAgICBpZiAoISF0aGlzLnN1cnZleSkge1xuICAgICAgdGhpcy5yZW1vdmVTZWxmRnJvbUxpc3QodGhpcy5zdXJ2ZXkucGFnZXMpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgb25GaXJzdFJlbmRlcmluZygpIHtcbiAgICBpZiAodGhpcy53YXNTaG93bikgcmV0dXJuO1xuICAgIHN1cGVyLm9uRmlyc3RSZW5kZXJpbmcoKTtcbiAgfVxuICAvKipcbiAgICogVGhlIHZpc2libGUgaW5kZXggb2YgdGhlIHBhZ2UuIEl0IGhhcyB2YWx1ZXMgZnJvbSAwIHRvIHZpc2libGUgcGFnZSBjb3VudCAtIDEuXG4gICAqIEBzZWUgU3VydmV5TW9kZWwudmlzaWJsZVBhZ2VzXG4gICAqIEBzZWUgU3VydmV5TW9kZWwucGFnZXNcbiAgICovXG4gIHB1YmxpYyBnZXQgdmlzaWJsZUluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVJbmRleFwiLCAtMSk7XG4gIH1cbiAgcHVibGljIHNldCB2aXNpYmxlSW5kZXgodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmxlSW5kZXhcIiwgdmFsKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUmVuZGVyRmlyc3RSb3dzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5pc0Rlc2lnbk1vZGUgfHwgdGhpcy52aXNpYmxlSW5kZXggPT0gMDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlLCBpZiB0aGUgcGFnZSBpcyBzdGFydGVkIHBhZ2UgaW4gdGhlIHN1cnZleS4gSXQgY2FuIGJlIHNob3duIG9uIHRoZSBzdGFydCBvbmx5IGFuZCB0aGUgZW5kLXVzZXIgY291bGQgbm90IGNvbWViYWNrIHRvIGl0IGFmdGVyIGl0IHBhc3NlZCBpdC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNTdGFydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5pc1BhZ2VTdGFydGVkKHRoaXMpO1xuICB9XG4gIHByb3RlY3RlZCBjYWxjQ3NzQ2xhc3Nlcyhjc3M6IGFueSk6IGFueSB7XG4gICAgY29uc3QgY2xhc3NlcyA9IHsgcGFnZToge30sIHBhZ2VUaXRsZTogXCJcIiwgcGFnZURlc2NyaXB0aW9uOiBcIlwiLCByb3c6IFwiXCIsIHJvd011bHRpcGxlOiBcIlwiIH07XG4gICAgdGhpcy5jb3B5Q3NzQ2xhc3NlcyhjbGFzc2VzLnBhZ2UsIGNzcy5wYWdlKTtcbiAgICBpZiAoISFjc3MucGFnZVRpdGxlKSB7XG4gICAgICBjbGFzc2VzLnBhZ2VUaXRsZSA9IGNzcy5wYWdlVGl0bGU7XG4gICAgfVxuICAgIGlmICghIWNzcy5wYWdlRGVzY3JpcHRpb24pIHtcbiAgICAgIGNsYXNzZXMucGFnZURlc2NyaXB0aW9uID0gY3NzLnBhZ2VEZXNjcmlwdGlvbjtcbiAgICB9XG4gICAgaWYgKCEhY3NzLnJvdykge1xuICAgICAgY2xhc3Nlcy5yb3cgPSBjc3Mucm93O1xuICAgIH1cbiAgICBpZiAoISFjc3Mucm93TXVsdGlwbGUpIHtcbiAgICAgIGNsYXNzZXMucm93TXVsdGlwbGUgPSBjc3Mucm93TXVsdGlwbGU7XG4gICAgfVxuICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgdGhpcy5zdXJ2ZXkudXBkYXRlUGFnZUNzc0NsYXNzZXModGhpcywgY2xhc3Nlcyk7XG4gICAgfVxuICAgIHJldHVybiBjbGFzc2VzO1xuICB9XG4gIHB1YmxpYyBnZXQgY3NzVGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IENzc0NsYXNzQnVpbGRlcigpXG4gICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5wYWdlLnRpdGxlKVxuICAgICAgLnRvU3RyaW5nKCk7XG4gIH1cbiAgcHVibGljIGdldCBudW0oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibnVtXCIsIC0xKTtcbiAgfVxuICBwdWJsaWMgc2V0IG51bSh2YWw6IG51bWJlcikge1xuICAgIGlmICh0aGlzLm51bSA9PSB2YWwpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJudW1cIiwgdmFsKTtcbiAgICB0aGlzLm9uTnVtQ2hhbmdlZCh2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBcImhpZGVcIiB0byBtYWtlIFwiUHJldlwiLCBcIk5leHRcIiBhbmQgXCJDb21wbGV0ZVwiIGJ1dHRvbnMgYXJlIGludmlzaWJsZSBmb3IgdGhpcyBwYWdlLiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBcInNob3dcIiB0byBtYWtlIHRoZXNlIGJ1dHRvbnMgdmlzaWJsZSwgZXZlbiBpZiBzdXJ2ZXkgc2hvd05hdmlnYXRpb25CdXR0b25zIHByb3BlcnR5IGlzIGZhbHNlLlxuICAgKiBAc2VlIFN1cnZleU1vZGUuc2hvd05hdmlnYXRpb25CdXR0b25zXG4gICAqL1xuICBwdWJsaWMgZ2V0IG5hdmlnYXRpb25CdXR0b25zVmlzaWJpbGl0eSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJuYXZpZ2F0aW9uQnV0dG9uc1Zpc2liaWxpdHlcIik7XG4gIH1cbiAgcHVibGljIHNldCBuYXZpZ2F0aW9uQnV0dG9uc1Zpc2liaWxpdHkodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJuYXZpZ2F0aW9uQnV0dG9uc1Zpc2liaWxpdHlcIiwgdmFsLnRvTG93ZXJDYXNlKCkpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgcHJvcGVydHkgcmV0dXJucyB0cnVlLCBpZiB0aGUgcGFnZSBoYXMgYmVlbiBzaG93biB0byB0aGUgZW5kLXVzZXIuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHdhc1Nob3duKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc1Nob3duVmFsdWU7XG4gIH1cbiAgZ2V0IGhhc1Nob3duKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLndhc1Nob3duO1xuICB9XG4gIHB1YmxpYyBzZXRXYXNTaG93bih2YWw6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsID09IHRoaXMuaGFzU2hvd25WYWx1ZSkgcmV0dXJuO1xuICAgIHRoaXMuaGFzU2hvd25WYWx1ZSA9IHZhbDtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUgfHwgdmFsICE9PSB0cnVlKSByZXR1cm47XG4gICAgdmFyIGVscyA9IHRoaXMuZWxlbWVudHM7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGVscy5sZW5ndGg7IGkgKyspIHtcbiAgICAgIGlmKGVsc1tpXS5pc1BhbmVsKSB7XG4gICAgICAgICg8UGFuZWxNb2RlbEJhc2U+PGFueT5lbHNbaV0pLnJhbmRvbWl6ZUVsZW1lbnRzKHRoaXMuYXJlUXVlc3Rpb25zUmFuZG9taXplZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucmFuZG9taXplRWxlbWVudHModGhpcy5hcmVRdWVzdGlvbnNSYW5kb21pemVkKTtcbiAgfVxuICAvKipcbiAgICogVGhlIHByb3BlcnR5IHJldHVybnMgdHJ1ZSwgaWYgdGhlIGVsZW1lbnRzIGFyZSByYW5kb21pemVkIG9uIHRoZSBwYWdlXG4gICAqIEBzZWUgaGFzU2hvd25cbiAgICogQHNlZSBxdWVzdGlvbnNPcmRlclxuICAgKiBAc2VlIFN1cnZleU1vZGVsLnF1ZXN0aW9uc09yZGVyXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFyZVF1ZXN0aW9uc1JhbmRvbWl6ZWQoKTogYm9vbGVhbiB7XG4gICAgdmFyIG9yZGVyID1cbiAgICAgIHRoaXMucXVlc3Rpb25zT3JkZXIgPT0gXCJkZWZhdWx0XCIgJiYgdGhpcy5zdXJ2ZXlcbiAgICAgICAgPyB0aGlzLnN1cnZleS5xdWVzdGlvbnNPcmRlclxuICAgICAgICA6IHRoaXMucXVlc3Rpb25zT3JkZXI7XG4gICAgcmV0dXJuIG9yZGVyID09IFwicmFuZG9tXCI7XG4gIH1cbiAgLyoqXG4gICAqIENhbGwgaXQgdG8gc2Nyb2xsIHRvIHRoZSBwYWdlIHRvcC5cbiAgICovXG4gIHB1YmxpYyBzY3JvbGxUb1RvcCgpIHtcbiAgICBpZiAoISF0aGlzLnN1cnZleSkge1xuICAgICAgdGhpcy5zdXJ2ZXkuc2Nyb2xsRWxlbWVudFRvVG9wKHRoaXMsIG51bGwsIHRoaXMsIHRoaXMuaWQpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVGltZSBpbiBzZWNvbmRzIGVuZC11c2VyIHNwZW50IG9uIHRoaXMgcGFnZVxuICAgKi9cbiAgcHVibGljIHRpbWVTcGVudCA9IDA7XG4gIC8vIHB1YmxpYyBnZXQgdGltZVNwZW50KCk6IG51bWJlciB7XG4gIC8vICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInRpbWVTcGVudFwiLCAwKTtcbiAgLy8gfVxuICAvLyBwdWJsaWMgc2V0IHRpbWVTcGVudCh2YWw6IG51bWJlcikge1xuICAvLyAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInRpbWVTcGVudFwiLCB2YWwpO1xuICAvLyB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGFsbCBwYW5lbHMgaW4gdGhlIHBhZ2VcbiAgICovXG4gIHB1YmxpYyBnZXRQYW5lbHMoXG4gICAgdmlzaWJsZU9ubHk6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBpbmNsdWRpbmdEZXNpZ25UaW1lOiBib29sZWFuID0gZmFsc2VcbiAgKTogQXJyYXk8SVBhbmVsPiB7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxJUGFuZWw+KCk7XG4gICAgdGhpcy5hZGRQYW5lbHNJbnRvTGlzdChyZXN1bHQsIHZpc2libGVPbmx5LCBpbmNsdWRpbmdEZXNpZ25UaW1lKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSB0aW1lIGluIHNlY29uZHMgdGhhdCBlbmQtdXNlciBoYXMgdG8gY29tcGxldGUgdGhlIHBhZ2UuIElmIHRoZSB2YWx1ZSBpcyAwIG9yIGxlc3MsIHRoZSBlbmQtdXNlciBoYXMgdW5saW1pdGVkIG51bWJlciBvZiB0aW1lIHRvIGZpbmlzaCB0aGUgcGFnZS5cbiAgICogQHNlZSBzdGFydFRpbWVyXG4gICAqIEBzZWUgU3VydmV5TW9kZWwubWF4VGltZVRvRmluaXNoUGFnZVxuICAgKi9cbiAgcHVibGljIGdldCBtYXhUaW1lVG9GaW5pc2goKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4VGltZVRvRmluaXNoXCIsIDApO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4VGltZVRvRmluaXNoKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF4VGltZVRvRmluaXNoXCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uTnVtQ2hhbmdlZCh2YWx1ZTogbnVtYmVyKSB7fVxuICBwcm90ZWN0ZWQgb25WaXNpYmxlQ2hhbmdlZCgpIHtcbiAgICBpZiAodGhpcy5pc1JhbmRvbWl6aW5nKSByZXR1cm47XG4gICAgc3VwZXIub25WaXNpYmxlQ2hhbmdlZCgpO1xuICAgIGlmICh0aGlzLnN1cnZleSAhPSBudWxsKSB7XG4gICAgICB0aGlzLnN1cnZleS5wYWdlVmlzaWJpbGl0eUNoYW5nZWQodGhpcywgdGhpcy5pc1Zpc2libGUpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGRyYWdEcm9wSW5mbzogRHJhZ0Ryb3BJbmZvO1xuICBwdWJsaWMgZHJhZ0Ryb3BTdGFydChcbiAgICBzcmM6IElFbGVtZW50LFxuICAgIHRhcmdldDogSUVsZW1lbnQsXG4gICAgbmVzdGVkUGFuZWxEZXB0aDogbnVtYmVyID0gLTFcbiAgKSB7XG4gICAgdGhpcy5kcmFnRHJvcEluZm8gPSBuZXcgRHJhZ0Ryb3BJbmZvKHNyYywgdGFyZ2V0LCBuZXN0ZWRQYW5lbERlcHRoKTtcbiAgfVxuICBwdWJsaWMgZHJhZ0Ryb3BNb3ZlVG8oXG4gICAgZGVzdGluYXRpb246IElTdXJ2ZXlFbGVtZW50LFxuICAgIGlzQm90dG9tOiBib29sZWFuID0gZmFsc2UsXG4gICAgaXNFZGdlOiBib29sZWFuID0gZmFsc2VcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmRyYWdEcm9wSW5mbykgcmV0dXJuIGZhbHNlO1xuICAgIHRoaXMuZHJhZ0Ryb3BJbmZvLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgdGhpcy5kcmFnRHJvcEluZm8uaXNCb3R0b20gPSBpc0JvdHRvbTtcbiAgICB0aGlzLmRyYWdEcm9wSW5mby5pc0VkZ2UgPSBpc0VkZ2U7XG4gICAgdGhpcy5jb3JyZWN0RHJhZ0Ryb3BJbmZvKHRoaXMuZHJhZ0Ryb3BJbmZvKTtcbiAgICBpZiAoIXRoaXMuZHJhZ0Ryb3BDYW5Ecm9wVGFnZXJ0KCkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIXRoaXMuZHJhZ0Ryb3BDYW5Ecm9wU291cmNlKCkgfHwgIXRoaXMuZHJhZ0Ryb3BBbGxvd0Zyb21TdXJ2ZXkoKSkge1xuICAgICAgaWYgKCEhdGhpcy5kcmFnRHJvcEluZm8uc291cmNlKSB7XG4gICAgICAgIHZhciByb3cgPSB0aGlzLmRyYWdEcm9wRmluZFJvdyh0aGlzLmRyYWdEcm9wSW5mby50YXJnZXQpO1xuICAgICAgICB0aGlzLnVwZGF0ZVJvd3NSZW1vdmVFbGVtZW50RnJvbVJvdyh0aGlzLmRyYWdEcm9wSW5mby50YXJnZXQsIHJvdyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuZHJhZ0Ryb3BBZGRUYXJnZXQodGhpcy5kcmFnRHJvcEluZm8pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByaXZhdGUgY29ycmVjdERyYWdEcm9wSW5mbyhkcmFnRHJvcEluZm86IERyYWdEcm9wSW5mbykge1xuICAgIGlmICghZHJhZ0Ryb3BJbmZvLmRlc3RpbmF0aW9uKSByZXR1cm47XG4gICAgdmFyIHBhbmVsID0gKDxJRWxlbWVudD5kcmFnRHJvcEluZm8uZGVzdGluYXRpb24pLmlzUGFuZWxcbiAgICAgID8gPElQYW5lbD4oPGFueT5kcmFnRHJvcEluZm8uZGVzdGluYXRpb24pXG4gICAgICA6IG51bGw7XG4gICAgaWYgKCFwYW5lbCkgcmV0dXJuO1xuICAgIGlmIChcbiAgICAgICFkcmFnRHJvcEluZm8udGFyZ2V0LmlzTGF5b3V0VHlwZVN1cHBvcnRlZChwYW5lbC5nZXRDaGlsZHJlbkxheW91dFR5cGUoKSlcbiAgICApIHtcbiAgICAgIGRyYWdEcm9wSW5mby5pc0VkZ2UgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGRyYWdEcm9wQWxsb3dGcm9tU3VydmV5KCk6IGJvb2xlYW4ge1xuICAgIHZhciBkZXN0ID0gdGhpcy5kcmFnRHJvcEluZm8uZGVzdGluYXRpb247XG4gICAgaWYgKCFkZXN0IHx8ICF0aGlzLnN1cnZleSkgcmV0dXJuIHRydWU7XG4gICAgdmFyIGluc2VydEJlZm9yZTogSUVsZW1lbnQgPSBudWxsO1xuICAgIHZhciBpbnNlcnRBZnRlcjogSUVsZW1lbnQgPSBudWxsO1xuICAgIHZhciBwYXJlbnQgPVxuICAgICAgZGVzdC5pc1BhZ2UgfHwgKCF0aGlzLmRyYWdEcm9wSW5mby5pc0VkZ2UgJiYgKDxJRWxlbWVudD5kZXN0KS5pc1BhbmVsKVxuICAgICAgICA/IGRlc3RcbiAgICAgICAgOiAoPElFbGVtZW50PmRlc3QpLnBhcmVudDtcbiAgICBpZiAoIWRlc3QuaXNQYWdlKSB7XG4gICAgICB2YXIgY29udGFpbmVyID0gKDxJRWxlbWVudD5kZXN0KS5wYXJlbnQ7XG4gICAgICBpZiAoISFjb250YWluZXIpIHtcbiAgICAgICAgdmFyIGVsZW1lbnRzID0gKDxQYW5lbE1vZGVsQmFzZT5jb250YWluZXIpLmVsZW1lbnRzO1xuICAgICAgICB2YXIgaW5kZXggPSBlbGVtZW50cy5pbmRleE9mKDxJRWxlbWVudD5kZXN0KTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICBpbnNlcnRCZWZvcmUgPSA8SUVsZW1lbnQ+ZGVzdDtcbiAgICAgICAgICBpbnNlcnRBZnRlciA9IDxJRWxlbWVudD5kZXN0O1xuICAgICAgICAgIGlmICh0aGlzLmRyYWdEcm9wSW5mby5pc0JvdHRvbSkge1xuICAgICAgICAgICAgaW5zZXJ0QmVmb3JlID1cbiAgICAgICAgICAgICAgaW5kZXggPCBlbGVtZW50cy5sZW5ndGggLSAxID8gZWxlbWVudHNbaW5kZXggKyAxXSA6IG51bGw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluc2VydEFmdGVyID0gaW5kZXggPiAwID8gZWxlbWVudHNbaW5kZXggLSAxXSA6IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgdGFyZ2V0OiB0aGlzLmRyYWdEcm9wSW5mby50YXJnZXQsXG4gICAgICBzb3VyY2U6IHRoaXMuZHJhZ0Ryb3BJbmZvLnNvdXJjZSxcbiAgICAgIHBhcmVudDogcGFyZW50LFxuICAgICAgaW5zZXJ0QWZ0ZXI6IGluc2VydEFmdGVyLFxuICAgICAgaW5zZXJ0QmVmb3JlOiBpbnNlcnRCZWZvcmUsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkuZHJhZ0FuZERyb3BBbGxvdyhvcHRpb25zKTtcbiAgfVxuICBwdWJsaWMgZHJhZ0Ryb3BGaW5pc2goaXNDYW5jZWw6IGJvb2xlYW4gPSBmYWxzZSk6IElFbGVtZW50IHtcbiAgICBpZiAoIXRoaXMuZHJhZ0Ryb3BJbmZvKSByZXR1cm47XG4gICAgdmFyIHRhcmdldCA9IHRoaXMuZHJhZ0Ryb3BJbmZvLnRhcmdldDtcbiAgICB2YXIgc3JjID0gdGhpcy5kcmFnRHJvcEluZm8uc291cmNlO1xuICAgIHZhciByb3cgPSB0aGlzLmRyYWdEcm9wRmluZFJvdyh0YXJnZXQpO1xuICAgIHZhciB0YXJnZXRJbmRleCA9IHRoaXMuZHJhZ0Ryb3BHZXRFbGVtZW50SW5kZXgodGFyZ2V0LCByb3cpO1xuICAgIHRoaXMudXBkYXRlUm93c1JlbW92ZUVsZW1lbnRGcm9tUm93KHRhcmdldCwgcm93KTtcbiAgICB2YXIgZWxlbWVudHNUb1NldFNXTkwgPSBbXTtcbiAgICB2YXIgZWxlbWVudHNUb1Jlc2V0U1dOTCA9IFtdO1xuICAgIGlmICghaXNDYW5jZWwgJiYgISFyb3cpIHtcbiAgICAgIHZhciBpc1NhbWVQYW5lbCA9IGZhbHNlO1xuXG4gICAgICBpZih0aGlzLmlzRGVzaWduTW9kZSAmJiBzZXR0aW5ncy5zdXBwb3J0Q3JlYXRvclYyKSB7XG4gICAgICAgIHZhciBzcmNSb3cgPSBzcmMgJiYgc3JjLnBhcmVudCAmJihzcmMucGFyZW50IGFzIFBhbmVsTW9kZWxCYXNlKS5kcmFnRHJvcEZpbmRSb3coc3JjKTtcbiAgICAgICAgaWYocm93LnBhbmVsLmVsZW1lbnRzW3RhcmdldEluZGV4XSAmJiByb3cucGFuZWwuZWxlbWVudHNbdGFyZ2V0SW5kZXhdLnN0YXJ0V2l0aE5ld0xpbmUgJiYgcm93LmVsZW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBlbGVtZW50c1RvU2V0U1dOTC5wdXNoKHRhcmdldCk7XG4gICAgICAgICAgZWxlbWVudHNUb1Jlc2V0U1dOTC5wdXNoKHJvdy5wYW5lbC5lbGVtZW50c1t0YXJnZXRJbmRleF0pO1xuICAgICAgICB9XG4gICAgICAgIGlmKHRhcmdldC5zdGFydFdpdGhOZXdMaW5lICYmIHJvdy5lbGVtZW50cy5sZW5ndGggPiAxICYmICghcm93LnBhbmVsLmVsZW1lbnRzW3RhcmdldEluZGV4XSB8fCAhcm93LnBhbmVsLmVsZW1lbnRzW3RhcmdldEluZGV4XS5zdGFydFdpdGhOZXdMaW5lKSkge1xuICAgICAgICAgIGVsZW1lbnRzVG9SZXNldFNXTkwucHVzaCh0YXJnZXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmKHNyY1JvdyAmJiBzcmNSb3cuZWxlbWVudHNbMF0gPT09IHNyYyAmJiBzcmNSb3cuZWxlbWVudHNbMV0pIHtcbiAgICAgICAgICBlbGVtZW50c1RvU2V0U1dOTC5wdXNoKHNyY1Jvdy5lbGVtZW50c1sxXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvdy5lbGVtZW50cy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgIGVsZW1lbnRzVG9TZXRTV05MLnB1c2godGFyZ2V0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoISFzcmMgJiYgISFzcmMucGFyZW50KSB7XG4gICAgICAgIGlzU2FtZVBhbmVsID0gcm93LnBhbmVsID09IHNyYy5wYXJlbnQ7XG4gICAgICAgIGlmIChpc1NhbWVQYW5lbCkge1xuICAgICAgICAgIHJvdy5wYW5lbC5kcmFnRHJvcE1vdmVFbGVtZW50KHNyYywgdGFyZ2V0LCB0YXJnZXRJbmRleCk7XG4gICAgICAgICAgdGFyZ2V0SW5kZXggPSAtMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzcmMucGFyZW50LnJlbW92ZUVsZW1lbnQoc3JjKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRhcmdldEluZGV4ID4gLTEpIHtcbiAgICAgICAgcm93LnBhbmVsLmFkZEVsZW1lbnQodGFyZ2V0LCB0YXJnZXRJbmRleCk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsZW1lbnRzVG9TZXRTV05MLm1hcCgoZSkgPT4geyBlLnN0YXJ0V2l0aE5ld0xpbmUgPSB0cnVlOyB9KTtcbiAgICBlbGVtZW50c1RvUmVzZXRTV05MLm1hcCgoZSkgPT4geyBlLnN0YXJ0V2l0aE5ld0xpbmUgPSBmYWxzZTsgfSk7XG5cbiAgICB0aGlzLmRyYWdEcm9wSW5mbyA9IG51bGw7XG4gICAgcmV0dXJuICFpc0NhbmNlbCA/IHRhcmdldCA6IG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBkcmFnRHJvcEdldEVsZW1lbnRJbmRleChcbiAgICB0YXJnZXQ6IElFbGVtZW50LFxuICAgIHJvdzogUXVlc3Rpb25Sb3dNb2RlbFxuICApOiBudW1iZXIge1xuICAgIGlmICghcm93KSByZXR1cm4gLTE7XG4gICAgdmFyIGluZGV4ID0gcm93LmVsZW1lbnRzLmluZGV4T2YodGFyZ2V0KTtcbiAgICBpZiAocm93LmluZGV4ID09IDApIHJldHVybiBpbmRleDtcbiAgICB2YXIgcHJldlJvdyA9IHJvdy5wYW5lbC5yb3dzW3Jvdy5pbmRleCAtIDFdO1xuICAgIHZhciBwcmV2RWxlbWVudCA9IHByZXZSb3cuZWxlbWVudHNbcHJldlJvdy5lbGVtZW50cy5sZW5ndGggLSAxXTtcbiAgICByZXR1cm4gaW5kZXggKyByb3cucGFuZWwuZWxlbWVudHMuaW5kZXhPZihwcmV2RWxlbWVudCkgKyAxO1xuICB9XG4gIHByaXZhdGUgZHJhZ0Ryb3BDYW5Ecm9wVGFnZXJ0KCk6IGJvb2xlYW4ge1xuICAgIHZhciBkZXN0aW5hdGlvbiA9IHRoaXMuZHJhZ0Ryb3BJbmZvLmRlc3RpbmF0aW9uO1xuICAgIGlmICghZGVzdGluYXRpb24gfHwgZGVzdGluYXRpb24uaXNQYWdlKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy5kcmFnRHJvcENhbkRyb3BDb3JlKFxuICAgICAgdGhpcy5kcmFnRHJvcEluZm8udGFyZ2V0LFxuICAgICAgPElFbGVtZW50PmRlc3RpbmF0aW9uXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGRyYWdEcm9wQ2FuRHJvcFNvdXJjZSgpOiBib29sZWFuIHtcbiAgICB2YXIgc291cmNlID0gdGhpcy5kcmFnRHJvcEluZm8uc291cmNlO1xuICAgIGlmICghc291cmNlKSByZXR1cm4gdHJ1ZTtcbiAgICB2YXIgZGVzdGluYXRpb24gPSA8SUVsZW1lbnQ+dGhpcy5kcmFnRHJvcEluZm8uZGVzdGluYXRpb247XG4gICAgaWYgKCF0aGlzLmRyYWdEcm9wQ2FuRHJvcENvcmUoc291cmNlLCBkZXN0aW5hdGlvbikpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUgJiYgc2V0dGluZ3Muc3VwcG9ydENyZWF0b3JWMikge1xuICAgICAgaWYgKCFzb3VyY2Uuc3RhcnRXaXRoTmV3TGluZSAmJiBkZXN0aW5hdGlvbi5zdGFydFdpdGhOZXdMaW5lKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGxldCByb3cgPSB0aGlzLmRyYWdEcm9wRmluZFJvdyhkZXN0aW5hdGlvbik7XG4gICAgICBpZiAocm93ICYmIHJvdy5lbGVtZW50cy5sZW5ndGggPT0gMSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRyYWdEcm9wQ2FuRHJvcE5vdE5leHQoXG4gICAgICBzb3VyY2UsXG4gICAgICBkZXN0aW5hdGlvbixcbiAgICAgIHRoaXMuZHJhZ0Ryb3BJbmZvLmlzRWRnZSxcbiAgICAgIHRoaXMuZHJhZ0Ryb3BJbmZvLmlzQm90dG9tXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGRyYWdEcm9wQ2FuRHJvcENvcmUoXG4gICAgdGFyZ2V0OiBJRWxlbWVudCxcbiAgICBkZXN0aW5hdGlvbjogSUVsZW1lbnRcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCFkZXN0aW5hdGlvbikgcmV0dXJuIHRydWU7XG4gICAgaWYgKHRoaXMuZHJhZ0Ryb3BJc1NhbWVFbGVtZW50KGRlc3RpbmF0aW9uLCB0YXJnZXQpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRhcmdldC5pc1BhbmVsKSB7XG4gICAgICB2YXIgcG5sID0gPFBhbmVsTW9kZWxCYXNlPig8YW55PnRhcmdldCk7XG4gICAgICBpZiAoXG4gICAgICAgIHBubC5jb250YWluc0VsZW1lbnQoZGVzdGluYXRpb24pIHx8XG4gICAgICAgICEhcG5sLmdldEVsZW1lbnRCeU5hbWUoZGVzdGluYXRpb24ubmFtZSlcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcml2YXRlIGRyYWdEcm9wQ2FuRHJvcE5vdE5leHQoXG4gICAgc291cmNlOiBJRWxlbWVudCxcbiAgICBkZXN0aW5hdGlvbjogSUVsZW1lbnQsXG4gICAgaXNFZGdlOiBib29sZWFuLFxuICAgIGlzQm90dG9tOiBib29sZWFuXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICghZGVzdGluYXRpb24gfHwgKGRlc3RpbmF0aW9uLmlzUGFuZWwgJiYgIWlzRWRnZSkpIHJldHVybiB0cnVlO1xuICAgIGlmICh0eXBlb2Ygc291cmNlLnBhcmVudCA9PT0gXCJ1bmRlZmluZWRcIiB8fCBzb3VyY2UucGFyZW50ICE9PSBkZXN0aW5hdGlvbi5wYXJlbnQpIHJldHVybiB0cnVlO1xuICAgIHZhciBwbmwgPSA8UGFuZWxNb2RlbEJhc2U+c291cmNlLnBhcmVudDtcbiAgICB2YXIgc3JjSW5kZXggPSBwbmwuZWxlbWVudHMuaW5kZXhPZihzb3VyY2UpO1xuICAgIHZhciBkZXN0SW5kZXggPSBwbmwuZWxlbWVudHMuaW5kZXhPZihkZXN0aW5hdGlvbik7XG4gICAgaWYgKGRlc3RJbmRleCA8IHNyY0luZGV4ICYmICFpc0JvdHRvbSkgZGVzdEluZGV4LS07XG4gICAgaWYgKGlzQm90dG9tKSBkZXN0SW5kZXgrKztcbiAgICByZXR1cm4gc3JjSW5kZXggPCBkZXN0SW5kZXhcbiAgICAgID8gZGVzdEluZGV4IC0gc3JjSW5kZXggPiAxXG4gICAgICA6IHNyY0luZGV4IC0gZGVzdEluZGV4ID4gMDtcbiAgfVxuXG4gIHByaXZhdGUgZHJhZ0Ryb3BJc1NhbWVFbGVtZW50KGVsMTogSUVsZW1lbnQsIGVsMjogSUVsZW1lbnQpIHtcbiAgICByZXR1cm4gZWwxID09IGVsMiB8fCBlbDEubmFtZSA9PSBlbDIubmFtZTtcbiAgfVxuICBwdWJsaWMgZW5zdXJlUm93c1Zpc2liaWxpdHkoKSB7XG4gICAgc3VwZXIuZW5zdXJlUm93c1Zpc2liaWxpdHkoKTtcbiAgICB0aGlzLmdldFBhbmVscygpLmZvckVhY2goKHBhbmVsKSA9PiBwYW5lbC5lbnN1cmVSb3dzVmlzaWJpbGl0eSgpKTtcbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcInBhZ2VcIixcbiAgW1xuICAgIHtcbiAgICAgIG5hbWU6IFwibmF2aWdhdGlvbkJ1dHRvbnNWaXNpYmlsaXR5XCIsXG4gICAgICBkZWZhdWx0OiBcImluaGVyaXRcIixcbiAgICAgIGNob2ljZXM6IFtcImluaGVyaXRcIiwgXCJzaG93XCIsIFwiaGlkZVwiXSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJtYXhUaW1lVG9GaW5pc2g6bnVtYmVyXCIsIGRlZmF1bHQ6IDAsIG1pblZhbHVlOiAwIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJuYXZpZ2F0aW9uVGl0bGVcIixcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24ob2JqOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuICEhb2JqLnN1cnZleSAmJiBvYmouc3VydmV5LnByb2dyZXNzQmFyVHlwZSA9PT0gXCJidXR0b25zXCI7XG4gICAgICB9LFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY05hdmlnYXRpb25UaXRsZVwiLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJuYXZpZ2F0aW9uRGVzY3JpcHRpb25cIixcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24ob2JqOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuICEhb2JqLnN1cnZleSAmJiBvYmouc3VydmV5LnByb2dyZXNzQmFyVHlwZSA9PT0gXCJidXR0b25zXCI7XG4gICAgICB9LFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY05hdmlnYXRpb25EZXNjcmlwdGlvblwiLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcInRpdGxlOnRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RpdGxlXCIgfSxcbiAgICB7IG5hbWU6IFwiZGVzY3JpcHRpb246dGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jRGVzY3JpcHRpb25cIiB9LFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFBhZ2VNb2RlbCgpO1xuICB9LFxuICBcInBhbmVsYmFzZVwiXG4pO1xuIiwiaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IEhhc2hUYWJsZSwgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7IEJhc2UsIEV2ZW50QmFzZSB9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7XG4gIElTdXJ2ZXlJbXBsLFxuICBJUGFnZSxcbiAgSVBhbmVsLFxuICBJQ29uZGl0aW9uUnVubmVyLFxuICBJRWxlbWVudCxcbiAgSVN1cnZleUVsZW1lbnQsXG4gIElRdWVzdGlvbixcbiAgSVN1cnZleUVycm9yT3duZXIsXG4gIElUaXRsZU93bmVyLFxuICBJUHJvZ3Jlc3NJbmZvLFxuICBJU3VydmV5LFxuICBJRmluZEVsZW1lbnRcbn0gZnJvbSBcIi4vYmFzZS1pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50IH0gZnJvbSBcIi4vc3VydmV5LWVsZW1lbnRcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IENvbmRpdGlvblJ1bm5lciB9IGZyb20gXCIuL2NvbmRpdGlvbnNcIjtcbmltcG9ydCB7IEVsZW1lbnRGYWN0b3J5LCBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IE9uZUFuc3dlclJlcXVpcmVkRXJyb3IgfSBmcm9tIFwiLi9lcnJvclwiO1xuaW1wb3J0IHsgUGFnZU1vZGVsIH0gZnJvbSBcIi4vcGFnZVwiO1xuaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuaW1wb3J0IHsgZmluZFNjcm9sbGFibGVQYXJlbnQsIGlzRWxlbWVudFZpc2libGUgfSBmcm9tIFwiLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgU3VydmV5RXJyb3IgfSBmcm9tIFwiLi9zdXJ2ZXktZXJyb3JcIjtcbmltcG9ydCB7IENzc0NsYXNzQnVpbGRlciB9IGZyb20gXCIuL3V0aWxzL2Nzc0NsYXNzQnVpbGRlclwiO1xuaW1wb3J0IHsgSUFjdGlvbiB9IGZyb20gXCIuL2FjdGlvbnMvYWN0aW9uXCI7XG5pbXBvcnQgeyBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lciB9IGZyb20gXCIuL2FjdGlvbnMvYWRhcHRpdmUtY29udGFpbmVyXCI7XG5pbXBvcnQgeyBBY3Rpb25Db250YWluZXIgfSBmcm9tIFwiLi9hY3Rpb25zL2NvbnRhaW5lclwiO1xuaW1wb3J0IHsgUGFuZWwgfSBmcm9tIFwiLi9rbm9ja291dC9rb3BhZ2VcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5cbmV4cG9ydCBjbGFzcyBEcmFnRHJvcEluZm8ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgc291cmNlOiBJRWxlbWVudCxcbiAgICBwdWJsaWMgdGFyZ2V0OiBJRWxlbWVudCxcbiAgICBwdWJsaWMgbmVzdGVkUGFuZWxEZXB0aDogbnVtYmVyID0gLTFcbiAgKSB7IH1cbiAgcHVibGljIGRlc3RpbmF0aW9uOiBJU3VydmV5RWxlbWVudDtcbiAgcHVibGljIGlzQm90dG9tOiBib29sZWFuO1xuICBwdWJsaWMgaXNFZGdlOiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25Sb3dNb2RlbCBleHRlbmRzIEJhc2Uge1xuICBwcml2YXRlIHN0YXRpYyByb3dDb3VudGVyID0gMTAwO1xuICBwcml2YXRlIHN0YXRpYyBnZXRSb3dJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInByX1wiICsgUXVlc3Rpb25Sb3dNb2RlbC5yb3dDb3VudGVyKys7XG4gIH1cbiAgcHJvdGVjdGVkIF9zY3JvbGxhYmxlUGFyZW50OiBhbnkgPSB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBfdXBkYXRlVmlzaWJpbGl0eTogYW55ID0gdW5kZWZpbmVkO1xuICBwdWJsaWMgc3RhcnRMYXp5UmVuZGVyaW5nKFxuICAgIHJvd0NvbnRhaW5lckRpdjogSFRNTEVsZW1lbnQsXG4gICAgZmluZFNjcm9sbGFibGVDb250YWluZXIgPSBmaW5kU2Nyb2xsYWJsZVBhcmVudFxuICApIHtcbiAgICB0aGlzLl9zY3JvbGxhYmxlUGFyZW50ID0gZmluZFNjcm9sbGFibGVDb250YWluZXIocm93Q29udGFpbmVyRGl2KTtcbiAgICB0aGlzLmlzTmVlZFJlbmRlciA9ICEoXG4gICAgICB0aGlzLl9zY3JvbGxhYmxlUGFyZW50LnNjcm9sbEhlaWdodCA+IHRoaXMuX3Njcm9sbGFibGVQYXJlbnQuY2xpZW50SGVpZ2h0XG4gICAgKTtcbiAgICAvLyBpZiAgdGhpcy5fc2Nyb2xsYWJsZVBhcmVudCBpcyBodG1sIHRoZSBzY3JvbGwgZXZlbnQgaXNuJ3QgZmlyZWQsIHNvIHdlIHNob3VsZCB1c2Ugd2luZG93XG4gICAgaWYgKHRoaXMuX3Njcm9sbGFibGVQYXJlbnQgPT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgdGhpcy5fc2Nyb2xsYWJsZVBhcmVudCA9IHdpbmRvdztcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzTmVlZFJlbmRlcikge1xuICAgICAgdGhpcy5fdXBkYXRlVmlzaWJpbGl0eSA9ICgpID0+IHtcbiAgICAgICAgdmFyIGlzUm93Q29udGFpbmVyRGl2VmlzaWJsZSA9IGlzRWxlbWVudFZpc2libGUocm93Q29udGFpbmVyRGl2LCA1MCk7XG4gICAgICAgIGlmICghdGhpcy5pc05lZWRSZW5kZXIgJiYgaXNSb3dDb250YWluZXJEaXZWaXNpYmxlKSB7XG4gICAgICAgICAgdGhpcy5pc05lZWRSZW5kZXIgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuc3RvcExhenlSZW5kZXJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgISF0aGlzLl9zY3JvbGxhYmxlUGFyZW50ICYmXG4gICAgICAgICAgISF0aGlzLl9zY3JvbGxhYmxlUGFyZW50LmFkZEV2ZW50TGlzdGVuZXJcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5fc2Nyb2xsYWJsZVBhcmVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgXCJzY3JvbGxcIixcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVZpc2liaWxpdHlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW5zdXJlVmlzaWJpbGl0eSgpO1xuICAgICAgfSwgMTApO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZW5zdXJlVmlzaWJpbGl0eSgpIHtcbiAgICBpZiAoISF0aGlzLl91cGRhdGVWaXNpYmlsaXR5KSB7XG4gICAgICB0aGlzLl91cGRhdGVWaXNpYmlsaXR5KCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBzdG9wTGF6eVJlbmRlcmluZygpIHtcbiAgICBpZiAoXG4gICAgICAhIXRoaXMuX3Njcm9sbGFibGVQYXJlbnQgJiZcbiAgICAgICEhdGhpcy5fdXBkYXRlVmlzaWJpbGl0eSAmJlxuICAgICAgISF0aGlzLl9zY3JvbGxhYmxlUGFyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXJcbiAgICApIHtcbiAgICAgIHRoaXMuX3Njcm9sbGFibGVQYXJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgXCJzY3JvbGxcIixcbiAgICAgICAgdGhpcy5fdXBkYXRlVmlzaWJpbGl0eVxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5fc2Nyb2xsYWJsZVBhcmVudCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl91cGRhdGVWaXNpYmlsaXR5ID0gdW5kZWZpbmVkO1xuICB9XG4gIHByaXZhdGUgaWRWYWx1ZTogc3RyaW5nO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcGFuZWw6IFBhbmVsTW9kZWxCYXNlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmlkVmFsdWUgPSBRdWVzdGlvblJvd01vZGVsLmdldFJvd0lkKCk7XG4gICAgdGhpcy52aXNpYmxlID0gcGFuZWwuYXJlSW52aXNpYmxlRWxlbWVudHNTaG93aW5nO1xuICAgIHRoaXMuY3JlYXRlTmV3QXJyYXkoXCJlbGVtZW50c1wiKTtcbiAgICB0aGlzLmNyZWF0ZU5ld0FycmF5KFwidmlzaWJsZUVsZW1lbnRzXCIpO1xuICB9XG4gIHByaXZhdGUgaXNMYXp5UmVuZGVyaW5nVmFsdWU6IGJvb2xlYW47XG4gIHB1YmxpYyBzZXRJc0xhenlSZW5kZXJpbmcodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5pc0xhenlSZW5kZXJpbmdWYWx1ZSA9IHZhbDtcbiAgICB0aGlzLmlzTmVlZFJlbmRlciA9ICF2YWw7XG4gIH1cbiAgcHVibGljIGlzTGF6eVJlbmRlcmluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0xhenlSZW5kZXJpbmdWYWx1ZSA9PT0gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWRWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGVsZW1lbnRzKCk6IEFycmF5PElFbGVtZW50PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImVsZW1lbnRzXCIpO1xuICB9XG4gIHB1YmxpYyBnZXQgdmlzaWJsZUVsZW1lbnRzKCk6IEFycmF5PElFbGVtZW50PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVFbGVtZW50c1wiKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCB2aXNpYmxlKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzTmVlZFJlbmRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaXNuZWVkcmVuZGVyXCIsIHRydWUpO1xuICB9XG4gIHB1YmxpYyBzZXQgaXNOZWVkUmVuZGVyKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzbmVlZHJlbmRlclwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyB1cGRhdGVWaXNpYmxlKCkge1xuICAgIHRoaXMudmlzaWJsZSA9IHRoaXMuY2FsY1Zpc2libGUoKTtcbiAgICB0aGlzLnNldFdpZHRoKCk7XG4gIH1cbiAgcHVibGljIGFkZEVsZW1lbnQocTogSUVsZW1lbnQpIHtcbiAgICB0aGlzLmVsZW1lbnRzLnB1c2gocSk7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlKCk7XG4gIH1cbiAgcHVibGljIGdldCBpbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhbmVsLnJvd3MuaW5kZXhPZih0aGlzKTtcbiAgfVxuICBwcml2YXRlIHNldFdpZHRoKCkge1xuICAgIHZhciB2aXNDb3VudCA9IHRoaXMudmlzaWJsZUVsZW1lbnRzLmxlbmd0aDtcbiAgICBpZiAodmlzQ291bnQgPT0gMCkgcmV0dXJuO1xuICAgIHZhciBjb3VudGVyID0gMDtcbiAgICB2YXIgcHJlU2V0V2lkdGhFbGVtZW50cyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsID0gdGhpcy5lbGVtZW50c1tpXTtcbiAgICAgIHRoaXMuc2V0RWxlbWVudE1heE1pbldpZHRoKGVsKTtcblxuICAgICAgaWYgKGVsLmlzVmlzaWJsZSkge1xuICAgICAgICB2YXIgd2lkdGggPSB0aGlzLmdldEVsZW1lbnRXaWR0aChlbCk7XG4gICAgICAgIGlmICghIXdpZHRoKSB7XG4gICAgICAgICAgZWwucmVuZGVyV2lkdGggPSB0aGlzLmdldFJlbmRlcmVkV2lkdGhGcm9tV2lkdGgod2lkdGgpO1xuICAgICAgICAgIHByZVNldFdpZHRoRWxlbWVudHMucHVzaChlbCk7XG4gICAgICAgIH1cbiAgICAgICAgZWwucmlnaHRJbmRlbnQgPSBjb3VudGVyIDwgdmlzQ291bnQgLSAxID8gMSA6IDA7XG4gICAgICAgIGNvdW50ZXIrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsLnJlbmRlcldpZHRoID0gXCJcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWwgPSB0aGlzLmVsZW1lbnRzW2ldO1xuICAgICAgaWYgKCFlbC5pc1Zpc2libGUgfHwgcHJlU2V0V2lkdGhFbGVtZW50cy5pbmRleE9mKGVsKSA+IC0xKSBjb250aW51ZTtcbiAgICAgIGlmIChwcmVTZXRXaWR0aEVsZW1lbnRzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIGVsLnJlbmRlcldpZHRoID0gKDEwMCAvIHZpc0NvdW50KS50b0ZpeGVkKDYpICsgXCIlXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbC5yZW5kZXJXaWR0aCA9IHRoaXMuZ2V0UmVuZGVyZWRDYWxjV2lkdGgoXG4gICAgICAgICAgZWwsXG4gICAgICAgICAgcHJlU2V0V2lkdGhFbGVtZW50cyxcbiAgICAgICAgICB2aXNDb3VudFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwdWJsaWMgc2V0RWxlbWVudE1heE1pbldpZHRoKGVsOiBJRWxlbWVudCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIGVsLndpZHRoICYmXG4gICAgICB0eXBlb2YgZWwud2lkdGggPT09IFwic3RyaW5nXCIgJiZcbiAgICAgIGVsLndpZHRoLmluZGV4T2YoXCIlXCIpID09PSAtMVxuICAgICkge1xuICAgICAgZWwubWluV2lkdGggPSBlbC53aWR0aDtcbiAgICAgIGVsLm1heFdpZHRoID0gZWwud2lkdGg7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZW5kZXJlZENhbGNXaWR0aChcbiAgICBlbDogSUVsZW1lbnQsXG4gICAgcHJlU2V0V2lkdGhFbGVtZW50czogQXJyYXk8SUVsZW1lbnQ+LFxuICAgIHZpc0NvdW50OiBudW1iZXJcbiAgKTogc3RyaW5nIHtcbiAgICB2YXIgZXhwcmVzc2lvbiA9IFwiMTAwJVwiO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJlU2V0V2lkdGhFbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgZXhwcmVzc2lvbiArPSBcIiAtIFwiICsgcHJlU2V0V2lkdGhFbGVtZW50c1tpXS5yZW5kZXJXaWR0aDtcbiAgICB9XG4gICAgdmFyIGNhbGNXaWR0aEVsID0gdmlzQ291bnQgLSBwcmVTZXRXaWR0aEVsZW1lbnRzLmxlbmd0aDtcbiAgICBpZiAoY2FsY1dpZHRoRWwgPiAxKSB7XG4gICAgICBleHByZXNzaW9uID0gXCIoXCIgKyBleHByZXNzaW9uICsgXCIpL1wiICsgY2FsY1dpZHRoRWwudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiY2FsYyhcIiArIGV4cHJlc3Npb24gKyBcIilcIjtcbiAgfVxuICBwcml2YXRlIGdldEVsZW1lbnRXaWR0aChlbDogSUVsZW1lbnQpOiBzdHJpbmcge1xuICAgIHZhciB3aWR0aCA9IGVsLndpZHRoO1xuICAgIGlmICghd2lkdGggfHwgdHlwZW9mIHdpZHRoICE9PSBcInN0cmluZ1wiKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gd2lkdGgudHJpbSgpO1xuICB9XG4gIHByaXZhdGUgZ2V0UmVuZGVyZWRXaWR0aEZyb21XaWR0aCh3aWR0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSGVscGVycy5pc051bWJlcih3aWR0aCkgPyB3aWR0aCArIFwicHhcIiA6IHdpZHRoO1xuICB9XG4gIHByaXZhdGUgY2FsY1Zpc2libGUoKTogYm9vbGVhbiB7XG4gICAgdmFyIHZpc0VsZW1lbnRzOiBBcnJheTxJRWxlbWVudD4gPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmVsZW1lbnRzW2ldLmlzVmlzaWJsZSkge1xuICAgICAgICB2aXNFbGVtZW50cy5wdXNoKHRoaXMuZWxlbWVudHNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5uZWVkVG9VcGRhdGVWaXNpYmxlRWxlbWVudHModmlzRWxlbWVudHMpKSB7XG4gICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmxlRWxlbWVudHNcIiwgdmlzRWxlbWVudHMpO1xuICAgIH1cbiAgICByZXR1cm4gdmlzRWxlbWVudHMubGVuZ3RoID4gMDtcbiAgfVxuICBwcml2YXRlIG5lZWRUb1VwZGF0ZVZpc2libGVFbGVtZW50cyh2aXNFbGVtZW50czogQXJyYXk8SUVsZW1lbnQ+KTogYm9vbGVhbiB7XG4gICAgaWYgKHZpc0VsZW1lbnRzLmxlbmd0aCAhPT0gdGhpcy52aXNpYmxlRWxlbWVudHMubGVuZ3RoKSByZXR1cm4gdHJ1ZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpc0VsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodmlzRWxlbWVudHNbaV0gIT09IHRoaXMudmlzaWJsZUVsZW1lbnRzW2ldKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBkaXNwb3NlKCkge1xuICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgICB0aGlzLnN0b3BMYXp5UmVuZGVyaW5nKCk7XG4gIH1cbiAgcHVibGljIGdldFJvd0NzcygpIHtcbiAgICByZXR1cm4gbmV3IENzc0NsYXNzQnVpbGRlcigpXG4gICAgICAuYXBwZW5kKHRoaXMucGFuZWwuY3NzQ2xhc3Nlcy5yb3cpXG4gICAgICAuYXBwZW5kKHRoaXMucGFuZWwuY3NzQ2xhc3Nlcy5yb3dNdWx0aXBsZSwgdGhpcy52aXNpYmxlRWxlbWVudHMubGVuZ3RoID4gMSlcbiAgICAgIC50b1N0cmluZygpO1xuXG4gIH1cbn1cblxuLyoqXG4gKiBBIGJhc2UgY2xhc3MgZm9yIGEgUGFuZWwgYW5kIFBhZ2Ugb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFBhbmVsTW9kZWxCYXNlIGV4dGVuZHMgU3VydmV5RWxlbWVudFxuICBpbXBsZW1lbnRzIElQYW5lbCwgSUNvbmRpdGlvblJ1bm5lciwgSVN1cnZleUVycm9yT3duZXIsIElUaXRsZU93bmVyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcGFuZWxDb3VudGVyID0gMTAwO1xuICBwcml2YXRlIHN0YXRpYyBnZXRQYW5lbElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwic3BfXCIgKyBQYW5lbE1vZGVsQmFzZS5wYW5lbENvdW50ZXIrKztcbiAgfVxuXG4gIHByaXZhdGUgZWxlbWVudHNWYWx1ZTogQXJyYXk8SUVsZW1lbnQ+O1xuICBwcml2YXRlIGlzUXVlc3Rpb25zUmVhZHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBxdWVzdGlvbnNWYWx1ZTogQXJyYXk8UXVlc3Rpb24+ID0gbmV3IEFycmF5PFF1ZXN0aW9uPigpO1xuICBhZGRFbGVtZW50Q2FsbGJhY2s6IChlbGVtZW50OiBJRWxlbWVudCkgPT4gdm9pZDtcbiAgcmVtb3ZlRWxlbWVudENhbGxiYWNrOiAoZWxlbWVudDogSUVsZW1lbnQpID0+IHZvaWQ7XG4gIG9uR2V0UXVlc3Rpb25UaXRsZUxvY2F0aW9uOiAoKSA9PiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nID0gXCJcIikge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHRoaXMuY3JlYXRlTmV3QXJyYXkoXCJyb3dzXCIpO1xuICAgIHRoaXMuZWxlbWVudHNWYWx1ZSA9IHRoaXMuY3JlYXRlTmV3QXJyYXkoXG4gICAgICBcImVsZW1lbnRzXCIsXG4gICAgICB0aGlzLm9uQWRkRWxlbWVudC5iaW5kKHRoaXMpLFxuICAgICAgdGhpcy5vblJlbW92ZUVsZW1lbnQuYmluZCh0aGlzKVxuICAgICk7XG4gICAgdGhpcy5pZCA9IFBhbmVsTW9kZWxCYXNlLmdldFBhbmVsSWQoKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwicmVxdWlyZWRFcnJvclRleHRcIiwgdGhpcyk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcInF1ZXN0aW9uVGl0bGVMb2NhdGlvblwiLCAoKSA9PiB7XG4gICAgICB0aGlzLm9uVmlzaWJsZUNoYW5nZWQuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMudXBkYXRlRWxlbWVudENzcyh0cnVlKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoXG4gICAgICBbXCJxdWVzdGlvblN0YXJ0SW5kZXhcIiwgXCJzaG93UXVlc3Rpb25OdW1iZXJzXCJdLFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInBhbmVsYmFzZVwiO1xuICB9XG4gIHB1YmxpYyBzZXRTdXJ2ZXlJbXBsKHZhbHVlOiBJU3VydmV5SW1wbCwgaXNMaWdodD86IGJvb2xlYW4pIHtcbiAgICBzdXBlci5zZXRTdXJ2ZXlJbXBsKHZhbHVlLCBpc0xpZ2h0KTtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHRoaXMub25WaXNpYmxlQ2hhbmdlZCgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5lbGVtZW50c1tpXS5zZXRTdXJ2ZXlJbXBsKHZhbHVlLCBpc0xpZ2h0KTtcbiAgICB9XG4gIH1cbiAgZW5kTG9hZGluZ0Zyb21Kc29uKCkge1xuICAgIHN1cGVyLmVuZExvYWRpbmdGcm9tSnNvbigpO1xuICAgIHRoaXMubWFya1F1ZXN0aW9uTGlzdERpcnR5KCk7XG4gICAgdGhpcy5vblJvd3NDaGFuZ2VkKCk7XG4gIH1cbiAgZ2V0IGhhc1RpdGxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAodGhpcy5jYW5TaG93VGl0bGUoKSAmJiB0aGlzLnRpdGxlLmxlbmd0aCA+IDApIHx8XG4gICAgICAodGhpcy5pc0Rlc2lnbk1vZGUgJiYgc2V0dGluZ3MuYWxsb3dTaG93RW1wdHlUaXRsZUluRGVzaWduTW9kZSlcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBjYW5TaG93VGl0bGUoKTogYm9vbGVhbiB7IHJldHVybiB0cnVlOyB9XG4gIGdldCBfc2hvd0Rlc2NyaXB0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAoKDxhbnk+dGhpcy5zdXJ2ZXkpLnNob3dQYWdlVGl0bGVzICYmIHRoaXMuZGVzY3JpcHRpb24ubGVuZ3RoID4gMCkgfHxcbiAgICAgICh0aGlzLmlzRGVzaWduTW9kZSAmJlxuICAgICAgICBzZXR0aW5ncy5hbGxvd1Nob3dFbXB0eVRpdGxlSW5EZXNpZ25Nb2RlICYmXG4gICAgICAgIHNldHRpbmdzLmFsbG93U2hvd0VtcHR5RGVzY3JpcHRpb25JbkRlc2lnbk1vZGUpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgbG9jYWxlQ2hhbmdlZCgpIHtcbiAgICBzdXBlci5sb2NhbGVDaGFuZ2VkKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAoPEJhc2U+KDxhbnk+dGhpcy5lbGVtZW50c1tpXSkpLmxvY2FsZUNoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGxvY1N0cnNDaGFuZ2VkKCkge1xuICAgIHN1cGVyLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmVsZW1lbnRzW2ldLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjaGFyL3N0cmluZyBmb3IgYSByZXF1aXJlZCBwYW5lbC5cbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5yZXF1aXJlZFRleHRcbiAgICovXG4gIHB1YmxpYyBnZXQgcmVxdWlyZWRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5ICE9IG51bGwgJiYgdGhpcy5pc1JlcXVpcmVkXG4gICAgICA/IHRoaXMuc3VydmV5LnJlcXVpcmVkVGV4dFxuICAgICAgOiBcIlwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgdGl0bGVQYXR0ZXJuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICEhdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5xdWVzdGlvblRpdGxlUGF0dGVybiA6IFwibnVtVGl0bGVSZXF1aXJlXCI7XG4gIH1cbiAgcHVibGljIGdldCBpc1JlcXVpcmVUZXh0T25TdGFydCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1JlcXVpcmVkICYmIHRoaXMudGl0bGVQYXR0ZXJuID09IFwicmVxdWlyZU51bVRpdGxlXCI7XG4gIH1cbiAgcHVibGljIGdldCBpc1JlcXVpcmVUZXh0QmVmb3JlVGl0bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNSZXF1aXJlZCAmJiB0aGlzLnRpdGxlUGF0dGVybiA9PSBcIm51bVJlcXVpcmVUaXRsZVwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNSZXF1aXJlVGV4dEFmdGVyVGl0bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNSZXF1aXJlZCAmJiB0aGlzLnRpdGxlUGF0dGVybiA9PSBcIm51bVRpdGxlUmVxdWlyZVwiO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgY3VzdG9tIHRleHQgdGhhdCB3aWxsIGJlIHNob3duIG9uIHJlcXVpcmVkIGVycm9yLiBVc2UgdGhpcyBwcm9wZXJ0eSwgaWYgeW91IGRvIG5vdCB3YW50IHRvIHNob3cgdGhlIGRlZmF1bHQgdGV4dC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcmVxdWlyZWRFcnJvclRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJyZXF1aXJlZEVycm9yVGV4dFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJlcXVpcmVkRXJyb3JUZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJyZXF1aXJlZEVycm9yVGV4dFwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NSZXF1aXJlZEVycm9yVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJyZXF1aXJlZEVycm9yVGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gcmFuZG9taXplIHF1ZXN0aW9ucy4gU2V0IGl0IHRvICdyYW5kb20nIHRvIHJhbmRvbWl6ZSBxdWVzdGlvbnMsICdpbml0aWFsJyB0byBrZWVwIHRoZW0gaW4gdGhlIHNhbWUgb3JkZXIgb3IgJ2RlZmF1bHQnIHRvIHVzZSB0aGUgU3VydmV5IHF1ZXN0aW9uc09yZGVyIHByb3BlcnR5XG4gICAqIEBzZWUgU3VydmV5TW9kZWwucXVlc3Rpb25zT3JkZXJcbiAgICogQHNlZSBhcmVRdWVzdGlvbnNSYW5kb21pemVkXG4gICAqL1xuICBwdWJsaWMgZ2V0IHF1ZXN0aW9uc09yZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uc09yZGVyXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcXVlc3Rpb25zT3JkZXIodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvbnNPcmRlclwiLCB2YWwpO1xuICB9XG4gIHByaXZhdGUgY2FuUmFuZG9taXplKGlzUmFuZG9tOiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzUmFuZG9tICYmICh0aGlzLnF1ZXN0aW9uc09yZGVyICE9PSBcImluaXRpYWxcIikgfHwgdGhpcy5xdWVzdGlvbnNPcmRlciA9PT0gXCJyYW5kb21cIjtcbiAgfVxuICBwcm90ZWN0ZWQgaXNSYW5kb21pemluZyA9IGZhbHNlO1xuICByYW5kb21pemVFbGVtZW50cyhpc1JhbmRvbTogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYW5SYW5kb21pemUoaXNSYW5kb20pIHx8IHRoaXMuaXNSYW5kb21pemluZykgcmV0dXJuO1xuICAgIHRoaXMuaXNSYW5kb21pemluZyA9IHRydWU7XG4gICAgdmFyIG9sZEVsZW1lbnRzID0gW107XG4gICAgdmFyIGVsZW1lbnRzID0gdGhpcy5lbGVtZW50cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvbGRFbGVtZW50cy5wdXNoKGVsZW1lbnRzW2ldKTtcbiAgICB9XG4gICAgdmFyIG5ld0VsZW1lbnRzID0gSGVscGVycy5yYW5kb21pemVBcnJheTxJRWxlbWVudD4ob2xkRWxlbWVudHMpO1xuICAgIHRoaXMuZWxlbWVudHMuc3BsaWNlKDAsIHRoaXMuZWxlbWVudHMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld0VsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmVsZW1lbnRzLnB1c2gobmV3RWxlbWVudHNbaV0pO1xuICAgIH1cbiAgICB0aGlzLmlzUmFuZG9taXppbmcgPSBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogQSBwYXJlbnQgZWxlbWVudC4gSXQgaXMgYWx3YXlzIG51bGwgZm9yIHRoZSBQYWdlIG9iamVjdCBhbmQgYWx3YXlzIG5vdCBudWxsIGZvciB0aGUgUGFuZWwgb2JqZWN0LiBQYW5lbCBvYmplY3QgbWF5IGNvbnRhaW4gUXVlc3Rpb25zIGFuZCBvdGhlciBQYW5lbHMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBhcmVudCgpOiBQYW5lbE1vZGVsQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInBhcmVudFwiLCBudWxsKTtcbiAgfVxuICBwdWJsaWMgc2V0IHBhcmVudCh2YWw6IFBhbmVsTW9kZWxCYXNlKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGFyZW50XCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBkZXB0aCgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLnBhcmVudCA9PSBudWxsKSByZXR1cm4gMDtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQuZGVwdGggKyAxO1xuICB9XG4gIC8qKlxuICAgKiBBbiBleHByZXNzaW9uIHRoYXQgcmV0dXJucyB0cnVlIG9yIGZhbHNlLiBJZiBpdCByZXR1cm5zIHRydWUgdGhlIFBhbmVsIGJlY29tZXMgdmlzaWJsZSBhbmQgaWYgaXQgcmV0dXJucyBmYWxzZSB0aGUgUGFuZWwgYmVjb21lcyBpbnZpc2libGUuIFRoZSBsaWJyYXJ5IHJ1bnMgdGhlIGV4cHJlc3Npb24gb24gc3VydmV5IHN0YXJ0IGFuZCBvbiBjaGFuZ2luZyBhIHF1ZXN0aW9uIHZhbHVlLiBJZiB0aGUgcHJvcGVydHkgaXMgZW1wdHkgdGhlbiB2aXNpYmxlIHByb3BlcnR5IGlzIHVzZWQuXG4gICAqIEBzZWUgdmlzaWJsZVxuICAgKi9cbiAgcHVibGljIGdldCB2aXNpYmxlSWYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZUlmXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdmlzaWJsZUlmKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZUlmXCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNhbGNDc3NDbGFzc2VzKGNzczogYW55KTogYW55IHtcbiAgICB2YXIgY2xhc3NlcyA9IHsgcGFuZWw6IHt9LCBlcnJvcjoge30sIHJvdzogXCJcIiwgcm93TXVsdGlwbGU6IFwiXCIgfTtcbiAgICB0aGlzLmNvcHlDc3NDbGFzc2VzKGNsYXNzZXMucGFuZWwsIGNzcy5wYW5lbCk7XG4gICAgdGhpcy5jb3B5Q3NzQ2xhc3NlcyhjbGFzc2VzLmVycm9yLCBjc3MuZXJyb3IpO1xuICAgIGlmICghIWNzcy5yb3cpIHtcbiAgICAgIGNsYXNzZXMucm93ID0gY3NzLnJvdztcbiAgICB9XG4gICAgaWYgKCEhY3NzLnJvd011bHRpcGxlKSB7XG4gICAgICBjbGFzc2VzLnJvd011bHRpcGxlID0gY3NzLnJvd011bHRpcGxlO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgIHRoaXMuc3VydmV5LnVwZGF0ZVBhbmVsQ3NzQ2xhc3Nlcyh0aGlzLCBjbGFzc2VzKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsYXNzZXM7XG4gIH1cbiAgLyoqXG4gICAqIEEgdW5pcXVlIGVsZW1lbnQgaWRlbnRpZmljYXRvci4gSXQgaXMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlkXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgaWQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpZFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQgb2JqZWN0IGlzIFBhbmVsLiBSZXR1cm5zIGZhbHNlIGlmIHRoZSBjdXJyZW50IG9iamVjdCBpcyBQYWdlIChhIHJvb3QgUGFuZWwpLlxuICAgKi9cbiAgcHVibGljIGdldCBpc1BhbmVsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZ2V0UGFuZWwoKTogSVBhbmVsIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBnZXRMYXlvdXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwicm93XCI7XG4gIH1cbiAgaXNMYXlvdXRUeXBlU3VwcG9ydGVkKGxheW91dFR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBsYXlvdXRUeXBlICE9PSBcImZsb3dcIjtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGlzdCBvZiBhbGwgcXVlc3Rpb25zIGxvY2F0ZWQgaW4gdGhlIFBhbmVsL1BhZ2UsIGluY2x1ZGluZyBpbiB0aGUgbmVzdGVkIFBhbmVscy5cbiAgICogQHNlZSBRdWVzdGlvblxuICAgKiBAc2VlIGVsZW1lbnRzXG4gICAqL1xuICBwdWJsaWMgZ2V0IHF1ZXN0aW9ucygpOiBBcnJheTxRdWVzdGlvbj4ge1xuICAgIGlmICghdGhpcy5pc1F1ZXN0aW9uc1JlYWR5KSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uc1ZhbHVlID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVsID0gdGhpcy5lbGVtZW50c1tpXTtcbiAgICAgICAgaWYgKGVsLmlzUGFuZWwpIHtcbiAgICAgICAgICB2YXIgcXMgPSAoPFBhbmVsTW9kZWw+ZWwpLnF1ZXN0aW9ucztcbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHFzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uc1ZhbHVlLnB1c2gocXNbal0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uc1ZhbHVlLnB1c2goPFF1ZXN0aW9uPmVsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5pc1F1ZXN0aW9uc1JlYWR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbnNWYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VmFsaWROYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCEhbmFtZSkgcmV0dXJuIG5hbWUudHJpbSgpO1xuICAgIHJldHVybiBuYW1lO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBxdWVzdGlvbiBieSBpdHMgbmFtZVxuICAgKiBAcGFyYW0gbmFtZSB0aGUgcXVlc3Rpb24gbmFtZVxuICAgKi9cbiAgcHVibGljIGdldFF1ZXN0aW9uQnlOYW1lKG5hbWU6IHN0cmluZyk6IFF1ZXN0aW9uIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbnM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChxdWVzdGlvbnNbaV0ubmFtZSA9PSBuYW1lKSByZXR1cm4gcXVlc3Rpb25zW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZWxlbWVudCBieSBpdHMgbmFtZS4gSXQgd29ya3MgcmVjdXJzaXZlbHkuXG4gICAqIEBwYXJhbSBuYW1lIHRoZSBlbGVtZW50IG5hbWVcbiAgICovXG4gIHB1YmxpYyBnZXRFbGVtZW50QnlOYW1lKG5hbWU6IHN0cmluZyk6IElFbGVtZW50IHtcbiAgICB2YXIgZWxlbWVudHMgPSB0aGlzLmVsZW1lbnRzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbCA9IGVsZW1lbnRzW2ldO1xuICAgICAgaWYgKGVsLm5hbWUgPT0gbmFtZSkgcmV0dXJuIGVsO1xuICAgICAgdmFyIHBubCA9IGVsLmdldFBhbmVsKCk7XG4gICAgICBpZiAoISFwbmwpIHtcbiAgICAgICAgdmFyIHJlcyA9ICg8UGFuZWxNb2RlbEJhc2U+cG5sKS5nZXRFbGVtZW50QnlOYW1lKG5hbWUpO1xuICAgICAgICBpZiAoISFyZXMpIHJldHVybiByZXM7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXRRdWVzdGlvbkJ5VmFsdWVOYW1lKHZhbHVlTmFtZTogc3RyaW5nKTogUXVlc3Rpb24ge1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ucztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHF1ZXN0aW9uc1tpXS5nZXRWYWx1ZU5hbWUoKSA9PSB2YWx1ZU5hbWUpIHJldHVybiBxdWVzdGlvbnNbaV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHF1ZXN0aW9uIHZhbHVlcyBvbiB0aGUgY3VycmVudCBwYWdlXG4gICAqL1xuICBwdWJsaWMgZ2V0VmFsdWUoKTogYW55IHtcbiAgICB2YXIgZGF0YTogYW55ID0ge307XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25zO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxID0gcXVlc3Rpb25zW2ldO1xuICAgICAgaWYgKHEuaXNFbXB0eSgpKSBjb250aW51ZTtcbiAgICAgIHZhciB2YWx1ZU5hbWUgPSBxLmdldFZhbHVlTmFtZSgpO1xuICAgICAgZGF0YVt2YWx1ZU5hbWVdID0gcS52YWx1ZTtcbiAgICAgIGlmICghIXRoaXMuZGF0YSkge1xuICAgICAgICB2YXIgY29tbWVudCA9IHRoaXMuZGF0YS5nZXRDb21tZW50KHZhbHVlTmFtZSk7XG4gICAgICAgIGlmICghIWNvbW1lbnQpIHtcbiAgICAgICAgICBkYXRhW3ZhbHVlTmFtZSArIHNldHRpbmdzLmNvbW1lbnRQcmVmaXhdID0gY29tbWVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIHF1ZXN0aW9ucyB2YWx1ZXMgYXMgYSBKU09OIG9iamVjdCB3aXRoIGRpc3BsYXkgdGV4dC4gRm9yIGV4YW1wbGUsIGZvciBkcm9wZG93biwgaXQgd291bGQgcmV0dXJuIHRoZSBpdGVtIHRleHQgaW5zdGVhZCBvZiBpdGVtIHZhbHVlLlxuICAgKiBAcGFyYW0ga2V5c0FzVGV4dCBTZXQgdGhpcyB2YWx1ZSB0byB0cnVlLCB0byByZXR1cm4ga2V5IChpbiBtYXRyaWNlcyBxdWVzdGlvbnMpIGFzIGRpc3BsYXkgdGV4dCBhcyB3ZWxsLlxuICAgKi9cbiAgcHVibGljIGdldERpc3BsYXlWYWx1ZShrZXlzQXNUZXh0OiBib29sZWFuKTogYW55IHtcbiAgICB2YXIgZGF0YTogYW55ID0ge307XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25zO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxID0gcXVlc3Rpb25zW2ldO1xuICAgICAgaWYgKHEuaXNFbXB0eSgpKSBjb250aW51ZTtcbiAgICAgIHZhciB2YWx1ZU5hbWUgPSBrZXlzQXNUZXh0ID8gcS50aXRsZSA6IHEuZ2V0VmFsdWVOYW1lKCk7XG4gICAgICBkYXRhW3ZhbHVlTmFtZV0gPSBxLmdldERpc3BsYXlWYWx1ZShrZXlzQXNUZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgcXVlc3Rpb24gY29tbWVudHMgb24gdGhlIGN1cnJlbnQgcGFnZVxuICAgKi9cbiAgcHVibGljIGdldENvbW1lbnRzKCk6IGFueSB7XG4gICAgdmFyIGNvbW1lbnRzID0ge307XG4gICAgaWYgKCF0aGlzLmRhdGEpIHJldHVybiBjb21tZW50cztcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbnM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxID0gcXVlc3Rpb25zW2ldO1xuICAgICAgdmFyIGNvbW1lbnQgPSB0aGlzLmRhdGEuZ2V0Q29tbWVudChxLmdldFZhbHVlTmFtZSgpKTtcbiAgICAgIGlmICghIWNvbW1lbnQpIHtcbiAgICAgICAgKDxhbnk+Y29tbWVudHMpW3EuZ2V0VmFsdWVOYW1lKCldID0gY29tbWVudDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbW1lbnRzO1xuICB9XG4gIC8qKlxuICAgKiBDYWxsIHRoaXMgZnVuY3Rpb24gdG8gcmVtb3ZlIGFsbCBxdWVzdGlvbiB2YWx1ZXMgZnJvbSB0aGUgY3VycmVudCBwYWdlL3BhbmVsLCB0aGF0IGVuZC11c2VyIHdpbGwgbm90IGJlIGFibGUgdG8gZW50ZXIuXG4gICAqIEZvciBleGFtcGxlIHRoZSB2YWx1ZSB0aGF0IGRvZXNuJ3QgZXhpc3RzIGluIGEgcmFkaWdyb3VwL2Ryb3Bkb3duL2NoZWNrYm94IGNob2ljZXMgb3IgbWF0cml4IHJvd3MvY29sdW1ucy5cbiAgICogUGxlYXNlIG5vdGUsIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBjbGVhciB2YWx1ZXMgZm9yIGludmlzaWJsZSBxdWVzdGlvbnMgb3IgdmFsdWVzIHRoYXQgZG9lc24ndCBhc3NvY2lhdGVkIHdpdGggcXVlc3Rpb25zLlxuICAgKiBAc2VlIFF1ZXN0aW9uLmNsZWFySW5jb3JyZWN0VmFsdWVzXG4gICAqL1xuICBwdWJsaWMgY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmVsZW1lbnRzW2ldLmNsZWFySW5jb3JyZWN0VmFsdWVzKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDYWxsIHRoaXMgZnVuY3Rpb24gdG8gY2xlYXIgYWxsIGVycm9ycyBpbiB0aGUgcGFuZWwgLyBwYWdlIGFuZCBhbGwgaXRzIGNoaWxkIGVsZW1lbnRzIChwYW5lbHMgYW5kIHF1ZXN0aW9ucylcbiAgICovXG4gIHB1YmxpYyBjbGVhckVycm9ycygpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuZWxlbWVudHNbaV0uY2xlYXJFcnJvcnMoKTtcbiAgICB9XG4gICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgfVxuICBwcml2YXRlIG1hcmtRdWVzdGlvbkxpc3REaXJ0eSgpIHtcbiAgICB0aGlzLmlzUXVlc3Rpb25zUmVhZHkgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5wYXJlbnQpIHRoaXMucGFyZW50Lm1hcmtRdWVzdGlvbkxpc3REaXJ0eSgpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIHRoZSBlbGVtZW50cyBpbiB0aGUgb2JqZWN0LCBQYW5lbC9QYWdlLiBFbGVtZW50cyBjYW4gYmUgcXVlc3Rpb25zIG9yIHBhbmVscy4gVGhlIGZ1bmN0aW9uIGRvZXNuJ3QgcmV0dXJuIGVsZW1lbnRzIGluIHRoZSBuZXN0ZWQgUGFuZWxzLlxuICAgKi9cbiAgcHVibGljIGdldCBlbGVtZW50cygpOiBBcnJheTxJRWxlbWVudD4ge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRzVmFsdWU7XG4gIH1cbiAgcHVibGljIGdldEVsZW1lbnRzSW5EZXNpZ24oaW5jbHVkZUhpZGRlbjogYm9vbGVhbiA9IGZhbHNlKTogQXJyYXk8SUVsZW1lbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50cztcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IGVsZW1lbnQgYmVsb25ncyB0byB0aGUgUGFuZWwvUGFnZS4gSXQgbG9va3MgaW4gbmVzdGVkIFBhbmVscyBhcyB3ZWxsLlxuICAgKiBAcGFyYW0gZWxlbWVudFxuICAgKiBAc2VlIFBhbmVsTW9kZWxcbiAgICovXG4gIHB1YmxpYyBjb250YWluc0VsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQpOiBib29sZWFuIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbDogYW55ID0gdGhpcy5lbGVtZW50c1tpXTtcbiAgICAgIGlmIChlbCA9PSBlbGVtZW50KSByZXR1cm4gdHJ1ZTtcbiAgICAgIHZhciBwbmwgPSBlbC5nZXRQYW5lbCgpO1xuICAgICAgaWYgKCEhcG5sKSB7XG4gICAgICAgIGlmICgoPFBhbmVsTW9kZWxCYXNlPnBubCkuY29udGFpbnNFbGVtZW50KGVsZW1lbnQpKSByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlLCB0byByZXF1aXJlIHRoZSBhbnN3ZXIgYXQgbGVhc3QgaW4gb25lIHF1ZXN0aW9uIGluIHRoZSBwYW5lbC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNSZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaXNSZXF1aXJlZFwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBpc1JlcXVpcmVkKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzUmVxdWlyZWRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogQW4gZXhwcmVzc2lvbiB0aGF0IHJldHVybnMgdHJ1ZSBvciBmYWxzZS4gSWYgaXQgcmV0dXJucyB0cnVlIHRoZSBQYW5lbC9QYWdlIGJlY29tZXMgcmVxdWlyZWQuXG4gICAqIFRoZSBsaWJyYXJ5IHJ1bnMgdGhlIGV4cHJlc3Npb24gb24gc3VydmV5IHN0YXJ0IGFuZCBvbiBjaGFuZ2luZyBhIHF1ZXN0aW9uIHZhbHVlLiBJZiB0aGUgcHJvcGVydHkgaXMgZW1wdHkgdGhlbiBpc1JlcXVpcmVkIHByb3BlcnR5IGlzIHVzZWQuXG4gICAqIEBzZWUgaXNSZXF1aXJlZFxuICAgKi9cbiAgcHVibGljIGdldCByZXF1aXJlZElmKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJlcXVpcmVkSWZcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCByZXF1aXJlZElmKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmVxdWlyZWRJZlwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBzZWFyY2hUZXh0KHRleHQ6IHN0cmluZywgZm91bmRlZDogQXJyYXk8SUZpbmRFbGVtZW50Pik6IHZvaWQge1xuICAgIHN1cGVyLnNlYXJjaFRleHQodGV4dCwgZm91bmRlZCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAoPEJhc2U+KDxhbnk+dGhpcy5lbGVtZW50c1tpXSkpLnNlYXJjaFRleHQodGV4dCwgZm91bmRlZCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUsIGlmIHRoZXJlIGlzIGFuIGVycm9yIG9uIHRoaXMgUGFnZSBvciBpbnNpZGUgdGhlIGN1cnJlbnQgUGFuZWxcbiAgICogQHBhcmFtIGZpcmVDYWxsYmFjayBzZXQgaXQgdG8gdHJ1ZSwgdG8gc2hvdyBlcnJvcnMgaW4gVUlcbiAgICogQHBhcmFtIGZvY3VzT25GaXJzdEVycm9yIHNldCBpdCB0byB0cnVlIHRvIGZvY3VzIG9uIHRoZSBmaXJzdCBxdWVzdGlvbiB0aGF0IGRvZXNuJ3QgcGFzcyB0aGUgdmFsaWRhdGlvblxuICAgKi9cbiAgcHVibGljIGhhc0Vycm9ycyhcbiAgICBmaXJlQ2FsbGJhY2s6IGJvb2xlYW4gPSB0cnVlLFxuICAgIGZvY3VzT25GaXJzdEVycm9yOiBib29sZWFuID0gZmFsc2UsXG4gICAgcmVjOiBhbnkgPSBudWxsXG4gICk6IGJvb2xlYW4ge1xuICAgIHJlYyA9ICEhcmVjXG4gICAgICA/IHJlY1xuICAgICAgOiB7XG4gICAgICAgIGZpcmVDYWxsYmFjazogZmlyZUNhbGxiYWNrLFxuICAgICAgICBmb2N1c2VPbkZpcnN0RXJyb3I6IGZvY3VzT25GaXJzdEVycm9yLFxuICAgICAgICBmaXJzdEVycm9yUXVlc3Rpb246IDxhbnk+bnVsbCxcbiAgICAgICAgcmVzdWx0OiBmYWxzZSxcbiAgICAgIH07XG4gICAgdGhpcy5oYXNFcnJvcnNDb3JlKHJlYyk7XG4gICAgaWYgKHJlYy5maXJzdEVycm9yUXVlc3Rpb24pIHtcbiAgICAgIHJlYy5maXJzdEVycm9yUXVlc3Rpb24uZm9jdXModHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiByZWMucmVzdWx0O1xuICB9XG4gIHByaXZhdGUgaGFzRXJyb3JzSW5QYW5lbHMocmVjOiBhbnkpIHtcbiAgICB2YXIgZXJyb3JzID0gPEFycmF5PGFueT4+W107XG4gICAgdGhpcy5oYXNSZXF1aXJlZEVycm9yKHJlYywgZXJyb3JzKTtcbiAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgIHZhciBjdXN0b21FcnJvciA9IHRoaXMuc3VydmV5LnZhbGlkYXRlUGFuZWwodGhpcyk7XG4gICAgICBpZiAoY3VzdG9tRXJyb3IpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goY3VzdG9tRXJyb3IpO1xuICAgICAgICByZWMucmVzdWx0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCEhcmVjLmZpcmVDYWxsYmFjaykge1xuICAgICAgaWYgKCEhdGhpcy5zdXJ2ZXkpIHtcbiAgICAgICAgdGhpcy5zdXJ2ZXkuYmVmb3JlU2V0dGluZ1BhbmVsRXJyb3JzKHRoaXMsIGVycm9ycyk7XG4gICAgICB9XG4gICAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICB9XG4gIH1cbiAgLy9JU3VydmV5RXJyb3JPd25lclxuICBnZXRFcnJvckN1c3RvbVRleHQodGV4dDogc3RyaW5nLCBlcnJvcjogU3VydmV5RXJyb3IpOiBzdHJpbmcge1xuICAgIGlmICghIXRoaXMuc3VydmV5KSByZXR1cm4gdGhpcy5zdXJ2ZXkuZ2V0RXJyb3JDdXN0b21UZXh0KHRleHQsIGVycm9yKTtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIHByaXZhdGUgaGFzUmVxdWlyZWRFcnJvcihyZWM6IGFueSwgZXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj4pIHtcbiAgICBpZiAoIXRoaXMuaXNSZXF1aXJlZCkgcmV0dXJuO1xuICAgIHZhciB2aXNRdWVzdGlvbnMgPSA8QXJyYXk8YW55Pj5bXTtcbiAgICB0aGlzLmFkZFF1ZXN0aW9uc1RvTGlzdCh2aXNRdWVzdGlvbnMsIHRydWUpO1xuICAgIGlmICh2aXNRdWVzdGlvbnMubGVuZ3RoID09IDApIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpc1F1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCF2aXNRdWVzdGlvbnNbaV0uaXNFbXB0eSgpKSByZXR1cm47XG4gICAgfVxuICAgIHJlYy5yZXN1bHQgPSB0cnVlO1xuICAgIGVycm9ycy5wdXNoKG5ldyBPbmVBbnN3ZXJSZXF1aXJlZEVycm9yKHRoaXMucmVxdWlyZWRFcnJvclRleHQsIHRoaXMpKTtcbiAgICBpZiAocmVjLmZvY3VzZU9uRmlyc3RFcnJvciAmJiAhcmVjLmZpcnN0RXJyb3JRdWVzdGlvbikge1xuICAgICAgcmVjLmZpcnN0RXJyb3JRdWVzdGlvbiA9IHZpc1F1ZXN0aW9uc1swXTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGhhc0Vycm9yc0NvcmUocmVjOiBhbnkpIHtcbiAgICB2YXIgZWxlbWVudHMgPSB0aGlzLmVsZW1lbnRzO1xuICAgIHZhciBlbGVtZW50ID0gbnVsbDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGVsZW1lbnQgPSBlbGVtZW50c1tpXTtcblxuICAgICAgaWYgKCFlbGVtZW50LmlzVmlzaWJsZSkgY29udGludWU7XG5cbiAgICAgIGlmIChlbGVtZW50LmlzUGFuZWwpIHtcbiAgICAgICAgKDxQYW5lbE1vZGVsQmFzZT4oPGFueT5lbGVtZW50KSkuaGFzRXJyb3JzQ29yZShyZWMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gPFF1ZXN0aW9uPmVsZW1lbnQ7XG4gICAgICAgIGlmIChxdWVzdGlvbi5pc1JlYWRPbmx5KSBjb250aW51ZTtcbiAgICAgICAgaWYgKHF1ZXN0aW9uLmhhc0Vycm9ycyhyZWMuZmlyZUNhbGxiYWNrLCByZWMpKSB7XG4gICAgICAgICAgaWYgKHJlYy5mb2N1c2VPbkZpcnN0RXJyb3IgJiYgcmVjLmZpcnN0RXJyb3JRdWVzdGlvbiA9PSBudWxsKSB7XG4gICAgICAgICAgICByZWMuZmlyc3RFcnJvclF1ZXN0aW9uID0gcXVlc3Rpb247XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlYy5yZXN1bHQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuaGFzRXJyb3JzSW5QYW5lbHMocmVjKTtcbiAgICB0aGlzLnVwZGF0ZUNvbnRhaW5zRXJyb3JzKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENvbnRhaW5zRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHZhciByZXMgPSBzdXBlci5nZXRDb250YWluc0Vycm9ycygpO1xuICAgIGlmIChyZXMpIHJldHVybiByZXM7XG4gICAgdmFyIGVsZW1lbnRzID0gdGhpcy5lbGVtZW50cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoZWxlbWVudHNbaV0uY29udGFpbnNFcnJvcnMpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdXBkYXRlRWxlbWVudFZpc2liaWxpdHkoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWwgPSB0aGlzLmVsZW1lbnRzW2ldO1xuICAgICAgKDxCYXNlPig8YW55PmVsKSkuc2V0UHJvcGVydHlWYWx1ZShcImlzVmlzaWJsZVwiLCBlbC5pc1Zpc2libGUpO1xuICAgICAgaWYgKGVsLmlzUGFuZWwpIHtcbiAgICAgICAgKDxQYW5lbE1vZGVsQmFzZT4oPGFueT5lbCkpLnVwZGF0ZUVsZW1lbnRWaXNpYmlsaXR5KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGdldEZpcnN0UXVlc3Rpb25Ub0ZvY3VzKHdpdGhFcnJvcjogYm9vbGVhbiA9IGZhbHNlKTogUXVlc3Rpb24ge1xuICAgIHZhciBlbGVtZW50cyA9IHRoaXMuZWxlbWVudHM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsID0gZWxlbWVudHNbaV07XG4gICAgICBpZiAoIWVsLmlzVmlzaWJsZSkgY29udGludWU7XG4gICAgICBpZiAoZWwuaXNQYW5lbCkge1xuICAgICAgICB2YXIgcmVzID0gKDxQYW5lbE1vZGVsQmFzZT4oPGFueT5lbCkpLmdldEZpcnN0UXVlc3Rpb25Ub0ZvY3VzKFxuICAgICAgICAgIHdpdGhFcnJvclxuICAgICAgICApO1xuICAgICAgICBpZiAoISFyZXMpIHJldHVybiByZXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcSA9IDxRdWVzdGlvbj5lbDtcbiAgICAgICAgaWYgKHEuaGFzSW5wdXQgJiYgKCF3aXRoRXJyb3IgfHwgcS5jdXJyZW50RXJyb3JDb3VudCA+IDApKSByZXR1cm4gcTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIENhbGwgaXQgdG8gZm9jdXMgdGhlIGlucHV0IG9uIHRoZSBmaXJzdCBxdWVzdGlvblxuICAgKi9cbiAgcHVibGljIGZvY3VzRmlyc3RRdWVzdGlvbigpIHtcbiAgICB2YXIgcSA9IHRoaXMuZ2V0Rmlyc3RRdWVzdGlvblRvRm9jdXMoKTtcbiAgICBpZiAoISFxKSB7XG4gICAgICBxLmZvY3VzKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDYWxsIGl0IHRvIGZvY3VzIHRoZSBpbnB1dCBvZiB0aGUgZmlyc3QgcXVlc3Rpb24gdGhhdCBoYXMgYW4gZXJyb3IuXG4gICAqL1xuICBwdWJsaWMgZm9jdXNGaXJzdEVycm9yUXVlc3Rpb24oKSB7XG4gICAgdmFyIHEgPSB0aGlzLmdldEZpcnN0UXVlc3Rpb25Ub0ZvY3VzKHRydWUpO1xuICAgIGlmICghIXEpIHtcbiAgICAgIHEuZm9jdXMoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEZpbGwgbGlzdCBhcnJheSB3aXRoIHRoZSBxdWVzdGlvbnMuXG4gICAqIEBwYXJhbSBsaXN0XG4gICAqIEBwYXJhbSB2aXNpYmxlT25seSBzZXQgaXQgdG8gdHJ1ZSB0byBnZXQgdmlzaWJsZSBxdWVzdGlvbnMgb25seVxuICAgKi9cbiAgcHVibGljIGFkZFF1ZXN0aW9uc1RvTGlzdChcbiAgICBsaXN0OiBBcnJheTxJUXVlc3Rpb24+LFxuICAgIHZpc2libGVPbmx5OiBib29sZWFuID0gZmFsc2UsXG4gICAgaW5jbHVkaW5nRGVzaWduVGltZTogYm9vbGVhbiA9IGZhbHNlXG4gICkge1xuICAgIHRoaXMuYWRkRWxlbWVudHNUb0xpc3QobGlzdCwgdmlzaWJsZU9ubHksIGluY2x1ZGluZ0Rlc2lnblRpbWUsIGZhbHNlKTtcbiAgfVxuICAvKipcbiAgICogRmlsbCBsaXN0IGFycmF5IHdpdGggdGhlIHBhbmVscy5cbiAgICogQHBhcmFtIGxpc3RcbiAgICovXG4gIHB1YmxpYyBhZGRQYW5lbHNJbnRvTGlzdChcbiAgICBsaXN0OiBBcnJheTxJUGFuZWw+LFxuICAgIHZpc2libGVPbmx5OiBib29sZWFuID0gZmFsc2UsXG4gICAgaW5jbHVkaW5nRGVzaWduVGltZTogYm9vbGVhbiA9IGZhbHNlXG4gICkge1xuICAgIHRoaXMuYWRkRWxlbWVudHNUb0xpc3QoXG4gICAgICA8QXJyYXk8SUVsZW1lbnQ+Pig8QXJyYXk8YW55Pj5saXN0KSxcbiAgICAgIHZpc2libGVPbmx5LFxuICAgICAgaW5jbHVkaW5nRGVzaWduVGltZSxcbiAgICAgIHRydWVcbiAgICApO1xuICB9XG4gIHByaXZhdGUgYWRkRWxlbWVudHNUb0xpc3QoXG4gICAgbGlzdDogQXJyYXk8SUVsZW1lbnQ+LFxuICAgIHZpc2libGVPbmx5OiBib29sZWFuLFxuICAgIGluY2x1ZGluZ0Rlc2lnblRpbWU6IGJvb2xlYW4sXG4gICAgaXNQYW5lbDogYm9vbGVhblxuICApIHtcbiAgICBpZiAodmlzaWJsZU9ubHkgJiYgIXRoaXMudmlzaWJsZSkgcmV0dXJuO1xuICAgIHRoaXMuYWRkRWxlbWVudHNUb0xpc3RDb3JlKFxuICAgICAgbGlzdCxcbiAgICAgIHRoaXMuZWxlbWVudHMsXG4gICAgICB2aXNpYmxlT25seSxcbiAgICAgIGluY2x1ZGluZ0Rlc2lnblRpbWUsXG4gICAgICBpc1BhbmVsXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGFkZEVsZW1lbnRzVG9MaXN0Q29yZShcbiAgICBsaXN0OiBBcnJheTxJRWxlbWVudD4sXG4gICAgZWxlbWVudHM6IEFycmF5PElFbGVtZW50PixcbiAgICB2aXNpYmxlT25seTogYm9vbGVhbixcbiAgICBpbmNsdWRpbmdEZXNpZ25UaW1lOiBib29sZWFuLFxuICAgIGlzUGFuZWw6IGJvb2xlYW5cbiAgKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsID0gZWxlbWVudHNbaV07XG4gICAgICBpZiAodmlzaWJsZU9ubHkgJiYgIWVsLnZpc2libGUpIGNvbnRpbnVlO1xuICAgICAgaWYgKChpc1BhbmVsICYmIGVsLmlzUGFuZWwpIHx8ICghaXNQYW5lbCAmJiAhZWwuaXNQYW5lbCkpIHtcbiAgICAgICAgbGlzdC5wdXNoKGVsKTtcbiAgICAgIH1cbiAgICAgIGlmIChlbC5pc1BhbmVsKSB7XG4gICAgICAgICg8UGFuZWxNb2RlbD5lbCkuYWRkRWxlbWVudHNUb0xpc3RDb3JlKFxuICAgICAgICAgIGxpc3QsXG4gICAgICAgICAgKDxQYW5lbE1vZGVsPmVsKS5lbGVtZW50cyxcbiAgICAgICAgICB2aXNpYmxlT25seSxcbiAgICAgICAgICBpbmNsdWRpbmdEZXNpZ25UaW1lLFxuICAgICAgICAgIGlzUGFuZWxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpbmNsdWRpbmdEZXNpZ25UaW1lKSB7XG4gICAgICAgICAgdGhpcy5hZGRFbGVtZW50c1RvTGlzdENvcmUoXG4gICAgICAgICAgICBsaXN0LFxuICAgICAgICAgICAgKDxTdXJ2ZXlFbGVtZW50Pig8YW55PmVsKSkuZ2V0RWxlbWVudHNJbkRlc2lnbihmYWxzZSksXG4gICAgICAgICAgICB2aXNpYmxlT25seSxcbiAgICAgICAgICAgIGluY2x1ZGluZ0Rlc2lnblRpbWUsXG4gICAgICAgICAgICBpc1BhbmVsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IG9iamVjdCBpcyBQYWdlIGFuZCBpdCBpcyB0aGUgY3VycmVudCBwYWdlLlxuICAgKi9cbiAgcHVibGljIGdldCBpc0FjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuc3VydmV5IHx8IDxQYWdlTW9kZWw+dGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2UgPT0gdGhpcy5yb290O1xuICB9XG4gIHB1YmxpYyB1cGRhdGVDdXN0b21XaWRnZXRzKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5lbGVtZW50c1tpXS51cGRhdGVDdXN0b21XaWRnZXRzKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSBkaWZmZXJlbnQgZnJvbSBcImRlZmF1bHRcIiB0byBzZXQgdGhlIHNwZWNpZmljIHF1ZXN0aW9uIHRpdGxlIGxvY2F0aW9uIGZvciB0aGlzIHBhbmVsL3BhZ2UuXG4gICAqIEBzZWUgU3VydmV5TW9kZWwucXVlc3Rpb25UaXRsZUxvY2F0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvblRpdGxlTG9jYXRpb25cIik7XG4gIH1cbiAgcHVibGljIHNldCBxdWVzdGlvblRpdGxlTG9jYXRpb24odmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uVGl0bGVMb2NhdGlvblwiLCB2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuICBnZXRRdWVzdGlvblRpdGxlTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5vbkdldFF1ZXN0aW9uVGl0bGVMb2NhdGlvbilcbiAgICAgIHJldHVybiB0aGlzLm9uR2V0UXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk7XG4gICAgaWYgKHRoaXMucXVlc3Rpb25UaXRsZUxvY2F0aW9uICE9IFwiZGVmYXVsdFwiKVxuICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb25UaXRsZUxvY2F0aW9uO1xuICAgIGlmICh0aGlzLnBhcmVudCkgcmV0dXJuIHRoaXMucGFyZW50LmdldFF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpO1xuICAgIHJldHVybiB0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5LnF1ZXN0aW9uVGl0bGVMb2NhdGlvbiA6IFwidG9wXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFN0YXJ0SW5kZXgoKTogc3RyaW5nIHtcbiAgICBpZiAoISF0aGlzLnBhcmVudCkgcmV0dXJuIHRoaXMucGFyZW50LmdldFF1ZXN0aW9uU3RhcnRJbmRleCgpO1xuICAgIGlmICghIXRoaXMuc3VydmV5KSByZXR1cm4gdGhpcy5zdXJ2ZXkucXVlc3Rpb25TdGFydEluZGV4O1xuICAgIHJldHVybiBcIlwiO1xuICB9XG4gIGdldFF1ZXN0aW9uU3RhcnRJbmRleCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFN0YXJ0SW5kZXgoKTtcbiAgfVxuICBnZXRDaGlsZHJlbkxheW91dFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJyb3dcIjtcbiAgfVxuICBwdWJsaWMgZ2V0UHJvZ3Jlc3NJbmZvKCk6IElQcm9ncmVzc0luZm8ge1xuICAgIHJldHVybiBTdXJ2ZXlFbGVtZW50LmdldFByb2dyZXNzSW5mb0J5RWxlbWVudHMoXG4gICAgICA8QXJyYXk8U3VydmV5RWxlbWVudD4+KDxhbnk+dGhpcy5lbGVtZW50cyksXG4gICAgICB0aGlzLmlzUmVxdWlyZWRcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgcm9vdCgpOiBQYW5lbE1vZGVsQmFzZSB7XG4gICAgdmFyIHJlcyA9IDxQYW5lbE1vZGVsQmFzZT50aGlzO1xuICAgIHdoaWxlIChyZXMucGFyZW50KSByZXMgPSByZXMucGFyZW50O1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGNoaWxkVmlzaWJpbGl0eUNoYW5nZWQoKSB7XG4gICAgdmFyIG5ld0lzVmlzaWJsZVZhbHVlID0gdGhpcy5nZXRJc1BhZ2VWaXNpYmxlKG51bGwpO1xuICAgIHZhciBvbGRJc1Zpc2libGVWYWx1ZSA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzVmlzaWJsZVwiLCB0cnVlKTtcbiAgICBpZiAobmV3SXNWaXNpYmxlVmFsdWUgIT09IG9sZElzVmlzaWJsZVZhbHVlKSB7XG4gICAgICB0aGlzLm9uVmlzaWJsZUNoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVJvd0FuZFNldExhenkoaW5kZXg6IG51bWJlcik6IFF1ZXN0aW9uUm93TW9kZWwge1xuICAgIGNvbnN0IHJvdyA9IHRoaXMuY3JlYXRlUm93KCk7XG4gICAgcm93LnNldElzTGF6eVJlbmRlcmluZyh0aGlzLmlzTGF6eVJlbmRlckluUm93KGluZGV4KSk7XG4gICAgcmV0dXJuIHJvdztcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUm93KCk6IFF1ZXN0aW9uUm93TW9kZWwge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25Sb3dNb2RlbCh0aGlzKTtcbiAgfVxuICBwdWJsaWMgb25TdXJ2ZXlMb2FkKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5lbGVtZW50c1tpXS5vblN1cnZleUxvYWQoKTtcbiAgICB9XG4gICAgdGhpcy5vbkVsZW1lbnRWaXNpYmlsaXR5Q2hhbmdlZCh0aGlzKTtcbiAgfVxuICBwdWJsaWMgb25GaXJzdFJlbmRlcmluZygpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuZWxlbWVudHNbaV0ub25GaXJzdFJlbmRlcmluZygpO1xuICAgIH1cbiAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcbiAgfVxuICBnZXQgcm93cygpOiBBcnJheTxRdWVzdGlvblJvd01vZGVsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJvd3NcIik7XG4gIH1cblxuICBwdWJsaWMgZW5zdXJlUm93c1Zpc2liaWxpdHkoKSB7XG4gICAgdGhpcy5yb3dzLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgcm93LmVuc3VyZVZpc2liaWxpdHkoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblJvd3NDaGFuZ2VkKCkge1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicm93c1wiLCB0aGlzLmJ1aWxkUm93cygpKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25BZGRFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50LCBpbmRleDogbnVtYmVyKSB7XG4gICAgZWxlbWVudC5zZXRTdXJ2ZXlJbXBsKHRoaXMuc3VydmV5SW1wbCk7XG4gICAgZWxlbWVudC5wYXJlbnQgPSB0aGlzO1xuICAgIHRoaXMubWFya1F1ZXN0aW9uTGlzdERpcnR5KCk7XG4gICAgdGhpcy51cGRhdGVSb3dzT25FbGVtZW50QWRkZWQoZWxlbWVudCwgaW5kZXgpO1xuICAgIGlmIChlbGVtZW50LmlzUGFuZWwpIHtcbiAgICAgIHZhciBwID0gPFBhbmVsTW9kZWw+ZWxlbWVudDtcbiAgICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgICB0aGlzLnN1cnZleS5wYW5lbEFkZGVkKHAsIGluZGV4LCB0aGlzLCB0aGlzLnJvb3QpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgICAgdmFyIHEgPSA8UXVlc3Rpb24+ZWxlbWVudDtcbiAgICAgICAgdGhpcy5zdXJ2ZXkucXVlc3Rpb25BZGRlZChxLCBpbmRleCwgdGhpcywgdGhpcy5yb290KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCEhdGhpcy5hZGRFbGVtZW50Q2FsbGJhY2spIHRoaXMuYWRkRWxlbWVudENhbGxiYWNrKGVsZW1lbnQpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAoPEJhc2U+KDxhbnk+ZWxlbWVudCkpLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoXG4gICAgICBbXCJ2aXNpYmxlXCIsIFwiaXNWaXNpYmxlXCJdLFxuICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLm9uRWxlbWVudFZpc2liaWxpdHlDaGFuZ2VkKGVsZW1lbnQpO1xuICAgICAgfSxcbiAgICAgIHRoaXMuaWRcbiAgICApO1xuICAgICg8QmFzZT4oPGFueT5lbGVtZW50KSkucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXG4gICAgICBcInN0YXJ0V2l0aE5ld0xpbmVcIixcbiAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi5vbkVsZW1lbnRTdGFydFdpdGhOZXdMaW5lQ2hhbmdlZChlbGVtZW50KTtcbiAgICAgIH0sXG4gICAgICB0aGlzLmlkXG4gICAgKTtcbiAgICB0aGlzLm9uRWxlbWVudFZpc2liaWxpdHlDaGFuZ2VkKHRoaXMpO1xuICB9XG4gIHByb3RlY3RlZCBvblJlbW92ZUVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQpIHtcbiAgICBlbGVtZW50LnBhcmVudCA9IG51bGw7XG4gICAgdGhpcy5tYXJrUXVlc3Rpb25MaXN0RGlydHkoKTtcbiAgICAoPEJhc2U+KDxhbnk+ZWxlbWVudCkpLnVuUmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydGllc1ZhbHVlQ2hhbmdlZChcbiAgICAgIFtcInZpc2libGVcIiwgXCJpc1Zpc2libGVcIiwgXCJzdGFydFdpdGhOZXdMaW5lXCJdLFxuICAgICAgdGhpcy5pZFxuICAgICk7XG4gICAgdGhpcy51cGRhdGVSb3dzT25FbGVtZW50UmVtb3ZlZChlbGVtZW50KTtcbiAgICBpZiAodGhpcy5pc1JhbmRvbWl6aW5nKSByZXR1cm47XG4gICAgaWYgKCFlbGVtZW50LmlzUGFuZWwpIHtcbiAgICAgIGlmICh0aGlzLnN1cnZleSkgdGhpcy5zdXJ2ZXkucXVlc3Rpb25SZW1vdmVkKDxRdWVzdGlvbj5lbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuc3VydmV5KSB0aGlzLnN1cnZleS5wYW5lbFJlbW92ZWQoZWxlbWVudCk7XG4gICAgfVxuICAgIGlmICghIXRoaXMucmVtb3ZlRWxlbWVudENhbGxiYWNrKSB0aGlzLnJlbW92ZUVsZW1lbnRDYWxsYmFjayhlbGVtZW50KTtcbiAgICB0aGlzLm9uRWxlbWVudFZpc2liaWxpdHlDaGFuZ2VkKHRoaXMpO1xuICB9XG4gIHByaXZhdGUgb25FbGVtZW50VmlzaWJpbGl0eUNoYW5nZWQoZWxlbWVudDogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24gfHwgdGhpcy5pc1JhbmRvbWl6aW5nKSByZXR1cm47XG4gICAgdGhpcy51cGRhdGVSb3dzVmlzaWJpbGl0eShlbGVtZW50KTtcbiAgICB0aGlzLmNoaWxkVmlzaWJpbGl0eUNoYW5nZWQoKTtcbiAgICBpZiAoISF0aGlzLnBhcmVudCkge1xuICAgICAgdGhpcy5wYXJlbnQub25FbGVtZW50VmlzaWJpbGl0eUNoYW5nZWQodGhpcyk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgb25FbGVtZW50U3RhcnRXaXRoTmV3TGluZUNoYW5nZWQoZWxlbWVudDogYW55KSB7XG4gICAgdGhpcy5vblJvd3NDaGFuZ2VkKCk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVSb3dzVmlzaWJpbGl0eShlbGVtZW50OiBhbnkpIHtcbiAgICB2YXIgcm93cyA9IHRoaXMucm93cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByb3cgPSByb3dzW2ldO1xuICAgICAgaWYgKHJvdy5lbGVtZW50cy5pbmRleE9mKGVsZW1lbnQpID4gLTEpIHtcbiAgICAgICAgcm93LnVwZGF0ZVZpc2libGUoKTtcbiAgICAgICAgaWYgKHJvdy52aXNpYmxlICYmICFyb3cuaXNOZWVkUmVuZGVyKSB7XG4gICAgICAgICAgcm93LmlzTmVlZFJlbmRlciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgY2FuQnVpbGRSb3dzKCkge1xuICAgIHJldHVybiAhdGhpcy5pc0xvYWRpbmdGcm9tSnNvbiAmJiB0aGlzLmdldENoaWxkcmVuTGF5b3V0VHlwZSgpID09IFwicm93XCI7XG4gIH1cbiAgcHJpdmF0ZSBidWlsZFJvd3MoKTogQXJyYXk8UXVlc3Rpb25Sb3dNb2RlbD4ge1xuICAgIGlmICghdGhpcy5jYW5CdWlsZFJvd3MoKSkgcmV0dXJuIFtdO1xuICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXk8UXVlc3Rpb25Sb3dNb2RlbD4oKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbCA9IHRoaXMuZWxlbWVudHNbaV07XG4gICAgICB2YXIgaXNOZXdSb3cgPSBpID09IDAgfHwgZWwuc3RhcnRXaXRoTmV3TGluZTtcbiAgICAgIHZhciByb3cgPSBpc05ld1JvdyA/IHRoaXMuY3JlYXRlUm93QW5kU2V0TGF6eShyZXN1bHQubGVuZ3RoKSA6IHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV07XG4gICAgICBpZiAoaXNOZXdSb3cpIHJlc3VsdC5wdXNoKHJvdyk7XG4gICAgICByb3cuYWRkRWxlbWVudChlbCk7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHRbaV0udXBkYXRlVmlzaWJsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHByaXZhdGUgaXNMYXp5UmVuZGVySW5Sb3cocm93SW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkgfHwgIXRoaXMuc3VydmV5LmlzTGF6eVJlbmRlcmluZykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAoXG4gICAgICByb3dJbmRleCA+PSBzZXR0aW5ncy5sYXp5Um93c1JlbmRlcmluZ1N0YXJ0Um93IHx8XG4gICAgICAhdGhpcy5jYW5SZW5kZXJGaXJzdFJvd3MoKVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJlbmRlckZpcnN0Um93cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1BhZ2U7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVSb3dzT25FbGVtZW50QWRkZWQoZWxlbWVudDogSUVsZW1lbnQsIGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoIXRoaXMuY2FuQnVpbGRSb3dzKCkpIHJldHVybjtcbiAgICB2YXIgZHJhZ0Ryb3BJbmZvID0gbmV3IERyYWdEcm9wSW5mbyhudWxsLCBlbGVtZW50KTtcbiAgICBkcmFnRHJvcEluZm8udGFyZ2V0ID0gZWxlbWVudDtcbiAgICBkcmFnRHJvcEluZm8uaXNFZGdlID0gdGhpcy5lbGVtZW50cy5sZW5ndGggPiAxO1xuICAgIGlmICh0aGlzLmVsZW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIGRyYWdEcm9wSW5mby5kZXN0aW5hdGlvbiA9IHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRyYWdEcm9wSW5mby5pc0JvdHRvbSA9IGluZGV4ID4gMDtcbiAgICAgIGlmIChpbmRleCA9PSAwKSB7XG4gICAgICAgIGRyYWdEcm9wSW5mby5kZXN0aW5hdGlvbiA9IHRoaXMuZWxlbWVudHNbMV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkcmFnRHJvcEluZm8uZGVzdGluYXRpb24gPSB0aGlzLmVsZW1lbnRzW2luZGV4IC0gMV07XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZHJhZ0Ryb3BBZGRUYXJnZXRUb1JvdyhkcmFnRHJvcEluZm8sIG51bGwpO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlUm93c09uRWxlbWVudFJlbW92ZWQoZWxlbWVudDogSUVsZW1lbnQpIHtcbiAgICBpZiAoIXRoaXMuY2FuQnVpbGRSb3dzKCkpIHJldHVybjtcbiAgICB0aGlzLnVwZGF0ZVJvd3NSZW1vdmVFbGVtZW50RnJvbVJvdyhcbiAgICAgIGVsZW1lbnQsXG4gICAgICB0aGlzLmZpbmRSb3dCeUVsZW1lbnQoZWxlbWVudClcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVSb3dzUmVtb3ZlRWxlbWVudEZyb21Sb3coXG4gICAgZWxlbWVudDogSUVsZW1lbnQsXG4gICAgcm93OiBRdWVzdGlvblJvd01vZGVsXG4gICkge1xuICAgIGlmICghcm93IHx8ICFyb3cucGFuZWwpIHJldHVybjtcbiAgICB2YXIgZWxJbmRleCA9IHJvdy5lbGVtZW50cy5pbmRleE9mKGVsZW1lbnQpO1xuICAgIGlmIChlbEluZGV4IDwgMCkgcmV0dXJuO1xuICAgIHJvdy5lbGVtZW50cy5zcGxpY2UoZWxJbmRleCwgMSk7XG4gICAgaWYgKHJvdy5lbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICByb3cudXBkYXRlVmlzaWJsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocm93LmluZGV4ID49IDApIHtcbiAgICAgICAgcm93LnBhbmVsLnJvd3Muc3BsaWNlKHJvdy5pbmRleCwgMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZmluZFJvd0J5RWxlbWVudChlbDogSUVsZW1lbnQpOiBRdWVzdGlvblJvd01vZGVsIHtcbiAgICB2YXIgcm93cyA9IHRoaXMucm93cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyb3dzW2ldLmVsZW1lbnRzLmluZGV4T2YoZWwpID4gLTEpIHJldHVybiByb3dzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBlbGVtZW50V2lkdGhDaGFuZ2VkKGVsOiBJRWxlbWVudCkge1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgdmFyIHJvdyA9IHRoaXMuZmluZFJvd0J5RWxlbWVudChlbCk7XG4gICAgaWYgKCEhcm93KSB7XG4gICAgICByb3cudXBkYXRlVmlzaWJsZSgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJucyByZW5kZXJlZCB0aXRsZSB0ZXh0IG9yIGh0bWwuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHByb2Nlc3NlZFRpdGxlKCkge1xuICAgIHJldHVybiB0aGlzLmdldFJlbmRlcmVkVGl0bGUodGhpcy5sb2NUaXRsZS50ZXh0T3JIdG1sKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UmVuZGVyZWRUaXRsZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGV4dFByb2Nlc3NvciAhPSBudWxsXG4gICAgICA/IHRoaXMudGV4dFByb2Nlc3Nvci5wcm9jZXNzVGV4dChzdHIsIHRydWUpXG4gICAgICA6IHN0cjtcbiAgfVxuICAvKipcbiAgICogVXNlIGl0IHRvIGdldC9zZXQgdGhlIG9iamVjdCB2aXNpYmlsaXR5LlxuICAgKiBAc2VlIHZpc2libGVJZlxuICAgKi9cbiAgcHVibGljIGdldCB2aXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmxlXCIsIHRydWUpO1xuICB9XG4gIHB1YmxpYyBzZXQgdmlzaWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSA9PT0gdGhpcy52aXNpYmxlKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZVwiLCB2YWx1ZSk7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNWaXNpYmxlXCIsIHRoaXMuaXNWaXNpYmxlKTtcbiAgICBpZiAoIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHRoaXMub25WaXNpYmxlQ2hhbmdlZCgpO1xuICB9XG4gIHByb3RlY3RlZCBvblZpc2libGVDaGFuZ2VkKCkge1xuICAgIGlmICh0aGlzLmlzUmFuZG9taXppbmcpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc1Zpc2libGVcIiwgdGhpcy5pc1Zpc2libGUpO1xuICAgIGlmIChcbiAgICAgICEhdGhpcy5zdXJ2ZXkgJiZcbiAgICAgIHRoaXMuc3VydmV5LmlzQ2xlYXJWYWx1ZU9uSGlkZGVuQ29udGFpbmVyICYmXG4gICAgICAhdGhpcy5pc0xvYWRpbmdGcm9tSnNvblxuICAgICkge1xuICAgICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25zO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmlzaWJsZSkge1xuICAgICAgICAgIHF1ZXN0aW9uc1tpXS5jbGVhclZhbHVlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcXVlc3Rpb25zW2ldLnVwZGF0ZVZhbHVlV2l0aERlZmF1bHRzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBvYmplY3QgaXMgdmlzaWJsZSBvciBzdXJ2ZXkgaXMgaW4gZGVzaWduIG1vZGUgcmlnaHQgbm93LlxuICAgKi9cbiAgcHVibGljIGdldCBpc1Zpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYXJlSW52aXNpYmxlRWxlbWVudHNTaG93aW5nIHx8IHRoaXMuZ2V0SXNQYWdlVmlzaWJsZShudWxsKTtcbiAgfVxuICBnZXRJc1BhZ2VWaXNpYmxlKGV4Y2VwdGlvblF1ZXN0aW9uOiBJUXVlc3Rpb24pOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMudmlzaWJsZSkgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuZWxlbWVudHNbaV0gPT0gZXhjZXB0aW9uUXVlc3Rpb24pIGNvbnRpbnVlO1xuICAgICAgaWYgKHRoaXMuZWxlbWVudHNbaV0uaXNWaXNpYmxlKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByaXZhdGUgbGFzdFZpc2libGVJbmRleDogbnVtYmVyO1xuICBwdWJsaWMgc2V0VmlzaWJsZUluZGV4KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy5pc1Zpc2libGUgfHwgaW5kZXggPCAwKSB7XG4gICAgICB0aGlzLnJlc2V0VmlzaWJsZUluZGV4ZXMoKTtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICB0aGlzLmxhc3RWaXNpYmxlSW5kZXggPSBpbmRleDtcbiAgICB2YXIgc3RhcnRJbmRleCA9IGluZGV4O1xuICAgIGluZGV4ICs9IHRoaXMuYmVmb3JlU2V0VmlzaWJsZUluZGV4KGluZGV4KTtcbiAgICB2YXIgcGFuZWxTdGFydEluZGV4ID0gdGhpcy5nZXRQYW5lbFN0YXJ0SW5kZXgoaW5kZXgpO1xuICAgIHZhciBwYW5lbEluZGV4ID0gcGFuZWxTdGFydEluZGV4O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgcGFuZWxJbmRleCArPSB0aGlzLmVsZW1lbnRzW2ldLnNldFZpc2libGVJbmRleChwYW5lbEluZGV4KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNDb250aW51ZU51bWJlcmluZygpKSB7XG4gICAgICBpbmRleCArPSBwYW5lbEluZGV4IC0gcGFuZWxTdGFydEluZGV4O1xuICAgIH1cbiAgICByZXR1cm4gaW5kZXggLSBzdGFydEluZGV4O1xuICB9XG4gIHByaXZhdGUgdXBkYXRlVmlzaWJsZUluZGV4ZXMoKSB7XG4gICAgaWYgKHRoaXMubGFzdFZpc2libGVJbmRleCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgdGhpcy5yZXNldFZpc2libGVJbmRleGVzKCk7XG4gICAgdGhpcy5zZXRWaXNpYmxlSW5kZXgodGhpcy5sYXN0VmlzaWJsZUluZGV4KTtcbiAgfVxuICBwcml2YXRlIHJlc2V0VmlzaWJsZUluZGV4ZXMoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmVsZW1lbnRzW2ldLnNldFZpc2libGVJbmRleCgtMSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBiZWZvcmVTZXRWaXNpYmxlSW5kZXgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFBhbmVsU3RhcnRJbmRleChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cbiAgcHJvdGVjdGVkIGlzQ29udGludWVOdW1iZXJpbmcoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiByZWFkT25seSBwcm9wZXJ0eSBpcyB0cnVlIG9yIHN1cnZleSBpcyBpbiBkaXNwbGF5IG1vZGUgb3IgcGFyZW50IHBhbmVsL3BhZ2UgaXMgcmVhZE9ubHkuXG4gICAqIEBzZWUgU3VydmV5TW9kZWwubW9kZWxcbiAgICogQHNlZSByZWFkT25seVxuICAgKi9cbiAgcHVibGljIGdldCBpc1JlYWRPbmx5KCk6IGJvb2xlYW4ge1xuICAgIHZhciBpc1BhcmVudFJlYWRPbmx5ID0gISF0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC5pc1JlYWRPbmx5O1xuICAgIHZhciBpc1N1cnZleVJlYWRPbmx5ID0gISF0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5pc0Rpc3BsYXlNb2RlO1xuICAgIHJldHVybiB0aGlzLnJlYWRPbmx5IHx8IGlzUGFyZW50UmVhZE9ubHkgfHwgaXNTdXJ2ZXlSZWFkT25seTtcbiAgfVxuICBwcm90ZWN0ZWQgb25SZWFkT25seUNoYW5nZWQoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWwgPSA8U3VydmV5RWxlbWVudD4oPGFueT50aGlzLmVsZW1lbnRzW2ldKTtcbiAgICAgIGVsLnNldFByb3BlcnR5VmFsdWUoXCJpc1JlYWRPbmx5XCIsIGVsLmlzUmVhZE9ubHkpO1xuICAgIH1cbiAgICBzdXBlci5vblJlYWRPbmx5Q2hhbmdlZCgpO1xuICB9XG4gIHB1YmxpYyB1cGRhdGVFbGVtZW50Q3NzKHJlTmV3PzogYm9vbGVhbikge1xuICAgIHN1cGVyLnVwZGF0ZUVsZW1lbnRDc3MocmVOZXcpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZWwgPSA8U3VydmV5RWxlbWVudD4oPGFueT50aGlzLmVsZW1lbnRzW2ldKTtcbiAgICAgIGVsLnVwZGF0ZUVsZW1lbnRDc3MocmVOZXcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBbiBleHByZXNzaW9uIHRoYXQgcmV0dXJucyB0cnVlIG9yIGZhbHNlLiBJZiBpdCByZXR1cm5zIGZhbHNlIHRoZSBQYW5lbC9QYWdlIGJlY29tZXMgcmVhZCBvbmx5IGFuZCBhbiBlbmQtdXNlciB3aWxsIG5vdCBhYmxlIHRvIGFuc3dlciBvbiBxdXN0aW9ucyBpbnNpZGUgaXQuXG4gICAqIFRoZSBsaWJyYXJ5IHJ1bnMgdGhlIGV4cHJlc3Npb24gb24gc3VydmV5IHN0YXJ0IGFuZCBvbiBjaGFuZ2luZyBhIHF1ZXN0aW9uIHZhbHVlLiBJZiB0aGUgcHJvcGVydHkgaXMgZW1wdHkgdGhlbiByZWFkT25seSBwcm9wZXJ0eSBpcyB1c2VkLlxuICAgKiBAc2VlIHJlYWRPbmx5XG4gICAqIEBzZWUgaXNSZWFkT25seVxuICAgKi9cbiAgcHVibGljIGdldCBlbmFibGVJZigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJlbmFibGVJZlwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGVuYWJsZUlmKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZW5hYmxlSWZcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogQWRkIGFuIGVsZW1lbnQgaW50byBQYW5lbCBvciBQYWdlLiBSZXR1cm5zIHRydWUgaWYgdGhlIGVsZW1lbnQgYWRkZWQgc3VjY2Vzc2Z1bGx5LiBPdGhlcndpc2UgcmV0dXJucyBmYWxzZS5cbiAgICogQHBhcmFtIGVsZW1lbnRcbiAgICogQHBhcmFtIGluZGV4IGVsZW1lbnQgaW5kZXggaW4gdGhlIGVsZW1lbnRzIGFycmF5XG4gICAqL1xuICBwdWJsaWMgYWRkRWxlbWVudChlbGVtZW50OiBJRWxlbWVudCwgaW5kZXg6IG51bWJlciA9IC0xKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmNhbkFkZEVsZW1lbnQoZWxlbWVudCkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZWxlbWVudHMuc3BsaWNlKGluZGV4LCAwLCBlbGVtZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgaW5zZXJ0RWxlbWVudEFmdGVyKGVsZW1lbnQ6IElFbGVtZW50LCBhZnRlcjogSUVsZW1lbnQpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZWxlbWVudHMuaW5kZXhPZihhZnRlcik7XG4gICAgaWYgKGluZGV4ID49IDApIHRoaXMuYWRkRWxlbWVudChlbGVtZW50LCBpbmRleCArIDEpO1xuICB9XG4gIHB1YmxpYyBpbnNlcnRFbGVtZW50QmVmb3JlKGVsZW1lbnQ6IElFbGVtZW50LCBiZWZvcmU6IElFbGVtZW50KSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmVsZW1lbnRzLmluZGV4T2YoYmVmb3JlKTtcbiAgICBpZiAoaW5kZXggPj0gMCkgdGhpcy5hZGRFbGVtZW50KGVsZW1lbnQsIGluZGV4KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjYW5BZGRFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICEhZWxlbWVudCAmJiBlbGVtZW50LmlzTGF5b3V0VHlwZVN1cHBvcnRlZCh0aGlzLmdldENoaWxkcmVuTGF5b3V0VHlwZSgpKVxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIEFkZCBhIHF1ZXN0aW9uIGludG8gUGFuZWwgb3IgUGFnZS4gUmV0dXJucyB0cnVlIGlmIHRoZSBxdWVzdGlvbiBhZGRlZCBzdWNjZXNzZnVsbHkuIE90aGVyd2lzZSByZXR1cm5zIGZhbHNlLlxuICAgKiBAcGFyYW0gcXVlc3Rpb25cbiAgICogQHBhcmFtIGluZGV4IGVsZW1lbnQgaW5kZXggaW4gdGhlIGVsZW1lbnRzIGFycmF5XG4gICAqL1xuICBwdWJsaWMgYWRkUXVlc3Rpb24ocXVlc3Rpb246IFF1ZXN0aW9uLCBpbmRleDogbnVtYmVyID0gLTEpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hZGRFbGVtZW50KHF1ZXN0aW9uLCBpbmRleCk7XG4gIH1cbiAgLyoqXG4gICAqIEFkZCBhIHBhbmVsIGludG8gUGFuZWwgb3IgUGFnZS4gIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGFuZWwgYWRkZWQgc3VjY2Vzc2Z1bGx5LiBPdGhlcndpc2UgcmV0dXJucyBmYWxzZS5cbiAgICogQHBhcmFtIHBhbmVsXG4gICAqIEBwYXJhbSBpbmRleCBlbGVtZW50IGluZGV4IGluIHRoZSBlbGVtZW50cyBhcnJheVxuICAgKi9cbiAgcHVibGljIGFkZFBhbmVsKHBhbmVsOiBQYW5lbE1vZGVsLCBpbmRleDogbnVtYmVyID0gLTEpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hZGRFbGVtZW50KHBhbmVsLCBpbmRleCk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgcXVlc3Rpb24gYW5kIGFkZHMgaXQgYXQgbG9jYXRpb24gb2YgaW5kZXgsIGJ5IGRlZmF1bHQgdGhlIGVuZCBvZiB0aGUgZWxlbWVudHMgbGlzdC4gUmV0dXJucyBudWxsLCBpZiB0aGUgcXVlc3Rpb24gY291bGQgbm90IGJlIGNyZWF0ZWQgb3IgY291bGQgbm90IGJlIGFkZGVkIGludG8gcGFnZSBvciBwYW5lbC5cbiAgICogQHBhcmFtIHF1ZXN0aW9uVHlwZSB0aGUgcG9zc2libGUgdmFsdWVzIGFyZTogXCJ0ZXh0XCIsIFwiY2hlY2tib3hcIiwgXCJkcm9wZG93blwiLCBcIm1hdHJpeFwiLCBcImh0bWxcIiwgXCJtYXRyaXhkeW5hbWljXCIsIFwibWF0cml4ZHJvcGRvd25cIiBhbmQgc28gb24uXG4gICAqIEBwYXJhbSBuYW1lIGEgcXVlc3Rpb24gbmFtZVxuICAgKiBAcGFyYW0gaW5kZXggZWxlbWVudCBpbmRleCBpbiB0aGUgZWxlbWVudHMgYXJyYXlcbiAgICovXG4gIHB1YmxpYyBhZGROZXdRdWVzdGlvbihcbiAgICBxdWVzdGlvblR5cGU6IHN0cmluZyxcbiAgICBuYW1lOiBzdHJpbmcgPSBudWxsLFxuICAgIGluZGV4OiBudW1iZXIgPSAtMVxuICApOiBRdWVzdGlvbiB7XG4gICAgdmFyIHF1ZXN0aW9uID0gUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLmNyZWF0ZVF1ZXN0aW9uKHF1ZXN0aW9uVHlwZSwgbmFtZSk7XG4gICAgaWYgKCF0aGlzLmFkZFF1ZXN0aW9uKHF1ZXN0aW9uLCBpbmRleCkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBxdWVzdGlvbjtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBwYW5lbCBhbmQgYWRkcyBpdCBpbnRvIHRoZSBlbmQgb2YgdGhlIGVsZW1lbnRzIGxpc3QuIFJldHVybnMgbnVsbCwgaWYgdGhlIHBhbmVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkIG9yIGNvdWxkIG5vdCBiZSBhZGRlZCBpbnRvIHBhZ2Ugb3IgcGFuZWwuXG4gICAqIEBwYXJhbSBuYW1lIGEgcGFuZWwgbmFtZVxuICAgKi9cbiAgcHVibGljIGFkZE5ld1BhbmVsKG5hbWU6IHN0cmluZyA9IG51bGwpOiBQYW5lbE1vZGVsIHtcbiAgICB2YXIgcGFuZWwgPSB0aGlzLmNyZWF0ZU5ld1BhbmVsKG5hbWUpO1xuICAgIGlmICghdGhpcy5hZGRQYW5lbChwYW5lbCkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBwYW5lbDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgaW5kZXggb2YgZWxlbWVudCBwYXJhbWV0ZXIgaW4gdGhlIGVsZW1lbnRzIGxpc3QuXG4gICAqIEBwYXJhbSBlbGVtZW50IHF1ZXN0aW9uIG9yIHBhbmVsXG4gICAqL1xuICBwdWJsaWMgaW5kZXhPZihlbGVtZW50OiBJRWxlbWVudCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudHMuaW5kZXhPZihlbGVtZW50KTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTmV3UGFuZWwobmFtZTogc3RyaW5nKTogUGFuZWxNb2RlbCB7XG4gICAgdmFyIHJlcyA9IFNlcmlhbGl6ZXIuY3JlYXRlQ2xhc3MoXCJwYW5lbFwiKTtcbiAgICByZXMubmFtZSA9IG5hbWU7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICAvKipcbiAgICogUmVtb3ZlIGFuIGVsZW1lbnQgKFBhbmVsIG9yIFF1ZXN0aW9uKSBmcm9tIHRoZSBlbGVtZW50cyBsaXN0LlxuICAgKiBAcGFyYW0gZWxlbWVudFxuICAgKiBAc2VlIGVsZW1lbnRzXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlRWxlbWVudChlbGVtZW50OiBJRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIHZhciBpbmRleCA9IHRoaXMuZWxlbWVudHMuaW5kZXhPZihlbGVtZW50KTtcbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudHNbaV0ucmVtb3ZlRWxlbWVudChlbGVtZW50KSkgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuZWxlbWVudHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogUmVtb3ZlIHF1ZXN0aW9uICBmcm9tIHRoZSBlbGVtZW50cyBsaXN0LlxuICAgKiBAcGFyYW0gcXVlc3Rpb25cbiAgICogQHNlZSBlbGVtZW50c1xuICAgKiBAc2VlIHJlbW92ZUVsZW1lbnRcbiAgICovXG4gIHB1YmxpYyByZW1vdmVRdWVzdGlvbihxdWVzdGlvbjogUXVlc3Rpb24pIHtcbiAgICB0aGlzLnJlbW92ZUVsZW1lbnQocXVlc3Rpb24pO1xuICB9XG4gIHJ1bkNvbmRpdGlvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSB8fCB0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgdmFyIGVsZW1lbnRzID0gdGhpcy5lbGVtZW50cy5zbGljZSgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGVsZW1lbnRzW2ldLnJ1bkNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuYXJlSW52aXNpYmxlRWxlbWVudHNTaG93aW5nKSB7XG4gICAgICB0aGlzLnJ1blZpc2libGVDb25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG4gICAgdGhpcy5ydW5FbmFibGVDb25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB0aGlzLnJ1blJlcXVpcmVkQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gIH1cbiAgcHJpdmF0ZSBydW5WaXNpYmxlQ29uZGl0aW9uKFxuICAgIHZhbHVlczogSGFzaFRhYmxlPGFueT4sXG4gICAgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT5cbiAgKSB7XG4gICAgaWYgKCF0aGlzLnZpc2libGVJZikgcmV0dXJuO1xuICAgIHZhciBjb25kaXRpb25SdW5uZXIgPSBuZXcgQ29uZGl0aW9uUnVubmVyKHRoaXMudmlzaWJsZUlmKTtcbiAgICBjb25kaXRpb25SdW5uZXIub25SdW5Db21wbGV0ZSA9IChyZXM6IGJvb2xlYW4pID0+IHtcbiAgICAgIHRoaXMudmlzaWJsZSA9IHJlcztcbiAgICB9O1xuICAgIGNvbmRpdGlvblJ1bm5lci5ydW4odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICBwcml2YXRlIHJ1bkVuYWJsZUNvbmRpdGlvbihcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+XG4gICkge1xuICAgIGlmICghdGhpcy5lbmFibGVJZikgcmV0dXJuO1xuICAgIHZhciBjb25kaXRpb25SdW5uZXIgPSBuZXcgQ29uZGl0aW9uUnVubmVyKHRoaXMuZW5hYmxlSWYpO1xuICAgIGNvbmRpdGlvblJ1bm5lci5vblJ1bkNvbXBsZXRlID0gKHJlczogYm9vbGVhbikgPT4ge1xuICAgICAgdGhpcy5yZWFkT25seSA9ICFyZXM7XG4gICAgfTtcbiAgICBjb25kaXRpb25SdW5uZXIucnVuKHZhbHVlcywgcHJvcGVydGllcyk7XG4gIH1cbiAgcHJpdmF0ZSBydW5SZXF1aXJlZENvbmRpdGlvbihcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+XG4gICkge1xuICAgIGlmICghdGhpcy5yZXF1aXJlZElmKSByZXR1cm47XG4gICAgdmFyIGNvbmRpdGlvblJ1bm5lciA9IG5ldyBDb25kaXRpb25SdW5uZXIodGhpcy5yZXF1aXJlZElmKTtcbiAgICBjb25kaXRpb25SdW5uZXIub25SdW5Db21wbGV0ZSA9IChyZXM6IGJvb2xlYW4pID0+IHtcbiAgICAgIHRoaXMuaXNSZXF1aXJlZCA9IHJlcztcbiAgICB9O1xuICAgIGNvbmRpdGlvblJ1bm5lci5ydW4odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICBvbkFueVZhbHVlQ2hhbmdlZChuYW1lOiBzdHJpbmcpIHtcbiAgICB2YXIgZWxzID0gdGhpcy5lbGVtZW50cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVscy5sZW5ndGg7IGkrKykge1xuICAgICAgZWxzW2ldLm9uQW55VmFsdWVDaGFuZ2VkKG5hbWUpO1xuICAgIH1cbiAgfVxuICBjaGVja0JpbmRpbmdzKHZhbHVlTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgdmFyIGVscyA9IHRoaXMuZWxlbWVudHM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICg8QmFzZT4oPGFueT5lbHNbaV0pKS5jaGVja0JpbmRpbmdzKHZhbHVlTmFtZSwgdmFsdWUpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZHJhZ0Ryb3BBZGRUYXJnZXQoZHJhZ0Ryb3BJbmZvOiBEcmFnRHJvcEluZm8pIHtcbiAgICB2YXIgcHJldlJvdyA9IHRoaXMuZHJhZ0Ryb3BGaW5kUm93KGRyYWdEcm9wSW5mby50YXJnZXQpO1xuICAgIGlmICh0aGlzLmRyYWdEcm9wQWRkVGFyZ2V0VG9Sb3coZHJhZ0Ryb3BJbmZvLCBwcmV2Um93KSkge1xuICAgICAgdGhpcy51cGRhdGVSb3dzUmVtb3ZlRWxlbWVudEZyb21Sb3coZHJhZ0Ryb3BJbmZvLnRhcmdldCwgcHJldlJvdyk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBkcmFnRHJvcEZpbmRSb3coZmluZEVsZW1lbnQ6IElTdXJ2ZXlFbGVtZW50KTogUXVlc3Rpb25Sb3dNb2RlbCB7XG4gICAgaWYgKCFmaW5kRWxlbWVudCB8fCBmaW5kRWxlbWVudC5pc1BhZ2UpIHJldHVybiBudWxsO1xuICAgIHZhciBlbGVtZW50ID0gPElFbGVtZW50PmZpbmRFbGVtZW50O1xuICAgIHZhciByb3dzID0gdGhpcy5yb3dzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJvd3NbaV0uZWxlbWVudHMuaW5kZXhPZihlbGVtZW50KSA+IC0xKSByZXR1cm4gcm93c1tpXTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcG5sID0gdGhpcy5lbGVtZW50c1tpXS5nZXRQYW5lbCgpO1xuICAgICAgaWYgKCFwbmwpIGNvbnRpbnVlO1xuICAgICAgdmFyIHJvdyA9ICg8UGFuZWxNb2RlbEJhc2U+cG5sKS5kcmFnRHJvcEZpbmRSb3coZWxlbWVudCk7XG4gICAgICBpZiAoISFyb3cpIHJldHVybiByb3c7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByaXZhdGUgZHJhZ0Ryb3BBZGRUYXJnZXRUb1JvdyhcbiAgICBkcmFnRHJvcEluZm86IERyYWdEcm9wSW5mbyxcbiAgICBwcmV2Um93OiBRdWVzdGlvblJvd01vZGVsXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICghZHJhZ0Ryb3BJbmZvLmRlc3RpbmF0aW9uKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAodGhpcy5kcmFnRHJvcEFkZFRhcmdldFRvRW1wdHlQYW5lbChkcmFnRHJvcEluZm8pKSByZXR1cm4gdHJ1ZTtcbiAgICB2YXIgZGVzdCA9IGRyYWdEcm9wSW5mby5kZXN0aW5hdGlvbjtcbiAgICB2YXIgZGVzdFJvdyA9IHRoaXMuZHJhZ0Ryb3BGaW5kUm93KGRlc3QpO1xuICAgIGlmICghZGVzdFJvdykgcmV0dXJuIHRydWU7XG5cbiAgICBpZihzZXR0aW5ncy5zdXBwb3J0Q3JlYXRvclYyICYmIHRoaXMuaXNEZXNpZ25Nb2RlKSB7XG4gICAgICBpZihkZXN0Um93LmVsZW1lbnRzLmxlbmd0aCA+IDEpXG4gICAgICAgIHJldHVybiB0aGlzLmRyYWdEcm9wQWRkVGFyZ2V0VG9FeGlzdGluZ1JvdyhcbiAgICAgICAgICBkcmFnRHJvcEluZm8sXG4gICAgICAgICAgZGVzdFJvdyxcbiAgICAgICAgICBwcmV2Um93XG4gICAgICAgICk7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiB0aGlzLmRyYWdEcm9wQWRkVGFyZ2V0VG9OZXdSb3coZHJhZ0Ryb3BJbmZvLCBkZXN0Um93LCBwcmV2Um93KTtcbiAgICB9XG4gICAgaWYgKCFkcmFnRHJvcEluZm8udGFyZ2V0LnN0YXJ0V2l0aE5ld0xpbmUpXG4gICAgICByZXR1cm4gdGhpcy5kcmFnRHJvcEFkZFRhcmdldFRvRXhpc3RpbmdSb3coXG4gICAgICAgIGRyYWdEcm9wSW5mbyxcbiAgICAgICAgZGVzdFJvdyxcbiAgICAgICAgcHJldlJvd1xuICAgICAgKTtcbiAgICByZXR1cm4gdGhpcy5kcmFnRHJvcEFkZFRhcmdldFRvTmV3Um93KGRyYWdEcm9wSW5mbywgZGVzdFJvdywgcHJldlJvdyk7XG4gIH1cbiAgcHJpdmF0ZSBkcmFnRHJvcEFkZFRhcmdldFRvRW1wdHlQYW5lbChkcmFnRHJvcEluZm86IERyYWdEcm9wSW5mbyk6IGJvb2xlYW4ge1xuICAgIGlmIChkcmFnRHJvcEluZm8uZGVzdGluYXRpb24uaXNQYWdlKSB7XG4gICAgICB0aGlzLmRyYWdEcm9wQWRkVGFyZ2V0VG9FbXB0eVBhbmVsQ29yZShcbiAgICAgICAgdGhpcy5yb290LFxuICAgICAgICBkcmFnRHJvcEluZm8udGFyZ2V0LFxuICAgICAgICBkcmFnRHJvcEluZm8uaXNCb3R0b21cbiAgICAgICk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgdmFyIGRlc3QgPSA8SUVsZW1lbnQ+ZHJhZ0Ryb3BJbmZvLmRlc3RpbmF0aW9uO1xuICAgIGlmIChkZXN0LmlzUGFuZWwgJiYgIWRyYWdEcm9wSW5mby5pc0VkZ2UpIHtcbiAgICAgIHZhciBwYW5lbCA9IDxQYW5lbE1vZGVsQmFzZT4oPGFueT5kZXN0KTtcbiAgICAgIGlmICgoPGFueT5kcmFnRHJvcEluZm8udGFyZ2V0KVtcInRlbXBsYXRlXCJdID09PSBkZXN0KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgZHJhZ0Ryb3BJbmZvLm5lc3RlZFBhbmVsRGVwdGggPCAwIHx8XG4gICAgICAgIGRyYWdEcm9wSW5mby5uZXN0ZWRQYW5lbERlcHRoID49IHBhbmVsLmRlcHRoXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5kcmFnRHJvcEFkZFRhcmdldFRvRW1wdHlQYW5lbENvcmUoXG4gICAgICAgICAgPFBhbmVsTW9kZWxCYXNlPig8YW55PmRlc3QpLFxuICAgICAgICAgIGRyYWdEcm9wSW5mby50YXJnZXQsXG4gICAgICAgICAgZHJhZ0Ryb3BJbmZvLmlzQm90dG9tXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJpdmF0ZSBkcmFnRHJvcEFkZFRhcmdldFRvRXhpc3RpbmdSb3coXG4gICAgZHJhZ0Ryb3BJbmZvOiBEcmFnRHJvcEluZm8sXG4gICAgZGVzdFJvdzogUXVlc3Rpb25Sb3dNb2RlbCxcbiAgICBwcmV2Um93OiBRdWVzdGlvblJvd01vZGVsXG4gICk6IGJvb2xlYW4ge1xuICAgIHZhciBpbmRleCA9IGRlc3RSb3cuZWxlbWVudHMuaW5kZXhPZig8SUVsZW1lbnQ+ZHJhZ0Ryb3BJbmZvLmRlc3RpbmF0aW9uKTtcbiAgICBpZiAoXG4gICAgICBpbmRleCA9PSAwICYmXG4gICAgICAhZHJhZ0Ryb3BJbmZvLmlzQm90dG9tKSB7XG5cbiAgICAgIGlmKHRoaXMuaXNEZXNpZ25Nb2RlICYmIHNldHRpbmdzLnN1cHBvcnRDcmVhdG9yVjIpIHtcblxuICAgICAgfVxuICAgICAgZWxzZVxuICAgICAgaWYoZGVzdFJvdy5lbGVtZW50c1swXS5zdGFydFdpdGhOZXdMaW5lKSB7XG4gICAgICAgIGlmIChkZXN0Um93LmluZGV4ID4gMCkge1xuICAgICAgICAgIGRyYWdEcm9wSW5mby5pc0JvdHRvbSA9IHRydWU7XG4gICAgICAgICAgZGVzdFJvdyA9IGRlc3RSb3cucGFuZWwucm93c1tkZXN0Um93LmluZGV4IC0gMV07XG4gICAgICAgICAgZHJhZ0Ryb3BJbmZvLmRlc3RpbmF0aW9uID1cbiAgICAgICAgICAgIGRlc3RSb3cuZWxlbWVudHNbZGVzdFJvdy5lbGVtZW50cy5sZW5ndGggLSAxXTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5kcmFnRHJvcEFkZFRhcmdldFRvRXhpc3RpbmdSb3coXG4gICAgICAgICAgICBkcmFnRHJvcEluZm8sXG4gICAgICAgICAgICBkZXN0Um93LFxuICAgICAgICAgICAgcHJldlJvd1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZHJhZ0Ryb3BBZGRUYXJnZXRUb05ld1JvdyhkcmFnRHJvcEluZm8sIGRlc3RSb3csIHByZXZSb3cpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBwcmV2Um93SW5kZXggPSAtMTtcbiAgICBpZiAocHJldlJvdyA9PSBkZXN0Um93KSB7XG4gICAgICBwcmV2Um93SW5kZXggPSBkZXN0Um93LmVsZW1lbnRzLmluZGV4T2YoZHJhZ0Ryb3BJbmZvLnRhcmdldCk7XG4gICAgfVxuICAgIGlmIChkcmFnRHJvcEluZm8uaXNCb3R0b20pIGluZGV4Kys7XG4gICAgdmFyIHNyY1JvdyA9IHRoaXMuZmluZFJvd0J5RWxlbWVudChkcmFnRHJvcEluZm8uc291cmNlKTtcbiAgICBpZiAoXG4gICAgICBzcmNSb3cgPT0gZGVzdFJvdyAmJlxuICAgICAgc3JjUm93LmVsZW1lbnRzLmluZGV4T2YoZHJhZ0Ryb3BJbmZvLnNvdXJjZSkgPT0gaW5kZXhcbiAgICApXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGluZGV4ID09IHByZXZSb3dJbmRleCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChwcmV2Um93SW5kZXggPiAtMSkge1xuICAgICAgZGVzdFJvdy5lbGVtZW50cy5zcGxpY2UocHJldlJvd0luZGV4LCAxKTtcbiAgICAgIGlmIChwcmV2Um93SW5kZXggPCBpbmRleCkgaW5kZXgtLTtcbiAgICB9XG4gICAgZGVzdFJvdy5lbGVtZW50cy5zcGxpY2UoaW5kZXgsIDAsIGRyYWdEcm9wSW5mby50YXJnZXQpO1xuICAgIGRlc3RSb3cudXBkYXRlVmlzaWJsZSgpO1xuICAgIHJldHVybiBwcmV2Um93SW5kZXggPCAwO1xuICB9XG4gIHByaXZhdGUgZHJhZ0Ryb3BBZGRUYXJnZXRUb05ld1JvdyhcbiAgICBkcmFnRHJvcEluZm86IERyYWdEcm9wSW5mbyxcbiAgICBkZXN0Um93OiBRdWVzdGlvblJvd01vZGVsLFxuICAgIHByZXZSb3c6IFF1ZXN0aW9uUm93TW9kZWxcbiAgKTogYm9vbGVhbiB7XG4gICAgdmFyIHRhcmdldFJvdyA9IGRlc3RSb3cucGFuZWwuY3JlYXRlUm93QW5kU2V0TGF6eShkZXN0Um93LnBhbmVsLnJvd3MubGVuZ3RoKTtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUgJiYgc2V0dGluZ3Muc3VwcG9ydENyZWF0b3JWMikge1xuICAgICAgdGFyZ2V0Um93LnNldElzTGF6eVJlbmRlcmluZyhmYWxzZSk7XG4gICAgfVxuICAgIHRhcmdldFJvdy5hZGRFbGVtZW50KGRyYWdEcm9wSW5mby50YXJnZXQpO1xuICAgIHZhciBpbmRleCA9IGRlc3RSb3cuaW5kZXg7XG4gICAgaWYgKGRyYWdEcm9wSW5mby5pc0JvdHRvbSkge1xuICAgICAgaW5kZXgrKztcbiAgICB9XG4gICAgLy9zYW1lIHJvd1xuICAgIGlmICghIXByZXZSb3cgJiYgcHJldlJvdy5wYW5lbCA9PSB0YXJnZXRSb3cucGFuZWwgJiYgcHJldlJvdy5pbmRleCA9PSBpbmRleClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB2YXIgc3JjUm93ID0gdGhpcy5maW5kUm93QnlFbGVtZW50KGRyYWdEcm9wSW5mby5zb3VyY2UpO1xuICAgIGlmIChcbiAgICAgICEhc3JjUm93ICYmXG4gICAgICBzcmNSb3cucGFuZWwgPT0gdGFyZ2V0Um93LnBhbmVsICYmXG4gICAgICBzcmNSb3cuZWxlbWVudHMubGVuZ3RoID09IDEgJiZcbiAgICAgIHNyY1Jvdy5pbmRleCA9PSBpbmRleFxuICAgIClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBkZXN0Um93LnBhbmVsLnJvd3Muc3BsaWNlKGluZGV4LCAwLCB0YXJnZXRSb3cpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByaXZhdGUgZHJhZ0Ryb3BBZGRUYXJnZXRUb0VtcHR5UGFuZWxDb3JlKFxuICAgIHBhbmVsOiBQYW5lbE1vZGVsQmFzZSxcbiAgICB0YXJnZXQ6IElFbGVtZW50LFxuICAgIGlzQm90dG9tOiBib29sZWFuXG4gICkge1xuICAgIHZhciB0YXJnZXRSb3cgPSBwYW5lbC5jcmVhdGVSb3coKTtcbiAgICB0YXJnZXRSb3cuYWRkRWxlbWVudCh0YXJnZXQpO1xuICAgIGlmIChwYW5lbC5lbGVtZW50cy5sZW5ndGggPT0gMCB8fCBpc0JvdHRvbSkge1xuICAgICAgcGFuZWwucm93cy5wdXNoKHRhcmdldFJvdyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhbmVsLnJvd3Muc3BsaWNlKDAsIDAsIHRhcmdldFJvdyk7XG4gICAgfVxuICB9XG4gIGRyYWdEcm9wTW92ZUVsZW1lbnQoc3JjOiBJRWxlbWVudCwgdGFyZ2V0OiBJRWxlbWVudCwgdGFyZ2V0SW5kZXg6IG51bWJlcikge1xuICAgIHZhciBzcmNJbmRleCA9ICg8UGFuZWxNb2RlbEJhc2U+c3JjLnBhcmVudCkuZWxlbWVudHMuaW5kZXhPZihzcmMpO1xuICAgIGlmICh0YXJnZXRJbmRleCA+IHNyY0luZGV4KSB7XG4gICAgICB0YXJnZXRJbmRleC0tO1xuICAgIH1cbiAgICB0aGlzLnJlbW92ZUVsZW1lbnQoc3JjKTtcbiAgICB0aGlzLmFkZEVsZW1lbnQodGFyZ2V0LCB0YXJnZXRJbmRleCk7XG4gIH1cbiAgcHVibGljIG5lZWRSZXNwb25zaXZlV2lkdGgoKSB7XG4gICAgbGV0IHJlc3VsdCA9IGZhbHNlO1xuICAgIHRoaXMuZWxlbWVudHMuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgaWYoZS5uZWVkUmVzcG9uc2l2ZVdpZHRoKCkpXG4gICAgICAgIHJlc3VsdCA9IHRydWU7XG4gICAgfSk7XG4gICAgdGhpcy5yb3dzLmZvckVhY2goKHIpID0+IHtcbiAgICAgIGlmKHIuZWxlbWVudHMubGVuZ3RoID4gMSlcbiAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvL0lUaXRsZU93bmVyXG4gIHB1YmxpYyBnZXQgbm8oKTogc3RyaW5nIHsgcmV0dXJuIFwiXCI7IH1cbiAgcHVibGljIGRpc3Bvc2UoKSB7XG4gICAgc3VwZXIuZGlzcG9zZSgpO1xuICAgIGlmICh0aGlzLnJvd3MpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMucm93c1tpXS5kaXNwb3NlKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnJvd3Muc3BsaWNlKDAsIHRoaXMucm93cy5sZW5ndGgpO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuZWxlbWVudHNbaV0uZGlzcG9zZSgpO1xuICAgIH1cbiAgICB0aGlzLmVsZW1lbnRzLnNwbGljZSgwLCB0aGlzLmVsZW1lbnRzLmxlbmd0aCk7XG4gIH1cblxufVxuXG4vKipcbiAqIEEgY29udGFpbmVyIGVsZW1lbnQsIHNpbWlsYXIgdG8gdGhlIFBhZ2Ugb2JqZWN0cy4gSG93ZXZlciwgdW5saWtlIHRoZSBQYWdlLCBQYW5lbCBjYW4ndCBiZSBhIHJvb3QuXG4gKiBJdCBtYXkgY29udGFpbiBxdWVzdGlvbnMgYW5kIG90aGVyIHBhbmVscy5cbiAqL1xuZXhwb3J0IGNsYXNzIFBhbmVsTW9kZWwgZXh0ZW5kcyBQYW5lbE1vZGVsQmFzZSBpbXBsZW1lbnRzIElFbGVtZW50IHtcbiAgcHVibGljIG1pbldpZHRoPzogc3RyaW5nO1xuICBwdWJsaWMgbWF4V2lkdGg/OiBzdHJpbmc7XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZyA9IFwiXCIpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5jcmVhdGVOZXdBcnJheShcImZvb3RlckFjdGlvbnNcIik7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcIndpZHRoXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghIXNlbGYucGFyZW50KSB7XG4gICAgICAgIHNlbGYucGFyZW50LmVsZW1lbnRXaWR0aENoYW5nZWQoc2VsZik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0aWVzVmFsdWVDaGFuZ2VkKFxuICAgICAgW1wiaW5kZW50XCIsIFwiaW5uZXJJbmRlbnRcIiwgXCJyaWdodEluZGVudFwiXSxcbiAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi5vbkluZGVudENoYW5nZWQoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwicGFuZWxcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGNvbnRlbnRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkICsgXCJfY29udGVudFwiO1xuICB9XG4gIHB1YmxpYyBnZXRTdXJ2ZXkobGl2ZTogYm9vbGVhbiA9IGZhbHNlKTogSVN1cnZleSB7XG4gICAgaWYgKGxpdmUpIHtcbiAgICAgIHJldHVybiAhIXRoaXMucGFyZW50ID8gdGhpcy5wYXJlbnQuZ2V0U3VydmV5KGxpdmUpIDogbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLmdldFN1cnZleShsaXZlKTtcbiAgfVxuICBvblN1cnZleUxvYWQoKSB7XG4gICAgc3VwZXIub25TdXJ2ZXlMb2FkKCk7XG4gICAgdGhpcy5vbkluZGVudENoYW5nZWQoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25TZXREYXRhKCkge1xuICAgIHN1cGVyLm9uU2V0RGF0YSgpO1xuICAgIHRoaXMub25JbmRlbnRDaGFuZ2VkKCk7XG4gIH1cbiAgcHVibGljIGdldCBpc1BhbmVsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBHZXQvc2V0IHRoZSBwYWdlIHdoZXJlIHRoZSBwYW5lbCBpcyBsb2NhdGVkLlxuICAgKi9cbiAgcHVibGljIGdldCBwYWdlKCk6IElQYWdlIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQYWdlKHRoaXMucGFyZW50KTtcbiAgfVxuICBwdWJsaWMgc2V0IHBhZ2UodmFsOiBJUGFnZSkge1xuICAgIHRoaXMuc2V0UGFnZSh0aGlzLnBhcmVudCwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZGVsZXRlKCkge1xuICAgIGlmICghIXRoaXMucGFyZW50KSB7XG4gICAgICB0aGlzLnJlbW92ZVNlbGZGcm9tTGlzdCh0aGlzLnBhcmVudC5lbGVtZW50cyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBNb3ZlIHBhbmVsIHRvIGEgbmV3IGNvbnRhaW5lciBQYWdlL1BhbmVsLiBBZGQgYXMgYSBsYXN0IGVsZW1lbnQgaWYgaW5zZXJ0QmVmb3JlIHBhcmFtZXRlciBpcyBub3QgdXNlZCBvciBpbnNlcnRlZCBpbnRvIHRoZSBnaXZlbiBpbmRleCxcbiAgICogaWYgaW5zZXJ0IHBhcmFtZXRlciBpcyBudW1iZXIsIG9yIGJlZm9yZSB0aGUgZ2l2ZW4gZWxlbWVudCwgaWYgdGhlIGluc2VydEJlZm9yZSBwYXJhbWV0ZXIgaXMgYSBxdWVzdGlvbiBvciBwYW5lbFxuICAgKiBAcGFyYW0gY29udGFpbmVyIFBhZ2Ugb3IgUGFuZWwgdG8gd2hlcmUgYSBxdWVzdGlvbiBpcyByZWxvY2F0ZWQuXG4gICAqIEBwYXJhbSBpbnNlcnRCZWZvcmUgVXNlIGl0IGlmIHlvdSB3YW50IHRvIHNldCB0aGUgcGFuZWwgdG8gYSBzcGVjaWZpYyBwb3NpdGlvbi4gWW91IG1heSB1c2UgYSBudW1iZXIgKHVzZSAwIHRvIGluc2VydCBpbnQgdGhlIGJlZ2lubmluZykgb3IgZWxlbWVudCwgaWYgeW91IHdhbnQgdG8gaW5zZXJ0IGJlZm9yZSB0aGlzIGVsZW1lbnQuXG4gICAqL1xuICBwdWJsaWMgbW92ZVRvKGNvbnRhaW5lcjogSVBhbmVsLCBpbnNlcnRCZWZvcmU6IGFueSA9IG51bGwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tb3ZlVG9CYXNlKHRoaXMucGFyZW50LCBjb250YWluZXIsIGluc2VydEJlZm9yZSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHZpc2libGUgaW5kZXggb2YgdGhlIHBhbmVsIGluIHRoZSBzdXJ2ZXkuIENvbW1vbmx5IGl0IGlzIC0xIGFuZCBpdCBkb2Vzbid0IHNob3cuXG4gICAqIFlvdSBoYXZlIHRvIHNldCBzaG93TnVtYmVyIHRvIHRydWUgdG8gc2hvdyBpbmRleC9udW1iZXJpbmcgZm9yIHRoZSBQYW5lbFxuICAgKiBAc2VlIHNob3dOdW1iZXJcbiAgICovXG4gIHB1YmxpYyBnZXQgdmlzaWJsZUluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVJbmRleFwiLCAtMSk7XG4gIH1cbiAgcHVibGljIGdldFRpdGxlT3duZXIoKTogSVRpdGxlT3duZXIgeyByZXR1cm4gdGhpczsgfVxuICAvKipcbiAgICogU2V0IHNob3dOdW1iZXIgdG8gdHJ1ZSB0byBzdGFydCBzaG93aW5nIHRoZSBudW1iZXIgZm9yIHRoaXMgcGFuZWwuXG4gICAqIEBzZWUgdmlzaWJsZUluZGV4XG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dOdW1iZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dOdW1iZXJcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd051bWJlcih2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93TnVtYmVyXCIsIHZhbCk7XG4gICAgdGhpcy5ub3RpZnlTdXJ2ZXlPblZpc2liaWxpdHlDaGFuZ2VkKCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIHZhbHVlIHRoYXQgc3BlY2lmaWVzIGhvdyB0aGUgZWxlbWVudHMgbnVtYmVycyBpbnNpZGUgcGFuZWwgYXJlIGRpc3BsYXllZC5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGU6XG4gICAqXG4gICAqIC0gYGRlZmF1bHRgIC0gZGlzcGxheSBxdWVzdGlvbnMgbnVtYmVycyBhcyBkZWZpbmVkIGluIHBhcmVudCBwYW5lbCBvciBzdXJ2ZXlcbiAgICogLSBgb25wYW5lbGAgLSBkaXNwbGF5IHF1ZXN0aW9ucyBudW1iZXJzLCBzdGFydCBudW1iZXJpbmcgZnJvbSBiZWdpbm5pbmcgb2YgdGhpcyBwYWdlXG4gICAqIC0gYG9mZmAgLSB0dXJuIG9mZiB0aGUgbnVtYmVyaW5nIGZvciBxdWVzdGlvbnMgdGl0bGVzXG4gICAqIEBzZWUgc2hvd051bWJlclxuICAgKi9cbiAgcHVibGljIGdldCBzaG93UXVlc3Rpb25OdW1iZXJzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dRdWVzdGlvbk51bWJlcnNcIik7XG4gIH1cbiAgcHVibGljIHNldCBzaG93UXVlc3Rpb25OdW1iZXJzKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93UXVlc3Rpb25OdW1iZXJzXCIsIHZhbHVlKTtcbiAgICB0aGlzLm5vdGlmeVN1cnZleU9uVmlzaWJpbGl0eUNoYW5nZWQoKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSBmaXJzdCBxdWVzdGlvbiBpbmRleCBmb3IgZWxlbWVudHMgaW5zaWRlIHRoZSBwYW5lbC4gVGhlIGZpcnN0IHF1ZXN0aW9uIGluZGV4IGlzICcxLicgYnkgZGVmYXVsdCBhbmQgaXQgaXMgdGFrZW4gZnJvbSBzdXJ2ZXkucXVlc3Rpb25TdGFydEluZGV4IHByb3BlcnR5LlxuICAgKiBZb3UgbWF5IHN0YXJ0IGl0IGZyb20gJzEwMCcgb3IgZnJvbSAnQScsIGJ5IHNldHRpbmcgJzEwMCcgb3IgJ0EnIHRvIHRoaXMgcHJvcGVydHkuXG4gICAqIFlvdSBjYW4gc2V0IHRoZSBzdGFydCBpbmRleCB0byBcIigxKVwiIG9yIFwiIyBBKVwiIG9yIFwiYSlcIiB0byByZW5kZXIgcXVlc3Rpb24gbnVtYmVyIGFzICgxKSwgIyBBKSBhbmQgYSkgYWNjb3JkaW5nbHkuXG4gICAqIEBzZWUgc3VydmV5LnF1ZXN0aW9uU3RhcnRJbmRleFxuICAgKi9cbiAgcHVibGljIGdldCBxdWVzdGlvblN0YXJ0SW5kZXgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicXVlc3Rpb25TdGFydEluZGV4XCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcXVlc3Rpb25TdGFydEluZGV4KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicXVlc3Rpb25TdGFydEluZGV4XCIsIHZhbCk7XG4gIH1cbiAgZ2V0UXVlc3Rpb25TdGFydEluZGV4KCk6IHN0cmluZyB7XG4gICAgaWYgKCEhdGhpcy5xdWVzdGlvblN0YXJ0SW5kZXgpIHJldHVybiB0aGlzLnF1ZXN0aW9uU3RhcnRJbmRleDtcbiAgICByZXR1cm4gc3VwZXIuZ2V0UXVlc3Rpb25TdGFydEluZGV4KCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBwcm9wZXJ0eSByZXR1cm5zIHRoZSBxdWVzdGlvbiBudW1iZXIuIElmIHF1ZXN0aW9uIGlzIGludmlzaWJsZSB0aGVuIGl0IHJldHVybnMgZW1wdHkgc3RyaW5nLlxuICAgKiBJZiB2aXNpYmxlSW5kZXggaXMgMSwgdGhlbiBubyBpcyAyLCBvciAnQicgaWYgc3VydmV5LnF1ZXN0aW9uU3RhcnRJbmRleCBpcyAnQScuXG4gICAqIEBzZWUgU3VydmV5TW9kZWwucXVlc3Rpb25TdGFydEluZGV4XG4gICAqL1xuICBwdWJsaWMgZ2V0IG5vKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm5vXCIsIFwiXCIpO1xuICB9XG4gIHByb3RlY3RlZCBzZXRObyh2aXNpYmxlSW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcbiAgICAgIFwibm9cIixcbiAgICAgIEhlbHBlcnMuZ2V0TnVtYmVyQnlJbmRleCh0aGlzLnZpc2libGVJbmRleCwgdGhpcy5nZXRTdGFydEluZGV4KCkpXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgYmVmb3JlU2V0VmlzaWJsZUluZGV4KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCB2aXNpYmxlSW5kZXggPSAtMTtcbiAgICBpZiAodGhpcy5zaG93TnVtYmVyICYmICh0aGlzLmlzRGVzaWduTW9kZSB8fCAhdGhpcy5sb2NUaXRsZS5pc0VtcHR5KSkge1xuICAgICAgdmlzaWJsZUluZGV4ID0gaW5kZXg7XG4gICAgfVxuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVJbmRleFwiLCB2aXNpYmxlSW5kZXgpO1xuICAgIHRoaXMuc2V0Tm8odmlzaWJsZUluZGV4KTtcbiAgICByZXR1cm4gdmlzaWJsZUluZGV4IDwgMCA/IDAgOiAxO1xuICB9XG4gIHByb3RlY3RlZCBnZXRQYW5lbFN0YXJ0SW5kZXgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVycyA9PSBcIm9mZlwiKSByZXR1cm4gLTE7XG4gICAgaWYgKHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVycyA9PSBcIm9ucGFuZWxcIikgcmV0dXJuIDA7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG4gIHByb3RlY3RlZCBpc0NvbnRpbnVlTnVtYmVyaW5nKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnNob3dRdWVzdGlvbk51bWJlcnMgIT0gXCJvZmZcIiAmJiB0aGlzLnNob3dRdWVzdGlvbk51bWJlcnMgIT0gXCJvbnBhbmVsXCJcbiAgICApO1xuICB9XG4gIHByaXZhdGUgbm90aWZ5U3VydmV5T25WaXNpYmlsaXR5Q2hhbmdlZCgpIHtcbiAgICBpZiAodGhpcy5zdXJ2ZXkgIT0gbnVsbCAmJiAhdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikge1xuICAgICAgdGhpcy5zdXJ2ZXkucGFuZWxWaXNpYmlsaXR5Q2hhbmdlZCh0aGlzLCB0aGlzLmlzVmlzaWJsZSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBoYXNFcnJvcnNDb3JlKHJlYzogYW55KSB7XG4gICAgc3VwZXIuaGFzRXJyb3JzQ29yZShyZWMpO1xuICAgIGlmICh0aGlzLmlzQ29sbGFwc2VkICYmIHJlYy5yZXN1bHQgJiYgcmVjLmZpcmVDYWxsYmFjaykge1xuICAgICAgdGhpcy5leHBhbmQoKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldFJlbmRlcmVkVGl0bGUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghc3RyKSB7XG4gICAgICBpZiAodGhpcy5pc0NvbGxhcHNlZCB8fCB0aGlzLmlzRXhwYW5kZWQpIHJldHVybiB0aGlzLm5hbWU7XG4gICAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybiBcIltcIiArIHRoaXMubmFtZSArIFwiXVwiO1xuICAgIH1cbiAgICByZXR1cm4gc3VwZXIuZ2V0UmVuZGVyZWRUaXRsZShzdHIpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgUGFuZWwgd2lkdGguXG4gICAqL1xuICBwdWJsaWMgZ2V0IHdpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIndpZHRoXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgd2lkdGgodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ3aWR0aFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbGVmdCBpbmRlbnQuIFNldCB0aGlzIHByb3BlcnR5IHRvIGluY3JlYXNlIHRoZSBwYW5lbCBsZWZ0IGluZGVudC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW5kZW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImluZGVudFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGluZGVudCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImluZGVudFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgaW5uZXIgaW5kZW50LiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBpbmNyZWFzZSB0aGUgcGFuZWwgY29udGVudCBtYXJnaW4uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlubmVySW5kZW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlubmVySW5kZW50XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgaW5uZXJJbmRlbnQodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpbm5lckluZGVudFwiLCB2YWwpO1xuICB9XG4gIGdldCByZW5kZXJXaWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJXaWR0aFwiKTtcbiAgfVxuICBzZXQgcmVuZGVyV2lkdGgodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJXaWR0aFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgUGFuZWwgcmVuZGVycyBvbiB0aGUgbmV3IGxpbmUgaWYgdGhlIHByb3BlcnR5IGlzIHRydWUuIElmIHRoZSBwcm9wZXJ0eSBpcyBmYWxzZSwgdGhlIHBhbmVsIHRyaWVzIHRvIHJlbmRlciBvbiB0aGUgc2FtZSBsaW5lL3JvdyB3aXRoIGEgcHJldmlvdXMgcXVlc3Rpb24vcGFuZWwuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHN0YXJ0V2l0aE5ld0xpbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInN0YXJ0V2l0aE5ld0xpbmVcIik7XG4gIH1cbiAgcHVibGljIHNldCBzdGFydFdpdGhOZXdMaW5lKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic3RhcnRXaXRoTmV3TGluZVwiLCB2YWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSByaWdodCBpbmRlbnQgb2YgdGhlIFBhbmVsLlxuICAgKi9cbiAgcHVibGljIGdldCByaWdodEluZGVudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyaWdodEluZGVudFwiLCAwKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJpZ2h0SW5kZW50KHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmlnaHRJbmRlbnRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIFBhbmVsIHRvb2xiYXIgZ2V0cyBhZGFwdGl2ZSBpZiB0aGUgcHJvcGVydHkgaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFsbG93QWRhcHRpdmVBY3Rpb25zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhbGxvd0FkYXB0aXZlQWN0aW9uc1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGFsbG93QWRhcHRpdmVBY3Rpb25zKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImFsbG93QWRhcHRpdmVBY3Rpb25zXCIsIHZhbCk7XG4gIH1cbiAgZ2V0IHBhZGRpbmdMZWZ0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInBhZGRpbmdMZWZ0XCIsIFwiXCIpO1xuICB9XG4gIHNldCBwYWRkaW5nTGVmdCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInBhZGRpbmdMZWZ0XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGlubmVyUGFkZGluZ0xlZnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW5uZXJQYWRkaW5nTGVmdFwiLCBcIlwiKTtcbiAgfVxuICBzZXQgaW5uZXJQYWRkaW5nTGVmdCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlubmVyUGFkZGluZ0xlZnRcIiwgdmFsKTtcbiAgfVxuICBnZXQgcGFkZGluZ1JpZ2h0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInBhZGRpbmdSaWdodFwiLCBcIlwiKTtcbiAgfVxuICBzZXQgcGFkZGluZ1JpZ2h0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGFkZGluZ1JpZ2h0XCIsIHZhbCk7XG4gIH1cbiAgcHJpdmF0ZSBvbkluZGVudENoYW5nZWQoKSB7XG4gICAgaWYgKCF0aGlzLmdldFN1cnZleSgpKSByZXR1cm47XG4gICAgdGhpcy5pbm5lclBhZGRpbmdMZWZ0ID0gdGhpcy5nZXRJbmRlbnRTaXplKHRoaXMuaW5uZXJJbmRlbnQpO1xuICAgIHRoaXMucGFkZGluZ0xlZnQgPSB0aGlzLmdldEluZGVudFNpemUodGhpcy5pbmRlbnQpO1xuICAgIHRoaXMucGFkZGluZ1JpZ2h0ID0gdGhpcy5nZXRJbmRlbnRTaXplKHRoaXMucmlnaHRJbmRlbnQpO1xuICB9XG4gIHByaXZhdGUgZ2V0SW5kZW50U2l6ZShpbmRlbnQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKGluZGVudCA8IDEpIHJldHVybiBcIlwiO1xuICAgIHZhciBjc3MgPSAoPGFueT50aGlzKS5zdXJ2ZXlbXCJjc3NcIl07XG4gICAgaWYgKCFjc3MpIHJldHVybiBcIlwiO1xuICAgIHJldHVybiBpbmRlbnQgKiBjc3MucXVlc3Rpb24uaW5kZW50ICsgXCJweFwiO1xuICB9XG4gIHB1YmxpYyBjbGVhck9uRGVsZXRpbmdDb250YWluZXIoKSB7XG4gICAgdGhpcy5lbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFF1ZXN0aW9uIHx8IGVsZW1lbnQgaW5zdGFuY2VvZiBQYW5lbE1vZGVsKSB7XG4gICAgICAgIGVsZW1lbnQuY2xlYXJPbkRlbGV0aW5nQ29udGFpbmVyKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcHVibGljIGdldCBmb290ZXJBY3Rpb25zKCk6IEFycmF5PElBY3Rpb24+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZm9vdGVyQWN0aW9uc1wiKTtcbiAgfVxuICBwcml2YXRlIGZvb3RlclRvb2xiYXJWYWx1ZTogQWN0aW9uQ29udGFpbmVyO1xuICBwdWJsaWMgZ2V0Rm9vdGVyVG9vbGJhcigpOiBBY3Rpb25Db250YWluZXIge1xuICAgIGlmICghdGhpcy5mb290ZXJUb29sYmFyVmFsdWUpIHtcbiAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5mb290ZXJBY3Rpb25zO1xuICAgICAgaWYgKHRoaXMuaGFzRWRpdEJ1dHRvbikge1xuICAgICAgICBhY3Rpb25zLnB1c2goe1xuICAgICAgICAgIGlkOiBcImNhbmNlbC1wcmV2aWV3XCIsXG4gICAgICAgICAgdGl0bGU6IHRoaXMuc3VydmV5LmVkaXRUZXh0LFxuICAgICAgICAgIGlubmVyQ3NzOiB0aGlzLnN1cnZleS5jc3NOYXZpZ2F0aW9uRWRpdCxcbiAgICAgICAgICBhY3Rpb246ICgpID0+IHsgdGhpcy5jYW5jZWxQcmV2aWV3KCk7IH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmZvb3RlclRvb2xiYXJWYWx1ZSA9IHRoaXMuYWxsb3dBZGFwdGl2ZUFjdGlvbnMgPyBuZXcgQWRhcHRpdmVBY3Rpb25Db250YWluZXIoKSA6IG5ldyBBY3Rpb25Db250YWluZXIoKTtcbiAgICAgIGlmICghIXRoaXMuY3NzQ2xhc3Nlcy5wYW5lbCkge1xuICAgICAgICB0aGlzLmZvb3RlclRvb2xiYXJWYWx1ZS5jb250YWluZXJDc3MgPSB0aGlzLmNzc0NsYXNzZXMucGFuZWwuZm9vdGVyO1xuICAgICAgfVxuICAgICAgdGhpcy5mb290ZXJUb29sYmFyVmFsdWUuc2V0SXRlbXMoYWN0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZvb3RlclRvb2xiYXJWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc0VkaXRCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuc3VydmV5ICYmIHRoaXMuc3VydmV5LnN0YXRlID09PSBcInByZXZpZXdcIikgcmV0dXJuIHRoaXMuZGVwdGggPT09IDE7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBjYW5jZWxQcmV2aWV3KCkge1xuICAgIGlmICghdGhpcy5oYXNFZGl0QnV0dG9uKSByZXR1cm47XG4gICAgdGhpcy5zdXJ2ZXkuY2FuY2VsUHJldmlld0J5UGFnZSh0aGlzKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNzc1RpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBDc3NDbGFzc0J1aWxkZXIoKVxuICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMucGFuZWwudGl0bGUpXG4gICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5wYW5lbC50aXRsZUV4cGFuZGFibGUsIHRoaXMuc3RhdGUgIT09IFwiZGVmYXVsdFwiKVxuICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMucGFuZWwudGl0bGVPbkVycm9yLCB0aGlzLmNvbnRhaW5zRXJyb3JzKVxuICAgICAgLnRvU3RyaW5nKCk7XG4gIH1cbiAgcHVibGljIGdldCBjc3NFcnJvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldENzc0Vycm9yKHRoaXMuY3NzQ2xhc3Nlcyk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENzc0Vycm9yKGNzc0NsYXNzZXM6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgYnVpbGRlciA9IG5ldyBDc3NDbGFzc0J1aWxkZXIoKS5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmVycm9yLnJvb3QpO1xuICAgIHJldHVybiBidWlsZGVyLmFwcGVuZChcInBhbmVsLWVycm9yLXJvb3RcIiwgYnVpbGRlci5pc0VtcHR5KCkpLnRvU3RyaW5nKCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uVmlzaWJsZUNoYW5nZWQoKSB7XG4gICAgc3VwZXIub25WaXNpYmxlQ2hhbmdlZCgpO1xuICAgIHRoaXMubm90aWZ5U3VydmV5T25WaXNpYmlsaXR5Q2hhbmdlZCgpO1xuICB9XG4gIHB1YmxpYyBuZWVkUmVzcG9uc2l2ZVdpZHRoKCkge1xuICAgIGlmKHRoaXMuc3RhcnRXaXRoTmV3TGluZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsc2VcbiAgICAgIHN1cGVyLm5lZWRSZXNwb25zaXZlV2lkdGgoKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGZvY3VzSW4gPSAoKSA9PiB7XG4gICAgKHRoaXMuc3VydmV5IGFzIFN1cnZleU1vZGVsKS53aGVuUGFuZWxGb2N1c0luKHRoaXMpO1xuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwicGFuZWxiYXNlXCIsXG4gIFtcbiAgICBcIm5hbWVcIixcbiAgICB7XG4gICAgICBuYW1lOiBcImVsZW1lbnRzXCIsXG4gICAgICBhbHRlcm5hdGl2ZU5hbWU6IFwicXVlc3Rpb25zXCIsXG4gICAgICBiYXNlQ2xhc3NOYW1lOiBcInF1ZXN0aW9uXCIsXG4gICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgIGlzTGlnaHRTZXJpYWxpemFibGU6IGZhbHNlLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcInZpc2libGU6c3dpdGNoXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBcInZpc2libGVJZjpjb25kaXRpb25cIixcbiAgICBcImVuYWJsZUlmOmNvbmRpdGlvblwiLFxuICAgIFwicmVxdWlyZWRJZjpjb25kaXRpb25cIixcbiAgICBcInJlYWRPbmx5OmJvb2xlYW5cIixcbiAgICB7XG4gICAgICBuYW1lOiBcInF1ZXN0aW9uVGl0bGVMb2NhdGlvblwiLFxuICAgICAgZGVmYXVsdDogXCJkZWZhdWx0XCIsXG4gICAgICBjaG9pY2VzOiBbXCJkZWZhdWx0XCIsIFwidG9wXCIsIFwiYm90dG9tXCIsIFwibGVmdFwiLCBcImhpZGRlblwiXSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJ0aXRsZTp0ZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NUaXRsZVwiIH0sXG4gICAgeyBuYW1lOiBcImRlc2NyaXB0aW9uOnRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0Rlc2NyaXB0aW9uXCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInF1ZXN0aW9uc09yZGVyXCIsXG4gICAgICBkZWZhdWx0OiBcImRlZmF1bHRcIixcbiAgICAgIGNob2ljZXM6IFtcImRlZmF1bHRcIiwgXCJpbml0aWFsXCIsIFwicmFuZG9tXCJdLFxuICAgIH0sXG5cbiAgXSxcbiAgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUGFuZWxNb2RlbEJhc2UoKTtcbiAgfVxuKTtcblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJwYW5lbFwiLFxuICBbXG4gICAge1xuICAgICAgbmFtZTogXCJzdGF0ZVwiLFxuICAgICAgZGVmYXVsdDogXCJkZWZhdWx0XCIsXG4gICAgICBjaG9pY2VzOiBbXCJkZWZhdWx0XCIsIFwiY29sbGFwc2VkXCIsIFwiZXhwYW5kZWRcIl0sXG4gICAgfSxcbiAgICBcImlzUmVxdWlyZWQ6c3dpdGNoXCIsXG4gICAge1xuICAgICAgbmFtZTogXCJyZXF1aXJlZEVycm9yVGV4dDp0ZXh0XCIsXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUmVxdWlyZWRFcnJvclRleHRcIixcbiAgICB9LFxuICAgIHsgbmFtZTogXCJzdGFydFdpdGhOZXdMaW5lOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIFwid2lkdGhcIixcbiAgICB7IG5hbWU6IFwiaW5uZXJJbmRlbnQ6bnVtYmVyXCIsIGRlZmF1bHQ6IDAsIGNob2ljZXM6IFswLCAxLCAyLCAzXSB9LFxuICAgIHsgbmFtZTogXCJpbmRlbnQ6bnVtYmVyXCIsIGRlZmF1bHQ6IDAsIGNob2ljZXM6IFswLCAxLCAyLCAzXSB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwicGFnZVwiLFxuICAgICAgaXNTZXJpYWxpemFibGU6IGZhbHNlLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbiAob2JqOiBhbnkpIHtcbiAgICAgICAgdmFyIHN1cnZleSA9IG9iaiA/IG9iai5zdXJ2ZXkgOiBudWxsO1xuICAgICAgICByZXR1cm4gIXN1cnZleSB8fCBzdXJ2ZXkucGFnZXMubGVuZ3RoID4gMTtcbiAgICAgIH0sXG4gICAgICBjaG9pY2VzOiBmdW5jdGlvbiAob2JqOiBhbnkpIHtcbiAgICAgICAgdmFyIHN1cnZleSA9IG9iaiA/IG9iai5zdXJ2ZXkgOiBudWxsO1xuICAgICAgICByZXR1cm4gc3VydmV5XG4gICAgICAgICAgPyBzdXJ2ZXkucGFnZXMubWFwKChwOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBwLm5hbWUsIHRleHQ6IHAudGl0bGUgfTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIDogW107XG4gICAgICB9LFxuICAgIH0sXG4gICAgXCJzaG93TnVtYmVyOmJvb2xlYW5cIixcbiAgICB7XG4gICAgICBuYW1lOiBcInNob3dRdWVzdGlvbk51bWJlcnNcIixcbiAgICAgIGRlZmF1bHQ6IFwiZGVmYXVsdFwiLFxuICAgICAgY2hvaWNlczogW1wiZGVmYXVsdFwiLCBcIm9ucGFuZWxcIiwgXCJvZmZcIl0sXG4gICAgfSxcbiAgICBcInF1ZXN0aW9uU3RhcnRJbmRleFwiLFxuICAgIHsgbmFtZTogXCJhbGxvd0FkYXB0aXZlQWN0aW9uczpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUsIHZpc2libGU6IGZhbHNlIH0sXG4gIF0sXG4gIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFBhbmVsTW9kZWwoKTtcbiAgfSxcbiAgXCJwYW5lbGJhc2VcIlxuKTtcblxuRWxlbWVudEZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJFbGVtZW50KFwicGFuZWxcIiwgKG5hbWUpID0+IHtcbiAgcmV0dXJuIG5ldyBQYW5lbE1vZGVsKG5hbWUpO1xufSk7XG4iLCJpbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZVwiO1xyXG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xyXG5pbXBvcnQge1xyXG4gIFBvcHVwVXRpbHMsXHJcbiAgVmVydGljYWxQb3NpdGlvbixcclxuICBIb3Jpem9udGFsUG9zaXRpb24sXHJcbiAgSVBvc2l0aW9uXHJcbn0gZnJvbSBcIi4vdXRpbHMvcG9wdXBcIjtcclxuaW1wb3J0IHsgQ3NzQ2xhc3NCdWlsZGVyIH0gZnJvbSBcIi4vdXRpbHMvY3NzQ2xhc3NCdWlsZGVyXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUG9wdXBNb2RlbDxUID0gYW55PiBleHRlbmRzIEJhc2Uge1xyXG4gIEBwcm9wZXJ0eSgpIGNvbnRlbnRDb21wb25lbnROYW1lOiBzdHJpbmc7XHJcbiAgQHByb3BlcnR5KCkgY29udGVudENvbXBvbmVudERhdGE6IFQ7XHJcbiAgQHByb3BlcnR5KHsgZGVmYXVsdFZhbHVlOiBcImJvdHRvbVwiIH0pIHZlcnRpY2FsUG9zaXRpb246IFZlcnRpY2FsUG9zaXRpb247XHJcbiAgQHByb3BlcnR5KHsgZGVmYXVsdFZhbHVlOiBcImxlZnRcIiB9KSBob3Jpem9udGFsUG9zaXRpb246IEhvcml6b250YWxQb3NpdGlvbjtcclxuICBAcHJvcGVydHkoeyBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pIHNob3dQb2ludGVyOiBib29sZWFuO1xyXG4gIEBwcm9wZXJ0eSh7IGRlZmF1bHRWYWx1ZTogZmFsc2UgfSkgaXNNb2RhbDogYm9vbGVhbjtcclxuICBAcHJvcGVydHkoeyBkZWZhdWx0VmFsdWU6ICgpID0+IHsgfSB9KSBvbkNhbmNlbDogKCkgPT4gdm9pZDtcclxuICBAcHJvcGVydHkoeyBkZWZhdWx0VmFsdWU6ICgpID0+IHsgcmV0dXJuIHRydWU7IH0gfSkgb25BcHBseTogKCkgPT4gYm9vbGVhbjtcclxuICBAcHJvcGVydHkoeyBkZWZhdWx0VmFsdWU6ICgpID0+IHsgfSB9KSBvbkhpZGU6ICgpID0+IHZvaWQ7XHJcbiAgQHByb3BlcnR5KHsgZGVmYXVsdFZhbHVlOiAoKSA9PiB7IH0gfSkgb25TaG93OiAoKSA9PiB2b2lkO1xyXG4gIEBwcm9wZXJ0eSh7IGRlZmF1bHRWYWx1ZTogXCJcIiB9KSBjc3NDbGFzczogc3RyaW5nO1xyXG4gIEBwcm9wZXJ0eSh7IGRlZmF1bHRWYWx1ZTogXCJcIiB9KSB0aXRsZTogc3RyaW5nO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgY29udGVudENvbXBvbmVudE5hbWU6IHN0cmluZyxcclxuICAgIGNvbnRlbnRDb21wb25lbnREYXRhOiBULFxyXG4gICAgdmVydGljYWxQb3NpdGlvbjogVmVydGljYWxQb3NpdGlvbiA9IFwiYm90dG9tXCIsXHJcbiAgICBob3Jpem9udGFsUG9zaXRpb246IEhvcml6b250YWxQb3NpdGlvbiA9IFwibGVmdFwiLFxyXG4gICAgc2hvd1BvaW50ZXI6IGJvb2xlYW4gPSB0cnVlLFxyXG4gICAgaXNNb2RhbDogYm9vbGVhbiA9IGZhbHNlLFxyXG4gICAgb25DYW5jZWwgPSAoKSA9PiB7IH0sXHJcbiAgICBvbkFwcGx5ID0gKCkgPT4geyByZXR1cm4gdHJ1ZTsgfSxcclxuICAgIG9uSGlkZSA9ICgpID0+IHsgfSxcclxuICAgIG9uU2hvdyA9ICgpID0+IHsgfSxcclxuICAgIGNzc0NsYXNzOiBzdHJpbmcgPSBcIlwiLFxyXG4gICAgdGl0bGU6IHN0cmluZyA9IFwiXCJcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLmNvbnRlbnRDb21wb25lbnROYW1lID0gY29udGVudENvbXBvbmVudE5hbWU7XHJcbiAgICB0aGlzLmNvbnRlbnRDb21wb25lbnREYXRhID0gY29udGVudENvbXBvbmVudERhdGE7XHJcbiAgICB0aGlzLnZlcnRpY2FsUG9zaXRpb24gPSB2ZXJ0aWNhbFBvc2l0aW9uO1xyXG4gICAgdGhpcy5ob3Jpem9udGFsUG9zaXRpb24gPSBob3Jpem9udGFsUG9zaXRpb247XHJcbiAgICB0aGlzLnNob3dQb2ludGVyID0gc2hvd1BvaW50ZXI7XHJcbiAgICB0aGlzLmlzTW9kYWwgPSBpc01vZGFsO1xyXG4gICAgdGhpcy5vbkNhbmNlbCA9IG9uQ2FuY2VsO1xyXG4gICAgdGhpcy5vbkFwcGx5ID0gb25BcHBseTtcclxuICAgIHRoaXMub25IaWRlID0gb25IaWRlO1xyXG4gICAgdGhpcy5vblNob3cgPSBvblNob3c7XHJcbiAgICB0aGlzLmNzc0NsYXNzID0gY3NzQ2xhc3M7XHJcbiAgICB0aGlzLnRpdGxlID0gdGl0bGU7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgaXNWaXNpYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzVmlzaWJsZVwiLCBmYWxzZSk7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgaXNWaXNpYmxlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5pc1Zpc2libGUgPT09IHZhbHVlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzVmlzaWJsZVwiLCB2YWx1ZSk7XHJcbiAgICB0aGlzLm9uVmlzaWJpbGl0eUNoYW5nZWQgJiYgdGhpcy5vblZpc2liaWxpdHlDaGFuZ2VkKHZhbHVlKTtcclxuICAgIGlmICh0aGlzLmlzVmlzaWJsZSkge1xyXG4gICAgICBjb25zdCBpbm5lck1vZGVsID0gKHRoaXMuY29udGVudENvbXBvbmVudERhdGEgYXMgYW55KVtcIm1vZGVsXCJdO1xyXG4gICAgICBpbm5lck1vZGVsICYmIGlubmVyTW9kZWwucmVmcmVzaCAmJiBpbm5lck1vZGVsLnJlZnJlc2goKTtcclxuICAgICAgdGhpcy5vblNob3coKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub25IaWRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHB1YmxpYyB0b2dnbGVWaXNpYmlsaXR5KCkge1xyXG4gICAgdGhpcy5pc1Zpc2libGUgPSAhdGhpcy5pc1Zpc2libGU7XHJcbiAgfVxyXG4gIHB1YmxpYyBvblZpc2liaWxpdHlDaGFuZ2VkOiAoaXNWaXNpYmxlOiBib29sZWFuKSA9PiB2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUG9wdXBNb2RhbFZpZXdNb2RlbChcclxuICBjb21wb25lbnROYW1lOiBzdHJpbmcsXHJcbiAgZGF0YTogYW55LFxyXG4gIG9uQXBwbHk6ICgpID0+IGJvb2xlYW4sXHJcbiAgb25DYW5jZWw/OiAoKSA9PiB2b2lkLFxyXG4gIG9uSGlkZSA9ICgpID0+IHsgfSxcclxuICBvblNob3cgPSAoKSA9PiB7IH0sXHJcbiAgY3NzQ2xhc3M/OiBzdHJpbmcsXHJcbiAgdGl0bGU/OiBzdHJpbmdcclxuKSB7XHJcbiAgY29uc3QgcG9wdXBNb2RlbCA9IG5ldyBQb3B1cE1vZGVsKFxyXG4gICAgY29tcG9uZW50TmFtZSxcclxuICAgIGRhdGEsXHJcbiAgICBcInRvcFwiLFxyXG4gICAgXCJsZWZ0XCIsXHJcbiAgICBmYWxzZSxcclxuICAgIHRydWUsXHJcbiAgICBvbkNhbmNlbCxcclxuICAgIG9uQXBwbHksXHJcbiAgICBvbkhpZGUsXHJcbiAgICBvblNob3csXHJcbiAgICBjc3NDbGFzcyxcclxuICAgIHRpdGxlXHJcbiAgKTtcclxuICBjb25zdCBwb3B1cFZpZXdNb2RlbDogUG9wdXBCYXNlVmlld01vZGVsID0gbmV3IFBvcHVwQmFzZVZpZXdNb2RlbChcclxuICAgIHBvcHVwTW9kZWwsXHJcbiAgICB1bmRlZmluZWRcclxuICApO1xyXG4gIHBvcHVwVmlld01vZGVsLmluaXRpYWxpemVQb3B1cENvbnRhaW5lcigpO1xyXG4gIHJldHVybiBwb3B1cFZpZXdNb2RlbDtcclxufVxyXG5cclxuY29uc3QgRk9DVVNfSU5QVVRfU0VMRUNUT1IgPSBcImlucHV0Om5vdCg6ZGlzYWJsZWQpOm5vdChbcmVhZG9ubHldKTpub3QoW3R5cGU9aGlkZGVuXSksc2VsZWN0Om5vdCg6ZGlzYWJsZWQpOm5vdChbcmVhZG9ubHldKSx0ZXh0YXJlYTpub3QoOmRpc2FibGVkKTpub3QoW3JlYWRvbmx5XSksIGJ1dHRvbjpub3QoOmRpc2FibGVkKTpub3QoW3JlYWRvbmx5XSksIFt0YWJpbmRleF06bm90KFt0YWJpbmRleF49XFxcIi1cXFwiXSlcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBQb3B1cEJhc2VWaWV3TW9kZWwgZXh0ZW5kcyBCYXNlIHtcclxuICBwcml2YXRlIHByZXZBY3RpdmVFbGVtZW50OiBIVE1MRWxlbWVudDtcclxuICBwcml2YXRlIHNjcm9sbEV2ZW50Q2FsbEJhY2sgPSAoKSA9PiB0aGlzLmhpZGVQb3B1cCgpO1xyXG5cclxuICBAcHJvcGVydHkoeyBkZWZhdWx0VmFsdWU6IFwiMHB4XCIgfSkgdG9wOiBzdHJpbmc7XHJcbiAgQHByb3BlcnR5KHsgZGVmYXVsdFZhbHVlOiBcIjBweFwiIH0pIGxlZnQ6IHN0cmluZztcclxuICBAcHJvcGVydHkoeyBkZWZhdWx0VmFsdWU6IFwiYXV0b1wiIH0pIGhlaWdodDogc3RyaW5nO1xyXG4gIEBwcm9wZXJ0eSh7IGRlZmF1bHRWYWx1ZTogZmFsc2UgfSkgaXNWaXNpYmxlOiBib29sZWFuO1xyXG4gIEBwcm9wZXJ0eSh7IGRlZmF1bHRWYWx1ZTogXCJsZWZ0XCIgfSkgcG9wdXBEaXJlY3Rpb246IHN0cmluZztcclxuICBAcHJvcGVydHkoeyBkZWZhdWx0VmFsdWU6IHsgbGVmdDogXCIwcHhcIiwgdG9wOiBcIjBweFwiIH0gfSlcclxuICBwb2ludGVyVGFyZ2V0OiBJUG9zaXRpb247XHJcbiAgcHVibGljIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XHJcblxyXG4gIHByaXZhdGUgaGlkZVBvcHVwKCkge1xyXG4gICAgdGhpcy5tb2RlbC5pc1Zpc2libGUgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX21vZGVsOiBQb3B1cE1vZGVsO1xyXG4gIHB1YmxpYyBnZXQgbW9kZWwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbW9kZWw7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgbW9kZWwobW9kZWw6IFBvcHVwTW9kZWwpIHtcclxuICAgIGlmICghIXRoaXMubW9kZWwpIHtcclxuICAgICAgdGhpcy5tb2RlbC51blJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoW1wiaXNWaXNpYmxlXCJdLCBcIlBvcHVwQmFzZVZpZXdNb2RlbFwiKTtcclxuICAgIH1cclxuICAgIHRoaXMuX21vZGVsID0gbW9kZWw7XHJcbiAgICBjb25zdCB1cGRhdGVyID0gKCkgPT4ge1xyXG4gICAgICBpZiAoIW1vZGVsLmlzVmlzaWJsZSkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlT25IaWRpbmcoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlzVmlzaWJsZSA9IG1vZGVsLmlzVmlzaWJsZTtcclxuICAgIH07XHJcbiAgICBtb2RlbC5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcImlzVmlzaWJsZVwiLCB1cGRhdGVyLCBcIlBvcHVwQmFzZVZpZXdNb2RlbFwiKTtcclxuICAgIHVwZGF0ZXIoKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKG1vZGVsOiBQb3B1cE1vZGVsLCBwdWJsaWMgdGFyZ2V0RWxlbWVudD86IEhUTUxFbGVtZW50KSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5tb2RlbCA9IG1vZGVsO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IHRpdGxlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5tb2RlbC50aXRsZTtcclxuICB9XHJcbiAgcHVibGljIGdldCBjb250ZW50Q29tcG9uZW50TmFtZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMubW9kZWwuY29udGVudENvbXBvbmVudE5hbWU7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgY29udGVudENvbXBvbmVudERhdGEoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLm1vZGVsLmNvbnRlbnRDb21wb25lbnREYXRhO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IHNob3dQb2ludGVyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubW9kZWwuc2hvd1BvaW50ZXI7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgaXNNb2RhbCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLm1vZGVsLmlzTW9kYWw7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgc3R5bGVDbGFzcygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIG5ldyBDc3NDbGFzc0J1aWxkZXIoKVxyXG4gICAgICAuYXBwZW5kKHRoaXMubW9kZWwuY3NzQ2xhc3MpXHJcbiAgICAgIC5hcHBlbmQoXCJzdi1wb3B1cC0tbW9kYWxcIiwgdGhpcy5pc01vZGFsKVxyXG4gICAgICAuYXBwZW5kKFwic3YtcG9wdXAtLXNob3ctcG9pbnRlclwiLCAhdGhpcy5pc01vZGFsICYmIHRoaXMuc2hvd1BvaW50ZXIpXHJcbiAgICAgIC5hcHBlbmQoYHN2LXBvcHVwLS0ke3RoaXMucG9wdXBEaXJlY3Rpb259YCwgIXRoaXMuaXNNb2RhbCAmJiB0aGlzLnNob3dQb2ludGVyKVxyXG4gICAgICAudG9TdHJpbmcoKTtcclxuICB9XHJcbiAgcHVibGljIG9uS2V5RG93bihldmVudDogYW55KSB7XHJcbiAgICBpZiAoZXZlbnQua2V5ID09PSBcIlRhYlwiIHx8IGV2ZW50LmtleUNvZGUgPT09IDkpIHtcclxuICAgICAgdGhpcy50cmFwRm9jdXMoZXZlbnQpO1xyXG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIgfHwgZXZlbnQua2V5Q29kZSA9PT0gMjcpIHtcclxuICAgICAgaWYgKHRoaXMuaXNNb2RhbCkge1xyXG4gICAgICAgIHRoaXMubW9kZWwub25DYW5jZWwoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmhpZGVQb3B1cCgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIHRyYXBGb2N1cyhldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBmb2N1c2FibGVFbGVtZW50cyA9IHRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoRk9DVVNfSU5QVVRfU0VMRUNUT1IpO1xyXG4gICAgY29uc3QgZmlyc3RGb2N1c2FibGVFbGVtZW50ID0gZm9jdXNhYmxlRWxlbWVudHNbMF07XHJcbiAgICBjb25zdCBsYXN0Rm9jdXNhYmxlRWxlbWVudCA9IGZvY3VzYWJsZUVsZW1lbnRzW2ZvY3VzYWJsZUVsZW1lbnRzLmxlbmd0aCAtIDFdO1xyXG4gICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XHJcbiAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBmaXJzdEZvY3VzYWJsZUVsZW1lbnQpIHtcclxuICAgICAgICAoPEhUTUxFbGVtZW50Pmxhc3RGb2N1c2FibGVFbGVtZW50KS5mb2N1cygpO1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBsYXN0Rm9jdXNhYmxlRWxlbWVudCkge1xyXG4gICAgICAgICg8SFRNTEVsZW1lbnQ+Zmlyc3RGb2N1c2FibGVFbGVtZW50KS5mb2N1cygpO1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcHVibGljIHVwZGF0ZU9uU2hvd2luZygpIHtcclxuICAgIHRoaXMucHJldkFjdGl2ZUVsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcclxuICAgIGlmICghdGhpcy5pc01vZGFsKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlUG9zaXRpb24oKTtcclxuICAgIH1cclxuICAgIHRoaXMuZm9jdXNGaXJzdElucHV0KCk7XHJcbiAgICBpZiAoIXRoaXMuaXNNb2RhbCkge1xyXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCB0aGlzLnNjcm9sbEV2ZW50Q2FsbEJhY2spO1xyXG4gICAgfVxyXG4gIH1cclxuICBwdWJsaWMgdXBkYXRlT25IaWRpbmcoKSB7XHJcbiAgICB0aGlzLnByZXZBY3RpdmVFbGVtZW50ICYmIHRoaXMucHJldkFjdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgIGlmICghdGhpcy5pc01vZGFsKSB7XHJcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHRoaXMuc2Nyb2xsRXZlbnRDYWxsQmFjayk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgdXBkYXRlUG9zaXRpb24oKSB7XHJcbiAgICBjb25zdCByZWN0ID0gdGhpcy50YXJnZXRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgY29uc3QgYmFja2dyb3VuZCA9IDxIVE1MRWxlbWVudD50aGlzLmNvbnRhaW5lci5jaGlsZHJlblswXTtcclxuICAgIGNvbnN0IHBvcHVwQ29udGFpbmVyID0gPEhUTUxFbGVtZW50PmJhY2tncm91bmQuY2hpbGRyZW5bMF07XHJcbiAgICBjb25zdCBzY3JvbGxDb250ZW50ID0gPEhUTUxFbGVtZW50PmJhY2tncm91bmQuY2hpbGRyZW5bMF0ucXVlcnlTZWxlY3RvcihcIi5zdi1wb3B1cF9fc2Nyb2xsaW5nLWNvbnRlbnRcIik7XHJcbiAgICBsZXQgaGVpZ2h0ID1cclxuICAgICAgcG9wdXBDb250YWluZXIub2Zmc2V0SGVpZ2h0IC1cclxuICAgICAgc2Nyb2xsQ29udGVudC5vZmZzZXRIZWlnaHQgK1xyXG4gICAgICBzY3JvbGxDb250ZW50LnNjcm9sbEhlaWdodDtcclxuICAgIGNvbnN0IHdpZHRoID0gcG9wdXBDb250YWluZXIub2Zmc2V0V2lkdGg7XHJcbiAgICB0aGlzLmhlaWdodCA9IFwiYXV0b1wiO1xyXG4gICAgbGV0IHZlcnRpY2FsUG9zaXRpb24gPSB0aGlzLm1vZGVsLnZlcnRpY2FsUG9zaXRpb247XHJcbiAgICBpZiAoISF3aW5kb3cpIHtcclxuICAgICAgaGVpZ2h0ID0gTWF0aC5taW4oaGVpZ2h0LCB3aW5kb3cuaW5uZXJIZWlnaHQgKiAwLjkpO1xyXG4gICAgICB2ZXJ0aWNhbFBvc2l0aW9uID0gUG9wdXBVdGlscy51cGRhdGVWZXJ0aWNhbFBvc2l0aW9uKFxyXG4gICAgICAgIHJlY3QsXHJcbiAgICAgICAgaGVpZ2h0LFxyXG4gICAgICAgIHRoaXMubW9kZWwudmVydGljYWxQb3NpdGlvbixcclxuICAgICAgICB0aGlzLm1vZGVsLnNob3dQb2ludGVyLFxyXG4gICAgICAgIHdpbmRvdy5pbm5lckhlaWdodFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wb3B1cERpcmVjdGlvbiA9IFBvcHVwVXRpbHMuY2FsY3VsYXRlUG9wdXBEaXJlY3Rpb24oXHJcbiAgICAgIHZlcnRpY2FsUG9zaXRpb24sXHJcbiAgICAgIHRoaXMubW9kZWwuaG9yaXpvbnRhbFBvc2l0aW9uXHJcbiAgICApO1xyXG4gICAgY29uc3QgcG9zID0gUG9wdXBVdGlscy5jYWxjdWxhdGVQb3NpdGlvbihcclxuICAgICAgcmVjdCxcclxuICAgICAgaGVpZ2h0LFxyXG4gICAgICB3aWR0aCxcclxuICAgICAgdmVydGljYWxQb3NpdGlvbixcclxuICAgICAgdGhpcy5tb2RlbC5ob3Jpem9udGFsUG9zaXRpb24sXHJcbiAgICAgIHRoaXMuc2hvd1BvaW50ZXJcclxuICAgICk7XHJcblxyXG4gICAgaWYgKCEhd2luZG93KSB7XHJcbiAgICAgIGNvbnN0IG5ld1ZlcnRpY2FsRGltZW5zaW9ucyA9IFBvcHVwVXRpbHMudXBkYXRlVmVydGljYWxEaW1lbnNpb25zKFxyXG4gICAgICAgIHBvcy50b3AsXHJcbiAgICAgICAgaGVpZ2h0LFxyXG4gICAgICAgIHdpbmRvdy5pbm5lckhlaWdodFxyXG4gICAgICApO1xyXG4gICAgICBpZiAoISFuZXdWZXJ0aWNhbERpbWVuc2lvbnMpIHtcclxuICAgICAgICB0aGlzLmhlaWdodCA9IG5ld1ZlcnRpY2FsRGltZW5zaW9ucy5oZWlnaHQgKyBcInB4XCI7XHJcbiAgICAgICAgcG9zLnRvcCA9IG5ld1ZlcnRpY2FsRGltZW5zaW9ucy50b3A7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMubGVmdCA9IHBvcy5sZWZ0ICsgXCJweFwiO1xyXG4gICAgdGhpcy50b3AgPSBwb3MudG9wICsgXCJweFwiO1xyXG5cclxuICAgIGlmICh0aGlzLnNob3dQb2ludGVyKSB7XHJcbiAgICAgIHRoaXMucG9pbnRlclRhcmdldCA9IFBvcHVwVXRpbHMuY2FsY3VsYXRlUG9pbnRlclRhcmdldChcclxuICAgICAgICByZWN0LFxyXG4gICAgICAgIHBvcy50b3AsXHJcbiAgICAgICAgcG9zLmxlZnQsXHJcbiAgICAgICAgdmVydGljYWxQb3NpdGlvbixcclxuICAgICAgICB0aGlzLm1vZGVsLmhvcml6b250YWxQb3NpdGlvblxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wb2ludGVyVGFyZ2V0LnRvcCArPSBcInB4XCI7XHJcbiAgICB0aGlzLnBvaW50ZXJUYXJnZXQubGVmdCArPSBcInB4XCI7XHJcbiAgfVxyXG4gIHByaXZhdGUgZm9jdXNGaXJzdElucHV0KCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHZhciBlbCA9IHRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoRk9DVVNfSU5QVVRfU0VMRUNUT1IpO1xyXG4gICAgICBpZiAoISFlbCkgKDxIVE1MRWxlbWVudD5lbCkuZm9jdXMoKTtcclxuICAgICAgZWxzZSAoPEhUTUxFbGVtZW50PnRoaXMuY29udGFpbmVyLmNoaWxkcmVuWzBdKS5mb2N1cygpO1xyXG4gICAgfSwgMTAwKTtcclxuICB9XHJcbiAgcHVibGljIGNsaWNrT3V0c2lkZSgpIHtcclxuICAgIGlmICh0aGlzLmlzTW9kYWwpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5oaWRlUG9wdXAoKTtcclxuICB9XHJcbiAgcHVibGljIGNhbmNlbCgpIHtcclxuICAgIHRoaXMubW9kZWwub25DYW5jZWwoKTtcclxuICAgIHRoaXMuaGlkZVBvcHVwKCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBhcHBseSgpIHtcclxuICAgIGlmICghIXRoaXMubW9kZWwub25BcHBseSAmJiAhdGhpcy5tb2RlbC5vbkFwcGx5KCkpIHJldHVybjtcclxuICAgIHRoaXMuaGlkZVBvcHVwKCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgY2FuY2VsQnV0dG9uVGV4dCgpIHtcclxuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwibW9kYWxDYW5jZWxCdXR0b25UZXh0XCIpO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGFwcGx5QnV0dG9uVGV4dCgpIHtcclxuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwibW9kYWxBcHBseUJ1dHRvblRleHRcIik7XHJcbiAgfVxyXG4gIHB1YmxpYyBkaXNwb3NlKCkge1xyXG4gICAgc3VwZXIuZGlzcG9zZSgpO1xyXG4gICAgdGhpcy5tb2RlbC5vblZpc2liaWxpdHlDaGFuZ2VkID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuICBwdWJsaWMgY3JlYXRlUG9wdXBDb250YWluZXIoKSB7XHJcbiAgICBjb25zdCBjb250YWluZXI6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgIHRoaXMuY29udGFpbmVyID0gY29udGFpbmVyO1xyXG4gIH1cclxuICBwdWJsaWMgbW91bnRQb3B1cENvbnRhaW5lcigpIHtcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5jb250YWluZXIpO1xyXG4gIH1cclxuICBwdWJsaWMgaW5pdGlhbGl6ZVBvcHVwQ29udGFpbmVyKCkge1xyXG4gICAgdGhpcy5jcmVhdGVQb3B1cENvbnRhaW5lcigpO1xyXG4gICAgdGhpcy5tb3VudFBvcHVwQ29udGFpbmVyKCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBkZXN0cm95UG9wdXBDb250YWluZXIoKSB7XHJcbiAgICB0aGlzLmNvbnRhaW5lci5yZW1vdmUoKTtcclxuICAgIHRoaXMuY29udGFpbmVyID0gdW5kZWZpbmVkO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBIYXNoVGFibGUsIEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBKc29uT2JqZWN0LCBTZXJpYWxpemVyLCBwcm9wZXJ0eSB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IEJhc2UsIEV2ZW50QmFzZSB9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7IElFbGVtZW50LCBJUXVlc3Rpb24sIElQYW5lbCwgSUNvbmRpdGlvblJ1bm5lciwgSVN1cnZleUltcGwsIElQYWdlLCBJVGl0bGVPd25lciwgSVByb2dyZXNzSW5mbywgSVN1cnZleSB9IGZyb20gXCIuL2Jhc2UtaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudCB9IGZyb20gXCIuL3N1cnZleS1lbGVtZW50XCI7XG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XG5pbXBvcnQgeyBBbnN3ZXJSZXF1aXJlZEVycm9yLCBDdXN0b21FcnJvciB9IGZyb20gXCIuL2Vycm9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlWYWxpZGF0b3IsIElWYWxpZGF0b3JPd25lciwgVmFsaWRhdG9yUnVubmVyIH0gZnJvbSBcIi4vdmFsaWRhdG9yXCI7XG5pbXBvcnQgeyBUZXh0UHJlUHJvY2Vzc29yLCBUZXh0UHJlUHJvY2Vzc29yVmFsdWUgfSBmcm9tIFwiLi90ZXh0UHJlUHJvY2Vzc29yXCI7XG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQgeyBDb25kaXRpb25SdW5uZXIsIEV4cHJlc3Npb25SdW5uZXIgfSBmcm9tIFwiLi9jb25kaXRpb25zXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkN1c3RvbVdpZGdldCB9IGZyb20gXCIuL3F1ZXN0aW9uQ3VzdG9tV2lkZ2V0c1wiO1xuaW1wb3J0IHsgQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvbiB9IGZyb20gXCIuL3F1ZXN0aW9uQ3VzdG9tV2lkZ2V0c1wiO1xuaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tIFwiLi9zdXJ2ZXlcIjtcbmltcG9ydCB7IFBhbmVsTW9kZWwgfSBmcm9tIFwiLi9wYW5lbFwiO1xuaW1wb3J0IHsgUmVuZGVyZXJGYWN0b3J5IH0gZnJvbSBcIi4vcmVuZGVyZXJGYWN0b3J5XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFcnJvciB9IGZyb20gXCIuL3N1cnZleS1lcnJvclwiO1xuaW1wb3J0IHsgQ3NzQ2xhc3NCdWlsZGVyIH0gZnJvbSBcIi4vdXRpbHMvY3NzQ2xhc3NCdWlsZGVyXCI7XG5pbXBvcnQgeyBpbmNyZWFzZUhlaWdodEJ5Q29udGVudCB9IGZyb20gXCIuL3V0aWxzL3V0aWxzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbmRpdGlvbk9iamVjdCB7XG4gIG5hbWU6IHN0cmluZztcbiAgdGV4dDogc3RyaW5nO1xuICBxdWVzdGlvbjogUXVlc3Rpb247XG59XG5cbi8qKlxuICogQSBiYXNlIGNsYXNzIGZvciBhbGwgcXVlc3Rpb25zLlxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb24gZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50XG4gIGltcGxlbWVudHMgSVF1ZXN0aW9uLCBJQ29uZGl0aW9uUnVubmVyLCBJVmFsaWRhdG9yT3duZXIsIElUaXRsZU93bmVyIHtcbiAgW2luZGV4OiBzdHJpbmddOiBhbnk7XG4gIHByaXZhdGUgc3RhdGljIFRleHRQcmVwcm9jZXNzb3JWYWx1ZXNNYXAgPSB7XG4gICAgdGl0bGU6IFwicHJvY2Vzc2VkVGl0bGVcIixcbiAgICByZXF1aXJlOiBcInJlcXVpcmVkVGV4dFwiLFxuICB9O1xuICBwcml2YXRlIHN0YXRpYyBxdWVzdGlvbkNvdW50ZXIgPSAxMDA7XG4gIHByaXZhdGUgc3RhdGljIGdldFF1ZXN0aW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJzcV9cIiArIFF1ZXN0aW9uLnF1ZXN0aW9uQ291bnRlcisrO1xuICB9XG4gIHByaXZhdGUgY29uZGl0aW9uUnVubmVyOiBDb25kaXRpb25SdW5uZXIgPSBudWxsO1xuICBwcml2YXRlIGlzQ3VzdG9tV2lkZ2V0UmVxdWVzdGVkOiBib29sZWFuO1xuICBwcml2YXRlIGN1c3RvbVdpZGdldFZhbHVlOiBRdWVzdGlvbkN1c3RvbVdpZGdldDtcbiAgY3VzdG9tV2lkZ2V0RGF0YSA9IHsgaXNOZWVkUmVuZGVyOiB0cnVlIH07XG4gIGZvY3VzQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XG4gIHN1cnZleUxvYWRDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgZGlzcGxheVZhbHVlQ2FsbGJhY2s6ICh0ZXh0OiBzdHJpbmcpID0+IHN0cmluZztcblxuICBwcml2YXRlIHRleHRQcmVQcm9jZXNzb3I6IFRleHRQcmVQcm9jZXNzb3I7XG4gIHByaXZhdGUgY29uZGl0aW9uRW5hYmVsUnVubmVyOiBDb25kaXRpb25SdW5uZXI7XG4gIHByaXZhdGUgY29uZGl0aW9uUmVxdWlyZWRSdW5uZXI6IENvbmRpdGlvblJ1bm5lcjtcbiAgdmFsdWVDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XG4gIGNvbW1lbnRDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XG4gIHZhbGlkYXRlVmFsdWVDYWxsYmFjazogKCkgPT4gU3VydmV5RXJyb3I7XG4gIHF1ZXN0aW9uVGl0bGVUZW1wbGF0ZUNhbGxiYWNrOiAoKSA9PiBzdHJpbmc7XG4gIGFmdGVyUmVuZGVyUXVlc3Rpb25DYWxsYmFjazogKHF1ZXN0aW9uOiBRdWVzdGlvbiwgZWxlbWVudDogYW55KSA9PiBhbnk7XG4gIHZhbHVlRnJvbURhdGFDYWxsYmFjazogKHZhbDogYW55KSA9PiBhbnk7XG4gIHZhbHVlVG9EYXRhQ2FsbGJhY2s6ICh2YWw6IGFueSkgPT4gYW55O1xuICBvbkdldFN1cnZleTogKCkgPT4gSVN1cnZleTtcbiAgcHJpdmF0ZSBsb2NQcm9jZXNzZWRUaXRsZTogTG9jYWxpemFibGVTdHJpbmc7XG4gIHByb3RlY3RlZCBpc1JlYWR5VmFsdWU6IGJvb2xlYW4gPSB0cnVlO1xuICBwcml2YXRlIGNvbW1lbnRFbGVtZW50OiBIVE1MRWxlbWVudDtcblxuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIHdoZW4gaXNSZWFkeSBwcm9wZXJ0eSBvZiBxdWVzdGlvbiBpcyBjaGFuZ2VkLlxuICAgKiA8YnIvPiBvcHRpb25zLnF1ZXN0aW9uIC0gdGhlIHF1ZXN0aW9uXG4gICAqIDxici8+IG9wdGlvbnMuaXNSZWFkeSAtIGN1cnJlbnQgdmFsdWUgb2YgaXNSZWFkeVxuICAgKiA8YnIvPiBvcHRpb25zLm9sZElzUmVhZHkgLSBvbGQgdmFsdWUgb2YgaXNSZWFkeVxuICAgKi9cbiAgcHVibGljIG9uUmVhZHlDaGFuZ2VkOiBFdmVudEJhc2U8UXVlc3Rpb24+ID0gdGhpcy5hZGRFdmVudDxRdWVzdGlvbj4oKTtcblxuICBwdWJsaWMgaXNSZWFkT25seVJlbmRlckRpdigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1JlYWRPbmx5ICYmIHNldHRpbmdzLnJlYWRPbmx5Q29tbWVudFJlbmRlck1vZGUgPT09IFwiZGl2XCI7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB0aGlzLmlkID0gUXVlc3Rpb24uZ2V0UXVlc3Rpb25JZCgpO1xuICAgIHRoaXMub25DcmVhdGluZygpO1xuICAgIHRoaXMuY3JlYXRlTmV3QXJyYXkoXCJ2YWxpZGF0b3JzXCIsICh2YWxpZGF0b3I6IGFueSkgPT4ge1xuICAgICAgdmFsaWRhdG9yLmVycm9yT3duZXIgPSB0aGlzO1xuICAgIH0pO1xuICAgIHZhciBsb2NDb21tZW50VGV4dCA9IHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXG4gICAgICBcImNvbW1lbnRUZXh0XCIsXG4gICAgICB0aGlzLFxuICAgICAgdHJ1ZVxuICAgICk7XG4gICAgbG9jQ29tbWVudFRleHQub25HZXRUZXh0Q2FsbGJhY2sgPSAodGV4dDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgIHJldHVybiAhIXRleHQgPyB0ZXh0IDogc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm90aGVySXRlbVRleHRcIik7XG4gICAgfTtcbiAgICB0aGlzLmxvY1RpdGxlLm9uR2V0RGVmYXVsdFRleHRDYWxsYmFjayA9ICgpOiBzdHJpbmcgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgICB9O1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJyZXF1aXJlZEVycm9yVGV4dFwiLCB0aGlzKTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwid2lkdGhcIiwgKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVRdWVzdGlvbkNzcygpO1xuICAgICAgaWYgKCEhdGhpcy5wYXJlbnQpIHtcbiAgICAgICAgdGhpcy5wYXJlbnQuZWxlbWVudFdpZHRoQ2hhbmdlZCh0aGlzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwiaXNSZXF1aXJlZFwiLCAoKSA9PiB7XG4gICAgICB0aGlzLmxvY1RpdGxlLm9uQ2hhbmdlZCgpO1xuICAgICAgdGhpcy5jc3NDbGFzc2VzVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0aWVzVmFsdWVDaGFuZ2VkKFxuICAgICAgW1wiaW5kZW50XCIsIFwicmlnaHRJbmRlbnRcIl0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMub25JbmRlbnRDaGFuZ2VkKCk7XG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydGllc1ZhbHVlQ2hhbmdlZChcbiAgICAgIFtcImhhc0NvbW1lbnRcIiwgXCJoYXNPdGhlclwiXSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5pbml0Q29tbWVudEZyb21TdXJ2ZXkoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVMb2NUaXRsZVByb3BlcnR5KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICBjb25zdCBsb2NUaXRsZVZhbHVlID0gc3VwZXIuY3JlYXRlTG9jVGl0bGVQcm9wZXJ0eSgpO1xuICAgIGxvY1RpdGxlVmFsdWUub25HZXRUZXh0Q2FsbGJhY2sgPSAodGV4dDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgIGlmICghdGV4dCkge1xuICAgICAgICB0ZXh0ID0gdGhpcy5uYW1lO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLnN1cnZleSkgcmV0dXJuIHRleHQ7XG4gICAgICByZXR1cm4gdGhpcy5zdXJ2ZXkuZ2V0VXBkYXRlZFF1ZXN0aW9uVGl0bGUodGhpcywgdGV4dCk7XG4gICAgfTtcbiAgICB0aGlzLmxvY1Byb2Nlc3NlZFRpdGxlID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMsIHRydWUpO1xuICAgIHRoaXMubG9jUHJvY2Vzc2VkVGl0bGUuc2hhcmVkRGF0YSA9IGxvY1RpdGxlVmFsdWU7XG4gICAgcmV0dXJuIGxvY1RpdGxlVmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0U3VydmV5KGxpdmU6IGJvb2xlYW4gPSBmYWxzZSk6IElTdXJ2ZXkge1xuICAgIGlmIChsaXZlKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnBhcmVudCA/ICg8QmFzZT4oPGFueT50aGlzLnBhcmVudCkpLmdldFN1cnZleShsaXZlKSA6IG51bGw7XG4gICAgfVxuICAgIGlmICghIXRoaXMub25HZXRTdXJ2ZXkpIHJldHVybiB0aGlzLm9uR2V0U3VydmV5KCk7XG4gICAgcmV0dXJuIHN1cGVyLmdldFN1cnZleSgpO1xuICB9XG4gIHB1YmxpYyBnZXRWYWx1ZU5hbWUoKTogc3RyaW5nIHtcbiAgICBpZiAoISF0aGlzLnZhbHVlTmFtZSkgcmV0dXJuIHRoaXMudmFsdWVOYW1lLnRvU3RyaW5nKCk7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgaWYgeW91IHdhbnQgdG8gc3RvcmUgdGhlIHF1ZXN0aW9uIHJlc3VsdCBpbiB0aGUgbmFtZSBkaWZmZXJlbnQgZnJvbSB0aGUgcXVlc3Rpb24gbmFtZS5cbiAgICogUXVlc3Rpb24gbmFtZSBzaG91bGQgYmUgdW5pcXVlIGluIHRoZSBzdXJ2ZXkgYW5kIHZhbHVlTmFtZSBjb3VsZCBiZSBub3QgdW5pcXVlLiBJdCBhbGxvd3MgdG8gc2hhcmUgZGF0YSBiZXR3ZWVuIHNldmVyYWwgcXVlc3Rpb25zIHdpdGggdGhlIHNhbWUgdmFsdWVOYW1lLlxuICAgKiBUaGUgbGlicmFyeSBzZXQgdGhlIHZhbHVlIGF1dG9tYXRpY2FsbHkgaWYgdGhlIHF1ZXN0aW9uLm5hbWUgcHJvcGVydHkgaXMgbm90IHZhbGlkLiBGb3IgZXhhbXBsZSwgaWYgaXQgY29udGFpbnMgdGhlIHBlcmlvZCAnLicgc3ltYm9sLlxuICAgKiBJbiB0aGlzIGNhc2UgaWYgeW91IHNldCB0aGUgcXVlc3Rpb24ubmFtZSBwcm9wZXJ0eSB0byAneC55JyB0aGVuIHRoZSB2YWx1ZU5hbWUgYmVjb21lcyAneCB5Jy5cbiAgICogUGxlYXNlIG5vdGUsIHRoaXMgcHJvcGVydHkgaXMgaGlkZGVuIGZvciBxdWVzdGlvbnMgd2l0aG91dCBpbnB1dCwgZm9yIGV4YW1wbGUgaHRtbCBxdWVzdGlvbi5cbiAgICogQHNlZSBuYW1lXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZhbHVlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ2YWx1ZU5hbWVcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCB2YWx1ZU5hbWUodmFsOiBzdHJpbmcpIHtcbiAgICB2YXIgb2xkVmFsdWVOYW1lID0gdGhpcy5nZXRWYWx1ZU5hbWUoKTtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ2YWx1ZU5hbWVcIiwgdmFsKTtcbiAgICB0aGlzLm9uVmFsdWVOYW1lQ2hhbmdlZChvbGRWYWx1ZU5hbWUpO1xuICB9XG4gIHByb3RlY3RlZCBvblZhbHVlTmFtZUNoYW5nZWQob2xkVmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkpIHJldHVybjtcbiAgICB0aGlzLnN1cnZleS5xdWVzdGlvblJlbmFtZWQoXG4gICAgICB0aGlzLFxuICAgICAgdGhpcy5uYW1lLFxuICAgICAgISFvbGRWYWx1ZSA/IG9sZFZhbHVlIDogdGhpcy5uYW1lXG4gICAgKTtcbiAgICB0aGlzLmluaXREYXRhRnJvbVN1cnZleSgpO1xuICB9XG4gIHByb3RlY3RlZCBvbk5hbWVDaGFuZ2VkKG9sZFZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmxvY1RpdGxlLm9uQ2hhbmdlZCgpO1xuICAgIGlmICghdGhpcy5zdXJ2ZXkpIHJldHVybjtcbiAgICB0aGlzLnN1cnZleS5xdWVzdGlvblJlbmFtZWQoXG4gICAgICB0aGlzLFxuICAgICAgb2xkVmFsdWUsXG4gICAgICB0aGlzLnZhbHVlTmFtZSA/IHRoaXMudmFsdWVOYW1lIDogb2xkVmFsdWVcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNSZWFkeSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1JlYWR5VmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogQTExWSBwcm9wZXJ0aWVzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFyaWFSZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1JlcXVpcmVkO1xuICB9XG4gIHB1YmxpYyBnZXQgYXJpYUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubG9jVGl0bGUucmVuZGVyZWRIdG1sO1xuICB9XG4gIHB1YmxpYyBnZXQgYXJpYUludmFsaWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3JzLmxlbmd0aCA+IDA7XG4gIH1cbiAgcHVibGljIGdldCBhcmlhRGVzY3JpYmVkQnkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lcnJvcnMubGVuZ3RoID4gMCA/IHRoaXMuaWQgKyBcIl9lcnJvcnNcIiA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGlzIHF1ZXN0aW9uIHJlYWR5IHRvIHVzZVxuICAgKi9cbiAgcHVibGljIGNob2ljZXNMb2FkZWQoKTogdm9pZCB7IH1cbiAgLyoqXG4gICAqIEdldC9zZXQgdGhlIHBhZ2Ugd2hlcmUgdGhlIHF1ZXN0aW9uIGlzIGxvY2F0ZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBhZ2UoKTogSVBhZ2Uge1xuICAgIHJldHVybiB0aGlzLmdldFBhZ2UodGhpcy5wYXJlbnQpO1xuICB9XG4gIHB1YmxpYyBzZXQgcGFnZSh2YWw6IElQYWdlKSB7XG4gICAgdGhpcy5zZXRQYWdlKHRoaXMucGFyZW50LCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXRQYW5lbCgpOiBJUGFuZWwge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyBkZWxldGUoKTogdm9pZCB7XG4gICAgaWYgKCEhdGhpcy5wYXJlbnQpIHtcbiAgICAgIHRoaXMucmVtb3ZlU2VsZkZyb21MaXN0KHRoaXMucGFyZW50LmVsZW1lbnRzKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCBpc0Zsb3dMYXlvdXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TGF5b3V0VHlwZSgpID09PSBcImZsb3dcIjtcbiAgfVxuICBwdWJsaWMgZ2V0TGF5b3V0VHlwZSgpOiBzdHJpbmcge1xuICAgIGlmICghIXRoaXMucGFyZW50KSByZXR1cm4gdGhpcy5wYXJlbnQuZ2V0Q2hpbGRyZW5MYXlvdXRUeXBlKCk7XG4gICAgcmV0dXJuIFwicm93XCI7XG4gIH1cbiAgaXNMYXlvdXRUeXBlU3VwcG9ydGVkKGxheW91dFR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBsYXlvdXRUeXBlICE9PSBcImZsb3dcIjtcbiAgfVxuICAvKipcbiAgICogVXNlIGl0IHRvIGdldC9zZXQgdGhlIHF1ZXN0aW9uIHZpc2liaWxpdHkuXG4gICAqIEBzZWUgdmlzaWJsZUlmXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVcIiwgdHJ1ZSk7XG4gIH1cbiAgcHVibGljIHNldCB2aXNpYmxlKHZhbDogYm9vbGVhbikge1xuICAgIGlmICh2YWwgPT0gdGhpcy52aXNpYmxlKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZVwiLCB2YWwpO1xuICAgIHRoaXMub25WaXNpYmxlQ2hhbmdlZCgpO1xuICAgIHRoaXMubm90aWZ5U3VydmV5VmlzaWJpbGl0eUNoYW5nZWQoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25WaXNpYmxlQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc1Zpc2libGVcIiwgdGhpcy5pc1Zpc2libGUpO1xuICAgIGlmICh0aGlzLmlzVmlzaWJsZSAmJiB0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5pc0NsZWFyVmFsdWVPbkhpZGRlbikge1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZVdpdGhEZWZhdWx0cygpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNWaXNpYmxlICYmIHRoaXMuZXJyb3JzICYmIHRoaXMuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZXJyb3JzID0gW107XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBVc2UgaXQgdG8gY2hvb3NlIGhvdyBvdGhlciBxdWVzdGlvbiB2YWx1ZXMgd2lsbCBiZSByZW5kZXJlZCBpbiB0aXRsZSBpZiByZWZlcmVuY2VkIGluIHt9LlxuICAgKiBQbGVhc2Ugbm90ZSwgdGhpcyBwcm9wZXJ0eSBpcyBoaWRkZW4gZm9yIHF1ZXN0aW9uIHdpdGhvdXQgaW5wdXQsIGZvciBleGFtcGxlIGh0bWwgcXVlc3Rpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHVzZURpc3BsYXlWYWx1ZXNJblRpdGxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ1c2VEaXNwbGF5VmFsdWVzSW5UaXRsZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHVzZURpc3BsYXlWYWx1ZXNJblRpdGxlKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInVzZURpc3BsYXlWYWx1ZXNJblRpdGxlXCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVzZURpc3BsYXlWYWx1ZXNJblRpdGxlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy51c2VEaXNwbGF5VmFsdWVzSW5UaXRsZTsgfVxuICAvKipcbiAgICogQW4gZXhwcmVzc2lvbiB0aGF0IHJldHVybnMgdHJ1ZSBvciBmYWxzZS4gSWYgaXQgcmV0dXJucyB0cnVlIHRoZSBRdWVzdGlvbiBiZWNvbWVzIHZpc2libGUgYW5kIGlmIGl0IHJldHVybnMgZmFsc2UgdGhlIFF1ZXN0aW9uIGJlY29tZXMgaW52aXNpYmxlLiBUaGUgbGlicmFyeSBydW5zIHRoZSBleHByZXNzaW9uIG9uIHN1cnZleSBzdGFydCBhbmQgb24gY2hhbmdpbmcgYSBxdWVzdGlvbiB2YWx1ZS4gSWYgdGhlIHByb3BlcnR5IGlzIGVtcHR5IHRoZW4gdmlzaWJsZSBwcm9wZXJ0eSBpcyB1c2VkLlxuICAgKiBAc2VlIHZpc2libGVcbiAgICovXG4gIHB1YmxpYyBnZXQgdmlzaWJsZUlmKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVJZlwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHZpc2libGVJZih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVJZlwiLCB2YWwpO1xuICAgIHRoaXMucnVuQ29uZGl0aW9ucygpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHF1ZXN0aW9uIGlzIHZpc2libGUgb3Igc3VydmV5IGlzIGluIGRlc2lnbiBtb2RlIHJpZ2h0IG5vdy5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5hcmVFbXB0eUVsZW1lbnRzSGlkZGVuICYmIHRoaXMuaXNFbXB0eSgpKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLnZpc2libGUgfHwgdGhpcy5hcmVJbnZpc2libGVFbGVtZW50c1Nob3dpbmc7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHZpc2libGUgaW5kZXggb2YgdGhlIHF1ZXN0aW9uIGluIHRoZSBzdXJ2ZXkuIEl0IGNhbiBiZSBmcm9tIDAgdG8gYWxsIHZpc2libGUgcXVlc3Rpb25zIGNvdW50IC0gMVxuICAgKiBUaGUgdmlzaWJsZUluZGV4IGlzIC0xIGlmIHRoZSB0aXRsZSBpcyAnaGlkZGVuJyBvciBoaWRlTnVtYmVyIGlzIHRydWVcbiAgICogQHNlZSB0aXRsZUxvY2F0aW9uXG4gICAqIEBzZWUgaGlkZU51bWJlclxuICAgKi9cbiAgcHVibGljIGdldCB2aXNpYmxlSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidmlzaWJsZUluZGV4XCIsIC0xKTtcbiAgfVxuICAvKipcbiAgICogU2V0IGhpZGVOdW1iZXIgdG8gdHJ1ZSB0byBzdG9wIHNob3dpbmcgdGhlIG51bWJlciBmb3IgdGhpcyBxdWVzdGlvbi4gVGhlIHF1ZXN0aW9uIHdpbGwgbm90IGJlIGNvdW50ZXJcbiAgICogQHNlZSB2aXNpYmxlSW5kZXhcbiAgICogQHNlZSB0aXRsZUxvY2F0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGhpZGVOdW1iZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImhpZGVOdW1iZXJcIik7XG4gIH1cbiAgcHVibGljIHNldCBoaWRlTnVtYmVyKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImhpZGVOdW1iZXJcIiwgdmFsKTtcbiAgICB0aGlzLm5vdGlmeVN1cnZleVZpc2liaWxpdHlDaGFuZ2VkKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcXVlc3Rpb24gbWF5IGhhdmUgYSB0aXRsZSBsb2NhdGVkIG9uIHRoZSBsZWZ0XG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzQWxsb3dUaXRsZUxlZnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHR5cGUgb2YgdGhlIG9iamVjdCBhcyBhIHN0cmluZyBhcyBpdCByZXByZXNlbnRzIGluIHRoZSBqc29uLlxuICAgKi9cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJxdWVzdGlvblwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNRdWVzdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogTW92ZSBxdWVzdGlvbiB0byBhIG5ldyBjb250YWluZXIgUGFnZS9QYW5lbC4gQWRkIGFzIGEgbGFzdCBlbGVtZW50IGlmIGluc2VydEJlZm9yZSBwYXJhbWV0ZXIgaXMgbm90IHVzZWQgb3IgaW5zZXJ0ZWQgaW50byB0aGUgZ2l2ZW4gaW5kZXgsXG4gICAqIGlmIGluc2VydCBwYXJhbWV0ZXIgaXMgbnVtYmVyLCBvciBiZWZvcmUgdGhlIGdpdmVuIGVsZW1lbnQsIGlmIHRoZSBpbnNlcnRCZWZvcmUgcGFyYW1ldGVyIGlzIGEgcXVlc3Rpb24gb3IgcGFuZWxcbiAgICogQHBhcmFtIGNvbnRhaW5lciBQYWdlIG9yIFBhbmVsIHRvIHdoZXJlIGEgcXVlc3Rpb24gaXMgcmVsb2NhdGVkLlxuICAgKiBAcGFyYW0gaW5zZXJ0QmVmb3JlIFVzZSBpdCBpZiB5b3Ugd2FudCB0byBzZXQgdGhlIHF1ZXN0aW9uIHRvIGEgc3BlY2lmaWMgcG9zaXRpb24uIFlvdSBtYXkgdXNlIGEgbnVtYmVyICh1c2UgMCB0byBpbnNlcnQgaW50IHRoZSBiZWdpbm5pbmcpIG9yIGVsZW1lbnQsIGlmIHlvdSB3YW50IHRvIGluc2VydCBiZWZvcmUgdGhpcyBlbGVtZW50LlxuICAgKi9cbiAgcHVibGljIG1vdmVUbyhjb250YWluZXI6IElQYW5lbCwgaW5zZXJ0QmVmb3JlOiBhbnkgPSBudWxsKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubW92ZVRvQmFzZSh0aGlzLnBhcmVudCwgY29udGFpbmVyLCBpbnNlcnRCZWZvcmUpO1xuICB9XG4gIHB1YmxpYyBnZXRQcm9ncmVzc0luZm8oKTogSVByb2dyZXNzSW5mbyB7XG4gICAgaWYgKCF0aGlzLmhhc0lucHV0KSByZXR1cm4gc3VwZXIuZ2V0UHJvZ3Jlc3NJbmZvKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHF1ZXN0aW9uQ291bnQ6IDEsXG4gICAgICBhbnN3ZXJlZFF1ZXN0aW9uQ291bnQ6ICF0aGlzLmlzRW1wdHkoKSA/IDEgOiAwLFxuICAgICAgcmVxdWlyZWRRdWVzdGlvbkNvdW50OiB0aGlzLmlzUmVxdWlyZWQgPyAxIDogMCxcbiAgICAgIHJlcXVpcmVkQW5zd2VyZWRRdWVzdGlvbkNvdW50OiAhdGhpcy5pc0VtcHR5KCkgJiYgdGhpcy5pc1JlcXVpcmVkID8gMSA6IDAsXG4gICAgfTtcbiAgfVxuICBwcml2YXRlIHJ1bkNvbmRpdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMuZGF0YSAmJiAhdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikge1xuICAgICAgaWYgKCF0aGlzLmlzRGVzaWduTW9kZSkge1xuICAgICAgICB0aGlzLnJ1bkNvbmRpdGlvbihcbiAgICAgICAgICB0aGlzLmdldERhdGFGaWx0ZXJlZFZhbHVlcygpLFxuICAgICAgICAgIHRoaXMuZ2V0RGF0YUZpbHRlcmVkUHJvcGVydGllcygpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aGlzLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBzZXRTdXJ2ZXlJbXBsKHZhbHVlOiBJU3VydmV5SW1wbCwgaXNMaWdodD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBzdXBlci5zZXRTdXJ2ZXlJbXBsKHZhbHVlKTtcbiAgICBpZighdGhpcy5zdXJ2ZXkpIHJldHVybjtcbiAgICB0aGlzLnN1cnZleS5xdWVzdGlvbkNyZWF0ZWQodGhpcyk7XG4gICAgaWYoaXNMaWdodCAhPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5ydW5Db25kaXRpb25zKCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXREYXRhRmlsdGVyZWRWYWx1ZXMoKTogYW55IHtcbiAgICByZXR1cm4gISF0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0RmlsdGVyZWRWYWx1ZXMoKSA6IG51bGw7XG4gIH1cbiAgcHVibGljIGdldERhdGFGaWx0ZXJlZFByb3BlcnRpZXMoKTogYW55IHtcbiAgICB2YXIgcHJvcHMgPSAhIXRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRGaWx0ZXJlZFByb3BlcnRpZXMoKSA6IHt9O1xuICAgIHByb3BzLnF1ZXN0aW9uID0gdGhpcztcbiAgICByZXR1cm4gcHJvcHM7XG4gIH1cbiAgLyoqXG4gICAqIEEgcGFyZW50IGVsZW1lbnQuIEl0IGNhbiBiZSBwYW5lbCBvciBwYWdlLlxuICAgKi9cbiAgcHVibGljIGdldCBwYXJlbnQoKTogSVBhbmVsIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFyZW50XCIsIG51bGwpO1xuICB9XG4gIHB1YmxpYyBzZXQgcGFyZW50KHZhbDogSVBhbmVsKSB7XG4gICAgaWYgKHRoaXMucGFyZW50ID09PSB2YWwpIHJldHVybjtcbiAgICB0aGlzLmRlbGV0ZSgpO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInBhcmVudFwiLCB2YWwpO1xuICAgIHRoaXMudXBkYXRlUXVlc3Rpb25Dc3MoKTtcbiAgICB0aGlzLm9uUGFyZW50Q2hhbmdlZCgpO1xuICB9XG4gIHByaXZhdGUgcGFyZW50UXVlc3Rpb25WYWx1ZTogUXVlc3Rpb24gPSBudWxsO1xuICAvKipcbiAgICogQSBwYXJlbnQgcXVlc3Rpb24uIEl0IGNhbiBiZSBhIGR5bmFtaWMgcGFuZWwgb3IgZHluYW1pYy9kcm9wZG93biBtYXRyaWNlcy4gSWYgdGhlIHZhbHVlIGlzIGEgbWF0cml4LCBpdCBtZWFucyB0aGF0IHF1ZXN0aW9uIGlzIGEgY2VsbCBxdWVzdGlvbi5cbiAgICogVGhpcyBwcm9wZXJ0eSBpcyBudWxsIGZvciBhIHN0YW5kIGFsb25lIHF1ZXN0aW9uLlxuICAgKi9cbiAgcHVibGljIGdldCBwYXJlbnRRdWVzdGlvbigpOiBRdWVzdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50UXVlc3Rpb25WYWx1ZTtcbiAgfVxuICBzZXRQYXJlbnRRdWVzdGlvbih2YWw6IFF1ZXN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5wYXJlbnRRdWVzdGlvblZhbHVlID0gdmFsO1xuICAgIHRoaXMub25QYXJlbnRRdWVzdGlvbkNoYW5nZWQoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25QYXJlbnRRdWVzdGlvbkNoYW5nZWQoKTogdm9pZCB7IH1cbiAgcHJvdGVjdGVkIG9uUGFyZW50Q2hhbmdlZCgpOiB2b2lkIHsgfVxuICAvKipcbiAgICogUmV0dXJucyBmYWxzZSBpZiB0aGUgcXVlc3Rpb24gZG9lc24ndCBoYXZlIGEgdGl0bGUgcHJvcGVydHksIGZvciBleGFtcGxlOiBRdWVzdGlvbkh0bWxNb2RlbCwgb3IgdGl0bGVMb2NhdGlvbiBwcm9wZXJ0eSBlcXVhbHMgdG8gXCJoaWRkZW5cIlxuICAgKiBAc2VlIHRpdGxlTG9jYXRpb25cbiAgICovXG4gIHB1YmxpYyBnZXQgaGFzVGl0bGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VGl0bGVMb2NhdGlvbigpICE9PSBcImhpZGRlblwiO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSBkaWZmZXJlbnQgZnJvbSBcImRlZmF1bHRcIiB0byBzZXQgdGhlIHNwZWNpZmljIHF1ZXN0aW9uIHRpdGxlIGxvY2F0aW9uIGZvciB0aGlzIHBhbmVsL3BhZ2UuXG4gICAqIFBsZWFzZSBub3RlLCB0aGlzIHByb3BlcnR5IGlzIGhpZGRlbiBmb3IgcXVlc3Rpb25zIHdpdGhvdXQgaW5wdXQsIGZvciBleGFtcGxlIGh0bWwgcXVlc3Rpb24uXG4gICAqIEBzZWUgU3VydmV5TW9kZWwucXVlc3Rpb25UaXRsZUxvY2F0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHRpdGxlTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidGl0bGVMb2NhdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRpdGxlTG9jYXRpb24odmFsdWU6IHN0cmluZykge1xuICAgIHZhciBpc1Zpc2liaWxpdHlDaGFuZ2VkID1cbiAgICAgIHRoaXMudGl0bGVMb2NhdGlvbiA9PSBcImhpZGRlblwiIHx8IHZhbHVlID09IFwiaGlkZGVuXCI7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidGl0bGVMb2NhdGlvblwiLCB2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9uQ3NzKCk7XG4gICAgaWYgKGlzVmlzaWJpbGl0eUNoYW5nZWQpIHtcbiAgICAgIHRoaXMubm90aWZ5U3VydmV5VmlzaWJpbGl0eUNoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldFRpdGxlT3duZXIoKTogSVRpdGxlT3duZXIgeyByZXR1cm4gdGhpczsgfVxuICBwcml2YXRlIG5vdGlmeVN1cnZleVZpc2liaWxpdHlDaGFuZ2VkKCkge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkgfHwgdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuO1xuICAgIHRoaXMuc3VydmV5LnF1ZXN0aW9uVmlzaWJpbGl0eUNoYW5nZWQodGhpcywgdGhpcy5pc1Zpc2libGUpO1xuICAgIGlmICh0aGlzLnN1cnZleS5pc0NsZWFyVmFsdWVPbkhpZGRlbiAmJiAhdGhpcy52aXNpYmxlKSB7XG4gICAgICB0aGlzLmNsZWFyVmFsdWUoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgdGl0bGUgbG9jYXRpb24gYmFzZWQgb24gcXVlc3Rpb24gdGl0bGVMb2NhdGlvbiBwcm9wZXJ0eSBhbmQgUXVlc3Rpb25UaXRsZUxvY2F0aW9uIG9mIGl0J3MgcGFyZW50c1xuICAgKiBAc2VlIHRpdGxlTG9jYXRpb25cbiAgICogQHNlZSBQYW5lbE1vZGVsQmFzZS5RdWVzdGlvblRpdGxlTG9jYXRpb25cbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5RdWVzdGlvblRpdGxlTG9jYXRpb25cbiAgICovXG4gIHB1YmxpYyBnZXRUaXRsZUxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuaXNGbG93TGF5b3V0KSByZXR1cm4gXCJoaWRkZW5cIjtcbiAgICB2YXIgbG9jYXRpb24gPSB0aGlzLmdldFRpdGxlTG9jYXRpb25Db3JlKCk7XG4gICAgaWYgKGxvY2F0aW9uID09PSBcImxlZnRcIiAmJiAhdGhpcy5pc0FsbG93VGl0bGVMZWZ0KSBsb2NhdGlvbiA9IFwidG9wXCI7XG4gICAgcmV0dXJuIGxvY2F0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBnZXRUaXRsZUxvY2F0aW9uQ29yZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnRpdGxlTG9jYXRpb24gIT09IFwiZGVmYXVsdFwiKSByZXR1cm4gdGhpcy50aXRsZUxvY2F0aW9uO1xuICAgIGlmICghIXRoaXMucGFyZW50KSByZXR1cm4gdGhpcy5wYXJlbnQuZ2V0UXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk7XG4gICAgaWYgKCEhdGhpcy5zdXJ2ZXkpIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvblRpdGxlTG9jYXRpb247XG4gICAgcmV0dXJuIFwidG9wXCI7XG4gIH1cbiAgZ2V0IGhhc1RpdGxlT25MZWZ0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc1RpdGxlICYmIHRoaXMuZ2V0VGl0bGVMb2NhdGlvbigpID09PSBcImxlZnRcIjtcbiAgfVxuICBnZXQgaGFzVGl0bGVPblRvcCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNUaXRsZSAmJiB0aGlzLmdldFRpdGxlTG9jYXRpb24oKSA9PT0gXCJ0b3BcIjtcbiAgfVxuICBnZXQgaGFzVGl0bGVPbkJvdHRvbSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNUaXRsZSAmJiB0aGlzLmdldFRpdGxlTG9jYXRpb24oKSA9PT0gXCJib3R0b21cIjtcbiAgfVxuICBnZXQgaGFzVGl0bGVPbkxlZnRUb3AoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmhhc1RpdGxlKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgbG9jYXRpb24gPSB0aGlzLmdldFRpdGxlTG9jYXRpb24oKTtcbiAgICByZXR1cm4gbG9jYXRpb24gPT09IFwibGVmdFwiIHx8IGxvY2F0aW9uID09PSBcInRvcFwiO1xuICB9XG4gIHB1YmxpYyBnZXQgZXJyb3JMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5LnF1ZXN0aW9uRXJyb3JMb2NhdGlvbiA6IFwidG9wXCI7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgZmFsc2UgaWYgdGhlIHF1ZXN0aW9uIGRvZXNuJ3QgaGF2ZSBhbiBpbnB1dCBlbGVtZW50LCBmb3IgZXhhbXBsZTogUXVlc3Rpb25IdG1sTW9kZWxcbiAgICogQHNlZSBoYXNTaW5nbGVJbnB1dFxuICAgKi9cbiAgcHVibGljIGdldCBoYXNJbnB1dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBmYWxzZSBpZiB0aGUgcXVlc3Rpb24gZG9lc24ndCBoYXZlIGFuIGlucHV0IGVsZW1lbnQgb3IgaGF2ZSBtdWx0aXBsZSBpbnB1dHM6IG1hdHJpY2VzIG9yIHBhbmVsIGR5bmFtaWNcbiAgICogQHNlZSBoYXNJbnB1dFxuICAgKi9cbiAgcHVibGljIGdldCBoYXNTaW5nbGVJbnB1dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNJbnB1dDtcbiAgfVxuICBwdWJsaWMgZ2V0IGlucHV0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pZCArIFwiaVwiO1xuICB9XG4gIHByb3RlY3RlZCBnZXREZWZhdWx0VGl0bGVWYWx1ZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5uYW1lOyB9XG4gIHByb3RlY3RlZCBnZXREZWZhdWx0VGl0bGVUYWdOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHNldHRpbmdzLnRpdGxlVGFncy5xdWVzdGlvbjtcbiAgfVxuICAvKipcbiAgICogUXVlc3Rpb24gZGVzY3JpcHRpb24gbG9jYXRpb24uIEJ5IGRlZmF1bHQsIHZhbHVlIGlzIFwiZGVmYXVsdFwiIGFuZCBpdCBkZXBlbmRzIG9uIHN1cnZleSBxdWVzdGlvbkRlc2NyaXB0aW9uTG9jYXRpb24gcHJvcGVydHlcbiAgICogWW91IG1heSBjaGFuZ2UgaXQgdG8gXCJ1bmRlcklucHV0XCIgdG8gcmVuZGVyIGl0IHVuZGVyIHF1ZXN0aW9uIGlucHV0IG9yIFwidW5kZXJUaXRsZVwiIHRvIHJlbmRlcmVkIGl0IHVuZGVyIHRpdGxlLlxuICAgKiBAc2VlIGRlc2NyaXB0aW9uXG4gICAqIEBzZWUgU3VydmV5LnF1ZXN0aW9uRGVzY3JpcHRpb25Mb2NhdGlvblxuICAgKi9cbiAgcHVibGljIGdldCBkZXNjcmlwdGlvbkxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImRlc2NyaXB0aW9uTG9jYXRpb25cIik7XG4gIH1cbiAgcHVibGljIHNldCBkZXNjcmlwdGlvbkxvY2F0aW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZGVzY3JpcHRpb25Mb2NhdGlvblwiLCB2YWwpO1xuICB9XG4gIGdldCBoYXNEZXNjcmlwdGlvblVuZGVyVGl0bGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RGVzY3JpcHRpb25Mb2NhdGlvbigpID09IFwidW5kZXJUaXRsZVwiO1xuICB9XG4gIGdldCBoYXNEZXNjcmlwdGlvblVuZGVySW5wdXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RGVzY3JpcHRpb25Mb2NhdGlvbigpID09IFwidW5kZXJJbnB1dFwiO1xuICB9XG4gIHByaXZhdGUgZ2V0RGVzY3JpcHRpb25Mb2NhdGlvbigpIHtcbiAgICBpZiAodGhpcy5kZXNjcmlwdGlvbkxvY2F0aW9uICE9PSBcImRlZmF1bHRcIikgcmV0dXJuIHRoaXMuZGVzY3JpcHRpb25Mb2NhdGlvbjtcbiAgICByZXR1cm4gISF0aGlzLnN1cnZleVxuICAgICAgPyB0aGlzLnN1cnZleS5xdWVzdGlvbkRlc2NyaXB0aW9uTG9jYXRpb25cbiAgICAgIDogXCJ1bmRlclRpdGxlXCI7XG4gIH1cbiAgcHVibGljIGdldCBjbGlja1RpdGxlRnVuY3Rpb24oKTogYW55IHtcbiAgICBpZiAodGhpcy5oYXNJbnB1dCkge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHNlbGYuaXNDb2xsYXBzZWQpIHJldHVybjtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgc2VsZi5mb2N1cygpO1xuICAgICAgICB9LCAxKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgY3VzdG9tIHRleHQgdGhhdCB3aWxsIGJlIHNob3duIG9uIHJlcXVpcmVkIGVycm9yLiBVc2UgdGhpcyBwcm9wZXJ0eSwgaWYgeW91IGRvIG5vdCB3YW50IHRvIHNob3cgdGhlIGRlZmF1bHQgdGV4dC5cbiAgICogUGxlYXNlIG5vdGUsIHRoaXMgcHJvcGVydHkgaXMgaGlkZGVuIGZvciBxdWVzdGlvbiB3aXRob3V0IGlucHV0LCBmb3IgZXhhbXBsZSBodG1sIHF1ZXN0aW9uLlxuICAgKi9cbiAgcHVibGljIGdldCByZXF1aXJlZEVycm9yVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInJlcXVpcmVkRXJyb3JUZXh0XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVxdWlyZWRFcnJvclRleHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInJlcXVpcmVkRXJyb3JUZXh0XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY1JlcXVpcmVkRXJyb3JUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInJlcXVpcmVkRXJyb3JUZXh0XCIpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgaXQgdG8gZ2V0IG9yIHNldCB0aGUgY29tbWVudCB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgY29tbWVudFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXG4gICAgICBcImNvbW1lbnRUZXh0XCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwib3RoZXJJdGVtVGV4dFwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBjb21tZW50VGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiY29tbWVudFRleHRcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jQ29tbWVudFRleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwiY29tbWVudFRleHRcIik7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSBjb3B5IG9mIHF1ZXN0aW9uIGVycm9ycyBzdXJ2ZXkuIEZvciBzb21lIHF1ZXN0aW9ucyBsaWtlIG1hdHJpeCBhbmQgcGFuZWwgZHluYW1pYyBpdCBpbmNsdWRlcyB0aGUgZXJyb3JzIG9mIG5lc3RlZCBxdWVzdGlvbnMuXG4gICAqL1xuICBwdWJsaWMgZ2V0QWxsRXJyb3JzKCk6IEFycmF5PFN1cnZleUVycm9yPiB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3JzLnNsaWNlKCk7XG4gIH1cbiAgcHVibGljIGdldEVycm9yQnlUeXBlKGVycm9yVHlwZTogc3RyaW5nKTogU3VydmV5RXJyb3Ige1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5lcnJvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmVycm9yc1tpXS5nZXRFcnJvclR5cGUoKSA9PT0gZXJyb3JUeXBlKSByZXR1cm4gdGhpcy5lcnJvcnNbaV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbGluayB0byB0aGUgY3VzdG9tIHdpZGdldC5cbiAgICovXG4gIHB1YmxpYyBnZXQgY3VzdG9tV2lkZ2V0KCk6IFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0IHtcbiAgICBpZiAoIXRoaXMuaXNDdXN0b21XaWRnZXRSZXF1ZXN0ZWQgJiYgIXRoaXMuY3VzdG9tV2lkZ2V0VmFsdWUpIHtcbiAgICAgIHRoaXMuaXNDdXN0b21XaWRnZXRSZXF1ZXN0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy51cGRhdGVDdXN0b21XaWRnZXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tV2lkZ2V0VmFsdWU7XG4gIH1cbiAgcHVibGljIHVwZGF0ZUN1c3RvbVdpZGdldCgpOiB2b2lkIHtcbiAgICB0aGlzLmN1c3RvbVdpZGdldFZhbHVlID0gQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvbi5JbnN0YW5jZS5nZXRDdXN0b21XaWRnZXQodGhpcyk7XG4gIH1cbiAgcHVibGljIGdldCBpc0NvbXBvc2l0ZVF1ZXN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgdXBkYXRlQ29tbWVudEVsZW1lbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29tbWVudEVsZW1lbnQgJiYgdGhpcy5hdXRvR3Jvd0NvbW1lbnQpIGluY3JlYXNlSGVpZ2h0QnlDb250ZW50KHRoaXMuY29tbWVudEVsZW1lbnQpO1xuICB9XG4gIHB1YmxpYyBvbkNvbW1lbnRJbnB1dChldmVudDogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNJbnB1dFRleHRVcGRhdGUpXG4gICAgICB0aGlzLmNvbW1lbnQgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgZWxzZVxuICAgICAgdGhpcy51cGRhdGVDb21tZW50RWxlbWVudCgpO1xuICB9XG4gIHB1YmxpYyBvbkNvbW1lbnRDaGFuZ2UoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY29tbWVudCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICBpZih0aGlzLmNvbW1lbnQgIT09IGV2ZW50LnRhcmdldC52YWx1ZSkge1xuICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gdGhpcy5jb21tZW50O1xuICAgIH1cbiAgfVxuICBwdWJsaWMgYWZ0ZXJSZW5kZXJRdWVzdGlvbkVsZW1lbnQoZWw6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnN1cnZleSB8fCAhdGhpcy5oYXNTaW5nbGVJbnB1dCkgcmV0dXJuO1xuICAgIHRoaXMuc3VydmV5LmFmdGVyUmVuZGVyUXVlc3Rpb25JbnB1dCh0aGlzLCBlbCk7XG4gIH1cbiAgcHVibGljIGFmdGVyUmVuZGVyKGVsOiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkpIHJldHVybjtcbiAgICB0aGlzLnN1cnZleS5hZnRlclJlbmRlclF1ZXN0aW9uKHRoaXMsIGVsKTtcbiAgICBpZiAoISF0aGlzLmFmdGVyUmVuZGVyUXVlc3Rpb25DYWxsYmFjaykge1xuICAgICAgdGhpcy5hZnRlclJlbmRlclF1ZXN0aW9uQ2FsbGJhY2sodGhpcywgZWwpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN1cHBvcnRDb21tZW50KCkgfHwgdGhpcy5zdXBwb3J0T3RoZXIoKSkge1xuICAgICAgdGhpcy5jb21tZW50RWxlbWVudCA9IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmlkKSAmJiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmlkKS5xdWVyeVNlbGVjdG9yKFwidGV4dGFyZWFcIikpIHx8IG51bGw7XG4gICAgICB0aGlzLnVwZGF0ZUNvbW1lbnRFbGVtZW50KCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBiZWZvcmVEZXN0cm95UXVlc3Rpb25FbGVtZW50KGVsOiBIVE1MRWxlbWVudCk6IHZvaWQgeyB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSByZW5kcmVkIHF1ZXN0aW9uIHRpdGxlLlxuICAgKi9cbiAgcHVibGljIGdldCBwcm9jZXNzZWRUaXRsZSgpOiBzdHJpbmcge1xuICAgIHZhciByZXMgPSB0aGlzLmxvY1Byb2Nlc3NlZFRpdGxlLnRleHRPckh0bWw7XG4gICAgcmV0dXJuIHJlcyA/IHJlcyA6IHRoaXMubmFtZTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdGl0bGUgYWZ0ZXIgcHJvY2Vzc2luZyB0aGUgcXVlc3Rpb24gdGVtcGxhdGUuXG4gICAqIEBzZWUgU3VydmV5TW9kZWwucXVlc3Rpb25UaXRsZVRlbXBsYXRlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGZ1bGxUaXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxvY1RpdGxlLnJlbmRlcmVkSHRtbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHRpdGxlUGF0dGVybigpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkucXVlc3Rpb25UaXRsZVBhdHRlcm4gOiBcIm51bVRpdGxlUmVxdWlyZVwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNSZXF1aXJlVGV4dE9uU3RhcnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNSZXF1aXJlZCAmJiB0aGlzLnRpdGxlUGF0dGVybiA9PSBcInJlcXVpcmVOdW1UaXRsZVwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNSZXF1aXJlVGV4dEJlZm9yZVRpdGxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzUmVxdWlyZWQgJiYgdGhpcy50aXRsZVBhdHRlcm4gPT0gXCJudW1SZXF1aXJlVGl0bGVcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzUmVxdWlyZVRleHRBZnRlclRpdGxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzUmVxdWlyZWQgJiYgdGhpcy50aXRsZVBhdHRlcm4gPT0gXCJudW1UaXRsZVJlcXVpcmVcIjtcbiAgfVxuICAvKipcbiAgICogVGhlIFF1ZXN0aW9uIHJlbmRlcnMgb24gdGhlIG5ldyBsaW5lIGlmIHRoZSBwcm9wZXJ0eSBpcyB0cnVlLiBJZiB0aGUgcHJvcGVydHkgaXMgZmFsc2UsIHRoZSBxdWVzdGlvbiB0cmllcyB0byByZW5kZXIgb24gdGhlIHNhbWUgbGluZS9yb3cgd2l0aCBhIHByZXZpb3VzIHF1ZXN0aW9uL3BhbmVsLlxuICAgKi9cbiAgcHVibGljIGdldCBzdGFydFdpdGhOZXdMaW5lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzdGFydFdpdGhOZXdMaW5lXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc3RhcnRXaXRoTmV3TGluZSh2YWw6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5zdGFydFdpdGhOZXdMaW5lID09IHZhbCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInN0YXJ0V2l0aE5ld0xpbmVcIiwgdmFsKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FsY0Nzc0NsYXNzZXMoY3NzOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IGNsYXNzZXMgPSB7IGVycm9yOiB7fSB9O1xuICAgIHRoaXMuY29weUNzc0NsYXNzZXMoY2xhc3NlcywgY3NzLnF1ZXN0aW9uKTtcbiAgICB0aGlzLmNvcHlDc3NDbGFzc2VzKGNsYXNzZXMuZXJyb3IsIGNzcy5lcnJvcik7XG4gICAgdGhpcy51cGRhdGVDc3NDbGFzc2VzKGNsYXNzZXMsIGNzcyk7XG4gICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICB0aGlzLnN1cnZleS51cGRhdGVRdWVzdGlvbkNzc0NsYXNzZXModGhpcywgY2xhc3Nlcyk7XG4gICAgfVxuICAgIHJldHVybiBjbGFzc2VzO1xuICB9XG4gIHB1YmxpYyBnZXQgY3NzUm9vdCgpOiBzdHJpbmcge1xuICAgIHRoaXMuZW5zdXJlRWxlbWVudENzcygpO1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjc3NSb290XCIsIFwiXCIpO1xuICB9XG4gIHByb3RlY3RlZCBzZXRDc3NSb290KHZhbDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY3NzUm9vdFwiLCB2YWwpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRDc3NSb290KGNzc0NsYXNzZXM6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBDc3NDbGFzc0J1aWxkZXIoKVxuICAgICAgLmFwcGVuZCh0aGlzLmlzRmxvd0xheW91dCAmJiAhdGhpcy5pc0Rlc2lnbk1vZGVcbiAgICAgICAgPyBjc3NDbGFzc2VzLmZsb3dSb290XG4gICAgICAgIDogY3NzQ2xhc3Nlcy5tYWluUm9vdClcbiAgICAgIC5hcHBlbmQoY3NzQ2xhc3Nlcy50aXRsZUxlZnRSb290LCAhdGhpcy5pc0Zsb3dMYXlvdXQgJiYgdGhpcy5oYXNUaXRsZU9uTGVmdClcbiAgICAgIC5hcHBlbmQoY3NzQ2xhc3Nlcy5oYXNFcnJvciwgdGhpcy5lcnJvcnMubGVuZ3RoID4gMClcbiAgICAgIC5hcHBlbmQoY3NzQ2xhc3Nlcy5zbWFsbCwgIXRoaXMud2lkdGgpXG4gICAgICAuYXBwZW5kKGNzc0NsYXNzZXMuYW5zd2VyZWQsIHRoaXMuaXNBbnN3ZXJlZClcbiAgICAgIC50b1N0cmluZygpO1xuICB9XG4gIHB1YmxpYyBnZXQgY3NzSGVhZGVyKCk6IHN0cmluZyB7XG4gICAgdGhpcy5lbnN1cmVFbGVtZW50Q3NzKCk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNzc0hlYWRlclwiLCBcIlwiKTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0Q3NzSGVhZGVyKHZhbDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY3NzSGVhZGVyXCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENzc0hlYWRlcihjc3NDbGFzc2VzOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgQ3NzQ2xhc3NCdWlsZGVyKClcbiAgICAgIC5hcHBlbmQoY3NzQ2xhc3Nlcy5oZWFkZXIpXG4gICAgICAuYXBwZW5kKGNzc0NsYXNzZXMuaGVhZGVyVG9wLCB0aGlzLmhhc1RpdGxlT25Ub3ApXG4gICAgICAuYXBwZW5kKGNzc0NsYXNzZXMuaGVhZGVyTGVmdCwgdGhpcy5oYXNUaXRsZU9uTGVmdClcbiAgICAgIC5hcHBlbmQoY3NzQ2xhc3Nlcy5oZWFkZXJCb3R0b20sIHRoaXMuaGFzVGl0bGVPbkJvdHRvbSlcbiAgICAgIC50b1N0cmluZygpO1xuICB9XG4gIHB1YmxpYyBnZXQgY3NzQ29udGVudCgpOiBzdHJpbmcge1xuICAgIHRoaXMuZW5zdXJlRWxlbWVudENzcygpO1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjc3NDb250ZW50XCIsIFwiXCIpO1xuICB9XG4gIHByb3RlY3RlZCBzZXRDc3NDb250ZW50KHZhbDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY3NzQ29udGVudFwiLCB2YWwpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRDc3NDb250ZW50KGNzc0NsYXNzZXM6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBDc3NDbGFzc0J1aWxkZXIoKVxuICAgICAgLmFwcGVuZChjc3NDbGFzc2VzLmNvbnRlbnQpXG4gICAgICAuYXBwZW5kKGNzc0NsYXNzZXMuY29udGVudExlZnQsIHRoaXMuaGFzVGl0bGVPbkxlZnQpXG4gICAgICAudG9TdHJpbmcoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNzc1RpdGxlKCk6IHN0cmluZyB7XG4gICAgdGhpcy5lbnN1cmVFbGVtZW50Q3NzKCk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNzc1RpdGxlXCIsIFwiXCIpO1xuICB9XG4gIHByb3RlY3RlZCBzZXRDc3NUaXRsZSh2YWw6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNzc1RpdGxlXCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENzc1RpdGxlKGNzc0NsYXNzZXM6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBDc3NDbGFzc0J1aWxkZXIoKVxuICAgICAgLmFwcGVuZChjc3NDbGFzc2VzLnRpdGxlKVxuICAgICAgLmFwcGVuZChjc3NDbGFzc2VzLnRpdGxlRXhwYW5kYWJsZSwgdGhpcy5pc0NvbGxhcHNlZCB8fCB0aGlzLmlzRXhwYW5kZWQpXG4gICAgICAuYXBwZW5kKGNzc0NsYXNzZXMudGl0bGVPbkVycm9yLCB0aGlzLmNvbnRhaW5zRXJyb3JzKVxuICAgICAgLmFwcGVuZChjc3NDbGFzc2VzLnRpdGxlT25BbnN3ZXIsICF0aGlzLmNvbnRhaW5zRXJyb3JzICYmIHRoaXMuaXNBbnN3ZXJlZClcbiAgICAgIC50b1N0cmluZygpO1xuICB9XG4gIHB1YmxpYyBnZXQgY3NzRXJyb3IoKTogc3RyaW5nIHtcbiAgICB0aGlzLmVuc3VyZUVsZW1lbnRDc3MoKTtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY3NzRXJyb3JcIiwgXCJcIik7XG4gIH1cbiAgcHJvdGVjdGVkIHNldENzc0Vycm9yKHZhbDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY3NzRXJyb3JcIiwgdmFsKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q3NzRXJyb3IoY3NzQ2xhc3NlczogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IENzc0NsYXNzQnVpbGRlcigpXG4gICAgICAuYXBwZW5kKGNzc0NsYXNzZXMuZXJyb3Iucm9vdClcbiAgICAgIC5hcHBlbmQoY3NzQ2xhc3Nlcy5lcnJvci5sb2NhdGlvblRvcCwgdGhpcy5lcnJvckxvY2F0aW9uID09PSBcInRvcFwiKVxuICAgICAgLmFwcGVuZChjc3NDbGFzc2VzLmVycm9yLmxvY2F0aW9uQm90dG9tLCB0aGlzLmVycm9yTG9jYXRpb24gPT09IFwiYm90dG9tXCIpXG4gICAgICAudG9TdHJpbmcoKTtcbiAgfVxuICBwdWJsaWMgZ2V0Um9vdENzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgQ3NzQ2xhc3NCdWlsZGVyKClcbiAgICAgIC5hcHBlbmQodGhpcy5jc3NSb290KVxuICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuZGlzYWJsZWQsIHRoaXMuaXNSZWFkT25seSlcbiAgICAgIC50b1N0cmluZygpO1xuICB9XG4gIHB1YmxpYyB1cGRhdGVFbGVtZW50Q3NzKHJlTmV3PzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuY3NzQ2xhc3Nlc1ZhbHVlID0gdW5kZWZpbmVkO1xuICAgIGlmIChyZU5ldykge1xuICAgICAgdGhpcy51cGRhdGVRdWVzdGlvbkNzcyh0cnVlKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIHVwZGF0ZVF1ZXN0aW9uQ3NzKHJlTmV3PzogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuaXNMb2FkaW5nRnJvbUpzb24gfHxcbiAgICAgICF0aGlzLnN1cnZleSB8fFxuICAgICAgKHJlTmV3ICE9PSB0cnVlICYmICF0aGlzLmNzc0NsYXNzZXNWYWx1ZSlcbiAgICApXG4gICAgICByZXR1cm47XG4gICAgdGhpcy51cGRhdGVFbGVtZW50Q3NzQ29yZSh0aGlzLmNzc0NsYXNzZXMpO1xuICB9XG4gIHByaXZhdGUgZW5zdXJlRWxlbWVudENzcygpIHtcbiAgICBpZiAoIXRoaXMuY3NzQ2xhc3Nlc1ZhbHVlKSB7XG4gICAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9uQ3NzKHRydWUpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlRWxlbWVudENzc0NvcmUoY3NzQ2xhc3NlczogYW55KTogdm9pZCB7XG4gICAgdGhpcy5zZXRDc3NSb290KHRoaXMuZ2V0Q3NzUm9vdChjc3NDbGFzc2VzKSk7XG4gICAgdGhpcy5zZXRDc3NIZWFkZXIodGhpcy5nZXRDc3NIZWFkZXIoY3NzQ2xhc3NlcykpO1xuICAgIHRoaXMuc2V0Q3NzQ29udGVudCh0aGlzLmdldENzc0NvbnRlbnQoY3NzQ2xhc3NlcykpO1xuICAgIHRoaXMuc2V0Q3NzVGl0bGUodGhpcy5nZXRDc3NUaXRsZShjc3NDbGFzc2VzKSk7XG4gICAgdGhpcy5zZXRDc3NFcnJvcih0aGlzLmdldENzc0Vycm9yKGNzc0NsYXNzZXMpKTtcbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlQ3NzQ2xhc3NlcyhyZXM6IGFueSwgY3NzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIWNzcy5xdWVzdGlvbikgcmV0dXJuO1xuICAgIGNvbnN0IG9iakNzcyA9IGNzc1t0aGlzLmdldENzc1R5cGUoKV07XG4gICAgY29uc3QgdGl0bGVCdWlsZGVyID0gbmV3IENzc0NsYXNzQnVpbGRlcigpLmFwcGVuZChyZXMudGl0bGUpXG4gICAgICAuYXBwZW5kKGNzcy5xdWVzdGlvbi50aXRsZVJlcXVpcmVkLCB0aGlzLmlzUmVxdWlyZWQpO1xuICAgIHJlcy50aXRsZSA9IHRpdGxlQnVpbGRlci50b1N0cmluZygpO1xuXG4gICAgY29uc3Qgcm9vdEJ1aWxkZXIgPSBuZXcgQ3NzQ2xhc3NCdWlsZGVyKCkuYXBwZW5kKHJlcy5yb290KVxuICAgICAgLmFwcGVuZChvYmpDc3MsIHRoaXMuaXNSZXF1aXJlZCAmJiAhIWNzcy5xdWVzdGlvbi5yZXF1aXJlZCk7XG4gICAgaWYgKG9iakNzcyA9PT0gdW5kZWZpbmVkIHx8IG9iakNzcyA9PT0gbnVsbCkge1xuICAgICAgcmVzLnJvb3QgPSByb290QnVpbGRlci50b1N0cmluZygpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2Ygb2JqQ3NzID09PSBcInN0cmluZ1wiIHx8IG9iakNzcyBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgICAgcmVzLnJvb3QgPSByb290QnVpbGRlci5hcHBlbmQob2JqQ3NzLnRvU3RyaW5nKCkpLnRvU3RyaW5nKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcy5yb290ID0gcm9vdEJ1aWxkZXIudG9TdHJpbmcoKTtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIG9iakNzcykge1xuICAgICAgICByZXNba2V5XSA9IG9iakNzc1trZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q3NzVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGUoKTtcbiAgfVxuICAvKipcbiAgICogVXNlIGl0IHRvIHNldCB0aGUgc3BlY2lmaWMgd2lkdGggdG8gdGhlIHF1ZXN0aW9uIGxpa2UgY3NzIHN0eWxlICglLCBweCwgZW0gZXRjKS5cbiAgICovXG4gIHB1YmxpYyBnZXQgd2lkdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwid2lkdGhcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCB3aWR0aCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIndpZHRoXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSBpdCB0byBzZXQgdGhlIHNwZWNpZmljIG1pbldpZHRoIGNvbnN0cmFpbnQgdG8gdGhlIHF1ZXN0aW9uIGxpa2UgY3NzIHN0eWxlICglLCBweCwgZW0gZXRjKS5cbiAgICovXG4gIHB1YmxpYyBnZXQgbWluV2lkdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWluV2lkdGhcIik7XG4gIH1cbiAgcHVibGljIHNldCBtaW5XaWR0aCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1pbldpZHRoXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSBpdCB0byBzZXQgdGhlIHNwZWNpZmljIG1heFdpZHRoIGNvbnN0cmFpbnQgdG8gdGhlIHF1ZXN0aW9uIGxpa2UgY3NzIHN0eWxlICglLCBweCwgZW0gZXRjKS5cbiAgICovXG4gIHB1YmxpYyBnZXQgbWF4V2lkdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4V2lkdGhcIik7XG4gIH1cbiAgcHVibGljIHNldCBtYXhXaWR0aCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heFdpZHRoXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSByZW5kZXJlZCB3aWR0aCBvZiB0aGUgcXVlc3Rpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJlbmRlcldpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJlbmRlcldpZHRoXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVuZGVyV2lkdGgodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJXaWR0aFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgZGlmZmVyZW50IGZyb20gMCB0byBpbmNyZWFzZSB0aGUgbGVmdCBwYWRkaW5nLlxuICAgKi9cbiAgcHVibGljIGdldCBpbmRlbnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW5kZW50XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgaW5kZW50KHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaW5kZW50XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBpdCBkaWZmZXJlbnQgZnJvbSAwIHRvIGluY3JlYXNlIHRoZSByaWdodCBwYWRkaW5nLlxuICAgKi9cbiAgcHVibGljIGdldCByaWdodEluZGVudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyaWdodEluZGVudFwiLCAwKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJpZ2h0SW5kZW50KHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmlnaHRJbmRlbnRcIiwgdmFsKTtcbiAgfVxuICBnZXQgcGFkZGluZ0xlZnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFkZGludExlZnRcIiwgXCJcIik7XG4gIH1cbiAgc2V0IHBhZGRpbmdMZWZ0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGFkZGludExlZnRcIiwgdmFsKTtcbiAgfVxuICBnZXQgcGFkZGluZ1JpZ2h0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInBhZGRpbmdSaWdodFwiLCBcIlwiKTtcbiAgfVxuICBzZXQgcGFkZGluZ1JpZ2h0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGFkZGluZ1JpZ2h0XCIsIHZhbCk7XG4gIH1cbiAgcHJpdmF0ZSBvbkluZGVudENoYW5nZWQoKSB7XG4gICAgdGhpcy5wYWRkaW5nTGVmdCA9IHRoaXMuZ2V0SW5kZW50U2l6ZSh0aGlzLmluZGVudCk7XG4gICAgdGhpcy5wYWRkaW5nUmlnaHQgPSB0aGlzLmdldEluZGVudFNpemUodGhpcy5yaWdodEluZGVudCk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRJbmRlbnRTaXplKGluZGVudDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoaW5kZW50IDwgMSB8fCAhdGhpcy5nZXRTdXJ2ZXkoKSB8fCAhdGhpcy5jc3NDbGFzc2VzKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gaW5kZW50ICogdGhpcy5jc3NDbGFzc2VzLmluZGVudCArIFwicHhcIjtcbiAgfVxuICAvKipcbiAgICogTW92ZSB0aGUgZm9jdXMgdG8gdGhlIGlucHV0IG9mIHRoaXMgcXVlc3Rpb24uXG4gICAqIEBwYXJhbSBvbkVycm9yIHNldCB0aGlzIHBhcmFtZXRlciB0byB0cnVlLCB0byBmb2N1cyB0aGUgaW5wdXQgd2l0aCB0aGUgZmlyc3QgZXJyb3IsIG90aGVyIHdpc2UgdGhlIGZpcnN0IGlucHV0IHdpbGwgYmUgZm9jdXNlZC5cbiAgICovXG4gIHB1YmxpYyBmb2N1cyhvbkVycm9yOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybjtcblxuICAgIGlmICghIXRoaXMuc3VydmV5KSB7XG4gICAgICB0aGlzLnN1cnZleS5zY3JvbGxFbGVtZW50VG9Ub3AodGhpcywgdGhpcywgbnVsbCwgdGhpcy5pZCk7XG4gICAgfVxuICAgIHZhciBpZCA9ICFvbkVycm9yXG4gICAgICA/IHRoaXMuZ2V0Rmlyc3RJbnB1dEVsZW1lbnRJZCgpXG4gICAgICA6IHRoaXMuZ2V0Rmlyc3RFcnJvcklucHV0RWxlbWVudElkKCk7XG4gICAgaWYgKFN1cnZleUVsZW1lbnQuRm9jdXNFbGVtZW50KGlkKSkge1xuICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5mb2N1c0NhbGxiYWNrKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGZvY3VzSW4gPSAoKSA9PiB7XG4gICAgKHRoaXMuc3VydmV5IGFzIFN1cnZleU1vZGVsKS53aGVuUXVlc3Rpb25Gb2N1c0luKHRoaXMpO1xuICB9XG4gIHByb3RlY3RlZCBmaXJlQ2FsbGJhY2soY2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKCk7XG4gIH1cbiAgcHVibGljIGdldE90aGVyc01heExlbmd0aCgpOiBhbnkge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5tYXhPdGhlcnNMZW5ndGggPiAwID8gdGhpcy5zdXJ2ZXkubWF4T3RoZXJzTGVuZ3RoIDogbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgb25DcmVhdGluZygpOiB2b2lkIHsgfVxuICBwcm90ZWN0ZWQgZ2V0Rmlyc3RJbnB1dEVsZW1lbnRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlucHV0SWQ7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEZpcnN0RXJyb3JJbnB1dEVsZW1lbnRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldEZpcnN0SW5wdXRFbGVtZW50SWQoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UHJvY2Vzc2VkVGV4dFZhbHVlKHRleHRWYWx1ZTogVGV4dFByZVByb2Nlc3NvclZhbHVlKTogdm9pZCB7XG4gICAgdmFyIG5hbWUgPSB0ZXh0VmFsdWUubmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIHRleHRWYWx1ZS5pc0V4aXN0cyA9XG4gICAgICBPYmplY3Qua2V5cyhRdWVzdGlvbi5UZXh0UHJlcHJvY2Vzc29yVmFsdWVzTWFwKS5pbmRleE9mKG5hbWUpICE9PSAtMSB8fFxuICAgICAgKDxhbnk+dGhpcylbdGV4dFZhbHVlLm5hbWVdICE9PSB1bmRlZmluZWQ7XG4gICAgdGV4dFZhbHVlLnZhbHVlID0gKDxhbnk+dGhpcylbXG4gICAgICAoPGFueT5RdWVzdGlvbi5UZXh0UHJlcHJvY2Vzc29yVmFsdWVzTWFwKVtuYW1lXSB8fCB0ZXh0VmFsdWUubmFtZVxuICAgIF07XG4gIH1cbiAgcHVibGljIHN1cHBvcnRDb21tZW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgc3VwcG9ydE90aGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSwgdG8gbWFrZSB0aGUgcXVlc3Rpb24gYSByZXF1aXJlZC4gSWYgYSB1c2VyIGRvZXNuJ3QgYW5zd2VyIHRoZSBxdWVzdGlvbiB0aGVuIGEgdmFsaWRhdGlvbiBlcnJvciB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogUGxlYXNlIG5vdGUsIHRoaXMgcHJvcGVydHkgaXMgaGlkZGVuIGZvciBxdWVzdGlvbiB3aXRob3V0IGlucHV0LCBmb3IgZXhhbXBsZSBodG1sIHF1ZXN0aW9uLlxuICAgKi9cbiAgcHVibGljIGdldCBpc1JlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc1JlcXVpcmVkXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlzUmVxdWlyZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNSZXF1aXJlZFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBBbiBleHByZXNzaW9uIHRoYXQgcmV0dXJucyB0cnVlIG9yIGZhbHNlLiBJZiBpdCByZXR1cm5zIHRydWUgdGhlIFF1ZXN0aW9uIGJlY29tZXMgcmVxdWlyZWQgYW5kIGFuIGVuZC11c2VyIGhhcyB0byBhbnN3ZXIgaXQuXG4gICAqIElmIGl0IHJldHVybnMgZmFsc2UgdGhlIFF1ZXN0aW9uIHRoZW4gYW4gZW5kLXVzZXIgbWF5IG5vdCBhbnN3ZXIgaXQgdGhlIFF1ZXN0aW9uIG1heWJlIGVtcHR5LlxuICAgKiBUaGUgbGlicmFyeSBydW5zIHRoZSBleHByZXNzaW9uIG9uIHN1cnZleSBzdGFydCBhbmQgb24gY2hhbmdpbmcgYSBxdWVzdGlvbiB2YWx1ZS4gSWYgdGhlIHByb3BlcnR5IGlzIGVtcHR5IHRoZW4gaXNSZXF1aXJlZCBwcm9wZXJ0eSBpcyB1c2VkLlxuICAgKiBQbGVhc2Ugbm90ZSwgdGhpcyBwcm9wZXJ0eSBpcyBoaWRkZW4gZm9yIHF1ZXN0aW9uIHdpdGhvdXQgaW5wdXQsIGZvciBleGFtcGxlIGh0bWwgcXVlc3Rpb24uXG4gICAqIEBzZWUgaXNSZXF1aXJlZFxuICAgKi9cbiAgcHVibGljIGdldCByZXF1aXJlZElmKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJlcXVpcmVkSWZcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCByZXF1aXJlZElmKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmVxdWlyZWRJZlwiLCB2YWwpO1xuICAgIHRoaXMucnVuQ29uZGl0aW9ucygpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gdHJ1ZSwgdG8gYWRkIGEgY29tbWVudCBmb3IgdGhlIHF1ZXN0aW9uLlxuICAgKi9cbiAgcHVibGljIGdldCBoYXNDb21tZW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJoYXNDb21tZW50XCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGhhc0NvbW1lbnQodmFsOiBib29sZWFuKSB7XG4gICAgaWYgKCF0aGlzLnN1cHBvcnRDb21tZW50KCkpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJoYXNDb21tZW50XCIsIHZhbCk7XG4gICAgaWYgKHRoaXMuaGFzQ29tbWVudCkgdGhpcy5oYXNPdGhlciA9IGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIGlkZW50aWZpY2F0b3IuIEl0IGlzIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5LlxuICAgKi9cbiAgcHVibGljIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpZFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlkKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaWRcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGFyaWFUaXRsZUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWQgKyBcIl9hcmlhVGl0bGVcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGFyaWFSb2xlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIGdldCBoYXNPdGhlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaGFzT3RoZXJcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgaGFzT3RoZXIodmFsOiBib29sZWFuKSB7XG4gICAgaWYgKCF0aGlzLnN1cHBvcnRPdGhlcigpIHx8IHRoaXMuaGFzT3RoZXIgPT0gdmFsKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaGFzT3RoZXJcIiwgdmFsKTtcbiAgICBpZiAodGhpcy5oYXNPdGhlcikgdGhpcy5oYXNDb21tZW50ID0gZmFsc2U7XG4gICAgdGhpcy5oYXNPdGhlckNoYW5nZWQoKTtcbiAgfVxuICBwcm90ZWN0ZWQgaGFzT3RoZXJDaGFuZ2VkKCk6IHZvaWQgeyB9XG4gIHB1YmxpYyBnZXQgcmVxdWlyZVVwZGF0ZUNvbW1lbnRWYWx1ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNDb21tZW50IHx8IHRoaXMuaGFzT3RoZXI7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiByZWFkT25seSBwcm9wZXJ0eSBpcyB0cnVlIG9yIHN1cnZleSBpcyBpbiBkaXNwbGF5IG1vZGUgb3IgcGFyZW50IHBhbmVsL3BhZ2UgaXMgcmVhZE9ubHkuXG4gICAqIEBzZWUgU3VydmV5TW9kZWwubW9kZWxcbiAgICogQHNlZSByZWFkT25seVxuICAgKi9cbiAgcHVibGljIGdldCBpc1JlYWRPbmx5KCk6IGJvb2xlYW4ge1xuICAgIHZhciBpc1BhcmVudFJlYWRPbmx5ID0gISF0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC5pc1JlYWRPbmx5O1xuICAgIHZhciBpc1N1cnZleVJlYWRPbmx5ID0gISF0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5pc0Rpc3BsYXlNb2RlO1xuICAgIHJldHVybiB0aGlzLnJlYWRPbmx5IHx8IGlzUGFyZW50UmVhZE9ubHkgfHwgaXNTdXJ2ZXlSZWFkT25seTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzSW5wdXRSZWFkT25seSgpOiBib29sZWFuIHtcbiAgICB2YXIgaXNEZXNpZ25Nb2RlVjIgPSBzZXR0aW5ncy5zdXBwb3J0Q3JlYXRvclYyICYmIHRoaXMuaXNEZXNpZ25Nb2RlO1xuICAgIHJldHVybiB0aGlzLmlzUmVhZE9ubHkgfHwgaXNEZXNpZ25Nb2RlVjI7XG4gIH1cbiAgcHJvdGVjdGVkIG9uUmVhZE9ubHlDaGFuZ2VkKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzSW5wdXRSZWFkT25seVwiLCB0aGlzLmlzSW5wdXRSZWFkT25seSk7XG4gICAgc3VwZXIub25SZWFkT25seUNoYW5nZWQoKTtcbiAgfVxuICAvKipcbiAgICogQW4gZXhwcmVzc2lvbiB0aGF0IHJldHVybnMgdHJ1ZSBvciBmYWxzZS4gSWYgaXQgcmV0dXJucyBmYWxzZSB0aGUgUXVlc3Rpb24gYmVjb21lcyByZWFkIG9ubHkgYW5kIGFuIGVuZC11c2VyIHdpbGwgbm90IGFibGUgdG8gYW5zd2VyIG9uIHRoZSBxdXN0aW9uLiBUaGUgbGlicmFyeSBydW5zIHRoZSBleHByZXNzaW9uIG9uIHN1cnZleSBzdGFydCBhbmQgb24gY2hhbmdpbmcgYSBxdWVzdGlvbiB2YWx1ZS4gSWYgdGhlIHByb3BlcnR5IGlzIGVtcHR5IHRoZW4gcmVhZE9ubHkgcHJvcGVydHkgaXMgdXNlZC5cbiAgICogUGxlYXNlIG5vdGUsIHRoaXMgcHJvcGVydHkgaXMgaGlkZGVuIGZvciBxdWVzdGlvbiB3aXRob3V0IGlucHV0LCBmb3IgZXhhbXBsZSBodG1sIHF1ZXN0aW9uLlxuICAgKiBAc2VlIHJlYWRPbmx5XG4gICAqIEBzZWUgaXNSZWFkT25seVxuICAgKi9cbiAgcHVibGljIGdldCBlbmFibGVJZigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJlbmFibGVJZlwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGVuYWJsZUlmKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZW5hYmxlSWZcIiwgdmFsKTtcbiAgICB0aGlzLnJ1bkNvbmRpdGlvbnMoKTtcbiAgfVxuICAvKipcbiAgICogUnVuIHZpc2libGVJZiBhbmQgZW5hYmxlSWYgZXhwcmVzc2lvbnMuIElmIHZpc2libGVJZiBvci9hbmQgZW5hYmxlZElmIGFyZSBub3QgZW1wdHksIHRoZW4gdGhlIHJlc3VsdHMgb2YgcGVyZm9ybWluZyB0aGUgZXhwcmVzc2lvbiAodHJ1ZSBvciBmYWxzZSkgc2V0IHRvIHRoZSB2aXNpYmxlL3JlYWRPbmx5IHByb3BlcnRpZXMuXG4gICAqIEBwYXJhbSB2YWx1ZXMgVHlwaWNhbGx5IHN1cnZleSByZXN1bHRzXG4gICAqIEBzZWUgdmlzaWJsZVxuICAgKiBAc2VlIHZpc2libGVJZlxuICAgKiBAc2VlIHJlYWRPbmx5XG4gICAqIEBzZWUgZW5hYmxlSWZcbiAgICovXG4gIHB1YmxpYyBydW5Db25kaXRpb24odmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybjtcbiAgICBpZiAoIXByb3BlcnRpZXMpIHByb3BlcnRpZXMgPSB7fTtcbiAgICBwcm9wZXJ0aWVzW1wicXVlc3Rpb25cIl0gPSB0aGlzO1xuICAgIGlmICghdGhpcy5hcmVJbnZpc2libGVFbGVtZW50c1Nob3dpbmcpIHtcbiAgICAgIHRoaXMucnVuVmlzaWJsZUlmQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgfVxuICAgIHRoaXMucnVuRW5hYmxlSWZDb25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB0aGlzLnJ1blJlcXVpcmVkSWZDb25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICBwcml2YXRlIHJ1blZpc2libGVJZkNvbmRpdGlvbihcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+XG4gICkge1xuICAgIGlmICghdGhpcy52aXNpYmxlSWYpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuY29uZGl0aW9uUnVubmVyKVxuICAgICAgdGhpcy5jb25kaXRpb25SdW5uZXIgPSBuZXcgQ29uZGl0aW9uUnVubmVyKHRoaXMudmlzaWJsZUlmKTtcbiAgICB0aGlzLmNvbmRpdGlvblJ1bm5lci5leHByZXNzaW9uID0gdGhpcy52aXNpYmxlSWY7XG4gICAgdGhpcy5jb25kaXRpb25SdW5uZXIub25SdW5Db21wbGV0ZSA9IChyZXM6IGJvb2xlYW4pID0+IHtcbiAgICAgIHRoaXMudmlzaWJsZSA9IHJlcztcbiAgICB9O1xuICAgIHRoaXMuY29uZGl0aW9uUnVubmVyLnJ1bih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICB9XG4gIHByaXZhdGUgcnVuRW5hYmxlSWZDb25kaXRpb24oXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PlxuICApIHtcbiAgICBpZiAoIXRoaXMuZW5hYmxlSWYpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuY29uZGl0aW9uRW5hYmVsUnVubmVyKVxuICAgICAgdGhpcy5jb25kaXRpb25FbmFiZWxSdW5uZXIgPSBuZXcgQ29uZGl0aW9uUnVubmVyKHRoaXMuZW5hYmxlSWYpO1xuICAgIHRoaXMuY29uZGl0aW9uRW5hYmVsUnVubmVyLmV4cHJlc3Npb24gPSB0aGlzLmVuYWJsZUlmO1xuICAgIHRoaXMuY29uZGl0aW9uRW5hYmVsUnVubmVyLm9uUnVuQ29tcGxldGUgPSAocmVzOiBib29sZWFuKSA9PiB7XG4gICAgICB0aGlzLnJlYWRPbmx5ID0gIXJlcztcbiAgICB9O1xuICAgIHRoaXMuY29uZGl0aW9uRW5hYmVsUnVubmVyLnJ1bih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICB9XG4gIHByaXZhdGUgcnVuUmVxdWlyZWRJZkNvbmRpdGlvbihcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+XG4gICkge1xuICAgIGlmICghdGhpcy5yZXF1aXJlZElmKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmNvbmRpdGlvblJlcXVpcmVkUnVubmVyKVxuICAgICAgdGhpcy5jb25kaXRpb25SZXF1aXJlZFJ1bm5lciA9IG5ldyBDb25kaXRpb25SdW5uZXIodGhpcy5yZXF1aXJlZElmKTtcbiAgICB0aGlzLmNvbmRpdGlvblJlcXVpcmVkUnVubmVyLmV4cHJlc3Npb24gPSB0aGlzLnJlcXVpcmVkSWY7XG4gICAgdGhpcy5jb25kaXRpb25SZXF1aXJlZFJ1bm5lci5vblJ1bkNvbXBsZXRlID0gKHJlczogYm9vbGVhbikgPT4ge1xuICAgICAgdGhpcy5pc1JlcXVpcmVkID0gcmVzO1xuICAgIH07XG4gICAgdGhpcy5jb25kaXRpb25SZXF1aXJlZFJ1bm5lci5ydW4odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICAvKipcbiAgICogVGhlIHByb3BlcnR5IHJldHVybnMgdGhlIHF1ZXN0aW9uIG51bWJlci4gSWYgcXVlc3Rpb24gaXMgaW52aXNpYmxlIHRoZW4gaXQgcmV0dXJucyBlbXB0eSBzdHJpbmcuXG4gICAqIElmIHZpc2libGVJbmRleCBpcyAxLCB0aGVuIG5vIGlzIDIsIG9yICdCJyBpZiBzdXJ2ZXkucXVlc3Rpb25TdGFydEluZGV4IGlzICdBJy5cbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5xdWVzdGlvblN0YXJ0SW5kZXhcbiAgICovXG4gIHB1YmxpYyBnZXQgbm8oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibm9cIik7XG4gIH1cbiAgcHJpdmF0ZSBjYWxjTm8oKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuaGFzVGl0bGUgfHwgdGhpcy5oaWRlTnVtYmVyKSByZXR1cm4gXCJcIjtcbiAgICB2YXIgbm8gPSBIZWxwZXJzLmdldE51bWJlckJ5SW5kZXgodGhpcy52aXNpYmxlSW5kZXgsIHRoaXMuZ2V0U3RhcnRJbmRleCgpKTtcbiAgICBpZiAoISF0aGlzLnN1cnZleSkge1xuICAgICAgbm8gPSB0aGlzLnN1cnZleS5nZXRVcGRhdGVkUXVlc3Rpb25Obyh0aGlzLCBubyk7XG4gICAgfVxuICAgIHJldHVybiBubztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0U3RhcnRJbmRleCgpOiBzdHJpbmcge1xuICAgIGlmICghIXRoaXMucGFyZW50KSByZXR1cm4gdGhpcy5wYXJlbnQuZ2V0UXVlc3Rpb25TdGFydEluZGV4KCk7XG4gICAgaWYgKCEhdGhpcy5zdXJ2ZXkpIHJldHVybiB0aGlzLnN1cnZleS5xdWVzdGlvblN0YXJ0SW5kZXg7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbiAgcHVibGljIG9uU3VydmV5TG9hZCgpOiB2b2lkIHtcbiAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnN1cnZleUxvYWRDYWxsYmFjayk7XG4gICAgdGhpcy51cGRhdGVWYWx1ZVdpdGhEZWZhdWx0cygpO1xuICB9XG4gIHByb3RlY3RlZCBvblNldERhdGEoKTogdm9pZCB7XG4gICAgc3VwZXIub25TZXREYXRhKCk7XG4gICAgaWYgKCF0aGlzLnN1cnZleSkgcmV0dXJuO1xuICAgIHRoaXMuaW5pdERhdGFGcm9tU3VydmV5KCk7XG4gICAgdGhpcy5vblN1cnZleVZhbHVlQ2hhbmdlZCh0aGlzLnZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZVZhbHVlV2l0aERlZmF1bHRzKCk7XG4gICAgdGhpcy5vbkluZGVudENoYW5nZWQoKTtcbiAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9uQ3NzKCk7XG4gICAgdGhpcy51cGRhdGVJc0Fuc3dlcmVkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGluaXREYXRhRnJvbVN1cnZleSgpOiB2b2lkIHtcbiAgICBpZiAoISF0aGlzLmRhdGEpIHtcbiAgICAgIGNvbnN0IHZhbCA9IHRoaXMuZGF0YS5nZXRWYWx1ZSh0aGlzLmdldFZhbHVlTmFtZSgpKTtcbiAgICAgIGlmICghSGVscGVycy5pc1ZhbHVlRW1wdHkodmFsKSB8fCAhdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikge1xuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlRnJvbVN1cnZleSh2YWwpO1xuICAgICAgfVxuICAgICAgdGhpcy5pbml0Q29tbWVudEZyb21TdXJ2ZXkoKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGluaXRDb21tZW50RnJvbVN1cnZleSgpOiB2b2lkIHtcbiAgICBpZiAoISF0aGlzLmRhdGEgJiYgdGhpcy5yZXF1aXJlVXBkYXRlQ29tbWVudFZhbHVlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbW1lbnRGcm9tU3VydmV5KHRoaXMuZGF0YS5nZXRDb21tZW50KHRoaXMuZ2V0VmFsdWVOYW1lKCkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVDb21tZW50RnJvbVN1cnZleShcIlwiKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIHJ1bkV4cHJlc3Npb24oZXhwcmVzc2lvbjogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoIXRoaXMuc3VydmV5IHx8ICFleHByZXNzaW9uKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5ydW5FeHByZXNzaW9uKGV4cHJlc3Npb24pO1xuICB9XG4gIHByaXZhdGUgZ2V0IGF1dG9Hcm93Q29tbWVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuYXV0b0dyb3dDb21tZW50O1xuICB9XG4gIHByaXZhdGUgZ2V0IHF1ZXN0aW9uVmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidmFsdWVcIik7XG4gIH1cbiAgcHJpdmF0ZSBzZXQgcXVlc3Rpb25WYWx1ZSh2YWw6IGFueSkge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInZhbHVlXCIsIHZhbCk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgcXVlc3Rpb25Db21tZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvbW1lbnRcIik7XG4gIH1cbiAgcHJpdmF0ZSBzZXQgcXVlc3Rpb25Db21tZW50KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29tbWVudFwiLCB2YWwpO1xuICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuY29tbWVudENoYW5nZWRDYWxsYmFjayk7XG4gIH1cbiAgLyoqXG4gICAqIEdldC9TZXQgdGhlIHF1ZXN0aW9uIHZhbHVlLlxuICAgKiBAc2VlIFN1cnZleU1vZGUuc2V0VmFsdWVcbiAgICogQHNlZSBTdXJ2ZXlNb2RlLmdldFZhbHVlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVDb3JlKCk7XG4gIH1cbiAgcHVibGljIHNldCB2YWx1ZShuZXdWYWx1ZTogYW55KSB7XG4gICAgdGhpcy5zZXROZXdWYWx1ZShuZXdWYWx1ZSk7XG4gIH1cbiAgcHVibGljIGdldCB2YWx1ZUZvclN1cnZleSgpOiBhbnkge1xuICAgIGlmICghIXRoaXMudmFsdWVUb0RhdGFDYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWVUb0RhdGFDYWxsYmFjayh0aGlzLnZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gIH1cbiAgLyoqXG4gICAqIENsZWFyIHRoZSBxdWVzdGlvbiB2YWx1ZS4gSXQgY2xlYXJzIHRoZSBxdWVzdGlvbiBjb21tZW50IGFzIHdlbGwuXG4gICAqL1xuICBwdWJsaWMgY2xlYXJWYWx1ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLmNvbW1lbnQgPSB1bmRlZmluZWQ7XG4gIH1cbiAgcHVibGljIHVuYmluZFZhbHVlKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJWYWx1ZSgpO1xuICB9XG4gIHB1YmxpYyBjcmVhdGVWYWx1ZUNvcHkoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRVbmJpbmRWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VW5iaW5kVmFsdWUodmFsdWU6IGFueSk6IGFueSB7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZVN1cnZleUVsZW1lbnQodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgcmV0dXJuIEhlbHBlcnMuZ2V0VW5iaW5kVmFsdWUodmFsdWUpO1xuICB9XG4gIHByb3RlY3RlZCBpc1ZhbHVlU3VydmV5RWxlbWVudCh2YWw6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghdmFsKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSlcbiAgICAgIHJldHVybiB2YWwubGVuZ3RoID4gMCA/IHRoaXMuaXNWYWx1ZVN1cnZleUVsZW1lbnQodmFsWzBdKSA6IGZhbHNlO1xuICAgIHJldHVybiAhIXZhbC5nZXRUeXBlICYmICEhdmFsLm9uUHJvcGVydHlDaGFuZ2VkO1xuICB9XG4gIHByaXZhdGUgY2FuQ2xlYXJWYWx1ZUFzSW52aXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzVmlzaWJsZSAmJiB0aGlzLmlzUGFyZW50VmlzaWJsZSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghIXRoaXMucGFnZSAmJiB0aGlzLnBhZ2UuaXNTdGFydGVkKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCF0aGlzLnN1cnZleSB8fCAhdGhpcy52YWx1ZU5hbWUpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiAhdGhpcy5zdXJ2ZXkuaGFzVmlzaWJsZVF1ZXN0aW9uQnlWYWx1ZU5hbWUodGhpcy52YWx1ZU5hbWUpO1xuICB9XG4gIHByaXZhdGUgZ2V0IGlzUGFyZW50VmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG4gICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgaWYgKCFwYXJlbnQuaXNWaXNpYmxlKSByZXR1cm4gZmFsc2U7XG4gICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgY2xlYXJWYWx1ZUlmSW52aXNpYmxlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNhbkNsZWFyVmFsdWVBc0ludmlzaWJsZSgpKSB7XG4gICAgICB0aGlzLmNsZWFyVmFsdWUoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCBkaXNwbGF5VmFsdWUoKTogYW55IHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuIFwiXCI7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RGlzcGxheVZhbHVlKHRydWUpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHF1ZXN0aW9uIHZhbHVlIGFzIGEgZGlzcGxheSB0ZXh0LiBGb3IgZXhhbXBsZSwgZm9yIGRyb3Bkb3duLCBpdCB3b3VsZCByZXR1cm4gdGhlIGl0ZW0gdGV4dCBpbnN0ZWFkIG9mIGl0ZW0gdmFsdWUuXG4gICAqIEBwYXJhbSBrZXlzQXNUZXh0IFNldCB0aGlzIHZhbHVlIHRvIHRydWUsIHRvIHJldHVybiBrZXkgKGluIG1hdHJpY2VzIHF1ZXN0aW9ucykgYXMgZGlzcGxheSB0ZXh0IGFzIHdlbGwuXG4gICAqIEBwYXJhbSB2YWx1ZSB1c2UgdGhpcyBwYXJhbWV0ZXIsIGlmIHlvdSB3YW50IHRvIGdldCBkaXNwbGF5IHZhbHVlIGZvciB0aGlzIHZhbHVlIGFuZCBub3QgcXVlc3Rpb24udmFsdWUuIEl0IGlzIHVuZGVmaW5lZCBieSBkZWZhdWx0LlxuICAgKi9cbiAgcHVibGljIGdldERpc3BsYXlWYWx1ZShrZXlzQXNUZXh0OiBib29sZWFuLCB2YWx1ZTogYW55ID0gdW5kZWZpbmVkKTogYW55IHtcbiAgICB2YXIgcmVzID0gdGhpcy5jYWxjRGlzcGxheVZhbHVlKGtleXNBc1RleHQsIHZhbHVlKTtcbiAgICByZXR1cm4gISF0aGlzLmRpc3BsYXlWYWx1ZUNhbGxiYWNrID8gdGhpcy5kaXNwbGF5VmFsdWVDYWxsYmFjayhyZXMpIDogcmVzO1xuICB9XG4gIHByaXZhdGUgY2FsY0Rpc3BsYXlWYWx1ZShrZXlzQXNUZXh0OiBib29sZWFuLCB2YWx1ZTogYW55ID0gdW5kZWZpbmVkKTogYW55IHtcbiAgICBpZiAodGhpcy5jdXN0b21XaWRnZXQpIHtcbiAgICAgIHZhciByZXMgPSB0aGlzLmN1c3RvbVdpZGdldC5nZXREaXNwbGF5VmFsdWUodGhpcywgdmFsdWUpO1xuICAgICAgaWYgKHJlcykgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgdmFsdWUgPSB2YWx1ZSA9PSB1bmRlZmluZWQgPyB0aGlzLmNyZWF0ZVZhbHVlQ29weSgpIDogdmFsdWU7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KHZhbHVlKSkgcmV0dXJuIHRoaXMuZ2V0RGlzcGxheVZhbHVlRW1wdHkoKTtcbiAgICByZXR1cm4gdGhpcy5nZXREaXNwbGF5VmFsdWVDb3JlKGtleXNBc1RleHQsIHZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGlzcGxheVZhbHVlQ29yZShrZXlBc1RleHQ6IGJvb2xlYW4sIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGlzcGxheVZhbHVlRW1wdHkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoZSBkZWZhdWx0IHZhbHVlIHRvIHRoZSBxdWVzdGlvbi4gSXQgd2lsbCBiZSBhc3NpZ24gdG8gdGhlIHF1ZXN0aW9uIG9uIGxvYWRpbmcgdGhlIHN1cnZleSBmcm9tIEpTT04gb3IgYWRkaW5nIGEgcXVlc3Rpb24gdG8gdGhlIHN1cnZleSBvciBvbiBzZXR0aW5nIHRoaXMgcHJvcGVydHkgb2YgdGhlIHZhbHVlIGlzIGVtcHR5LlxuICAgKiBQbGVhc2Ugbm90ZSwgdGhpcyBwcm9wZXJ0eSBpcyBoaWRkZW4gZm9yIHF1ZXN0aW9uIHdpdGhvdXQgaW5wdXQsIGZvciBleGFtcGxlIGh0bWwgcXVlc3Rpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlZmF1bHRWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJkZWZhdWx0VmFsdWVcIik7XG4gIH1cbiAgcHVibGljIHNldCBkZWZhdWx0VmFsdWUodmFsOiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc1ZhbHVlRXhwcmVzc2lvbih2YWwpKSB7XG4gICAgICB0aGlzLmRlZmF1bHRWYWx1ZUV4cHJlc3Npb24gPSB2YWwuc3Vic3RyKDEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJkZWZhdWx0VmFsdWVcIiwgdGhpcy5jb252ZXJ0RGVmYXVsdFZhbHVlKHZhbCkpO1xuICAgIHRoaXMudXBkYXRlVmFsdWVXaXRoRGVmYXVsdHMoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGRlZmF1bHRWYWx1ZUV4cHJlc3Npb24oKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZGVmYXVsdFZhbHVlRXhwcmVzc2lvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRlZmF1bHRWYWx1ZUV4cHJlc3Npb24odmFsOiBhbnkpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJkZWZhdWx0VmFsdWVFeHByZXNzaW9uXCIsIHZhbCk7XG4gICAgdGhpcy51cGRhdGVWYWx1ZVdpdGhEZWZhdWx0cygpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHF1ZXN0aW9uIGFuc3dlciBkYXRhIGFzIGEgcGxhaW4gb2JqZWN0OiB3aXRoIHF1ZXN0aW9uIHRpdGxlLCBuYW1lLCB2YWx1ZSBhbmQgZGlzcGxheVZhbHVlLlxuICAgKiBGb3IgY29tcGxleCBxdWVzdGlvbnMgKGxpa2UgbWF0cml4LCBldGMuKSBpc05vZGUgZmxhZyBpcyBzZXQgdG8gdHJ1ZSBhbmQgZGF0YSBjb250YWlucyBhcnJheSBvZiBuZXN0ZWQgb2JqZWN0cyAocm93cylcbiAgICogc2V0IG9wdGlvbnMuaW5jbHVkZUVtcHR5IHRvIGZhbHNlIGlmIHlvdSB3YW50IHRvIHNraXAgZW1wdHkgYW5zd2Vyc1xuICAgKi9cbiAgcHVibGljIGdldFBsYWluRGF0YShcbiAgICBvcHRpb25zOiB7XG4gICAgICBpbmNsdWRlRW1wdHk/OiBib29sZWFuLFxuICAgICAgaW5jbHVkZVF1ZXN0aW9uVHlwZXM/OiBib29sZWFuLFxuICAgICAgY2FsY3VsYXRpb25zPzogQXJyYXk8e1xuICAgICAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZyxcbiAgICAgIH0+LFxuICAgIH0gPSB7XG4gICAgICBpbmNsdWRlRW1wdHk6IHRydWUsXG4gICAgICBpbmNsdWRlUXVlc3Rpb25UeXBlczogZmFsc2UsXG4gICAgfVxuICApOiBhbnkge1xuICAgIGlmIChvcHRpb25zLmluY2x1ZGVFbXB0eSB8fCAhdGhpcy5pc0VtcHR5KCkpIHtcbiAgICAgIHZhciBxdWVzdGlvblBsYWluRGF0YSA9IDxhbnk+e1xuICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIHRpdGxlOiB0aGlzLmxvY1RpdGxlLnJlbmRlcmVkSHRtbCxcbiAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgIGRpc3BsYXlWYWx1ZTogdGhpcy5kaXNwbGF5VmFsdWUsXG4gICAgICAgIGlzTm9kZTogZmFsc2UsXG4gICAgICAgIGdldFN0cmluZzogKHZhbDogYW55KSA9PlxuICAgICAgICAgIHR5cGVvZiB2YWwgPT09IFwib2JqZWN0XCIgPyBKU09OLnN0cmluZ2lmeSh2YWwpIDogdmFsLFxuICAgICAgfTtcbiAgICAgIGlmIChvcHRpb25zLmluY2x1ZGVRdWVzdGlvblR5cGVzID09PSB0cnVlKSB7XG4gICAgICAgIHF1ZXN0aW9uUGxhaW5EYXRhLnF1ZXN0aW9uVHlwZSA9IHRoaXMuZ2V0VHlwZSgpO1xuICAgICAgfVxuICAgICAgKG9wdGlvbnMuY2FsY3VsYXRpb25zIHx8IFtdKS5mb3JFYWNoKChjYWxjdWxhdGlvbikgPT4ge1xuICAgICAgICBxdWVzdGlvblBsYWluRGF0YVtjYWxjdWxhdGlvbi5wcm9wZXJ0eU5hbWVdID0gdGhpc1tcbiAgICAgICAgICBjYWxjdWxhdGlvbi5wcm9wZXJ0eU5hbWVcbiAgICAgICAgXTtcbiAgICAgIH0pO1xuICAgICAgaWYgKHRoaXMuaGFzQ29tbWVudCkge1xuICAgICAgICBxdWVzdGlvblBsYWluRGF0YS5pc05vZGUgPSB0cnVlO1xuICAgICAgICBxdWVzdGlvblBsYWluRGF0YS5kYXRhID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IDAsXG4gICAgICAgICAgICBpc0NvbW1lbnQ6IHRydWUsXG4gICAgICAgICAgICB0aXRsZTogXCJDb21tZW50XCIsXG4gICAgICAgICAgICB2YWx1ZTogc2V0dGluZ3MuY29tbWVudFByZWZpeCxcbiAgICAgICAgICAgIGRpc3BsYXlWYWx1ZTogdGhpcy5jb21tZW50LFxuICAgICAgICAgICAgZ2V0U3RyaW5nOiAodmFsOiBhbnkpID0+XG4gICAgICAgICAgICAgIHR5cGVvZiB2YWwgPT09IFwib2JqZWN0XCIgPyBKU09OLnN0cmluZ2lmeSh2YWwpIDogdmFsLFxuICAgICAgICAgICAgaXNOb2RlOiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHF1ZXN0aW9uUGxhaW5EYXRhO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgY29ycmVjdCBhbnN3ZXIgb24gdGhlIHF1ZXN0aW9uLiBTZXQgdGhpcyB2YWx1ZSBpZiB5b3UgYXJlIGRvaW5nIGEgcXVpei5cbiAgICogUGxlYXNlIG5vdGUsIHRoaXMgcHJvcGVydHkgaXMgaGlkZGVuIGZvciBxdWVzdGlvbiB3aXRob3V0IGlucHV0LCBmb3IgZXhhbXBsZSBodG1sIHF1ZXN0aW9uLlxuICAgKiBAc2VlIFN1cnZleU1vZGVsLmNvcnJlY3RBbnN3ZXJzXG4gICAqIEBzZWUgU3VydmV5TW9kZWwuaW5Db3JyZWN0QW5zd2Vyc1xuICAgKi9cbiAgcHVibGljIGdldCBjb3JyZWN0QW5zd2VyKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvcnJlY3RBbnN3ZXJcIik7XG4gIH1cbiAgcHVibGljIHNldCBjb3JyZWN0QW5zd2VyKHZhbDogYW55KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29ycmVjdEFuc3dlclwiLCB0aGlzLmNvbnZlcnREZWZhdWx0VmFsdWUodmFsKSk7XG4gIH1cbiAgcHJvdGVjdGVkIGNvbnZlcnREZWZhdWx0VmFsdWUodmFsOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgcXVlc3Rpb25zIGNvdW50OiAxIGZvciB0aGUgbm9uLW1hdHJpeCBxdWVzdGlvbnMgYW5kIGFsbCBpbm5lciB2aXNpYmxlIHF1ZXN0aW9ucyB0aGF0IGhhcyBpbnB1dChzKSB3aWRnZXRzIGZvciBxdWVzdGlvbiBvZiBtYXRyaXggdHlwZXMuXG4gICAqIEBzZWUgZ2V0UXVpelF1ZXN0aW9uc1xuICAgKi9cbiAgcHVibGljIGdldCBxdWl6UXVlc3Rpb25Db3VudCgpOiBudW1iZXIge1xuICAgIGlmIChcbiAgICAgIHRoaXMuaXNWaXNpYmxlICYmXG4gICAgICB0aGlzLmhhc0lucHV0ICYmXG4gICAgICAhdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy5jb3JyZWN0QW5zd2VyKVxuICAgIClcbiAgICAgIHJldHVybiB0aGlzLmdldFF1aXpRdWVzdGlvbkNvdW50KCk7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgcHVibGljIGdldCBjb3JyZWN0QW5zd2VyQ291bnQoKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMuaXNFbXB0eSgpICYmICF0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLmNvcnJlY3RBbnN3ZXIpKVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29ycmVjdEFuc3dlckNvdW50KCk7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFF1aXpRdWVzdGlvbkNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENvcnJlY3RBbnN3ZXJDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmlzVHdvVmFsdWVFcXVhbHModGhpcy52YWx1ZSwgdGhpcy5jb3JyZWN0QW5zd2VyLCB0cnVlLCB0cnVlKVxuICAgICAgPyAxXG4gICAgICA6IDA7XG4gIH1cbiAgcHVibGljIGlzQW5zd2VyQ29ycmVjdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb3JyZWN0QW5zd2VyQ291bnQgPT0gdGhpcy5xdWl6UXVlc3Rpb25Db3VudDtcbiAgfVxuICBwdWJsaWMgdXBkYXRlVmFsdWVXaXRoRGVmYXVsdHMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24gfHwgKCF0aGlzLmlzRGVzaWduTW9kZSAmJiB0aGlzLmlzRGVmYXVsdFZhbHVlRW1wdHkoKSkpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuaXNEZXNpZ25Nb2RlICYmICF0aGlzLmlzRW1wdHkoKSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmlzRW1wdHkoKSAmJiB0aGlzLmlzRGVmYXVsdFZhbHVlRW1wdHkoKSkgcmV0dXJuO1xuICAgIGlmICghIXRoaXMuc3VydmV5ICYmIHRoaXMuc3VydmV5LmlzQ2xlYXJWYWx1ZU9uSGlkZGVuICYmICF0aGlzLmlzVmlzaWJsZSkgcmV0dXJuO1xuICAgIHRoaXMuc2V0RGVmYXVsdFZhbHVlKCk7XG4gIH1cbiAgZ2V0UXVlc3Rpb25Gcm9tQXJyYXkobmFtZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogSVF1ZXN0aW9uIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0RGVmYXVsdFZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdFZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBpc0RlZmF1bHRWYWx1ZUVtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5kZWZhdWx0VmFsdWVFeHByZXNzaW9uICYmIHRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuZGVmYXVsdFZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0RGVmYXVsdFZhbHVlKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0VmFsdWVBbmRSdW5FeHByZXNzaW9uKFxuICAgICAgdGhpcy5kZWZhdWx0VmFsdWVFeHByZXNzaW9uLFxuICAgICAgdGhpcy5nZXRVbmJpbmRWYWx1ZSh0aGlzLmRlZmF1bHRWYWx1ZSksXG4gICAgICAodmFsKSA9PiB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWw7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgaXNWYWx1ZUV4cHJlc3Npb24odmFsOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF2YWwgJiYgdHlwZW9mIHZhbCA9PSBcInN0cmluZ1wiICYmIHZhbC5sZW5ndGggPiAwICYmIHZhbFswXSA9PSBcIj1cIjtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0VmFsdWVBbmRSdW5FeHByZXNzaW9uKFxuICAgIGV4cHJlc3Npb246IHN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6IGFueSxcbiAgICBzZXRGdW5jOiAodmFsOiBhbnkpID0+IHZvaWQsXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PiA9IG51bGwsXG4gICAgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4gPSBudWxsXG4gICk6IHZvaWQge1xuICAgIHZhciBmdW5jID0gKHZhbDogYW55KSA9PiB7XG4gICAgICBpZiAodmFsIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICB2YWwgPSB2YWwudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxMCk7XG4gICAgICB9XG4gICAgICBzZXRGdW5jKHZhbCk7XG4gICAgfTtcbiAgICBpZiAoISFleHByZXNzaW9uICYmICEhdGhpcy5kYXRhKSB7XG4gICAgICBpZiAoIXZhbHVlcykgdmFsdWVzID0gdGhpcy5kYXRhLmdldEZpbHRlcmVkVmFsdWVzKCk7XG4gICAgICBpZiAoIXByb3BlcnRpZXMpIHByb3BlcnRpZXMgPSB0aGlzLmRhdGEuZ2V0RmlsdGVyZWRQcm9wZXJ0aWVzKCk7XG4gICAgICB2YXIgcnVubmVyID0gbmV3IEV4cHJlc3Npb25SdW5uZXIoZXhwcmVzc2lvbik7XG4gICAgICBpZiAocnVubmVyLmNhblJ1bikge1xuICAgICAgICBydW5uZXIub25SdW5Db21wbGV0ZSA9IChyZXMpID0+IHtcbiAgICAgICAgICBpZiAocmVzID09IHVuZGVmaW5lZCkgcmVzID0gdGhpcy5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgZnVuYyhyZXMpO1xuICAgICAgICB9O1xuICAgICAgICBydW5uZXIucnVuKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZ1bmMoZGVmYXVsdFZhbHVlKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBxdWVzdGlvbiBjb21tZW50IHZhbHVlLlxuICAgKi9cbiAgcHVibGljIGdldCBjb21tZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UXVlc3Rpb25Db21tZW50KCk7XG4gIH1cbiAgcHVibGljIHNldCBjb21tZW50KG5ld1ZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAoISFuZXdWYWx1ZSkge1xuICAgICAgY29uc3QgdHJpbW1lZFZhbHVlID0gbmV3VmFsdWUudG9TdHJpbmcoKS50cmltKCk7XG4gICAgICBpZih0cmltbWVkVmFsdWUgIT09IG5ld1ZhbHVlKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gdHJpbW1lZFZhbHVlO1xuICAgICAgICBpZihuZXdWYWx1ZSA9PT0gdGhpcy5jb21tZW50KSB7XG4gICAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlRGlyZWN0bHkoXCJjb21tZW50XCIsIG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5jb21tZW50ID09IG5ld1ZhbHVlKSByZXR1cm47XG4gICAgdGhpcy5zZXRRdWVzdGlvbkNvbW1lbnQobmV3VmFsdWUpO1xuICAgIHRoaXMudXBkYXRlQ29tbWVudEVsZW1lbnQoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UXVlc3Rpb25Db21tZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25Db21tZW50O1xuICB9XG4gIHByb3RlY3RlZCBzZXRRdWVzdGlvbkNvbW1lbnQobmV3VmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2V0TmV3Q29tbWVudChuZXdWYWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcXVlc3Rpb24gdmFsdWUgaXMgZW1wdHlcbiAgICovXG4gIHB1YmxpYyBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLnZhbHVlKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzQW5zd2VyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzQW5zd2VyZWRcIik7XG4gIH1cbiAgcHVibGljIHNldCBpc0Fuc3dlcmVkKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzQW5zd2VyZWRcIiwgdmFsKTtcbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlSXNBbnN3ZXJlZCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc0Fuc3dlcmVkXCIsIHRoaXMuZ2V0SXNBbnN3ZXJlZCgpKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0SXNBbnN3ZXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuaXNFbXB0eSgpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBxdWVzdGlvbiB2YWxpZGF0b3JzLlxuICAgKiBQbGVhc2Ugbm90ZSwgdGhpcyBwcm9wZXJ0eSBpcyBoaWRkZW4gZm9yIHF1ZXN0aW9uIHdpdGhvdXQgaW5wdXQsIGZvciBleGFtcGxlIGh0bWwgcXVlc3Rpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZhbGlkYXRvcnMoKTogQXJyYXk8U3VydmV5VmFsaWRhdG9yPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZhbGlkYXRvcnNcIik7XG4gIH1cbiAgcHVibGljIHNldCB2YWxpZGF0b3JzKHZhbDogQXJyYXk8U3VydmV5VmFsaWRhdG9yPikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInZhbGlkYXRvcnNcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0VmFsaWRhdG9ycygpOiBBcnJheTxTdXJ2ZXlWYWxpZGF0b3I+IHtcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0b3JzO1xuICB9XG4gIHB1YmxpYyBnZXRTdXBwb3J0ZWRWYWxpZGF0b3JzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHZhciByZXM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICB2YXIgY2xhc3NOYW1lID0gdGhpcy5nZXRUeXBlKCk7XG4gICAgd2hpbGUgKCEhY2xhc3NOYW1lKSB7XG4gICAgICB2YXIgY2xhc3NWYWxpZGF0b3JzID0gKDxhbnk+c2V0dGluZ3Muc3VwcG9ydGVkVmFsaWRhdG9ycylbY2xhc3NOYW1lXTtcbiAgICAgIGlmICghIWNsYXNzVmFsaWRhdG9ycykge1xuICAgICAgICBmb3IgKHZhciBpID0gY2xhc3NWYWxpZGF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgcmVzLnNwbGljZSgwLCAwLCBjbGFzc1ZhbGlkYXRvcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgY2xhc3NJbmZvID0gU2VyaWFsaXplci5maW5kQ2xhc3MoY2xhc3NOYW1lKTtcbiAgICAgIGNsYXNzTmFtZSA9IGNsYXNzSW5mby5wYXJlbnROYW1lO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgYWRkU3VwcG9ydGVkVmFsaWRhdG9ycyhcbiAgICBzdXBwb3J0ZWRWYWxpZGF0b3JzOiBBcnJheTxzdHJpbmc+LFxuICAgIGNsYXNzVmFsaWRhdG9yczogQXJyYXk8c3RyaW5nPlxuICApIHsgfVxuICBwdWJsaWMgYWRkQ29uZGl0aW9uT2JqZWN0c0J5Q29udGV4dChvYmplY3RzOiBBcnJheTxJQ29uZGl0aW9uT2JqZWN0PiwgY29udGV4dDogYW55KTogdm9pZCB7XG4gICAgb2JqZWN0cy5wdXNoKHtcbiAgICAgIG5hbWU6IHRoaXMuZ2V0VmFsdWVOYW1lKCksXG4gICAgICB0ZXh0OiB0aGlzLnByb2Nlc3NlZFRpdGxlLFxuICAgICAgcXVlc3Rpb246IHRoaXMsXG4gICAgfSk7XG4gIH1cbiAgcHVibGljIGdldENvbmRpdGlvbkpzb24ob3BlcmF0b3I6IHN0cmluZyA9IG51bGwsIHBhdGg6IHN0cmluZyA9IG51bGwpOiBhbnkge1xuICAgIHZhciBqc29uID0gbmV3IEpzb25PYmplY3QoKS50b0pzb25PYmplY3QodGhpcyk7XG4gICAganNvbltcInR5cGVcIl0gPSB0aGlzLmdldFR5cGUoKTtcbiAgICByZXR1cm4ganNvbjtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGEgdmFsaWRhdGlvbiBlcnJvcihzKSBpbiB0aGUgcXVlc3Rpb24uXG4gICAqIEBwYXJhbSBmaXJlQ2FsbGJhY2sgc2V0IGl0IHRvIHRydWUgdG8gc2hvdyBhbiBlcnJvciBpbiBVSS5cbiAgICovXG4gIHB1YmxpYyBoYXNFcnJvcnMoZmlyZUNhbGxiYWNrOiBib29sZWFuID0gdHJ1ZSwgcmVjOiBhbnkgPSBudWxsKTogYm9vbGVhbiB7XG4gICAgdmFyIG9sZEhhc0Vycm9ycyA9IHRoaXMuZXJyb3JzLmxlbmd0aCA+IDA7XG4gICAgdmFyIGVycm9ycyA9IHRoaXMuY2hlY2tGb3JFcnJvcnMoISFyZWMgJiYgcmVjLmlzT25WYWx1ZUNoYW5nZWQgPT09IHRydWUpO1xuICAgIGlmIChmaXJlQ2FsbGJhY2spIHtcbiAgICAgIGlmICghIXRoaXMuc3VydmV5KSB7XG4gICAgICAgIHRoaXMuc3VydmV5LmJlZm9yZVNldHRpbmdRdWVzdGlvbkVycm9ycyh0aGlzLCBlcnJvcnMpO1xuICAgICAgfVxuICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlQ29udGFpbnNFcnJvcnMoKTtcbiAgICBpZiAob2xkSGFzRXJyb3JzICE9IGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9uQ3NzKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzQ29sbGFwc2VkICYmIHJlYyAmJiBmaXJlQ2FsbGJhY2sgJiYgZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZXhwYW5kKCk7XG4gICAgfVxuICAgIHJldHVybiBlcnJvcnMubGVuZ3RoID4gMDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdmFsaWRhdGlvbiBlcnJvcnMgY291bnQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGN1cnJlbnRFcnJvckNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3JzLmxlbmd0aDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY2hhci9zdHJpbmcgZm9yIGEgcmVxdWlyZWQgcXVlc3Rpb24uXG4gICAqIEBzZWUgU3VydmV5TW9kZWwucmVxdWlyZWRUZXh0XG4gICAqL1xuICBwdWJsaWMgZ2V0IHJlcXVpcmVkVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1cnZleSAhPSBudWxsICYmIHRoaXMuaXNSZXF1aXJlZFxuICAgICAgPyB0aGlzLnN1cnZleS5yZXF1aXJlZFRleHRcbiAgICAgIDogXCJcIjtcbiAgfVxuICAvKipcbiAgICogQWRkIGVycm9yIGludG8gdGhlIHF1ZXN0aW9uIGVycm9yIGxpc3QuXG4gICAqIEBwYXJhbSBlcnJvclxuICAgKi9cbiAgcHVibGljIGFkZEVycm9yKGVycm9yOiBTdXJ2ZXlFcnJvciB8IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghZXJyb3IpIHJldHVybjtcbiAgICBsZXQgbmV3RXJyb3I6IFN1cnZleUVycm9yID0gbnVsbDtcbiAgICBpZiAodHlwZW9mIGVycm9yID09PSBcInN0cmluZ1wiIHx8IGVycm9yIGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICBuZXdFcnJvciA9IG5ldyBDdXN0b21FcnJvcig8c3RyaW5nPmVycm9yLCB0aGlzLnN1cnZleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0Vycm9yID0gPFN1cnZleUVycm9yPmVycm9yO1xuICAgIH1cbiAgICB0aGlzLmVycm9ycy5wdXNoKG5ld0Vycm9yKTtcbiAgfVxuICAvKipcbiAgICogUmVtb3ZlIGEgcGFydGljdWxhciBlcnJvciBmcm9tIHRoZSBxdWVzdGlvbiBlcnJvciBsaXN0LlxuICAgKiBAcGFyYW0gZXJyb3JcbiAgICovXG4gIHB1YmxpYyByZW1vdmVFcnJvcihlcnJvcjogU3VydmV5RXJyb3IpOiB2b2lkIHtcbiAgICB2YXIgZXJyb3JzID0gdGhpcy5lcnJvcnM7XG4gICAgdmFyIGluZGV4ID0gZXJyb3JzLmluZGV4T2YoZXJyb3IpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIGVycm9ycy5zcGxpY2UoaW5kZXgsIDEpO1xuICB9XG4gIHByaXZhdGUgY2hlY2tGb3JFcnJvcnMoaXNPblZhbHVlQ2hhbmdlZDogYm9vbGVhbik6IEFycmF5PFN1cnZleUVycm9yPiB7XG4gICAgdmFyIHFFcnJvcnMgPSBuZXcgQXJyYXk8U3VydmV5RXJyb3I+KCk7XG4gICAgaWYgKHRoaXMuaXNWaXNpYmxlICYmIHRoaXMuY2FuQ29sbGVjdEVycm9ycygpKSB7XG4gICAgICB0aGlzLmNvbGxlY3RFcnJvcnMocUVycm9ycywgaXNPblZhbHVlQ2hhbmdlZCk7XG4gICAgfVxuICAgIHJldHVybiBxRXJyb3JzO1xuICB9XG4gIHByb3RlY3RlZCBjYW5Db2xsZWN0RXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5pc1JlYWRPbmx5O1xuICB9XG4gIHByaXZhdGUgY29sbGVjdEVycm9ycyhcbiAgICBxRXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj4sXG4gICAgaXNPblZhbHVlQ2hhbmdlZDogYm9vbGVhblxuICApIHtcbiAgICB0aGlzLm9uQ2hlY2tGb3JFcnJvcnMocUVycm9ycywgaXNPblZhbHVlQ2hhbmdlZCk7XG4gICAgaWYgKHFFcnJvcnMubGVuZ3RoID4gMCB8fCAhdGhpcy5jYW5SdW5WYWxpZGF0b3JzKGlzT25WYWx1ZUNoYW5nZWQpKSByZXR1cm47XG4gICAgdmFyIGVycm9ycyA9IHRoaXMucnVuVmFsaWRhdG9ycygpO1xuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgLy92YWxpZGF0b3JzIG1heSBjaGFuZ2UgdGhlIHF1ZXN0aW9uIHZhbHVlLlxuICAgICAgcUVycm9ycy5sZW5ndGggPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlcnJvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcUVycm9ycy5wdXNoKGVycm9yc1tpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnN1cnZleSAmJiBxRXJyb3JzLmxlbmd0aCA9PSAwKSB7XG4gICAgICB2YXIgZXJyb3IgPSB0aGlzLmZpcmVTdXJ2ZXlWYWxpZGF0aW9uKCk7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgcUVycm9ycy5wdXNoKGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNhblJ1blZhbGlkYXRvcnMoaXNPblZhbHVlQ2hhbmdlZDogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByaXZhdGUgZmlyZVN1cnZleVZhbGlkYXRpb24oKTogU3VydmV5RXJyb3Ige1xuICAgIGlmICh0aGlzLnZhbGlkYXRlVmFsdWVDYWxsYmFjaykgcmV0dXJuIHRoaXMudmFsaWRhdGVWYWx1ZUNhbGxiYWNrKCk7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkudmFsaWRhdGVRdWVzdGlvbih0aGlzKSA6IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIG9uQ2hlY2tGb3JFcnJvcnMoZXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj4sIGlzT25WYWx1ZUNoYW5nZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoIWlzT25WYWx1ZUNoYW5nZWQgJiYgdGhpcy5oYXNSZXF1aXJlZEVycm9yKCkpIHtcbiAgICAgIGVycm9ycy5wdXNoKG5ldyBBbnN3ZXJSZXF1aXJlZEVycm9yKHRoaXMucmVxdWlyZWRFcnJvclRleHQsIHRoaXMpKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGhhc1JlcXVpcmVkRXJyb3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNSZXF1aXJlZCAmJiB0aGlzLmlzRW1wdHkoKTtcbiAgfVxuICBwcml2YXRlIHZhbGlkYXRvclJ1bm5lcjogVmFsaWRhdG9yUnVubmVyO1xuICBwcml2YXRlIGlzUnVubmluZ1ZhbGlkYXRvcnNWYWx1ZSA9IGZhbHNlO1xuICBwdWJsaWMgb25Db21wbGV0ZWRBc3luY1ZhbGlkYXRvcnM6IChoYXNFcnJvcnM6IGJvb2xlYW4pID0+IHZvaWQ7XG4gIHB1YmxpYyBnZXQgaXNSdW5uaW5nVmFsaWRhdG9ycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJc1J1bm5pbmdWYWxpZGF0b3JzKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldElzUnVubmluZ1ZhbGlkYXRvcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNSdW5uaW5nVmFsaWRhdG9yc1ZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBydW5WYWxpZGF0b3JzKCk6IEFycmF5PFN1cnZleUVycm9yPiB7XG4gICAgaWYgKCEhdGhpcy52YWxpZGF0b3JSdW5uZXIpIHtcbiAgICAgIHRoaXMudmFsaWRhdG9yUnVubmVyLm9uQXN5bmNDb21wbGV0ZWQgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnZhbGlkYXRvclJ1bm5lciA9IG5ldyBWYWxpZGF0b3JSdW5uZXIoKTtcbiAgICB0aGlzLmlzUnVubmluZ1ZhbGlkYXRvcnNWYWx1ZSA9IHRydWU7XG4gICAgdGhpcy52YWxpZGF0b3JSdW5uZXIub25Bc3luY0NvbXBsZXRlZCA9IChlcnJvcnM6IEFycmF5PFN1cnZleUVycm9yPikgPT4ge1xuICAgICAgdGhpcy5kb09uQXN5bmNDb21wbGV0ZWQoZXJyb3JzKTtcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLnZhbGlkYXRvclJ1bm5lci5ydW4odGhpcyk7XG4gIH1cbiAgcHJpdmF0ZSBkb09uQXN5bmNDb21wbGV0ZWQoZXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj4pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5lcnJvcnMucHVzaChlcnJvcnNbaV0pO1xuICAgIH1cbiAgICB0aGlzLmlzUnVubmluZ1ZhbGlkYXRvcnNWYWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMucmFpc2VPbkNvbXBsZXRlZEFzeW5jVmFsaWRhdG9ycygpO1xuICB9XG4gIHByb3RlY3RlZCByYWlzZU9uQ29tcGxldGVkQXN5bmNWYWxpZGF0b3JzKCk6IHZvaWQge1xuICAgIGlmICghIXRoaXMub25Db21wbGV0ZWRBc3luY1ZhbGlkYXRvcnMgJiYgIXRoaXMuaXNSdW5uaW5nVmFsaWRhdG9ycykge1xuICAgICAgdGhpcy5vbkNvbXBsZXRlZEFzeW5jVmFsaWRhdG9ycyh0aGlzLmdldEFsbEVycm9ycygpLmxlbmd0aCA+IDApO1xuICAgICAgdGhpcy5vbkNvbXBsZXRlZEFzeW5jVmFsaWRhdG9ycyA9IG51bGw7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgaXNWYWx1ZUNoYW5nZWRJblN1cnZleSA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQgPSB0cnVlO1xuICBwcm90ZWN0ZWQgc2V0TmV3VmFsdWUobmV3VmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHZhciBvbGRBbnN3ZXJlZCA9IHRoaXMuaXNBbnN3ZXJlZDtcbiAgICB0aGlzLnNldE5ld1ZhbHVlSW5EYXRhKG5ld1ZhbHVlKTtcbiAgICB0aGlzLmFsbG93Tm90aWZ5VmFsdWVDaGFuZ2VkICYmIHRoaXMub25WYWx1ZUNoYW5nZWQoKTtcbiAgICBpZiAodGhpcy5pc0Fuc3dlcmVkICE9IG9sZEFuc3dlcmVkKSB7XG4gICAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9uQ3NzKCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBpc1RleHRWYWx1ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldCBpc1N1cnZleUlucHV0VGV4dFVwZGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5LmlzVXBkYXRlVmFsdWVUZXh0T25UeXBpbmcgOiBmYWxzZTtcbiAgfVxuICBwcml2YXRlIGdldERhdGFMb2NOb3RpZmljYXRpb24oKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5pc0lucHV0VGV4dFVwZGF0ZSA/IFwidGV4dFwiIDogZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldCBpc0lucHV0VGV4dFVwZGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1N1cnZleUlucHV0VGV4dFVwZGF0ZSAmJiB0aGlzLmlzVGV4dFZhbHVlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHNldE5ld1ZhbHVlSW5EYXRhKG5ld1ZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBuZXdWYWx1ZSA9IHRoaXMudmFsdWVUb0RhdGEobmV3VmFsdWUpO1xuICAgIGlmICghdGhpcy5pc1ZhbHVlQ2hhbmdlZEluU3VydmV5KSB7XG4gICAgICB0aGlzLnNldFZhbHVlQ29yZShuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRWYWx1ZUNvcmUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvblZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBzZXRWYWx1ZUNvcmUobmV3VmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZSk7XG4gICAgaWYgKHRoaXMuZGF0YSAhPSBudWxsICYmIHRoaXMuY2FuU2V0VmFsdWVUb1N1cnZleSgpKSB7XG4gICAgICBuZXdWYWx1ZSA9IHRoaXMudmFsdWVGb3JTdXJ2ZXk7XG4gICAgICB0aGlzLmRhdGEuc2V0VmFsdWUoXG4gICAgICAgIHRoaXMuZ2V0VmFsdWVOYW1lKCksXG4gICAgICAgIG5ld1ZhbHVlLFxuICAgICAgICB0aGlzLmdldERhdGFMb2NOb3RpZmljYXRpb24oKSxcbiAgICAgICAgdGhpcy5hbGxvd05vdGlmeVZhbHVlQ2hhbmdlZFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNhblNldFZhbHVlVG9TdXJ2ZXkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJvdGVjdGVkIHZhbHVlRnJvbURhdGEodmFsOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgcHJvdGVjdGVkIHZhbHVlVG9EYXRhKHZhbDogYW55KTogYW55IHtcbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIHByb3RlY3RlZCBvblZhbHVlQ2hhbmdlZCgpOiB2b2lkIHsgfVxuICBwcm90ZWN0ZWQgc2V0TmV3Q29tbWVudChuZXdWYWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5xdWVzdGlvbkNvbW1lbnQgPSBuZXdWYWx1ZTtcbiAgICBpZiAodGhpcy5kYXRhICE9IG51bGwpIHtcbiAgICAgIHRoaXMuZGF0YS5zZXRDb21tZW50KFxuICAgICAgICB0aGlzLmdldFZhbHVlTmFtZSgpLFxuICAgICAgICBuZXdWYWx1ZSxcbiAgICAgICAgdGhpcy5pc1N1cnZleUlucHV0VGV4dFVwZGF0ZSA/IFwidGV4dFwiIDogZmFsc2VcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRWYWxpZE5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIW5hbWUpIHJldHVybiBuYW1lO1xuICAgIHJldHVybiBuYW1lLnRyaW0oKS5yZXBsYWNlKC9bXFx7XFx9XSsvZywgXCJcIik7XG4gIH1cbiAgLy9JUXVlc3Rpb25cbiAgdXBkYXRlVmFsdWVGcm9tU3VydmV5KG5ld1ZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBuZXdWYWx1ZSA9IHRoaXMuZ2V0VW5iaW5kVmFsdWUobmV3VmFsdWUpO1xuICAgIGlmICghIXRoaXMudmFsdWVGcm9tRGF0YUNhbGxiYWNrKSB7XG4gICAgICBuZXdWYWx1ZSA9IHRoaXMudmFsdWVGcm9tRGF0YUNhbGxiYWNrKG5ld1ZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5zZXRRdWVzdGlvblZhbHVlKHRoaXMudmFsdWVGcm9tRGF0YShuZXdWYWx1ZSkpO1xuICB9XG4gIHVwZGF0ZUNvbW1lbnRGcm9tU3VydmV5KG5ld1ZhbHVlOiBhbnkpOiBhbnkge1xuICAgIHRoaXMucXVlc3Rpb25Db21tZW50ID0gbmV3VmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIHNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWU6IGFueSwgdXBkYXRlSXNBbnN3ZXJlZDogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICBjb25zdCBpc0VxdWFsID0gdGhpcy5pc1R3b1ZhbHVlRXF1YWxzKHRoaXMucXVlc3Rpb25WYWx1ZSwgbmV3VmFsdWUpO1xuICAgIHRoaXMucXVlc3Rpb25WYWx1ZSA9IG5ld1ZhbHVlO1xuICAgICFpc0VxdWFsICYmIHRoaXMuYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQgJiZcbiAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMudmFsdWVDaGFuZ2VkQ2FsbGJhY2spO1xuICAgIGlmICh1cGRhdGVJc0Fuc3dlcmVkKSB0aGlzLnVwZGF0ZUlzQW5zd2VyZWQoKTtcbiAgfVxuICBvblN1cnZleVZhbHVlQ2hhbmdlZChuZXdWYWx1ZTogYW55KTogdm9pZCB7IH1cbiAgcHVibGljIHNldFZpc2libGVJbmRleCh2YWw6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuaXNWaXNpYmxlIHx8XG4gICAgICAoIXRoaXMuaGFzVGl0bGUgJiYgIXNldHRpbmdzLnNldFF1ZXN0aW9uVmlzaWJsZUluZGV4Rm9ySGlkZGVuVGl0bGUpIHx8XG4gICAgICAodGhpcy5oaWRlTnVtYmVyICYmICFzZXR0aW5ncy5zZXRRdWVzdGlvblZpc2libGVJbmRleEZvckhpZGRlbk51bWJlcilcbiAgICApIHtcbiAgICAgIHZhbCA9IC0xO1xuICAgIH1cbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmxlSW5kZXhcIiwgdmFsKTtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJub1wiLCB0aGlzLmNhbGNObygpKTtcbiAgICByZXR1cm4gdmFsIDwgMCA/IDAgOiAxO1xuICB9XG4gIHB1YmxpYyByZW1vdmVFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBzdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIHN1cHBvcnRHb05leHRQYWdlRXJyb3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIENhbGwgdGhpcyBmdW5jdGlvbiB0byByZW1vdmUgdmFsdWVzIGZyb20gdGhlIGN1cnJlbnQgcXVlc3Rpb24sIHRoYXQgZW5kLXVzZXIgd2lsbCBub3QgYmUgYWJsZSB0byBlbnRlci5cbiAgICogRm9yIGV4YW1wbGUgdGhlIHZhbHVlIHRoYXQgZG9lc24ndCBleGlzdHMgaW4gYSByYWRpZ3JvdXAvZHJvcGRvd24vY2hlY2tib3ggY2hvaWNlcyBvciBtYXRyaXggcm93cy9jb2x1bW5zLlxuICAgKi9cbiAgcHVibGljIGNsZWFySW5jb3JyZWN0VmFsdWVzKCk6IHZvaWQgeyB9XG4gIHB1YmxpYyBjbGVhck9uRGVsZXRpbmdDb250YWluZXIoKTogdm9pZCB7IH1cbiAgLyoqXG4gICAqIENhbGwgdGhpcyBmdW5jdGlvbiB0byBjbGVhciBhbGwgZXJyb3JzIGluIHRoZSBxdWVzdGlvblxuICAgKi9cbiAgcHVibGljIGNsZWFyRXJyb3JzKCk6IHZvaWQge1xuICAgIHRoaXMuZXJyb3JzID0gW107XG4gIH1cbiAgcHVibGljIGNsZWFyVW51c2VkVmFsdWVzKCk6IHZvaWQgeyB9XG4gIG9uQW55VmFsdWVDaGFuZ2VkKG5hbWU6IHN0cmluZyk6IHZvaWQgeyB9XG4gIGNoZWNrQmluZGluZ3ModmFsdWVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5iaW5kaW5ncy5pc0VtcHR5KCkgfHwgIXRoaXMuZGF0YSkgcmV0dXJuO1xuICAgIHZhciBwcm9wcyA9IHRoaXMuYmluZGluZ3MuZ2V0UHJvcGVydGllc0J5VmFsdWVOYW1lKHZhbHVlTmFtZSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpc1twcm9wc1tpXV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldENvbXBvbmVudE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gUmVuZGVyZXJGYWN0b3J5Lkluc3RhbmNlLmdldFJlbmRlcmVyQnlRdWVzdGlvbih0aGlzKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0RlZmF1bHRSZW5kZXJpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICEhdGhpcy5jdXN0b21XaWRnZXQgfHxcbiAgICAgIHRoaXMucmVuZGVyQXMgPT09IFwiZGVmYXVsdFwiIHx8XG4gICAgICB0aGlzLmdldENvbXBvbmVudE5hbWUoKSA9PT0gXCJkZWZhdWx0XCJcbiAgICApO1xuICB9XG5cbiAgQHByb3BlcnR5KHsgZGVmYXVsdFZhbHVlOiBcImRlZmF1bHRcIiB9KVxuICByZW5kZXJBczogc3RyaW5nO1xuXG4gIC8vSVN1cnZleUVycm9yT3duZXJcbiAgZ2V0RXJyb3JDdXN0b21UZXh0KHRleHQ6IHN0cmluZywgZXJyb3I6IFN1cnZleUVycm9yKTogc3RyaW5nIHtcbiAgICBpZiAoISF0aGlzLnN1cnZleSkgcmV0dXJuIHRoaXMuc3VydmV5LmdldEVycm9yQ3VzdG9tVGV4dCh0ZXh0LCBlcnJvcik7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cbiAgLy9JVmFsaWRhdG9yT3duZXJcbiAgZ2V0VmFsaWRhdG9yVGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBnZXQgdmFsaWRhdGVkVmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfVxuICBzZXQgdmFsaWRhdGVkVmFsdWUodmFsOiBhbnkpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsO1xuICB9XG4gIGdldEFsbFZhbHVlcygpOiBhbnkge1xuICAgIHJldHVybiAhIXRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRBbGxWYWx1ZXMoKSA6IG51bGw7XG4gIH1cbiAgcHVibGljIG5lZWRSZXNwb25zaXZlV2lkdGgoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5TZXJpYWxpemVyLmFkZENsYXNzKFwicXVlc3Rpb25cIiwgW1xuICBcIiFuYW1lXCIsXG4gIHtcbiAgICBuYW1lOiBcInN0YXRlXCIsXG4gICAgZGVmYXVsdDogXCJkZWZhdWx0XCIsXG4gICAgY2hvaWNlczogW1wiZGVmYXVsdFwiLCBcImNvbGxhcHNlZFwiLCBcImV4cGFuZGVkXCJdLFxuICB9LFxuICB7IG5hbWU6IFwidmlzaWJsZTpzd2l0Y2hcIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICB7IG5hbWU6IFwidXNlRGlzcGxheVZhbHVlc0luVGl0bGU6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlLCBsYXlvdXQ6IFwicm93XCIgfSxcbiAgXCJ2aXNpYmxlSWY6Y29uZGl0aW9uXCIsXG4gIHsgbmFtZTogXCJ3aWR0aFwiIH0sXG4gIHsgbmFtZTogXCJtaW5XaWR0aFwiLCBkZWZhdWx0OiBzZXR0aW5ncy5taW5XaWR0aCB9LFxuICB7IG5hbWU6IFwibWF4V2lkdGhcIiwgZGVmYXVsdDogc2V0dGluZ3MubWF4V2lkdGggfSxcbiAgeyBuYW1lOiBcInN0YXJ0V2l0aE5ld0xpbmU6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlLCBsYXlvdXQ6IFwicm93XCIgfSxcbiAgeyBuYW1lOiBcImluZGVudDpudW1iZXJcIiwgZGVmYXVsdDogMCwgY2hvaWNlczogWzAsIDEsIDIsIDNdLCBsYXlvdXQ6IFwicm93XCIgfSxcbiAge1xuICAgIG5hbWU6IFwicGFnZVwiLFxuICAgIGlzU2VyaWFsaXphYmxlOiBmYWxzZSxcbiAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uIChvYmo6IGFueSkge1xuICAgICAgdmFyIHN1cnZleSA9IG9iaiA/IG9iai5zdXJ2ZXkgOiBudWxsO1xuICAgICAgcmV0dXJuICFzdXJ2ZXkgfHwgc3VydmV5LnBhZ2VzLmxlbmd0aCA+IDE7XG4gICAgfSxcbiAgICBjaG9pY2VzOiBmdW5jdGlvbiAob2JqOiBhbnkpIHtcbiAgICAgIHZhciBzdXJ2ZXkgPSBvYmogPyBvYmouc3VydmV5IDogbnVsbDtcbiAgICAgIHJldHVybiBzdXJ2ZXlcbiAgICAgICAgPyBzdXJ2ZXkucGFnZXMubWFwKChwOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogcC5uYW1lLCB0ZXh0OiBwLnRpdGxlIH07XG4gICAgICAgIH0pXG4gICAgICAgIDogW107XG4gICAgfSxcbiAgfSxcbiAgeyBuYW1lOiBcInRpdGxlOnRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RpdGxlXCIsIGxheW91dDogXCJyb3dcIiB9LFxuICB7XG4gICAgbmFtZTogXCJ0aXRsZUxvY2F0aW9uXCIsXG4gICAgZGVmYXVsdDogXCJkZWZhdWx0XCIsXG4gICAgY2hvaWNlczogW1wiZGVmYXVsdFwiLCBcInRvcFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIiwgXCJoaWRkZW5cIl0sXG4gICAgbGF5b3V0OiBcInJvd1wiLFxuICB9LFxuICB7XG4gICAgbmFtZTogXCJkZXNjcmlwdGlvbjp0ZXh0XCIsXG4gICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0Rlc2NyaXB0aW9uXCIsXG4gICAgbGF5b3V0OiBcInJvd1wiLFxuICB9LFxuICB7XG4gICAgbmFtZTogXCJkZXNjcmlwdGlvbkxvY2F0aW9uXCIsXG4gICAgZGVmYXVsdDogXCJkZWZhdWx0XCIsXG4gICAgY2hvaWNlczogW1wiZGVmYXVsdFwiLCBcInVuZGVySW5wdXRcIiwgXCJ1bmRlclRpdGxlXCJdLFxuICB9LFxuICB7XG4gICAgbmFtZTogXCJoaWRlTnVtYmVyOmJvb2xlYW5cIixcbiAgICBkZXBlbmRzT246IFwidGl0bGVMb2NhdGlvblwiLFxuICAgIHZpc2libGVJZjogZnVuY3Rpb24gKG9iajogYW55KSB7XG4gICAgICBpZiAoIW9iaikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICgoPFF1ZXN0aW9uPm9iaikudGl0bGVMb2NhdGlvbiA9PT0gXCJoaWRkZW5cIikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgcGFyZW50OiBQYW5lbE1vZGVsID0gb2JqID8gb2JqLnBhcmVudCA6IG51bGw7XG4gICAgICB2YXIgbnVtYmVyaW5nQWxsb3dlZEJ5UGFyZW50ID1cbiAgICAgICAgIXBhcmVudCB8fCBwYXJlbnQuc2hvd1F1ZXN0aW9uTnVtYmVycyAhPT0gXCJvZmZcIjtcbiAgICAgIGlmICghbnVtYmVyaW5nQWxsb3dlZEJ5UGFyZW50KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHZhciBzdXJ2ZXk6IFN1cnZleU1vZGVsID0gb2JqID8gb2JqLnN1cnZleSA6IG51bGw7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAhc3VydmV5IHx8XG4gICAgICAgIHN1cnZleS5zaG93UXVlc3Rpb25OdW1iZXJzICE9PSBcIm9mZlwiIHx8XG4gICAgICAgICghIXBhcmVudCAmJiBwYXJlbnQuc2hvd1F1ZXN0aW9uTnVtYmVycyA9PT0gXCJvbnBhbmVsXCIpXG4gICAgICApO1xuICAgIH0sXG4gIH0sXG4gIFwidmFsdWVOYW1lXCIsXG4gIFwiZW5hYmxlSWY6Y29uZGl0aW9uXCIsXG4gIFwiZGVmYXVsdFZhbHVlOnZhbHVlXCIsXG4gIHtcbiAgICBuYW1lOiBcImRlZmF1bHRWYWx1ZUV4cHJlc3Npb246ZXhwcmVzc2lvblwiLFxuICAgIGNhdGVnb3J5OiBcImxvZ2ljXCIsXG4gIH0sXG4gIFwiY29ycmVjdEFuc3dlcjp2YWx1ZVwiLFxuICBcImlzUmVxdWlyZWQ6c3dpdGNoXCIsXG4gIFwicmVxdWlyZWRJZjpjb25kaXRpb25cIixcbiAge1xuICAgIG5hbWU6IFwicmVxdWlyZWRFcnJvclRleHQ6dGV4dFwiLFxuICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NSZXF1aXJlZEVycm9yVGV4dFwiLFxuICB9LFxuICBcInJlYWRPbmx5OnN3aXRjaFwiLFxuICB7XG4gICAgbmFtZTogXCJ2YWxpZGF0b3JzOnZhbGlkYXRvcnNcIixcbiAgICBiYXNlQ2xhc3NOYW1lOiBcInN1cnZleXZhbGlkYXRvclwiLFxuICAgIGNsYXNzTmFtZVBhcnQ6IFwidmFsaWRhdG9yXCIsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcImJpbmRpbmdzOmJpbmRpbmdzXCIsXG4gICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImJpbmRpbmdzXCIsXG4gICAgdmlzaWJsZUlmOiBmdW5jdGlvbiAob2JqOiBhbnkpIHtcbiAgICAgIHJldHVybiBvYmouYmluZGluZ3MuZ2V0TmFtZXMoKS5sZW5ndGggPiAwO1xuICAgIH0sXG4gIH0sXG4gIHsgbmFtZTogXCJyZW5kZXJBc1wiLCBkZWZhdWx0OiBcImRlZmF1bHRcIiwgdmlzaWJsZTogZmFsc2UgfSxcbl0pO1xuU2VyaWFsaXplci5hZGRBbHRlck5hdGl2ZUNsYXNzTmFtZShcInF1ZXN0aW9uXCIsIFwicXVlc3Rpb25iYXNlXCIpO1xuIiwiaW1wb3J0IHsgQmFzZSwgRXZlbnQgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBJUXVlc3Rpb24gfSBmcm9tIFwiLi9iYXNlLWludGVyZmFjZXNcIjtcblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0IHtcbiAgcHVibGljIGh0bWxUZW1wbGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgaXNGaXJzdFJlbmRlcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZywgcHVibGljIHdpZGdldEpzb246IGFueSkge1xuICAgIHRoaXMuaHRtbFRlbXBsYXRlID0gd2lkZ2V0SnNvbi5odG1sVGVtcGxhdGUgPyB3aWRnZXRKc29uLmh0bWxUZW1wbGF0ZSA6IFwiXCI7XG4gIH1cbiAgcHVibGljIGFmdGVyUmVuZGVyKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIGVsOiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc0ZpcnN0UmVuZGVyKSB7XG4gICAgICB0aGlzLmlzRmlyc3RSZW5kZXIgPSBmYWxzZTtcbiAgICAgIHF1ZXN0aW9uLnN1cnZleS5vbkxvY2FsZUNoYW5nZWRFdmVudC5hZGQoKCkgPT4ge1xuICAgICAgICB0aGlzLndpZGdldEpzb24ud2lsbFVubW91bnQocXVlc3Rpb24sIGVsKTtcbiAgICAgICAgdGhpcy53aWRnZXRKc29uLmFmdGVyUmVuZGVyKHF1ZXN0aW9uLCBlbCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy53aWRnZXRKc29uLmFmdGVyUmVuZGVyKSB0aGlzLndpZGdldEpzb24uYWZ0ZXJSZW5kZXIocXVlc3Rpb24sIGVsKTtcbiAgfVxuICBwdWJsaWMgd2lsbFVubW91bnQocXVlc3Rpb246IElRdWVzdGlvbiwgZWw6IGFueSkge1xuICAgIGlmICh0aGlzLndpZGdldEpzb24ud2lsbFVubW91bnQpIHRoaXMud2lkZ2V0SnNvbi53aWxsVW5tb3VudChxdWVzdGlvbiwgZWwpO1xuICB9XG4gIHB1YmxpYyBnZXREaXNwbGF5VmFsdWUocXVlc3Rpb246IElRdWVzdGlvbiwgdmFsdWU6IGFueSA9IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMud2lkZ2V0SnNvbi5nZXREaXNwbGF5VmFsdWUpXG4gICAgICByZXR1cm4gdGhpcy53aWRnZXRKc29uLmdldERpc3BsYXlWYWx1ZShxdWVzdGlvbiwgdmFsdWUpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyBpc0ZpdChxdWVzdGlvbjogSVF1ZXN0aW9uKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNMaWJyYXJ5TG9hZGVkKCkgJiYgdGhpcy53aWRnZXRKc29uLmlzRml0KVxuICAgICAgcmV0dXJuIHRoaXMud2lkZ2V0SnNvbi5pc0ZpdChxdWVzdGlvbik7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXQgY2FuU2hvd0luVG9vbGJveCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy53aWRnZXRKc29uLnNob3dJblRvb2xib3ggPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKFxuICAgICAgQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvbi5JbnN0YW5jZS5nZXRBY3RpdmF0ZWRCeSh0aGlzLm5hbWUpICE9IFwiY3VzdG9tdHlwZVwiXG4gICAgKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAhdGhpcy53aWRnZXRKc29uLndpZGdldElzTG9hZGVkIHx8IHRoaXMud2lkZ2V0SnNvbi53aWRnZXRJc0xvYWRlZCgpO1xuICB9XG4gIHB1YmxpYyBnZXQgc2hvd0luVG9vbGJveCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy53aWRnZXRKc29uLnNob3dJblRvb2xib3ggIT09IGZhbHNlO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd0luVG9vbGJveCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLndpZGdldEpzb24uc2hvd0luVG9vbGJveCA9IHZhbDtcbiAgfVxuICBwdWJsaWMgaW5pdCgpIHtcbiAgICBpZiAodGhpcy53aWRnZXRKc29uLmluaXQpIHtcbiAgICAgIHRoaXMud2lkZ2V0SnNvbi5pbml0KCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBhY3RpdmF0ZWRCeUNoYW5nZWQoYWN0aXZhdGVkQnk6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmlzTGlicmFyeUxvYWRlZCgpICYmIHRoaXMud2lkZ2V0SnNvbi5hY3RpdmF0ZWRCeUNoYW5nZWQpIHtcbiAgICAgIHRoaXMud2lkZ2V0SnNvbi5hY3RpdmF0ZWRCeUNoYW5nZWQoYWN0aXZhdGVkQnkpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGlzTGlicmFyeUxvYWRlZCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy53aWRnZXRKc29uLndpZGdldElzTG9hZGVkKVxuICAgICAgcmV0dXJuIHRoaXMud2lkZ2V0SnNvbi53aWRnZXRJc0xvYWRlZCgpID09IHRydWU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIGdldCBpc0RlZmF1bHRSZW5kZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMud2lkZ2V0SnNvbi5pc0RlZmF1bHRSZW5kZXI7XG4gIH1cbiAgcHVibGljIGdldCBwZGZRdWVzdGlvblR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy53aWRnZXRKc29uLnBkZlF1ZXN0aW9uVHlwZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHBkZlJlbmRlcigpIHtcbiAgICByZXR1cm4gdGhpcy53aWRnZXRKc29uLnBkZlJlbmRlcjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvbiB7XG4gIHB1YmxpYyBzdGF0aWMgSW5zdGFuY2U6IEN1c3RvbVdpZGdldENvbGxlY3Rpb24gPSBuZXcgQ3VzdG9tV2lkZ2V0Q29sbGVjdGlvbigpO1xuICBwcml2YXRlIHdpZGdldHNWYWx1ZXM6IEFycmF5PFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0PiA9IFtdO1xuICBwcml2YXRlIHdpZGdldHNBY3RpdmF0ZWRCeSA9IHt9O1xuXG4gIHB1YmxpYyBvbkN1c3RvbVdpZGdldEFkZGVkOiBFdmVudDxcbiAgICAoY3VzdG9tV2lkZ2V0OiBRdWVzdGlvbkN1c3RvbVdpZGdldCkgPT4gYW55LFxuICAgIGFueVxuICA+ID0gbmV3IEV2ZW50PChjdXN0b21XaWRnZXQ6IFF1ZXN0aW9uQ3VzdG9tV2lkZ2V0KSA9PiBhbnksIGFueT4oKTtcblxuICBwdWJsaWMgZ2V0IHdpZGdldHMoKTogQXJyYXk8UXVlc3Rpb25DdXN0b21XaWRnZXQ+IHtcbiAgICByZXR1cm4gdGhpcy53aWRnZXRzVmFsdWVzO1xuICB9XG4gIHB1YmxpYyBhZGQod2lkZ2V0SnNvbjogYW55LCBhY3RpdmF0ZWRCeTogc3RyaW5nID0gXCJwcm9wZXJ0eVwiKSB7XG4gICAgdGhpcy5hZGRDdXN0b21XaWRnZXQod2lkZ2V0SnNvbiwgYWN0aXZhdGVkQnkpO1xuICB9XG4gIHB1YmxpYyBhZGRDdXN0b21XaWRnZXQoXG4gICAgd2lkZ2V0SnNvbjogYW55LFxuICAgIGFjdGl2YXRlZEJ5OiBzdHJpbmcgPSBcInByb3BlcnR5XCJcbiAgKTogUXVlc3Rpb25DdXN0b21XaWRnZXQge1xuICAgIHZhciBuYW1lID0gd2lkZ2V0SnNvbi5uYW1lO1xuICAgIGlmICghbmFtZSkge1xuICAgICAgbmFtZSA9IFwid2lkZ2V0X1wiICsgdGhpcy53aWRnZXRzLmxlbmd0aCArIDE7XG4gICAgfVxuICAgIHZhciBjdXN0b21XaWRnZXQgPSBuZXcgUXVlc3Rpb25DdXN0b21XaWRnZXQobmFtZSwgd2lkZ2V0SnNvbik7XG4gICAgdGhpcy53aWRnZXRzVmFsdWVzLnB1c2goY3VzdG9tV2lkZ2V0KTtcbiAgICBjdXN0b21XaWRnZXQuaW5pdCgpO1xuICAgICg8YW55PnRoaXMpLndpZGdldHNBY3RpdmF0ZWRCeVtuYW1lXSA9IGFjdGl2YXRlZEJ5O1xuICAgIGN1c3RvbVdpZGdldC5hY3RpdmF0ZWRCeUNoYW5nZWQoYWN0aXZhdGVkQnkpO1xuICAgIHRoaXMub25DdXN0b21XaWRnZXRBZGRlZC5maXJlKGN1c3RvbVdpZGdldCwgbnVsbCk7XG4gICAgcmV0dXJuIGN1c3RvbVdpZGdldDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgd2F5IHRoZSBjdXN0b20gd2lnZXQgaXMgYWN0aXZhdGVkLiBJdCBjYW4gYmUgYWN0aXZhdGVkIGJ5IGEgcHJvcGVydHkgKFwicHJvcGVydHlcIiksIHF1ZXN0aW9uIHR5cGUgKFwidHlwZVwiKSBvciBieSBuZXcvY3VzdG9tIHF1ZXN0aW9uIHR5cGUgKFwiY3VzdG9tdHlwZVwiKS5cbiAgICogQHBhcmFtIHdpZGdldE5hbWUgdGhlIGN1c3RvbSB3aWRnZXQgbmFtZVxuICAgKiBAc2VlIHNldEFjdGl2YXRlZEJ5XG4gICAqL1xuICBwdWJsaWMgZ2V0QWN0aXZhdGVkQnkod2lkZ2V0TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB2YXIgcmVzID0gKDxhbnk+dGhpcykud2lkZ2V0c0FjdGl2YXRlZEJ5W3dpZGdldE5hbWVdO1xuICAgIHJldHVybiByZXMgPyByZXMgOiBcInByb3BlcnR5XCI7XG4gIH1cbiAgLyoqXG4gICAqIFNldHMgdGhlIHdheSB0aGUgY3VzdG9tIHdpZ2V0IGlzIGFjdGl2YXRlZC4gVGhlIGFjdGl2YXRpb24gdHlwZXMgYXJlOiBwcm9wZXJ0eSAoXCJwcm9wZXJ0eVwiKSwgcXVlc3Rpb24gdHlwZSAoXCJ0eXBlXCIpIG9yIG5ldy9jdXN0b20gcXVlc3Rpb24gdHlwZSAoXCJjdXN0b210eXBlXCIpLiBBIGN1c3RvbSB3aWdldCBtYXkgc3VwcG9ydCBhbGwgb3Igb25seSBzb21lIG9mIHRoaXMgYWN0aXZhdGlvbiB0eXBlcy5cbiAgICogQHBhcmFtIHdpZGdldE5hbWVcbiAgICogQHBhcmFtIGFjdGl2YXRlZEJ5IHRoZXJlIGFyZSB0aHJlZSBwb3NzaWJsZSB2YXJpYW50czogXCJwcm9wZXJ0eVwiLCBcInR5cGVcIiBhbmQgXCJjdXN0b210eXBlXCJcbiAgICovXG4gIHB1YmxpYyBzZXRBY3RpdmF0ZWRCeSh3aWRnZXROYW1lOiBzdHJpbmcsIGFjdGl2YXRlZEJ5OiBzdHJpbmcpIHtcbiAgICBpZiAoIXdpZGdldE5hbWUgfHwgIWFjdGl2YXRlZEJ5KSByZXR1cm47XG4gICAgdmFyIHdpZGdldCA9IHRoaXMuZ2V0Q3VzdG9tV2lkZ2V0QnlOYW1lKHdpZGdldE5hbWUpO1xuICAgIGlmICghd2lkZ2V0KSByZXR1cm47XG4gICAgKDxhbnk+dGhpcykud2lkZ2V0c0FjdGl2YXRlZEJ5W3dpZGdldE5hbWVdID0gYWN0aXZhdGVkQnk7XG4gICAgd2lkZ2V0LmFjdGl2YXRlZEJ5Q2hhbmdlZChhY3RpdmF0ZWRCeSk7XG4gIH1cbiAgcHVibGljIGNsZWFyKCkge1xuICAgIHRoaXMud2lkZ2V0c1ZhbHVlcyA9IFtdO1xuICB9XG4gIHB1YmxpYyBnZXRDdXN0b21XaWRnZXRCeU5hbWUobmFtZTogc3RyaW5nKTogUXVlc3Rpb25DdXN0b21XaWRnZXQge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy53aWRnZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy53aWRnZXRzW2ldLm5hbWUgPT0gbmFtZSkgcmV0dXJuIHRoaXMud2lkZ2V0c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIGdldEN1c3RvbVdpZGdldChxdWVzdGlvbjogSVF1ZXN0aW9uKTogUXVlc3Rpb25DdXN0b21XaWRnZXQge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy53aWRnZXRzVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy53aWRnZXRzVmFsdWVzW2ldLmlzRml0KHF1ZXN0aW9uKSkgcmV0dXJuIHRoaXMud2lkZ2V0c1ZhbHVlc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbiIsImltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFcnJvciB9IGZyb20gXCIuL3N1cnZleS1lcnJvclwiO1xuaW1wb3J0IHsgSVN1cnZleUltcGwsIElTdXJ2ZXkgfSBmcm9tIFwiLi9iYXNlLWludGVyZmFjZXNcIjtcbmltcG9ydCB7IFN1cnZleU1vZGVsIH0gZnJvbSBcIi4vc3VydmV5XCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUgfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcbmltcG9ydCB7IE90aGVyRW1wdHlFcnJvciB9IGZyb20gXCIuL2Vycm9yXCI7XG5pbXBvcnQgeyBDaG9pY2VzUmVzdGZ1bCB9IGZyb20gXCIuL2Nob2ljZXNSZXN0ZnVsXCI7XG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQgeyBDb25kaXRpb25SdW5uZXIgfSBmcm9tIFwiLi9jb25kaXRpb25zXCI7XG5pbXBvcnQgeyBIZWxwZXJzLCBIYXNoVGFibGUgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCIuL3NldHRpbmdzXCI7XG5pbXBvcnQgeyBDc3NDbGFzc0J1aWxkZXIgfSBmcm9tIFwiLi91dGlscy9jc3NDbGFzc0J1aWxkZXJcIjtcblxuLyoqXG4gKiBJdCBpcyBhIGJhc2UgY2xhc3MgZm9yIGNoZWNrYm94LCBkcm9wZG93biBhbmQgcmFkaW9ncm91cCBxdWVzdGlvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvblNlbGVjdEJhc2UgZXh0ZW5kcyBRdWVzdGlvbiB7XG4gIHB1YmxpYyB2aXNpYmxlQ2hvaWNlc0NoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBmaWx0ZXJlZENob2ljZXNWYWx1ZTogQXJyYXk8SXRlbVZhbHVlPjtcbiAgcHJpdmF0ZSBjb25kaXRpb25DaG9pY2VzVmlzaWJsZUlmUnVubmVyOiBDb25kaXRpb25SdW5uZXI7XG4gIHByaXZhdGUgY29uZGl0aW9uQ2hvaWNlc0VuYWJsZUlmUnVubmVyOiBDb25kaXRpb25SdW5uZXI7XG4gIHByaXZhdGUgY29tbWVudFZhbHVlOiBzdHJpbmc7XG4gIHByaXZhdGUgcHJldkNvbW1lbnRWYWx1ZTogc3RyaW5nO1xuICBwcml2YXRlIG90aGVySXRlbVZhbHVlOiBJdGVtVmFsdWUgPSBuZXcgSXRlbVZhbHVlKFwib3RoZXJcIik7XG4gIHByaXZhdGUgY2hvaWNlc0Zyb21Vcmw6IEFycmF5PEl0ZW1WYWx1ZT47XG4gIHByaXZhdGUgY2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0czogYW55O1xuICBwcml2YXRlIGlzQ2hvaWNlc0xvYWRlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBlbmFibGVPbkxvYWRpbmdDaG9pY2VzOiBib29sZWFuO1xuICBwcml2YXRlIGRlcGVuZGVkUXVlc3Rpb25zOiBBcnJheTxRdWVzdGlvblNlbGVjdEJhc2U+ID0gW107XG4gIHByaXZhdGUgbm9uZUl0ZW1WYWx1ZTogSXRlbVZhbHVlID0gbmV3IEl0ZW1WYWx1ZShcIm5vbmVcIik7XG4gIHByaXZhdGUgbmV3SXRlbVZhbHVlOiBJdGVtVmFsdWU7XG4gIHByaXZhdGUgY2FuU2hvd09wdGlvbkl0ZW1DYWxsYmFjazogKGl0ZW06IEl0ZW1WYWx1ZSkgPT4gYm9vbGVhbjtcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdmFyIG5vbmVJdGVtVGV4dCA9IHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJub25lVGV4dFwiLCB0aGlzLCB0cnVlKTtcbiAgICBub25lSXRlbVRleHQub25HZXRUZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgICByZXR1cm4gISF0ZXh0ID8gdGV4dCA6IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJub25lSXRlbVRleHRcIik7XG4gICAgfTtcbiAgICB0aGlzLm5vbmVJdGVtVmFsdWUubG9jT3duZXIgPSB0aGlzO1xuICAgIHRoaXMubm9uZUl0ZW1WYWx1ZS5zZXRMb2NUZXh0KG5vbmVJdGVtVGV4dCk7XG5cbiAgICB0aGlzLmNyZWF0ZUl0ZW1WYWx1ZXMoXCJjaG9pY2VzXCIpO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJjaG9pY2VzXCIsICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5maWx0ZXJJdGVtcygpKSB7XG4gICAgICAgIHRoaXMub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoXG4gICAgICBbXCJjaG9pY2VzRnJvbVF1ZXN0aW9uXCIsIFwiY2hvaWNlc0Zyb21RdWVzdGlvbk1vZGVcIiwgXCJoYXNOb25lXCJdLFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwiaGlkZUlmQ2hvaWNlc0VtcHR5XCIsICgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlVmlzaWJpbGl0eUJhc2VkT25DaG9pY2VzKCk7XG4gICAgfSk7XG4gICAgdGhpcy5jcmVhdGVOZXdBcnJheShcInZpc2libGVDaG9pY2VzXCIpO1xuICAgIHRoaXMuc2V0TmV3UmVzdGZ1bFByb3BlcnR5KCk7XG4gICAgdmFyIGxvY090aGVyVGV4dCA9IHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJvdGhlclRleHRcIiwgdGhpcywgdHJ1ZSk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcIm90aGVyRXJyb3JUZXh0XCIsIHRoaXMsIHRydWUpO1xuICAgIHRoaXMub3RoZXJJdGVtVmFsdWUubG9jT3duZXIgPSB0aGlzO1xuICAgIHRoaXMub3RoZXJJdGVtVmFsdWUuc2V0TG9jVGV4dChsb2NPdGhlclRleHQpO1xuICAgIGxvY090aGVyVGV4dC5vbkdldFRleHRDYWxsYmFjayA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgIHJldHVybiAhIXRleHQgPyB0ZXh0IDogc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm90aGVySXRlbVRleHRcIik7XG4gICAgfTtcbiAgICB0aGlzLmNob2ljZXNCeVVybC5jcmVhdGVJdGVtVmFsdWUgPSAodmFsdWU6IGFueSk6IEl0ZW1WYWx1ZSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVJdGVtVmFsdWUodmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5jaG9pY2VzQnlVcmwuYmVmb3JlU2VuZFJlcXVlc3RDYWxsYmFjayA9ICgpOiB2b2lkID0+IHtcbiAgICAgIHRoaXMub25CZWZvcmVTZW5kUmVxdWVzdCgpO1xuICAgIH07XG4gICAgdGhpcy5jaG9pY2VzQnlVcmwuZ2V0UmVzdWx0Q2FsbGJhY2sgPSAoaXRlbXM6IEFycmF5PEl0ZW1WYWx1ZT4pOiB2b2lkID0+IHtcbiAgICAgIHRoaXMub25Mb2FkQ2hvaWNlc0Zyb21VcmwoaXRlbXMpO1xuICAgIH07XG4gICAgdGhpcy5jaG9pY2VzQnlVcmwudXBkYXRlUmVzdWx0Q2FsbGJhY2sgPSAoXG4gICAgICBpdGVtczogQXJyYXk8SXRlbVZhbHVlPixcbiAgICAgIHNlcnZlclJlc3VsdDogYW55XG4gICAgKTogQXJyYXk8SXRlbVZhbHVlPiA9PiB7XG4gICAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VydmV5LnVwZGF0ZUNob2ljZXNGcm9tU2VydmVyKHRoaXMsIGl0ZW1zLCBzZXJ2ZXJSZXN1bHQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH07XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcIm90aGVyUGxhY2VIb2xkZXJcIiwgdGhpcyk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJzZWxlY3RiYXNlXCI7XG4gIH1cbiAgcHVibGljIGRpc3Bvc2UoKSB7XG4gICAgc3VwZXIuZGlzcG9zZSgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kZXBlbmRlZFF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5kZXBlbmRlZFF1ZXN0aW9uc1tpXS5jaG9pY2VzRnJvbVF1ZXN0aW9uID0gXCJcIjtcbiAgICB9XG4gICAgdGhpcy5yZW1vdmVGcm9tRGVwZW5kZWRRdWVzdGlvbih0aGlzLmdldFF1ZXN0aW9uV2l0aENob2ljZXMoKSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEl0ZW1WYWx1ZVR5cGUoKSB7XG4gICAgcmV0dXJuIFwiaXRlbXZhbHVlXCI7XG4gIH1cbiAgcHVibGljIGNyZWF0ZUl0ZW1WYWx1ZSh2YWx1ZTogYW55KTogSXRlbVZhbHVlIHtcbiAgICByZXR1cm4gU2VyaWFsaXplci5jcmVhdGVDbGFzcyh0aGlzLmdldEl0ZW1WYWx1ZVR5cGUoKSwgdmFsdWUpO1xuICB9XG4gIHB1YmxpYyBzdXBwb3J0R29OZXh0UGFnZUVycm9yKCkge1xuICAgIHJldHVybiAhdGhpcy5pc090aGVyU2VsZWN0ZWQgfHwgISF0aGlzLmNvbW1lbnQ7XG4gIH1cbiAgaXNMYXlvdXRUeXBlU3VwcG9ydGVkKGxheW91dFR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBsb2NhbGVDaGFuZ2VkKCkge1xuICAgIHN1cGVyLmxvY2FsZUNoYW5nZWQoKTtcbiAgICBpZiAodGhpcy5jaG9pY2VzT3JkZXIgIT09IFwibm9uZVwiKSB7XG4gICAgICB0aGlzLnVwZGF0ZVZpc2libGVDaG9pY2VzKCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBsb2NTdHJzQ2hhbmdlZCgpIHtcbiAgICBzdXBlci5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIGlmICghIXRoaXMuY2hvaWNlc0Zyb21VcmwpIHtcbiAgICAgIEl0ZW1WYWx1ZS5sb2NTdHJzQ2hhbmdlZCh0aGlzLmNob2ljZXNGcm9tVXJsKTtcbiAgICAgIEl0ZW1WYWx1ZS5sb2NTdHJzQ2hhbmdlZCh0aGlzLnZpc2libGVDaG9pY2VzKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG90aGVyIGl0ZW0uIEJ5IHVzaW5nIHRoaXMgcHJvcGVydHksIHlvdSBtYXkgY2hhbmdlIHByb2dyYW1tYXRpY2FsbHkgaXQncyB2YWx1ZSBhbmQgdGV4dC5cbiAgICogQHNlZSBoYXNPdGhlclxuICAgKi9cbiAgcHVibGljIGdldCBvdGhlckl0ZW0oKTogSXRlbVZhbHVlIHtcbiAgICByZXR1cm4gdGhpcy5vdGhlckl0ZW1WYWx1ZTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIGEgdXNlciBzZWxlY3QgdGhlICdvdGhlcicgaXRlbS5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNPdGhlclNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc090aGVyICYmIHRoaXMuZ2V0SGFzT3RoZXIodGhpcy5yZW5kZXJlZFZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSwgdG8gc2hvdyB0aGUgXCJOb25lXCIgaXRlbSBvbiB0aGUgYm90dG9tLiBJZiBlbmQtdXNlciBjaGVja3MgdGhpcyBpdGVtLCBhbGwgb3RoZXIgaXRlbXMgd291bGQgYmUgdW5jaGVja2VkLlxuICAgKi9cbiAgcHVibGljIGdldCBoYXNOb25lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJoYXNOb25lXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGhhc05vbmUodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaGFzTm9uZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBub25lIGl0ZW0uIEJ5IHVzaW5nIHRoaXMgcHJvcGVydHksIHlvdSBtYXkgY2hhbmdlIHByb2dyYW1tYXRpY2FsbHkgaXQncyB2YWx1ZSBhbmQgdGV4dC5cbiAgICogQHNlZSBoYXNOb25lXG4gICAqL1xuICBwdWJsaWMgZ2V0IG5vbmVJdGVtKCk6IEl0ZW1WYWx1ZSB7XG4gICAgcmV0dXJuIHRoaXMubm9uZUl0ZW1WYWx1ZTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gc2V0IHRoZSBkaWZmZXJlbnQgdGV4dCBmb3Igbm9uZSBpdGVtLlxuICAgKi9cbiAgcHVibGljIGdldCBub25lVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwibm9uZVRleHRcIixcbiAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJub25lSXRlbVRleHRcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXQgbm9uZVRleHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcIm5vbmVUZXh0XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY05vbmVUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcIm5vbmVUZXh0XCIpO1xuICB9XG4gIC8qKlxuICAgKiBBbiBleHByZXNzaW9uIHRoYXQgcmV0dXJucyB0cnVlIG9yIGZhbHNlLiBJdCBydW5zIGFnYWluc3QgZWFjaCBjaG9pY2VzIGl0ZW0gYW5kIGlmIGZvciB0aGlzIGl0ZW0gaXQgcmV0dXJucyB0cnVlLCB0aGVuIHRoZSBpdGVtIGlzIHZpc2libGUgb3RoZXJ3aXNlIHRoZSBpdGVtIGJlY29tZXMgaW52aXNpYmxlLiBQbGVhc2UgdXNlIHtpdGVtfSB0byBnZXQgdGhlIGN1cnJlbnQgaXRlbSB2YWx1ZSBpbiB0aGUgZXhwcmVzc2lvbi5cbiAgICogQHNlZSB2aXNpYmxlSWZcbiAgICogQHNlZSBjaG9pY2VzRW5hYmxlSWZcbiAgICovXG4gIHB1YmxpYyBnZXQgY2hvaWNlc1Zpc2libGVJZigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzVmlzaWJsZUlmXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY2hvaWNlc1Zpc2libGVJZih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNWaXNpYmxlSWZcIiwgdmFsKTtcbiAgICB0aGlzLmZpbHRlckl0ZW1zKCk7XG4gIH1cbiAgLyoqXG4gICAqIEFuIGV4cHJlc3Npb24gdGhhdCByZXR1cm5zIHRydWUgb3IgZmFsc2UuIEl0IHJ1bnMgYWdhaW5zdCBlYWNoIGNob2ljZXMgaXRlbSBhbmQgaWYgZm9yIHRoaXMgaXRlbSBpdCByZXR1cm5zIHRydWUsIHRoZW4gdGhlIGl0ZW0gaXMgZW5hYmxlZCBvdGhlcndpc2UgdGhlIGl0ZW0gYmVjb21lcyBkaXNhYmxlZC4gUGxlYXNlIHVzZSB7aXRlbX0gdG8gZ2V0IHRoZSBjdXJyZW50IGl0ZW0gdmFsdWUgaW4gdGhlIGV4cHJlc3Npb24uXG4gICAqIEBzZWUgY2hvaWNlc1Zpc2libGVJZlxuICAgKi9cbiAgcHVibGljIGdldCBjaG9pY2VzRW5hYmxlSWYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc0VuYWJsZUlmXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY2hvaWNlc0VuYWJsZUlmKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc0VuYWJsZUlmXCIsIHZhbCk7XG4gICAgdGhpcy5maWx0ZXJJdGVtcygpO1xuICB9XG4gIHB1YmxpYyBydW5Db25kaXRpb24odmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHtcbiAgICBzdXBlci5ydW5Db25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB0aGlzLnJ1bkl0ZW1zRW5hYmxlQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgdGhpcy5ydW5JdGVtc0NvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICB9XG4gIHByb3RlY3RlZCBpc1RleHRWYWx1ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTsgLy9mb3IgY29tbWVudHMgYW5kIG90aGVyc1xuICB9XG4gIHByaXZhdGUgaXNTZXR0aW5nRGVmYXVsdFZhbHVlOiBib29sZWFuID0gZmFsc2U7XG4gIHByb3RlY3RlZCBzZXREZWZhdWx0VmFsdWUoKSB7XG4gICAgdGhpcy5pc1NldHRpbmdEZWZhdWx0VmFsdWUgPVxuICAgICAgIXRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuZGVmYXVsdFZhbHVlKSAmJlxuICAgICAgdGhpcy5oYXNVbmtub3duVmFsdWUodGhpcy5kZWZhdWx0VmFsdWUpO1xuICAgIHRoaXMucHJldkNvbW1lbnRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICBzdXBlci5zZXREZWZhdWx0VmFsdWUoKTtcbiAgICB0aGlzLmlzU2V0dGluZ0RlZmF1bHRWYWx1ZSA9IGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRJc011bHRpcGxlVmFsdWUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCBjb252ZXJ0RGVmYXVsdFZhbHVlKHZhbDogYW55KTogYW55IHtcbiAgICBpZiAodmFsID09IG51bGwgfHwgdmFsID09IHVuZGVmaW5lZCkgcmV0dXJuIHZhbDtcbiAgICBpZiAodGhpcy5nZXRJc011bHRpcGxlVmFsdWUoKSkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbCkpIHJldHVybiBbdmFsXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSAmJiB2YWwubGVuZ3RoID4gMCkgcmV0dXJuIHZhbFswXTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuICBwcm90ZWN0ZWQgZmlsdGVySXRlbXMoKTogYm9vbGVhbiB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5pc0xvYWRpbmdGcm9tSnNvbiB8fFxuICAgICAgIXRoaXMuZGF0YSB8fFxuICAgICAgdGhpcy5hcmVJbnZpc2libGVFbGVtZW50c1Nob3dpbmdcbiAgICApXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHZhbHVlcyA9IHRoaXMuZ2V0RGF0YUZpbHRlcmVkVmFsdWVzKCk7XG4gICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmdldERhdGFGaWx0ZXJlZFByb3BlcnRpZXMoKTtcbiAgICB0aGlzLnJ1bkl0ZW1zRW5hYmxlQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgcmV0dXJuIHRoaXMucnVuSXRlbXNDb25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICBwcm90ZWN0ZWQgcnVuSXRlbXNDb25kaXRpb24oXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PlxuICApOiBib29sZWFuIHtcbiAgICB0aGlzLnNldENvbmRpdGlvbmFsQ2hvaWNlc1J1bm5lcigpO1xuICAgIHZhciBoYXNDaGFuZ2VzID0gdGhpcy5ydW5Db25kaXRpb25zRm9ySXRlbXModmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICBpZiAoXG4gICAgICAhIXRoaXMuZmlsdGVyZWRDaG9pY2VzVmFsdWUgJiZcbiAgICAgIHRoaXMuZmlsdGVyZWRDaG9pY2VzVmFsdWUubGVuZ3RoID09PSB0aGlzLmFjdGl2ZUNob2ljZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkQ2hvaWNlc1ZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoaGFzQ2hhbmdlcykge1xuICAgICAgdGhpcy5vblZpc2libGVDaG9pY2VzQ2hhbmdlZCgpO1xuICAgICAgdGhpcy5jbGVhckluY29ycmVjdFZhbHVlcygpO1xuICAgIH1cbiAgICByZXR1cm4gaGFzQ2hhbmdlcztcbiAgfVxuICBwcm90ZWN0ZWQgcnVuSXRlbXNFbmFibGVDb25kaXRpb24oXG4gICAgdmFsdWVzOiBIYXNoVGFibGU8YW55PixcbiAgICBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55PlxuICApOiBhbnkge1xuICAgIHRoaXMuc2V0Q29uZGl0aW9uYWxFbmFibGVDaG9pY2VzUnVubmVyKCk7XG4gICAgdmFyIGhhc0NoYW5nZWQgPSBJdGVtVmFsdWUucnVuRW5hYmxlZENvbmRpdGlvbnNGb3JJdGVtcyhcbiAgICAgIHRoaXMuYWN0aXZlQ2hvaWNlcyxcbiAgICAgIHRoaXMuY29uZGl0aW9uQ2hvaWNlc0VuYWJsZUlmUnVubmVyLFxuICAgICAgdmFsdWVzLFxuICAgICAgcHJvcGVydGllcyxcbiAgICAgIChpdGVtOiBJdGVtVmFsdWUpOiBib29sZWFuID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMub25FbmFibGVJdGVtQ2FsbEJhY2soaXRlbSk7XG4gICAgICB9XG4gICAgKTtcbiAgICBpZiAoaGFzQ2hhbmdlZCkge1xuICAgICAgdGhpcy5jbGVhckRpc2FibGVkVmFsdWVzKCk7XG4gICAgfVxuICAgIHRoaXMub25BZnRlclJ1bkl0ZW1zRW5hYmxlQ29uZGl0aW9uKCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uQWZ0ZXJSdW5JdGVtc0VuYWJsZUNvbmRpdGlvbigpIHt9XG4gIHByb3RlY3RlZCBvbkVuYWJsZUl0ZW1DYWxsQmFjayhpdGVtOiBJdGVtVmFsdWUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcml2YXRlIHNldENvbmRpdGlvbmFsQ2hvaWNlc1J1bm5lcigpIHtcbiAgICBpZiAodGhpcy5jaG9pY2VzVmlzaWJsZUlmKSB7XG4gICAgICBpZiAoIXRoaXMuY29uZGl0aW9uQ2hvaWNlc1Zpc2libGVJZlJ1bm5lcikge1xuICAgICAgICB0aGlzLmNvbmRpdGlvbkNob2ljZXNWaXNpYmxlSWZSdW5uZXIgPSBuZXcgQ29uZGl0aW9uUnVubmVyKFxuICAgICAgICAgIHRoaXMuY2hvaWNlc1Zpc2libGVJZlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhpcy5jb25kaXRpb25DaG9pY2VzVmlzaWJsZUlmUnVubmVyLmV4cHJlc3Npb24gPSB0aGlzLmNob2ljZXNWaXNpYmxlSWY7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uZGl0aW9uQ2hvaWNlc1Zpc2libGVJZlJ1bm5lciA9IG51bGw7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgc2V0Q29uZGl0aW9uYWxFbmFibGVDaG9pY2VzUnVubmVyKCkge1xuICAgIGlmICh0aGlzLmNob2ljZXNFbmFibGVJZikge1xuICAgICAgaWYgKCF0aGlzLmNvbmRpdGlvbkNob2ljZXNFbmFibGVJZlJ1bm5lcikge1xuICAgICAgICB0aGlzLmNvbmRpdGlvbkNob2ljZXNFbmFibGVJZlJ1bm5lciA9IG5ldyBDb25kaXRpb25SdW5uZXIoXG4gICAgICAgICAgdGhpcy5jaG9pY2VzRW5hYmxlSWZcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29uZGl0aW9uQ2hvaWNlc0VuYWJsZUlmUnVubmVyLmV4cHJlc3Npb24gPSB0aGlzLmNob2ljZXNFbmFibGVJZjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25kaXRpb25DaG9pY2VzRW5hYmxlSWZSdW5uZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHJ1bkNvbmRpdGlvbnNGb3JJdGVtcyhcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+XG4gICk6IGJvb2xlYW4ge1xuICAgIHRoaXMuZmlsdGVyZWRDaG9pY2VzVmFsdWUgPSBbXTtcbiAgICByZXR1cm4gSXRlbVZhbHVlLnJ1bkNvbmRpdGlvbnNGb3JJdGVtcyhcbiAgICAgIHRoaXMuYWN0aXZlQ2hvaWNlcyxcbiAgICAgIHRoaXMuZ2V0RmlsdGVyZWRDaG9pY2VzKCksXG4gICAgICB0aGlzLmFyZUludmlzaWJsZUVsZW1lbnRzU2hvd2luZ1xuICAgICAgICA/IG51bGxcbiAgICAgICAgOiB0aGlzLmNvbmRpdGlvbkNob2ljZXNWaXNpYmxlSWZSdW5uZXIsXG4gICAgICB2YWx1ZXMsXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgICAgIXRoaXMuc3VydmV5IHx8ICF0aGlzLnN1cnZleS5hcmVJbnZpc2libGVFbGVtZW50c1Nob3dpbmdcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRIYXNPdGhlcih2YWw6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWwgPT09IHRoaXMub3RoZXJJdGVtLnZhbHVlO1xuICB9XG4gIGdldCB2YWxpZGF0ZWRWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnJlbmRyZWRWYWx1ZVRvRGF0YUNvcmUodGhpcy52YWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVJlc3RmdWwoKTogQ2hvaWNlc1Jlc3RmdWwge1xuICAgIHJldHVybiBuZXcgQ2hvaWNlc1Jlc3RmdWwoKTtcbiAgfVxuICBwcml2YXRlIHNldE5ld1Jlc3RmdWxQcm9wZXJ0eSgpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzQnlVcmxcIiwgdGhpcy5jcmVhdGVSZXN0ZnVsKCkpO1xuICAgIHRoaXMuY2hvaWNlc0J5VXJsLm93bmVyID0gdGhpcztcbiAgICB0aGlzLmNob2ljZXNCeVVybC5sb2FkaW5nT3duZXIgPSB0aGlzO1xuICB9XG4gIHByb3RlY3RlZCBnZXRRdWVzdGlvbkNvbW1lbnQoKTogc3RyaW5nIHtcbiAgICBpZiAoISF0aGlzLmNvbW1lbnRWYWx1ZSkgcmV0dXJuIHRoaXMuY29tbWVudFZhbHVlO1xuICAgIGlmICh0aGlzLmhhc0NvbW1lbnQgfHwgdGhpcy5nZXRTdG9yZU90aGVyc0FzQ29tbWVudCgpKVxuICAgICAgcmV0dXJuIHN1cGVyLmdldFF1ZXN0aW9uQ29tbWVudCgpO1xuICAgIHJldHVybiB0aGlzLmNvbW1lbnRWYWx1ZTtcbiAgfVxuICBwcml2YXRlIGlzU2V0dGluZ0NvbW1lbnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJvdGVjdGVkIHNldFF1ZXN0aW9uQ29tbWVudChuZXdWYWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuaGFzQ29tbWVudCB8fCB0aGlzLmdldFN0b3JlT3RoZXJzQXNDb21tZW50KCkpXG4gICAgICBzdXBlci5zZXRRdWVzdGlvbkNvbW1lbnQobmV3VmFsdWUpO1xuICAgIGVsc2Uge1xuICAgICAgaWYgKCF0aGlzLmlzU2V0dGluZ0NvbW1lbnQgJiYgbmV3VmFsdWUgIT0gdGhpcy5jb21tZW50VmFsdWUpIHtcbiAgICAgICAgdGhpcy5pc1NldHRpbmdDb21tZW50ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jb21tZW50VmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuaXNPdGhlclNlbGVjdGVkICYmICF0aGlzLmlzUmVuZGVyZWRWYWx1ZVNldHRpbmcpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5yZW5kcmVkVmFsdWVUb0RhdGEodGhpcy5yZW5kZXJlZFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzU2V0dGluZ0NvbW1lbnQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIGNsZWFyVmFsdWUoKSB7XG4gICAgc3VwZXIuY2xlYXJWYWx1ZSgpO1xuICAgIHRoaXMucHJldkNvbW1lbnRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICB1cGRhdGVDb21tZW50RnJvbVN1cnZleShuZXdWYWx1ZTogYW55KTogYW55IHtcbiAgICBzdXBlci51cGRhdGVDb21tZW50RnJvbVN1cnZleShuZXdWYWx1ZSk7XG4gICAgdGhpcy5wcmV2Q29tbWVudFZhbHVlID0gdW5kZWZpbmVkO1xuICB9XG4gIHB1YmxpYyBnZXQgcmVuZGVyZWRWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJlZFZhbHVlXCIsIG51bGwpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVuZGVyZWRWYWx1ZSh2YWw6IGFueSkge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJlbmRlcmVkVmFsdWVcIiwgdmFsKTtcbiAgICB2YXIgdmFsID0gdGhpcy5yZW5kcmVkVmFsdWVUb0RhdGEodmFsKTtcbiAgICBpZiAoIXRoaXMuaXNUd29WYWx1ZUVxdWFscyh2YWwsIHRoaXMudmFsdWUpKSB7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgc2V0UXVlc3Rpb25WYWx1ZShcbiAgICBuZXdWYWx1ZTogYW55LFxuICAgIHVwZGF0ZUlzQW5zd2VyZWQ6IGJvb2xlYW4gPSB0cnVlLFxuICAgIHVwZGF0ZUNvbW1lbnQ6IGJvb2xlYW4gPSB0cnVlXG4gICkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuaXNMb2FkaW5nRnJvbUpzb24gfHxcbiAgICAgIHRoaXMuaXNUd29WYWx1ZUVxdWFscyh0aGlzLnZhbHVlLCBuZXdWYWx1ZSlcbiAgICApXG4gICAgICByZXR1cm47XG4gICAgc3VwZXIuc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZSwgdXBkYXRlSXNBbnN3ZXJlZCk7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmVuZGVyZWRWYWx1ZVwiLCB0aGlzLnJlbmRyZWRWYWx1ZUZyb21EYXRhKG5ld1ZhbHVlKSk7XG4gICAgaWYgKHRoaXMuaGFzQ29tbWVudCB8fCAhdXBkYXRlQ29tbWVudCkgcmV0dXJuO1xuICAgIHZhciBpc090aGVyU2VsID0gdGhpcy5pc090aGVyU2VsZWN0ZWQ7XG4gICAgaWYgKGlzT3RoZXJTZWwgJiYgISF0aGlzLnByZXZDb21tZW50VmFsdWUpIHtcbiAgICAgIHZhciBvbGRDb21tZW50ID0gdGhpcy5wcmV2Q29tbWVudFZhbHVlO1xuICAgICAgdGhpcy5wcmV2Q29tbWVudFZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5jb21tZW50ID0gb2xkQ29tbWVudDtcbiAgICB9XG4gICAgaWYgKCFpc090aGVyU2VsICYmICEhdGhpcy5jb21tZW50KSB7XG4gICAgICBpZiAodGhpcy5nZXRTdG9yZU90aGVyc0FzQ29tbWVudCgpKSB7XG4gICAgICAgIHRoaXMucHJldkNvbW1lbnRWYWx1ZSA9IHRoaXMuY29tbWVudDtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29tbWVudCA9IFwiXCI7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBzZXROZXdWYWx1ZShuZXdWYWx1ZTogYW55KSB7XG4gICAgbmV3VmFsdWUgPSB0aGlzLnZhbHVlRnJvbURhdGEobmV3VmFsdWUpO1xuICAgIGlmIChcbiAgICAgICghdGhpcy5jaG9pY2VzQnlVcmwuaXNSdW5uaW5nICYmXG4gICAgICAgICF0aGlzLmNob2ljZXNCeVVybC5pc1dhaXRpbmdGb3JQYXJhbWV0ZXJzKSB8fFxuICAgICAgIXRoaXMuaXNWYWx1ZUVtcHR5KG5ld1ZhbHVlKVxuICAgICkge1xuICAgICAgdGhpcy5jYWNoZWRWYWx1ZUZvclVybFJlcXVlc3RzID0gbmV3VmFsdWU7XG4gICAgfVxuICAgIHN1cGVyLnNldE5ld1ZhbHVlKG5ld1ZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgdmFsdWVGcm9tRGF0YSh2YWw6IGFueSk6IGFueSB7XG4gICAgbGV0IGNob2ljZWl0ZW0gPSBJdGVtVmFsdWUuZ2V0SXRlbUJ5VmFsdWUodGhpcy5hY3RpdmVDaG9pY2VzLCB2YWwpO1xuICAgIGlmICghIWNob2ljZWl0ZW0pIHtcbiAgICAgIHJldHVybiBjaG9pY2VpdGVtLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gc3VwZXIudmFsdWVGcm9tRGF0YSh2YWwpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kcmVkVmFsdWVGcm9tRGF0YSh2YWw6IGFueSk6IGFueSB7XG4gICAgaWYgKHRoaXMuZ2V0U3RvcmVPdGhlcnNBc0NvbW1lbnQoKSkgcmV0dXJuIHZhbDtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJlZFZhbHVlRnJvbURhdGFDb3JlKHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRyZWRWYWx1ZVRvRGF0YSh2YWw6IGFueSk6IGFueSB7XG4gICAgaWYgKHRoaXMuZ2V0U3RvcmVPdGhlcnNBc0NvbW1lbnQoKSkgcmV0dXJuIHZhbDtcbiAgICByZXR1cm4gdGhpcy5yZW5kcmVkVmFsdWVUb0RhdGFDb3JlKHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlcmVkVmFsdWVGcm9tRGF0YUNvcmUodmFsOiBhbnkpOiBhbnkge1xuICAgIGlmICghdGhpcy5oYXNVbmtub3duVmFsdWUodmFsLCB0cnVlLCBmYWxzZSkpIHJldHVybiB0aGlzLnZhbHVlRnJvbURhdGEodmFsKTtcbiAgICB0aGlzLmNvbW1lbnQgPSB2YWw7XG4gICAgcmV0dXJuIHRoaXMub3RoZXJJdGVtLnZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCByZW5kcmVkVmFsdWVUb0RhdGFDb3JlKHZhbDogYW55KTogYW55IHtcbiAgICBpZiAodmFsID09IHRoaXMub3RoZXJJdGVtLnZhbHVlICYmIHRoaXMuZ2V0UXVlc3Rpb25Db21tZW50KCkpIHtcbiAgICAgIHZhbCA9IHRoaXMuZ2V0UXVlc3Rpb25Db21tZW50KCk7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgcHJvdGVjdGVkIGhhc1Vua25vd25WYWx1ZShcbiAgICB2YWw6IGFueSxcbiAgICBpbmNsdWRlT3RoZXI6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBpc0ZpbHRlcmVkQ2hvaWNlczogYm9vbGVhbiA9IHRydWUsXG4gICAgY2hlY2tFbXB0eVZhbHVlOiBib29sZWFuID0gZmFsc2VcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCFjaGVja0VtcHR5VmFsdWUgJiYgdGhpcy5pc1ZhbHVlRW1wdHkodmFsKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChpbmNsdWRlT3RoZXIgJiYgdmFsID09IHRoaXMub3RoZXJJdGVtLnZhbHVlKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRoaXMuaGFzTm9uZSAmJiB2YWwgPT0gdGhpcy5ub25lSXRlbS52YWx1ZSkgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBjaG9pY2VzID0gaXNGaWx0ZXJlZENob2ljZXNcbiAgICAgID8gdGhpcy5nZXRGaWx0ZXJlZENob2ljZXMoKVxuICAgICAgOiB0aGlzLmFjdGl2ZUNob2ljZXM7XG4gICAgcmV0dXJuIEl0ZW1WYWx1ZS5nZXRJdGVtQnlWYWx1ZShjaG9pY2VzLCB2YWwpID09IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGlzVmFsdWVEaXNhYmxlZCh2YWw6IGFueSk6IGJvb2xlYW4ge1xuICAgIHZhciBpdGVtVmFsdWUgPSBJdGVtVmFsdWUuZ2V0SXRlbUJ5VmFsdWUodGhpcy5nZXRGaWx0ZXJlZENob2ljZXMoKSwgdmFsKTtcbiAgICByZXR1cm4gISFpdGVtVmFsdWUgJiYgIWl0ZW1WYWx1ZS5pc0VuYWJsZWQ7XG4gIH1cbiAgLyoqXG4gICAqIElmIHRoZSBjbGVhckluY29ycmVjdFZhbHVlc0NhbGxiYWNrIGlzIHNldCwgaXQgaXMgdXNlZCB0byBjbGVhciBpbmNvcnJlY3QgdmFsdWVzIGluc3RlYWQgb2YgZGVmYXVsdCBiZWhhdmlvdXIuXG4gICAqL1xuICBwdWJsaWMgY2xlYXJJbmNvcnJlY3RWYWx1ZXNDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIGZpbGwgdGhlIGNob2ljZXMgZnJvbSBhIFJFU1RmdWwgc2VydmljZS5cbiAgICogQHNlZSBjaG9pY2VzXG4gICAqIEBzZWUgQ2hvaWNlc1Jlc3RmdWxcbiAgICogQHNlZSBbRXhhbXBsZTogUkVTVGZ1bCBEcm9wZG93bl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9FeGFtcGxlcy9MaWJyYXJ5Lz9pZD1xdWVzdGlvbnR5cGUtZHJvcGRvd25yZXN0ZnVsbClcbiAgICogQHNlZSBbRG9jczogRmlsbCBDaG9pY2VzIGZyb20gYSBSRVNUZnVsIFNlcnZpY2VdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5Lz9pZD1MaWJyYXJ5T3ZlcnZpZXcjZmlsbC10aGUtY2hvaWNlcy1mcm9tLWEtcmVzdGZ1bC1zZXJ2aWNlKVxuICAgKi9cbiAgcHVibGljIGdldCBjaG9pY2VzQnlVcmwoKTogQ2hvaWNlc1Jlc3RmdWwge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzQnlVcmxcIik7XG4gIH1cbiAgcHVibGljIHNldCBjaG9pY2VzQnlVcmwodmFsOiBDaG9pY2VzUmVzdGZ1bCkge1xuICAgIGlmICghdmFsKSByZXR1cm47XG4gICAgdGhpcy5zZXROZXdSZXN0ZnVsUHJvcGVydHkoKTtcbiAgICB0aGlzLmNob2ljZXNCeVVybC5mcm9tSlNPTih2YWwudG9KU09OKCkpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBpdGVtcy4gRXZlcnkgaXRlbSBoYXMgdmFsdWUgYW5kIHRleHQuIElmIHRleHQgaXMgZW1wdHksIHRoZSB2YWx1ZSBpcyByZW5kZXJlZC4gVGhlIGl0ZW0gdGV4dCBzdXBwb3J0cyBtYXJrZG93bi5cbiAgICogQHNlZSBjaG9pY2VzQnlVcmxcbiAgICogQHNlZSBjaG9pY2VzRnJvbVF1ZXN0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNob2ljZXMoKTogQXJyYXk8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNcIik7XG4gIH1cbiAgcHVibGljIHNldCBjaG9pY2VzKG5ld1ZhbHVlOiBBcnJheTxhbnk+KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc1wiLCBuZXdWYWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGdldCBjaG9pY2VzIGZyb20gdGhlIHNwZWNpZmllZCBxdWVzdGlvbiBpbnN0ZWFkIG9mIGRlZmluaW5nIHRoZW0gaW4gdGhlIGN1cnJlbnQgcXVlc3Rpb24uIFRoaXMgYXZvaWRzIGR1cGxpY2F0aW9uIG9mIGNob2ljZXMgZGVjbGFyYXRpb24gaW4geW91ciBzdXJ2ZXkgZGVmaW5pdGlvbi5cbiAgICogQnkgc2V0dGluZyB0aGlzIHByb3BlcnR5LCB0aGUgXCJjaG9pY2VzXCIsIFwiY2hvaWNlc1Zpc2libGVJZlwiLCBcImNob2ljZXNFbmFibGVJZlwiIGFuZCBcImNob2ljZXNPcmRlclwiIHByb3BlcnRpZXMgYmVjb21lIGludmlzaWJsZSwgYmVjYXVzZSB0aGVzZSBxdWVzdGlvbiBjaGFyYWN0ZXJpc3RpY3MgZGVwZW5kIG9uIGFjdGlvbnMgaW4gYW5vdGhlciAoc3BlY2lmaWVkKSBxdWVzdGlvbi5cbiAgICogVXNlIHRoZSBgY2hvaWNlc0Zyb21RdWVzdGlvbk1vZGVgIHByb3BlcnR5IHRvIGZpbHRlciBjaG9pY2VzIG9idGFpbmVkIGZyb20gdGhlIHNwZWNpZmllZCBxdWVzdGlvbi5cbiAgICogQHNlZSBjaG9pY2VzXG4gICAqIEBzZWUgY2hvaWNlc0Zyb21RdWVzdGlvbk1vZGVcbiAgICovXG4gIHB1YmxpYyBnZXQgY2hvaWNlc0Zyb21RdWVzdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzRnJvbVF1ZXN0aW9uXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY2hvaWNlc0Zyb21RdWVzdGlvbih2YWw6IHN0cmluZykge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25XaXRoQ2hvaWNlcygpO1xuICAgIGlmICghIXF1ZXN0aW9uKSB7XG4gICAgICBxdWVzdGlvbi5yZW1vdmVGcm9tRGVwZW5kZWRRdWVzdGlvbih0aGlzKTtcbiAgICB9XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc0Zyb21RdWVzdGlvblwiLCB2YWwpO1xuICB9XG4gIHByaXZhdGUgYWRkSW50b0RlcGVuZGVkUXVlc3Rpb24ocXVlc3Rpb246IFF1ZXN0aW9uU2VsZWN0QmFzZSkge1xuICAgIGlmICghcXVlc3Rpb24gfHwgcXVlc3Rpb24uZGVwZW5kZWRRdWVzdGlvbnMuaW5kZXhPZih0aGlzKSA+IC0xKSByZXR1cm47XG4gICAgcXVlc3Rpb24uZGVwZW5kZWRRdWVzdGlvbnMucHVzaCh0aGlzKTtcbiAgfVxuICBwcml2YXRlIHJlbW92ZUZyb21EZXBlbmRlZFF1ZXN0aW9uKHF1ZXN0aW9uOiBRdWVzdGlvblNlbGVjdEJhc2UpIHtcbiAgICBpZiAoIXF1ZXN0aW9uKSByZXR1cm47XG4gICAgdmFyIGluZGV4ID0gcXVlc3Rpb24uZGVwZW5kZWRRdWVzdGlvbnMuaW5kZXhPZih0aGlzKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgcXVlc3Rpb24uZGVwZW5kZWRRdWVzdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFRoaXMgcHJvcGVydHkgYmVjb21lcyB2aXNpYmxlIHdoZW4gdGhlIGBjaG9pY2VzRnJvbVF1ZXN0aW9uYCBwcm9wZXJ0eSBpcyBzZWxlY3RlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgXCJhbGxcIiAoYWxsIHZpc2libGUgY2hvaWNlcyBmcm9tIGFub3RoZXIgcXVlc3Rpb24gYXJlIGRpc3BsYXllZCBhcyB0aGV5IGFyZSkuXG4gICAqIFlvdSBjYW4gc2V0IHRoaXMgcHJvcGVydHkgdG8gXCJzZWxlY3RlZFwiIG9yIFwidW5zZWxlY3RlZFwiIHRvIGRpc3BsYXkgb25seSBzZWxlY3RlZCBvciB1bnNlbGVjdGVkIGNob2ljZXMgZnJvbSB0aGUgc3BlY2lmaWVkIHF1ZXN0aW9uLlxuICAgKiBAc2VlIGNob2ljZXNGcm9tUXVlc3Rpb25cbiAgICovXG4gIHB1YmxpYyBnZXQgY2hvaWNlc0Zyb21RdWVzdGlvbk1vZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc0Zyb21RdWVzdGlvbk1vZGVcIik7XG4gIH1cbiAgcHVibGljIHNldCBjaG9pY2VzRnJvbVF1ZXN0aW9uTW9kZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNGcm9tUXVlc3Rpb25Nb2RlXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUgdG8gaGlkZSB0aGUgcXVlc3Rpb24gaWYgdGhlcmUgaXMgbm8gdmlzaWJsZSBjaG9pY2VzLlxuICAgKi9cbiAgcHVibGljIGdldCBoaWRlSWZDaG9pY2VzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImhpZGVJZkNob2ljZXNFbXB0eVwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBoaWRlSWZDaG9pY2VzRW1wdHkodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaGlkZUlmQ2hvaWNlc0VtcHR5XCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBrZWVwSW5jb3JyZWN0VmFsdWVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJrZWVwSW5jb3JyZWN0VmFsdWVzXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGtlZXBJbmNvcnJlY3RWYWx1ZXModmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwia2VlcEluY29ycmVjdFZhbHVlc1wiLCB2YWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBsZWFzZSB1c2Ugc3VydmV5LnN0b3JlT3RoZXJzQXNDb21tZW50IHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb24gdGhlIHN1cnZleSBsZXZlbC4gVGhpcyBwcm9wZXJ0eSBpcyBkZXByaWNhdGVkIGFuZCBpbnZpc2libGUgaW4gU3VydmV5IENyZWF0b3IuXG4gICAqIEJ5IGRlZmF1bHQgdGhlIGVudGVyZWQgdGV4dCBpbiB0aGUgb3RoZXJzIGlucHV0IGluIHRoZSBjaGVja2JveC9yYWRpb2dyb3VwL2Ryb3Bkb3duIGFyZSBzdG9yZWQgYXMgXCJxdWVzdGlvbiBuYW1lIFwiICsgXCItQ29tbWVudFwiLiBUaGUgdmFsdWUgaXRzZWxmIGlzIFwicXVlc3Rpb24gbmFtZVwiOiBcIm90aGVyc1wiLiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBmYWxzZSwgdG8gc3RvcmUgdGhlIGVudGVyZWQgdGV4dCBkaXJlY3RseSBpbiB0aGUgXCJxdWVzdGlvbiBuYW1lXCIga2V5LlxuICAgKiBQb3NzaWJsZSB2YWx1ZXMgYXJlOiBcImRlZmF1bHRcIiwgdHJ1ZSwgZmFsc2VcbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5zdG9yZU90aGVyc0FzQ29tbWVudFxuICAgKi9cbiAgcHVibGljIGdldCBzdG9yZU90aGVyc0FzQ29tbWVudCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzdG9yZU90aGVyc0FzQ29tbWVudFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHN0b3JlT3RoZXJzQXNDb21tZW50KHZhbDogYW55KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic3RvcmVPdGhlcnNBc0NvbW1lbnRcIiwgdmFsKTtcbiAgfVxuICBwcm90ZWN0ZWQgaGFzT3RoZXJDaGFuZ2VkKCkge1xuICAgIHRoaXMub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gcmVuZGVyIGl0ZW1zIGluIGEgc3BlY2lmaWMgb3JkZXI6IFwiYXNjXCIsIFwiZGVzY1wiLCBcInJhbmRvbVwiLiBEZWZhdWx0IHZhbHVlIGlzIFwibm9uZVwiLlxuICAgKi9cbiAgcHVibGljIGdldCBjaG9pY2VzT3JkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc09yZGVyXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY2hvaWNlc09yZGVyKHZhbDogc3RyaW5nKSB7XG4gICAgdmFsID0gdmFsLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHZhbCA9PSB0aGlzLmNob2ljZXNPcmRlcikgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNPcmRlclwiLCB2YWwpO1xuICAgIHRoaXMub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gc2V0IHRoZSBkaWZmZXJlbnQgdGV4dCBmb3Igb3RoZXIgaXRlbS5cbiAgICovXG4gIHB1YmxpYyBnZXQgb3RoZXJUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJvdGhlclRleHRcIixcbiAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJvdGhlckl0ZW1UZXh0XCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IG90aGVyVGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwib3RoZXJUZXh0XCIsIHZhbCk7XG4gICAgdGhpcy5vblZpc2libGVDaG9pY2VzQ2hhbmdlZCgpO1xuICB9XG4gIGdldCBsb2NPdGhlclRleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwib3RoZXJUZXh0XCIpO1xuICB9XG4gIC8qKlxuICAgKiAgVXNlIHRoaXMgcHJvcGVydHkgdG8gc2V0IHRoZSBwbGFjZSBob2xkZXIgdGV4dCBmb3Igb3RoZXIgb3IgY29tbWVudCBmaWVsZCAgLlxuICAgKi9cbiAgcHVibGljIGdldCBvdGhlclBsYWNlSG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwib3RoZXJQbGFjZUhvbGRlclwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IG90aGVyUGxhY2VIb2xkZXIodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcIm90aGVyUGxhY2VIb2xkZXJcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jT3RoZXJQbGFjZUhvbGRlcigpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJvdGhlclBsYWNlSG9sZGVyXCIpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgdGV4dCB0aGF0IHNob3dzIHdoZW4gdGhlIG90aGVyIGl0ZW0gaXMgY2hvb3NlZCBieSB0aGUgb3RoZXIgaW5wdXQgaXMgZW1wdHkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG90aGVyRXJyb3JUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJvdGhlckVycm9yVGV4dFwiLFxuICAgICAgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm90aGVyUmVxdWlyZWRFcnJvclwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBvdGhlckVycm9yVGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwib3RoZXJFcnJvclRleHRcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jT3RoZXJFcnJvclRleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwib3RoZXJFcnJvclRleHRcIik7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGl0ZW1zIGFzIHRoZXkgd2lsbCBiZSByZW5kZXJlZC4gSWYgbmVlZGVkIGl0ZW1zIGFyZSBzb3J0ZWQgYW5kIHRoZSBvdGhlciBpdGVtIGlzIGFkZGVkLlxuICAgKiBAc2VlIGhhc090aGVyXG4gICAqIEBzZWUgY2hvaWNlc09yZGVyXG4gICAqIEBzZWUgZW5hYmxlZENob2ljZXNcbiAgICovXG4gIHB1YmxpYyBnZXQgdmlzaWJsZUNob2ljZXMoKTogQXJyYXk8SXRlbVZhbHVlPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZpc2libGVDaG9pY2VzXCIpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBlbmFibGVkIGl0ZW1zIGFzIHRoZXkgd2lsbCBiZSByZW5kZXJlZC4gVGhlIGRpc2FibGVkIGl0ZW1zIGFyZSBub3QgaW5jbHVkZWRcbiAgICogQHNlZSBoYXNPdGhlclxuICAgKiBAc2VlIGNob2ljZXNPcmRlclxuICAgKiBAc2VlIHZpc2libGVDaG9pY2VzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGVuYWJsZWRDaG9pY2VzKCk6IEFycmF5PEl0ZW1WYWx1ZT4ge1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgaXRlbXMgPSB0aGlzLnZpc2libGVDaG9pY2VzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChpdGVtc1tpXS5pc0VuYWJsZWQpIHJlcy5wdXNoKGl0ZW1zW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlVmlzaWJsZUNob2ljZXMoKSB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICB2YXIgbmV3VmFsdWUgPSBuZXcgQXJyYXk8SXRlbVZhbHVlPigpO1xuICAgIHZhciBjYWxjVmFsdWUgPSB0aGlzLmNhbGNWaXNpYmxlQ2hvaWNlcygpO1xuICAgIGlmICghY2FsY1ZhbHVlKSBjYWxjVmFsdWUgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbGNWYWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgbmV3VmFsdWUucHVzaChjYWxjVmFsdWVbaV0pO1xuICAgIH1cbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmxlQ2hvaWNlc1wiLCBuZXdWYWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBjYWxjVmlzaWJsZUNob2ljZXMoKTogQXJyYXk8SXRlbVZhbHVlPiB7XG4gICAgaWYgKHRoaXMuY2FuVXNlRmlsdGVyZWRDaG9pY2VzKCkpIHJldHVybiB0aGlzLmdldEZpbHRlcmVkQ2hvaWNlcygpO1xuICAgIHZhciByZXMgPSB0aGlzLnNvcnRWaXNpYmxlQ2hvaWNlcyh0aGlzLmdldEZpbHRlcmVkQ2hvaWNlcygpLnNsaWNlKCkpO1xuICAgIHRoaXMuYWRkVG9WaXNpYmxlQ2hvaWNlcyhyZXMsIHRoaXMuaXNBZGREZWZhdWx0SXRlbXMpO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblVzZUZpbHRlcmVkQ2hvaWNlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMuaXNBZGREZWZhdWx0SXRlbXMgJiZcbiAgICAgICF0aGlzLmhhc05vbmUgJiZcbiAgICAgICF0aGlzLmhhc090aGVyICYmXG4gICAgICB0aGlzLmNob2ljZXNPcmRlciA9PSBcIm5vbmVcIlxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldENhblNob3dPcHRpb25JdGVtQ2FsbGJhY2soZnVuYzogKGl0ZW06IEl0ZW1WYWx1ZSkgPT4gYm9vbGVhbikge1xuICAgIHRoaXMuY2FuU2hvd09wdGlvbkl0ZW1DYWxsYmFjayA9IGZ1bmM7XG4gICAgaWYgKCEhZnVuYykge1xuICAgICAgdGhpcy5vblZpc2libGVDaG9pY2VzQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgYWRkVG9WaXNpYmxlQ2hvaWNlcyhpdGVtczogQXJyYXk8SXRlbVZhbHVlPiwgaXNBZGRBbGw6IGJvb2xlYW4pIHtcbiAgICBpZiAoaXNBZGRBbGwpIHtcbiAgICAgIGlmICghdGhpcy5uZXdJdGVtVmFsdWUpIHtcbiAgICAgICAgdGhpcy5uZXdJdGVtVmFsdWUgPSBuZXcgSXRlbVZhbHVlKFwibmV3aXRlbVwiKTsgLy9UT0RPXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jYW5TaG93T3B0aW9uSXRlbSh0aGlzLm5ld0l0ZW1WYWx1ZSkpIHtcbiAgICAgICAgaXRlbXMucHVzaCh0aGlzLm5ld0l0ZW1WYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMuc3VwcG9ydE90aGVyKCkgJiZcbiAgICAgICgoaXNBZGRBbGwgJiYgdGhpcy5jYW5TaG93T3B0aW9uSXRlbSh0aGlzLm90aGVySXRlbSkpIHx8IHRoaXMuaGFzT3RoZXIpXG4gICAgKSB7XG4gICAgICBpdGVtcy5wdXNoKHRoaXMub3RoZXJJdGVtKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy5zdXBwb3J0Tm9uZSgpICYmXG4gICAgICAoKGlzQWRkQWxsICYmIHRoaXMuY2FuU2hvd09wdGlvbkl0ZW0odGhpcy5ub25lSXRlbSkpIHx8IHRoaXMuaGFzTm9uZSlcbiAgICApIHtcbiAgICAgIGl0ZW1zLnB1c2godGhpcy5ub25lSXRlbSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjYW5TaG93T3B0aW9uSXRlbShpdGVtOiBJdGVtVmFsdWUpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY2FuU2hvd09wdGlvbkl0ZW1DYWxsYmFjaykgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIHRoaXMuY2FuU2hvd09wdGlvbkl0ZW1DYWxsYmFjayhpdGVtKTtcbiAgfVxuICAvKipcbiAgICogRm9yIGludGVybmFsIHVzZSBpbiBTdXJ2ZXlKUyBDcmVhdG9yIFYyLlxuICAgKi9cbiAgcHVibGljIGlzSXRlbUluTGlzdChpdGVtOiBJdGVtVmFsdWUpOiBib29sZWFuIHtcbiAgICBpZiAoaXRlbSA9PT0gdGhpcy5vdGhlckl0ZW0pIHJldHVybiB0aGlzLmhhc090aGVyO1xuICAgIGlmIChpdGVtID09PSB0aGlzLm5vbmVJdGVtKSByZXR1cm4gdGhpcy5oYXNOb25lO1xuICAgIGlmIChpdGVtID09PSB0aGlzLm5ld0l0ZW1WYWx1ZSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaXNBZGREZWZhdWx0SXRlbXMoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHNldHRpbmdzLnN1cHBvcnRDcmVhdG9yVjIgJiYgdGhpcy5pc0Rlc2lnbk1vZGUgJiYgIXRoaXMuaXNDb250ZW50RWxlbWVudFxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldFBsYWluRGF0YShcbiAgICBvcHRpb25zOiB7XG4gICAgICBpbmNsdWRlRW1wdHk/OiBib29sZWFuLFxuICAgICAgaW5jbHVkZVF1ZXN0aW9uVHlwZXM/OiBib29sZWFuLFxuICAgICAgY2FsY3VsYXRpb25zPzogQXJyYXk8e1xuICAgICAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZyxcbiAgICAgIH0+LFxuICAgIH0gPSB7XG4gICAgICBpbmNsdWRlRW1wdHk6IHRydWUsXG4gICAgICBpbmNsdWRlUXVlc3Rpb25UeXBlczogZmFsc2UsXG4gICAgfVxuICApIHtcbiAgICB2YXIgcXVlc3Rpb25QbGFpbkRhdGEgPSBzdXBlci5nZXRQbGFpbkRhdGEob3B0aW9ucyk7XG4gICAgaWYgKCEhcXVlc3Rpb25QbGFpbkRhdGEpIHtcbiAgICAgIHZhciB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpID8gdGhpcy52YWx1ZSA6IFt0aGlzLnZhbHVlXTtcbiAgICAgIHF1ZXN0aW9uUGxhaW5EYXRhLmlzTm9kZSA9IHRydWU7XG4gICAgICBxdWVzdGlvblBsYWluRGF0YS5kYXRhID0gKHF1ZXN0aW9uUGxhaW5EYXRhLmRhdGEgfHwgW10pLmNvbmNhdChcbiAgICAgICAgdmFsdWVzLm1hcCgoZGF0YVZhbHVlLCBpbmRleCkgPT4ge1xuICAgICAgICAgIHZhciBjaG9pY2UgPSBJdGVtVmFsdWUuZ2V0SXRlbUJ5VmFsdWUodGhpcy52aXNpYmxlQ2hvaWNlcywgZGF0YVZhbHVlKTtcbiAgICAgICAgICB2YXIgY2hvaWNlRGF0YUl0ZW0gPSA8YW55PntcbiAgICAgICAgICAgIG5hbWU6IGluZGV4LFxuICAgICAgICAgICAgdGl0bGU6IFwiQ2hvaWNlXCIsXG4gICAgICAgICAgICB2YWx1ZTogZGF0YVZhbHVlLFxuICAgICAgICAgICAgZGlzcGxheVZhbHVlOiB0aGlzLmdldENob2ljZXNEaXNwbGF5VmFsdWUoXG4gICAgICAgICAgICAgIHRoaXMudmlzaWJsZUNob2ljZXMsXG4gICAgICAgICAgICAgIGRhdGFWYWx1ZVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGdldFN0cmluZzogKHZhbDogYW55KSA9PlxuICAgICAgICAgICAgICB0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiID8gSlNPTi5zdHJpbmdpZnkodmFsKSA6IHZhbCxcbiAgICAgICAgICAgIGlzTm9kZTogZmFsc2UsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAoISFjaG9pY2UpIHtcbiAgICAgICAgICAgIChvcHRpb25zLmNhbGN1bGF0aW9ucyB8fCBbXSkuZm9yRWFjaCgoY2FsY3VsYXRpb24pID0+IHtcbiAgICAgICAgICAgICAgY2hvaWNlRGF0YUl0ZW1bY2FsY3VsYXRpb24ucHJvcGVydHlOYW1lXSA9XG4gICAgICAgICAgICAgICAgY2hvaWNlW2NhbGN1bGF0aW9uLnByb3BlcnR5TmFtZV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuaXNPdGhlclNlbGVjdGVkICYmIHRoaXMub3RoZXJJdGVtVmFsdWUgPT09IGNob2ljZSkge1xuICAgICAgICAgICAgY2hvaWNlRGF0YUl0ZW0uaXNPdGhlciA9IHRydWU7XG4gICAgICAgICAgICBjaG9pY2VEYXRhSXRlbS5kaXNwbGF5VmFsdWUgPSB0aGlzLmNvbW1lbnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjaG9pY2VEYXRhSXRlbTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBxdWVzdGlvblBsYWluRGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0ZXh0IGZvciB0aGUgY3VycmVudCB2YWx1ZS4gSWYgdGhlIHZhbHVlIGlzIG51bGwgdGhlbiByZXR1cm5zIGVtcHR5IHN0cmluZy4gSWYgJ290aGVyJyBpcyBzZWxlY3RlZCB0aGVuIHJldHVybnMgdGhlIHRleHQgZm9yIG90aGVyIHZhbHVlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldERpc3BsYXlWYWx1ZUNvcmUoa2V5c0FzVGV4dDogYm9vbGVhbiwgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2hvaWNlc0Rpc3BsYXlWYWx1ZSh0aGlzLnZpc2libGVDaG9pY2VzLCB2YWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERpc3BsYXlWYWx1ZUVtcHR5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEl0ZW1WYWx1ZS5nZXRUZXh0T3JIdG1sQnlWYWx1ZSh0aGlzLnZpc2libGVDaG9pY2VzLCB1bmRlZmluZWQpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRDaG9pY2VzRGlzcGxheVZhbHVlKGl0ZW1zOiBJdGVtVmFsdWVbXSwgdmFsOiBhbnkpOiBhbnkge1xuICAgIGlmICh2YWwgPT0gdGhpcy5vdGhlckl0ZW1WYWx1ZS52YWx1ZSlcbiAgICAgIHJldHVybiB0aGlzLmNvbW1lbnQgPyB0aGlzLmNvbW1lbnQgOiB0aGlzLmxvY090aGVyVGV4dC50ZXh0T3JIdG1sO1xuICAgIHZhciBzdHIgPSBJdGVtVmFsdWUuZ2V0VGV4dE9ySHRtbEJ5VmFsdWUoaXRlbXMsIHZhbCk7XG4gICAgcmV0dXJuIHN0ciA9PSBcIlwiICYmIHZhbCA/IHZhbCA6IHN0cjtcbiAgfVxuICBwcml2YXRlIGdldEZpbHRlcmVkQ2hvaWNlcygpOiBBcnJheTxJdGVtVmFsdWU+IHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJlZENob2ljZXNWYWx1ZVxuICAgICAgPyB0aGlzLmZpbHRlcmVkQ2hvaWNlc1ZhbHVlXG4gICAgICA6IHRoaXMuYWN0aXZlQ2hvaWNlcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IGFjdGl2ZUNob2ljZXMoKTogQXJyYXk8SXRlbVZhbHVlPiB7XG4gICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRRdWVzdGlvbldpdGhDaG9pY2VzKCk7XG4gICAgaWYgKCEhcXVlc3Rpb24pIHtcbiAgICAgIHRoaXMuYWRkSW50b0RlcGVuZGVkUXVlc3Rpb24ocXVlc3Rpb24pO1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2hvaWNlc0Zyb21RdWVzdGlvbihxdWVzdGlvbik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNob2ljZXNGcm9tVXJsID8gdGhpcy5jaG9pY2VzRnJvbVVybCA6IHRoaXMuZ2V0Q2hvaWNlcygpO1xuICB9XG4gIHByaXZhdGUgZ2V0UXVlc3Rpb25XaXRoQ2hvaWNlcygpOiBRdWVzdGlvblNlbGVjdEJhc2Uge1xuICAgIGlmICghdGhpcy5jaG9pY2VzRnJvbVF1ZXN0aW9uIHx8ICF0aGlzLnN1cnZleSkgcmV0dXJuIG51bGw7XG4gICAgdmFyIHJlczogYW55ID0gdGhpcy5zdXJ2ZXkuZ2V0UXVlc3Rpb25CeU5hbWUodGhpcy5jaG9pY2VzRnJvbVF1ZXN0aW9uKTtcbiAgICByZXR1cm4gISFyZXMgJiYgISFyZXMudmlzaWJsZUNob2ljZXMgJiYgcmVzICE9PSB0aGlzID8gcmVzIDogbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q2hvaWNlc0Zyb21RdWVzdGlvbihcbiAgICBxdWVzdGlvbjogUXVlc3Rpb25TZWxlY3RCYXNlXG4gICk6IEFycmF5PEl0ZW1WYWx1ZT4ge1xuICAgIHZhciByZXM6IEFycmF5PEl0ZW1WYWx1ZT4gPSBbXTtcbiAgICB2YXIgaXNTZWxlY3RlZCA9XG4gICAgICB0aGlzLmNob2ljZXNGcm9tUXVlc3Rpb25Nb2RlID09IFwic2VsZWN0ZWRcIlxuICAgICAgICA/IHRydWVcbiAgICAgICAgOiB0aGlzLmNob2ljZXNGcm9tUXVlc3Rpb25Nb2RlID09IFwidW5zZWxlY3RlZFwiXG4gICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIHZhciBjaG9pY2VzID0gcXVlc3Rpb24udmlzaWJsZUNob2ljZXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaG9pY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5pc0J1aWx0SW5DaG9pY2UoY2hvaWNlc1tpXSwgcXVlc3Rpb24pKSBjb250aW51ZTtcbiAgICAgIGlmIChpc1NlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzLnB1c2goY2hvaWNlc1tpXSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIGl0ZW1zU2VsZWN0ZWQgPSBxdWVzdGlvbi5pc0l0ZW1TZWxlY3RlZChjaG9pY2VzW2ldKTtcbiAgICAgIGlmICgoaXRlbXNTZWxlY3RlZCAmJiBpc1NlbGVjdGVkKSB8fCAoIWl0ZW1zU2VsZWN0ZWQgJiYgIWlzU2VsZWN0ZWQpKSB7XG4gICAgICAgIHJlcy5wdXNoKGNob2ljZXNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgaGFzQWN0aXZlQ2hvaWNlcygpOiBib29sZWFuIHtcbiAgICB2YXIgY2hvaWNlcyA9IHRoaXMudmlzaWJsZUNob2ljZXM7XG4gICAgaWYgKCFjaG9pY2VzIHx8IGNob2ljZXMubGVuZ3RoID09IDApIHtcbiAgICAgIHRoaXMub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcbiAgICAgIGNob2ljZXMgPSB0aGlzLnZpc2libGVDaG9pY2VzO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNob2ljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghdGhpcy5pc0J1aWx0SW5DaG9pY2UoY2hvaWNlc1tpXSwgdGhpcykpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGlzQnVpbHRJbkNob2ljZShcbiAgICBpdGVtOiBJdGVtVmFsdWUsXG4gICAgcXVlc3Rpb246IFF1ZXN0aW9uU2VsZWN0QmFzZVxuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgaXRlbSA9PT0gcXVlc3Rpb24ubm9uZUl0ZW0gfHxcbiAgICAgIGl0ZW0gPT09IHF1ZXN0aW9uLm90aGVySXRlbSB8fFxuICAgICAgaXRlbSA9PT0gcXVlc3Rpb24ubmV3SXRlbVZhbHVlXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q2hvaWNlcygpOiBBcnJheTxJdGVtVmFsdWU+IHtcbiAgICByZXR1cm4gdGhpcy5jaG9pY2VzO1xuICB9XG4gIHB1YmxpYyBzdXBwb3J0Q29tbWVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgc3VwcG9ydE90aGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzU3VwcG9ydFByb3BlcnR5KFwiaGFzT3RoZXJcIik7XG4gIH1cbiAgcHVibGljIHN1cHBvcnROb25lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzU3VwcG9ydFByb3BlcnR5KFwiaGFzTm9uZVwiKTtcbiAgfVxuICBwcm90ZWN0ZWQgaXNTdXBwb3J0UHJvcGVydHkocHJvcE5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAhdGhpcy5pc0Rlc2lnbk1vZGUgfHxcbiAgICAgIFNlcmlhbGl6ZXIuZmluZFByb3BlcnR5KHRoaXMuZ2V0VHlwZSgpLCBwcm9wTmFtZSkudmlzaWJsZVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uQ2hlY2tGb3JFcnJvcnMoXG4gICAgZXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj4sXG4gICAgaXNPblZhbHVlQ2hhbmdlZDogYm9vbGVhblxuICApIHtcbiAgICBzdXBlci5vbkNoZWNrRm9yRXJyb3JzKGVycm9ycywgaXNPblZhbHVlQ2hhbmdlZCk7XG4gICAgaWYgKCF0aGlzLmhhc090aGVyIHx8ICF0aGlzLmlzT3RoZXJTZWxlY3RlZCB8fCB0aGlzLmNvbW1lbnQpIHJldHVybjtcbiAgICBlcnJvcnMucHVzaChuZXcgT3RoZXJFbXB0eUVycm9yKHRoaXMub3RoZXJFcnJvclRleHQsIHRoaXMpKTtcbiAgfVxuICBwdWJsaWMgc2V0U3VydmV5SW1wbCh2YWx1ZTogSVN1cnZleUltcGwsIGlzTGlnaHQ/OiBib29sZWFuKSB7XG4gICAgc3VwZXIuc2V0U3VydmV5SW1wbCh2YWx1ZSwgaXNMaWdodCk7XG4gICAgdGhpcy5ydW5DaG9pY2VzQnlVcmwoKTtcbiAgICBpZiAodGhpcy5pc0FkZERlZmF1bHRJdGVtcykge1xuICAgICAgdGhpcy51cGRhdGVWaXNpYmxlQ2hvaWNlcygpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgc2V0U3VydmV5Q29yZSh2YWx1ZTogSVN1cnZleSkge1xuICAgIHN1cGVyLnNldFN1cnZleUNvcmUodmFsdWUpO1xuICAgIGlmICghIXZhbHVlICYmICEhdGhpcy5jaG9pY2VzRnJvbVF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRTdG9yZU90aGVyc0FzQ29tbWVudCgpIHtcbiAgICBpZiAodGhpcy5pc1NldHRpbmdEZWZhdWx0VmFsdWUpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5zdG9yZU90aGVyc0FzQ29tbWVudCA9PT0gdHJ1ZSB8fFxuICAgICAgKHRoaXMuc3RvcmVPdGhlcnNBc0NvbW1lbnQgPT0gXCJkZWZhdWx0XCIgJiZcbiAgICAgICAgKHRoaXMuc3VydmV5ICE9IG51bGwgPyB0aGlzLnN1cnZleS5zdG9yZU90aGVyc0FzQ29tbWVudCA6IHRydWUpKSB8fFxuICAgICAgKCF0aGlzLmNob2ljZXNCeVVybC5pc0VtcHR5ICYmICF0aGlzLmNob2ljZXNGcm9tVXJsKVxuICAgICk7XG4gIH1cbiAgb25TdXJ2ZXlMb2FkKCkge1xuICAgIHRoaXMucnVuQ2hvaWNlc0J5VXJsKCk7XG4gICAgdGhpcy5vblZpc2libGVDaG9pY2VzQ2hhbmdlZCgpO1xuICAgIHN1cGVyLm9uU3VydmV5TG9hZCgpO1xuICB9XG4gIG9uQW55VmFsdWVDaGFuZ2VkKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyLm9uQW55VmFsdWVDaGFuZ2VkKG5hbWUpO1xuICAgIGlmIChuYW1lICE9IHRoaXMuZ2V0VmFsdWVOYW1lKCkpIHtcbiAgICAgIHRoaXMucnVuQ2hvaWNlc0J5VXJsKCk7XG4gICAgfVxuICAgIGlmICghIW5hbWUgJiYgbmFtZSA9PSB0aGlzLmNob2ljZXNGcm9tUXVlc3Rpb24pIHtcbiAgICAgIHRoaXMub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgdXBkYXRlVmFsdWVGcm9tU3VydmV5KG5ld1ZhbHVlOiBhbnkpIHtcbiAgICB2YXIgbmV3Q29tbWVudCA9IFwiXCI7XG4gICAgaWYgKFxuICAgICAgdGhpcy5oYXNPdGhlciAmJlxuICAgICAgIXRoaXMuaXNSdW5uaW5nQ2hvaWNlcyAmJlxuICAgICAgIXRoaXMuY2hvaWNlc0J5VXJsLmlzUnVubmluZyAmJlxuICAgICAgdGhpcy5nZXRTdG9yZU90aGVyc0FzQ29tbWVudCgpXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5oYXNVbmtub3duVmFsdWUobmV3VmFsdWUpICYmICF0aGlzLmdldEhhc090aGVyKG5ld1ZhbHVlKSkge1xuICAgICAgICBuZXdDb21tZW50ID0gdGhpcy5nZXRDb21tZW50RnJvbVZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgbmV3VmFsdWUgPSB0aGlzLnNldE90aGVyVmFsdWVJbnRvVmFsdWUobmV3VmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3Q29tbWVudCA9IHRoaXMuZGF0YS5nZXRDb21tZW50KHRoaXMuZ2V0VmFsdWVOYW1lKCkpO1xuICAgICAgfVxuICAgIH1cbiAgICBzdXBlci51cGRhdGVWYWx1ZUZyb21TdXJ2ZXkobmV3VmFsdWUpO1xuICAgIGlmICghIW5ld0NvbW1lbnQpIHtcbiAgICAgIHRoaXMuc2V0TmV3Q29tbWVudChuZXdDb21tZW50KTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldENvbW1lbnRGcm9tVmFsdWUobmV3VmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ld1ZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBzZXRPdGhlclZhbHVlSW50b1ZhbHVlKG5ld1ZhbHVlOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLm90aGVySXRlbS52YWx1ZTtcbiAgfVxuICBwcml2YXRlIGlzUnVubmluZ0Nob2ljZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBydW5DaG9pY2VzQnlVcmwoKSB7XG4gICAgaWYgKCF0aGlzLmNob2ljZXNCeVVybCB8fCB0aGlzLmlzTG9hZGluZ0Zyb21Kc29uIHx8IHRoaXMuaXNSdW5uaW5nQ2hvaWNlcylcbiAgICAgIHJldHVybjtcbiAgICB2YXIgcHJvY2Vzc29yID0gdGhpcy5zdXJ2ZXlJbXBsXG4gICAgICA/IHRoaXMuc3VydmV5SW1wbC5nZXRUZXh0UHJvY2Vzc29yKClcbiAgICAgIDogdGhpcy50ZXh0UHJvY2Vzc29yO1xuICAgIGlmICghcHJvY2Vzc29yKSBwcm9jZXNzb3IgPSB0aGlzLnN1cnZleTtcbiAgICBpZiAoIXByb2Nlc3NvcikgcmV0dXJuO1xuICAgIHRoaXMuaXNSZWFkeVZhbHVlID0gdGhpcy5pc0Nob2ljZXNMb2FkZWQgfHwgdGhpcy5jaG9pY2VzQnlVcmwuaXNFbXB0eTtcbiAgICB0aGlzLmlzUnVubmluZ0Nob2ljZXMgPSB0cnVlO1xuICAgIHRoaXMuY2hvaWNlc0J5VXJsLnJ1bihwcm9jZXNzb3IpO1xuICAgIHRoaXMuaXNSdW5uaW5nQ2hvaWNlcyA9IGZhbHNlO1xuICB9XG4gIHByaXZhdGUgaXNGaXJzdExvYWRDaG9pY2VzRnJvbVVybCA9IHRydWU7XG4gIHByb3RlY3RlZCBvbkJlZm9yZVNlbmRSZXF1ZXN0KCkge1xuICAgIGlmIChzZXR0aW5ncy5kaXNhYmxlT25HZXR0aW5nQ2hvaWNlc0Zyb21XZWIgPT09IHRydWUgJiYgIXRoaXMuaXNSZWFkT25seSkge1xuICAgICAgdGhpcy5lbmFibGVPbkxvYWRpbmdDaG9pY2VzID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVhZE9ubHkgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgb25Mb2FkQ2hvaWNlc0Zyb21VcmwoYXJyYXk6IEFycmF5PEl0ZW1WYWx1ZT4pIHtcbiAgICBpZiAodGhpcy5lbmFibGVPbkxvYWRpbmdDaG9pY2VzKSB7XG4gICAgICB0aGlzLnJlYWRPbmx5ID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc1JlYWRPbmx5KSB7XG4gICAgICB2YXIgZXJyb3JzID0gW107XG4gICAgICBpZiAodGhpcy5jaG9pY2VzQnlVcmwgJiYgdGhpcy5jaG9pY2VzQnlVcmwuZXJyb3IpIHtcbiAgICAgICAgZXJyb3JzLnB1c2godGhpcy5jaG9pY2VzQnlVcmwuZXJyb3IpO1xuICAgICAgfVxuICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XG4gICAgfVxuICAgIHZhciBuZXdDaG9pY2VzID0gbnVsbDtcbiAgICB2YXIgY2hlY2tDYWNoZWRWYWx1ZXNPbkV4aXN0aW5nID0gdHJ1ZTtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzRmlyc3RMb2FkQ2hvaWNlc0Zyb21VcmwgJiZcbiAgICAgICF0aGlzLmNhY2hlZFZhbHVlRm9yVXJsUmVxdWVzdHMgJiZcbiAgICAgIHRoaXMuZGVmYXVsdFZhbHVlXG4gICAgKSB7XG4gICAgICB0aGlzLmNhY2hlZFZhbHVlRm9yVXJsUmVxdWVzdHMgPSB0aGlzLmRlZmF1bHRWYWx1ZTtcbiAgICAgIGNoZWNrQ2FjaGVkVmFsdWVzT25FeGlzdGluZyA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkodGhpcy5jYWNoZWRWYWx1ZUZvclVybFJlcXVlc3RzKSkge1xuICAgICAgdGhpcy5jYWNoZWRWYWx1ZUZvclVybFJlcXVlc3RzID0gdGhpcy52YWx1ZTtcbiAgICB9XG4gICAgdGhpcy5pc0ZpcnN0TG9hZENob2ljZXNGcm9tVXJsID0gZmFsc2U7XG4gICAgdmFyIGNhY2hlZFZhbHVlcyA9IHRoaXMuY3JlYXRlQ2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0cyhcbiAgICAgIHRoaXMuY2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0cyxcbiAgICAgIGNoZWNrQ2FjaGVkVmFsdWVzT25FeGlzdGluZ1xuICAgICk7XG4gICAgaWYgKGFycmF5ICYmIChhcnJheS5sZW5ndGggPiAwIHx8IHRoaXMuY2hvaWNlc0J5VXJsLmFsbG93RW1wdHlSZXNwb25zZSkpIHtcbiAgICAgIG5ld0Nob2ljZXMgPSBuZXcgQXJyYXk8SXRlbVZhbHVlPigpO1xuICAgICAgSXRlbVZhbHVlLnNldERhdGEobmV3Q2hvaWNlcywgYXJyYXkpO1xuICAgIH1cbiAgICBpZiAoISFuZXdDaG9pY2VzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld0Nob2ljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbmV3Q2hvaWNlc1tpXS5sb2NPd25lciA9IHRoaXM7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2hvaWNlc0Zyb21VcmwgPSBuZXdDaG9pY2VzO1xuICAgIHRoaXMuZmlsdGVySXRlbXMoKTtcbiAgICB0aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XG4gICAgaWYgKG5ld0Nob2ljZXMpIHtcbiAgICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMudXBkYXRlQ2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0cyhcbiAgICAgICAgY2FjaGVkVmFsdWVzLFxuICAgICAgICBuZXdDaG9pY2VzXG4gICAgICApO1xuICAgICAgaWYgKCEhbmV3VmFsdWUgJiYgIXRoaXMuaXNSZWFkT25seSkge1xuICAgICAgICB2YXIgaGFzQ2hhbmdlZCA9ICF0aGlzLmlzVHdvVmFsdWVFcXVhbHModGhpcy52YWx1ZSwgbmV3VmFsdWUudmFsdWUpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICghdGhpcy5pc1ZhbHVlRW1wdHkobmV3VmFsdWUudmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLmFsbG93Tm90aWZ5VmFsdWVDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNldFF1ZXN0aW9uVmFsdWUodW5kZWZpbmVkLCB0cnVlLCBmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQgPSBoYXNDaGFuZ2VkO1xuICAgICAgICAgIGlmIChoYXNDaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWUudmFsdWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZS52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRoaXMuYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2hvaWNlc0xvYWRlZCgpO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlQ2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0cyhcbiAgICB2YWw6IGFueSxcbiAgICBjaGVja09uRXhpc3Rpbmc6IGJvb2xlYW5cbiAgKTogYW55IHtcbiAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkodmFsKSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgdmFyIHJlcyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzLnB1c2godGhpcy5jcmVhdGVDYWNoZWRWYWx1ZUZvclVybFJlcXVlc3RzKHZhbFtpXSwgdHJ1ZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgdmFyIGlzRXhpc3RzID0gY2hlY2tPbkV4aXN0aW5nID8gIXRoaXMuaGFzVW5rbm93blZhbHVlKHZhbCkgOiB0cnVlO1xuICAgIHJldHVybiB7IHZhbHVlOiB2YWwsIGlzRXhpc3RzOiBpc0V4aXN0cyB9O1xuICB9XG4gIHByaXZhdGUgdXBkYXRlQ2FjaGVkVmFsdWVGb3JVcmxSZXF1ZXN0cyhcbiAgICB2YWw6IGFueSxcbiAgICBuZXdDaG9pY2VzOiBBcnJheTxJdGVtVmFsdWU+XG4gICk6IGFueSB7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KHZhbCkpIHJldHVybiBudWxsO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIHZhciByZXMgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB1cGRhdGVkVmFsdWUgPSB0aGlzLnVwZGF0ZUNhY2hlZFZhbHVlRm9yVXJsUmVxdWVzdHMoXG4gICAgICAgICAgdmFsW2ldLFxuICAgICAgICAgIG5ld0Nob2ljZXNcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHVwZGF0ZWRWYWx1ZSAmJiAhdGhpcy5pc1ZhbHVlRW1wdHkodXBkYXRlZFZhbHVlLnZhbHVlKSkge1xuICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IHVwZGF0ZWRWYWx1ZS52YWx1ZTtcbiAgICAgICAgICB2YXIgaXRlbSA9IEl0ZW1WYWx1ZS5nZXRJdGVtQnlWYWx1ZShuZXdDaG9pY2VzLCB1cGRhdGVkVmFsdWUudmFsdWUpO1xuICAgICAgICAgIGlmICghIWl0ZW0pIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gaXRlbS52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzLnB1c2gobmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4geyB2YWx1ZTogcmVzIH07XG4gICAgfVxuICAgIHZhciB2YWx1ZSA9XG4gICAgICB2YWwuaXNFeGlzdHMgJiYgdGhpcy5oYXNVbmtub3duVmFsdWUodmFsLnZhbHVlKSA/IG51bGwgOiB2YWwudmFsdWU7XG4gICAgdmFyIGl0ZW0gPSBJdGVtVmFsdWUuZ2V0SXRlbUJ5VmFsdWUobmV3Q2hvaWNlcywgdmFsdWUpO1xuICAgIGlmICghIWl0ZW0pIHtcbiAgICAgIHZhbHVlID0gaXRlbS52YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlIH07XG4gIH1cbiAgcHJpdmF0ZSBpc1VwZGF0aW5nQ2hvaWNlc0RlcGVuZGVkUXVlc3Rpb25zID0gZmFsc2U7XG4gIHByb3RlY3RlZCB1cGRhdGVDaG9pY2VzRGVwZW5kZWRRdWVzdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMuaXNVcGRhdGluZ0Nob2ljZXNEZXBlbmRlZFF1ZXN0aW9ucykgcmV0dXJuO1xuICAgIHRoaXMuaXNVcGRhdGluZ0Nob2ljZXNEZXBlbmRlZFF1ZXN0aW9ucyA9IHRydWU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRlcGVuZGVkUXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmRlcGVuZGVkUXVlc3Rpb25zW2ldLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XG4gICAgICB0aGlzLmRlcGVuZGVkUXVlc3Rpb25zW2ldLnVwZGF0ZUNob2ljZXNEZXBlbmRlZFF1ZXN0aW9ucygpO1xuICAgIH1cbiAgICB0aGlzLmlzVXBkYXRpbmdDaG9pY2VzRGVwZW5kZWRRdWVzdGlvbnMgPSBmYWxzZTtcbiAgfVxuICBvblN1cnZleVZhbHVlQ2hhbmdlZChuZXdWYWx1ZTogYW55KSB7XG4gICAgc3VwZXIub25TdXJ2ZXlWYWx1ZUNoYW5nZWQobmV3VmFsdWUpO1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgdGhpcy51cGRhdGVDaG9pY2VzRGVwZW5kZWRRdWVzdGlvbnMoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKSB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVDaG9pY2VzKCk7XG4gICAgdGhpcy51cGRhdGVWaXNpYmlsaXR5QmFzZWRPbkNob2ljZXMoKTtcbiAgICBpZiAoISF0aGlzLnZpc2libGVDaG9pY2VzQ2hhbmdlZENhbGxiYWNrKSB7XG4gICAgICB0aGlzLnZpc2libGVDaG9pY2VzQ2hhbmdlZENhbGxiYWNrKCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlQ2hvaWNlc0RlcGVuZGVkUXVlc3Rpb25zKCk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVWaXNpYmlsaXR5QmFzZWRPbkNob2ljZXMoKSB7XG4gICAgaWYgKHRoaXMuaGlkZUlmQ2hvaWNlc0VtcHR5KSB7XG4gICAgICB2YXIgZmlsdGVyZWRDaG9pY2VzID0gdGhpcy5nZXRGaWx0ZXJlZENob2ljZXMoKTtcbiAgICAgIHRoaXMudmlzaWJsZSA9ICFmaWx0ZXJlZENob2ljZXMgfHwgZmlsdGVyZWRDaG9pY2VzLmxlbmd0aCA+IDA7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgc29ydFZpc2libGVDaG9pY2VzKGFycmF5OiBBcnJheTxJdGVtVmFsdWU+KTogQXJyYXk8SXRlbVZhbHVlPiB7XG4gICAgdmFyIG9yZGVyID0gdGhpcy5jaG9pY2VzT3JkZXIudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAob3JkZXIgPT0gXCJhc2NcIikgcmV0dXJuIHRoaXMuc29ydEFycmF5KGFycmF5LCAxKTtcbiAgICBpZiAob3JkZXIgPT0gXCJkZXNjXCIpIHJldHVybiB0aGlzLnNvcnRBcnJheShhcnJheSwgLTEpO1xuICAgIGlmIChvcmRlciA9PSBcInJhbmRvbVwiKSByZXR1cm4gdGhpcy5yYW5kb21pemVBcnJheShhcnJheSk7XG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG4gIHByaXZhdGUgc29ydEFycmF5KGFycmF5OiBBcnJheTxJdGVtVmFsdWU+LCBtdWx0OiBudW1iZXIpOiBBcnJheTxJdGVtVmFsdWU+IHtcbiAgICByZXR1cm4gYXJyYXkuc29ydChmdW5jdGlvbihhLCBiKSB7XG4gICAgICBpZiAoYS5jYWxjdWxhdGVkVGV4dCA8IGIuY2FsY3VsYXRlZFRleHQpIHJldHVybiAtMSAqIG11bHQ7XG4gICAgICBpZiAoYS5jYWxjdWxhdGVkVGV4dCA+IGIuY2FsY3VsYXRlZFRleHQpIHJldHVybiAxICogbXVsdDtcbiAgICAgIHJldHVybiAwO1xuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgcmFuZG9taXplQXJyYXkoYXJyYXk6IEFycmF5PEl0ZW1WYWx1ZT4pOiBBcnJheTxJdGVtVmFsdWU+IHtcbiAgICByZXR1cm4gSGVscGVycy5yYW5kb21pemVBcnJheTxJdGVtVmFsdWU+KGFycmF5KTtcbiAgfVxuICBwdWJsaWMgY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKSB7XG4gICAgaWYgKHRoaXMua2VlcEluY29ycmVjdFZhbHVlcyB8fCB0aGlzLmlzRW1wdHkoKSkgcmV0dXJuO1xuICAgIGlmIChcbiAgICAgICEhdGhpcy5zdXJ2ZXkgJiZcbiAgICAgIHRoaXMuc3VydmV5LnF1ZXN0aW9uQ291bnRCeVZhbHVlTmFtZSh0aGlzLmdldFZhbHVlTmFtZSgpKSA+IDFcbiAgICApXG4gICAgICByZXR1cm47XG4gICAgaWYgKFxuICAgICAgISF0aGlzLmNob2ljZXNCeVVybCAmJlxuICAgICAgIXRoaXMuY2hvaWNlc0J5VXJsLmlzRW1wdHkgJiZcbiAgICAgICghdGhpcy5jaG9pY2VzRnJvbVVybCB8fCB0aGlzLmNob2ljZXNGcm9tVXJsLmxlbmd0aCA9PSAwKVxuICAgIClcbiAgICAgIHJldHVybjtcbiAgICBpZiAodGhpcy5jbGVhckluY29ycmVjdFZhbHVlc0NhbGxiYWNrKSB7XG4gICAgICB0aGlzLmNsZWFySW5jb3JyZWN0VmFsdWVzQ2FsbGJhY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbGVhckluY29ycmVjdFZhbHVlc0NvcmUoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGNsZWFyVmFsdWVJZkludmlzaWJsZSgpIHtcbiAgICBzdXBlci5jbGVhclZhbHVlSWZJbnZpc2libGUoKTtcbiAgICB0aGlzLmNsZWFySW5jb3JyZWN0VmFsdWVzKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBpdGVtIGlzIHNlbGVjdGVkXG4gICAqIEBwYXJhbSBpdGVtIGNoZWNrYm94IG9yIHJhZGlvIGl0ZW0gdmFsdWVcbiAgICovXG4gIHB1YmxpYyBpc0l0ZW1TZWxlY3RlZChpdGVtOiBJdGVtVmFsdWUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXRlbS52YWx1ZSA9PT0gdGhpcy52YWx1ZTtcbiAgfVxuICBwcml2YXRlIGNsZWFyRGlzYWJsZWRWYWx1ZXMoKSB7XG4gICAgaWYgKCF0aGlzLnN1cnZleSB8fCAhdGhpcy5zdXJ2ZXkuY2xlYXJWYWx1ZU9uRGlzYWJsZUl0ZW1zKSByZXR1cm47XG4gICAgdGhpcy5jbGVhckRpc2FibGVkVmFsdWVzQ29yZSgpO1xuICB9XG4gIHByb3RlY3RlZCBjbGVhckluY29ycmVjdFZhbHVlc0NvcmUoKSB7XG4gICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgaWYgKHRoaXMuY2FuQ2xlYXJWYWx1ZUFuVW5rbm93KHZhbCkpIHtcbiAgICAgIHRoaXMuY2xlYXJWYWx1ZSgpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY2FuQ2xlYXJWYWx1ZUFuVW5rbm93KHZhbDogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmdldFN0b3JlT3RoZXJzQXNDb21tZW50KCkgJiYgdGhpcy5pc090aGVyU2VsZWN0ZWQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5oYXNVbmtub3duVmFsdWUodmFsLCB0cnVlLCB0cnVlLCB0cnVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2xlYXJEaXNhYmxlZFZhbHVlc0NvcmUoKSB7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZURpc2FibGVkKHRoaXMudmFsdWUpKSB7XG4gICAgICB0aGlzLmNsZWFyVmFsdWUoKTtcbiAgICB9XG4gIH1cbiAgY2xlYXJVbnVzZWRWYWx1ZXMoKSB7XG4gICAgc3VwZXIuY2xlYXJVbnVzZWRWYWx1ZXMoKTtcbiAgICBpZiAoIXRoaXMuaXNPdGhlclNlbGVjdGVkICYmICF0aGlzLmhhc0NvbW1lbnQpIHtcbiAgICAgIHRoaXMuY29tbWVudCA9IFwiXCI7XG4gICAgfVxuICB9XG4gIGdldENvbHVtbkNsYXNzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBDc3NDbGFzc0J1aWxkZXIoKVxuICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuY29sdW1uKVxuICAgICAgLmFwcGVuZChcInN2LXEtY29sdW1uLVwiICsgdGhpcy5jb2xDb3VudCwgdGhpcy5oYXNDb2x1bW5zKVxuICAgICAgLnRvU3RyaW5nKCk7XG4gIH1cbiAgZ2V0SXRlbUluZGV4KGl0ZW06IGFueSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUNob2ljZXMuaW5kZXhPZihpdGVtKTtcbiAgfVxuICBnZXRJdGVtQ2xhc3MoaXRlbTogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCBvcHRpb25zOiBhbnkgPSB7IGl0ZW06IGl0ZW0gfTtcbiAgICB2YXIgcmVzID0gdGhpcy5nZXRJdGVtQ2xhc3NDb3JlKGl0ZW0sIG9wdGlvbnMpO1xuICAgIG9wdGlvbnMuY3NzID0gcmVzO1xuICAgIGlmKCEhdGhpcy5zdXJ2ZXkpIHtcbiAgICAgIHRoaXMuc3VydmV5LnVwZGF0ZUNob2ljZUl0ZW1Dc3ModGhpcywgb3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zLmNzcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0SXRlbUNsYXNzQ29yZShpdGVtOiBhbnksIG9wdGlvbnM6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgYnVpbGRlciA9IG5ldyBDc3NDbGFzc0J1aWxkZXIoKVxuICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuaXRlbSlcbiAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLml0ZW1JbmxpbmUsICF0aGlzLmhhc0NvbHVtbnMgJiYgdGhpcy5jb2xDb3VudCA9PT0gMClcbiAgICAgIC5hcHBlbmQoXCJzdi1xLWNvbC1cIiArIHRoaXMuY29sQ291bnQsICF0aGlzLmhhc0NvbHVtbnMgJiYgdGhpcy5jb2xDb3VudCAhPT0gMCk7XG5cbiAgICBjb25zdCBpc0Rpc2FibGVkID0gdGhpcy5pc1JlYWRPbmx5IHx8ICFpdGVtLmlzRW5hYmxlZDtcbiAgICBjb25zdCBpc0NoZWNrZWQgPSB0aGlzLmlzSXRlbVNlbGVjdGVkKGl0ZW0pIHx8XG4gICAgICAodGhpcy5pc090aGVyU2VsZWN0ZWQgJiYgdGhpcy5vdGhlckl0ZW0udmFsdWUgPT09IGl0ZW0udmFsdWUpO1xuICAgIGNvbnN0IGFsbG93SG92ZXIgPSAhaXNEaXNhYmxlZCAmJiAhaXNDaGVja2VkICYmICEoISF0aGlzLnN1cnZleSAmJiB0aGlzLnN1cnZleS5pc0Rlc2lnbk1vZGUpO1xuICAgIGNvbnN0IGlzTm9uZSA9IGl0ZW0gPT09IHRoaXMubm9uZUl0ZW07XG4gICAgb3B0aW9ucy5pc0Rpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICBvcHRpb25zLmlzQ2hlY2tlZCA9IGlzQ2hlY2tlZDtcbiAgICBvcHRpb25zLmlzTm9uZSA9IGlzTm9uZTtcblxuICAgIHJldHVybiBidWlsZGVyLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuaXRlbURpc2FibGVkLCBpc0Rpc2FibGVkKVxuICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuaXRlbUNoZWNrZWQsIGlzQ2hlY2tlZClcbiAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLml0ZW1Ib3ZlciwgYWxsb3dIb3ZlcilcbiAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLml0ZW1Ob25lLCBpc05vbmUpXG4gICAgICAudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGdldExhYmVsQ2xhc3MoaXRlbTogSXRlbVZhbHVlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IENzc0NsYXNzQnVpbGRlcigpXG4gICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5sYWJlbClcbiAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmxhYmVsQ2hlY2tlZCwgdGhpcy5pc0l0ZW1TZWxlY3RlZChpdGVtKSlcbiAgICAgIC50b1N0cmluZygpO1xuICB9XG4gIGdldENvbnRyb2xMYWJlbENsYXNzKGl0ZW06IEl0ZW1WYWx1ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBDc3NDbGFzc0J1aWxkZXIoKVxuICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuY29udHJvbExhYmVsKVxuICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuY29udHJvbExhYmVsQ2hlY2tlZCwgdGhpcy5pc0l0ZW1TZWxlY3RlZChpdGVtKSlcbiAgICAgIC50b1N0cmluZygpO1xuICB9XG4gIGdldCBjb2x1bW5zKCkge1xuICAgIHZhciBjb2x1bW5zID0gW107XG4gICAgdmFyIGNvbENvdW50ID0gdGhpcy5jb2xDb3VudDtcbiAgICBpZiAodGhpcy5oYXNDb2x1bW5zICYmIHRoaXMudmlzaWJsZUNob2ljZXMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHNldHRpbmdzLnNob3dJdGVtc0luT3JkZXIgPT0gXCJjb2x1bW5cIikge1xuICAgICAgICB2YXIgcHJldkluZGV4ID0gMDtcbiAgICAgICAgdmFyIGxlZnRFbGVtZW50c0NvdW50ID0gdGhpcy52aXNpYmxlQ2hvaWNlcy5sZW5ndGggJSBjb2xDb3VudDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2xDb3VudDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGNvbHVtbiA9IFtdO1xuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICB2YXIgaiA9IHByZXZJbmRleDtcbiAgICAgICAgICAgIGogPCBwcmV2SW5kZXggKyBNYXRoLmZsb29yKHRoaXMudmlzaWJsZUNob2ljZXMubGVuZ3RoIC8gY29sQ291bnQpO1xuICAgICAgICAgICAgaisrXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb2x1bW4ucHVzaCh0aGlzLnZpc2libGVDaG9pY2VzW2pdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGxlZnRFbGVtZW50c0NvdW50ID4gMCkge1xuICAgICAgICAgICAgbGVmdEVsZW1lbnRzQ291bnQtLTtcbiAgICAgICAgICAgIGNvbHVtbi5wdXNoKHRoaXMudmlzaWJsZUNob2ljZXNbal0pO1xuICAgICAgICAgICAgaisrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwcmV2SW5kZXggPSBqO1xuICAgICAgICAgIGNvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbENvdW50OyBpKyspIHtcbiAgICAgICAgICB2YXIgY29sdW1uID0gW107XG4gICAgICAgICAgZm9yICh2YXIgaiA9IGk7IGogPCB0aGlzLnZpc2libGVDaG9pY2VzLmxlbmd0aDsgaiArPSBjb2xDb3VudCkge1xuICAgICAgICAgICAgY29sdW1uLnB1c2godGhpcy52aXNpYmxlQ2hvaWNlc1tqXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb2x1bW5zO1xuICB9XG4gIGdldCBoYXNDb2x1bW5zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbENvdW50ID4gMTtcbiAgfVxuICBwdWJsaWMgY2hvaWNlc0xvYWRlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzQ2hvaWNlc0xvYWRlZCA9IHRydWU7XG4gICAgbGV0IG9sZElzUmVhZHk6IGJvb2xlYW4gPSB0aGlzLmlzUmVhZHlWYWx1ZTtcbiAgICB0aGlzLmlzUmVhZHlWYWx1ZSA9IHRydWU7XG4gICAgdGhpcy5vblJlYWR5Q2hhbmdlZCAmJlxuICAgICAgdGhpcy5vblJlYWR5Q2hhbmdlZC5maXJlKHRoaXMsIHtcbiAgICAgICAgcXVlc3Rpb246IHRoaXMsXG4gICAgICAgIGlzUmVhZHk6IHRydWUsXG4gICAgICAgIG9sZElzUmVhZHk6IG9sZElzUmVhZHksXG4gICAgICB9KTtcbiAgICBpZih0aGlzLnN1cnZleSkge1xuICAgICAgdGhpcy5zdXJ2ZXkubG9hZGVkQ2hvaWNlc0Zyb21TZXJ2ZXIodGhpcyk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRJdGVtVmFsdWVXcmFwcGVyQ29tcG9uZW50TmFtZShpdGVtOiBJdGVtVmFsdWUpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN1cnZleTogU3VydmV5TW9kZWwgPSB0aGlzLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgICBpZiAoc3VydmV5KSB7XG4gICAgICByZXR1cm4gc3VydmV5LmdldEl0ZW1WYWx1ZVdyYXBwZXJDb21wb25lbnROYW1lKGl0ZW0sIHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gU3VydmV5TW9kZWwuVGVtcGxhdGVSZW5kZXJlckNvbXBvbmVudE5hbWU7XG4gIH1cbiAgcHVibGljIGdldEl0ZW1WYWx1ZVdyYXBwZXJDb21wb25lbnREYXRhKGl0ZW06IEl0ZW1WYWx1ZSk6IGFueSB7XG4gICAgY29uc3Qgc3VydmV5OiBTdXJ2ZXlNb2RlbCA9IHRoaXMuc3VydmV5IGFzIFN1cnZleU1vZGVsO1xuICAgIGlmIChzdXJ2ZXkpIHtcbiAgICAgIHJldHVybiBzdXJ2ZXkuZ2V0SXRlbVZhbHVlV3JhcHBlckNvbXBvbmVudERhdGEoaXRlbSwgdGhpcyk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtO1xuICB9XG59XG4vKipcbiAqIEEgYmFzZSBjbGFzcyBmb3IgY2hlY2tib3ggYW5kIHJhZGlvZ3JvdXAgcXVlc3Rpb25zLiBJdCBpbnRyb2R1Y2VkIGEgY29sQ291bnQgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkNoZWNrYm94QmFzZSBleHRlbmRzIFF1ZXN0aW9uU2VsZWN0QmFzZSB7XG4gIGNvbENvdW50Q2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgfVxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBjb2x1bW5zIGZvciByYWRpb2dyb3VwIGFuZCBjaGVja2JveCBxdWVzdGlvbnMuIEl0ZW1zIGFyZSByZW5kcmVkIGluIG9uZSBsaW5lIGlmIHRoZSB2YWx1ZSBpcyAwLlxuICAgKi9cbiAgcHVibGljIGdldCBjb2xDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb2xDb3VudFwiLCB0aGlzLmlzRmxvd0xheW91dCA/IDAgOiAxKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbENvdW50KHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodmFsdWUgPCAwIHx8IHZhbHVlID4gNSB8fCB0aGlzLmlzRmxvd0xheW91dCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbENvdW50XCIsIHZhbHVlKTtcbiAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLmNvbENvdW50Q2hhbmdlZENhbGxiYWNrKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25QYXJlbnRDaGFuZ2VkKCkge1xuICAgIHN1cGVyLm9uUGFyZW50Q2hhbmdlZCgpO1xuICAgIGlmICh0aGlzLmlzRmxvd0xheW91dCkge1xuICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29sQ291bnRcIiwgbnVsbCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBvblBhcmVudFF1ZXN0aW9uQ2hhbmdlZCgpIHtcbiAgICB0aGlzLm9uVmlzaWJsZUNob2ljZXNDaGFuZ2VkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFNlYXJjaGFibGVJdGVtVmFsdWVLZXlzKGtleXM6IEFycmF5PHN0cmluZz4pIHtcbiAgICBrZXlzLnB1c2goXCJjaG9pY2VzXCIpO1xuICB9XG4gIHB1YmxpYyBnZXRJdGVtRW5hYmxlZChpdGVtOiBJdGVtVmFsdWUpIHtcbiAgICByZXR1cm4gIXRoaXMuaXNJbnB1dFJlYWRPbmx5ICYmIGl0ZW0uaXNFbmFibGVkO1xuICB9XG4gIHB1YmxpYyBpc090aGVySXRlbShpdGVtOiBJdGVtVmFsdWUpXG4gIHtcbiAgICByZXR1cm4gdGhpcy5oYXNPdGhlciAmJiBpdGVtLnZhbHVlID09IHRoaXMub3RoZXJJdGVtLnZhbHVlO1xuICB9XG59XG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcInNlbGVjdGJhc2VcIixcbiAgW1xuICAgIHsgbmFtZTogXCJoYXNDb21tZW50OnN3aXRjaFwiLCBsYXlvdXQ6IFwicm93XCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImNvbW1lbnRUZXh0XCIsXG4gICAgICBkZXBlbmRzT246IFwiaGFzQ29tbWVudFwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gb2JqLmhhc0NvbW1lbnQ7XG4gICAgICB9LFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0NvbW1lbnRUZXh0XCIsXG4gICAgICBsYXlvdXQ6IFwicm93XCIsXG4gICAgfSxcbiAgICBcImNob2ljZXNGcm9tUXVlc3Rpb246cXVlc3Rpb25fc2VsZWN0YmFzZVwiLFxuICAgIHtcbiAgICAgIG5hbWU6IFwiY2hvaWNlczppdGVtdmFsdWVbXVwiLFxuICAgICAgYmFzZVZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJjaG9pY2VzX0l0ZW1cIik7XG4gICAgICB9LFxuICAgICAgZGVwZW5kc09uOiBcImNob2ljZXNGcm9tUXVlc3Rpb25cIixcbiAgICAgIHZpc2libGVJZjogKG9iajogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiAhb2JqLmNob2ljZXNGcm9tUXVlc3Rpb247XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJjaG9pY2VzRnJvbVF1ZXN0aW9uTW9kZVwiLFxuICAgICAgZGVmYXVsdDogXCJhbGxcIixcbiAgICAgIGNob2ljZXM6IFtcImFsbFwiLCBcInNlbGVjdGVkXCIsIFwidW5zZWxlY3RlZFwiXSxcbiAgICAgIGRlcGVuZHNPbjogXCJjaG9pY2VzRnJvbVF1ZXN0aW9uXCIsXG4gICAgICB2aXNpYmxlSWY6IChvYmo6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gISFvYmouY2hvaWNlc0Zyb21RdWVzdGlvbjtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImNob2ljZXNPcmRlclwiLFxuICAgICAgZGVmYXVsdDogXCJub25lXCIsXG4gICAgICBjaG9pY2VzOiBbXCJub25lXCIsIFwiYXNjXCIsIFwiZGVzY1wiLCBcInJhbmRvbVwiXSxcbiAgICAgIGRlcGVuZHNPbjogXCJjaG9pY2VzRnJvbVF1ZXN0aW9uXCIsXG4gICAgICB2aXNpYmxlSWY6IChvYmo6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gIW9iai5jaG9pY2VzRnJvbVF1ZXN0aW9uO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiY2hvaWNlc0J5VXJsOnJlc3RmdWxsXCIsXG4gICAgICBjbGFzc05hbWU6IFwiQ2hvaWNlc1Jlc3RmdWxcIixcbiAgICAgIG9uR2V0VmFsdWU6IGZ1bmN0aW9uKG9iajogYW55KSB7XG4gICAgICAgIHJldHVybiBvYmouY2hvaWNlc0J5VXJsLmdldERhdGEoKTtcbiAgICAgIH0sXG4gICAgICBvblNldFZhbHVlOiBmdW5jdGlvbihvYmo6IGFueSwgdmFsdWU6IGFueSkge1xuICAgICAgICBvYmouY2hvaWNlc0J5VXJsLnNldERhdGEodmFsdWUpO1xuICAgICAgfSxcbiAgICB9LFxuICAgIFwiaGlkZUlmQ2hvaWNlc0VtcHR5OmJvb2xlYW5cIixcbiAgICB7XG4gICAgICBuYW1lOiBcImNob2ljZXNWaXNpYmxlSWY6Y29uZGl0aW9uXCIsXG4gICAgICBkZXBlbmRzT246IFwiY2hvaWNlc0Zyb21RdWVzdGlvblwiLFxuICAgICAgdmlzaWJsZUlmOiAob2JqOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuICFvYmouY2hvaWNlc0Zyb21RdWVzdGlvbjtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImNob2ljZXNFbmFibGVJZjpjb25kaXRpb25cIixcbiAgICAgIGRlcGVuZHNPbjogXCJjaG9pY2VzRnJvbVF1ZXN0aW9uXCIsXG4gICAgICB2aXNpYmxlSWY6IChvYmo6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gIW9iai5jaG9pY2VzRnJvbVF1ZXN0aW9uO1xuICAgICAgfSxcbiAgICB9LFxuICAgIFwiaGFzT3RoZXI6Ym9vbGVhblwiLFxuICAgIFwiaGFzTm9uZTpib29sZWFuXCIsXG4gICAge1xuICAgICAgbmFtZTogXCJvdGhlclBsYWNlSG9sZGVyXCIsXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jT3RoZXJQbGFjZUhvbGRlclwiLFxuICAgICAgZGVwZW5kc09uOiBcImhhc090aGVyXCIsXG4gICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uKG9iajogYW55KSB7XG4gICAgICAgIHJldHVybiBvYmouaGFzT3RoZXI7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJub25lVGV4dFwiLFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY05vbmVUZXh0XCIsXG4gICAgICBkZXBlbmRzT246IFwiaGFzTm9uZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gb2JqLmhhc05vbmU7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJvdGhlclRleHRcIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NPdGhlclRleHRcIixcbiAgICAgIGRlcGVuZHNPbjogXCJoYXNPdGhlclwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gb2JqLmhhc090aGVyO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwib3RoZXJFcnJvclRleHRcIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NPdGhlckVycm9yVGV4dFwiLFxuICAgICAgZGVwZW5kc09uOiBcImhhc090aGVyXCIsXG4gICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uKG9iajogYW55KSB7XG4gICAgICAgIHJldHVybiBvYmouaGFzT3RoZXI7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJzdG9yZU90aGVyc0FzQ29tbWVudFwiLFxuICAgICAgZGVmYXVsdDogXCJkZWZhdWx0XCIsXG4gICAgICBjaG9pY2VzOiBbXCJkZWZhdWx0XCIsIHRydWUsIGZhbHNlXSxcbiAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgIH0sXG4gIF0sXG4gIG51bGwsXG4gIFwicXVlc3Rpb25cIlxuKTtcblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJjaGVja2JveGJhc2VcIixcbiAgW1xuICAgIHtcbiAgICAgIG5hbWU6IFwiY29sQ291bnQ6bnVtYmVyXCIsXG4gICAgICBkZWZhdWx0OiAxLFxuICAgICAgY2hvaWNlczogWzAsIDEsIDIsIDMsIDQsIDVdLFxuICAgICAgbGF5b3V0OiBcInJvd1wiLFxuICAgIH0sXG4gIF0sXG4gIG51bGwsXG4gIFwic2VsZWN0YmFzZVwiXG4pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XG5pbXBvcnQgeyBwcm9wZXJ0eSwgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcbmltcG9ydCB7IENzc0NsYXNzQnVpbGRlciB9IGZyb20gXCIuL3V0aWxzL2Nzc0NsYXNzQnVpbGRlclwiO1xuaW1wb3J0IHsgcHJldmVudERlZmF1bHRzIH0gZnJvbSBcIi4vdXRpbHMvdXRpbHNcIjtcblxuLyoqXG4gKiBBIE1vZGVsIGZvciBhIGJvb2xlYW4gcXVlc3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkJvb2xlYW5Nb2RlbCBleHRlbmRzIFF1ZXN0aW9uIHtcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImxhYmVsRmFsc2VcIiwgdGhpcywgdHJ1ZSk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImxhYmVsVHJ1ZVwiLCB0aGlzLCB0cnVlKTtcbiAgICB0aGlzLmxvY0xhYmVsRmFsc2Uub25HZXRUZXh0Q2FsbGJhY2sgPSAodGV4dDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgIHJldHVybiAhIXRleHRcbiAgICAgICAgPyB0ZXh0XG4gICAgICAgIDogc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcImJvb2xlYW5VbmNoZWNrZWRMYWJlbFwiKTtcbiAgICB9O1xuICAgIHRoaXMubG9jTGFiZWxUcnVlLm9uR2V0VGV4dENhbGxiYWNrID0gKHRleHQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gISF0ZXh0XG4gICAgICAgID8gdGV4dFxuICAgICAgICA6IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJib29sZWFuQ2hlY2tlZExhYmVsXCIpO1xuICAgIH07XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJib29sZWFuXCI7XG4gIH1cbiAgaXNMYXlvdXRUeXBlU3VwcG9ydGVkKGxheW91dFR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkge1xuICAgIHJldHVybiB0aGlzLnJlbmRlckFzICE9PSBcImNoZWNrYm94XCI7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcXVlc3Rpb24gY2hlY2sgd2lsbCBiZSByZW5kZXJlZCBpbiBpbmRldGVybWluYXRlIG1vZGUuIHZhbHVlIGlzIGVtcHR5LlxuICAgKi9cbiAgcHVibGljIGdldCBpc0luZGV0ZXJtaW5hdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNFbXB0eSgpO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzVGl0bGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIEdldC9zZXQgcXVlc3Rpb24gdmFsdWUgaW4gMyBtb2RlczogaW5kZXRlcm1pbmF0ZSAodmFsdWUgaXMgZW1wdHkpLCB0cnVlIChjaGVjayBpcyBzZXQpIGFuZCBmYWxzZSAoY2hlY2sgaXMgdW5zZXQpLlxuICAgKiBAc2VlIHZhbHVlVHJ1ZVxuICAgKiBAc2VlIHZhbHVlRmFsc2VcbiAgICovXG4gIHB1YmxpYyBnZXQgY2hlY2tlZFZhbHVlKCk6IGFueSB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy52YWx1ZSA9PSB0aGlzLmdldFZhbHVlVHJ1ZSgpO1xuICB9XG4gIHB1YmxpYyBzZXQgY2hlY2tlZFZhbHVlKHZhbDogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNSZWFkT25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNldENoZWNrZWRWYWx1ZSh2YWwpO1xuICB9XG4gIHByaXZhdGUgc2V0Q2hlY2tlZFZhbHVlKHZhbDogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KHZhbCkpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsID09IHRydWUgPyB0aGlzLmdldFZhbHVlVHJ1ZSgpIDogdGhpcy5nZXRWYWx1ZUZhbHNlKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhlIGRlZmF1bHQgc3RhdGUgb2YgdGhlIGNoZWNrOiBcImluZGV0ZXJtaW5hdGVcIiAtIGRlZmF1bHQgKHZhbHVlIGlzIGVtcHR5L251bGwpLCBcInRydWVcIiAtIHZhbHVlIGVxdWFscyB2YWx1ZVRydWUgb3IgdHJ1ZSwgXCJmYWxzZVwiIC0gdmFsdWUgZXF1YWxzIHZhbHVlRmFsc2Ugb3IgZmFsc2UuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlZmF1bHRWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJkZWZhdWx0VmFsdWVcIik7XG4gIH1cbiAgcHVibGljIHNldCBkZWZhdWx0VmFsdWUodmFsOiBhbnkpIHtcbiAgICBpZiAodmFsID09PSB0cnVlKSB2YWwgPSBcInRydWVcIjtcbiAgICBpZiAodmFsID09PSBmYWxzZSkgdmFsID0gXCJmYWxzZVwiO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImRlZmF1bHRWYWx1ZVwiLCB2YWwpO1xuICAgIHRoaXMudXBkYXRlVmFsdWVXaXRoRGVmYXVsdHMoKTtcbiAgfVxuICBwdWJsaWMgZ2V0RGVmYXVsdFZhbHVlKCk6IGFueSB7XG4gICAgaWYgKHRoaXMuZGVmYXVsdFZhbHVlID09IFwiaW5kZXRlcm1pbmF0ZVwiKSByZXR1cm4gbnVsbDtcbiAgICBpZiAodGhpcy5kZWZhdWx0VmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdFZhbHVlID09IFwidHJ1ZVwiXG4gICAgICA/IHRoaXMuZ2V0VmFsdWVUcnVlKClcbiAgICAgIDogdGhpcy5nZXRWYWx1ZUZhbHNlKCk7XG4gIH1cbiAgcHVibGljIGdldCBsb2NUaXRsZSgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd1RpdGxlIHx8IHRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMubG9jTGFiZWwudGV4dClcbiAgICAgID8gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInRpdGxlXCIpXG4gICAgICA6IHRoaXMubG9jTGFiZWw7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBjaGVja2JveCBsYWJlbC4gSWYgaXQgaXMgZW1wdHkgYW5kIHNob3dUaXRsZSBpcyBmYWxzZSB0aGVuIHRpdGxlIGlzIHJlbmRlcmVkXG4gICAqIEBzZWUgc2hvd1RpdGxlXG4gICAqIEBzZWUgdGl0bGVcbiAgICovXG4gIEBwcm9wZXJ0eSh7IGxvY2FsaXphYmxlOiB0cnVlIH0pXG4gIGxhYmVsOiBzdHJpbmc7XG5cbiAgZ2V0IGxvY0Rpc3BsYXlMYWJlbCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgaWYgKHRoaXMubG9jTGFiZWwudGV4dCkgcmV0dXJuIHRoaXMubG9jTGFiZWw7XG4gICAgcmV0dXJuIHRoaXMuc2hvd1RpdGxlID8gdGhpcy5sb2NMYWJlbCA6IHRoaXMubG9jVGl0bGU7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHksIGlmIHlvdSB3YW50IHRvIGhhdmUgYSBkaWZmZXJlbnQgbGFiZWwgZm9yIHN0YXRlIHdoZW4gY2hlY2sgaXMgc2V0LlxuICAgKi9cbiAgcHVibGljIGdldCBsYWJlbFRydWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJsYWJlbFRydWVcIik7XG4gIH1cbiAgcHVibGljIHNldCBsYWJlbFRydWUodmFsOiBhbnkpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImxhYmVsVHJ1ZVwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NMYWJlbFRydWUoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwibGFiZWxUcnVlXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5LCBpZiB5b3Ugd2FudCB0byBoYXZlIGEgZGlmZmVyZW50IGxhYmVsIGZvciBzdGF0ZSB3aGVuIGNoZWNrIGlzIHVuc2V0LlxuICAgKi9cbiAgcHVibGljIGdldCBsYWJlbEZhbHNlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibGFiZWxGYWxzZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGxhYmVsRmFsc2UodmFsOiBhbnkpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImxhYmVsRmFsc2VcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jTGFiZWxGYWxzZSgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJsYWJlbEZhbHNlXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUgdG8gc2hvdyB0aGUgcXVlc3Rpb24gdGl0bGUuIEl0IGlzIGhpZGRlbiBieSBkZWZhdWx0LlxuICAgKi9cbiAgQHByb3BlcnR5KClcbiAgc2hvd1RpdGxlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSwgaWYgeW91IHdhbnQgdG8gaGF2ZSBhIGRpZmZlcmVudCB2YWx1ZSBmcm9tIHRydWUgd2hlbiBjaGVjayBpcyBzZXQuXG4gICAqL1xuICBAcHJvcGVydHkoKVxuICB2YWx1ZVRydWU6IGFueTtcbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5LCBpZiB5b3Ugd2FudCB0byBoYXZlIGEgZGlmZmVyZW50IHZhbHVlIGZyb20gZmFsc2Ugd2hlbiBjaGVjayBpcyB1bnNldC5cbiAgICovXG4gIEBwcm9wZXJ0eSgpXG4gIHZhbHVlRmFsc2U6IGFueTtcblxuICBwcml2YXRlIGdldFZhbHVlVHJ1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlVHJ1ZSA/IHRoaXMudmFsdWVUcnVlIDogdHJ1ZTtcbiAgfVxuICBwcml2YXRlIGdldFZhbHVlRmFsc2UoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZUZhbHNlID8gdGhpcy52YWx1ZUZhbHNlIDogZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIHNldERlZmF1bHRWYWx1ZSgpIHtcbiAgICBpZiAodGhpcy5kZWZhdWx0VmFsdWUgPT0gXCJ0cnVlXCIpIHRoaXMuc2V0Q2hlY2tlZFZhbHVlKHRydWUpO1xuICAgIGlmICh0aGlzLmRlZmF1bHRWYWx1ZSA9PSBcImZhbHNlXCIpIHRoaXMuc2V0Q2hlY2tlZFZhbHVlKGZhbHNlKTtcbiAgICBpZiAodGhpcy5kZWZhdWx0VmFsdWUgPT0gXCJpbmRldGVybWluYXRlXCIpIHRoaXMuc2V0Q2hlY2tlZFZhbHVlKG51bGwpO1xuICB9XG4gIHByb3RlY3RlZCBnZXREaXNwbGF5VmFsdWVDb3JlKGtleXNBc1RleHQ6IGJvb2xlYW4sIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICh2YWx1ZSA9PSB0aGlzLmdldFZhbHVlVHJ1ZSgpKSByZXR1cm4gdGhpcy5sb2NMYWJlbFRydWUudGV4dE9ySHRtbDtcbiAgICByZXR1cm4gdGhpcy5sb2NMYWJlbEZhbHNlLnRleHRPckh0bWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0SXRlbUNzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgQ3NzQ2xhc3NCdWlsZGVyKClcbiAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLml0ZW0pXG4gICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5pdGVtRGlzYWJsZWQsIHRoaXMuaXNSZWFkT25seSlcbiAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLml0ZW1DaGVja2VkLCAhIXRoaXMuY2hlY2tlZFZhbHVlKVxuICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuaXRlbUluZGV0ZXJtaW5hdGUsIHRoaXMuY2hlY2tlZFZhbHVlID09PSBudWxsKVxuICAgICAgLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TGFiZWxDc3MoY2hlY2tlZDogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBDc3NDbGFzc0J1aWxkZXIoKVxuICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMubGFiZWwpXG4gICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5kaXNhYmxlZExhYmVsLCB0aGlzLmNoZWNrZWRWYWx1ZSA9PT0gIWNoZWNrZWQgfHwgdGhpcy5pc1JlYWRPbmx5KVxuICAgICAgLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFsbG93Q2xpY2soKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNJbmRldGVybWluYXRlICYmICF0aGlzLmlzSW5wdXRSZWFkT25seTtcbiAgfVxuXG4gIC8qICNyZWdpb24gd2ViLWJhc2VkIG1ldGhvZHMgKi9cbiAgcHVibGljIG9uTGFiZWxDbGljayhldmVudDogYW55LCB2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLmFsbG93Q2xpY2spIHtcbiAgICAgIHByZXZlbnREZWZhdWx0cyhldmVudCk7XG4gICAgICB0aGlzLmNoZWNrZWRWYWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgb25Td2l0Y2hDbGlja01vZGVsKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5hbGxvd0NsaWNrKSB7XG4gICAgICBwcmV2ZW50RGVmYXVsdHMoZXZlbnQpO1xuICAgICAgdmFyIGlzUmlnaHRDbGljayA9XG4gICAgICAgIGV2ZW50Lm9mZnNldFggLyBldmVudC50YXJnZXQub2Zmc2V0V2lkdGggPiAwLjU7XG4gICAgICB2YXIgaXNSdGwgPVxuICAgICAgICBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGV2ZW50LnRhcmdldCkuZGlyZWN0aW9uID09IFwicnRsXCI7XG4gICAgICB0aGlzLmNoZWNrZWRWYWx1ZSA9IGlzUnRsID8gIWlzUmlnaHRDbGljayA6IGlzUmlnaHRDbGljaztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLyogI2VuZHJlZ2lvbiAqL1xufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImJvb2xlYW5cIixcbiAgW1xuICAgIHsgbmFtZTogXCJsYWJlbDp0ZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NMYWJlbFwiIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJsYWJlbFRydWU6dGV4dFwiLFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0xhYmVsVHJ1ZVwiLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJsYWJlbEZhbHNlOnRleHRcIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NMYWJlbEZhbHNlXCIsXG4gICAgfSxcbiAgICBcInNob3dUaXRsZTpib29sZWFuXCIsXG4gICAgXCJ2YWx1ZVRydWVcIixcbiAgICBcInZhbHVlRmFsc2VcIixcbiAgICB7IG5hbWU6IFwicmVuZGVyQXNcIiwgZGVmYXVsdDogXCJkZWZhdWx0XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gIF0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25Cb29sZWFuTW9kZWwoXCJcIik7XG4gIH0sXG4gIFwicXVlc3Rpb25cIlxuKTtcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiYm9vbGVhblwiLCAobmFtZSkgPT4ge1xuICByZXR1cm4gbmV3IFF1ZXN0aW9uQm9vbGVhbk1vZGVsKG5hbWUpO1xufSk7XG4iLCJpbXBvcnQgeyBTZXJpYWxpemVyLCBwcm9wZXJ0eSB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkNoZWNrYm94QmFzZSB9IGZyb20gXCIuL3F1ZXN0aW9uX2Jhc2VzZWxlY3RcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IENzc0NsYXNzQnVpbGRlciB9IGZyb20gXCIuL3V0aWxzL2Nzc0NsYXNzQnVpbGRlclwiO1xuXG5leHBvcnQgY2xhc3MgQnV0dG9uR3JvdXBJdGVtVmFsdWUgZXh0ZW5kcyBJdGVtVmFsdWUge1xuICBjb25zdHJ1Y3RvcihcbiAgICB2YWx1ZTogYW55LFxuICAgIHRleHQ6IHN0cmluZyA9IG51bGwsXG4gICAgcHJvdGVjdGVkIHR5cGVOYW1lID0gXCJidXR0b25ncm91cGl0ZW12YWx1ZVwiXG4gICkge1xuICAgIHN1cGVyKHZhbHVlLCB0ZXh0LCB0eXBlTmFtZSk7XG4gIH1cbiAgLypcbiAgICBJdGVtIGljb24gcHJvcGVydHlcbiAgKi9cbiAgQHByb3BlcnR5KClcbiAgaWNvbk5hbWU6IHN0cmluZztcbiAgLypcbiAgICBCeSBkZWZhdWx0IGljb24gc2l6ZSBpcyAyNC5cbiAgICBVc2UgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgaXRlbSBpY29uIHNpemUuXG4gICovXG4gIEBwcm9wZXJ0eSgpXG4gIGljb25TaXplOiBudW1iZXI7XG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IGl0ZW0gY2FwdGlvbiBpcyB2aXNpYmxlLlxuICAgKiBTZXQgaXQgJ2ZhbHNlJyB0byBoaWRlIGl0ZW0gY2FwdGlvbi5cbiAgICovXG4gIEBwcm9wZXJ0eSgpXG4gIHNob3dDYXB0aW9uOiBib29sZWFuO1xuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMudHlwZU5hbWUgPyB0aGlzLnR5cGVOYW1lIDogXCJidXR0b25ncm91cGl0ZW12YWx1ZVwiO1xuICB9XG59XG5cbi8qKlxuICogQSBNb2RlbCBmb3IgYSBidXR0b24gZ3JvdXAgcXVlc3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkJ1dHRvbkdyb3VwTW9kZWwgZXh0ZW5kcyBRdWVzdGlvbkNoZWNrYm94QmFzZSB7XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiYnV0dG9uZ3JvdXBcIjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0SXRlbVZhbHVlVHlwZSgpIHtcbiAgICByZXR1cm4gXCJidXR0b25ncm91cGl0ZW12YWx1ZVwiO1xuICB9XG4gIHB1YmxpYyBzdXBwb3J0T3RoZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiYnV0dG9uZ3JvdXBcIixcbiAgW1xuICAgIHtcbiAgICAgIG5hbWU6IFwiY2hvaWNlczpidXR0b25ncm91cGl0ZW12YWx1ZVtdXCIsXG4gICAgfSxcbiAgXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkJ1dHRvbkdyb3VwTW9kZWwoXCJcIik7XG4gIH0sXG4gIFwiY2hlY2tib3hiYXNlXCJcbik7XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiYnV0dG9uZ3JvdXBpdGVtdmFsdWVcIixcbiAgW1xuICAgIHsgbmFtZTogXCJzaG93Q2FwdGlvbjpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgICB7IG5hbWU6IFwiaWNvbk5hbWU6dGV4dFwiIH0sXG4gICAgeyBuYW1lOiBcImljb25TaXplOm51bWJlclwiIH0sXG4gIF0sXG4gICh2YWx1ZTogYW55KSA9PiBuZXcgQnV0dG9uR3JvdXBJdGVtVmFsdWUodmFsdWUpLFxuICBcIml0ZW12YWx1ZVwiXG4pO1xuXG4vLyBRdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImJ1dHRvbmdyb3VwXCIsIG5hbWUgPT4ge1xuLy8gICB2YXIgcSA9IG5ldyBRdWVzdGlvbkJ1dHRvbkdyb3VwTW9kZWwobmFtZSk7XG4vLyAgIHEuY2hvaWNlcyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0Q2hvaWNlcztcbi8vICAgcmV0dXJuIHE7XG4vLyB9KTtcblxuZXhwb3J0IGNsYXNzIEJ1dHRvbkdyb3VwSXRlbU1vZGVsIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHF1ZXN0aW9uOiBRdWVzdGlvbkJ1dHRvbkdyb3VwTW9kZWwsXG4gICAgcHVibGljIGl0ZW06IEl0ZW1WYWx1ZSxcbiAgICBwdWJsaWMgaW5kZXg6IG51bWJlclxuICApIHt9XG4gIHB1YmxpYyBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbS52YWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGljb25OYW1lKCkge1xuICAgIHJldHVybiB0aGlzLml0ZW0uaWNvbk5hbWU7XG4gIH1cbiAgcHVibGljIGdldCBpY29uU2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtLmljb25TaXplIHx8IDI0O1xuICB9XG4gIHB1YmxpYyBnZXQgY2FwdGlvbigpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbS5sb2NUZXh0O1xuICB9XG4gIHB1YmxpYyBnZXQgc2hvd0NhcHRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbS5zaG93Q2FwdGlvbiB8fCB0aGlzLml0ZW0uc2hvd0NhcHRpb24gPT09IHVuZGVmaW5lZDtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzUmVxdWlyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uaXNSZXF1aXJlZDtcbiAgfVxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmlzSXRlbVNlbGVjdGVkKHRoaXMuaXRlbSk7XG4gIH1cbiAgcHVibGljIGdldCByZWFkT25seSgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5pc0lucHV0UmVhZE9ubHkgfHwgIXRoaXMuaXRlbS5pc0VuYWJsZWQ7XG4gIH1cbiAgcHVibGljIGdldCBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLm5hbWUgKyBcIl9cIiArIHRoaXMucXVlc3Rpb24uaWQ7XG4gIH1cbiAgcHVibGljIGdldCBpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbi5pbnB1dElkICsgXCJfXCIgKyB0aGlzLmluZGV4O1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzRXJyb3JzKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwO1xuICB9XG4gIHB1YmxpYyBnZXQgZGVzY3JpYmVkQnkoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb24uZXJyb3JzLmxlbmd0aCA+IDBcbiAgICAgID8gdGhpcy5xdWVzdGlvbi5pZCArIFwiX2Vycm9yc1wiXG4gICAgICA6IG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgbGFiZWxDbGFzcygpIHtcbiAgICByZXR1cm4gbmV3IENzc0NsYXNzQnVpbGRlcigpXG4gICAgICAuYXBwZW5kKHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtKVxuICAgICAgLmFwcGVuZCh0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbVNlbGVjdGVkLCB0aGlzLnNlbGVjdGVkKVxuICAgICAgLmFwcGVuZCh0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbUhvdmVyLCAhdGhpcy5yZWFkT25seSAmJiAhdGhpcy5zZWxlY3RlZClcbiAgICAgIC5hcHBlbmQodGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLml0ZW1EaXNhYmxlZCwgdGhpcy5xdWVzdGlvbi5pc1JlYWRPbmx5IHx8ICF0aGlzLml0ZW0uaXNFbmFibGVkKVxuICAgICAgLnRvU3RyaW5nKCk7XG4gIH1cbiAgcHVibGljIGdldCBjc3MoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiB0aGlzLmxhYmVsQ2xhc3MsXG4gICAgICBpY29uOiB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbUljb24sXG4gICAgICBjb250cm9sOiB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbUNvbnRyb2wsXG4gICAgICBjYXB0aW9uOiB0aGlzLnF1ZXN0aW9uLmNzc0NsYXNzZXMuaXRlbUNhcHRpb24sXG4gICAgICBkZWNvcmF0b3I6IHRoaXMucXVlc3Rpb24uY3NzQ2xhc3Nlcy5pdGVtRGVjb3JhdG9yLFxuICAgIH07XG4gIH1cbiAgcHVibGljIG9uQ2hhbmdlKCkge1xuICAgIHRoaXMucXVlc3Rpb24ucmVuZGVyZWRWYWx1ZSA9IHRoaXMuaXRlbS52YWx1ZTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHtcbiAgUXVlc3Rpb25DaGVja2JveEJhc2UsXG4gIFF1ZXN0aW9uU2VsZWN0QmFzZSxcbn0gZnJvbSBcIi4vcXVlc3Rpb25fYmFzZXNlbGVjdFwiO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuaW1wb3J0IHsgQ3NzQ2xhc3NCdWlsZGVyIH0gZnJvbSBcIi4vdXRpbHMvY3NzQ2xhc3NCdWlsZGVyXCI7XG5cbi8qKlxuICogQSBNb2RlbCBmb3IgYSBjaGVja2JveCBxdWVzdGlvblxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25DaGVja2JveE1vZGVsIGV4dGVuZHMgUXVlc3Rpb25DaGVja2JveEJhc2Uge1xuICBwcml2YXRlIHNlbGVjdEFsbEl0ZW1WYWx1ZTogSXRlbVZhbHVlID0gbmV3IEl0ZW1WYWx1ZShcInNlbGVjdGFsbFwiKTtcbiAgcHJpdmF0ZSBpbnZpc2libGVPbGRWYWx1ZXM6IGFueSA9IHt9O1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB2YXIgc2VsZWN0QWxsSXRlbVRleHQgPSB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFxuICAgICAgXCJzZWxlY3RBbGxUZXh0XCIsXG4gICAgICB0aGlzLFxuICAgICAgdHJ1ZVxuICAgICk7XG4gICAgc2VsZWN0QWxsSXRlbVRleHQub25HZXRUZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgICByZXR1cm4gISF0ZXh0ID8gdGV4dCA6IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJzZWxlY3RBbGxJdGVtVGV4dFwiKTtcbiAgICB9O1xuICAgIHRoaXMuc2VsZWN0QWxsSXRlbS5sb2NPd25lciA9IHRoaXM7XG4gICAgdGhpcy5zZWxlY3RBbGxJdGVtLnNldExvY1RleHQoc2VsZWN0QWxsSXRlbVRleHQpO1xuXG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0aWVzVmFsdWVDaGFuZ2VkKFxuICAgICAgW1wiaGFzU2VsZWN0QWxsXCIsIFwic2VsZWN0QWxsVGV4dFwiXSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5vblZpc2libGVDaG9pY2VzQ2hhbmdlZCgpO1xuICAgICAgfVxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCBhcmlhUm9sZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImdyb3VwXCI7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJjaGVja2JveFwiO1xuICB9XG4gIHByb3RlY3RlZCBvbkNyZWF0aW5nKCkge1xuICAgIHN1cGVyLm9uQ3JlYXRpbmcoKTtcbiAgICB0aGlzLmNyZWF0ZU5ld0FycmF5KFwicmVuZGVyZWRWYWx1ZVwiKTtcbiAgICB0aGlzLmNyZWF0ZU5ld0FycmF5KFwidmFsdWVcIik7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEZpcnN0SW5wdXRFbGVtZW50SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dElkICsgXCJfMFwiO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzZWxlY3QgYWxsIGl0ZW0uIEJ5IHVzaW5nIHRoaXMgcHJvcGVydHksIHlvdSBtYXkgY2hhbmdlIHByb2dyYW1tYXRpY2FsbHkgaXQncyB2YWx1ZSBhbmQgdGV4dC5cbiAgICogQHNlZSBoYXNTZWxlY3RBbGxcbiAgICovXG4gIHB1YmxpYyBnZXQgc2VsZWN0QWxsSXRlbSgpOiBJdGVtVmFsdWUge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdEFsbEl0ZW1WYWx1ZTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gc2V0IHRoZSBkaWZmZXJlbnQgdGV4dCBmb3IgU2VsZWN0IEFsbCBpdGVtLlxuICAgKi9cbiAgcHVibGljIGdldCBzZWxlY3RBbGxUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJzZWxlY3RBbGxUZXh0XCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwic2VsZWN0QWxsSXRlbVRleHRcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXQgc2VsZWN0QWxsVGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwic2VsZWN0QWxsVGV4dFwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NTZWxlY3RBbGxUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInNlbGVjdEFsbFRleHRcIik7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUsIHRvIHNob3cgdGhlIFwiU2VsZWN0IEFsbFwiIGl0ZW0gb24gdGhlIHRvcC4gSWYgZW5kLXVzZXIgY2hlY2tzIHRoaXMgaXRlbSwgdGhlbiBhbGwgaXRlbXMgYXJlIGNoZWNrZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGhhc1NlbGVjdEFsbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaGFzU2VsZWN0QWxsXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGhhc1NlbGVjdEFsbCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJoYXNTZWxlY3RBbGxcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIGFsbCBpdGVtcyBhcmUgc2VsZWN0ZWRcbiAgICogQHNlZSB0b2dnbGVTZWxlY3RBbGxcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNBbGxTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICBpZiAoIXZhbCB8fCAhQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRoaXMuaXNJdGVtU2VsZWN0ZWQodGhpcy5ub25lSXRlbSkpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgYWxsSXRlbUNvdW50ID0gdGhpcy52aXNpYmxlQ2hvaWNlcy5sZW5ndGg7XG4gICAgaWYgKHRoaXMuaGFzT3RoZXIpIGFsbEl0ZW1Db3VudC0tO1xuICAgIGlmICh0aGlzLmhhc05vbmUpIGFsbEl0ZW1Db3VudC0tO1xuICAgIGlmICh0aGlzLmhhc1NlbGVjdEFsbCkgYWxsSXRlbUNvdW50LS07XG4gICAgdmFyIHNlbGVjdGVkQ291bnQgPSB2YWwubGVuZ3RoO1xuICAgIGlmICh0aGlzLmlzSXRlbVNlbGVjdGVkKHRoaXMub3RoZXJJdGVtKSkgc2VsZWN0ZWRDb3VudC0tO1xuICAgIHJldHVybiBzZWxlY3RlZENvdW50ID09PSBhbGxJdGVtQ291bnQ7XG4gIH1cbiAgcHVibGljIHNldCBpc0FsbFNlbGVjdGVkKHZhbDogYm9vbGVhbikge1xuICAgIGlmICh2YWwpIHtcbiAgICAgIHRoaXMuc2VsZWN0QWxsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xlYXJWYWx1ZSgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogSXQgd2lsbCBzZWxlY3QgYWxsIGl0ZW1zLCBleGNlcHQgb3RoZXIgYW5kIG5vbmUuIElmIGFsbCBpdGVtcyBoYXZlIGJlZW4gYWxyZWFkeSBzZWxlY3RlZCB0aGVuIGl0IHdpbGwgY2xlYXIgdGhlIHZhbHVlXG4gICAqIEBzZWUgaXNBbGxTZWxlY3RlZFxuICAgKiBAc2VlIHNlbGVjdEFsbFxuICAgKi9cbiAgcHVibGljIHRvZ2dsZVNlbGVjdEFsbCgpIHtcbiAgICB0aGlzLmlzQWxsU2VsZWN0ZWQgPSAhdGhpcy5pc0FsbFNlbGVjdGVkO1xuICB9XG4gIC8qKlxuICAgKiBTZWxlY3QgYWxsIGl0ZW1zLCBleGNlcHQgb3RoZXIgYW5kIG5vbmUuXG4gICAqL1xuICBwdWJsaWMgc2VsZWN0QWxsKCkge1xuICAgIHZhciB2YWwgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudmlzaWJsZUNob2ljZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gdGhpcy52aXNpYmxlQ2hvaWNlc1tpXTtcbiAgICAgIGlmIChcbiAgICAgICAgaXRlbSA9PT0gdGhpcy5ub25lSXRlbSB8fFxuICAgICAgICBpdGVtID09PSB0aGlzLm90aGVySXRlbSB8fFxuICAgICAgICBpdGVtID09PSB0aGlzLnNlbGVjdEFsbEl0ZW1cbiAgICAgIClcbiAgICAgICAgY29udGludWU7XG4gICAgICB2YWwucHVzaChpdGVtLnZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy52YWx1ZSA9IHZhbDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIGl0ZW0gaXMgY2hlY2tlZFxuICAgKiBAcGFyYW0gaXRlbSBjaGVja2JveCBpdGVtIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgaXNJdGVtU2VsZWN0ZWQoaXRlbTogSXRlbVZhbHVlKTogYm9vbGVhbiB7XG4gICAgaWYgKGl0ZW0gPT09IHRoaXMuc2VsZWN0QWxsSXRlbSkgcmV0dXJuIHRoaXMuaXNBbGxTZWxlY3RlZDtcbiAgICB2YXIgdmFsID0gdGhpcy5yZW5kZXJlZFZhbHVlO1xuICAgIGlmICghdmFsIHx8ICFBcnJheS5pc0FycmF5KHZhbCkpIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuaXNUd29WYWx1ZUVxdWFscyh2YWxbaV0sIGl0ZW0udmFsdWUpKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSBkaWZmZXJlbnQgdG8gMCB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIGNob2ljZXMgaW4gdGhlIGNoZWNrYm94LlxuICAgKi9cbiAgcHVibGljIGdldCBtYXhTZWxlY3RlZENob2ljZXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4U2VsZWN0ZWRDaG9pY2VzXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4U2VsZWN0ZWRDaG9pY2VzKHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKHZhbCA8IDApIHZhbCA9IDA7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF4U2VsZWN0ZWRDaG9pY2VzXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgc2VsZWN0ZWQgaXRlbXMgaW4gdGhlIGNoZWNrYm94LiBSZXR1cm5zIGVtcHR5IGFycmF5IGlmIHRoZSB2YWx1ZSBpcyBlbXB0eVxuICAgKi9cbiAgcHVibGljIGdldCBzZWxlY3RlZEl0ZW1zKCk6IEFycmF5PEl0ZW1WYWx1ZT4ge1xuICAgIGlmICh0aGlzLmlzRW1wdHkoKSkgcmV0dXJuIFtdO1xuICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgIHZhciByZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzLnB1c2goSXRlbVZhbHVlLmdldEl0ZW1CeVZhbHVlKHRoaXMudmlzaWJsZUNob2ljZXMsIHZhbFtpXSkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCBvbkVuYWJsZUl0ZW1DYWxsQmFjayhpdGVtOiBJdGVtVmFsdWUpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuc2hvdWxkQ2hlY2tNYXhTZWxlY3RlZENob2ljZXMoKSkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIHRoaXMuaXNJdGVtU2VsZWN0ZWQoaXRlbSk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uQWZ0ZXJSdW5JdGVtc0VuYWJsZUNvbmRpdGlvbigpIHtcbiAgICBpZiAodGhpcy5tYXhTZWxlY3RlZENob2ljZXMgPCAxKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaGFzU2VsZWN0QWxsKSB7XG4gICAgICB0aGlzLnNlbGVjdEFsbEl0ZW0uc2V0SXNFbmFibGVkKFxuICAgICAgICB0aGlzLm1heFNlbGVjdGVkQ2hvaWNlcyA+PSB0aGlzLmFjdGl2ZUNob2ljZXMubGVuZ3RoXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNPdGhlcikge1xuICAgICAgdGhpcy5vdGhlckl0ZW0uc2V0SXNFbmFibGVkKFxuICAgICAgICAhdGhpcy5zaG91bGRDaGVja01heFNlbGVjdGVkQ2hvaWNlcygpIHx8IHRoaXMuaXNPdGhlclNlbGVjdGVkXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHNob3VsZENoZWNrTWF4U2VsZWN0ZWRDaG9pY2VzKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLm1heFNlbGVjdGVkQ2hvaWNlcyA8IDEpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICB2YXIgbGVuID0gIUFycmF5LmlzQXJyYXkodmFsKSA/IDAgOiB2YWwubGVuZ3RoO1xuICAgIHJldHVybiBsZW4gPj0gdGhpcy5tYXhTZWxlY3RlZENob2ljZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEl0ZW1DbGFzc0NvcmUoaXRlbTogYW55LCBvcHRpb25zOiBhbnkpIHtcbiAgICBjb25zdCBfX2R1bW15X3ZhbHVlID0gdGhpcy52YWx1ZTsgLy90cmlnZ2VyIGRlcGVuZGVuY2llcyBmcm9tIGtvVmFsdWUgZm9yIGtub2Nrb3V0XG4gICAgb3B0aW9ucy5pc1NlbGVjdEFsbEl0ZW0gPSBpdGVtID09PSB0aGlzLnNlbGVjdEFsbEl0ZW07XG4gICAgcmV0dXJuIG5ldyBDc3NDbGFzc0J1aWxkZXIoKVxuICAgICAgLmFwcGVuZChzdXBlci5nZXRJdGVtQ2xhc3NDb3JlKGl0ZW0sIG9wdGlvbnMpKVxuICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuaXRlbVNlbGVjdEFsbCwgb3B0aW9ucy5pc1NlbGVjdEFsbEl0ZW0pXG4gICAgICAudG9TdHJpbmcoKTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0TmV3VmFsdWUobmV3VmFsdWU6IGFueSkge1xuICAgIGlmICghdGhpcy5pc0NoYW5naW5nVmFsdWVPbkNsZWFySW5jb3JyZWN0KSB7XG4gICAgICB0aGlzLmludmlzaWJsZU9sZFZhbHVlcyA9IFtdO1xuICAgIH1cbiAgICBuZXdWYWx1ZSA9IHRoaXMudmFsdWVGcm9tRGF0YShuZXdWYWx1ZSk7XG4gICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICBpZiAoIW5ld1ZhbHVlKSBuZXdWYWx1ZSA9IFtdO1xuICAgIGlmICghdmFsdWUpIHZhbHVlID0gW107XG4gICAgaWYgKHRoaXMuaXNUd29WYWx1ZUVxdWFscyh2YWx1ZSwgbmV3VmFsdWUpKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaGFzTm9uZSkge1xuICAgICAgdmFyIHByZXZOb25lSW5kZXggPSB0aGlzLm5vbmVJbmRleEluQXJyYXkodmFsdWUpO1xuICAgICAgdmFyIG5ld05vbmVJbmRleCA9IHRoaXMubm9uZUluZGV4SW5BcnJheShuZXdWYWx1ZSk7XG4gICAgICBpZiAocHJldk5vbmVJbmRleCA+IC0xKSB7XG4gICAgICAgIGlmIChuZXdOb25lSW5kZXggPiAtMSAmJiBuZXdWYWx1ZS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgbmV3VmFsdWUuc3BsaWNlKG5ld05vbmVJbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChuZXdOb25lSW5kZXggPiAtMSkge1xuICAgICAgICAgIG5ld1ZhbHVlLnNwbGljZSgwLCBuZXdWYWx1ZS5sZW5ndGgpO1xuICAgICAgICAgIG5ld1ZhbHVlLnB1c2godGhpcy5ub25lSXRlbS52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgc3VwZXIuc2V0TmV3VmFsdWUodGhpcy5yZW5kcmVkVmFsdWVUb0RhdGEobmV3VmFsdWUpKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0SXNNdWx0aXBsZVZhbHVlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRDb21tZW50RnJvbVZhbHVlKG5ld1ZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgIHZhciBpbmQgPSB0aGlzLmdldEZpcnN0VW5rbm93bkluZGV4KG5ld1ZhbHVlKTtcbiAgICBpZiAoaW5kIDwgMCkgcmV0dXJuIFwiXCI7XG4gICAgcmV0dXJuIG5ld1ZhbHVlW2luZF07XG4gIH1cbiAgcHJvdGVjdGVkIHNldE90aGVyVmFsdWVJbnRvVmFsdWUobmV3VmFsdWU6IGFueSk6IGFueSB7XG4gICAgdmFyIGluZCA9IHRoaXMuZ2V0Rmlyc3RVbmtub3duSW5kZXgobmV3VmFsdWUpO1xuICAgIGlmIChpbmQgPCAwKSByZXR1cm4gbmV3VmFsdWU7XG4gICAgbmV3VmFsdWUuc3BsaWNlKGluZCwgMSwgdGhpcy5vdGhlckl0ZW0udmFsdWUpO1xuICAgIHJldHVybiBuZXdWYWx1ZTtcbiAgfVxuICBwcml2YXRlIGdldEZpcnN0VW5rbm93bkluZGV4KG5ld1ZhbHVlOiBhbnkpOiBudW1iZXIge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShuZXdWYWx1ZSkpIHJldHVybiAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld1ZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5oYXNVbmtub3duVmFsdWUobmV3VmFsdWVbaV0pKSByZXR1cm4gaTtcbiAgICB9XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIHByaXZhdGUgbm9uZUluZGV4SW5BcnJheSh2YWw6IGFueSkge1xuICAgIGlmICghdmFsIHx8ICFBcnJheS5pc0FycmF5KHZhbCkpIHJldHVybiAtMTtcbiAgICB2YXIgbm9uZVZhbHVlID0gdGhpcy5ub25lSXRlbS52YWx1ZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHZhbFtpXSA9PSBub25lVmFsdWUpIHJldHVybiBpO1xuICAgIH1cbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgcHJvdGVjdGVkIGNhblVzZUZpbHRlcmVkQ2hvaWNlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuaGFzU2VsZWN0QWxsICYmIHN1cGVyLmNhblVzZUZpbHRlcmVkQ2hvaWNlcygpO1xuICB9XG4gIHByb3RlY3RlZCBzdXBwb3J0U2VsZWN0QWxsKCkge1xuICAgIHJldHVybiB0aGlzLmlzU3VwcG9ydFByb3BlcnR5KFwiaGFzU2VsZWN0QWxsXCIpO1xuICB9XG4gIHByb3RlY3RlZCBhZGRUb1Zpc2libGVDaG9pY2VzKGl0ZW1zOiBBcnJheTxJdGVtVmFsdWU+LCBpc0FkZEFsbDogYm9vbGVhbikge1xuICAgIGlmIChcbiAgICAgIHRoaXMuc3VwcG9ydFNlbGVjdEFsbCgpICYmXG4gICAgICAoKGlzQWRkQWxsICYmIHRoaXMuY2FuU2hvd09wdGlvbkl0ZW0odGhpcy5zZWxlY3RBbGxJdGVtKSkgfHxcbiAgICAgICAgdGhpcy5oYXNTZWxlY3RBbGwpXG4gICAgKSB7XG4gICAgICBpdGVtcy51bnNoaWZ0KHRoaXMuc2VsZWN0QWxsSXRlbSk7XG4gICAgfVxuICAgIHN1cGVyLmFkZFRvVmlzaWJsZUNob2ljZXMoaXRlbXMsIGlzQWRkQWxsKTtcbiAgfVxuICBwcm90ZWN0ZWQgaXNCdWlsdEluQ2hvaWNlKFxuICAgIGl0ZW06IEl0ZW1WYWx1ZSxcbiAgICBxdWVzdGlvbjogUXVlc3Rpb25TZWxlY3RCYXNlXG4gICk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBpdGVtID09PSAoPFF1ZXN0aW9uQ2hlY2tib3hCYXNlPnF1ZXN0aW9uKS5zZWxlY3RBbGxJdGVtIHx8XG4gICAgICBzdXBlci5pc0J1aWx0SW5DaG9pY2UoaXRlbSwgcXVlc3Rpb24pXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogRm9yIGludGVybmFsIHVzZSBpbiBTdXJ2ZXlKUyBDcmVhdG9yIFYyLlxuICAgKi9cbiAgcHVibGljIGlzSXRlbUluTGlzdChpdGVtOiBJdGVtVmFsdWUpOiBib29sZWFuIHtcbiAgICBpZiAoaXRlbSA9PSB0aGlzLnNlbGVjdEFsbEl0ZW0pIHJldHVybiB0aGlzLmhhc1NlbGVjdEFsbDtcbiAgICByZXR1cm4gc3VwZXIuaXNJdGVtSW5MaXN0KGl0ZW0pO1xuICB9XG4gIHByb3RlY3RlZCBnZXREaXNwbGF5VmFsdWVDb3JlKGtleXNBc1RleHQ6IGJvb2xlYW4sIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG4gICAgICByZXR1cm4gc3VwZXIuZ2V0RGlzcGxheVZhbHVlQ29yZShrZXlzQXNUZXh0LCB2YWx1ZSk7XG4gICAgdmFyIGl0ZW1zID0gdGhpcy52aXNpYmxlQ2hvaWNlcztcbiAgICB2YXIgc3RyID0gXCJcIjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmFsU3RyID0gdGhpcy5nZXRDaG9pY2VzRGlzcGxheVZhbHVlKGl0ZW1zLCB2YWx1ZVtpXSk7XG4gICAgICBpZiAodmFsU3RyKSB7XG4gICAgICAgIGlmIChzdHIpIHN0ciArPSBcIiwgXCI7XG4gICAgICAgIHN0ciArPSB2YWxTdHI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG4gIH1cbiAgcHJvdGVjdGVkIGNsZWFySW5jb3JyZWN0VmFsdWVzQ29yZSgpIHtcbiAgICB0aGlzLmNsZWFySW5jb3JyZWN0QW5kRGlzYWJsZWRWYWx1ZXMoZmFsc2UpO1xuICB9XG4gIHByb3RlY3RlZCBjbGVhckRpc2FibGVkVmFsdWVzQ29yZSgpIHtcbiAgICB0aGlzLmNsZWFySW5jb3JyZWN0QW5kRGlzYWJsZWRWYWx1ZXModHJ1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBpc0NoYW5naW5nVmFsdWVPbkNsZWFySW5jb3JyZWN0OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgY2xlYXJJbmNvcnJlY3RBbmREaXNhYmxlZFZhbHVlcyhjbGVhckRpc2FibGVkOiBib29sZWFuKSB7XG4gICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgdmFyIGhhc0NoYW5nZWQgPSBmYWxzZTtcbiAgICB2YXIgcmVzdG9yZWRWYWx1ZXMgPSB0aGlzLnJlc3RvcmVWYWx1ZXNGcm9tSW52aXNpYmxlKCk7XG4gICAgaWYgKCF2YWwgJiYgcmVzdG9yZWRWYWx1ZXMubGVuZ3RoID09IDApIHJldHVybjtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSB8fCB2YWwubGVuZ3RoID09IDApIHtcbiAgICAgIHRoaXMuaXNDaGFuZ2luZ1ZhbHVlT25DbGVhckluY29ycmVjdCA9IHRydWU7XG4gICAgICBpZiAoIWNsZWFyRGlzYWJsZWQpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzQ29tbWVudCkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY2xlYXJWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmlzQ2hhbmdpbmdWYWx1ZU9uQ2xlYXJJbmNvcnJlY3QgPSBmYWxzZTtcbiAgICAgIGlmIChyZXN0b3JlZFZhbHVlcy5sZW5ndGggPT0gMCkgcmV0dXJuO1xuICAgICAgdmFsID0gW107XG4gICAgfVxuICAgIHZhciBuZXdWYWx1ZSA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXNVbmtvd24gPSB0aGlzLmNhbkNsZWFyVmFsdWVBblVua25vdyh2YWxbaV0pO1xuICAgICAgaWYgKFxuICAgICAgICAoIWNsZWFyRGlzYWJsZWQgJiYgIWlzVW5rb3duKSB8fFxuICAgICAgICAoY2xlYXJEaXNhYmxlZCAmJiAhdGhpcy5pc1ZhbHVlRGlzYWJsZWQodmFsW2ldKSlcbiAgICAgICkge1xuICAgICAgICBuZXdWYWx1ZS5wdXNoKHZhbFtpXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYXNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgaWYgKGlzVW5rb3duKSB7XG4gICAgICAgICAgdGhpcy5pbnZpc2libGVPbGRWYWx1ZXNbdmFsW2ldXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN0b3JlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbmV3VmFsdWUucHVzaChyZXN0b3JlZFZhbHVlc1tpXSk7XG4gICAgICBoYXNDaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFoYXNDaGFuZ2VkKSByZXR1cm47XG4gICAgdGhpcy5pc0NoYW5naW5nVmFsdWVPbkNsZWFySW5jb3JyZWN0ID0gdHJ1ZTtcbiAgICBpZiAobmV3VmFsdWUubGVuZ3RoID09IDApIHtcbiAgICAgIHRoaXMuY2xlYXJWYWx1ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgfVxuICAgIHRoaXMuaXNDaGFuZ2luZ1ZhbHVlT25DbGVhckluY29ycmVjdCA9IGZhbHNlO1xuICB9XG4gIHByaXZhdGUgcmVzdG9yZVZhbHVlc0Zyb21JbnZpc2libGUoKTogQXJyYXk8YW55PiB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciB2aXNJdGVtcyA9IHRoaXMudmlzaWJsZUNob2ljZXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aXNJdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbCA9IHZpc0l0ZW1zW2ldLnZhbHVlO1xuICAgICAgaWYgKHRoaXMuaW52aXNpYmxlT2xkVmFsdWVzW3ZhbF0pIHtcbiAgICAgICAgcmVzLnB1c2godmFsKTtcbiAgICAgICAgZGVsZXRlIHRoaXMuaW52aXNpYmxlT2xkVmFsdWVzW3ZhbF07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGdldENvbmRpdGlvbkpzb24ob3BlcmF0b3I6IHN0cmluZyA9IG51bGwsIHBhdGg6IHN0cmluZyA9IG51bGwpOiBhbnkge1xuICAgIHZhciBqc29uID0gc3VwZXIuZ2V0Q29uZGl0aW9uSnNvbigpO1xuICAgIGlmIChvcGVyYXRvciA9PSBcImNvbnRhaW5zXCIgfHwgb3BlcmF0b3IgPT0gXCJub3Rjb250YWluc1wiKSB7XG4gICAgICBqc29uW1widHlwZVwiXSA9IFwicmFkaW9ncm91cFwiO1xuICAgIH1cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuICBwdWJsaWMgaXNBbnN3ZXJDb3JyZWN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBIZWxwZXJzLmlzQXJyYXlDb250YWluc0VxdWFsKHRoaXMudmFsdWUsIHRoaXMuY29ycmVjdEFuc3dlcik7XG4gIH1cbiAgcHJvdGVjdGVkIHNldERlZmF1bHRWYWx1ZVdpdGhPdGhlcnMoKSB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMucmVuZGVyZWRWYWx1ZUZyb21EYXRhQ29yZSh0aGlzLmRlZmF1bHRWYWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEhhc090aGVyKHZhbDogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCF2YWwgfHwgIUFycmF5LmlzQXJyYXkodmFsKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB2YWwuaW5kZXhPZih0aGlzLm90aGVySXRlbS52YWx1ZSkgPj0gMDtcbiAgfVxuICBwcm90ZWN0ZWQgdmFsdWVGcm9tRGF0YSh2YWw6IGFueSk6IGFueSB7XG4gICAgaWYgKCF2YWwpIHJldHVybiB2YWw7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbCkpIHJldHVybiBbc3VwZXIudmFsdWVGcm9tRGF0YSh2YWwpXTtcbiAgICBsZXQgdmFsdWUgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGNob2ljZWl0ZW0gPSBJdGVtVmFsdWUuZ2V0SXRlbUJ5VmFsdWUodGhpcy5hY3RpdmVDaG9pY2VzLCB2YWxbaV0pO1xuICAgICAgaWYgKCEhY2hvaWNlaXRlbSkge1xuICAgICAgICB2YWx1ZS5wdXNoKGNob2ljZWl0ZW0udmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUucHVzaCh2YWxbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlcmVkVmFsdWVGcm9tRGF0YUNvcmUodmFsOiBhbnkpOiBhbnkge1xuICAgIGlmICghdmFsIHx8ICFBcnJheS5pc0FycmF5KHZhbCkpIHZhbCA9IFtdO1xuICAgIGlmICghdGhpcy5oYXNBY3RpdmVDaG9pY2VzKSByZXR1cm4gdmFsO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodmFsW2ldID09IHRoaXMub3RoZXJJdGVtLnZhbHVlKSByZXR1cm4gdmFsO1xuICAgICAgaWYgKHRoaXMuaGFzVW5rbm93blZhbHVlKHZhbFtpXSwgdHJ1ZSwgZmFsc2UpKSB7XG4gICAgICAgIHRoaXMuY29tbWVudCA9IHZhbFtpXTtcbiAgICAgICAgdmFyIG5ld1ZhbCA9IHZhbC5zbGljZSgpO1xuICAgICAgICBuZXdWYWxbaV0gPSB0aGlzLm90aGVySXRlbS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIG5ld1ZhbDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuICBwcm90ZWN0ZWQgcmVuZHJlZFZhbHVlVG9EYXRhQ29yZSh2YWw6IGFueSk6IGFueSB7XG4gICAgaWYgKCF2YWwgfHwgIXZhbC5sZW5ndGgpIHJldHVybiB2YWw7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh2YWxbaV0gPT0gdGhpcy5vdGhlckl0ZW0udmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0UXVlc3Rpb25Db21tZW50KCkpIHtcbiAgICAgICAgICB2YXIgbmV3VmFsID0gdmFsLnNsaWNlKCk7XG4gICAgICAgICAgbmV3VmFsW2ldID0gdGhpcy5nZXRRdWVzdGlvbkNvbW1lbnQoKTtcbiAgICAgICAgICByZXR1cm4gbmV3VmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgcHVibGljIGdldCBjaGVja0JveFN2Z1BhdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJNNSwxM2wyLTJsMywzbDctN2wyLDJsLTksOUw1LDEzelwiO1xuICB9XG4gIHB1YmxpYyBnZXRJdGVtSWQoaXRlbTogSXRlbVZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRJZCArIFwiX1wiICsgdGhpcy5nZXRJdGVtSW5kZXgoaXRlbSk7XG4gIH1cbn1cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiY2hlY2tib3hcIixcbiAgW1xuICAgIFwiaGFzU2VsZWN0QWxsOmJvb2xlYW5cIixcbiAgICB7IG5hbWU6IFwibWF4U2VsZWN0ZWRDaG9pY2VzOm51bWJlclwiLCBkZWZhdWx0OiAwIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJzZWxlY3RBbGxUZXh0XCIsXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jU2VsZWN0QWxsVGV4dFwiLFxuICAgICAgZGVwZW5kc09uOiBcImhhc1NlbGVjdEFsbFwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gb2JqLmhhc1NlbGVjdEFsbDtcbiAgICAgIH1cbiAgICB9XG4gIF0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25DaGVja2JveE1vZGVsKFwiXCIpO1xuICB9LFxuICBcImNoZWNrYm94YmFzZVwiXG4pO1xuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJjaGVja2JveFwiLCAobmFtZSkgPT4ge1xuICB2YXIgcSA9IG5ldyBRdWVzdGlvbkNoZWNrYm94TW9kZWwobmFtZSk7XG4gIHEuY2hvaWNlcyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0Q2hvaWNlcztcbiAgcmV0dXJuIHE7XG59KTtcbiIsImltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IFF1ZXN0aW9uVGV4dEJhc2UgfSBmcm9tIFwiLi9xdWVzdGlvbl90ZXh0YmFzZVwiO1xuaW1wb3J0IHsgaW5jcmVhc2VIZWlnaHRCeUNvbnRlbnQgfSBmcm9tIFwiLi91dGlscy91dGlsc1wiO1xuXG4vKipcbiAqIEEgTW9kZWwgZm9yIGEgY29tbWVudCBxdWVzdGlvblxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25Db21tZW50TW9kZWwgZXh0ZW5kcyBRdWVzdGlvblRleHRCYXNlIHtcbiAgcHJpdmF0ZSBlbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgLyoqXG4gICAqIFRoZSBodG1sIHJvd3MgYXR0cmlidXRlLlxuICAgKi9cbiAgcHVibGljIGdldCByb3dzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJvd3NcIik7XG4gIH1cbiAgcHVibGljIHNldCByb3dzKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicm93c1wiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgaHRtbCBjb2xzIGF0dHJpYnV0ZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgY29scygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb2xzXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY29scyh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbHNcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogQWNjZXB0cyBwcmVzc2luZyB0aGUgRW50ZXIga2V5IGJ5IGVuZC11c2VycyBhbmQgYWNjZXB0cyBjYXJyaWFnZSByZXR1cm4gc3ltYm9scyAtIFxcbiAtIGluIHRoZSBxdWVzdGlvbiB2YWx1ZSBhc3NpZ25lZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgYWNjZXB0Q2FycmlhZ2VSZXR1cm4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImFjY2VwdENhcnJpYWdlUmV0dXJuXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgYWNjZXB0Q2FycmlhZ2VSZXR1cm4odmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYWNjZXB0Q2FycmlhZ2VSZXR1cm5cIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIHF1ZXN0aW9uJ3MgdGV4dCBhcmVhIGF1dG9tYXRpY2FsbHkgZXhwYW5kcyBpdHMgaGVpZ2h0IHRvIGF2b2lkIHRoZSB2ZXJ0aWNhbCBzY3JvbGxiYXIgYW5kIHRvIGRpc3BsYXkgdGhlIGVudGlyZSBtdWx0aS1saW5lIGNvbnRlbnRzIGVudGVyZWQgYnkgcmVzcG9uZGVudHMuXG4gICAqIERlZmF1bHQgdmFsdWUgaXMgZmFsc2UuXG4gICAqIEBzZWUgU3VydmV5TW9kZWwuYXV0b0dyb3dDb21tZW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IGF1dG9Hcm93KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhdXRvR3Jvd1wiKSB8fCAodGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuYXV0b0dyb3dDb21tZW50KTtcbiAgfVxuICBwdWJsaWMgc2V0IGF1dG9Hcm93KHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImF1dG9Hcm93XCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJjb21tZW50XCI7XG4gIH1cbiAgcHVibGljIGFmdGVyUmVuZGVyUXVlc3Rpb25FbGVtZW50KGVsOiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuaW5wdXRJZCkgfHwgZWw7XG4gICAgdGhpcy51cGRhdGVFbGVtZW50KCk7XG4gICAgc3VwZXIuYWZ0ZXJSZW5kZXJRdWVzdGlvbkVsZW1lbnQoZWwpO1xuICB9XG4gIHB1YmxpYyB1cGRhdGVFbGVtZW50KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVsZW1lbnQgJiYgdGhpcy5hdXRvR3Jvdykge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiBpbmNyZWFzZUhlaWdodEJ5Q29udGVudCh0aGlzLmVsZW1lbnQpLCAxKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIG9uSW5wdXQoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzSW5wdXRUZXh0VXBkYXRlKVxuICAgICAgdGhpcy52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICBlbHNlXG4gICAgICB0aGlzLnVwZGF0ZUVsZW1lbnQoKTtcbiAgfVxuICBwdWJsaWMgb25LZXlEb3duKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYWNjZXB0Q2FycmlhZ2VSZXR1cm4gJiYgKGV2ZW50LmtleSA9PT0gXCJFbnRlclwiIHx8IGV2ZW50LmtleUNvZGUgPT09IDEzKSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgfVxuICBvblZhbHVlQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICBzdXBlci5vblZhbHVlQ2hhbmdlZCgpO1xuICAgIHRoaXMudXBkYXRlRWxlbWVudCgpO1xuICB9XG4gIHByb3RlY3RlZCBzZXROZXdWYWx1ZShuZXdWYWx1ZTogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoIXRoaXMuYWNjZXB0Q2FycmlhZ2VSZXR1cm4gJiYgISFuZXdWYWx1ZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcbiAgICAgIG5ld1ZhbHVlID0gbmV3VmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKFwiKFxcclxcbnxcXG58XFxyKVwiLCBcImdtXCIpLCBcIlwiKTtcbiAgICB9XG4gICAgc3VwZXIuc2V0TmV3VmFsdWUobmV3VmFsdWUpO1xuICB9XG59XG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImNvbW1lbnRcIixcbiAgW1xuICAgIHsgbmFtZTogXCJtYXhMZW5ndGg6bnVtYmVyXCIsIGRlZmF1bHQ6IC0xIH0sXG4gICAgeyBuYW1lOiBcImNvbHM6bnVtYmVyXCIsIGRlZmF1bHQ6IDUwIH0sXG4gICAgeyBuYW1lOiBcInJvd3M6bnVtYmVyXCIsIGRlZmF1bHQ6IDQgfSxcbiAgICB7IG5hbWU6IFwicGxhY2VIb2xkZXJcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1BsYWNlSG9sZGVyXCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInRleHRVcGRhdGVNb2RlXCIsXG4gICAgICBkZWZhdWx0OiBcImRlZmF1bHRcIixcbiAgICAgIGNob2ljZXM6IFtcImRlZmF1bHRcIiwgXCJvbkJsdXJcIiwgXCJvblR5cGluZ1wiXSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJhdXRvR3Jvdzpib29sZWFuXCIgfSxcbiAgICB7IG5hbWU6IFwiYWNjZXB0Q2FycmlhZ2VSZXR1cm46Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlLCB2aXNpYmxlOiBmYWxzZSB9XG4gIF0sXG4gIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uQ29tbWVudE1vZGVsKFwiXCIpO1xuICB9LFxuICBcInRleHRiYXNlXCJcbik7XG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImNvbW1lbnRcIiwgKG5hbWUpID0+IHtcbiAgcmV0dXJuIG5ldyBRdWVzdGlvbkNvbW1lbnRNb2RlbChuYW1lKTtcbn0pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb24sIElDb25kaXRpb25PYmplY3QgfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgU2VyaWFsaXplciwgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24gfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQge1xuICBJU3VydmV5SW1wbCxcbiAgSVN1cnZleURhdGEsXG4gIElTdXJ2ZXksXG4gIElUZXh0UHJvY2Vzc29yLFxuICBJUGFuZWwsXG4gIElFbGVtZW50XG59IGZyb20gXCIuL2Jhc2UtaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudCB9IGZyb20gXCIuL3N1cnZleS1lbGVtZW50XCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsIH0gZnJvbSBcIi4vcGFuZWxcIjtcbmltcG9ydCB7IEhlbHBlcnMsIEhhc2hUYWJsZSB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25UZXh0UHJvY2Vzc29yIH0gZnJvbSBcIi4vdGV4dFByZVByb2Nlc3NvclwiO1xuXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50UXVlc3Rpb25KU09OIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcsIHB1YmxpYyBqc29uOiBhbnkpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgICAgIG5hbWUsXG4gICAgICBbXSxcbiAgICAgIGZ1bmN0aW9uIChqc29uOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIENvbXBvbmVudENvbGxlY3Rpb24uSW5zdGFuY2UuY3JlYXRlUXVlc3Rpb24oXG4gICAgICAgICAgISFqc29uID8ganNvbi5uYW1lIDogXCJcIixcbiAgICAgICAgICBzZWxmXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgXCJxdWVzdGlvblwiXG4gICAgKTtcbiAgICB0aGlzLm9uSW5pdCgpO1xuICB9XG4gIHB1YmxpYyBvbkluaXQoKSB7XG4gICAgaWYgKCF0aGlzLmpzb24ub25Jbml0KSByZXR1cm47XG4gICAgdGhpcy5qc29uLm9uSW5pdCgpO1xuICB9XG4gIHB1YmxpYyBvbkNyZWF0ZWQocXVlc3Rpb246IFF1ZXN0aW9uKSB7XG4gICAgaWYgKCF0aGlzLmpzb24ub25DcmVhdGVkKSByZXR1cm47XG4gICAgdGhpcy5qc29uLm9uQ3JlYXRlZChxdWVzdGlvbik7XG4gIH1cbiAgcHVibGljIG9uTG9hZGVkKHF1ZXN0aW9uOiBRdWVzdGlvbikge1xuICAgIGlmICghdGhpcy5qc29uLm9uTG9hZGVkKSByZXR1cm47XG4gICAgdGhpcy5qc29uLm9uTG9hZGVkKHF1ZXN0aW9uKTtcbiAgfVxuICBwdWJsaWMgb25BZnRlclJlbmRlcihxdWVzdGlvbjogUXVlc3Rpb24sIGh0bWxFbGVtZW50OiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuanNvbi5vbkFmdGVyUmVuZGVyKSByZXR1cm47XG4gICAgdGhpcy5qc29uLm9uQWZ0ZXJSZW5kZXIocXVlc3Rpb24sIGh0bWxFbGVtZW50KTtcbiAgfVxuICBwdWJsaWMgb25BZnRlclJlbmRlckNvbnRlbnRFbGVtZW50KFxuICAgIHF1ZXN0aW9uOiBRdWVzdGlvbixcbiAgICBlbGVtZW50OiBRdWVzdGlvbixcbiAgICBodG1sRWxlbWVudDogYW55XG4gICkge1xuICAgIGlmICghdGhpcy5qc29uLm9uQWZ0ZXJSZW5kZXJDb250ZW50RWxlbWVudCkgcmV0dXJuO1xuICAgIHRoaXMuanNvbi5vbkFmdGVyUmVuZGVyQ29udGVudEVsZW1lbnQocXVlc3Rpb24sIGVsZW1lbnQsIGh0bWxFbGVtZW50KTtcbiAgfVxuICBwdWJsaWMgb25Qcm9wZXJ0eUNoYW5nZWQoXG4gICAgcXVlc3Rpb246IFF1ZXN0aW9uLFxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nLFxuICAgIG5ld1ZhbHVlOiBhbnlcbiAgKSB7XG4gICAgaWYgKCF0aGlzLmpzb24ub25Qcm9wZXJ0eUNoYW5nZWQpIHJldHVybjtcbiAgICB0aGlzLmpzb24ub25Qcm9wZXJ0eUNoYW5nZWQocXVlc3Rpb24sIHByb3BlcnR5TmFtZSwgbmV3VmFsdWUpO1xuICB9XG4gIHB1YmxpYyBvblZhbHVlQ2hhbmdlZChxdWVzdGlvbjogUXVlc3Rpb24sIG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSkge1xuICAgIGlmICghdGhpcy5qc29uLm9uVmFsdWVDaGFuZ2VkKSByZXR1cm47XG4gICAgdGhpcy5qc29uLm9uVmFsdWVDaGFuZ2VkKHF1ZXN0aW9uLCBuYW1lLCBuZXdWYWx1ZSk7XG4gIH1cbiAgcHVibGljIG9uSXRlbVZhbHVlUHJvcGVydHlDaGFuZ2VkKFxuICAgIHF1ZXN0aW9uOiBRdWVzdGlvbixcbiAgICBpdGVtOiBJdGVtVmFsdWUsXG4gICAgcHJvcGVydHlOYW1lOiBzdHJpbmcsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG5ld1ZhbHVlOiBhbnlcbiAgKSB7XG4gICAgaWYgKCF0aGlzLmpzb24ub25JdGVtVmFsdWVQcm9wZXJ0eUNoYW5nZWQpIHJldHVybjtcbiAgICB0aGlzLmpzb24ub25JdGVtVmFsdWVQcm9wZXJ0eUNoYW5nZWQocXVlc3Rpb24sIHtcbiAgICAgIG9iajogaXRlbSxcbiAgICAgIHByb3BlcnR5TmFtZTogcHJvcGVydHlOYW1lLFxuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIG5ld1ZhbHVlOiBuZXdWYWx1ZSxcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgZ2V0RGlzcGxheVZhbHVlKGtleUFzVGV4dDogYm9vbGVhbiwgdmFsdWU6IGFueSwgcXVlc3Rpb246IFF1ZXN0aW9uKSB7XG4gICAgaWYgKCF0aGlzLmpzb24uZ2V0RGlzcGxheVZhbHVlKSByZXR1cm4gcXVlc3Rpb24uZ2V0RGlzcGxheVZhbHVlKGtleUFzVGV4dCwgdmFsdWUpO1xuICAgIHJldHVybiB0aGlzLmpzb24uZ2V0RGlzcGxheVZhbHVlKHF1ZXN0aW9uKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzQ29tcG9zaXRlKCkge1xuICAgIHJldHVybiAhIXRoaXMuanNvbi5lbGVtZW50c0pTT04gfHwgISF0aGlzLmpzb24uY3JlYXRlRWxlbWVudHM7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbXBvbmVudENvbGxlY3Rpb24ge1xuICBwdWJsaWMgc3RhdGljIEluc3RhbmNlOiBDb21wb25lbnRDb2xsZWN0aW9uID0gbmV3IENvbXBvbmVudENvbGxlY3Rpb24oKTtcbiAgcHJpdmF0ZSBjdXN0b21RdWVzdGlvblZhbHVlczogQXJyYXk8Q29tcG9uZW50UXVlc3Rpb25KU09OPiA9IFtdO1xuICBwdWJsaWMgb25DcmVhdGVDb21wb3NpdGU6IChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcXVlc3Rpb25KU09OOiBDb21wb25lbnRRdWVzdGlvbkpTT05cbiAgKSA9PiBRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsO1xuICBwdWJsaWMgb25DcmVhdGVDdXN0b206IChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcXVlc3Rpb25KU09OOiBDb21wb25lbnRRdWVzdGlvbkpTT05cbiAgKSA9PiBRdWVzdGlvbkN1c3RvbU1vZGVsO1xuICBwdWJsaWMgb25BZGRpbmdKc29uOiAobmFtZTogc3RyaW5nLCBpc0NvbXBvc2l0ZTogYm9vbGVhbikgPT4gdm9pZDtcbiAgcHVibGljIGFkZChqc29uOiBhbnkpIHtcbiAgICBpZiAoIWpzb24pIHJldHVybjtcbiAgICBsZXQgbmFtZSA9IGpzb24ubmFtZTtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIHRocm93IFwiQXR0cmlidXRlIG5hbWUgaXMgbWlzc2VkXCI7XG4gICAgfVxuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKCEhdGhpcy5nZXRDdXN0b21RdWVzdGlvbkJ5TmFtZShuYW1lKSkge1xuICAgICAgdGhyb3cgXCJUaGVyZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgY3VzdG9tIHF1ZXN0aW9uIHdpdGggbmFtZSAnXCIgK1xuICAgICAgbmFtZSArXG4gICAgICBcIidcIjtcbiAgICB9XG4gICAgaWYgKCEhU2VyaWFsaXplci5maW5kQ2xhc3MobmFtZSkpIHtcbiAgICAgIHRocm93IFwiVGhlcmUgaXMgYWxyZWFkeSBjbGFzcyB3aXRoIG5hbWUgJ1wiICsgbmFtZSArIFwiJ1wiO1xuICAgIH1cbiAgICB2YXIgY3VzdG9tUXVlc3Rpb24gPSBuZXcgQ29tcG9uZW50UXVlc3Rpb25KU09OKG5hbWUsIGpzb24pO1xuICAgIGlmICghIXRoaXMub25BZGRpbmdKc29uKVxuICAgICAgdGhpcy5vbkFkZGluZ0pzb24obmFtZSwgY3VzdG9tUXVlc3Rpb24uaXNDb21wb3NpdGUpO1xuICAgIHRoaXMuY3VzdG9tUXVlc3Rpb25WYWx1ZXMucHVzaChjdXN0b21RdWVzdGlvbik7XG4gIH1cbiAgcHVibGljIGdldCBpdGVtcygpOiBBcnJheTxDb21wb25lbnRRdWVzdGlvbkpTT04+IHtcbiAgICByZXR1cm4gdGhpcy5jdXN0b21RdWVzdGlvblZhbHVlcztcbiAgfVxuICBwdWJsaWMgZ2V0Q3VzdG9tUXVlc3Rpb25CeU5hbWUobmFtZTogc3RyaW5nKTogQ29tcG9uZW50UXVlc3Rpb25KU09OIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VzdG9tUXVlc3Rpb25WYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmN1c3RvbVF1ZXN0aW9uVmFsdWVzW2ldLm5hbWUgPT0gbmFtZSlcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tUXVlc3Rpb25WYWx1ZXNbaV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyBjbGVhcigpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY3VzdG9tUXVlc3Rpb25WYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIFNlcmlhbGl6ZXIucmVtb3ZlQ2xhc3ModGhpcy5jdXN0b21RdWVzdGlvblZhbHVlc1tpXS5uYW1lKTtcbiAgICB9XG4gICAgdGhpcy5jdXN0b21RdWVzdGlvblZhbHVlcyA9IFtdO1xuICB9XG4gIHB1YmxpYyBjcmVhdGVRdWVzdGlvbihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcXVlc3Rpb25KU09OOiBDb21wb25lbnRRdWVzdGlvbkpTT05cbiAgKTogUXVlc3Rpb24ge1xuICAgIGlmICghIXF1ZXN0aW9uSlNPTi5pc0NvbXBvc2l0ZSlcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUNvbXBvc2l0ZU1vZGVsKG5hbWUsIHF1ZXN0aW9uSlNPTik7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlQ3VzdG9tTW9kZWwobmFtZSwgcXVlc3Rpb25KU09OKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlQ29tcG9zaXRlTW9kZWwoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHF1ZXN0aW9uSlNPTjogQ29tcG9uZW50UXVlc3Rpb25KU09OXG4gICk6IFF1ZXN0aW9uQ29tcG9zaXRlTW9kZWwge1xuICAgIGlmICghIXRoaXMub25DcmVhdGVDb21wb3NpdGUpXG4gICAgICByZXR1cm4gdGhpcy5vbkNyZWF0ZUNvbXBvc2l0ZShuYW1lLCBxdWVzdGlvbkpTT04pO1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25Db21wb3NpdGVNb2RlbChuYW1lLCBxdWVzdGlvbkpTT04pO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVDdXN0b21Nb2RlbChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcXVlc3Rpb25KU09OOiBDb21wb25lbnRRdWVzdGlvbkpTT05cbiAgKTogUXVlc3Rpb25DdXN0b21Nb2RlbCB7XG4gICAgaWYgKCEhdGhpcy5vbkNyZWF0ZUN1c3RvbSkgcmV0dXJuIHRoaXMub25DcmVhdGVDdXN0b20obmFtZSwgcXVlc3Rpb25KU09OKTtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uQ3VzdG9tTW9kZWwobmFtZSwgcXVlc3Rpb25KU09OKTtcbiAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUXVlc3Rpb25DdXN0b21Nb2RlbEJhc2UgZXh0ZW5kcyBRdWVzdGlvblxuICBpbXBsZW1lbnRzIElTdXJ2ZXlJbXBsLCBJU3VydmV5RGF0YSwgSVBhbmVsIHtcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nLCBwdWJsaWMgY3VzdG9tUXVlc3Rpb246IENvbXBvbmVudFF1ZXN0aW9uSlNPTikge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIEN1c3RvbVByb3BlcnRpZXNDb2xsZWN0aW9uLmNyZWF0ZVByb3BlcnRpZXModGhpcyk7XG4gICAgU3VydmV5RWxlbWVudC5DcmVhdGVEaXNhYmxlZERlc2lnbkVsZW1lbnRzID0gdHJ1ZTtcbiAgICB0aGlzLmNyZWF0ZVdyYXBwZXIoKTtcbiAgICBTdXJ2ZXlFbGVtZW50LkNyZWF0ZURpc2FibGVkRGVzaWduRWxlbWVudHMgPSBmYWxzZTtcbiAgICBpZiAoISF0aGlzLmN1c3RvbVF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLmN1c3RvbVF1ZXN0aW9uLm9uQ3JlYXRlZCh0aGlzKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gISF0aGlzLmN1c3RvbVF1ZXN0aW9uID8gdGhpcy5jdXN0b21RdWVzdGlvbi5uYW1lIDogXCJjdXN0b21cIjtcbiAgfVxuICBwdWJsaWMgbG9jU3Ryc0NoYW5nZWQoKSB7XG4gICAgc3VwZXIubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICBpZiAoISF0aGlzLmdldEVsZW1lbnQoKSkge1xuICAgICAgdGhpcy5nZXRFbGVtZW50KCkubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVdyYXBwZXIoKSB7IH1cbiAgcHJvdGVjdGVkIG9uUHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZTogc3RyaW5nLCBvbGRWYWx1ZTogYW55LCBuZXdWYWx1ZTogYW55KSB7XG4gICAgc3VwZXIub25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lLCBvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgIGlmICghIXRoaXMuY3VzdG9tUXVlc3Rpb24gJiYgIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHtcbiAgICAgIHRoaXMuY3VzdG9tUXVlc3Rpb24ub25Qcm9wZXJ0eUNoYW5nZWQodGhpcywgbmFtZSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgaXRlbVZhbHVlUHJvcGVydHlDaGFuZ2VkKFxuICAgIGl0ZW06IEl0ZW1WYWx1ZSxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgb2xkVmFsdWU6IGFueSxcbiAgICBuZXdWYWx1ZTogYW55XG4gICkge1xuICAgIHN1cGVyLml0ZW1WYWx1ZVByb3BlcnR5Q2hhbmdlZChpdGVtLCBuYW1lLCBvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgIGlmICghIXRoaXMuY3VzdG9tUXVlc3Rpb24gJiYgIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHtcbiAgICAgIHRoaXMuY3VzdG9tUXVlc3Rpb24ub25JdGVtVmFsdWVQcm9wZXJ0eUNoYW5nZWQoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGl0ZW0sXG4gICAgICAgIGl0ZW0ub3duZXJQcm9wZXJ0eU5hbWUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIG5ld1ZhbHVlXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgb25GaXJzdFJlbmRlcmluZygpIHtcbiAgICB2YXIgZWwgPSB0aGlzLmdldEVsZW1lbnQoKTtcbiAgICBpZiAoISFlbCkge1xuICAgICAgZWwub25GaXJzdFJlbmRlcmluZygpO1xuICAgIH1cbiAgICBzdXBlci5vbkZpcnN0UmVuZGVyaW5nKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldEVsZW1lbnQoKTogU3VydmV5RWxlbWVudDtcbiAgcHJvdGVjdGVkIGluaXRFbGVtZW50KGVsOiBTdXJ2ZXlFbGVtZW50KSB7XG4gICAgaWYgKCFlbCkgcmV0dXJuO1xuICAgIGVsLnNldFN1cnZleUltcGwodGhpcyk7XG4gICAgZWwuZGlzYWJsZURlc2lnbkFjdGlvbnMgPSB0cnVlO1xuICB9XG4gIHB1YmxpYyBzZXRTdXJ2ZXlJbXBsKHZhbHVlOiBJU3VydmV5SW1wbCwgaXNMaWdodD86IGJvb2xlYW4pIHtcbiAgICBzdXBlci5zZXRTdXJ2ZXlJbXBsKHZhbHVlLCBpc0xpZ2h0KTtcbiAgICB0aGlzLmluaXRFbGVtZW50KHRoaXMuZ2V0RWxlbWVudCgpKTtcbiAgfVxuICBwdWJsaWMgb25TdXJ2ZXlMb2FkKCkge1xuICAgIHN1cGVyLm9uU3VydmV5TG9hZCgpO1xuICAgIGlmICghIXRoaXMuZ2V0RWxlbWVudCgpKSB7XG4gICAgICB0aGlzLmdldEVsZW1lbnQoKS5vblN1cnZleUxvYWQoKTtcbiAgICAgIHRoaXMuY3VzdG9tUXVlc3Rpb24ub25Mb2FkZWQodGhpcyk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBhZnRlclJlbmRlclF1ZXN0aW9uRWxlbWVudChlbDogSFRNTEVsZW1lbnQpIHtcbiAgICAvL0RvIG5vdGhpbmdcbiAgfVxuICBwdWJsaWMgYWZ0ZXJSZW5kZXIoZWw6IGFueSkge1xuICAgIHN1cGVyLmFmdGVyUmVuZGVyKGVsKTtcbiAgICBpZiAoISF0aGlzLmN1c3RvbVF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLmN1c3RvbVF1ZXN0aW9uLm9uQWZ0ZXJSZW5kZXIodGhpcywgZWwpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZTogYW55LCB1cGRhdGVJc0Fuc3dlcmVkOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIHN1cGVyLnNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWUsIHVwZGF0ZUlzQW5zd2VyZWQpO1xuICAgIHRoaXMudXBkYXRlRWxlbWVudENzcygpO1xuICB9XG4gIHByb3RlY3RlZCBzZXROZXdWYWx1ZShuZXdWYWx1ZTogYW55KSB7XG4gICAgc3VwZXIuc2V0TmV3VmFsdWUobmV3VmFsdWUpO1xuICAgIHRoaXMudXBkYXRlRWxlbWVudENzcygpO1xuICB9XG4gIC8vSVN1cnZleUltcGxcbiAgZ2V0U3VydmV5RGF0YSgpOiBJU3VydmV5RGF0YSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgLy8gZ2V0U3VydmV5KCk6IElTdXJ2ZXkge1xuICAvLyAgIHJldHVybiB0aGlzLnN1cnZleTtcbiAgLy8gfVxuICBnZXRUZXh0UHJvY2Vzc29yKCk6IElUZXh0UHJvY2Vzc29yIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0UHJvY2Vzc29yO1xuICB9XG4gIC8vSVN1cnZleURhdGFcbiAgZ2V0VmFsdWUobmFtZTogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfVxuICBzZXRWYWx1ZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgbmV3VmFsdWU6IGFueSxcbiAgICBsb2NOb3RpZmljYXRpb246IGFueSxcbiAgICBhbGxvd05vdGlmeVZhbHVlQ2hhbmdlZD86IGJvb2xlYW5cbiAgKTogYW55IHtcbiAgICBpZiAoIXRoaXMuZGF0YSkgcmV0dXJuO1xuICAgIHZhciBuZXdOYW1lID0gdGhpcy5jb252ZXJ0RGF0YU5hbWUobmFtZSk7XG4gICAgdGhpcy5kYXRhLnNldFZhbHVlKFxuICAgICAgbmV3TmFtZSxcbiAgICAgIHRoaXMuY29udmVydERhdGFWYWx1ZShuYW1lLCBuZXdWYWx1ZSksXG4gICAgICBsb2NOb3RpZmljYXRpb24sXG4gICAgICBhbGxvd05vdGlmeVZhbHVlQ2hhbmdlZFxuICAgICk7XG4gICAgdGhpcy51cGRhdGVJc0Fuc3dlcmVkKCk7XG4gICAgdGhpcy51cGRhdGVFbGVtZW50Q3NzKCk7XG4gICAgaWYgKCEhdGhpcy5jdXN0b21RdWVzdGlvbikge1xuICAgICAgdGhpcy5jdXN0b21RdWVzdGlvbi5vblZhbHVlQ2hhbmdlZCh0aGlzLCBuYW1lLCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjb252ZXJ0RGF0YU5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZU5hbWUoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY29udmVydERhdGFWYWx1ZShuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBuZXdWYWx1ZTtcbiAgfVxuICBnZXRWYXJpYWJsZShuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiAhIXRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRWYXJpYWJsZShuYW1lKSA6IG51bGw7XG4gIH1cbiAgc2V0VmFyaWFibGUobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRhdGEpIHJldHVybjtcbiAgICB0aGlzLmRhdGEuc2V0VmFyaWFibGUobmFtZSwgbmV3VmFsdWUpO1xuICB9XG4gIGdldENvbW1lbnQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gISF0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0Q29tbWVudCh0aGlzLmdldFZhbHVlTmFtZSgpKSA6IFwiXCI7XG4gIH1cbiAgc2V0Q29tbWVudChuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBzdHJpbmcsIGxvY05vdGlmaWNhdGlvbjogYW55KTogYW55IHtcbiAgICBpZiAoIXRoaXMuZGF0YSkgcmV0dXJuO1xuICAgIHRoaXMuZGF0YS5zZXRDb21tZW50KHRoaXMuZ2V0VmFsdWVOYW1lKCksIG5ld1ZhbHVlLCBsb2NOb3RpZmljYXRpb24pO1xuICB9XG4gIGdldEFsbFZhbHVlcygpOiBhbnkge1xuICAgIHJldHVybiAhIXRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRBbGxWYWx1ZXMoKSA6IHt9O1xuICB9XG4gIGdldEZpbHRlcmVkVmFsdWVzKCk6IGFueSB7XG4gICAgcmV0dXJuICEhdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldEZpbHRlcmVkVmFsdWVzKCkgOiB7fTtcbiAgfVxuICBnZXRGaWx0ZXJlZFByb3BlcnRpZXMoKTogYW55IHtcbiAgICByZXR1cm4gISF0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0RmlsdGVyZWRQcm9wZXJ0aWVzKCkgOiB7fTtcbiAgfVxuICAvL0lQYW5lbFxuICBhZGRFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50LCBpbmRleDogbnVtYmVyKSB7IH1cbiAgcmVtb3ZlRWxlbWVudChlbGVtZW50OiBJRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBnZXRRdWVzdGlvblRpdGxlTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJsZWZ0XCI7XG4gIH1cbiAgZ2V0UXVlc3Rpb25TdGFydEluZGV4KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RhcnRJbmRleCgpO1xuICB9XG4gIGdldENoaWxkcmVuTGF5b3V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInJvd1wiO1xuICB9XG4gIGVsZW1lbnRXaWR0aENoYW5nZWQoZWw6IElFbGVtZW50KSB7IH1cbiAgZ2V0IGVsZW1lbnRzKCk6IEFycmF5PElFbGVtZW50PiB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGluZGV4T2YoZWw6IElFbGVtZW50KTogbnVtYmVyIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgZW5zdXJlUm93c1Zpc2liaWxpdHkoKTogdm9pZCB7XG4gICAgLy8gZG8gbm90aGluZ1xuICB9XG4gIHByb3RlY3RlZCBnZXRDb250ZW50RGlzcGxheVZhbHVlQ29yZShrZXlBc1RleHQ6IGJvb2xlYW4sIHZhbHVlOiBhbnksIHF1ZXN0aW9uOiBRdWVzdGlvbik6IGFueSB7XG4gICAgaWYgKCFxdWVzdGlvbikgcmV0dXJuIHN1cGVyLmdldERpc3BsYXlWYWx1ZUNvcmUoa2V5QXNUZXh0LCB2YWx1ZSk7XG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tUXVlc3Rpb24uZ2V0RGlzcGxheVZhbHVlKGtleUFzVGV4dCwgdmFsdWUsIHF1ZXN0aW9uKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25DdXN0b21Nb2RlbCBleHRlbmRzIFF1ZXN0aW9uQ3VzdG9tTW9kZWxCYXNlIHtcbiAgcHJpdmF0ZSBxdWVzdGlvbldyYXBwZXI6IFF1ZXN0aW9uO1xuICBwdWJsaWMgZ2V0VGVtcGxhdGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJjdXN0b21cIjtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlV3JhcHBlcigpIHtcbiAgICB0aGlzLnF1ZXN0aW9uV3JhcHBlciA9IHRoaXMuY3JlYXRlUXVlc3Rpb24oKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RWxlbWVudCgpOiBTdXJ2ZXlFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5jb250ZW50UXVlc3Rpb247XG4gIH1cbiAgb25BbnlWYWx1ZUNoYW5nZWQobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIub25BbnlWYWx1ZUNoYW5nZWQobmFtZSk7XG4gICAgaWYgKCEhdGhpcy5jb250ZW50UXVlc3Rpb24pIHtcbiAgICAgIHRoaXMuY29udGVudFF1ZXN0aW9uLm9uQW55VmFsdWVDaGFuZ2VkKG5hbWUpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgaGFzRXJyb3JzKGZpcmVDYWxsYmFjazogYm9vbGVhbiA9IHRydWUsIHJlYzogYW55ID0gbnVsbCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5jb250ZW50UXVlc3Rpb24pIHJldHVybiBmYWxzZTtcbiAgICB2YXIgcmVzID0gdGhpcy5jb250ZW50UXVlc3Rpb24uaGFzRXJyb3JzKGZpcmVDYWxsYmFjaywgcmVjKTtcbiAgICB0aGlzLmVycm9ycyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb250ZW50UXVlc3Rpb24uZXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKHRoaXMuY29udGVudFF1ZXN0aW9uLmVycm9yc1tpXSk7XG4gICAgfVxuICAgIGlmICghcmVzKSB7XG4gICAgICByZXMgPSBzdXBlci5oYXNFcnJvcnMoZmlyZUNhbGxiYWNrLCByZWMpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUVsZW1lbnRDc3MoKTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBmb2N1cyhvbkVycm9yOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAoISF0aGlzLmNvbnRlbnRRdWVzdGlvbikge1xuICAgICAgdGhpcy5jb250ZW50UXVlc3Rpb24uZm9jdXMob25FcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1cGVyLmZvY3VzKG9uRXJyb3IpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0IGNvbnRlbnRRdWVzdGlvbigpOiBRdWVzdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25XcmFwcGVyO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVRdWVzdGlvbigpOiBRdWVzdGlvbiB7XG4gICAgdmFyIGpzb24gPSB0aGlzLmN1c3RvbVF1ZXN0aW9uLmpzb247XG4gICAgdmFyIHJlcyA9IG51bGw7XG4gICAgaWYgKCEhanNvbi5xdWVzdGlvbkpTT04pIHtcbiAgICAgIHZhciBxVHlwZSA9IGpzb24ucXVlc3Rpb25KU09OLnR5cGU7XG4gICAgICBpZiAoIXFUeXBlIHx8ICFTZXJpYWxpemVyLmZpbmRDbGFzcyhxVHlwZSkpXG4gICAgICAgIHRocm93IFwidHlwZSBhdHRyaWJ1dGUgaW4gcXVlc3Rpb25KU09OIGlzIGVtcHR5IG9yIGluY29ycmVjdFwiO1xuICAgICAgcmVzID0gPFF1ZXN0aW9uPlNlcmlhbGl6ZXIuY3JlYXRlQ2xhc3MocVR5cGUpO1xuICAgICAgdGhpcy5pbml0RWxlbWVudChyZXMpO1xuICAgICAgcmVzLmZyb21KU09OKGpzb24ucXVlc3Rpb25KU09OKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCEhanNvbi5jcmVhdGVRdWVzdGlvbikge1xuICAgICAgICByZXMgPSBqc29uLmNyZWF0ZVF1ZXN0aW9uKCk7XG4gICAgICAgIHRoaXMuaW5pdEVsZW1lbnQocmVzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCEhcmVzICYmICFyZXMubmFtZSkge1xuICAgICAgcmVzLm5hbWUgPSBcInF1ZXN0aW9uXCI7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIG9uU3VydmV5TG9hZCgpIHtcbiAgICBzdXBlci5vblN1cnZleUxvYWQoKTtcbiAgICBpZiAoIXRoaXMuY29udGVudFF1ZXN0aW9uKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpICYmICF0aGlzLmNvbnRlbnRRdWVzdGlvbi5pc0VtcHR5KCkpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNvbnRlbnRRdWVzdGlvbi52YWx1ZTtcbiAgICB9XG4gIH1cbiAgcHVibGljIHJ1bkNvbmRpdGlvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIHN1cGVyLnJ1bkNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIGlmICghIXRoaXMuY29udGVudFF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLmNvbnRlbnRRdWVzdGlvbi5ydW5Db25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNvbnZlcnREYXRhTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5jb250ZW50UXVlc3Rpb24pIHJldHVybiBzdXBlci5jb252ZXJ0RGF0YU5hbWUobmFtZSk7XG4gICAgdmFyIG5ld05hbWUgPSBuYW1lLnJlcGxhY2UoXG4gICAgICB0aGlzLmNvbnRlbnRRdWVzdGlvbi5nZXRWYWx1ZU5hbWUoKSxcbiAgICAgIHRoaXMuZ2V0VmFsdWVOYW1lKClcbiAgICApO1xuICAgIHJldHVybiBuZXdOYW1lLmluZGV4T2YodGhpcy5nZXRWYWx1ZU5hbWUoKSkgPT0gMFxuICAgICAgPyBuZXdOYW1lXG4gICAgICA6IHN1cGVyLmNvbnZlcnREYXRhTmFtZShuYW1lKTtcbiAgfVxuICBwcm90ZWN0ZWQgY29udmVydERhdGFWYWx1ZShuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmNvbnZlcnREYXRhTmFtZShuYW1lKSA9PSBzdXBlci5jb252ZXJ0RGF0YU5hbWUobmFtZSlcbiAgICAgID8gdGhpcy5jb250ZW50UXVlc3Rpb24udmFsdWVcbiAgICAgIDogbmV3VmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIHNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWU6IGFueSwgdXBkYXRlSXNBbnN3ZXJlZDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBzdXBlci5zZXRRdWVzdGlvblZhbHVlKG5ld1ZhbHVlLCB1cGRhdGVJc0Fuc3dlcmVkKTtcbiAgICBpZiAoXG4gICAgICAhIXRoaXMuY29udGVudFF1ZXN0aW9uICYmXG4gICAgICAhdGhpcy5pc1R3b1ZhbHVlRXF1YWxzKHRoaXMuY29udGVudFF1ZXN0aW9uLnZhbHVlLCBuZXdWYWx1ZSlcbiAgICApIHtcbiAgICAgIHRoaXMuY29udGVudFF1ZXN0aW9uLnZhbHVlID0gdGhpcy5nZXRVbmJpbmRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG4gIG9uU3VydmV5VmFsdWVDaGFuZ2VkKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBzdXBlci5vblN1cnZleVZhbHVlQ2hhbmdlZChuZXdWYWx1ZSk7XG4gICAgaWYgKCEhdGhpcy5jb250ZW50UXVlc3Rpb24pIHtcbiAgICAgIHRoaXMuY29udGVudFF1ZXN0aW9uLm9uU3VydmV5VmFsdWVDaGFuZ2VkKG5ld1ZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldFZhbHVlQ29yZSgpIHtcbiAgICBpZiAoISF0aGlzLmNvbnRlbnRRdWVzdGlvbikgcmV0dXJuIHRoaXMuY29udGVudFF1ZXN0aW9uLnZhbHVlO1xuICAgIHJldHVybiBzdXBlci5nZXRWYWx1ZUNvcmUoKTtcbiAgfVxuICBwcm90ZWN0ZWQgaW5pdEVsZW1lbnQoZWw6IFN1cnZleUVsZW1lbnQpIHtcbiAgICBzdXBlci5pbml0RWxlbWVudChlbCk7XG4gICAgaWYgKCEhZWwpIHtcbiAgICAgICg8UXVlc3Rpb24+ZWwpLnBhcmVudCA9IHRoaXM7XG4gICAgICAoPFF1ZXN0aW9uPmVsKS5hZnRlclJlbmRlclF1ZXN0aW9uQ2FsbGJhY2sgPSAoXG4gICAgICAgIHF1ZXN0aW9uOiBRdWVzdGlvbixcbiAgICAgICAgZWxlbWVudDogYW55XG4gICAgICApID0+IHtcbiAgICAgICAgaWYgKCEhdGhpcy5jdXN0b21RdWVzdGlvbikge1xuICAgICAgICAgIHRoaXMuY3VzdG9tUXVlc3Rpb24ub25BZnRlclJlbmRlckNvbnRlbnRFbGVtZW50KFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIHF1ZXN0aW9uLFxuICAgICAgICAgICAgZWxlbWVudFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVFbGVtZW50Q3NzQ29yZShjc3NDbGFzc2VzOiBhbnkpIHtcbiAgICBpZiAoISF0aGlzLmNvbnRlbnRRdWVzdGlvbikge1xuICAgICAgY3NzQ2xhc3NlcyA9IHRoaXMuY29udGVudFF1ZXN0aW9uLmNzc0NsYXNzZXM7XG4gICAgfVxuICAgIHN1cGVyLnVwZGF0ZUVsZW1lbnRDc3NDb3JlKGNzc0NsYXNzZXMpO1xuICB9XG4gIHByb3RlY3RlZCBnZXREaXNwbGF5VmFsdWVDb3JlKGtleUFzVGV4dDogYm9vbGVhbiwgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIHN1cGVyLmdldENvbnRlbnREaXNwbGF5VmFsdWVDb3JlKGtleUFzVGV4dCwgdmFsdWUsIHRoaXMuY29udGVudFF1ZXN0aW9uKTtcbiAgfVxufVxuXG5jbGFzcyBRdWVzdGlvbkNvbXBvc2l0ZVRleHRQcm9jZXNzb3IgZXh0ZW5kcyBRdWVzdGlvblRleHRQcm9jZXNzb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgY29tcG9zaXRlOiBRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsLFxuICAgIHByb3RlY3RlZCB2YXJpYWJsZU5hbWU6IHN0cmluZ1xuICApIHtcbiAgICBzdXBlcih2YXJpYWJsZU5hbWUpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgc3VydmV5KCk6IElTdXJ2ZXkge1xuICAgIHJldHVybiB0aGlzLmNvbXBvc2l0ZS5zdXJ2ZXk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldCBwYW5lbCgpOiBQYW5lbE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb3NpdGUuY29udGVudFBhbmVsO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsIGV4dGVuZHMgUXVlc3Rpb25DdXN0b21Nb2RlbEJhc2Uge1xuICBwdWJsaWMgc3RhdGljIEl0ZW1WYXJpYWJsZU5hbWUgPSBcImNvbXBvc2l0ZVwiO1xuICBwcml2YXRlIHBhbmVsV3JhcHBlcjogUGFuZWxNb2RlbDtcbiAgcHJpdmF0ZSB0ZXh0UHJvY2Vzc2luZzogUXVlc3Rpb25Db21wb3NpdGVUZXh0UHJvY2Vzc29yO1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIHB1YmxpYyBjdXN0b21RdWVzdGlvbjogQ29tcG9uZW50UXVlc3Rpb25KU09OKSB7XG4gICAgc3VwZXIobmFtZSwgY3VzdG9tUXVlc3Rpb24pO1xuICAgIHRoaXMudGV4dFByb2Nlc3NpbmcgPSBuZXcgUXVlc3Rpb25Db21wb3NpdGVUZXh0UHJvY2Vzc29yKFxuICAgICAgdGhpcyxcbiAgICAgIFF1ZXN0aW9uQ29tcG9zaXRlTW9kZWwuSXRlbVZhcmlhYmxlTmFtZVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVdyYXBwZXIoKSB7XG4gICAgdGhpcy5wYW5lbFdyYXBwZXIgPSB0aGlzLmNyZWF0ZVBhbmVsKCk7XG4gIH1cbiAgcHVibGljIGdldFRlbXBsYXRlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiY29tcG9zaXRlXCI7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENzc1R5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJjb21wb3NpdGVcIjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RWxlbWVudCgpOiBTdXJ2ZXlFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5jb250ZW50UGFuZWw7XG4gIH1cbiAgcHVibGljIGdldCBjb250ZW50UGFuZWwoKTogUGFuZWxNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMucGFuZWxXcmFwcGVyO1xuICB9XG4gIHB1YmxpYyBoYXNFcnJvcnMoZmlyZUNhbGxiYWNrOiBib29sZWFuID0gdHJ1ZSwgcmVjOiBhbnkgPSBudWxsKTogYm9vbGVhbiB7XG4gICAgdmFyIHJlcyA9IHN1cGVyLmhhc0Vycm9ycyhmaXJlQ2FsbGJhY2ssIHJlYyk7XG4gICAgaWYgKCF0aGlzLmNvbnRlbnRQYW5lbCkgcmV0dXJuIHJlcztcbiAgICByZXR1cm4gdGhpcy5jb250ZW50UGFuZWwuaGFzRXJyb3JzKGZpcmVDYWxsYmFjaywgZmFsc2UsIHJlYykgfHwgcmVzO1xuICB9XG4gIHB1YmxpYyB1cGRhdGVFbGVtZW50Q3NzKHJlTmV3PzogYm9vbGVhbikge1xuICAgIHN1cGVyLnVwZGF0ZUVsZW1lbnRDc3MocmVOZXcpO1xuICAgIGlmICh0aGlzLmNvbnRlbnRQYW5lbCkge1xuICAgICAgdGhpcy5jb250ZW50UGFuZWwudXBkYXRlRWxlbWVudENzcyhyZU5ldyk7XG4gICAgfVxuICB9XG4gIGdldFRleHRQcm9jZXNzb3IoKTogSVRleHRQcm9jZXNzb3Ige1xuICAgIHJldHVybiB0aGlzLnRleHRQcm9jZXNzaW5nO1xuICB9XG4gIGNsZWFyVmFsdWVJZkludmlzaWJsZSgpIHtcbiAgICBzdXBlci5jbGVhclZhbHVlSWZJbnZpc2libGUoKTtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5jb250ZW50UGFuZWwucXVlc3Rpb25zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBxdWVzdGlvbnNbaV0uY2xlYXJWYWx1ZUlmSW52aXNpYmxlKCk7XG4gICAgfVxuICB9XG4gIG9uQW55VmFsdWVDaGFuZ2VkKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyLm9uQW55VmFsdWVDaGFuZ2VkKG5hbWUpO1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmNvbnRlbnRQYW5lbC5xdWVzdGlvbnM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHF1ZXN0aW9uc1tpXS5vbkFueVZhbHVlQ2hhbmdlZChuYW1lKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZVBhbmVsKCk6IFBhbmVsTW9kZWwge1xuICAgIHZhciByZXMgPSA8UGFuZWxNb2RlbD5TZXJpYWxpemVyLmNyZWF0ZUNsYXNzKFwicGFuZWxcIik7XG4gICAgcmVzLnNob3dRdWVzdGlvbk51bWJlcnMgPSBcIm9mZlwiO1xuICAgIHJlcy5yZW5kZXJXaWR0aCA9IFwiMTAwJVwiO1xuICAgIHZhciBqc29uID0gdGhpcy5jdXN0b21RdWVzdGlvbi5qc29uO1xuICAgIGlmICghIWpzb24uZWxlbWVudHNKU09OKSB7XG4gICAgICByZXMuZnJvbUpTT04oeyBlbGVtZW50czoganNvbi5lbGVtZW50c0pTT04gfSk7XG4gICAgfVxuICAgIGlmICghIWpzb24uY3JlYXRlRWxlbWVudHMpIHtcbiAgICAgIGpzb24uY3JlYXRlRWxlbWVudHMocmVzLCB0aGlzKTtcbiAgICB9XG4gICAgdGhpcy5pbml0RWxlbWVudChyZXMpO1xuICAgIHJlcy5yZWFkT25seSA9IHRoaXMuaXNSZWFkT25seTtcbiAgICB0aGlzLnNldEFmdGVyUmVuZGVyQ2FsbGJhY2tzKHJlcyk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcm90ZWN0ZWQgb25SZWFkT25seUNoYW5nZWQoKSB7XG4gICAgaWYgKCEhdGhpcy5jb250ZW50UGFuZWwpIHtcbiAgICAgIHRoaXMuY29udGVudFBhbmVsLnJlYWRPbmx5ID0gdGhpcy5pc1JlYWRPbmx5O1xuICAgIH1cbiAgICBzdXBlci5vblJlYWRPbmx5Q2hhbmdlZCgpO1xuICB9XG4gIHB1YmxpYyBvblN1cnZleUxvYWQoKSB7XG4gICAgaWYgKCEhdGhpcy5jb250ZW50UGFuZWwpIHtcbiAgICAgIHRoaXMuY29udGVudFBhbmVsLnJlYWRPbmx5ID0gdGhpcy5pc1JlYWRPbmx5O1xuICAgICAgdGhpcy5zZXRJc0NvbnRlbnRFbGVtZW50KHRoaXMuY29udGVudFBhbmVsKTtcbiAgICB9XG4gICAgc3VwZXIub25TdXJ2ZXlMb2FkKCk7XG4gICAgaWYoISF0aGlzLmNvbnRlbnRQYW5lbCkge1xuICAgICAgY29uc3QgdmFsID0gdGhpcy5jb250ZW50UGFuZWwuZ2V0VmFsdWUoKTtcbiAgICAgIGlmKCFIZWxwZXJzLmlzVmFsdWVFbXB0eSh2YWwpKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWw7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgc2V0SXNDb250ZW50RWxlbWVudChwYW5lbDogUGFuZWxNb2RlbCkge1xuICAgIHBhbmVsLmlzQ29udGVudEVsZW1lbnQgPSB0cnVlO1xuICAgIHZhciBlbGVtZW50cyA9IHBhbmVsLmVsZW1lbnRzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlbCA9IGVsZW1lbnRzW2ldO1xuICAgICAgaWYgKGVsLmlzUGFuZWwpIHtcbiAgICAgICAgdGhpcy5zZXRJc0NvbnRlbnRFbGVtZW50KDxQYW5lbE1vZGVsPmVsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICg8UXVlc3Rpb24+ZWwpLmlzQ29udGVudEVsZW1lbnQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwdWJsaWMgc2V0VmlzaWJsZUluZGV4KHZhbDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICB2YXIgcmVzID0gc3VwZXIuc2V0VmlzaWJsZUluZGV4KHZhbCk7XG4gICAgaWYgKHRoaXMuaXNWaXNpYmxlICYmICEhdGhpcy5jb250ZW50UGFuZWwpIHtcbiAgICAgIHJlcyArPSB0aGlzLmNvbnRlbnRQYW5lbC5zZXRWaXNpYmxlSW5kZXgodmFsKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgcnVuQ29uZGl0aW9uKHZhbHVlczogSGFzaFRhYmxlPGFueT4sIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+KSB7XG4gICAgc3VwZXIucnVuQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgaWYgKCEhdGhpcy5jb250ZW50UGFuZWwpIHtcbiAgICAgIHZhciBvbGRDb21wb3NpdGUgPSB2YWx1ZXNbUXVlc3Rpb25Db21wb3NpdGVNb2RlbC5JdGVtVmFyaWFibGVOYW1lXTtcbiAgICAgIHZhbHVlc1tcbiAgICAgICAgUXVlc3Rpb25Db21wb3NpdGVNb2RlbC5JdGVtVmFyaWFibGVOYW1lXG4gICAgICBdID0gdGhpcy5jb250ZW50UGFuZWwuZ2V0VmFsdWUoKTtcbiAgICAgIHRoaXMuY29udGVudFBhbmVsLnJ1bkNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgICAgZGVsZXRlIHZhbHVlc1tRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsLkl0ZW1WYXJpYWJsZU5hbWVdO1xuICAgICAgaWYgKCEhb2xkQ29tcG9zaXRlKSB7XG4gICAgICAgIHZhbHVlc1tRdWVzdGlvbkNvbXBvc2l0ZU1vZGVsLkl0ZW1WYXJpYWJsZU5hbWVdID0gb2xkQ29tcG9zaXRlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBnZXRWYWx1ZShuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgIHJldHVybiAhIXZhbCA/IHZhbFtuYW1lXSA6IG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBzZXR0aW5nTmV3VmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2V0VmFsdWUoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG5ld1ZhbHVlOiBhbnksXG4gICAgbG9jTm90aWZpY2F0aW9uOiBhbnksXG4gICAgYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQ/OiBib29sZWFuXG4gICk6IGFueSB7XG4gICAgaWYgKHRoaXMuc2V0dGluZ05ld1ZhbHVlKSByZXR1cm47XG4gICAgc3VwZXIuc2V0VmFsdWUobmFtZSwgbmV3VmFsdWUsIGxvY05vdGlmaWNhdGlvbiwgYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQpO1xuICAgIGlmICghdGhpcy5jb250ZW50UGFuZWwpIHJldHVybjtcbiAgICB2YXIgcSA9IHRoaXMuY29udGVudFBhbmVsLmdldFF1ZXN0aW9uQnlOYW1lKG5hbWUpO1xuICAgIGlmICghIXEgJiYgIXRoaXMuaXNUd29WYWx1ZUVxdWFscyhuZXdWYWx1ZSwgcS52YWx1ZSkpIHtcbiAgICAgIHRoaXMuc2V0dGluZ05ld1ZhbHVlID0gdHJ1ZTtcbiAgICAgIHEudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgIHRoaXMuc2V0dGluZ05ld1ZhbHVlID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBhZGRDb25kaXRpb25PYmplY3RzQnlDb250ZXh0KFxuICAgIG9iamVjdHM6IEFycmF5PElDb25kaXRpb25PYmplY3Q+LFxuICAgIGNvbnRleHQ6IGFueVxuICApIHtcbiAgICBpZiAoIXRoaXMuY29udGVudFBhbmVsKSByZXR1cm47XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuY29udGVudFBhbmVsLnF1ZXN0aW9ucztcbiAgICB2YXIgcHJlZml4TmFtZSA9IHRoaXMubmFtZTtcbiAgICB2YXIgcHJlZml4VGV4dCA9IHRoaXMudGl0bGU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG9iamVjdHMucHVzaCh7XG4gICAgICAgIG5hbWU6IHByZWZpeE5hbWUgKyBcIi5cIiArIHF1ZXN0aW9uc1tpXS5uYW1lLFxuICAgICAgICB0ZXh0OiBwcmVmaXhUZXh0ICsgXCIuXCIgKyBxdWVzdGlvbnNbaV0udGl0bGUsXG4gICAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbnNbaV0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNvbnZlcnREYXRhVmFsdWUobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KTogYW55IHtcbiAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICBpZiAoIXZhbCkgdmFsID0ge307XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KG5ld1ZhbHVlKSAmJiAhdGhpcy5pc0VkaXRpbmdTdXJ2ZXlFbGVtZW50KSB7XG4gICAgICBkZWxldGUgdmFsW25hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWxbbmFtZV0gPSBuZXdWYWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZTogYW55LCB1cGRhdGVJc0Fuc3dlcmVkOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIHN1cGVyLnNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWUsIHVwZGF0ZUlzQW5zd2VyZWQpO1xuICAgIHRoaXMuc2V0dGluZ05ld1ZhbHVlID0gdHJ1ZTtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5jb250ZW50UGFuZWwucXVlc3Rpb25zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0gcXVlc3Rpb25zW2ldLmdldFZhbHVlTmFtZSgpO1xuICAgICAgcXVlc3Rpb25zW2ldLnZhbHVlID0gISFuZXdWYWx1ZSA/IG5ld1ZhbHVlW2tleV0gOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMuc2V0dGluZ05ld1ZhbHVlID0gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERpc3BsYXlWYWx1ZUNvcmUoa2V5QXNUZXh0OiBib29sZWFuLCB2YWx1ZTogYW55KTogYW55IHtcbiAgICByZXR1cm4gc3VwZXIuZ2V0Q29udGVudERpc3BsYXlWYWx1ZUNvcmUoa2V5QXNUZXh0LCB2YWx1ZSwgPGFueT50aGlzLmNvbnRlbnRQYW5lbCk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRBZnRlclJlbmRlckNhbGxiYWNrcyhwYW5lbDogUGFuZWxNb2RlbCkge1xuICAgIGlmICghcGFuZWwgfHwgIXRoaXMuY3VzdG9tUXVlc3Rpb24pIHJldHVybjtcbiAgICB2YXIgcXVlc3Rpb25zID0gcGFuZWwucXVlc3Rpb25zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBxdWVzdGlvbnNbaV0uYWZ0ZXJSZW5kZXJRdWVzdGlvbkNhbGxiYWNrID0gKFxuICAgICAgICBxdWVzdGlvbjogUXVlc3Rpb24sXG4gICAgICAgIGVsZW1lbnQ6IGFueVxuICAgICAgKSA9PiB7XG4gICAgICAgIHRoaXMuY3VzdG9tUXVlc3Rpb24ub25BZnRlclJlbmRlckNvbnRlbnRFbGVtZW50KFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgcXVlc3Rpb24sXG4gICAgICAgICAgZWxlbWVudFxuICAgICAgICApO1xuICAgICAgfTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IFF1ZXN0aW9uU2VsZWN0QmFzZSB9IGZyb20gXCIuL3F1ZXN0aW9uX2Jhc2VzZWxlY3RcIjtcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xuaW1wb3J0IHsgQ3NzQ2xhc3NCdWlsZGVyIH0gZnJvbSBcIi4vdXRpbHMvY3NzQ2xhc3NCdWlsZGVyXCI7XG5cbi8qKlxuICogQSBNb2RlbCBmb3IgYSBkcm9wZG93biBxdWVzdGlvblxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25Ecm9wZG93bk1vZGVsIGV4dGVuZHMgUXVlc3Rpb25TZWxlY3RCYXNlIHtcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcIm9wdGlvbnNDYXB0aW9uXCIsIHRoaXMpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoXG4gICAgICBbXCJjaG9pY2VzTWluXCIsIFwiY2hvaWNlc01heFwiLCBcImNob2ljZXNTdGVwXCJdLFxuICAgICAgZnVuY3Rpb24oKSB7XG4gICAgICAgIHNlbGYub25WaXNpYmxlQ2hvaWNlc0NoYW5nZWQoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBUaGlzIGZsYWcgY29udHJvbHMgd2hldGhlciB0byBzaG93IG9wdGlvbnMgY2FwdGlvbiBpdGVtICgnQ2hvb3NlLi4uJykuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dPcHRpb25zQ2FwdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd09wdGlvbnNDYXB0aW9uXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd09wdGlvbnNDYXB0aW9uKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dPcHRpb25zQ2FwdGlvblwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBzZXQgdGhlIG9wdGlvbnMgY2FwdGlvbiBkaWZmZXJlbnQgZnJvbSB0aGUgZGVmYXVsdCB2YWx1ZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgdGFrZW4gZnJvbSBsb2NhbGl6YXRpb24gc3RyaW5ncy5cbiAgICovXG4gIHB1YmxpYyBnZXQgb3B0aW9uc0NhcHRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJvcHRpb25zQ2FwdGlvblwiLFxuICAgICAgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm9wdGlvbnNDYXB0aW9uXCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IG9wdGlvbnNDYXB0aW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJvcHRpb25zQ2FwdGlvblwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NPcHRpb25zQ2FwdGlvbigpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJvcHRpb25zQ2FwdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImRyb3Bkb3duXCI7XG4gIH1cbiAgcHVibGljIGdldCBzZWxlY3RlZEl0ZW0oKTogSXRlbVZhbHVlIHtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBJdGVtVmFsdWUuZ2V0SXRlbUJ5VmFsdWUodGhpcy52aXNpYmxlQ2hvaWNlcywgdGhpcy52YWx1ZSk7XG4gIH1cbiAgc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSBtaW5NYXhDaG9pY2VzID0gPEFycmF5PEl0ZW1WYWx1ZT4+W107XG4gIHByb3RlY3RlZCBnZXRDaG9pY2VzKCk6IEFycmF5PEl0ZW1WYWx1ZT4ge1xuICAgIHZhciBpdGVtcyA9IHN1cGVyLmdldENob2ljZXMoKTtcbiAgICBpZiAodGhpcy5jaG9pY2VzTWF4IDw9IHRoaXMuY2hvaWNlc01pbikgcmV0dXJuIGl0ZW1zO1xuICAgIHZhciByZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXMucHVzaChpdGVtc1tpXSk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMubWluTWF4Q2hvaWNlcy5sZW5ndGggPT09IDAgfHxcbiAgICAgIHRoaXMubWluTWF4Q2hvaWNlcy5sZW5ndGggIT09XG4gICAgICAgICh0aGlzLmNob2ljZXNNYXggLSB0aGlzLmNob2ljZXNNaW4pIC8gdGhpcy5jaG9pY2VzU3RlcCArIDFcbiAgICApIHtcbiAgICAgIHRoaXMubWluTWF4Q2hvaWNlcyA9IFtdO1xuICAgICAgZm9yIChcbiAgICAgICAgdmFyIGkgPSB0aGlzLmNob2ljZXNNaW47XG4gICAgICAgIGkgPD0gdGhpcy5jaG9pY2VzTWF4O1xuICAgICAgICBpICs9IHRoaXMuY2hvaWNlc1N0ZXBcbiAgICAgICkge1xuICAgICAgICB0aGlzLm1pbk1heENob2ljZXMucHVzaChuZXcgSXRlbVZhbHVlKGkpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzID0gcmVzLmNvbmNhdCh0aGlzLm1pbk1heENob2ljZXMpO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIGFuZCBjaG9pY2VzTWF4IHByb3BlcnR5IHRvIGF1dG9tYXRpY2FsbHkgYWRkIGNob2ljZXMuIEZvciBleGFtcGxlIGNob2ljZXNNaW4gPSAxIGFuZCBjaG9pY2VzTWF4ID0gMTAgd2lsbCBnZW5lcmF0ZSB0ZW4gYWRkaXRpb25hbCBjaG9pY2VzIGZyb20gMSB0byAxMC5cbiAgICogQHNlZSBjaG9pY2VzTWF4XG4gICAqIEBzZWUgY2hvaWNlc1N0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXQgY2hvaWNlc01pbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzTWluXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY2hvaWNlc01pbih2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNNaW5cIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgYW5kIGNob2ljZXNNYXggcHJvcGVydHkgdG8gYXV0b21hdGljYWxseSBhZGQgY2hvaWNlcy4gRm9yIGV4YW1wbGUgY2hvaWNlc01pbiA9IDEgYW5kIGNob2ljZXNNYXggPSAxMCB3aWxsIGdlbmVyYXRlIHRlbiBhZGRpdGlvbmFsIGNob2ljZXMgZnJvbSAxIHRvIDEwLlxuICAgKiBAc2VlIGNob2ljZXNNaW5cbiAgICogQHNlZSBjaG9pY2VzU3RlcFxuICAgKi9cbiAgcHVibGljIGdldCBjaG9pY2VzTWF4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNob2ljZXNNYXhcIik7XG4gIH1cbiAgcHVibGljIHNldCBjaG9pY2VzTWF4KHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc01heFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxLiBJdCB0ZWxscyB0aGUgdmFsdWUgb2YgdGhlIGl0ZXJhdG9yIGJldHdlZW4gY2hvaWNlc01pbiBhbmQgY2hvaWNlc01heCBwcm9wZXJ0aWVzLlxuICAgKiBJZiBjaG9pY2VzTWluID0gMTAsIGNob2ljZXNNYXggPSAzMCBhbmQgY2hvaWNlc1N0ZXAgPSAxMCB0aGVuIHlvdSB3aWxsIGhhdmUgb25seSB0aHJlZSBhZGRpdGlvbmFsIGNob2ljZXM6IFsxMCwgMjAsIDMwXS5cbiAgICogQHNlZSBjaG9pY2VzTWluXG4gICAqIEBzZWUgY2hvaWNlc01heFxuICAgKi9cbiAgcHVibGljIGdldCBjaG9pY2VzU3RlcCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzU3RlcFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNob2ljZXNTdGVwKHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKHZhbCA8IDEpIHZhbCA9IDE7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2hvaWNlc1N0ZXBcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogRHJvcGRvd24gYXV0byBjb21wbGV0ZVxuICAgKi9cbiAgcHVibGljIGdldCBhdXRvQ29tcGxldGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYXV0b0NvbXBsZXRlXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgYXV0b0NvbXBsZXRlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYXV0b0NvbXBsZXRlXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldENvbnRyb2xDbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgQ3NzQ2xhc3NCdWlsZGVyKClcbiAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmNvbnRyb2wpXG4gICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5vbkVycm9yLCB0aGlzLmVycm9ycy5sZW5ndGggPiAwKVxuICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuY29udHJvbERpc2FibGVkLCB0aGlzLmlzUmVhZE9ubHkpXG4gICAgICAudG9TdHJpbmcoKTtcbiAgfVxufVxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJkcm9wZG93blwiLFxuICBbXG4gICAgeyBuYW1lOiBcIm9wdGlvbnNDYXB0aW9uXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NPcHRpb25zQ2FwdGlvblwiIH0sXG4gICAgeyBuYW1lOiBcInNob3dPcHRpb25zQ2FwdGlvbjpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgICB7IG5hbWU6IFwiY2hvaWNlc01pbjpudW1iZXJcIiwgZGVmYXVsdDogMCB9LFxuICAgIHsgbmFtZTogXCJjaG9pY2VzTWF4Om51bWJlclwiLCBkZWZhdWx0OiAwIH0sXG4gICAgeyBuYW1lOiBcImNob2ljZXNTdGVwOm51bWJlclwiLCBkZWZhdWx0OiAxLCBtaW5WYWx1ZTogMSB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiYXV0b0NvbXBsZXRlXCIsXG4gICAgICBkYXRhTGlzdDogW1xuICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgXCJob25vcmlmaWMtcHJlZml4XCIsXG4gICAgICAgIFwiZ2l2ZW4tbmFtZVwiLFxuICAgICAgICBcImFkZGl0aW9uYWwtbmFtZVwiLFxuICAgICAgICBcImZhbWlseS1uYW1lXCIsXG4gICAgICAgIFwiaG9ub3JpZmljLXN1ZmZpeFwiLFxuICAgICAgICBcIm5pY2tuYW1lXCIsXG4gICAgICAgIFwib3JnYW5pemF0aW9uLXRpdGxlXCIsXG4gICAgICAgIFwidXNlcm5hbWVcIixcbiAgICAgICAgXCJuZXctcGFzc3dvcmRcIixcbiAgICAgICAgXCJjdXJyZW50LXBhc3N3b3JkXCIsXG4gICAgICAgIFwib3JnYW5pemF0aW9uXCIsXG4gICAgICAgIFwic3RyZWV0LWFkZHJlc3NcIixcbiAgICAgICAgXCJhZGRyZXNzLWxpbmUxXCIsXG4gICAgICAgIFwiYWRkcmVzcy1saW5lMlwiLFxuICAgICAgICBcImFkZHJlc3MtbGluZTNcIixcbiAgICAgICAgXCJhZGRyZXNzLWxldmVsNFwiLFxuICAgICAgICBcImFkZHJlc3MtbGV2ZWwzXCIsXG4gICAgICAgIFwiYWRkcmVzcy1sZXZlbDJcIixcbiAgICAgICAgXCJhZGRyZXNzLWxldmVsMVwiLFxuICAgICAgICBcImNvdW50cnlcIixcbiAgICAgICAgXCJjb3VudHJ5LW5hbWVcIixcbiAgICAgICAgXCJwb3N0YWwtY29kZVwiLFxuICAgICAgICBcImNjLW5hbWVcIixcbiAgICAgICAgXCJjYy1naXZlbi1uYW1lXCIsXG4gICAgICAgIFwiY2MtYWRkaXRpb25hbC1uYW1lXCIsXG4gICAgICAgIFwiY2MtZmFtaWx5LW5hbWVcIixcbiAgICAgICAgXCJjYy1udW1iZXJcIixcbiAgICAgICAgXCJjYy1leHBcIixcbiAgICAgICAgXCJjYy1leHAtbW9udGhcIixcbiAgICAgICAgXCJjYy1leHAteWVhclwiLFxuICAgICAgICBcImNjLWNzY1wiLFxuICAgICAgICBcImNjLXR5cGVcIixcbiAgICAgICAgXCJ0cmFuc2FjdGlvbi1jdXJyZW5jeVwiLFxuICAgICAgICBcInRyYW5zYWN0aW9uLWFtb3VudFwiLFxuICAgICAgICBcImxhbmd1YWdlXCIsXG4gICAgICAgIFwiYmRheVwiLFxuICAgICAgICBcImJkYXktZGF5XCIsXG4gICAgICAgIFwiYmRheS1tb250aFwiLFxuICAgICAgICBcImJkYXkteWVhclwiLFxuICAgICAgICBcInNleFwiLFxuICAgICAgICBcInVybFwiLFxuICAgICAgICBcInBob3RvXCIsXG4gICAgICAgIFwidGVsXCIsXG4gICAgICAgIFwidGVsLWNvdW50cnktY29kZVwiLFxuICAgICAgICBcInRlbC1uYXRpb25hbFwiLFxuICAgICAgICBcInRlbC1hcmVhLWNvZGVcIixcbiAgICAgICAgXCJ0ZWwtbG9jYWxcIixcbiAgICAgICAgXCJ0ZWwtbG9jYWwtcHJlZml4XCIsXG4gICAgICAgIFwidGVsLWxvY2FsLXN1ZmZpeFwiLFxuICAgICAgICBcInRlbC1leHRlbnNpb25cIixcbiAgICAgICAgXCJlbWFpbFwiLFxuICAgICAgICBcImltcHBcIixcbiAgICAgIF0sXG4gICAgfSxcbiAgXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkRyb3Bkb3duTW9kZWwoXCJcIik7XG4gIH0sXG4gIFwic2VsZWN0YmFzZVwiXG4pO1xuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJkcm9wZG93blwiLCAobmFtZSkgPT4ge1xuICB2YXIgcSA9IG5ldyBRdWVzdGlvbkRyb3Bkb3duTW9kZWwobmFtZSk7XG4gIHEuY2hvaWNlcyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0Q2hvaWNlcztcbiAgcmV0dXJuIHE7XG59KTtcbiIsImltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5cbi8qKlxuICogQSBNb2RlbCBmb3IgYW4gcXVlc3Rpb24gdGhhdCByZW5kZXJzIGVtcHR5IFwiZGl2XCIgdGFnLiBJdCB1c2VkIGFzIGEgYmFzZSBjbGFzcyBmb3Igc29tZSBjdXN0b20gd2lkZ2V0c1xuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25FbXB0eU1vZGVsIGV4dGVuZHMgUXVlc3Rpb24ge1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImVtcHR5XCI7XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJlbXB0eVwiLFxuICBbXSxcbiAgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25FbXB0eU1vZGVsKFwiXCIpO1xuICB9LFxuICBcInF1ZXN0aW9uXCJcbik7XG4iLCJpbXBvcnQgeyBIYXNoVGFibGUsIEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQgeyBFeHByZXNzaW9uUnVubmVyIH0gZnJvbSBcIi4vY29uZGl0aW9uc1wiO1xuaW1wb3J0IHsgU3VydmV5RXJyb3IgfSBmcm9tIFwiLi9zdXJ2ZXktZXJyb3JcIjtcblxuLyoqXG4gKiBBIE1vZGVsIGZvciBleHByZXNzaW9uIHF1ZXN0aW9uLiBJdCBpcyBhIHJlYWQtb25seSBxdWVzdGlvbi4gSXQgY2FsY3VsYXRlcyB2YWx1ZSBiYXNlZCBvbiBlcHhyZXNzaW9uIHByb3BlcnR5LlxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25FeHByZXNzaW9uTW9kZWwgZXh0ZW5kcyBRdWVzdGlvbiB7XG4gIHByaXZhdGUgZXhwcmVzc2lvbklzUnVubmluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBleHByZXNzaW9uUnVubmVyOiBFeHByZXNzaW9uUnVubmVyO1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwiZm9ybWF0XCIsIHRoaXMpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwiZXhwcmVzc2lvblwiLCBmdW5jdGlvbigpIHtcbiAgICAgIGlmIChzZWxmLmV4cHJlc3Npb25SdW5uZXIpIHtcbiAgICAgICAgc2VsZi5leHByZXNzaW9uUnVubmVyID0gbmV3IEV4cHJlc3Npb25SdW5uZXIoc2VsZi5leHByZXNzaW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImV4cHJlc3Npb25cIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc0lucHV0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gZGlzcGxheSB0aGUgdmFsdWUgaW4geW91ciBvd24gZm9ybWF0LiBNYWtlIHN1cmUgeW91IGhhdmUgXCJ7MH1cIiBzdWJzdHJpbmcgaW4geW91ciBzdHJpbmcsIHRvIGRpc3BsYXkgdGhlIGFjdHVhbCB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgZm9ybWF0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiZm9ybWF0XCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgZm9ybWF0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJmb3JtYXRcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jRm9ybWF0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImZvcm1hdFwiKTtcbiAgfVxuICAvKipcbiAgICogVGhlIEV4cHJlc3Npb24gdGhhdCB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgcXVlc3Rpb24gdmFsdWUuIFlvdSBtYXkgdXNlIHN0YW5kYXJkIG9wZXJhdG9ycyBsaWtlICssIC0sICogYW5kIC8sIHNxdWFyZXMgKCkuIEhlcmUgaXMgdGhlIGV4YW1wbGUgb2YgYWNjZXNzaW5nIHRoZSBxdWVzdGlvbiB2YWx1ZSB7cXVlc3Rpb25uYW1lfS5cbiAgICogPGJyLz5FeGFtcGxlOiBcIih7cXVhbnRpdHl9ICoge3ByaWNlfSkgKiAoMTAwIC0ge2Rpc2NvdW50fSkgLyAxMDBcIlxuICAgKi9cbiAgcHVibGljIGdldCBleHByZXNzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImV4cHJlc3Npb25cIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBleHByZXNzaW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZXhwcmVzc2lvblwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBsb2NDYWxjdWxhdGlvbigpIHtcbiAgICB0aGlzLmV4cHJlc3Npb25Jc1J1bm5pbmcgPSB0cnVlO1xuICB9XG4gIHB1YmxpYyB1bmxvY0NhbGN1bGF0aW9uKCkge1xuICAgIHRoaXMuZXhwcmVzc2lvbklzUnVubmluZyA9IGZhbHNlO1xuICB9XG4gIHB1YmxpYyBydW5Db25kaXRpb24odmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHtcbiAgICBzdXBlci5ydW5Db25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5leHByZXNzaW9uIHx8XG4gICAgICB0aGlzLmV4cHJlc3Npb25Jc1J1bm5pbmcgfHxcbiAgICAgICghdGhpcy5ydW5JZlJlYWRPbmx5ICYmIHRoaXMuaXNSZWFkT25seSlcbiAgICApXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5sb2NDYWxjdWxhdGlvbigpO1xuICAgIGlmICghdGhpcy5leHByZXNzaW9uUnVubmVyKSB7XG4gICAgICB0aGlzLmV4cHJlc3Npb25SdW5uZXIgPSBuZXcgRXhwcmVzc2lvblJ1bm5lcih0aGlzLmV4cHJlc3Npb24pO1xuICAgIH1cbiAgICB0aGlzLmV4cHJlc3Npb25SdW5uZXIub25SdW5Db21wbGV0ZSA9IChuZXdWYWx1ZSkgPT4ge1xuICAgICAgaWYgKCFIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMobmV3VmFsdWUsIHRoaXMudmFsdWUpKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMudW5sb2NDYWxjdWxhdGlvbigpO1xuICAgIH07XG4gICAgdGhpcy5leHByZXNzaW9uUnVubmVyLnJ1bih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICB9XG4gIHByb3RlY3RlZCBjYW5Db2xsZWN0RXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByb3RlY3RlZCBoYXNSZXF1aXJlZEVycm9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGZyYWN0aW9uIGRpZ2l0cyB0byB1c2UgaWYgZGlzcGxheVN0eWxlIGlzIG5vdCBcIm5vbmVcIi4gUG9zc2libGUgdmFsdWVzIGFyZSBmcm9tIDAgdG8gMjAuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIC0xIGFuZCBpdCBtZWFucyB0aGF0IHRoaXMgcHJvcGVydHkgaXMgbm90IHVzZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1heGltdW1GcmFjdGlvbkRpZ2l0cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhpbXVtRnJhY3Rpb25EaWdpdHNcIik7XG4gIH1cbiAgcHVibGljIHNldCBtYXhpbXVtRnJhY3Rpb25EaWdpdHModmFsOiBudW1iZXIpIHtcbiAgICBpZiAodmFsIDwgLTEgfHwgdmFsID4gMjApIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtYXhpbXVtRnJhY3Rpb25EaWdpdHNcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIG1pbmltdW0gbnVtYmVyIG9mIGZyYWN0aW9uIGRpZ2l0cyB0byB1c2UgaWYgZGlzcGxheVN0eWxlIGlzIG5vdCBcIm5vbmVcIi4gUG9zc2libGUgdmFsdWVzIGFyZSBmcm9tIDAgdG8gMjAuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIC0xIGFuZCBpdCBtZWFucyB0aGF0IHRoaXMgcHJvcGVydHkgaXMgbm90IHVzZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1pbmltdW1GcmFjdGlvbkRpZ2l0cygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtaW5pbXVtRnJhY3Rpb25EaWdpdHNcIik7XG4gIH1cbiAgcHVibGljIHNldCBtaW5pbXVtRnJhY3Rpb25EaWdpdHModmFsOiBudW1iZXIpIHtcbiAgICBpZiAodmFsIDwgLTEgfHwgdmFsID4gMjApIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtaW5pbXVtRnJhY3Rpb25EaWdpdHNcIiwgdmFsKTtcbiAgfVxuICBwcml2YXRlIHJ1bklmUmVhZE9ubHlWYWx1ZTogYm9vbGVhbjtcbiAgcHVibGljIGdldCBydW5JZlJlYWRPbmx5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJ1bklmUmVhZE9ubHlWYWx1ZSA9PT0gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IHJ1bklmUmVhZE9ubHkodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5ydW5JZlJlYWRPbmx5VmFsdWUgPSB2YWw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERpc3BsYXlWYWx1ZUNvcmUoa2V5c0FzVGV4dDogYm9vbGVhbiwgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgdmFyIHZhbCA9IHRoaXMuaXNWYWx1ZUVtcHR5KHZhbHVlKSA/IHRoaXMuZGVmYXVsdFZhbHVlIDogdmFsdWU7XG4gICAgdmFyIHJlcyA9IFwiXCI7XG4gICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eSh2YWwpKSB7XG4gICAgICB2YXIgc3RyID0gdGhpcy5nZXRWYWx1ZUFzU3RyKHZhbCk7XG4gICAgICByZXMgPSAhdGhpcy5mb3JtYXQgPyBzdHIgOiAoPGFueT50aGlzLmZvcm1hdClbXCJmb3JtYXRcIl0oc3RyKTtcbiAgICB9XG4gICAgaWYgKCEhdGhpcy5zdXJ2ZXkpIHtcbiAgICAgIHJlcyA9IHRoaXMuc3VydmV5LmdldEV4cHJlc3Npb25EaXNwbGF5VmFsdWUodGhpcywgdmFsLCByZXMpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBZb3UgbWF5IHNldCB0aGlzIHByb3BlcnR5IHRvIFwiZGVjaW1hbFwiLCBcImN1cnJlbmN5XCIsIFwicGVyY2VudFwiIG9yIFwiZGF0ZVwiLiBJZiB5b3Ugc2V0IGl0IHRvIFwiY3VycmVuY3lcIiwgeW91IG1heSB1c2UgdGhlIGN1cnJlbmN5IHByb3BlcnR5IHRvIGRpc3BsYXkgdGhlIHZhbHVlIGluIGN1cnJlbmN5IGRpZmZlcmVudCBmcm9tIFVTRC5cbiAgICogQHNlZSBjdXJyZW5jeVxuICAgKi9cbiAgcHVibGljIGdldCBkaXNwbGF5U3R5bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZGlzcGxheVN0eWxlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgZGlzcGxheVN0eWxlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZGlzcGxheVN0eWxlXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSBpdCB0byBkaXNwbGF5IHRoZSB2YWx1ZSBpbiB0aGUgY3VycmVuY3kgZGlmZmVyZW4gZnJvbSBVU0QuIFRoZSBkaXNwbGF5U3R5cGUgc2hvdWxkIGJlIHNldCB0byBcImN1cnJlbmN5XCIuXG4gICAqIEBzZWUgZGlzcGxheVN0eWxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGN1cnJlbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImN1cnJlbmN5XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY3VycmVuY3kodmFsOiBzdHJpbmcpIHtcbiAgICBpZiAoZ2V0Q3VycmVjeUNvZGVzKCkuaW5kZXhPZih2YWwpIDwgMCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImN1cnJlbmN5XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFx0RGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGRpc3BsYXkgZ3JvdXBpbmcgc2VwYXJhdG9ycy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgdHJ1ZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgdXNlR3JvdXBpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInVzZUdyb3VwaW5nXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdXNlR3JvdXBpbmcodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidXNlR3JvdXBpbmdcIiwgdmFsKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VmFsdWVBc1N0cih2YWw6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuZGlzcGxheVN0eWxlID09IFwiZGF0ZVwiKSB7XG4gICAgICB2YXIgZCA9IG5ldyBEYXRlKHZhbCk7XG4gICAgICBpZiAoISFkICYmICEhZC50b0xvY2FsZURhdGVTdHJpbmcpIHJldHVybiBkLnRvTG9jYWxlRGF0ZVN0cmluZygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kaXNwbGF5U3R5bGUgIT0gXCJub25lXCIgJiYgSGVscGVycy5pc051bWJlcih2YWwpKSB7XG4gICAgICB2YXIgbG9jYWxlID0gdGhpcy5nZXRMb2NhbGUoKTtcbiAgICAgIGlmICghbG9jYWxlKSBsb2NhbGUgPSBcImVuXCI7XG4gICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgc3R5bGU6IHRoaXMuZGlzcGxheVN0eWxlLFxuICAgICAgICBjdXJyZW5jeTogdGhpcy5jdXJyZW5jeSxcbiAgICAgICAgdXNlR3JvdXBpbmc6IHRoaXMudXNlR3JvdXBpbmcsXG4gICAgICB9O1xuICAgICAgaWYgKHRoaXMubWF4aW11bUZyYWN0aW9uRGlnaXRzID4gLTEpIHtcbiAgICAgICAgKDxhbnk+b3B0aW9ucylbXCJtYXhpbXVtRnJhY3Rpb25EaWdpdHNcIl0gPSB0aGlzLm1heGltdW1GcmFjdGlvbkRpZ2l0cztcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm1pbmltdW1GcmFjdGlvbkRpZ2l0cyA+IC0xKSB7XG4gICAgICAgICg8YW55Pm9wdGlvbnMpW1wibWluaW11bUZyYWN0aW9uRGlnaXRzXCJdID0gdGhpcy5taW5pbXVtRnJhY3Rpb25EaWdpdHM7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiB2YWwudG9TdHJpbmcoKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVjeUNvZGVzKCk6IEFycmF5PHN0cmluZz4ge1xuICByZXR1cm4gW1xuICAgIFwiQUVEXCIsXG4gICAgXCJBRk5cIixcbiAgICBcIkFMTFwiLFxuICAgIFwiQU1EXCIsXG4gICAgXCJBTkdcIixcbiAgICBcIkFPQVwiLFxuICAgIFwiQVJTXCIsXG4gICAgXCJBVURcIixcbiAgICBcIkFXR1wiLFxuICAgIFwiQVpOXCIsXG4gICAgXCJCQU1cIixcbiAgICBcIkJCRFwiLFxuICAgIFwiQkRUXCIsXG4gICAgXCJCR05cIixcbiAgICBcIkJIRFwiLFxuICAgIFwiQklGXCIsXG4gICAgXCJCTURcIixcbiAgICBcIkJORFwiLFxuICAgIFwiQk9CXCIsXG4gICAgXCJCT1ZcIixcbiAgICBcIkJSTFwiLFxuICAgIFwiQlNEXCIsXG4gICAgXCJCVE5cIixcbiAgICBcIkJXUFwiLFxuICAgIFwiQllOXCIsXG4gICAgXCJCWkRcIixcbiAgICBcIkNBRFwiLFxuICAgIFwiQ0RGXCIsXG4gICAgXCJDSEVcIixcbiAgICBcIkNIRlwiLFxuICAgIFwiQ0hXXCIsXG4gICAgXCJDTEZcIixcbiAgICBcIkNMUFwiLFxuICAgIFwiQ05ZXCIsXG4gICAgXCJDT1BcIixcbiAgICBcIkNPVVwiLFxuICAgIFwiQ1JDXCIsXG4gICAgXCJDVUNcIixcbiAgICBcIkNVUFwiLFxuICAgIFwiQ1ZFXCIsXG4gICAgXCJDWktcIixcbiAgICBcIkRKRlwiLFxuICAgIFwiREtLXCIsXG4gICAgXCJET1BcIixcbiAgICBcIkRaRFwiLFxuICAgIFwiRUdQXCIsXG4gICAgXCJFUk5cIixcbiAgICBcIkVUQlwiLFxuICAgIFwiRVVSXCIsXG4gICAgXCJGSkRcIixcbiAgICBcIkZLUFwiLFxuICAgIFwiR0JQXCIsXG4gICAgXCJHRUxcIixcbiAgICBcIkdIU1wiLFxuICAgIFwiR0lQXCIsXG4gICAgXCJHTURcIixcbiAgICBcIkdORlwiLFxuICAgIFwiR1RRXCIsXG4gICAgXCJHWURcIixcbiAgICBcIkhLRFwiLFxuICAgIFwiSE5MXCIsXG4gICAgXCJIUktcIixcbiAgICBcIkhUR1wiLFxuICAgIFwiSFVGXCIsXG4gICAgXCJJRFJcIixcbiAgICBcIklMU1wiLFxuICAgIFwiSU5SXCIsXG4gICAgXCJJUURcIixcbiAgICBcIklSUlwiLFxuICAgIFwiSVNLXCIsXG4gICAgXCJKTURcIixcbiAgICBcIkpPRFwiLFxuICAgIFwiSlBZXCIsXG4gICAgXCJLRVNcIixcbiAgICBcIktHU1wiLFxuICAgIFwiS0hSXCIsXG4gICAgXCJLTUZcIixcbiAgICBcIktQV1wiLFxuICAgIFwiS1JXXCIsXG4gICAgXCJLV0RcIixcbiAgICBcIktZRFwiLFxuICAgIFwiS1pUXCIsXG4gICAgXCJMQUtcIixcbiAgICBcIkxCUFwiLFxuICAgIFwiTEtSXCIsXG4gICAgXCJMUkRcIixcbiAgICBcIkxTTFwiLFxuICAgIFwiTFlEXCIsXG4gICAgXCJNQURcIixcbiAgICBcIk1ETFwiLFxuICAgIFwiTUdBXCIsXG4gICAgXCJNS0RcIixcbiAgICBcIk1NS1wiLFxuICAgIFwiTU5UXCIsXG4gICAgXCJNT1BcIixcbiAgICBcIk1ST1wiLFxuICAgIFwiTVVSXCIsXG4gICAgXCJNVlJcIixcbiAgICBcIk1XS1wiLFxuICAgIFwiTVhOXCIsXG4gICAgXCJNWFZcIixcbiAgICBcIk1ZUlwiLFxuICAgIFwiTVpOXCIsXG4gICAgXCJOQURcIixcbiAgICBcIk5HTlwiLFxuICAgIFwiTklPXCIsXG4gICAgXCJOT0tcIixcbiAgICBcIk5QUlwiLFxuICAgIFwiTlpEXCIsXG4gICAgXCJPTVJcIixcbiAgICBcIlBBQlwiLFxuICAgIFwiUEVOXCIsXG4gICAgXCJQR0tcIixcbiAgICBcIlBIUFwiLFxuICAgIFwiUEtSXCIsXG4gICAgXCJQTE5cIixcbiAgICBcIlBZR1wiLFxuICAgIFwiUUFSXCIsXG4gICAgXCJST05cIixcbiAgICBcIlJTRFwiLFxuICAgIFwiUlVCXCIsXG4gICAgXCJSV0ZcIixcbiAgICBcIlNBUlwiLFxuICAgIFwiU0JEXCIsXG4gICAgXCJTQ1JcIixcbiAgICBcIlNER1wiLFxuICAgIFwiU0VLXCIsXG4gICAgXCJTR0RcIixcbiAgICBcIlNIUFwiLFxuICAgIFwiU0xMXCIsXG4gICAgXCJTT1NcIixcbiAgICBcIlNSRFwiLFxuICAgIFwiU1NQXCIsXG4gICAgXCJTVERcIixcbiAgICBcIlNWQ1wiLFxuICAgIFwiU1lQXCIsXG4gICAgXCJTWkxcIixcbiAgICBcIlRIQlwiLFxuICAgIFwiVEpTXCIsXG4gICAgXCJUTVRcIixcbiAgICBcIlRORFwiLFxuICAgIFwiVE9QXCIsXG4gICAgXCJUUllcIixcbiAgICBcIlRURFwiLFxuICAgIFwiVFdEXCIsXG4gICAgXCJUWlNcIixcbiAgICBcIlVBSFwiLFxuICAgIFwiVUdYXCIsXG4gICAgXCJVU0RcIixcbiAgICBcIlVTTlwiLFxuICAgIFwiVVlJXCIsXG4gICAgXCJVWVVcIixcbiAgICBcIlVaU1wiLFxuICAgIFwiVkVGXCIsXG4gICAgXCJWTkRcIixcbiAgICBcIlZVVlwiLFxuICAgIFwiV1NUXCIsXG4gICAgXCJYQUZcIixcbiAgICBcIlhBR1wiLFxuICAgIFwiWEFVXCIsXG4gICAgXCJYQkFcIixcbiAgICBcIlhCQlwiLFxuICAgIFwiWEJDXCIsXG4gICAgXCJYQkRcIixcbiAgICBcIlhDRFwiLFxuICAgIFwiWERSXCIsXG4gICAgXCJYT0ZcIixcbiAgICBcIlhQRFwiLFxuICAgIFwiWFBGXCIsXG4gICAgXCJYUFRcIixcbiAgICBcIlhTVVwiLFxuICAgIFwiWFRTXCIsXG4gICAgXCJYVUFcIixcbiAgICBcIlhYWFwiLFxuICAgIFwiWUVSXCIsXG4gICAgXCJaQVJcIixcbiAgICBcIlpNV1wiLFxuICAgIFwiWldMXCIsXG4gIF07XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiZXhwcmVzc2lvblwiLFxuICBbXG4gICAgXCJleHByZXNzaW9uOmV4cHJlc3Npb25cIixcbiAgICB7IG5hbWU6IFwiZm9ybWF0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NGb3JtYXRcIiB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiZGlzcGxheVN0eWxlXCIsXG4gICAgICBkZWZhdWx0OiBcIm5vbmVcIixcbiAgICAgIGNob2ljZXM6IFtcIm5vbmVcIiwgXCJkZWNpbWFsXCIsIFwiY3VycmVuY3lcIiwgXCJwZXJjZW50XCIsIFwiZGF0ZVwiXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiY3VycmVuY3lcIixcbiAgICAgIGNob2ljZXM6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIGdldEN1cnJlY3lDb2RlcygpO1xuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IFwiVVNEXCIsXG4gICAgfSxcbiAgICB7IG5hbWU6IFwibWF4aW11bUZyYWN0aW9uRGlnaXRzOm51bWJlclwiLCBkZWZhdWx0OiAtMSB9LFxuICAgIHsgbmFtZTogXCJtaW5pbXVtRnJhY3Rpb25EaWdpdHM6bnVtYmVyXCIsIGRlZmF1bHQ6IC0xIH0sXG4gICAgeyBuYW1lOiBcInVzZUdyb3VwaW5nOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIHsgbmFtZTogXCJlbmFibGVJZlwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJpc1JlcXVpcmVkXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInJlYWRPbmx5XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInJlcXVpcmVkRXJyb3JUZXh0XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImRlZmF1bHRWYWx1ZUV4cHJlc3Npb25cIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwiZGVmYXVsdFZhbHVlXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImNvcnJlY3RBbnN3ZXJcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwicmVxdWlyZWRJZlwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uRXhwcmVzc2lvbk1vZGVsKFwiXCIpO1xuICB9LFxuICBcInF1ZXN0aW9uXCJcbik7XG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcImV4cHJlc3Npb25cIiwgKG5hbWUpID0+IHtcbiAgcmV0dXJuIG5ldyBRdWVzdGlvbkV4cHJlc3Npb25Nb2RlbChuYW1lKTtcbn0pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgcHJvcGVydHksIFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IEV2ZW50QmFzZSB9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7IFVwbG9hZGluZ0ZpbGVFcnJvciwgRXhjZWVkU2l6ZUVycm9yIH0gZnJvbSBcIi4vZXJyb3JcIjtcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcbmltcG9ydCB7IFN1cnZleUVycm9yIH0gZnJvbSBcIi4vc3VydmV5LWVycm9yXCI7XG5pbXBvcnQgeyBDc3NDbGFzc0J1aWxkZXIgfSBmcm9tIFwiLi91dGlscy9jc3NDbGFzc0J1aWxkZXJcIjtcbmltcG9ydCB7IGNvbmZpcm1BY3Rpb24sIGRldGVjdElFT3JFZGdlLCBsb2FkRmlsZUZyb21CYXNlNjQgfSBmcm9tIFwiLi91dGlscy91dGlsc1wiO1xuXG4vKipcbiAqIEEgTW9kZWwgZm9yIGEgZmlsZSBxdWVzdGlvblxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25GaWxlTW9kZWwgZXh0ZW5kcyBRdWVzdGlvbiB7XG4gIHByaXZhdGUgaXNVcGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQHByb3BlcnR5KCkgaXNEcmFnZ2luZzogYm9vbGVhbiA9IGZhbHNlO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGFmdGVyIHF1ZXN0aW9uIHN0YXRlIGhhcyBiZWVuIGNoYW5nZWQuXG4gICAqIDxici8+IHNlbmRlciB0aGUgcXVlc3Rpb24gb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50XG4gICAqIDxici8+IG9wdGlvbnMuc3RhdGUgbmV3IHF1ZXN0aW9uIHN0YXRlIHZhbHVlLlxuICAgKi9cbiAgcHVibGljIG9uU3RhdGVDaGFuZ2VkOiBFdmVudEJhc2U8UXVlc3Rpb25GaWxlTW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBRdWVzdGlvbkZpbGVNb2RlbFxuICA+KCk7XG4gIHB1YmxpYyBwcmV2aWV3VmFsdWU6IGFueVtdID0gW107XG4gIEBwcm9wZXJ0eSh7IGRlZmF1bHRWYWx1ZTogXCJlbXB0eVwiIH0pIGN1cnJlbnRTdGF0ZTogc3RyaW5nO1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImZpbGVcIjtcbiAgfVxuICBwdWJsaWMgY2xlYXJPbkRlbGV0aW5nQ29udGFpbmVyKCkge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkpIHJldHVybjtcbiAgICB0aGlzLnN1cnZleS5jbGVhckZpbGVzKHRoaXMsIHRoaXMubmFtZSwgdGhpcy52YWx1ZSwgbnVsbCwgKCkgPT4ge30pO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gdHJ1ZSwgdG8gc2hvdyB0aGUgcHJldmlldyBmb3IgdGhlIGltYWdlIGZpbGVzLlxuICAgKi9cbiAgcHVibGljIGdldCBzaG93UHJldmlldygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1ByZXZpZXdcIik7XG4gIH1cbiAgcHVibGljIHNldCBzaG93UHJldmlldyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93UHJldmlld1wiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gdHJ1ZSwgdG8gYWxsb3cgc2VsZWN0IG11bHRpcGxlIGZpbGVzLlxuICAgKi9cbiAgcHVibGljIGdldCBhbGxvd011bHRpcGxlKCkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhbGxvd011bHRpcGxlXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGFsbG93TXVsdGlwbGUodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dNdWx0aXBsZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgaW1hZ2UgaGVpZ2h0LlxuICAgKi9cbiAgcHVibGljIGdldCBpbWFnZUhlaWdodCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpbWFnZUhlaWdodFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGltYWdlSGVpZ2h0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VIZWlnaHRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGltYWdlIHdpZHRoLlxuICAgKi9cbiAgcHVibGljIGdldCBpbWFnZVdpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImltYWdlV2lkdGhcIik7XG4gIH1cbiAgcHVibGljIHNldCBpbWFnZVdpZHRoKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VXaWR0aFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBBY2NlcHRlZCBmaWxlIHR5cGVzLiBQYXNzZWQgdG8gdGhlICdhY2NlcHQnIGF0dHJpYnV0ZSBvZiB0aGUgZmlsZSBpbnB1dCB0YWcuIFNlZSBodHRwczovL3d3dy53M3NjaG9vbHMuY29tL3RhZ3MvYXR0X2lucHV0X2FjY2VwdC5hc3AgZm9yIG1vcmUgZGV0YWlscy5cbiAgICovXG4gIHB1YmxpYyBnZXQgYWNjZXB0ZWRUeXBlcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhY2NlcHRlZFR5cGVzXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgYWNjZXB0ZWRUeXBlcyh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImFjY2VwdGVkVHlwZXNcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogU2V0IGl0IHRvIGZhbHNlIGlmIHlvdSBkbyBub3Qgd2FudCB0byBzZXJpYWxpemUgZmlsZSBjb250ZW50IGFzIHRleHQgaW4gdGhlIHN1cnZleS5kYXRhLlxuICAgKiBJbiB0aGlzIGNhc2UsIHlvdSBoYXZlIHRvIHdyaXRlIHRoZSBjb2RlIG9uVXBsb2FkRmlsZXMgZXZlbnQgdG8gc3RvcmUgdGhlIGZpbGUgY29udGVudC5cbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5vblVwbG9hZEZpbGVzXG4gICAqL1xuICBwdWJsaWMgZ2V0IHN0b3JlRGF0YUFzVGV4dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic3RvcmVEYXRhQXNUZXh0XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc3RvcmVEYXRhQXNUZXh0KHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInN0b3JlRGF0YUFzVGV4dFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0byB3YWl0IHVudGlsIGZpbGVzIHdpbGwgYmUgdXBsb2FkZWQgdG8geW91ciBzZXJ2ZXIuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHdhaXRGb3JVcGxvYWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIndhaXRGb3JVcGxvYWRcIik7XG4gIH1cbiAgcHVibGljIHNldCB3YWl0Rm9yVXBsb2FkKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIndhaXRGb3JVcGxvYWRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogU2V0IGl0IHRvIGZhbHNlIGlmIHlvdSB3YW50IHRvIGRpc2FibGUgaW1hZ2VzIHByZXZpZXcuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFsbG93SW1hZ2VzUHJldmlldygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dJbWFnZXNQcmV2aWV3XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgYWxsb3dJbWFnZXNQcmV2aWV3KHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImFsbG93SW1hZ2VzUHJldmlld1wiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBzZXR1cCB0aGUgbWF4aW11bSBhbGxvd2VkIGZpbGUgc2l6ZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgbWF4U2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhTaXplXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4U2l6ZSh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heFNpemVcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gc2V0dXAgY29uZmlybWF0aW9uIHRvIHJlbW92ZSBmaWxlLlxuICAgKi9cbiAgcHVibGljIGdldCBuZWVkQ29uZmlybVJlbW92ZUZpbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm5lZWRDb25maXJtUmVtb3ZlRmlsZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IG5lZWRDb25maXJtUmVtb3ZlRmlsZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJuZWVkQ29uZmlybVJlbW92ZUZpbGVcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIHJlbW92ZSBmaWxlIGNvbmZpcm1hdGlvbiBtZXNzYWdlLlxuICAgKi9cbiAgcHVibGljIGdldENvbmZpcm1SZW1vdmVNZXNzYWdlKGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAoPGFueT50aGlzLmNvbmZpcm1SZW1vdmVNZXNzYWdlKS5mb3JtYXQoZmlsZU5hbWUpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgcmVtb3ZlIGZpbGUgY29uZmlybWF0aW9uIG1lc3NhZ2UgdGVtcGxhdGUuXG4gICAqL1xuICBAcHJvcGVydHkoeyBsb2NhbGl6YWJsZTogeyBkZWZhdWx0U3RyOiBcImNvbmZpcm1SZW1vdmVGaWxlXCIgfSB9KSBjb25maXJtUmVtb3ZlTWVzc2FnZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHJlbW92ZSBhbGwgZmlsZXMgY29uZmlybWF0aW9uIG1lc3NhZ2UuXG4gICAqL1xuICBAcHJvcGVydHkoeyBsb2NhbGl6YWJsZTogeyBkZWZhdWx0U3RyOiBcImNvbmZpcm1SZW1vdmVBbGxGaWxlc1wiIH0gfSkgY29uZmlybVJlbW92ZUFsbE1lc3NhZ2U6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBubyBmaWxlIGNob3NlbiBjYXB0aW9uIGZvciBtb2Rlcm4gdGhlbWUuXG4gICAqL1xuICBAcHJvcGVydHkoeyBsb2NhbGl6YWJsZTogeyBkZWZhdWx0U3RyOiBcIm5vRmlsZUNob3NlblwiIH0gfSkgbm9GaWxlQ2hvc2VuQ2FwdGlvbjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGNob29zZSBmaWxlcyBidXR0b24gY2FwdGlvbiBmb3IgbW9kZXJuIHRoZW1lLlxuICAgKi9cbiAgQHByb3BlcnR5KHsgbG9jYWxpemFibGU6IHsgZGVmYXVsdFN0cjogXCJjaG9vc2VGaWxlQ2FwdGlvblwiIH0gfSkgY2hvb3NlQnV0dG9uQ2FwdGlvbjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGNsZWFuIGZpbGVzIGJ1dHRvbiBjYXB0aW9uLlxuICAgKi9cbiAgQHByb3BlcnR5KHsgbG9jYWxpemFibGU6IHsgZGVmYXVsdFN0cjogXCJjbGVhbkNhcHRpb25cIiB9IH0pIGNsZWFuQnV0dG9uQ2FwdGlvbjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHJlbW92ZSBmaWxlIGJ1dHRvbiBjYXB0aW9uLlxuICAgKi9cbiAgQHByb3BlcnR5KHsgbG9jYWxpemFibGU6IHsgZGVmYXVsdFN0cjogXCJyZW1vdmVGaWxlQ2FwdGlvblwiIH0gfSkgcmVtb3ZlRmlsZUNhcHRpb246IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBsb2FkaW5nIGZpbGUgaW5wdXQgdGl0bGUuXG4gICAqL1xuICBAcHJvcGVydHkoeyBsb2NhbGl6YWJsZTogeyBkZWZhdWx0U3RyOiBcImxvYWRpbmdGaWxlXCIgfSB9KSBsb2FkaW5nRmlsZVRpdGxlOiBzdHJpbmc7XG4gIC8qKlxuICAqIFRoZSBjaG9vc2UgZmlsZSBpbnB1dCB0aXRsZS5cbiAgKi9cbiAgQHByb3BlcnR5KHsgbG9jYWxpemFibGU6IHsgZGVmYXVsdFN0cjogXCJjaG9vc2VGaWxlXCIgfSB9KSBjaG9vc2VGaWxlVGl0bGU6IHN0cmluZztcbiAgQHByb3BlcnR5KHsgbG9jYWxpemFibGU6IHsgZGVmYXVsdFN0cjogXCJmaWxlRHJhZ0FyZWFQbGFjZWhvbGRlclwiIH0gfSkgZHJhZ0FyZWFQbGFjZWhvbGRlcjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGlucHV0IHRpdGxlIHZhbHVlLlxuICAgKi9cbiAgZ2V0IGlucHV0VGl0bGUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5pc1VwbG9hZGluZykgcmV0dXJuIHRoaXMubG9hZGluZ0ZpbGVUaXRsZTtcbiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHJldHVybiB0aGlzLmNob29zZUZpbGVUaXRsZTtcbiAgICByZXR1cm4gXCIgXCI7XG4gIH1cbiAgLyoqXG4gICAqIENsZWFyIHZhbHVlIHByb2dyYW1tYXRpY2FsbHkuXG4gICAqL1xuICBwdWJsaWMgY2xlYXIoZG9uZUNhbGxiYWNrPzogKCkgPT4gdm9pZCkge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkpIHJldHVybjtcbiAgICB0aGlzLnN1cnZleS5jbGVhckZpbGVzKFxuICAgICAgdGhpcyxcbiAgICAgIHRoaXMubmFtZSxcbiAgICAgIHRoaXMudmFsdWUsXG4gICAgICBudWxsLFxuICAgICAgKHN0YXR1cywgZGF0YSkgPT4ge1xuICAgICAgICBpZiAoc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgICAgICAgICAhIWRvbmVDYWxsYmFjayAmJiBkb25lQ2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZSBmaWxlIGl0ZW0gcHJvZ3JhbW1hdGljYWxseS5cbiAgICovXG4gIHB1YmxpYyByZW1vdmVGaWxlKGNvbnRlbnQ6IHsgbmFtZTogc3RyaW5nIH0pIHtcbiAgICBpZiAoIXRoaXMuc3VydmV5KSByZXR1cm47XG4gICAgdGhpcy5zdXJ2ZXkuY2xlYXJGaWxlcyhcbiAgICAgIHRoaXMsXG4gICAgICB0aGlzLm5hbWUsXG4gICAgICB0aGlzLnZhbHVlLFxuICAgICAgY29udGVudC5uYW1lLFxuICAgICAgKHN0YXR1cywgZGF0YSkgPT4ge1xuICAgICAgICBpZiAoc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2xkVmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gb2xkVmFsdWUuZmlsdGVyKChmKSA9PiBmLm5hbWUgIT09IGNvbnRlbnQubmFtZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogTG9hZCBtdWx0aXBsZSBmaWxlcyBwcm9ncmFtbWF0aWNhbGx5LlxuICAgKiBAcGFyYW0gZmlsZXNcbiAgICovXG4gIHB1YmxpYyBsb2FkRmlsZXMoZmlsZXM6IEZpbGVbXSkge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgICBpZiAoIXRoaXMuYWxsRmlsZXNPayhmaWxlcykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlQ2hhbmdlZChcImxvYWRpbmdcIik7XG5cbiAgICB2YXIgbG9hZEZpbGVzUHJvYyA9ICgpID0+IHtcbiAgICAgIHZhciBjb250ZW50ID0gPEFycmF5PGFueT4+W107XG4gICAgICBpZiAodGhpcy5zdG9yZURhdGFBc1RleHQpIHtcbiAgICAgICAgZmlsZXMuZm9yRWFjaCgoZmlsZSkgPT4ge1xuICAgICAgICAgIGxldCBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICBmaWxlUmVhZGVyLm9ubG9hZCA9IChlKSA9PiB7XG4gICAgICAgICAgICBjb250ZW50ID0gY29udGVudC5jb25jYXQoW1xuICAgICAgICAgICAgICB7IG5hbWU6IGZpbGUubmFtZSwgdHlwZTogZmlsZS50eXBlLCBjb250ZW50OiBmaWxlUmVhZGVyLnJlc3VsdCB9LFxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICBpZiAoY29udGVudC5sZW5ndGggPT09IGZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gKHRoaXMudmFsdWUgfHwgW10pLmNvbmNhdChjb250ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIGZpbGVSZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5zdXJ2ZXkpIHtcbiAgICAgICAgICB0aGlzLnN1cnZleS51cGxvYWRGaWxlcyh0aGlzLCB0aGlzLm5hbWUsIGZpbGVzLCAoc3RhdHVzLCBkYXRhKSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RhdHVzID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZWQoXCJlcnJvclwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICAgIHRoaXMudmFsdWUgPSAodGhpcy52YWx1ZSB8fCBbXSkuY29uY2F0KFxuICAgICAgICAgICAgICAgIGRhdGEubWFwKChyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHIuZmlsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiByLmZpbGUudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogci5jb250ZW50LFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAodGhpcy5hbGxvd011bHRpcGxlKSB7XG4gICAgICBsb2FkRmlsZXNQcm9jKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xlYXIobG9hZEZpbGVzUHJvYyk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBjYW5QcmV2aWV3SW1hZ2UoZmlsZUl0ZW06IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFsbG93SW1hZ2VzUHJldmlldyAmJiAhIWZpbGVJdGVtICYmIHRoaXMuaXNGaWxlSW1hZ2UoZmlsZUl0ZW0pO1xuICB9XG4gIHByb3RlY3RlZCBzZXRRdWVzdGlvblZhbHVlKG5ld1ZhbHVlOiBhbnksIHVwZGF0ZUlzQW5zd2VyZWQ6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgc3VwZXIuc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZSwgdXBkYXRlSXNBbnN3ZXJlZCk7XG4gICAgdGhpcy5wcmV2aWV3VmFsdWUgPSBbXTtcbiAgICB2YXIgc3RhdGUgPVxuICAgICAgKCFBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSAmJiAhIW5ld1ZhbHVlKSB8fFxuICAgICAgKEFycmF5LmlzQXJyYXkobmV3VmFsdWUpICYmIG5ld1ZhbHVlLmxlbmd0aCA+IDApXG4gICAgICAgID8gdGhpcy5zaG93UHJldmlld1xuICAgICAgICAgID8gXCJsb2FkaW5nXCJcbiAgICAgICAgICA6IFwibG9hZGVkXCJcbiAgICAgICAgOiBcImVtcHR5XCI7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZWQoc3RhdGUpO1xuICAgIGlmICghdGhpcy5zaG93UHJldmlldyB8fCAhbmV3VmFsdWUpIHJldHVybjtcbiAgICB2YXIgbmV3VmFsdWVzID0gQXJyYXkuaXNBcnJheShuZXdWYWx1ZSlcbiAgICAgID8gbmV3VmFsdWVcbiAgICAgIDogISFuZXdWYWx1ZVxuICAgICAgICA/IFtuZXdWYWx1ZV1cbiAgICAgICAgOiBbXTtcblxuICAgIGlmICh0aGlzLnN0b3JlRGF0YUFzVGV4dCkge1xuICAgICAgbmV3VmFsdWVzLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgIHZhciBjb250ZW50ID0gdmFsdWUuY29udGVudCB8fCB2YWx1ZTtcbiAgICAgICAgdGhpcy5wcmV2aWV3VmFsdWUgPSB0aGlzLnByZXZpZXdWYWx1ZS5jb25jYXQoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IHZhbHVlLm5hbWUsXG4gICAgICAgICAgICB0eXBlOiB2YWx1ZS50eXBlLFxuICAgICAgICAgICAgY29udGVudDogY29udGVudCxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKHN0YXRlID09PSBcImxvYWRpbmdcIikgdGhpcy5zdGF0ZUNoYW5nZWQoXCJsb2FkZWRcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1ZhbHVlcy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICB2YXIgY29udGVudCA9IHZhbHVlLmNvbnRlbnQgfHwgdmFsdWU7XG4gICAgICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgICAgIHRoaXMuc3VydmV5LmRvd25sb2FkRmlsZSh0aGlzLm5hbWUsIHZhbHVlLCAoc3RhdHVzLCBkYXRhKSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICAgICB0aGlzLnByZXZpZXdWYWx1ZSA9IHRoaXMucHJldmlld1ZhbHVlLmNvbmNhdChbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgY29udGVudDogZGF0YSxcbiAgICAgICAgICAgICAgICAgIG5hbWU6IHZhbHVlLm5hbWUsXG4gICAgICAgICAgICAgICAgICB0eXBlOiB2YWx1ZS50eXBlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICBpZiAodGhpcy5wcmV2aWV3VmFsdWUubGVuZ3RoID09PSBuZXdWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZWQoXCJsb2FkZWRcIik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VkKFwiZXJyb3JcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgb25DaGVja0ZvckVycm9ycyhcbiAgICBlcnJvcnM6IEFycmF5PFN1cnZleUVycm9yPixcbiAgICBpc09uVmFsdWVDaGFuZ2VkOiBib29sZWFuXG4gICkge1xuICAgIHN1cGVyLm9uQ2hlY2tGb3JFcnJvcnMoZXJyb3JzLCBpc09uVmFsdWVDaGFuZ2VkKTtcbiAgICBpZiAodGhpcy5pc1VwbG9hZGluZyAmJiB0aGlzLndhaXRGb3JVcGxvYWQpIHtcbiAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICBuZXcgVXBsb2FkaW5nRmlsZUVycm9yKFxuICAgICAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJ1cGxvYWRpbmdGaWxlXCIpLFxuICAgICAgICAgIHRoaXNcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIHN0YXRlQ2hhbmdlZChzdGF0ZTogc3RyaW5nKSB7XG4gICAgaWYgKHN0YXRlID09PSBcImxvYWRpbmdcIikge1xuICAgICAgdGhpcy5pc1VwbG9hZGluZyA9IHRydWU7XG4gICAgfVxuICAgIGlmIChzdGF0ZSA9PT0gXCJsb2FkZWRcIikge1xuICAgICAgdGhpcy5pc1VwbG9hZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoc3RhdGUgPT09IFwiZXJyb3JcIikge1xuICAgICAgdGhpcy5pc1VwbG9hZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmN1cnJlbnRTdGF0ZSA9IHN0YXRlO1xuICAgIHRoaXMub25TdGF0ZUNoYW5nZWQuZmlyZSh0aGlzLCB7IHN0YXRlOiBzdGF0ZSB9KTtcbiAgfVxuICBwcml2YXRlIGFsbEZpbGVzT2soZmlsZXM6IEZpbGVbXSk6IGJvb2xlYW4ge1xuICAgIHZhciBlcnJvckxlbmd0aCA9IHRoaXMuZXJyb3JzID8gdGhpcy5lcnJvcnMubGVuZ3RoIDogMDtcbiAgICAoZmlsZXMgfHwgW10pLmZvckVhY2goKGZpbGUpID0+IHtcbiAgICAgIGlmICh0aGlzLm1heFNpemUgPiAwICYmIGZpbGUuc2l6ZSA+IHRoaXMubWF4U2l6ZSkge1xuICAgICAgICB0aGlzLmVycm9ycy5wdXNoKG5ldyBFeGNlZWRTaXplRXJyb3IodGhpcy5tYXhTaXplLCB0aGlzKSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGVycm9yTGVuZ3RoID09PSB0aGlzLmVycm9ycy5sZW5ndGg7XG4gIH1cbiAgcHJpdmF0ZSBpc0ZpbGVJbWFnZShmaWxlOiB7XG4gICAgY29udGVudDogc3RyaW5nLFxuICAgIG5hbWU/OiBzdHJpbmcsXG4gICAgdHlwZT86IHN0cmluZyxcbiAgfSk6IGJvb2xlYW4ge1xuICAgIGlmICghZmlsZSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGltYWdlUHJlZml4ID0gXCJkYXRhOmltYWdlXCI7XG4gICAgdmFyIHN1YlN0ciA9IGZpbGUuY29udGVudCAmJiBmaWxlLmNvbnRlbnQuc3Vic3RyKDAsIGltYWdlUHJlZml4Lmxlbmd0aCk7XG4gICAgc3ViU3RyID0gc3ViU3RyICYmIHN1YlN0ci50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciByZXN1bHQgPVxuICAgICAgc3ViU3RyID09PSBpbWFnZVByZWZpeCB8fFxuICAgICAgKCEhZmlsZS50eXBlICYmIGZpbGUudHlwZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoXCJpbWFnZS9cIikgPT09IDApO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHVibGljIGdldFBsYWluRGF0YShcbiAgICBvcHRpb25zOiB7XG4gICAgICBpbmNsdWRlRW1wdHk/OiBib29sZWFuLFxuICAgICAgY2FsY3VsYXRpb25zPzogQXJyYXk8e1xuICAgICAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZyxcbiAgICAgIH0+LFxuICAgIH0gPSB7XG4gICAgICBpbmNsdWRlRW1wdHk6IHRydWUsXG4gICAgfVxuICApIHtcbiAgICB2YXIgcXVlc3Rpb25QbGFpbkRhdGEgPSBzdXBlci5nZXRQbGFpbkRhdGEob3B0aW9ucyk7XG4gICAgaWYgKCEhcXVlc3Rpb25QbGFpbkRhdGEgJiYgIXRoaXMuaXNFbXB0eSgpKSB7XG4gICAgICBxdWVzdGlvblBsYWluRGF0YS5pc05vZGUgPSBmYWxzZTtcbiAgICAgIHZhciB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpID8gdGhpcy52YWx1ZSA6IFt0aGlzLnZhbHVlXTtcbiAgICAgIHF1ZXN0aW9uUGxhaW5EYXRhLmRhdGEgPSB2YWx1ZXMubWFwKChkYXRhVmFsdWUsIGluZGV4KSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogaW5kZXgsXG4gICAgICAgICAgdGl0bGU6IFwiRmlsZVwiLFxuICAgICAgICAgIHZhbHVlOiAoZGF0YVZhbHVlLmNvbnRlbnQgJiYgZGF0YVZhbHVlLmNvbnRlbnQpIHx8IGRhdGFWYWx1ZSxcbiAgICAgICAgICBkaXNwbGF5VmFsdWU6IChkYXRhVmFsdWUubmFtZSAmJiBkYXRhVmFsdWUubmFtZSkgfHwgZGF0YVZhbHVlLFxuICAgICAgICAgIGdldFN0cmluZzogKHZhbDogYW55KSA9PlxuICAgICAgICAgICAgdHlwZW9mIHZhbCA9PT0gXCJvYmplY3RcIiA/IEpTT04uc3RyaW5naWZ5KHZhbCkgOiB2YWwsXG4gICAgICAgICAgaXNOb2RlOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcXVlc3Rpb25QbGFpbkRhdGE7XG4gIH1cbiAgcHVibGljIHN1cHBvcnRDb21tZW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBnZXRDaG9vc2VGaWxlQ3NzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBDc3NDbGFzc0J1aWxkZXIoKVxuICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuY2hvb3NlRmlsZSlcbiAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmNvbnRyb2xEaXNhYmxlZCwgdGhpcy5pc1JlYWRPbmx5KVxuICAgICAgLnRvU3RyaW5nKCk7XG4gIH1cbiAgcHVibGljIGdldFJlYWRPbmx5RmlsZUNzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgQ3NzQ2xhc3NCdWlsZGVyKClcbiAgICAgIC5hcHBlbmQoXCJmb3JtLWNvbnRyb2xcIilcbiAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLnBsYWNlaG9sZGVySW5wdXQpXG4gICAgICAudG9TdHJpbmcoKTtcbiAgfVxuICBwdWJsaWMgZ2V0RmlsZURlY29yYXRvckNzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgQ3NzQ2xhc3NCdWlsZGVyKClcbiAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmZpbGVEZWNvcmF0b3IpXG4gICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5maWxlRGVjb3JhdG9yRHJhZywgdGhpcy5pc0RyYWdnaW5nKVxuICAgICAgLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIG9uQ2hhbmdlKHNyYzogYW55KSB7XG4gICAgaWYgKCEoPGFueT53aW5kb3cpW1wiRmlsZVJlYWRlclwiXSkgcmV0dXJuO1xuICAgIGlmICghc3JjIHx8ICFzcmMuZmlsZXMgfHwgc3JjLmZpbGVzLmxlbmd0aCA8IDEpIHJldHVybjtcbiAgICBsZXQgZmlsZXMgPSBbXTtcbiAgICBsZXQgYWxsb3dDb3VudCA9IHRoaXMuYWxsb3dNdWx0aXBsZSA/IHNyYy5maWxlcy5sZW5ndGggOiAxO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWxsb3dDb3VudDsgaSsrKSB7XG4gICAgICBmaWxlcy5wdXNoKHNyYy5maWxlc1tpXSk7XG4gICAgfVxuICAgIHNyYy52YWx1ZSA9IFwiXCI7XG4gICAgdGhpcy5sb2FkRmlsZXMoZmlsZXMpO1xuICB9XG4gIC8vI3JlZ2lvblxuICAvLyB3ZWItYmFzZWQgbWV0aG9kc1xuICBvbkRyYWdPdmVyID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICBpZiAodGhpcy5pc0lucHV0UmVhZE9ubHkpIHtcbiAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWU7XG4gICAgZXZlbnQuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSBcImNvcHlcIjtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG4gIG9uRHJvcCA9IChldmVudDogYW55KSA9PiB7XG4gICAgaWYgKCF0aGlzLmlzSW5wdXRSZWFkT25seSkge1xuICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgbGV0IHNyYyA9IGV2ZW50LmRhdGFUcmFuc2ZlcjtcbiAgICAgIHRoaXMub25DaGFuZ2Uoc3JjKTtcbiAgICB9XG4gIH1cbiAgb25EcmFnTGVhdmUgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIGlmICghdGhpcy5pc0lucHV0UmVhZE9ubHkpIHtcbiAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBkb0NoYW5nZSA9IChldmVudDogYW55KSA9PiB7XG4gICAgdmFyIHNyYyA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50O1xuICAgIHRoaXMub25DaGFuZ2Uoc3JjKTtcbiAgfVxuICBkb0NsZWFuID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICB2YXIgc3JjID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XG4gICAgaWYgKHRoaXMubmVlZENvbmZpcm1SZW1vdmVGaWxlKSB7XG4gICAgICB2YXIgaXNDb25maXJtZWQgPSBjb25maXJtQWN0aW9uKHRoaXMuY29uZmlybVJlbW92ZUFsbE1lc3NhZ2UpO1xuICAgICAgaWYgKCFpc0NvbmZpcm1lZCkgcmV0dXJuO1xuICAgIH1cbiAgICBzcmMucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiaW5wdXRcIilbMF0udmFsdWUgPSBcIlwiO1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgfVxuICBkb1JlbW92ZUZpbGUoZGF0YTogYW55KSB7XG4gICAgaWYgKHRoaXMubmVlZENvbmZpcm1SZW1vdmVGaWxlKSB7XG4gICAgICB2YXIgaXNDb25maXJtZWQgPSBjb25maXJtQWN0aW9uKFxuICAgICAgICB0aGlzLmdldENvbmZpcm1SZW1vdmVNZXNzYWdlKGRhdGEubmFtZSlcbiAgICAgICk7XG4gICAgICBpZiAoIWlzQ29uZmlybWVkKSByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucmVtb3ZlRmlsZShkYXRhKTtcbiAgfVxuICBkb0Rvd25sb2FkRmlsZSA9IChldmVudDogYW55LCBkYXRhOiBhbnkpID0+IHtcbiAgICBpZiAoZGV0ZWN0SUVPckVkZ2UoKSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGxvYWRGaWxlRnJvbUJhc2U2NChkYXRhLmNvbnRlbnQsIGRhdGEubmFtZSk7XG4gICAgfVxuICB9XG4gIC8vI2VuZHJlZ2lvblxufVxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJmaWxlXCIsXG4gIFtcbiAgICB7IG5hbWU6IFwiaGFzQ29tbWVudDpzd2l0Y2hcIiwgbGF5b3V0OiBcInJvd1wiIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJjb21tZW50VGV4dFwiLFxuICAgICAgZGVwZW5kc09uOiBcImhhc0NvbW1lbnRcIixcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24ob2JqOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIG9iai5oYXNDb21tZW50O1xuICAgICAgfSxcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NDb21tZW50VGV4dFwiLFxuICAgICAgbGF5b3V0OiBcInJvd1wiLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcInNob3dQcmV2aWV3OmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIFwiYWxsb3dNdWx0aXBsZTpib29sZWFuXCIsXG4gICAgeyBuYW1lOiBcImFsbG93SW1hZ2VzUHJldmlldzpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBcImltYWdlSGVpZ2h0XCIsXG4gICAgXCJpbWFnZVdpZHRoXCIsXG4gICAgXCJhY2NlcHRlZFR5cGVzXCIsXG4gICAgeyBuYW1lOiBcInN0b3JlRGF0YUFzVGV4dDpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgICB7IG5hbWU6IFwid2FpdEZvclVwbG9hZDpib29sZWFuXCIsIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcIm1heFNpemU6bnVtYmVyXCIsIGRlZmF1bHQ6IDAgfSxcbiAgICB7IG5hbWU6IFwiZGVmYXVsdFZhbHVlXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImNvcnJlY3RBbnN3ZXJcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwidmFsaWRhdG9yc1wiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJuZWVkQ29uZmlybVJlbW92ZUZpbGU6Ym9vbGVhblwiIH0sXG4gIF0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25GaWxlTW9kZWwoXCJcIik7XG4gIH0sXG4gIFwicXVlc3Rpb25cIlxuKTtcblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiZmlsZVwiLCAobmFtZSkgPT4ge1xuICByZXR1cm4gbmV3IFF1ZXN0aW9uRmlsZU1vZGVsKG5hbWUpO1xufSk7XG4iLCJpbXBvcnQgeyBRdWVzdGlvbk5vblZhbHVlIH0gZnJvbSBcIi4vcXVlc3Rpb25ub252YWx1ZVwiO1xuaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuXG4vKipcbiAqIEEgTW9kZWwgZm9yIGh0bWwgcXVlc3Rpb24uIFVubGlrZSBvdGhlciBxdWVzdGlvbnMgaXQgZG9lc24ndCBoYXZlIHZhbHVlIGFuZCB0aXRsZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uSHRtbE1vZGVsIGV4dGVuZHMgUXVlc3Rpb25Ob25WYWx1ZSB7XG4gIHB1YmxpYyBpZ25vcmVIdG1sUHJvZ3Jlc3Npbmc6IGJvb2xlYW47XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHZhciBsb2NIdG1sID0gdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImh0bWxcIiwgdGhpcyk7XG4gICAgbG9jSHRtbC5vbkdldFRleHRDYWxsYmFjayA9IChzdHI6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gISF0aGlzLnN1cnZleSAmJiAhdGhpcy5pZ25vcmVIdG1sUHJvZ3Jlc3NpbmdcbiAgICAgICAgPyB0aGlzLnN1cnZleS5wcm9jZXNzSHRtbChzdHIpXG4gICAgICAgIDogc3RyO1xuICAgIH07XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJodG1sXCI7XG4gIH1cbiAgcHVibGljIGdldCBpc0NvbXBvc2l0ZVF1ZXN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBnZXRQcm9jZXNzZWRUZXh0KHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuaWdub3JlSHRtbFByb2dyZXNzaW5nKSByZXR1cm4gdGV4dDtcbiAgICByZXR1cm4gc3VwZXIuZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0KTtcbiAgfVxuICAvKipcbiAgICogU2V0IGh0bWwgdG8gZGlzcGxheSBpdFxuICAgKi9cbiAgcHVibGljIGdldCBodG1sKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiaHRtbFwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGh0bWwodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImh0bWxcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jSHRtbCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJodG1sXCIpO1xuICB9XG4gIHB1YmxpYyBnZXQgcHJvY2Vzc2VkSHRtbCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5wcm9jZXNzSHRtbCh0aGlzLmh0bWwpIDogdGhpcy5odG1sO1xuICB9XG59XG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImh0bWxcIixcbiAgW3sgbmFtZTogXCJodG1sOmh0bWxcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0h0bWxcIiB9XSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkh0bWxNb2RlbChcIlwiKTtcbiAgfSxcbiAgXCJub252YWx1ZVwiXG4pO1xuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJodG1sXCIsIG5hbWUgPT4ge1xuICByZXR1cm4gbmV3IFF1ZXN0aW9uSHRtbE1vZGVsKG5hbWUpO1xufSk7XG4iLCJpbXBvcnQgeyBRdWVzdGlvbk5vblZhbHVlIH0gZnJvbSBcIi4vcXVlc3Rpb25ub252YWx1ZVwiO1xuaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuXG4vKipcbiAqIEEgTW9kZWwgZm9yIGltYWdlIHF1ZXN0aW9uLiBUaGlzIHF1ZXN0aW9uIGhhc24ndCBhbnkgZnVuY3Rpb25hbGl0eSBhbmQgY2FuIGJlIHVzZWQgdG8gaW1wcm92ZSB0aGUgYXBwZWFyYW5jZSBvZiB0aGUgc3VydmV5LlxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25JbWFnZU1vZGVsIGV4dGVuZHMgUXVlc3Rpb25Ob25WYWx1ZSB7XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJpbWFnZUxpbmtcIiwgdGhpcywgZmFsc2UpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJ0ZXh0XCIsIHRoaXMsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImltYWdlXCI7XG4gIH1cbiAgcHVibGljIGdldCBpc0NvbXBvc2l0ZVF1ZXN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogVGhlIGltYWdlIFVSTC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW1hZ2VMaW5rKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiaW1hZ2VMaW5rXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgaW1hZ2VMaW5rKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJpbWFnZUxpbmtcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jSW1hZ2VMaW5rKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImltYWdlTGlua1wiKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGltYWdlIGFsdCB0ZXh0LlxuICAgKi9cbiAgcHVibGljIGdldCB0ZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwidGV4dFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRleHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInRleHRcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJ0ZXh0XCIpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgaW1hZ2UgaGVpZ2h0LlxuICAgKi9cbiAgcHVibGljIGdldCBpbWFnZUhlaWdodCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpbWFnZUhlaWdodFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGltYWdlSGVpZ2h0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VIZWlnaHRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGltYWdlIHdpZHRoLlxuICAgKi9cbiAgcHVibGljIGdldCBpbWFnZVdpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImltYWdlV2lkdGhcIik7XG4gIH1cbiAgcHVibGljIHNldCBpbWFnZVdpZHRoKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VXaWR0aFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgaW1hZ2UgZml0IG1vZGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGltYWdlRml0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImltYWdlRml0XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgaW1hZ2VGaXQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpbWFnZUZpdFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBtb2RlLlxuICAgKi9cbiAgcHVibGljIGdldCBjb250ZW50TW9kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb250ZW50TW9kZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbnRlbnRNb2RlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29udGVudE1vZGVcIiwgdmFsKTtcbiAgICBpZiAodmFsID09PSBcInZpZGVvXCIpIHtcbiAgICAgIHRoaXMuc2hvd0xhYmVsID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJpbWFnZVwiLFxuICBbXG4gICAgeyBuYW1lOiBcImltYWdlTGlua1wiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jSW1hZ2VMaW5rXCIgfSxcbiAgICB7IG5hbWU6IFwidGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jVGV4dFwiIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJjb250ZW50TW9kZVwiLFxuICAgICAgZGVmYXVsdDogXCJpbWFnZVwiLFxuICAgICAgY2hvaWNlczogW1wiaW1hZ2VcIiwgXCJ2aWRlb1wiXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiaW1hZ2VGaXRcIixcbiAgICAgIGRlZmF1bHQ6IFwiY29udGFpblwiLFxuICAgICAgY2hvaWNlczogW1wibm9uZVwiLCBcImNvbnRhaW5cIiwgXCJjb3ZlclwiLCBcImZpbGxcIl0sXG4gICAgfSxcbiAgICB7IG5hbWU6IFwiaW1hZ2VIZWlnaHQ6bnVtYmVyXCIsIGRlZmF1bHQ6IDE1MCwgbWluVmFsdWU6IDAgfSxcbiAgICB7IG5hbWU6IFwiaW1hZ2VXaWR0aDpudW1iZXJcIiwgZGVmYXVsdDogMjAwLCBtaW5WYWx1ZTogMCB9LFxuICBdLFxuICBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbkltYWdlTW9kZWwoXCJcIik7XG4gIH0sXG4gIFwibm9udmFsdWVcIlxuKTtcblxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJpbWFnZVwiLCAobmFtZSkgPT4ge1xuICByZXR1cm4gbmV3IFF1ZXN0aW9uSW1hZ2VNb2RlbChuYW1lKTtcbn0pO1xuIiwiaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHsgUXVlc3Rpb25DaGVja2JveEJhc2UgfSBmcm9tIFwiLi9xdWVzdGlvbl9iYXNlc2VsZWN0XCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUgfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcbmltcG9ydCB7IEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBJTG9jYWxpemFibGVPd25lciwgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuXG5leHBvcnQgY2xhc3MgSW1hZ2VJdGVtVmFsdWUgZXh0ZW5kcyBJdGVtVmFsdWUgaW1wbGVtZW50cyBJTG9jYWxpemFibGVPd25lciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHZhbHVlOiBhbnksXG4gICAgdGV4dDogc3RyaW5nID0gbnVsbCxcbiAgICBwcm90ZWN0ZWQgdHlwZU5hbWUgPSBcImltYWdlaXRlbXZhbHVlXCJcbiAgKSB7XG4gICAgc3VwZXIodmFsdWUsIHRleHQsIHR5cGVOYW1lKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwiaW1hZ2VMaW5rXCIsIHRoaXMsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMudHlwZU5hbWUgPyB0aGlzLnR5cGVOYW1lIDogXCJpdGVtdmFsdWVcIjtcbiAgfVxuICAvKipcbiAgICogVGhlIGltYWdlIG9yIHZpZGVvIGxpbmsgcHJvcGVydHkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGltYWdlTGluaygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImltYWdlTGlua1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGltYWdlTGluayh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiaW1hZ2VMaW5rXCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY0ltYWdlTGluaygpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJpbWFnZUxpbmtcIik7XG4gIH1cbiAgZ2V0TG9jYWxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICEhdGhpcy5sb2NPd25lciA/IHRoaXMubG9jT3duZXIuZ2V0TG9jYWxlKCkgOiBcIlwiO1xuICB9XG4gIGdldE1hcmtkb3duSHRtbCh0ZXh0OiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuICEhdGhpcy5sb2NPd25lciA/IHRoaXMubG9jT3duZXIuZ2V0TWFya2Rvd25IdG1sKHRleHQsIG5hbWUpIDogdGV4dDtcbiAgfVxuICBnZXRSZW5kZXJlcihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMubG9jT3duZXIgPyB0aGlzLmxvY093bmVyLmdldFJlbmRlcmVyKG5hbWUpIDogbnVsbDtcbiAgfVxuICBnZXRSZW5kZXJlckNvbnRleHQobG9jU3RyOiBMb2NhbGl6YWJsZVN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuICEhdGhpcy5sb2NPd25lciA/IHRoaXMubG9jT3duZXIuZ2V0UmVuZGVyZXJDb250ZXh0KGxvY1N0cikgOiBsb2NTdHI7XG4gIH1cbiAgZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMubG9jT3duZXIgPyB0aGlzLmxvY093bmVyLmdldFByb2Nlc3NlZFRleHQodGV4dCkgOiB0ZXh0O1xuICB9XG59XG5cbi8qKlxuICogQSBNb2RlbCBmb3IgYSBzZWxlY3QgaW1hZ2UgcXVlc3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvbkltYWdlUGlja2VyTW9kZWwgZXh0ZW5kcyBRdWVzdGlvbkNoZWNrYm94QmFzZSB7XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHRoaXMuY29sQ291bnQgPSAwO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiaW1hZ2VwaWNrZXJcIjtcbiAgfVxuICBzdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc1NpbmdsZUlucHV0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0SXRlbVZhbHVlVHlwZSgpIHtcbiAgICByZXR1cm4gXCJpbWFnZWl0ZW12YWx1ZVwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNDb21wb3NpdGVRdWVzdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgc3VwcG9ydE90aGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgc3VwcG9ydE5vbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBNdWx0aSBzZWxlY3Qgb3B0aW9uLiBJZiBzZXQgdG8gdHJ1ZSwgdGhlbiBhbGxvd3MgdG8gc2VsZWN0IG11bHRpcGxlIGltYWdlcy5cbiAgICovXG4gIHB1YmxpYyBnZXQgbXVsdGlTZWxlY3QoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm11bHRpU2VsZWN0XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbXVsdGlTZWxlY3QobmV3VmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtdWx0aVNlbGVjdFwiLCBuZXdWYWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBpdGVtIGlzIGNoZWNrZWRcbiAgICogQHBhcmFtIGl0ZW0gaW1hZ2UgcGlja2VyIGl0ZW0gdmFsdWVcbiAgICovXG4gIHB1YmxpYyBpc0l0ZW1TZWxlY3RlZChpdGVtOiBJdGVtVmFsdWUpOiBib29sZWFuIHtcbiAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkodmFsKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghdGhpcy5tdWx0aVNlbGVjdCkgcmV0dXJuIHRoaXMuaXNUd29WYWx1ZUVxdWFscyh2YWwsIGl0ZW0udmFsdWUpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmlzVHdvVmFsdWVFcXVhbHModmFsW2ldLCBpdGVtLnZhbHVlKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKSB7XG4gICAgaWYgKHRoaXMubXVsdGlTZWxlY3QpIHtcbiAgICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgICAgaWYgKCF2YWwpIHJldHVybjtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWwpIHx8IHZhbC5sZW5ndGggPT0gMCkge1xuICAgICAgICB0aGlzLmNsZWFyVmFsdWUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIG5ld1ZhbHVlID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIXRoaXMuaGFzVW5rbm93blZhbHVlKHZhbFtpXSwgdHJ1ZSkpIHtcbiAgICAgICAgICBuZXdWYWx1ZS5wdXNoKHZhbFtpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChuZXdWYWx1ZS5sZW5ndGggPT0gdmFsLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgaWYgKG5ld1ZhbHVlLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIHRoaXMuY2xlYXJWYWx1ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdXBlci5jbGVhckluY29ycmVjdFZhbHVlcygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93IGxhYmVsIHVuZGVyIHRoZSBpbWFnZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd0xhYmVsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93TGFiZWxcIik7XG4gIH1cbiAgcHVibGljIHNldCBzaG93TGFiZWwobmV3VmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93TGFiZWxcIiwgbmV3VmFsdWUpO1xuICB9XG4gIGVuZExvYWRpbmdGcm9tSnNvbigpIHtcbiAgICBzdXBlci5lbmRMb2FkaW5nRnJvbUpzb24oKTtcbiAgICBpZiAoIXRoaXMuaXNEZXNpZ25Nb2RlICYmIHRoaXMubXVsdGlTZWxlY3QpIHtcbiAgICAgIHRoaXMuY3JlYXRlTmV3QXJyYXkoXCJyZW5kZXJlZFZhbHVlXCIpO1xuICAgICAgdGhpcy5jcmVhdGVOZXdBcnJheShcInZhbHVlXCIpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VmFsdWVDb3JlKCkge1xuICAgIHZhciB2YWx1ZSA9IHN1cGVyLmdldFZhbHVlQ29yZSgpO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmICh0aGlzLm11bHRpU2VsZWN0KSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBwcml2YXRlIGNvbnZlcnRWYWxUb0FycmF5Rm9yTXVsdFNlbGVjdCh2YWw6IGFueSk6IGFueSB7XG4gICAgaWYgKCF0aGlzLm11bHRpU2VsZWN0KSByZXR1cm4gdmFsO1xuICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eSh2YWwpIHx8IEFycmF5LmlzQXJyYXkodmFsKSkgcmV0dXJuIHZhbDtcbiAgICByZXR1cm4gW3ZhbF07XG4gIH1cbiAgcHJvdGVjdGVkIHJlbmRlcmVkVmFsdWVGcm9tRGF0YUNvcmUodmFsOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmNvbnZlcnRWYWxUb0FycmF5Rm9yTXVsdFNlbGVjdCh2YWwpO1xuICB9XG4gIHByb3RlY3RlZCByZW5kcmVkVmFsdWVUb0RhdGFDb3JlKHZhbDogYW55KTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5jb252ZXJ0VmFsVG9BcnJheUZvck11bHRTZWxlY3QodmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGltYWdlIGhlaWdodC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW1hZ2VIZWlnaHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VIZWlnaHRcIik7XG4gIH1cbiAgcHVibGljIHNldCBpbWFnZUhlaWdodCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImltYWdlSGVpZ2h0XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpbWFnZSB3aWR0aC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaW1hZ2VXaWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpbWFnZVdpZHRoXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgaW1hZ2VXaWR0aCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImltYWdlV2lkdGhcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGltYWdlIGZpdCBtb2RlLlxuICAgKi9cbiAgcHVibGljIGdldCBpbWFnZUZpdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpbWFnZUZpdFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGltYWdlRml0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaW1hZ2VGaXRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgbW9kZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgY29udGVudE1vZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29udGVudE1vZGVcIik7XG4gIH1cbiAgcHVibGljIHNldCBjb250ZW50TW9kZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbnRlbnRNb2RlXCIsIHZhbCk7XG4gICAgaWYgKHZhbCA9PT0gXCJ2aWRlb1wiKSB7XG4gICAgICB0aGlzLnNob3dMYWJlbCA9IHRydWU7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjb252ZXJ0RGVmYXVsdFZhbHVlKHZhbDogYW55KTogYW55IHtcbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzQ29sdW1ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJpbWFnZWl0ZW12YWx1ZVwiLFxuICBbXSxcbiAgKHZhbHVlOiBhbnkpID0+IG5ldyBJbWFnZUl0ZW1WYWx1ZSh2YWx1ZSksXG4gIFwiaXRlbXZhbHVlXCJcbik7XG5TZXJpYWxpemVyLmFkZFByb3BlcnR5KFwiaW1hZ2VpdGVtdmFsdWVcIiwge1xuICBuYW1lOiBcImltYWdlTGlua1wiLFxuICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jSW1hZ2VMaW5rXCIsXG59KTtcblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJpbWFnZXBpY2tlclwiLFxuICBbXG4gICAgeyBuYW1lOiBcImhhc090aGVyXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcIm90aGVyVGV4dFwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJoYXNOb25lXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcIm5vbmVUZXh0XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcIm9wdGlvbnNDYXB0aW9uXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcIm90aGVyRXJyb3JUZXh0XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInN0b3JlT3RoZXJzQXNDb21tZW50XCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJjb250ZW50TW9kZVwiLFxuICAgICAgZGVmYXVsdDogXCJpbWFnZVwiLFxuICAgICAgY2hvaWNlczogW1wiaW1hZ2VcIiwgXCJ2aWRlb1wiXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiaW1hZ2VGaXRcIixcbiAgICAgIGRlZmF1bHQ6IFwiY29udGFpblwiLFxuICAgICAgY2hvaWNlczogW1wibm9uZVwiLCBcImNvbnRhaW5cIiwgXCJjb3ZlclwiLCBcImZpbGxcIl0sXG4gICAgfSxcbiAgICB7IG5hbWU6IFwiaW1hZ2VIZWlnaHQ6bnVtYmVyXCIsIGRlZmF1bHQ6IDE1MCwgbWluVmFsdWU6IDAgfSxcbiAgICB7IG5hbWU6IFwiaW1hZ2VXaWR0aDpudW1iZXJcIiwgZGVmYXVsdDogMjAwLCBtaW5WYWx1ZTogMCB9LFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uSW1hZ2VQaWNrZXJNb2RlbChcIlwiKTtcbiAgfSxcbiAgXCJjaGVja2JveGJhc2VcIlxuKTtcblNlcmlhbGl6ZXIuYWRkUHJvcGVydHkoXCJpbWFnZXBpY2tlclwiLCB7XG4gIG5hbWU6IFwic2hvd0xhYmVsOmJvb2xlYW5cIixcbiAgZGVmYXVsdDogZmFsc2UsXG59KTtcblNlcmlhbGl6ZXIuYWRkUHJvcGVydHkoXCJpbWFnZXBpY2tlclwiLCB7XG4gIG5hbWU6IFwiY29sQ291bnQ6bnVtYmVyXCIsXG4gIGRlZmF1bHQ6IDAsXG4gIGNob2ljZXM6IFswLCAxLCAyLCAzLCA0LCA1XSxcbn0pO1xuU2VyaWFsaXplci5hZGRQcm9wZXJ0eShcImltYWdlcGlja2VyXCIsIHtcbiAgbmFtZTogXCJtdWx0aVNlbGVjdDpib29sZWFuXCIsXG4gIGRlZmF1bHQ6IGZhbHNlLFxufSk7XG5TZXJpYWxpemVyLmFkZFByb3BlcnR5KFwiaW1hZ2VwaWNrZXJcIiwge1xuICBuYW1lOiBcImNob2ljZXM6aW1hZ2VpdGVtdmFsdWVbXVwiLFxufSk7XG5cblF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5yZWdpc3RlclF1ZXN0aW9uKFwiaW1hZ2VwaWNrZXJcIiwgKG5hbWUpID0+IHtcbiAgdmFyIHEgPSBuZXcgUXVlc3Rpb25JbWFnZVBpY2tlck1vZGVsKG5hbWUpO1xuICAvL3EuY2hvaWNlcyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0Q2hvaWNlcztcbiAgcmV0dXJuIHE7XG59KTtcbiIsImltcG9ydCB7IEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUgfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcbmltcG9ydCB7IFF1ZXN0aW9uTWF0cml4QmFzZU1vZGVsIH0gZnJvbSBcIi4vbWFydGl4QmFzZVwiO1xuaW1wb3J0IHsgSnNvbk9iamVjdCwgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFcnJvciB9IGZyb20gXCIuL3N1cnZleS1lcnJvclwiO1xuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xuaW1wb3J0IHsgUmVxdWlyZWRJbkFsbFJvd3NFcnJvciB9IGZyb20gXCIuL2Vycm9yXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nLCBJTG9jYWxpemFibGVPd25lciB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkRyb3Bkb3duTW9kZWwgfSBmcm9tIFwiLi9xdWVzdGlvbl9kcm9wZG93blwiO1xuaW1wb3J0IHsgSUNvbmRpdGlvbk9iamVjdCB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCIuL3NldHRpbmdzXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCIuL3N1cnZleVwiO1xuaW1wb3J0IHsgQ3NzQ2xhc3NCdWlsZGVyIH0gZnJvbSBcIi4vdXRpbHMvY3NzQ2xhc3NCdWlsZGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU1hdHJpeERhdGEge1xuICBvbk1hdHJpeFJvd0NoYW5nZWQocm93OiBNYXRyaXhSb3dNb2RlbCk6IHZvaWQ7XG4gIGdldENvcnJlY3RlZFJvd1ZhbHVlKHZhbHVlOiBhbnkpOiBhbnk7XG59XG5cbmV4cG9ydCBjbGFzcyBNYXRyaXhSb3dNb2RlbCBleHRlbmRzIEJhc2Uge1xuICBwcml2YXRlIGRhdGE6IElNYXRyaXhEYXRhO1xuICBwcml2YXRlIGl0ZW06IEl0ZW1WYWx1ZTtcbiAgcHVibGljIGNlbGxDbGljazogYW55O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGl0ZW06IEl0ZW1WYWx1ZSxcbiAgICBwdWJsaWMgZnVsbE5hbWU6IHN0cmluZyxcbiAgICBkYXRhOiBJTWF0cml4RGF0YSxcbiAgICB2YWx1ZTogYW55XG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5pdGVtID0gaXRlbTtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmNlbGxDbGljayA9IChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgdGhpcy52YWx1ZSA9IGNvbHVtbi52YWx1ZTtcbiAgICB9O1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJ2YWx1ZVwiLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5kYXRhKSB0aGlzLmRhdGEub25NYXRyaXhSb3dDaGFuZ2VkKHRoaXMpO1xuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLml0ZW0udmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCB0ZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbS50ZXh0O1xuICB9XG4gIHB1YmxpYyBnZXQgbG9jVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbS5sb2NUZXh0O1xuICB9XG4gIHB1YmxpYyBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZhbHVlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdmFsdWUobmV3VmFsdWU6IGFueSkge1xuICAgIG5ld1ZhbHVlID0gdGhpcy5kYXRhLmdldENvcnJlY3RlZFJvd1ZhbHVlKG5ld1ZhbHVlKTtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ2YWx1ZVwiLCBuZXdWYWx1ZSk7XG4gIH1cbiAgcHVibGljIGdldCByb3dDbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgY29uc3QgY3NzQ2xhc3NlcyA9ICg8YW55PnRoaXMuZGF0YSkuY3NzQ2xhc3NlcztcbiAgICBjb25zdCBoYXNFcnJvciA9ICEhKDxhbnk+dGhpcy5kYXRhKS5nZXRFcnJvckJ5VHlwZShcInJlcXVpcmVkaW5hbGxyb3dzZXJyb3JcIik7XG4gICAgcmV0dXJuIG5ldyBDc3NDbGFzc0J1aWxkZXIoKS5hcHBlbmQoY3NzQ2xhc3Nlcy5yb3cpXG4gICAgICAuYXBwZW5kKGNzc0NsYXNzZXMucm93RXJyb3IsIGhhc0Vycm9yICYmIHRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMudmFsdWUpKVxuICAgICAgLnRvU3RyaW5nKCk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTWF0cml4Q2VsbHNPd25lciBleHRlbmRzIElMb2NhbGl6YWJsZU93bmVyIHtcbiAgZ2V0Um93cygpOiBBcnJheTxhbnk+O1xuICBnZXRDb2x1bW5zKCk6IEFycmF5PGFueT47XG59XG5cbmV4cG9ydCBjbGFzcyBNYXRyaXhDZWxscyB7XG4gIHByaXZhdGUgdmFsdWVzOiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyBjZWxsc093bmVyOiBJTWF0cml4Q2VsbHNPd25lcikge31cbiAgcHVibGljIGdldCBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcykubGVuZ3RoID09IDA7XG4gIH1cbiAgcHVibGljIHNldENlbGxUZXh0KHJvdzogYW55LCBjb2x1bW46IGFueSwgdmFsOiBzdHJpbmcpIHtcbiAgICByb3cgPSB0aGlzLmdldENlbGxSb3dDb2x1bW5WYWx1ZShyb3csIHRoaXMucm93cyk7XG4gICAgY29sdW1uID0gdGhpcy5nZXRDZWxsUm93Q29sdW1uVmFsdWUoY29sdW1uLCB0aGlzLmNvbHVtbnMpO1xuICAgIGlmICghcm93IHx8ICFjb2x1bW4pIHJldHVybjtcbiAgICBpZiAodmFsKSB7XG4gICAgICBpZiAoIXRoaXMudmFsdWVzW3Jvd10pIHRoaXMudmFsdWVzW3Jvd10gPSB7fTtcbiAgICAgIGlmICghdGhpcy52YWx1ZXNbcm93XVtjb2x1bW5dKVxuICAgICAgICB0aGlzLnZhbHVlc1tyb3ddW2NvbHVtbl0gPSB0aGlzLmNyZWF0ZVN0cmluZygpO1xuICAgICAgdGhpcy52YWx1ZXNbcm93XVtjb2x1bW5dLnRleHQgPSB2YWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnZhbHVlc1tyb3ddICYmIHRoaXMudmFsdWVzW3Jvd11bY29sdW1uXSkge1xuICAgICAgICB2YXIgbG9jID0gdGhpcy52YWx1ZXNbcm93XVtjb2x1bW5dO1xuICAgICAgICBsb2MudGV4dCA9IFwiXCI7XG4gICAgICAgIGlmIChsb2MuaXNFbXB0eSkge1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLnZhbHVlc1tyb3ddW2NvbHVtbl07XG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMudmFsdWVzW3Jvd10pLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy52YWx1ZXNbcm93XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIHNldERlZmF1bHRDZWxsVGV4dChjb2x1bW46IGFueSwgdmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldENlbGxUZXh0KHNldHRpbmdzLm1hdHJpeERlZmF1bHRSb3dOYW1lLCBjb2x1bW4sIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldENlbGxMb2NUZXh0KHJvdzogYW55LCBjb2x1bW46IGFueSk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByb3cgPSB0aGlzLmdldENlbGxSb3dDb2x1bW5WYWx1ZShyb3csIHRoaXMucm93cyk7XG4gICAgY29sdW1uID0gdGhpcy5nZXRDZWxsUm93Q29sdW1uVmFsdWUoY29sdW1uLCB0aGlzLmNvbHVtbnMpO1xuICAgIGlmICghcm93IHx8ICFjb2x1bW4pIHJldHVybiBudWxsO1xuICAgIGlmICghdGhpcy52YWx1ZXNbcm93XSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKCF0aGlzLnZhbHVlc1tyb3ddW2NvbHVtbl0pIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnZhbHVlc1tyb3ddW2NvbHVtbl07XG4gIH1cbiAgcHVibGljIGdldERlZmF1bHRDZWxsTG9jVGV4dChjb2x1bW46IGFueSwgdmFsOiBzdHJpbmcpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2VsbExvY1RleHQoc2V0dGluZ3MubWF0cml4RGVmYXVsdFJvd05hbWUsIGNvbHVtbik7XG4gIH1cbiAgcHVibGljIGdldENlbGxEaXNwbGF5TG9jVGV4dChyb3c6IGFueSwgY29sdW1uOiBhbnkpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgdmFyIGNlbGxUZXh0ID0gdGhpcy5nZXRDZWxsTG9jVGV4dChyb3csIGNvbHVtbik7XG4gICAgaWYgKGNlbGxUZXh0ICYmICFjZWxsVGV4dC5pc0VtcHR5KSByZXR1cm4gY2VsbFRleHQ7XG4gICAgY2VsbFRleHQgPSB0aGlzLmdldENlbGxMb2NUZXh0KHNldHRpbmdzLm1hdHJpeERlZmF1bHRSb3dOYW1lLCBjb2x1bW4pO1xuICAgIGlmIChjZWxsVGV4dCAmJiAhY2VsbFRleHQuaXNFbXB0eSkgcmV0dXJuIGNlbGxUZXh0O1xuICAgIGlmICh0eXBlb2YgY29sdW1uID09IFwibnVtYmVyXCIpIHtcbiAgICAgIGNvbHVtbiA9XG4gICAgICAgIGNvbHVtbiA+PSAwICYmIGNvbHVtbiA8IHRoaXMuY29sdW1ucy5sZW5ndGhcbiAgICAgICAgICA/IHRoaXMuY29sdW1uc1tjb2x1bW5dXG4gICAgICAgICAgOiBudWxsO1xuICAgIH1cbiAgICBpZiAoY29sdW1uICYmIGNvbHVtbi5sb2NUZXh0KSByZXR1cm4gY29sdW1uLmxvY1RleHQ7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIGdldENlbGxUZXh0KHJvdzogYW55LCBjb2x1bW46IGFueSk6IHN0cmluZyB7XG4gICAgdmFyIGxvYyA9IHRoaXMuZ2V0Q2VsbExvY1RleHQocm93LCBjb2x1bW4pO1xuICAgIHJldHVybiBsb2MgPyBsb2MuY2FsY3VsYXRlZFRleHQgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXREZWZhdWx0Q2VsbFRleHQoY29sdW1uOiBhbnkpOiBzdHJpbmcge1xuICAgIHZhciBsb2MgPSB0aGlzLmdldENlbGxMb2NUZXh0KHNldHRpbmdzLm1hdHJpeERlZmF1bHRSb3dOYW1lLCBjb2x1bW4pO1xuICAgIHJldHVybiBsb2MgPyBsb2MuY2FsY3VsYXRlZFRleHQgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXRDZWxsRGlzcGxheVRleHQocm93OiBhbnksIGNvbHVtbjogYW55KTogc3RyaW5nIHtcbiAgICB2YXIgbG9jID0gdGhpcy5nZXRDZWxsRGlzcGxheUxvY1RleHQocm93LCBjb2x1bW4pO1xuICAgIHJldHVybiBsb2MgPyBsb2MuY2FsY3VsYXRlZFRleHQgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXQgcm93cygpOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5jZWxsc093bmVyID8gdGhpcy5jZWxsc093bmVyLmdldFJvd3MoKSA6IFtdO1xuICB9XG4gIHB1YmxpYyBnZXQgY29sdW1ucygpOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5jZWxsc093bmVyID8gdGhpcy5jZWxsc093bmVyLmdldENvbHVtbnMoKSA6IFtdO1xuICB9XG4gIHByaXZhdGUgZ2V0Q2VsbFJvd0NvbHVtblZhbHVlKHZhbDogYW55LCB2YWx1ZXM6IEFycmF5PGFueT4pOiBhbnkge1xuICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHJldHVybiBudWxsO1xuICAgIGlmICh0eXBlb2YgdmFsID09IFwibnVtYmVyXCIpIHtcbiAgICAgIGlmICh2YWwgPCAwIHx8IHZhbCA+PSB2YWx1ZXMubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICAgIHZhbCA9IHZhbHVlc1t2YWxdLnZhbHVlO1xuICAgIH1cbiAgICBpZiAodmFsLnZhbHVlKSByZXR1cm4gdmFsLnZhbHVlO1xuICAgIHJldHVybiB2YWw7XG4gIH1cbiAgcHVibGljIGdldEpzb24oKTogYW55IHtcbiAgICBpZiAodGhpcy5pc0VtcHR5KSByZXR1cm4gbnVsbDtcbiAgICB2YXIgcmVzOiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBmb3IgKHZhciByb3cgaW4gdGhpcy52YWx1ZXMpIHtcbiAgICAgIHZhciByZXNSb3c6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgICAgdmFyIHJvd1ZhbHVlcyA9IHRoaXMudmFsdWVzW3Jvd107XG4gICAgICBmb3IgKHZhciBjb2wgaW4gcm93VmFsdWVzKSB7XG4gICAgICAgIHJlc1Jvd1tjb2xdID0gcm93VmFsdWVzW2NvbF0uZ2V0SnNvbigpO1xuICAgICAgfVxuICAgICAgcmVzW3Jvd10gPSByZXNSb3c7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIHNldEpzb24odmFsdWU6IGFueSkge1xuICAgIHRoaXMudmFsdWVzID0ge307XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuICAgIGZvciAodmFyIHJvdyBpbiB2YWx1ZSkge1xuICAgICAgaWYgKHJvdyA9PSBcInBvc1wiKSBjb250aW51ZTtcbiAgICAgIHZhciByb3dWYWx1ZXMgPSB2YWx1ZVtyb3ddO1xuICAgICAgdGhpcy52YWx1ZXNbcm93XSA9IHt9O1xuICAgICAgZm9yICh2YXIgY29sIGluIHJvd1ZhbHVlcykge1xuICAgICAgICBpZiAoY29sID09IFwicG9zXCIpIGNvbnRpbnVlO1xuICAgICAgICB2YXIgbG9jID0gdGhpcy5jcmVhdGVTdHJpbmcoKTtcbiAgICAgICAgbG9jLnNldEpzb24ocm93VmFsdWVzW2NvbF0pO1xuICAgICAgICB0aGlzLnZhbHVlc1tyb3ddW2NvbF0gPSBsb2M7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVTdHJpbmcoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcy5jZWxsc093bmVyLCB0cnVlKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgTW9kZWwgZm9yIGEgc2ltcGxlIG1hdHJpeCBxdWVzdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uTWF0cml4TW9kZWxcbiAgZXh0ZW5kcyBRdWVzdGlvbk1hdHJpeEJhc2VNb2RlbDxNYXRyaXhSb3dNb2RlbCwgSXRlbVZhbHVlPlxuICBpbXBsZW1lbnRzIElNYXRyaXhEYXRhLCBJTWF0cml4Q2VsbHNPd25lciB7XG4gIHByaXZhdGUgaXNSb3dDaGFuZ2luZyA9IGZhbHNlO1xuICBwcml2YXRlIGNlbGxzVmFsdWU6IE1hdHJpeENlbGxzO1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHRoaXMuY2VsbHNWYWx1ZSA9IG5ldyBNYXRyaXhDZWxscyh0aGlzKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcImNvbHVtbnNcIiwgZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLm9uQ29sdW1uc0NoYW5nZWQoKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwicm93c1wiLCBmdW5jdGlvbigpIHtcbiAgICAgIGlmICghc2VsZi5maWx0ZXJJdGVtcygpKSB7XG4gICAgICAgIHNlbGYub25Sb3dzQ2hhbmdlZCgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJoaWRlSWZSb3dzRW1wdHlcIiwgZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLnVwZGF0ZVZpc2liaWxpdHlCYXNlZE9uUm93cygpO1xuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwibWF0cml4XCI7XG4gIH1cbiAgcHVibGljIGdldCBoYXNTaW5nbGVJbnB1dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUsIGlmIHlvdSB3YW50IGEgdXNlciB0byBhbnN3ZXIgYWxsIHJvd3MuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzQWxsUm93UmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzQWxsUm93UmVxdWlyZWRcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgaXNBbGxSb3dSZXF1aXJlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc0FsbFJvd1JlcXVpcmVkXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSwgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHJvdy5cbiAgICovXG4gIHB1YmxpYyBnZXQgaGFzUm93cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yb3dzLmxlbmd0aCA+IDA7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIHJlbmRlciBpdGVtcyBpbiBhIHNwZWNpZmljIG9yZGVyOiBcInJhbmRvbVwiIG9yIFwiaW5pdGlhbFwiLiBEZWZhdWx0IGlzIFwiaW5pdGlhbFwiLlxuICAgKi9cbiAgcHVibGljIGdldCByb3dzT3JkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicm93c09yZGVyXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcm93c09yZGVyKHZhbDogc3RyaW5nKSB7XG4gICAgdmFsID0gdmFsLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHZhbCA9PSB0aGlzLnJvd3NPcmRlcikgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJvd3NPcmRlclwiLCB2YWwpO1xuICAgIHRoaXMub25Sb3dzQ2hhbmdlZCgpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlIHRvIGhpZGUgdGhlIHF1ZXN0aW9uIGlmIHRoZXJlIGlzIG5vIHZpc2libGUgcm93cyBpbiB0aGUgbWF0cml4LlxuICAgKi9cbiAgcHVibGljIGdldCBoaWRlSWZSb3dzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImhpZGVJZlJvd3NFbXB0eVwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBoaWRlSWZSb3dzRW1wdHkodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaGlkZUlmUm93c0VtcHR5XCIsIHZhbCk7XG4gIH1cbiAgZ2V0Um93cygpOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5yb3dzO1xuICB9XG4gIGdldENvbHVtbnMoKTogQXJyYXk8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUNvbHVtbnM7XG4gIH1cbiAgcHVibGljIGFkZENvbHVtbih2YWx1ZTogYW55LCB0ZXh0Pzogc3RyaW5nKTogSXRlbVZhbHVlIHtcbiAgICB2YXIgY29sID0gbmV3IEl0ZW1WYWx1ZSh2YWx1ZSwgdGV4dCk7XG4gICAgdGhpcy5jb2x1bW5zLnB1c2goY29sKTtcbiAgICByZXR1cm4gY29sO1xuICB9XG4gIHB1YmxpYyBnZXRJdGVtQ2xhc3Mocm93OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgY29uc3QgaXNDaGVja2VkID0gcm93LnZhbHVlID09IGNvbHVtbi52YWx1ZTtcbiAgICBjb25zdCBpc0Rpc2FibGVkID0gdGhpcy5pc1JlYWRPbmx5O1xuICAgIGNvbnN0IGFsbG93SG92ZXIgPSAhaXNDaGVja2VkICYmICFpc0Rpc2FibGVkO1xuXG4gICAgcmV0dXJuIG5ldyBDc3NDbGFzc0J1aWxkZXIoKVxuICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuY2VsbCwgdGhpcy5oYXNDZWxsVGV4dClcbiAgICAgIC5hcHBlbmQodGhpcy5oYXNDZWxsVGV4dCA/IHRoaXMuY3NzQ2xhc3Nlcy5jZWxsVGV4dCA6IHRoaXMuY3NzQ2xhc3Nlcy5sYWJlbClcbiAgICAgIC5hcHBlbmQodGhpcy5oYXNDZWxsVGV4dCA/IHRoaXMuY3NzQ2xhc3Nlcy5jZWxsVGV4dFNlbGVjdGVkIDogdGhpcy5jc3NDbGFzc2VzLml0ZW1DaGVja2VkLCBpc0NoZWNrZWQpXG4gICAgICAuYXBwZW5kKHRoaXMuaGFzQ2VsbFRleHQgPyB0aGlzLmNzc0NsYXNzZXMuY2VsbFRleHREaXNhYmxlZCA6IHRoaXMuY3NzQ2xhc3Nlcy5pdGVtRGlzYWJsZWQsIGlzRGlzYWJsZWQpXG4gICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5pdGVtSG92ZXIsIGFsbG93SG92ZXIgJiYgIXRoaXMuaGFzQ2VsbFRleHQpXG4gICAgICAudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRRdWl6UXVlc3Rpb25Db3VudCgpIHtcbiAgICB2YXIgcmVzID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLmNvcnJlY3RBbnN3ZXJbdGhpcy5yb3dzW2ldLnZhbHVlXSkpIHJlcysrO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCBnZXRDb3JyZWN0QW5zd2VyQ291bnQoKTogbnVtYmVyIHtcbiAgICB2YXIgcmVzID0gMDtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcm93ID0gdGhpcy5yb3dzW2ldLnZhbHVlO1xuICAgICAgaWYgKFxuICAgICAgICAhdGhpcy5pc1ZhbHVlRW1wdHkodmFsdWVbcm93XSkgJiZcbiAgICAgICAgdGhpcy5pc1R3b1ZhbHVlRXF1YWxzKHRoaXMuY29ycmVjdEFuc3dlcltyb3ddLCB2YWx1ZVtyb3ddKVxuICAgICAgKVxuICAgICAgICByZXMrKztcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRWaXNpYmxlUm93cygpOiBBcnJheTxNYXRyaXhSb3dNb2RlbD4ge1xuICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXk8TWF0cml4Um93TW9kZWw+KCk7XG4gICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgaWYgKCF2YWwpIHZhbCA9IHt9O1xuICAgIHZhciByb3dzID0gISF0aGlzLmZpbHRlcmVkUm93cyA/IHRoaXMuZmlsdGVyZWRSb3dzIDogdGhpcy5yb3dzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJvdyA9IHJvd3NbaV07XG4gICAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkocm93LnZhbHVlKSkgY29udGludWU7XG4gICAgICByZXN1bHQucHVzaChcbiAgICAgICAgdGhpcy5jcmVhdGVNYXRyaXhSb3coXG4gICAgICAgICAgcm93LFxuICAgICAgICAgIHRoaXMuaWQgKyBcIl9cIiArIHJvdy52YWx1ZS50b1N0cmluZygpLnJlcGxhY2UoL1xccy9nLCBcIl9cIiksXG4gICAgICAgICAgdmFsW3Jvdy52YWx1ZV1cbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdC5sZW5ndGggPT0gMCAmJiAhdGhpcy5maWx0ZXJlZFJvd3MpIHtcbiAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICB0aGlzLmNyZWF0ZU1hdHJpeFJvdyhcbiAgICAgICAgICBuZXcgSXRlbVZhbHVlKG51bGwpLFxuICAgICAgICAgIHRoaXMubmFtZS5yZXBsYWNlKC9cXHMvZywgXCJfXCIpLFxuICAgICAgICAgIHZhbFxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzID0gcmVzdWx0O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHJvdGVjdGVkIHNvcnRWaXNpYmxlUm93cyhcbiAgICBhcnJheTogQXJyYXk8TWF0cml4Um93TW9kZWw+XG4gICk6IEFycmF5PE1hdHJpeFJvd01vZGVsPiB7XG4gICAgdmFyIG9yZGVyID0gdGhpcy5yb3dzT3JkZXIudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAob3JkZXIgPT09IFwicmFuZG9tXCIpXG4gICAgICByZXR1cm4gSGVscGVycy5yYW5kb21pemVBcnJheTxNYXRyaXhSb3dNb2RlbD4oYXJyYXkpO1xuICAgIHJldHVybiBhcnJheTtcbiAgfVxuICBlbmRMb2FkaW5nRnJvbUpzb24oKSB7XG4gICAgc3VwZXIuZW5kTG9hZGluZ0Zyb21Kc29uKCk7XG4gICAgdGhpcy5yb3dzID0gdGhpcy5zb3J0VmlzaWJsZVJvd3ModGhpcy5yb3dzKTtcbiAgICB0aGlzLnVwZGF0ZVZpc2liaWxpdHlCYXNlZE9uUm93cygpO1xuICB9XG4gIHByb3RlY3RlZCBwcm9jZXNzUm93c09uU2V0KG5ld1Jvd3M6IEFycmF5PGFueT4pIHtcbiAgICByZXR1cm4gdGhpcy5zb3J0VmlzaWJsZVJvd3MobmV3Um93cyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGlzdCBvZiB2aXNpYmxlIHJvd3MgYXMgbW9kZWwgb2JqZWN0cy5cbiAgICogQHNlZSByb3dzVmlzaWJsZUlmXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZpc2libGVSb3dzKCk6IEFycmF5PE1hdHJpeFJvd01vZGVsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmlzaWJsZVJvd3MoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNlbGxzKCk6IE1hdHJpeENlbGxzIHtcbiAgICByZXR1cm4gdGhpcy5jZWxsc1ZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXQgY2VsbHModmFsdWU6IE1hdHJpeENlbGxzKSB7XG4gICAgdGhpcy5jZWxscy5zZXRKc29uKHZhbHVlICYmIHZhbHVlLmdldEpzb24gPyB2YWx1ZS5nZXRKc29uKCkgOiBudWxsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc0NlbGxUZXh0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5jZWxscy5pc0VtcHR5O1xuICB9XG4gIHB1YmxpYyBzZXRDZWxsVGV4dChyb3c6IGFueSwgY29sdW1uOiBhbnksIHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5jZWxscy5zZXRDZWxsVGV4dChyb3csIGNvbHVtbiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0Q2VsbFRleHQocm93OiBhbnksIGNvbHVtbjogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jZWxscy5nZXRDZWxsVGV4dChyb3csIGNvbHVtbik7XG4gIH1cbiAgcHVibGljIHNldERlZmF1bHRDZWxsVGV4dChjb2x1bW46IGFueSwgdmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmNlbGxzLnNldERlZmF1bHRDZWxsVGV4dChjb2x1bW4sIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldERlZmF1bHRDZWxsVGV4dChjb2x1bW46IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2VsbHMuZ2V0RGVmYXVsdENlbGxUZXh0KGNvbHVtbik7XG4gIH1cbiAgcHVibGljIGdldENlbGxEaXNwbGF5VGV4dChyb3c6IGFueSwgY29sdW1uOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNlbGxzLmdldENlbGxEaXNwbGF5VGV4dChyb3csIGNvbHVtbik7XG4gIH1cbiAgcHJpdmF0ZSBlbXB0eUxvY2FsaXphYmxlU3RyaW5nID0gbmV3IExvY2FsaXphYmxlU3RyaW5nKHRoaXMpO1xuICBwdWJsaWMgZ2V0Q2VsbERpc3BsYXlMb2NUZXh0KHJvdzogYW55LCBjb2x1bW46IGFueSk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICB2YXIgbG9jID0gdGhpcy5jZWxscy5nZXRDZWxsRGlzcGxheUxvY1RleHQocm93LCBjb2x1bW4pO1xuICAgIHJldHVybiBsb2MgPyBsb2MgOiB0aGlzLmVtcHR5TG9jYWxpemFibGVTdHJpbmc7XG4gIH1cbiAgc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzVmFsdWVzSW5BbGxSb3dzKCk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uQ2hlY2tGb3JFcnJvcnMoXG4gICAgZXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj4sXG4gICAgaXNPblZhbHVlQ2hhbmdlZDogYm9vbGVhblxuICApIHtcbiAgICBzdXBlci5vbkNoZWNrRm9yRXJyb3JzKGVycm9ycywgaXNPblZhbHVlQ2hhbmdlZCk7XG4gICAgaWYgKFxuICAgICAgKCFpc09uVmFsdWVDaGFuZ2VkIHx8IHRoaXMuZXJyb3JzLmxlbmd0aCA+IDApICYmXG4gICAgICB0aGlzLmhhc0Vycm9ySW5Sb3dzKClcbiAgICApIHtcbiAgICAgIGVycm9ycy5wdXNoKG5ldyBSZXF1aXJlZEluQWxsUm93c0Vycm9yKG51bGwsIHRoaXMpKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBoYXNFcnJvckluUm93cygpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuaXNBbGxSb3dSZXF1aXJlZCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAhdGhpcy5oYXNWYWx1ZXNJbkFsbFJvd3MoKTtcbiAgfVxuICBwcml2YXRlIGhhc1ZhbHVlc0luQWxsUm93cygpOiBib29sZWFuIHtcbiAgICB2YXIgcm93cyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3M7XG4gICAgaWYgKCFyb3dzKSByb3dzID0gdGhpcy52aXNpYmxlUm93cztcbiAgICBpZiAoIXJvd3MpIHJldHVybiB0cnVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KHJvd3NbaV0udmFsdWUpKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRJc0Fuc3dlcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdXBlci5nZXRJc0Fuc3dlcmVkKCkgJiYgdGhpcy5oYXNWYWx1ZXNJbkFsbFJvd3MoKTtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZU1hdHJpeFJvdyhcbiAgICBpdGVtOiBJdGVtVmFsdWUsXG4gICAgZnVsbE5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogYW55XG4gICk6IE1hdHJpeFJvd01vZGVsIHtcbiAgICB2YXIgcm93ID0gbmV3IE1hdHJpeFJvd01vZGVsKGl0ZW0sIGZ1bGxOYW1lLCB0aGlzLCB2YWx1ZSk7XG4gICAgdGhpcy5vbk1hdHJpeFJvd0NyZWF0ZWQocm93KTtcbiAgICByZXR1cm4gcm93O1xuICB9XG4gIHByb3RlY3RlZCBvbk1hdHJpeFJvd0NyZWF0ZWQocm93OiBNYXRyaXhSb3dNb2RlbCkge31cbiAgcHJvdGVjdGVkIHNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWU6IGFueSwgdXBkYXRlSXNBbnN3ZXJlZDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBzdXBlci5zZXRRdWVzdGlvblZhbHVlKG5ld1ZhbHVlLCB0aGlzLmlzUm93Q2hhbmdpbmcgfHwgdXBkYXRlSXNBbnN3ZXJlZCk7XG4gICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzIHx8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoID09IDApXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gdHJ1ZTtcbiAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICBpZiAoIXZhbCkgdmFsID0ge307XG4gICAgaWYgKHRoaXMucm93cy5sZW5ndGggPT0gMCkge1xuICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1swXS52YWx1ZSA9IHZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciByb3cgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldO1xuICAgICAgICB2YXIgcm93VmFsID0gdmFsW3Jvdy5uYW1lXTtcbiAgICAgICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KHJvd1ZhbCkpIHJvd1ZhbCA9IG51bGw7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbaV0udmFsdWUgPSByb3dWYWw7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudXBkYXRlSXNBbnN3ZXJlZCgpO1xuICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCBnZXREaXNwbGF5VmFsdWVDb3JlKGtleXNBc1RleHQ6IGJvb2xlYW4sIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIHZhciByZXM6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgICAgdmFyIG5ld0tleSA9IGtleXNBc1RleHRcbiAgICAgICAgPyBJdGVtVmFsdWUuZ2V0VGV4dE9ySHRtbEJ5VmFsdWUodGhpcy5yb3dzLCBrZXkpXG4gICAgICAgIDoga2V5O1xuICAgICAgaWYgKCFuZXdLZXkpIG5ld0tleSA9IGtleTtcbiAgICAgIHZhciBuZXdWYWx1ZSA9IEl0ZW1WYWx1ZS5nZXRUZXh0T3JIdG1sQnlWYWx1ZSh0aGlzLmNvbHVtbnMsIHZhbHVlW2tleV0pO1xuICAgICAgaWYgKCFuZXdWYWx1ZSkgbmV3VmFsdWUgPSB2YWx1ZVtrZXldO1xuICAgICAgcmVzW25ld0tleV0gPSBuZXdWYWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgZ2V0UGxhaW5EYXRhKFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGluY2x1ZGVFbXB0eT86IGJvb2xlYW4sXG4gICAgICBjYWxjdWxhdGlvbnM/OiBBcnJheTx7XG4gICAgICAgIHByb3BlcnR5TmFtZTogc3RyaW5nLFxuICAgICAgfT4sXG4gICAgfSA9IHtcbiAgICAgIGluY2x1ZGVFbXB0eTogdHJ1ZSxcbiAgICB9XG4gICkge1xuICAgIHZhciBxdWVzdGlvblBsYWluRGF0YSA9IHN1cGVyLmdldFBsYWluRGF0YShvcHRpb25zKTtcbiAgICBpZiAoISFxdWVzdGlvblBsYWluRGF0YSkge1xuICAgICAgdmFyIHZhbHVlcyA9IHRoaXMuY3JlYXRlVmFsdWVDb3B5KCk7XG4gICAgICBxdWVzdGlvblBsYWluRGF0YS5pc05vZGUgPSB0cnVlO1xuICAgICAgcXVlc3Rpb25QbGFpbkRhdGEuZGF0YSA9IE9iamVjdC5rZXlzKHZhbHVlcyB8fCB7fSkubWFwKChyb3dOYW1lKSA9PiB7XG4gICAgICAgIHZhciByb3cgPSB0aGlzLnJvd3MuZmlsdGVyKFxuICAgICAgICAgIChyOiBNYXRyaXhSb3dNb2RlbCkgPT4gci52YWx1ZSA9PT0gcm93TmFtZVxuICAgICAgICApWzBdO1xuICAgICAgICB2YXIgcm93RGF0YUl0ZW0gPSA8YW55PntcbiAgICAgICAgICBuYW1lOiByb3dOYW1lLFxuICAgICAgICAgIHRpdGxlOiAhIXJvdyA/IHJvdy50ZXh0IDogXCJyb3dcIixcbiAgICAgICAgICB2YWx1ZTogdmFsdWVzW3Jvd05hbWVdLFxuICAgICAgICAgIGRpc3BsYXlWYWx1ZTogSXRlbVZhbHVlLmdldFRleHRPckh0bWxCeVZhbHVlKFxuICAgICAgICAgICAgdGhpcy52aXNpYmxlQ29sdW1ucyxcbiAgICAgICAgICAgIHZhbHVlc1tyb3dOYW1lXVxuICAgICAgICAgICksXG4gICAgICAgICAgZ2V0U3RyaW5nOiAodmFsOiBhbnkpID0+XG4gICAgICAgICAgICB0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiID8gSlNPTi5zdHJpbmdpZnkodmFsKSA6IHZhbCxcbiAgICAgICAgICBpc05vZGU6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgICB2YXIgaXRlbSA9IEl0ZW1WYWx1ZS5nZXRJdGVtQnlWYWx1ZShcbiAgICAgICAgICB0aGlzLnZpc2libGVDb2x1bW5zLFxuICAgICAgICAgIHZhbHVlc1tyb3dOYW1lXVxuICAgICAgICApO1xuICAgICAgICBpZiAoISFpdGVtKSB7XG4gICAgICAgICAgKG9wdGlvbnMuY2FsY3VsYXRpb25zIHx8IFtdKS5mb3JFYWNoKChjYWxjdWxhdGlvbikgPT4ge1xuICAgICAgICAgICAgcm93RGF0YUl0ZW1bY2FsY3VsYXRpb24ucHJvcGVydHlOYW1lXSA9XG4gICAgICAgICAgICAgIGl0ZW1bY2FsY3VsYXRpb24ucHJvcGVydHlOYW1lXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcm93RGF0YUl0ZW07XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXN0aW9uUGxhaW5EYXRhO1xuICB9XG4gIHB1YmxpYyBhZGRDb25kaXRpb25PYmplY3RzQnlDb250ZXh0KFxuICAgIG9iamVjdHM6IEFycmF5PElDb25kaXRpb25PYmplY3Q+LFxuICAgIGNvbnRleHQ6IGFueVxuICApIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJvdyA9IHRoaXMucm93c1tpXTtcbiAgICAgIGlmICghIXJvdy52YWx1ZSkge1xuICAgICAgICBvYmplY3RzLnB1c2goe1xuICAgICAgICAgIG5hbWU6IHRoaXMuZ2V0VmFsdWVOYW1lKCkgKyBcIi5cIiArIHJvdy52YWx1ZSxcbiAgICAgICAgICB0ZXh0OiB0aGlzLnByb2Nlc3NlZFRpdGxlICsgXCIuXCIgKyByb3cuY2FsY3VsYXRlZFRleHQsXG4gICAgICAgICAgcXVlc3Rpb246IHRoaXMsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0Q29uZGl0aW9uSnNvbihvcGVyYXRvcjogc3RyaW5nID0gbnVsbCwgcGF0aDogc3RyaW5nID0gbnVsbCk6IGFueSB7XG4gICAgaWYgKCFwYXRoKSByZXR1cm4gc3VwZXIuZ2V0Q29uZGl0aW9uSnNvbigpO1xuICAgIHZhciBxdWVzdGlvbiA9IG5ldyBRdWVzdGlvbkRyb3Bkb3duTW9kZWwocGF0aCk7XG4gICAgcXVlc3Rpb24uY2hvaWNlcyA9IHRoaXMuY29sdW1ucztcbiAgICB2YXIganNvbiA9IG5ldyBKc29uT2JqZWN0KCkudG9Kc29uT2JqZWN0KHF1ZXN0aW9uKTtcbiAgICBqc29uW1widHlwZVwiXSA9IHF1ZXN0aW9uLmdldFR5cGUoKTtcbiAgICByZXR1cm4ganNvbjtcbiAgfVxuICBwdWJsaWMgY2xlYXJWYWx1ZUlmSW52aXNpYmxlKCkge1xuICAgIHN1cGVyLmNsZWFyVmFsdWVJZkludmlzaWJsZSgpO1xuICAgIGlmICh0aGlzLmhhc1Jvd3MpIHtcbiAgICAgIHRoaXMuY2xlYXJJbnZpc2libGVWYWx1ZXNJblJvd3MoKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldEZpcnN0SW5wdXRFbGVtZW50SWQoKTogc3RyaW5nIHtcbiAgICB2YXIgcm93cyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3M7XG4gICAgaWYgKCFyb3dzKSByb3dzID0gdGhpcy52aXNpYmxlUm93cztcbiAgICBpZiAocm93cy5sZW5ndGggPiAwICYmIHRoaXMudmlzaWJsZUNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5wdXRJZCArIFwiX1wiICsgcm93c1swXS5uYW1lICsgXCJfXCIgKyAwO1xuICAgIH1cbiAgICByZXR1cm4gc3VwZXIuZ2V0Rmlyc3RJbnB1dEVsZW1lbnRJZCgpO1xuICB9XG4gIHByb3RlY3RlZCBvblJvd3NDaGFuZ2VkKCkge1xuICAgIHRoaXMudXBkYXRlVmlzaWJpbGl0eUJhc2VkT25Sb3dzKCk7XG4gICAgc3VwZXIub25Sb3dzQ2hhbmdlZCgpO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlVmlzaWJpbGl0eUJhc2VkT25Sb3dzKCkge1xuICAgIGlmICh0aGlzLmhpZGVJZlJvd3NFbXB0eSkge1xuICAgICAgdGhpcy52aXNpYmxlID1cbiAgICAgICAgdGhpcy5yb3dzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgKCF0aGlzLmZpbHRlcmVkUm93cyB8fCB0aGlzLmZpbHRlcmVkUm93cy5sZW5ndGggPiAwKTtcbiAgICB9XG4gIH1cbiAgLy9JTWF0cml4RGF0YVxuICBvbk1hdHJpeFJvd0NoYW5nZWQocm93OiBNYXRyaXhSb3dNb2RlbCkge1xuICAgIGlmICh0aGlzLmlzUm93Q2hhbmdpbmcpIHJldHVybjtcbiAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSB0cnVlO1xuICAgIGlmICghdGhpcy5oYXNSb3dzKSB7XG4gICAgICB0aGlzLnNldE5ld1ZhbHVlKHJvdy52YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICBpZiAoIW5ld1ZhbHVlKSB7XG4gICAgICAgIG5ld1ZhbHVlID0ge307XG4gICAgICB9XG4gICAgICBuZXdWYWx1ZVtyb3cubmFtZV0gPSByb3cudmFsdWU7XG4gICAgICB0aGlzLnNldE5ld1ZhbHVlKG5ld1ZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gZmFsc2U7XG4gIH1cbiAgZ2V0Q29ycmVjdGVkUm93VmFsdWUodmFsdWU6IGFueSk6IGFueSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5jb2x1bW5zW2ldLnZhbHVlKSByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5pc1R3b1ZhbHVlRXF1YWxzKHZhbHVlLCB0aGlzLmNvbHVtbnNbaV0udmFsdWUpKVxuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5zW2ldLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFNlYXJjaGFibGVJdGVtVmFsdWVLZXlzKGtleXM6IEFycmF5PHN0cmluZz4pIHtcbiAgICBrZXlzLnB1c2goXCJjb2x1bW5zXCIpO1xuICAgIGtleXMucHVzaChcInJvd3NcIik7XG4gIH1cblxuICBwcml2YXRlIGdldCBTdXJ2ZXlNb2RlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkgYXMgU3VydmV5TW9kZWw7XG4gIH1cbiAgcHVibGljIGdldENvbHVtbkhlYWRlcldyYXBwZXJDb21wb25lbnROYW1lKGNlbGw6IEl0ZW1WYWx1ZSkge1xuICAgIHJldHVybiB0aGlzLlN1cnZleU1vZGVsLmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50TmFtZShcbiAgICAgIHsgY29sdW1uOiBjZWxsIH0sXG4gICAgICBcImNvbHVtbi1oZWFkZXJcIlxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldENvbHVtbkhlYWRlcldyYXBwZXJDb21wb25lbnREYXRhKGNlbGw6IEl0ZW1WYWx1ZSkge1xuICAgIHJldHVybiB0aGlzLlN1cnZleU1vZGVsLmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50RGF0YShcbiAgICAgIHsgY29sdW1uOiBjZWxsIH0sXG4gICAgICBcImNvbHVtbi1oZWFkZXJcIlxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldFJvd0hlYWRlcldyYXBwZXJDb21wb25lbnROYW1lKGNlbGw6IEl0ZW1WYWx1ZSkge1xuICAgIHJldHVybiB0aGlzLlN1cnZleU1vZGVsLmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50TmFtZShcbiAgICAgIHsgcm93OiBjZWxsIH0sXG4gICAgICBcInJvdy1oZWFkZXJcIlxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldFJvd0hlYWRlcldyYXBwZXJDb21wb25lbnREYXRhKGNlbGw6IEl0ZW1WYWx1ZSkge1xuICAgIHJldHVybiB0aGlzLlN1cnZleU1vZGVsLmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50RGF0YShcbiAgICAgIHsgcm93OiBjZWxsIH0sXG4gICAgICBcInJvdy1oZWFkZXJcIlxuICAgICk7XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJtYXRyaXhcIixcbiAgW1xuICAgIHtcbiAgICAgIG5hbWU6IFwiY29sdW1uczppdGVtdmFsdWVbXVwiLFxuICAgICAgYmFzZVZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJtYXRyaXhfY29sdW1uXCIpO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwicm93czppdGVtdmFsdWVbXVwiLFxuICAgICAgYmFzZVZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJtYXRyaXhfcm93XCIpO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJjZWxsczpjZWxsc1wiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwiY2VsbHNcIiB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwicm93c09yZGVyXCIsXG4gICAgICBkZWZhdWx0OiBcImluaXRpYWxcIixcbiAgICAgIGNob2ljZXM6IFtcImluaXRpYWxcIiwgXCJyYW5kb21cIl0sXG4gICAgfSxcbiAgICBcImlzQWxsUm93UmVxdWlyZWQ6Ym9vbGVhblwiLFxuICAgIFwiaGlkZUlmUm93c0VtcHR5OmJvb2xlYW5cIixcbiAgXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbk1hdHJpeE1vZGVsKFwiXCIpO1xuICB9LFxuICBcIm1hdHJpeGJhc2VcIlxuKTtcblxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJtYXRyaXhcIiwgKG5hbWUpID0+IHtcbiAgdmFyIHEgPSBuZXcgUXVlc3Rpb25NYXRyaXhNb2RlbChuYW1lKTtcbiAgcS5yb3dzID0gUXVlc3Rpb25GYWN0b3J5LkRlZmF1bHRSb3dzO1xuICBxLmNvbHVtbnMgPSBRdWVzdGlvbkZhY3RvcnkuRGVmYXVsdENvbHVtcztcbiAgcmV0dXJuIHE7XG59KTtcbiIsImltcG9ydCB7XG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UsXG4gIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICBJTWF0cml4RHJvcGRvd25EYXRhLFxufSBmcm9tIFwiLi9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2VcIjtcbmltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUgfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuaW1wb3J0IHsgSUNvbmRpdGlvbk9iamVjdCB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5cbmV4cG9ydCBjbGFzcyBNYXRyaXhEcm9wZG93blJvd01vZGVsIGV4dGVuZHMgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2Uge1xuICBwcml2YXRlIGl0ZW06IEl0ZW1WYWx1ZTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG5hbWU6IHN0cmluZyxcbiAgICBpdGVtOiBJdGVtVmFsdWUsXG4gICAgZGF0YTogSU1hdHJpeERyb3Bkb3duRGF0YSxcbiAgICB2YWx1ZTogYW55XG4gICkge1xuICAgIHN1cGVyKGRhdGEsIHZhbHVlKTtcbiAgICB0aGlzLml0ZW0gPSBpdGVtO1xuICAgIHRoaXMuYnVpbGRDZWxscyh2YWx1ZSk7XG4gIH1cbiAgcHVibGljIGdldCByb3dOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtLnRleHQ7XG4gIH1cbiAgcHVibGljIGdldCBsb2NUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtLmxvY1RleHQ7XG4gIH1cbn1cbi8qKlxuICogQSBNb2RlbCBmb3IgYSBtYXRyaXggZHJvcGRvd24gcXVlc3Rpb24uIFlvdSBtYXkgdXNlIGEgZHJvcGRvd24sIGNoZWNrYm94LCByYWRpb2dyb3VwLCB0ZXh0IGFuZCBjb21tZW50IHF1ZXN0aW9ucyBhcyBhIGNlbGwgZWRpdG9ycy5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbCBleHRlbmRzIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2VcbiAgaW1wbGVtZW50cyBJTWF0cml4RHJvcGRvd25EYXRhIHtcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInRvdGFsVGV4dFwiLCB0aGlzLCB0cnVlKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcInJvd3NcIiwgZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLmNsZWFyR2VuZXJhdGVkUm93cygpO1xuICAgICAgc2VsZi5yZXNldFJlbmRlcmVkVGFibGUoKTtcbiAgICAgIHNlbGYuZmlsdGVySXRlbXMoKTtcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIm1hdHJpeGRyb3Bkb3duXCI7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHNob3cgaXQgb24gdGhlIGZpcnN0IGNvbHVtbiBmb3IgdGhlIHRvdGFsIHJvdy5cbiAgICovXG4gIHB1YmxpYyBnZXQgdG90YWxUZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInRvdGFsVGV4dFwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRvdGFsVGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwidG90YWxUZXh0XCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBsb2NUb3RhbFRleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwidG90YWxUZXh0XCIpO1xuICB9XG4gIHB1YmxpYyBnZXRGb290ZXJUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5sb2NUb3RhbFRleHQ7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBjb2x1bW4gd2lkdGggZm9yIHRoZSBmaXJzdCBjb2x1bW4sIHJvdyB0aXRsZSBjb2x1bW4uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJvd1RpdGxlV2lkdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicm93VGl0bGVXaWR0aFwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJvd1RpdGxlV2lkdGgodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyb3dUaXRsZVdpZHRoXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldFJvd1RpdGxlV2lkdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yb3dUaXRsZVdpZHRoO1xuICB9XG4gIHByb3RlY3RlZCBnZXREaXNwbGF5VmFsdWVDb3JlKGtleXNBc1RleHQ6IGJvb2xlYW4sIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICghdmFsdWUpIHJldHVybiB2YWx1ZTtcbiAgICB2YXIgcm93cyA9IHRoaXMudmlzaWJsZVJvd3M7XG4gICAgdmFyIHJlcyA9IHt9O1xuICAgIGlmICghcm93cykgcmV0dXJuIHJlcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByb3dWYWx1ZSA9IHJvd3NbaV0ucm93TmFtZTtcbiAgICAgIHZhciB2YWwgPSB2YWx1ZVtyb3dWYWx1ZV07XG4gICAgICBpZiAoIXZhbCkgY29udGludWU7XG4gICAgICBpZiAoa2V5c0FzVGV4dCkge1xuICAgICAgICB2YXIgZGlzcGxheVJvd1ZhbHVlID0gSXRlbVZhbHVlLmdldFRleHRPckh0bWxCeVZhbHVlKFxuICAgICAgICAgIHRoaXMucm93cyxcbiAgICAgICAgICByb3dWYWx1ZVxuICAgICAgICApO1xuICAgICAgICBpZiAoISFkaXNwbGF5Um93VmFsdWUpIHtcbiAgICAgICAgICByb3dWYWx1ZSA9IGRpc3BsYXlSb3dWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgKDxhbnk+cmVzKVtyb3dWYWx1ZV0gPSB0aGlzLmdldFJvd0Rpc3BsYXlWYWx1ZShrZXlzQXNUZXh0LCByb3dzW2ldLCB2YWwpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBhZGRDb25kaXRpb25PYmplY3RzQnlDb250ZXh0KFxuICAgIG9iamVjdHM6IEFycmF5PElDb25kaXRpb25PYmplY3Q+LFxuICAgIGNvbnRleHQ6IGFueVxuICApIHtcbiAgICB2YXIgaGFzQ29udGV4dCA9ICEhY29udGV4dCA/IHRoaXMuY29sdW1ucy5pbmRleE9mKGNvbnRleHQpID4gLTEgOiBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJvdyA9IHRoaXMucm93c1tpXTtcbiAgICAgIGlmICghcm93LnZhbHVlKSBjb250aW51ZTtcbiAgICAgIHZhciBwcmVmaXhOYW1lID0gdGhpcy5nZXRWYWx1ZU5hbWUoKSArIFwiLlwiICsgcm93LnZhbHVlICsgXCIuXCI7XG4gICAgICB2YXIgcHJlZml4VGl0bGUgPSB0aGlzLnByb2Nlc3NlZFRpdGxlICsgXCIuXCIgKyByb3cuY2FsY3VsYXRlZFRleHQgKyBcIi5cIjtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLmNvbHVtbnNbal07XG4gICAgICAgIG9iamVjdHMucHVzaCh7XG4gICAgICAgICAgbmFtZTogcHJlZml4TmFtZSArIGNvbHVtbi5uYW1lLFxuICAgICAgICAgIHRleHQ6IHByZWZpeFRpdGxlICsgY29sdW1uLmZ1bGxUaXRsZSxcbiAgICAgICAgICBxdWVzdGlvbjogdGhpcyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChoYXNDb250ZXh0KSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5jb2x1bW5zW2ldO1xuICAgICAgICBpZiAoY29sdW1uID09IGNvbnRleHQpIGNvbnRpbnVlO1xuICAgICAgICBvYmplY3RzLnB1c2goe1xuICAgICAgICAgIG5hbWU6IFwicm93LlwiICsgY29sdW1uLm5hbWUsXG4gICAgICAgICAgdGV4dDogXCJyb3cuXCIgKyBjb2x1bW4uZnVsbFRpdGxlLFxuICAgICAgICAgIHF1ZXN0aW9uOiB0aGlzLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIGNsZWFySW5jb3JyZWN0VmFsdWVzKCkge1xuICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgIGlmICghdmFsKSByZXR1cm47XG4gICAgdmFyIG5ld1ZhbCA9IG51bGw7XG4gICAgdmFyIGlzQ2hhbmdlZCA9IGZhbHNlO1xuICAgIHZhciByb3dzID0gISF0aGlzLmZpbHRlcmVkUm93cyA/IHRoaXMuZmlsdGVyZWRSb3dzIDogdGhpcy5yb3dzO1xuICAgIGZvciAodmFyIGtleSBpbiB2YWwpIHtcbiAgICAgIGlmIChJdGVtVmFsdWUuZ2V0SXRlbUJ5VmFsdWUocm93cywga2V5KSkge1xuICAgICAgICBpZiAobmV3VmFsID09IG51bGwpIG5ld1ZhbCA9IHt9O1xuICAgICAgICAoPGFueT5uZXdWYWwpW2tleV0gPSB2YWxba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlzQ2hhbmdlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpc0NoYW5nZWQpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWw7XG4gICAgfVxuICAgIHN1cGVyLmNsZWFySW5jb3JyZWN0VmFsdWVzKCk7XG4gIH1cbiAgcHVibGljIGNsZWFyVmFsdWVJZkludmlzaWJsZSgpIHtcbiAgICBzdXBlci5jbGVhclZhbHVlSWZJbnZpc2libGUoKTtcbiAgICB0aGlzLmNsZWFySW52aXNpYmxlVmFsdWVzSW5Sb3dzKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdlbmVyYXRlUm93cygpOiBBcnJheTxNYXRyaXhEcm9wZG93blJvd01vZGVsPiB7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheTxNYXRyaXhEcm9wZG93blJvd01vZGVsPigpO1xuICAgIHZhciByb3dzID0gISF0aGlzLmZpbHRlcmVkUm93cyA/IHRoaXMuZmlsdGVyZWRSb3dzIDogdGhpcy5yb3dzO1xuICAgIGlmICghcm93cyB8fCByb3dzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHJlc3VsdDtcbiAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICBpZiAoIXZhbCkgdmFsID0ge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIXJvd3NbaV0udmFsdWUpIGNvbnRpbnVlO1xuICAgICAgcmVzdWx0LnB1c2godGhpcy5jcmVhdGVNYXRyaXhSb3cocm93c1tpXSwgdmFsW3Jvd3NbaV0udmFsdWVdKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZU1hdHJpeFJvdyhcbiAgICBpdGVtOiBJdGVtVmFsdWUsXG4gICAgdmFsdWU6IGFueVxuICApOiBNYXRyaXhEcm9wZG93blJvd01vZGVsIHtcbiAgICByZXR1cm4gbmV3IE1hdHJpeERyb3Bkb3duUm93TW9kZWwoaXRlbS52YWx1ZSwgaXRlbSwgdGhpcywgdmFsdWUpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRTZWFyY2hhYmxlSXRlbVZhbHVlS2V5cyhrZXlzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAga2V5cy5wdXNoKFwicm93c1wiKTtcbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcIm1hdHJpeGRyb3Bkb3duXCIsXG4gIFtcbiAgICB7XG4gICAgICBuYW1lOiBcInJvd3M6aXRlbXZhbHVlW11cIixcbiAgICB9LFxuICAgIFwicm93c1Zpc2libGVJZjpjb25kaXRpb25cIixcbiAgICBcInJvd1RpdGxlV2lkdGhcIixcbiAgICB7IG5hbWU6IFwidG90YWxUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NUb3RhbFRleHRcIiB9LFxuICBdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbChcIlwiKTtcbiAgfSxcbiAgXCJtYXRyaXhkcm9wZG93bmJhc2VcIlxuKTtcblxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJtYXRyaXhkcm9wZG93blwiLCAobmFtZSkgPT4ge1xuICB2YXIgcSA9IG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWwobmFtZSk7XG4gIHEuY2hvaWNlcyA9IFsxLCAyLCAzLCA0LCA1XTtcbiAgcS5yb3dzID0gUXVlc3Rpb25GYWN0b3J5LkRlZmF1bHRSb3dzO1xuICBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLmFkZERlZmF1bHRDb2x1bW5zKHEpO1xuICByZXR1cm4gcTtcbn0pO1xuIiwiaW1wb3J0IHsgSnNvbk9iamVjdCwgQ3VzdG9tUHJvcGVydGllc0NvbGxlY3Rpb24sIFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbk1hdHJpeEJhc2VNb2RlbCB9IGZyb20gXCIuL21hcnRpeEJhc2VcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IEhhc2hUYWJsZSwgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBJRWxlbWVudCwgSVF1ZXN0aW9uLCBJU3VydmV5RGF0YSwgSVN1cnZleSwgSVN1cnZleUltcGwsIElUZXh0UHJvY2Vzc29yLCBJUHJvZ3Jlc3NJbmZvLCBJUGFuZWwgfSBmcm9tIFwiLi9iYXNlLWludGVyZmFjZXNcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi9zdXJ2ZXktZWxlbWVudFwiO1xuaW1wb3J0IHsgVGV4dFByZVByb2Nlc3NvclZhbHVlLCBRdWVzdGlvblRleHRQcm9jZXNzb3IgfSBmcm9tIFwiLi90ZXh0UHJlUHJvY2Vzc29yXCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUgfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHsgSUxvY2FsaXphYmxlT3duZXIsIExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IGdldEN1cnJlY3lDb2RlcyB9IGZyb20gXCIuL3F1ZXN0aW9uX2V4cHJlc3Npb25cIjtcbmltcG9ydCB7IEZ1bmN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL2Z1bmN0aW9uc2ZhY3RvcnlcIjtcbmltcG9ydCB7IFBhbmVsTW9kZWwgfSBmcm9tIFwiLi9wYW5lbFwiO1xuaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuaW1wb3J0IHsgS2V5RHVwbGljYXRpb25FcnJvciB9IGZyb20gXCIuL2Vycm9yXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCIuL3N1cnZleVwiO1xuaW1wb3J0IHsgU3VydmV5RXJyb3IgfSBmcm9tIFwiLi9zdXJ2ZXktZXJyb3JcIjtcbmltcG9ydCB7IENzc0NsYXNzQnVpbGRlciB9IGZyb20gXCIuL3V0aWxzL2Nzc0NsYXNzQnVpbGRlclwiO1xuaW1wb3J0IHsgTWF0cml4RHJvcGRvd25Db2x1bW4gfSBmcm9tIFwiLi9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bmNvbHVtblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCwgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93LCBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZSB9IGZyb20gXCIuL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3ducmVuZGVyZWRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJTWF0cml4RHJvcGRvd25EYXRhIHtcbiAgdmFsdWU6IGFueTtcbiAgb25Sb3dDaGFuZ2VkKFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgY29sdW1uTmFtZTogc3RyaW5nLFxuICAgIG5ld1Jvd1ZhbHVlOiBhbnksXG4gICAgaXNEZWxldGluZ1ZhbHVlOiBib29sZWFuXG4gICk6IHZvaWQ7XG4gIG9uUm93Q2hhbmdpbmcoXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICBjb2x1bW5OYW1lOiBzdHJpbmcsXG4gICAgcm93VmFsdWU6IGFueVxuICApOiBhbnk7XG4gIGlzVmFsaWRhdGVPblZhbHVlQ2hhbmdpbmc6IGJvb2xlYW47XG4gIGdldFJvd0luZGV4KHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UpOiBudW1iZXI7XG4gIGdldFJvd1ZhbHVlKHJvd0luZGV4OiBudW1iZXIpOiBhbnk7XG4gIGNoZWNrSWZWYWx1ZUluUm93RHVwbGljYXRlZChcbiAgICBjaGVja2VkUm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICBjZWxsUXVlc3Rpb246IFF1ZXN0aW9uXG4gICk6IGJvb2xlYW47XG4gIGhhc0RldGFpbFBhbmVsKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UpOiBib29sZWFuO1xuICBnZXRJc0RldGFpbFBhbmVsU2hvd2luZyhyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKTogYm9vbGVhbjtcbiAgc2V0SXNEZXRhaWxQYW5lbFNob3dpbmcocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSwgdmFsOiBib29sZWFuKTogdm9pZDtcbiAgY3JlYXRlUm93RGV0YWlsUGFuZWwocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSk6IFBhbmVsTW9kZWw7XG4gIHZhbGlkYXRlQ2VsbChcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgICByb3dWYWx1ZTogYW55XG4gICk6IFN1cnZleUVycm9yO1xuICBjb2x1bW5zOiBBcnJheTxNYXRyaXhEcm9wZG93bkNvbHVtbj47XG4gIGNyZWF0ZVF1ZXN0aW9uKFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtblxuICApOiBRdWVzdGlvbjtcbiAgZ2V0TG9jYWxlKCk6IHN0cmluZztcbiAgZ2V0TWFya2Rvd25IdG1sKHRleHQ6IHN0cmluZywgbmFtZTogc3RyaW5nKTogc3RyaW5nO1xuICBnZXRSZW5kZXJlcihuYW1lOiBzdHJpbmcpOiBzdHJpbmc7XG4gIGdldFJlbmRlcmVyQ29udGV4dChsb2NTdHI6IExvY2FsaXphYmxlU3RyaW5nKTogYW55O1xuICBnZXRQcm9jZXNzZWRUZXh0KHRleHQ6IHN0cmluZyk6IHN0cmluZztcbiAgZ2V0U2hhcmVkUXVlc3Rpb25CeU5hbWUoXG4gICAgY29sdW1uTmFtZTogc3RyaW5nLFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2VcbiAgKTogUXVlc3Rpb247XG4gIG9uVG90YWxWYWx1ZUNoYW5nZWQoKTogYW55O1xuICBnZXRTdXJ2ZXkoKTogSVN1cnZleTtcbn1cblxuZXhwb3J0IGNsYXNzIE1hdHJpeERyb3Bkb3duQ2VsbCB7XG4gIHByaXZhdGUgcXVlc3Rpb25WYWx1ZTogUXVlc3Rpb247XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uLFxuICAgIHB1YmxpYyByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIHB1YmxpYyBkYXRhOiBJTWF0cml4RHJvcGRvd25EYXRhXG4gICkge1xuICAgIHRoaXMucXVlc3Rpb25WYWx1ZSA9IHRoaXMuY3JlYXRlUXVlc3Rpb24oY29sdW1uLCByb3csIGRhdGEpO1xuICAgIHRoaXMucXVlc3Rpb25WYWx1ZS51cGRhdGVDdXN0b21XaWRnZXQoKTtcbiAgfVxuICBwdWJsaWMgbG9jU3Ryc0NoYW5nZWQoKSB7XG4gICAgdGhpcy5xdWVzdGlvbi5sb2NTdHJzQ2hhbmdlZCgpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVRdWVzdGlvbihcbiAgICBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uLFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgZGF0YTogSU1hdHJpeERyb3Bkb3duRGF0YVxuICApOiBRdWVzdGlvbiB7XG4gICAgdmFyIHJlcyA9IGRhdGEuY3JlYXRlUXVlc3Rpb24odGhpcy5yb3csIHRoaXMuY29sdW1uKTtcbiAgICByZXMudmFsaWRhdGVWYWx1ZUNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGRhdGEudmFsaWRhdGVDZWxsKHJvdywgY29sdW1uLm5hbWUsIHJvdy52YWx1ZSk7XG4gICAgfTtcbiAgICBDdXN0b21Qcm9wZXJ0aWVzQ29sbGVjdGlvbi5nZXRQcm9wZXJ0aWVzKGNvbHVtbi5nZXRUeXBlKCkpLmZvckVhY2goXG4gICAgICAocHJvcGVydHkpID0+IHtcbiAgICAgICAgbGV0IHByb3BlcnR5TmFtZSA9IHByb3BlcnR5Lm5hbWU7XG4gICAgICAgIGlmICgoPGFueT5jb2x1bW4pW3Byb3BlcnR5TmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJlc1twcm9wZXJ0eU5hbWVdID0gKDxhbnk+Y29sdW1uKVtwcm9wZXJ0eU5hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uVmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uLnZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24udmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcnVuQ29uZGl0aW9uKHZhbHVlczogSGFzaFRhYmxlPGFueT4sIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+KSB7XG4gICAgdGhpcy5xdWVzdGlvbi5ydW5Db25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTWF0cml4RHJvcGRvd25Ub3RhbENlbGwgZXh0ZW5kcyBNYXRyaXhEcm9wZG93bkNlbGwge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbixcbiAgICBwdWJsaWMgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICBwdWJsaWMgZGF0YTogSU1hdHJpeERyb3Bkb3duRGF0YVxuICApIHtcbiAgICBzdXBlcihjb2x1bW4sIHJvdywgZGF0YSk7XG4gICAgdGhpcy51cGRhdGVDZWxsUXVlc3Rpb24oKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUXVlc3Rpb24oXG4gICAgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbixcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIGRhdGE6IElNYXRyaXhEcm9wZG93bkRhdGFcbiAgKTogUXVlc3Rpb24ge1xuICAgIHZhciByZXMgPSA8UXVlc3Rpb24+U2VyaWFsaXplci5jcmVhdGVDbGFzcyhcImV4cHJlc3Npb25cIik7XG4gICAgcmVzLnNldFN1cnZleUltcGwocm93KTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBsb2NTdHJzQ2hhbmdlZCgpIHtcbiAgICB0aGlzLnVwZGF0ZUNlbGxRdWVzdGlvbigpO1xuICAgIHN1cGVyLmxvY1N0cnNDaGFuZ2VkKCk7XG4gIH1cbiAgcHVibGljIHVwZGF0ZUNlbGxRdWVzdGlvbigpIHtcbiAgICB0aGlzLnF1ZXN0aW9uLmxvY0NhbGN1bGF0aW9uKCk7XG4gICAgdGhpcy5jb2x1bW4udXBkYXRlQ2VsbFF1ZXN0aW9uKHRoaXMucXVlc3Rpb24sIG51bGwsIGZ1bmN0aW9uIChqc29uKSB7XG4gICAgICBkZWxldGUganNvbltcImRlZmF1bHRWYWx1ZVwiXTtcbiAgICB9KTtcbiAgICB0aGlzLnF1ZXN0aW9uLmV4cHJlc3Npb24gPSB0aGlzLmdldFRvdGFsRXhwcmVzc2lvbigpO1xuICAgIHRoaXMucXVlc3Rpb24uZm9ybWF0ID0gdGhpcy5jb2x1bW4udG90YWxGb3JtYXQ7XG4gICAgdGhpcy5xdWVzdGlvbi5jdXJyZW5jeSA9IHRoaXMuY29sdW1uLnRvdGFsQ3VycmVuY3k7XG4gICAgdGhpcy5xdWVzdGlvbi5kaXNwbGF5U3R5bGUgPSB0aGlzLmNvbHVtbi50b3RhbERpc3BsYXlTdHlsZTtcbiAgICB0aGlzLnF1ZXN0aW9uLm1heGltdW1GcmFjdGlvbkRpZ2l0cyA9IHRoaXMuY29sdW1uLnRvdGFsTWF4aW11bUZyYWN0aW9uRGlnaXRzO1xuICAgIHRoaXMucXVlc3Rpb24ubWluaW11bUZyYWN0aW9uRGlnaXRzID0gdGhpcy5jb2x1bW4udG90YWxNaW5pbXVtRnJhY3Rpb25EaWdpdHM7XG4gICAgdGhpcy5xdWVzdGlvbi51bmxvY0NhbGN1bGF0aW9uKCk7XG4gICAgdGhpcy5xdWVzdGlvbi5ydW5JZlJlYWRPbmx5ID0gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0VG90YWxFeHByZXNzaW9uKCk6IHN0cmluZyB7XG4gICAgaWYgKCEhdGhpcy5jb2x1bW4udG90YWxFeHByZXNzaW9uKSByZXR1cm4gdGhpcy5jb2x1bW4udG90YWxFeHByZXNzaW9uO1xuICAgIGlmICh0aGlzLmNvbHVtbi50b3RhbFR5cGUgPT0gXCJub25lXCIpIHJldHVybiBcIlwiO1xuICAgIHZhciBmdW5OYW1lID0gdGhpcy5jb2x1bW4udG90YWxUeXBlICsgXCJJbkFycmF5XCI7XG4gICAgaWYgKCFGdW5jdGlvbkZhY3RvcnkuSW5zdGFuY2UuaGFzRnVuY3Rpb24oZnVuTmFtZSkpIHJldHVybiBcIlwiO1xuICAgIHJldHVybiBmdW5OYW1lICsgXCIoe3NlbGZ9LCAnXCIgKyB0aGlzLmNvbHVtbi5uYW1lICsgXCInKVwiO1xuICB9XG59XG5cbmNsYXNzIE1hdHJpeERyb3Bkb3duUm93VGV4dFByb2Nlc3NvciBleHRlbmRzIFF1ZXN0aW9uVGV4dFByb2Nlc3NvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIHByb3RlY3RlZCB2YXJpYWJsZU5hbWU6IHN0cmluZ1xuICApIHtcbiAgICBzdXBlcih2YXJpYWJsZU5hbWUpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgc3VydmV5KCk6IElTdXJ2ZXkge1xuICAgIHJldHVybiB0aGlzLnJvdy5nZXRTdXJ2ZXkoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VmFsdWVzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucm93LnZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRRdWVzdGlvbkJ5TmFtZShuYW1lOiBzdHJpbmcpOiBRdWVzdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMucm93LmdldFF1ZXN0aW9uQnlOYW1lKG5hbWUpO1xuICB9XG4gIHByb3RlY3RlZCBvbkN1c3RvbVByb2Nlc3NUZXh0KHRleHRWYWx1ZTogVGV4dFByZVByb2Nlc3NvclZhbHVlKTogYm9vbGVhbiB7XG4gICAgaWYgKHRleHRWYWx1ZS5uYW1lID09IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLkluZGV4VmFyaWFibGVOYW1lKSB7XG4gICAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgPSB0cnVlO1xuICAgICAgdGV4dFZhbHVlLnZhbHVlID0gdGhpcy5yb3cucm93SW5kZXg7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRleHRWYWx1ZS5uYW1lID09IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLlJvd1ZhbHVlVmFyaWFibGVOYW1lKSB7XG4gICAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgPSB0cnVlO1xuICAgICAgdGV4dFZhbHVlLnZhbHVlID0gdGhpcy5yb3cucm93TmFtZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlXG5pbXBsZW1lbnRzIElTdXJ2ZXlEYXRhLCBJU3VydmV5SW1wbCwgSUxvY2FsaXphYmxlT3duZXIge1xuICBwdWJsaWMgc3RhdGljIFJvd1ZhcmlhYmxlTmFtZSA9IFwicm93XCI7XG4gIHB1YmxpYyBzdGF0aWMgT3duZXJWYXJpYWJsZU5hbWUgPSBcInNlbGZcIjtcbiAgcHVibGljIHN0YXRpYyBJbmRleFZhcmlhYmxlTmFtZSA9IFwicm93SW5kZXhcIjtcbiAgcHVibGljIHN0YXRpYyBSb3dWYWx1ZVZhcmlhYmxlTmFtZSA9IFwicm93VmFsdWVcIjtcblxuICBwcml2YXRlIHN0YXRpYyBpZENvdW50ZXI6IG51bWJlciA9IDE7XG4gIHByaXZhdGUgc3RhdGljIGdldElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwic3Jvd19cIiArIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLmlkQ291bnRlcisrO1xuICB9XG4gIHByb3RlY3RlZCBkYXRhOiBJTWF0cml4RHJvcGRvd25EYXRhO1xuICBwcm90ZWN0ZWQgaXNTZXR0aW5nVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBpZFZhbHVlOiBzdHJpbmc7XG4gIHByaXZhdGUgdGV4dFByZVByb2Nlc3NvcjogTWF0cml4RHJvcGRvd25Sb3dUZXh0UHJvY2Vzc29yO1xuICBwcml2YXRlIGRldGFpbFBhbmVsVmFsdWU6IFBhbmVsTW9kZWwgPSBudWxsO1xuXG4gIHB1YmxpYyBjZWxsczogQXJyYXk8TWF0cml4RHJvcGRvd25DZWxsPiA9IFtdO1xuICBwdWJsaWMgc2hvd0hpZGVEZXRhaWxQYW5lbENsaWNrOiBhbnk7XG4gIHB1YmxpYyBvbkRldGFpbFBhbmVsU2hvd2luZ0NoYW5nZWQ6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoZGF0YTogSU1hdHJpeERyb3Bkb3duRGF0YSwgdmFsdWU6IGFueSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5zdWJzY3JpYmVUb0NoYW5nZXModmFsdWUpO1xuICAgIHRoaXMudGV4dFByZVByb2Nlc3NvciA9IG5ldyBNYXRyaXhEcm9wZG93blJvd1RleHRQcm9jZXNzb3IoXG4gICAgICB0aGlzLFxuICAgICAgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UuUm93VmFyaWFibGVOYW1lXG4gICAgKTtcbiAgICB0aGlzLnNob3dIaWRlRGV0YWlsUGFuZWxDbGljayA9ICgpID0+IHtcbiAgICAgIHRoaXMuc2hvd0hpZGVEZXRhaWxQYW5lbCgpO1xuICAgIH07XG4gICAgdGhpcy5pZFZhbHVlID0gTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UuZ2V0SWQoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWRWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHJvd05hbWUoKTogYW55IHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0IHRleHQoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5yb3dOYW1lO1xuICB9XG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogYW55IHtcbiAgICB2YXIgcmVzdWx0OiBhbnkgPSB7fTtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbnM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxdWVzdGlvbiA9IHF1ZXN0aW9uc1tpXTtcbiAgICAgIGlmICghcXVlc3Rpb24uaXNFbXB0eSgpKSB7XG4gICAgICAgIHJlc3VsdFtxdWVzdGlvbi5nZXRWYWx1ZU5hbWUoKV0gPSBxdWVzdGlvbi52YWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgISFxdWVzdGlvbi5jb21tZW50ICYmXG4gICAgICAgICEhdGhpcy5nZXRTdXJ2ZXkoKSAmJlxuICAgICAgICB0aGlzLmdldFN1cnZleSgpLnN0b3JlT3RoZXJzQXNDb21tZW50XG4gICAgICApIHtcbiAgICAgICAgcmVzdWx0W3F1ZXN0aW9uLmdldFZhbHVlTmFtZSgpICsgc2V0dGluZ3MuY29tbWVudFByZWZpeF0gPVxuICAgICAgICAgIHF1ZXN0aW9uLmNvbW1lbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5pc1NldHRpbmdWYWx1ZSA9IHRydWU7XG4gICAgdGhpcy5zdWJzY3JpYmVUb0NoYW5nZXModmFsdWUpO1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ucztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHF1ZXN0aW9uID0gcXVlc3Rpb25zW2ldO1xuICAgICAgdmFyIHZhbCA9IHRoaXMuZ2V0Q2VsbFZhbHVlKHZhbHVlLCBxdWVzdGlvbi5nZXRWYWx1ZU5hbWUoKSk7XG4gICAgICB2YXIgb2xkQ29tbWVudCA9IHF1ZXN0aW9uLmNvbW1lbnQ7XG4gICAgICB2YXIgY29tbWVudCA9ICEhdmFsdWVcbiAgICAgICAgPyB2YWx1ZVtxdWVzdGlvbi5nZXRWYWx1ZU5hbWUoKSArIHNldHRpbmdzLmNvbW1lbnRQcmVmaXhdXG4gICAgICAgIDogXCJcIjtcbiAgICAgIGlmIChjb21tZW50ID09IHVuZGVmaW5lZCkgY29tbWVudCA9IFwiXCI7XG4gICAgICBxdWVzdGlvbi51cGRhdGVWYWx1ZUZyb21TdXJ2ZXkodmFsKTtcbiAgICAgIGlmICghIWNvbW1lbnQgfHwgdGhpcy5pc1R3b1ZhbHVlRXF1YWxzKG9sZENvbW1lbnQsIHF1ZXN0aW9uLmNvbW1lbnQpKSB7XG4gICAgICAgIHF1ZXN0aW9uLnVwZGF0ZUNvbW1lbnRGcm9tU3VydmV5KGNvbW1lbnQpO1xuICAgICAgfVxuICAgICAgcXVlc3Rpb24ub25TdXJ2ZXlWYWx1ZUNoYW5nZWQodmFsKTtcbiAgICB9XG4gICAgdGhpcy5pc1NldHRpbmdWYWx1ZSA9IGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXQgbG9jVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIGdldCBoYXNQYW5lbCgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZGF0YSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmRhdGEuaGFzRGV0YWlsUGFuZWwodGhpcyk7XG4gIH1cbiAgcHVibGljIGdldCBkZXRhaWxQYW5lbCgpOiBQYW5lbE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5kZXRhaWxQYW5lbFZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgZGV0YWlsUGFuZWxJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMuZGV0YWlsUGFuZWwgPyB0aGlzLmRldGFpbFBhbmVsLmlkIDogXCJcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzRGV0YWlsUGFuZWxTaG93aW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRJc0RldGFpbFBhbmVsU2hvd2luZyh0aGlzKSA6IGZhbHNlO1xuICB9XG4gIHByaXZhdGUgc2V0SXNEZXRhaWxQYW5lbFNob3dpbmcodmFsOiBib29sZWFuKSB7XG4gICAgaWYgKCEhdGhpcy5kYXRhKSB7XG4gICAgICB0aGlzLmRhdGEuc2V0SXNEZXRhaWxQYW5lbFNob3dpbmcodGhpcywgdmFsKTtcbiAgICB9XG4gICAgaWYgKCEhdGhpcy5vbkRldGFpbFBhbmVsU2hvd2luZ0NoYW5nZWQpIHtcbiAgICAgIHRoaXMub25EZXRhaWxQYW5lbFNob3dpbmdDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgc2hvd0hpZGVEZXRhaWxQYW5lbCgpIHtcbiAgICBpZiAodGhpcy5pc0RldGFpbFBhbmVsU2hvd2luZykge1xuICAgICAgdGhpcy5oaWRlRGV0YWlsUGFuZWwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93RGV0YWlsUGFuZWwoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBpc0NyZWF0aW5nRGV0YWlsUGFuZWwgPSBmYWxzZTtcbiAgcHVibGljIHNob3dEZXRhaWxQYW5lbCgpIHtcbiAgICB0aGlzLmVuc3VyZURldGFpbFBhbmVsKCk7XG4gICAgaWYgKCF0aGlzLmRldGFpbFBhbmVsVmFsdWUpIHJldHVybjtcbiAgICB0aGlzLnNldElzRGV0YWlsUGFuZWxTaG93aW5nKHRydWUpO1xuICB9XG4gIHB1YmxpYyBoaWRlRGV0YWlsUGFuZWwoZGVzdHJveVBhbmVsOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLnNldElzRGV0YWlsUGFuZWxTaG93aW5nKGZhbHNlKTtcbiAgICBpZiAoZGVzdHJveVBhbmVsKSB7XG4gICAgICB0aGlzLmRldGFpbFBhbmVsVmFsdWUgPSBudWxsO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGVuc3VyZURldGFpbFBhbmVsKCkge1xuICAgIGlmICh0aGlzLmlzQ3JlYXRpbmdEZXRhaWxQYW5lbCkgcmV0dXJuO1xuICAgIGlmICghIXRoaXMuZGV0YWlsUGFuZWxWYWx1ZSB8fCAhdGhpcy5oYXNQYW5lbCB8fCAhdGhpcy5kYXRhKSByZXR1cm47XG4gICAgdGhpcy5pc0NyZWF0aW5nRGV0YWlsUGFuZWwgPSB0cnVlO1xuICAgIHRoaXMuZGV0YWlsUGFuZWxWYWx1ZSA9IHRoaXMuZGF0YS5jcmVhdGVSb3dEZXRhaWxQYW5lbCh0aGlzKTtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5kZXRhaWxQYW5lbFZhbHVlLnF1ZXN0aW9ucztcbiAgICB2YXIgdmFsdWUgPSB0aGlzLmRhdGEuZ2V0Um93VmFsdWUodGhpcy5kYXRhLmdldFJvd0luZGV4KHRoaXMpKTtcbiAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KHZhbHVlKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGtleSA9IHF1ZXN0aW9uc1tpXS5nZXRWYWx1ZU5hbWUoKTtcbiAgICAgICAgaWYgKCFIZWxwZXJzLmlzVmFsdWVFbXB0eSh2YWx1ZVtrZXldKSkge1xuICAgICAgICAgIHF1ZXN0aW9uc1tpXS52YWx1ZSA9IHZhbHVlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5kZXRhaWxQYW5lbFZhbHVlLnNldFN1cnZleUltcGwodGhpcyk7XG4gICAgdGhpcy5pc0NyZWF0aW5nRGV0YWlsUGFuZWwgPSBmYWxzZTtcbiAgfVxuICBnZXRBbGxWYWx1ZXMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfVxuICBnZXRGaWx0ZXJlZFZhbHVlcygpOiBhbnkge1xuICAgIHZhciBhbGxWYWx1ZXMgPSB0aGlzLmdldEFsbFZhbHVlcygpO1xuICAgIHZhciB2YWx1ZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7IHJvdzogYWxsVmFsdWVzIH07XG4gICAgZm9yICh2YXIga2V5IGluIGFsbFZhbHVlcykge1xuICAgICAgdmFsdWVzW2tleV0gPSBhbGxWYWx1ZXNba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfVxuICBnZXRGaWx0ZXJlZFByb3BlcnRpZXMoKTogYW55IHtcbiAgICByZXR1cm4geyBzdXJ2ZXk6IHRoaXMuZ2V0U3VydmV5KCksIHJvdzogdGhpcyB9O1xuICB9XG4gIHB1YmxpYyBydW5Db25kaXRpb24odmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHtcbiAgICBpZiAoISF0aGlzLmRhdGEpIHtcbiAgICAgIHZhbHVlc1tNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5Pd25lclZhcmlhYmxlTmFtZV0gPSB0aGlzLmRhdGEudmFsdWU7XG4gICAgfVxuICAgIHZhbHVlc1tNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5JbmRleFZhcmlhYmxlTmFtZV0gPSB0aGlzLnJvd0luZGV4O1xuICAgIHZhbHVlc1tNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5Sb3dWYWx1ZVZhcmlhYmxlTmFtZV0gPSB0aGlzLnJvd05hbWU7XG4gICAgaWYgKCFwcm9wZXJ0aWVzKSBwcm9wZXJ0aWVzID0ge307XG4gICAgcHJvcGVydGllc1tNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5Sb3dWYXJpYWJsZU5hbWVdID0gdGhpcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhbHVlc1tNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5Sb3dWYXJpYWJsZU5hbWVdID0gdGhpcy52YWx1ZTtcbiAgICAgIHRoaXMuY2VsbHNbaV0ucnVuQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgfVxuICAgIGlmICghIXRoaXMuZGV0YWlsUGFuZWwpIHtcbiAgICAgIHRoaXMuZGV0YWlsUGFuZWwucnVuQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBjbGVhclZhbHVlKCkge1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ucztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgcXVlc3Rpb25zW2ldLmNsZWFyVmFsdWUoKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIG9uQW55VmFsdWVDaGFuZ2VkKG5hbWU6IHN0cmluZykge1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ucztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgcXVlc3Rpb25zW2ldLm9uQW55VmFsdWVDaGFuZ2VkKG5hbWUpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0RGF0YVZhbHVlQ29yZSh2YWx1ZXNIYXNoOiBhbnksIGtleTogc3RyaW5nKSB7XG4gICAgdmFyIHN1cnZleSA9IHRoaXMuZ2V0U3VydmV5KCk7XG4gICAgaWYgKCEhc3VydmV5KSB7XG4gICAgICByZXR1cm4gKDxhbnk+c3VydmV5KS5nZXREYXRhVmFsdWVDb3JlKHZhbHVlc0hhc2gsIGtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB2YWx1ZXNIYXNoW2tleV07XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRWYWx1ZShuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XG4gICAgcmV0dXJuICEhcXVlc3Rpb24gPyBxdWVzdGlvbi52YWx1ZSA6IG51bGw7XG4gIH1cbiAgcHVibGljIHNldFZhbHVlKG5hbWU6IHN0cmluZywgbmV3Q29sdW1uVmFsdWU6IGFueSkge1xuICAgIHRoaXMuc2V0VmFsdWVDb3JlKG5hbWUsIG5ld0NvbHVtblZhbHVlLCBmYWxzZSk7XG4gIH1cbiAgZ2V0VmFyaWFibGUobmFtZTogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHNldFZhcmlhYmxlKG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSkgeyB9XG4gIHB1YmxpYyBnZXRDb21tZW50KG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcbiAgICByZXR1cm4gISFxdWVzdGlvbiA/IHF1ZXN0aW9uLmNvbW1lbnQgOiBcIlwiO1xuICB9XG4gIHB1YmxpYyBzZXRDb21tZW50KG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IHN0cmluZywgbG9jTm90aWZpY2F0aW9uOiBhbnkpIHtcbiAgICB0aGlzLnNldFZhbHVlQ29yZShuYW1lLCBuZXdWYWx1ZSwgdHJ1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRWYWx1ZUNvcmUobmFtZTogc3RyaW5nLCBuZXdDb2x1bW5WYWx1ZTogYW55LCBpc0NvbW1lbnQ6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5pc1NldHRpbmdWYWx1ZSkgcmV0dXJuO1xuICAgIHRoaXMudXBkYXRlUXVlc3Rpb25zVmFsdWUobmFtZSwgbmV3Q29sdW1uVmFsdWUsIGlzQ29tbWVudCk7XG4gICAgdmFyIG5ld1ZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICB2YXIgY2hhbmdlZE5hbWUgPSBpc0NvbW1lbnQgPyBuYW1lICsgc2V0dGluZ3MuY29tbWVudFByZWZpeCA6IG5hbWU7XG4gICAgdmFyIGNoYW5nZWRWYWx1ZSA9IGlzQ29tbWVudCA/IHRoaXMuZ2V0Q29tbWVudChuYW1lKSA6IHRoaXMuZ2V0VmFsdWUobmFtZSk7XG4gICAgdmFyIGNoYW5nZWRRdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XG4gICAgdmFyIGNoYW5naW5nVmFsdWUgPSB0aGlzLmRhdGEub25Sb3dDaGFuZ2luZyh0aGlzLCBjaGFuZ2VkTmFtZSwgbmV3VmFsdWUpO1xuICAgIGlmIChcbiAgICAgICEhY2hhbmdlZFF1ZXN0aW9uICYmXG4gICAgICAhdGhpcy5pc1R3b1ZhbHVlRXF1YWxzKGNoYW5naW5nVmFsdWUsIGNoYW5nZWRWYWx1ZSlcbiAgICApIHtcbiAgICAgIGlmIChpc0NvbW1lbnQpIHtcbiAgICAgICAgY2hhbmdlZFF1ZXN0aW9uLmNvbW1lbnQgPSBjaGFuZ2luZ1ZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hhbmdlZFF1ZXN0aW9uLnZhbHVlID0gY2hhbmdpbmdWYWx1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmRhdGEuaXNWYWxpZGF0ZU9uVmFsdWVDaGFuZ2luZyAmJlxuICAgICAgICB0aGlzLmhhc1F1ZXN0b25FcnJvcihjaGFuZ2VkUXVlc3Rpb24pXG4gICAgICApXG4gICAgICAgIHJldHVybjtcbiAgICAgIHRoaXMuZGF0YS5vblJvd0NoYW5nZWQoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGNoYW5nZWROYW1lLFxuICAgICAgICBuZXdWYWx1ZSxcbiAgICAgICAgbmV3Q29sdW1uVmFsdWUgPT0gbnVsbCAmJiAhY2hhbmdlZFF1ZXN0aW9uXG4gICAgICApO1xuICAgICAgdGhpcy5vbkFueVZhbHVlQ2hhbmdlZChNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZS5Sb3dWYXJpYWJsZU5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUXVlc3Rpb25zVmFsdWUoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG5ld0NvbHVtblZhbHVlOiBhbnksXG4gICAgaXNDb21tZW50OiBib29sZWFuXG4gICkge1xuICAgIGlmICghdGhpcy5kZXRhaWxQYW5lbCkgcmV0dXJuO1xuICAgIHZhciBjb2xRdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25CeUNvbHVtbk5hbWUobmFtZSk7XG4gICAgdmFyIGRldGFpbFF1ZXN0aW9uID0gdGhpcy5kZXRhaWxQYW5lbC5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcbiAgICBpZiAoIWNvbFF1ZXN0aW9uIHx8ICFkZXRhaWxRdWVzdGlvbikgcmV0dXJuO1xuICAgIHZhciBpc0NvbFF1ZXN0aW9uID0gdGhpcy5pc1R3b1ZhbHVlRXF1YWxzKFxuICAgICAgbmV3Q29sdW1uVmFsdWUsXG4gICAgICBpc0NvbW1lbnQgPyBjb2xRdWVzdGlvbi5jb21tZW50IDogY29sUXVlc3Rpb24udmFsdWVcbiAgICApO1xuICAgIHZhciBxdWVzdGlvbiA9IGlzQ29sUXVlc3Rpb24gPyBkZXRhaWxRdWVzdGlvbiA6IGNvbFF1ZXN0aW9uO1xuICAgIHRoaXMuaXNTZXR0aW5nVmFsdWUgPSB0cnVlO1xuICAgIGlmICghaXNDb21tZW50KSB7XG4gICAgICBxdWVzdGlvbi52YWx1ZSA9IG5ld0NvbHVtblZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBxdWVzdGlvbi5jb21tZW50ID0gbmV3Q29sdW1uVmFsdWU7XG4gICAgfVxuICAgIHRoaXMuaXNTZXR0aW5nVmFsdWUgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgaGFzUXVlc3RvbkVycm9yKHF1ZXN0aW9uOiBRdWVzdGlvbik6IGJvb2xlYW4ge1xuICAgIGlmICghcXVlc3Rpb24pIHJldHVybiBmYWxzZTtcbiAgICBpZiAoXG4gICAgICBxdWVzdGlvbi5oYXNFcnJvcnModHJ1ZSwge1xuICAgICAgICBpc09uVmFsdWVDaGFuZ2VkOiAhdGhpcy5kYXRhLmlzVmFsaWRhdGVPblZhbHVlQ2hhbmdpbmcsXG4gICAgICB9KVxuICAgIClcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmIChxdWVzdGlvbi5pc0VtcHR5KCkpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgY2VsbCA9IHRoaXMuZ2V0Q2VsbEJ5Q29sdW1uTmFtZShxdWVzdGlvbi5uYW1lKTtcbiAgICBpZiAoIWNlbGwgfHwgIWNlbGwuY29sdW1uIHx8ICFjZWxsLmNvbHVtbi5pc1VuaXF1ZSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmRhdGEuY2hlY2tJZlZhbHVlSW5Sb3dEdXBsaWNhdGVkKHRoaXMsIHF1ZXN0aW9uKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzRW1wdHkoKSB7XG4gICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgaWYgKEhlbHBlcnMuaXNWYWx1ZUVtcHR5KHZhbCkpIHJldHVybiB0cnVlO1xuICAgIGZvciAodmFyIGtleSBpbiB2YWwpIHtcbiAgICAgIGlmICh2YWxba2V5XSAhPT0gdW5kZWZpbmVkICYmIHZhbFtrZXldICE9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBnZXRRdWVzdGlvbkJ5Q29sdW1uKGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBRdWVzdGlvbiB7XG4gICAgdmFyIGNlbGwgPSB0aGlzLmdldENlbGxCeUNvbHVtbihjb2x1bW4pO1xuICAgIHJldHVybiAhIWNlbGwgPyBjZWxsLnF1ZXN0aW9uIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0Q2VsbEJ5Q29sdW1uKGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pOiBNYXRyaXhEcm9wZG93bkNlbGwge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuY2VsbHNbaV0uY29sdW1uID09IGNvbHVtbikgcmV0dXJuIHRoaXMuY2VsbHNbaV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByaXZhdGUgZ2V0Q2VsbEJ5Q29sdW1uTmFtZShjb2x1bW5OYW1lOiBzdHJpbmcpOiBNYXRyaXhEcm9wZG93bkNlbGwge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuY2VsbHNbaV0uY29sdW1uLm5hbWUgPT0gY29sdW1uTmFtZSkgcmV0dXJuIHRoaXMuY2VsbHNbaV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXRRdWVzdGlvbkJ5Q29sdW1uTmFtZShjb2x1bW5OYW1lOiBzdHJpbmcpOiBRdWVzdGlvbiB7XG4gICAgdmFyIGNlbGwgPSB0aGlzLmdldENlbGxCeUNvbHVtbk5hbWUoY29sdW1uTmFtZSk7XG4gICAgcmV0dXJuICEhY2VsbCA/IGNlbGwucXVlc3Rpb24gOiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXQgcXVlc3Rpb25zKCk6IEFycmF5PFF1ZXN0aW9uPiB7XG4gICAgdmFyIHJlczogQXJyYXk8UXVlc3Rpb24+ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXMucHVzaCh0aGlzLmNlbGxzW2ldLnF1ZXN0aW9uKTtcbiAgICB9XG4gICAgdmFyIGRldGFpbFF1ZXN0aW9ucyA9ICEhdGhpcy5kZXRhaWxQYW5lbCA/IHRoaXMuZGV0YWlsUGFuZWwucXVlc3Rpb25zIDogW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZXRhaWxRdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlcy5wdXNoKGRldGFpbFF1ZXN0aW9uc1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGdldFF1ZXN0aW9uQnlOYW1lKG5hbWU6IHN0cmluZyk6IFF1ZXN0aW9uIHtcbiAgICB2YXIgcmVzID0gdGhpcy5nZXRRdWVzdGlvbkJ5Q29sdW1uTmFtZShuYW1lKTtcbiAgICBpZiAoISFyZXMpIHJldHVybiByZXM7XG4gICAgcmV0dXJuICEhdGhpcy5kZXRhaWxQYW5lbCA/IHRoaXMuZGV0YWlsUGFuZWwuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSkgOiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXRRdWVzdGlvbnNCeU5hbWUobmFtZTogc3RyaW5nKTogQXJyYXk8UXVlc3Rpb24+IHtcbiAgICBsZXQgcmVzID0gW107XG4gICAgbGV0IHEgPSB0aGlzLmdldFF1ZXN0aW9uQnlDb2x1bW5OYW1lKG5hbWUpO1xuICAgIGlmICghIXEpIHJlcy5wdXNoKHEpO1xuICAgIGlmICghIXRoaXMuZGV0YWlsUGFuZWwpIHtcbiAgICAgIHEgPSB0aGlzLmRldGFpbFBhbmVsLmdldFF1ZXN0aW9uQnlOYW1lKG5hbWUpO1xuICAgICAgaWYgKCEhcSkgcmVzLnB1c2gocSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFNoYXJlZFF1ZXN0aW9uQnlOYW1lKGNvbHVtbk5hbWU6IHN0cmluZyk6IFF1ZXN0aW9uIHtcbiAgICByZXR1cm4gISF0aGlzLmRhdGFcbiAgICAgID8gdGhpcy5kYXRhLmdldFNoYXJlZFF1ZXN0aW9uQnlOYW1lKGNvbHVtbk5hbWUsIHRoaXMpXG4gICAgICA6IG51bGw7XG4gIH1cbiAgcHVibGljIGNsZWFySW5jb3JyZWN0VmFsdWVzKHZhbDogYW55KSB7XG4gICAgZm9yICh2YXIga2V5IGluIHZhbCkge1xuICAgICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRRdWVzdGlvbkJ5TmFtZShrZXkpO1xuICAgICAgaWYgKHF1ZXN0aW9uKSB7XG4gICAgICAgIHZhciBxVmFsID0gcXVlc3Rpb24udmFsdWU7XG4gICAgICAgIHF1ZXN0aW9uLmNsZWFySW5jb3JyZWN0VmFsdWVzKCk7XG4gICAgICAgIGlmICghdGhpcy5pc1R3b1ZhbHVlRXF1YWxzKHFWYWwsIHF1ZXN0aW9uLnZhbHVlKSkge1xuICAgICAgICAgIHRoaXMuc2V0VmFsdWUoa2V5LCBxdWVzdGlvbi52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhdGhpcy5nZXRTaGFyZWRRdWVzdGlvbkJ5TmFtZShrZXkpICYmXG4gICAgICAgICAga2V5LmluZGV4T2Yoc2V0dGluZ3MubWF0cml4VG90YWxWYWx1ZVBvc3RGaXgpIDwgMFxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnNldFZhbHVlKGtleSwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIGdldExvY2FsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0TG9jYWxlKCkgOiBcIlwiO1xuICB9XG4gIHB1YmxpYyBnZXRNYXJrZG93bkh0bWwodGV4dDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0TWFya2Rvd25IdG1sKHRleHQsIG5hbWUpIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0UmVuZGVyZXIobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldFJlbmRlcmVyKG5hbWUpIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0UmVuZGVyZXJDb250ZXh0KGxvY1N0cjogTG9jYWxpemFibGVTdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0UmVuZGVyZXJDb250ZXh0KGxvY1N0cikgOiBsb2NTdHI7XG4gIH1cbiAgcHVibGljIGdldFByb2Nlc3NlZFRleHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldFByb2Nlc3NlZFRleHQodGV4dCkgOiB0ZXh0O1xuICB9XG4gIHB1YmxpYyBsb2NTdHJzQ2hhbmdlZCgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuY2VsbHNbaV0ubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICB9XG4gICAgaWYgKCEhdGhpcy5kZXRhaWxQYW5lbCkge1xuICAgICAgdGhpcy5kZXRhaWxQYW5lbC5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgdXBkYXRlQ2VsbFF1ZXN0aW9uT25Db2x1bW5DaGFuZ2VkKFxuICAgIGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4sXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG5ld1ZhbHVlOiBhbnlcbiAgKSB7XG4gICAgdmFyIGNlbGwgPSB0aGlzLmdldENlbGxCeUNvbHVtbihjb2x1bW4pO1xuICAgIGlmICghY2VsbCkgcmV0dXJuO1xuICAgIHRoaXMudXBkYXRlQ2VsbE9uQ29sdW1uQ2hhbmdlZChjZWxsLCBuYW1lLCBuZXdWYWx1ZSk7XG4gIH1cbiAgcHVibGljIHVwZGF0ZUNlbGxRdWVzdGlvbk9uQ29sdW1uSXRlbVZhbHVlQ2hhbmdlZChcbiAgICBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uLFxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nLFxuICAgIG9iajogSXRlbVZhbHVlLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBuZXdWYWx1ZTogYW55LFxuICAgIG9sZFZhbHVlOiBhbnlcbiAgKSB7XG4gICAgdmFyIGNlbGwgPSB0aGlzLmdldENlbGxCeUNvbHVtbihjb2x1bW4pO1xuICAgIGlmICghY2VsbCkgcmV0dXJuO1xuICAgIHRoaXMudXBkYXRlQ2VsbE9uQ29sdW1uSXRlbVZhbHVlQ2hhbmdlZChcbiAgICAgIGNlbGwsXG4gICAgICBwcm9wZXJ0eU5hbWUsXG4gICAgICBvYmosXG4gICAgICBuYW1lLFxuICAgICAgbmV3VmFsdWUsXG4gICAgICBvbGRWYWx1ZVxuICAgICk7XG4gIH1cbiAgcHVibGljIG9uUXVlc3Rpb25SZWFkT25seUNoYW5nZWQocGFyZW50SXNSZWFkT25seTogYm9vbGVhbikge1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ucztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgcXVlc3Rpb25zW2ldLnJlYWRPbmx5ID0gcGFyZW50SXNSZWFkT25seTtcbiAgICB9XG4gICAgaWYgKCEhdGhpcy5kZXRhaWxQYW5lbCkge1xuICAgICAgdGhpcy5kZXRhaWxQYW5lbC5yZWFkT25seSA9IHBhcmVudElzUmVhZE9ubHk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBoYXNFcnJvcnMoXG4gICAgZmlyZUNhbGxiYWNrOiBib29sZWFuLFxuICAgIHJlYzogYW55LFxuICAgIHJhaXNlT25Db21wbGV0ZWRBc3luY1ZhbGlkYXRvcnM6ICgpID0+IHZvaWRcbiAgKTogYm9vbGVhbiB7XG4gICAgdmFyIHJlcyA9IGZhbHNlO1xuICAgIHZhciBjZWxscyA9IHRoaXMuY2VsbHM7XG4gICAgaWYgKCFjZWxscykgcmV0dXJuIHJlcztcbiAgICBmb3IgKHZhciBjb2xJbmRleCA9IDA7IGNvbEluZGV4IDwgY2VsbHMubGVuZ3RoOyBjb2xJbmRleCsrKSB7XG4gICAgICBpZiAoIWNlbGxzW2NvbEluZGV4XSkgY29udGludWU7XG4gICAgICB2YXIgcXVlc3Rpb24gPSBjZWxsc1tjb2xJbmRleF0ucXVlc3Rpb247XG4gICAgICBpZiAoIXF1ZXN0aW9uIHx8ICFxdWVzdGlvbi52aXNpYmxlKSBjb250aW51ZTtcbiAgICAgIHF1ZXN0aW9uLm9uQ29tcGxldGVkQXN5bmNWYWxpZGF0b3JzID0gKGhhc0Vycm9yczogYm9vbGVhbikgPT4ge1xuICAgICAgICByYWlzZU9uQ29tcGxldGVkQXN5bmNWYWxpZGF0b3JzKCk7XG4gICAgICB9O1xuICAgICAgaWYgKCEhcmVjICYmIHJlYy5pc09uVmFsdWVDaGFuZ2VkID09PSB0cnVlICYmIHF1ZXN0aW9uLmlzRW1wdHkoKSlcbiAgICAgICAgY29udGludWU7XG4gICAgICByZXMgPSBxdWVzdGlvbi5oYXNFcnJvcnMoZmlyZUNhbGxiYWNrLCByZWMpIHx8IHJlcztcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzUGFuZWwpIHtcbiAgICAgIHRoaXMuZW5zdXJlRGV0YWlsUGFuZWwoKTtcbiAgICAgIHZhciBwYW5lbEhhc0Vycm9yID0gdGhpcy5kZXRhaWxQYW5lbC5oYXNFcnJvcnMoZmlyZUNhbGxiYWNrLCBmYWxzZSwgcmVjKTtcbiAgICAgIGlmICghcmVjLmhpZGVFcnJvcmVkUGFuZWwgJiYgcGFuZWxIYXNFcnJvciAmJiBmaXJlQ2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHJlYy5pc1NpbmdsZURldGFpbFBhbmVsKSB7XG4gICAgICAgICAgcmVjLmhpZGVFcnJvcmVkUGFuZWwgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2hvd0RldGFpbFBhbmVsKCk7XG4gICAgICB9XG4gICAgICByZXMgPSBwYW5lbEhhc0Vycm9yIHx8IHJlcztcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVDZWxsT25Db2x1bW5DaGFuZ2VkKFxuICAgIGNlbGw6IE1hdHJpeERyb3Bkb3duQ2VsbCxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgbmV3VmFsdWU6IGFueVxuICApIHtcbiAgICBjZWxsLnF1ZXN0aW9uW25hbWVdID0gbmV3VmFsdWU7XG4gIH1cbiAgcHVibGljIHVwZGF0ZUNlbGxPbkNvbHVtbkl0ZW1WYWx1ZUNoYW5nZWQoXG4gICAgY2VsbDogTWF0cml4RHJvcGRvd25DZWxsLFxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nLFxuICAgIG9iajogSXRlbVZhbHVlLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBuZXdWYWx1ZTogYW55LFxuICAgIG9sZFZhbHVlOiBhbnlcbiAgKSB7XG4gICAgdmFyIGl0ZW1zID0gY2VsbC5xdWVzdGlvbltwcm9wZXJ0eU5hbWVdO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShpdGVtcykpIHJldHVybjtcbiAgICB2YXIgdmFsID0gbmFtZSA9PT0gXCJ2YWx1ZVwiID8gb2xkVmFsdWUgOiBvYmpbXCJ2YWx1ZVwiXTtcbiAgICB2YXIgaXRlbSA9IEl0ZW1WYWx1ZS5nZXRJdGVtQnlWYWx1ZShpdGVtcywgdmFsKTtcbiAgICBpZiAoIWl0ZW0pIHJldHVybjtcbiAgICBpdGVtW25hbWVdID0gbmV3VmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGJ1aWxkQ2VsbHModmFsdWU6IGFueSkge1xuICAgIHRoaXMuaXNTZXR0aW5nVmFsdWUgPSB0cnVlO1xuICAgIHZhciBjb2x1bW5zID0gdGhpcy5kYXRhLmNvbHVtbnM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY29sdW1uID0gY29sdW1uc1tpXTtcbiAgICAgIGlmICghY29sdW1uLmlzVmlzaWJsZSkgY29udGludWU7XG4gICAgICB2YXIgY2VsbCA9IHRoaXMuY3JlYXRlQ2VsbChjb2x1bW4pO1xuICAgICAgdGhpcy5jZWxscy5wdXNoKGNlbGwpO1xuICAgICAgdmFyIGNlbGxWYWx1ZSA9IHRoaXMuZ2V0Q2VsbFZhbHVlKHZhbHVlLCBjb2x1bW4ubmFtZSk7XG4gICAgICBpZiAoIUhlbHBlcnMuaXNWYWx1ZUVtcHR5KGNlbGxWYWx1ZSkpIHtcbiAgICAgICAgY2VsbC5xdWVzdGlvbi52YWx1ZSA9IGNlbGxWYWx1ZTtcbiAgICAgICAgdmFyIGNvbW1lbnRLZXkgPSBjb2x1bW4ubmFtZSArIHNldHRpbmdzLmNvbW1lbnRQcmVmaXg7XG4gICAgICAgIGlmICghIXZhbHVlICYmICFIZWxwZXJzLmlzVmFsdWVFbXB0eSh2YWx1ZVtjb21tZW50S2V5XSkpIHtcbiAgICAgICAgICBjZWxsLnF1ZXN0aW9uLmNvbW1lbnQgPSB2YWx1ZVtjb21tZW50S2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmlzU2V0dGluZ1ZhbHVlID0gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGlzVHdvVmFsdWVFcXVhbHModmFsMTogYW55LCB2YWwyOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKHZhbDEsIHZhbDIsIGZhbHNlLCB0cnVlLCBmYWxzZSk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRDZWxsVmFsdWUodmFsdWU6IGFueSwgbmFtZTogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoISF0aGlzLmVkaXRpbmdPYmopXG4gICAgICByZXR1cm4gU2VyaWFsaXplci5nZXRPYmpQcm9wZXJ0eVZhbHVlKHRoaXMuZWRpdGluZ09iaiwgbmFtZSk7XG4gICAgcmV0dXJuICEhdmFsdWUgPyB2YWx1ZVtuYW1lXSA6IHVuZGVmaW5lZDtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlQ2VsbChjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogTWF0cml4RHJvcGRvd25DZWxsIHtcbiAgICByZXR1cm4gbmV3IE1hdHJpeERyb3Bkb3duQ2VsbChjb2x1bW4sIHRoaXMsIHRoaXMuZGF0YSk7XG4gIH1cbiAgZ2V0U3VydmV5RGF0YSgpOiBJU3VydmV5RGF0YSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZ2V0U3VydmV5KCk6IElTdXJ2ZXkge1xuICAgIHJldHVybiB0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0U3VydmV5KCkgOiBudWxsO1xuICB9XG4gIGdldFRleHRQcm9jZXNzb3IoKTogSVRleHRQcm9jZXNzb3Ige1xuICAgIHJldHVybiB0aGlzLnRleHRQcmVQcm9jZXNzb3I7XG4gIH1cbiAgcHVibGljIGdldCByb3dJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiAhIXRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRSb3dJbmRleCh0aGlzKSArIDEgOiAtMTtcbiAgfVxuICBwdWJsaWMgZ2V0IGVkaXRpbmdPYmooKTogQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdGluZ09ialZhbHVlO1xuICB9XG4gIHByaXZhdGUgb25FZGl0aW5nT2JqUHJvcGVydHlDaGFuZ2VkOiAoc2VuZGVyOiBCYXNlLCBvcHRpb25zOiBhbnkpID0+IHZvaWQ7XG4gIHByaXZhdGUgZWRpdGluZ09ialZhbHVlOiBCYXNlO1xuICBwdWJsaWMgZGlzcG9zZSgpIHtcbiAgICBpZiAoISF0aGlzLmVkaXRpbmdPYmopIHtcbiAgICAgIHRoaXMuZWRpdGluZ09iai5vblByb3BlcnR5Q2hhbmdlZC5yZW1vdmUoXG4gICAgICAgIHRoaXMub25FZGl0aW5nT2JqUHJvcGVydHlDaGFuZ2VkXG4gICAgICApO1xuICAgICAgdGhpcy5lZGl0aW5nT2JqVmFsdWUgPSBudWxsO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHN1YnNjcmliZVRvQ2hhbmdlcyh2YWx1ZTogYW55KSB7XG4gICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUuZ2V0VHlwZSB8fCAhdmFsdWUub25Qcm9wZXJ0eUNoYW5nZWQpIHJldHVybjtcbiAgICBpZiAodmFsdWUgPT09IHRoaXMuZWRpdGluZ09iaikgcmV0dXJuO1xuICAgIHRoaXMuZWRpdGluZ09ialZhbHVlID0gPEJhc2U+dmFsdWU7XG4gICAgdGhpcy5vbkVkaXRpbmdPYmpQcm9wZXJ0eUNoYW5nZWQgPSAoc2VuZGVyOiBCYXNlLCBvcHRpb25zOiBhbnkpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlT25TZXRWYWx1ZShvcHRpb25zLm5hbWUsIG9wdGlvbnMubmV3VmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5lZGl0aW5nT2JqLm9uUHJvcGVydHlDaGFuZ2VkLmFkZCh0aGlzLm9uRWRpdGluZ09ialByb3BlcnR5Q2hhbmdlZCk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVPblNldFZhbHVlKG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSkge1xuICAgIHRoaXMuaXNTZXR0aW5nVmFsdWUgPSB0cnVlO1xuICAgIGxldCBxdWVzdGlvbnMgPSB0aGlzLmdldFF1ZXN0aW9uc0J5TmFtZShuYW1lKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgcXVlc3Rpb25zW2ldLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgfVxuICAgIHRoaXMuaXNTZXR0aW5nVmFsdWUgPSBmYWxzZTtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIE1hdHJpeERyb3Bkb3duVG90YWxSb3dNb2RlbCBleHRlbmRzIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlIHtcbiAgY29uc3RydWN0b3IoZGF0YTogSU1hdHJpeERyb3Bkb3duRGF0YSkge1xuICAgIHN1cGVyKGRhdGEsIG51bGwpO1xuICAgIHRoaXMuYnVpbGRDZWxscyhudWxsKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlQ2VsbChjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogTWF0cml4RHJvcGRvd25DZWxsIHtcbiAgICByZXR1cm4gbmV3IE1hdHJpeERyb3Bkb3duVG90YWxDZWxsKGNvbHVtbiwgdGhpcywgdGhpcy5kYXRhKTtcbiAgfVxuICBwdWJsaWMgc2V0VmFsdWUobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KSB7XG4gICAgaWYgKCEhdGhpcy5kYXRhICYmICF0aGlzLmlzU2V0dGluZ1ZhbHVlKSB7XG4gICAgICB0aGlzLmRhdGEub25Ub3RhbFZhbHVlQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgcnVuQ29uZGl0aW9uKHZhbHVlczogSGFzaFRhYmxlPGFueT4sIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+KSB7XG4gICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgIHZhciBwcmV2VmFsdWU7XG4gICAgZG8ge1xuICAgICAgcHJldlZhbHVlID0gSGVscGVycy5nZXRVbmJpbmRWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICAgIHN1cGVyLnJ1bkNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgICAgY291bnRlcisrO1xuICAgIH0gd2hpbGUgKCFIZWxwZXJzLmlzVHdvVmFsdWVFcXVhbHMocHJldlZhbHVlLCB0aGlzLnZhbHVlKSAmJiBjb3VudGVyIDwgMyk7XG4gIH1cbiAgcHJvdGVjdGVkIHVwZGF0ZUNlbGxPbkNvbHVtbkNoYW5nZWQoXG4gICAgY2VsbDogTWF0cml4RHJvcGRvd25DZWxsLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBuZXdWYWx1ZTogYW55XG4gICkge1xuICAgICg8TWF0cml4RHJvcGRvd25Ub3RhbENlbGw+Y2VsbCkudXBkYXRlQ2VsbFF1ZXN0aW9uKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGJhc2UgY2xhc3MgZm9yIG1hdHJpeCBkcm9wZG93biBhbmQgbWF0cml4IGR5bmFtaWMgcXVlc3Rpb25zLlxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZSBleHRlbmRzIFF1ZXN0aW9uTWF0cml4QmFzZU1vZGVsPE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLCBNYXRyaXhEcm9wZG93bkNvbHVtbj4gaW1wbGVtZW50cyBJTWF0cml4RHJvcGRvd25EYXRhIHtcbiAgcHVibGljIHN0YXRpYyBnZXQgZGVmYXVsdENlbGxUeXBlKCkge1xuICAgIHJldHVybiBzZXR0aW5ncy5tYXRyaXhEZWZhdWx0Q2VsbFR5cGU7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBzZXQgZGVmYXVsdENlbGxUeXBlKHZhbDogc3RyaW5nKSB7XG4gICAgc2V0dGluZ3MubWF0cml4RGVmYXVsdENlbGxUeXBlID0gdmFsO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgYWRkRGVmYXVsdENvbHVtbnMobWF0cml4OiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlKSB7XG4gICAgdmFyIGNvbE5hbWVzID0gUXVlc3Rpb25GYWN0b3J5LkRlZmF1bHRDb2x1bXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2xOYW1lcy5sZW5ndGg7IGkrKykgbWF0cml4LmFkZENvbHVtbihjb2xOYW1lc1tpXSk7XG4gIH1cbiAgcHJpdmF0ZSBkZXRhaWxQYW5lbFZhbHVlOiBQYW5lbE1vZGVsO1xuICBwcm90ZWN0ZWQgaXNSb3dDaGFuZ2luZyA9IGZhbHNlO1xuICBjb2x1bW5zQ2hhbmdlZENhbGxiYWNrOiAoKSA9PiB2b2lkO1xuICBvblJlbmRlcmVkVGFibGVSZXNldENhbGxiYWNrOiAoKSA9PiB2b2lkO1xuICBvblJlbmRlcmVkVGFibGVDcmVhdGVkQ2FsbGJhY2s6IChcbiAgICB0YWJsZTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGVcbiAgKSA9PiB2b2lkO1xuICBvbkNlbGxDcmVhdGVkQ2FsbGJhY2s6IChvcHRpb25zOiBhbnkpID0+IHZvaWQ7XG4gIG9uQ2VsbFZhbHVlQ2hhbmdlZENhbGxiYWNrOiAob3B0aW9uczogYW55KSA9PiB2b2lkO1xuICBvbkhhc0RldGFpbFBhbmVsQ2FsbGJhY2s6IChyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKSA9PiBib29sZWFuO1xuICBvbkNyZWF0ZURldGFpbFBhbmVsQ2FsbGJhY2s6IChcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIHBhbmVsOiBQYW5lbE1vZGVsXG4gICkgPT4gdm9pZDtcbiAgb25DcmVhdGVEZXRhaWxQYW5lbFJlbmRlcmVkUm93Q2FsbGJhY2s6IChcbiAgICByZW5kZXJlZFJvdzogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93XG4gICkgPT4gdm9pZDtcblxuICBwcm90ZWN0ZWQgY3JlYXRlQ29sdW1uVmFsdWVzKCkge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZU5ld0FycmF5KFxuICAgICAgXCJjb2x1bW5zXCIsXG4gICAgICAoaXRlbTogYW55KSA9PiB7XG4gICAgICAgIGl0ZW0uY29sT3duZXIgPSB0aGlzO1xuICAgICAgfSxcbiAgICAgIChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgaXRlbS5jb2xPd25lciA9IG51bGw7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICAgIHRoaXMuY3JlYXRlSXRlbVZhbHVlcyhcImNob2ljZXNcIik7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcIm9wdGlvbnNDYXB0aW9uXCIsIHRoaXMpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIsIHRoaXMpO1xuICAgIHRoaXMuZGV0YWlsUGFuZWxWYWx1ZSA9IHRoaXMuY3JlYXRlTmV3RGV0YWlsUGFuZWwoKTtcbiAgICB0aGlzLmRldGFpbFBhbmVsLnNlbGVjdGVkRWxlbWVudEluRGVzaWduID0gdGhpcztcbiAgICB0aGlzLmRldGFpbFBhbmVsLnJlbmRlcldpZHRoID0gXCIxMDAlXCI7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcbiAgICAgIFwiY29sdW1uc1wiLFxuICAgICAgKG5ld0NvbHVtbnM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbnNBbmRSb3dzKCk7XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwiY2VsbFR5cGVcIiwgKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVDb2x1bW5zQW5kUm93cygpO1xuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydGllc1ZhbHVlQ2hhbmdlZChcbiAgICAgIFtcIm9wdGlvbnNDYXB0aW9uXCIsIFwiY29sdW1uQ29sQ291bnRcIiwgXCJyb3dUaXRsZVdpZHRoXCIsIFwiY2hvaWNlc1wiXSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5jbGVhclJvd3NBbmRSZXNldFJlbmRlcmVkVGFibGUoKTtcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydGllc1ZhbHVlQ2hhbmdlZChcbiAgICAgIFtcbiAgICAgICAgXCJjb2x1bW5MYXlvdXRcIixcbiAgICAgICAgXCJhZGRSb3dMb2NhdGlvblwiLFxuICAgICAgICBcImhpZGVDb2x1bW5zSWZFbXB0eVwiLFxuICAgICAgICBcInNob3dIZWFkZXJcIixcbiAgICAgICAgXCJtaW5Sb3dDb3VudFwiLFxuICAgICAgICBcImlzUmVhZE9ubHlcIixcbiAgICAgICAgXCJyb3dDb3VudFwiLFxuICAgICAgICBcImhhc0Zvb3RlclwiLFxuICAgICAgICBcImRldGFpbFBhbmVsTW9kZVwiLFxuICAgICAgXSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5yZXNldFJlbmRlcmVkVGFibGUoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwibWF0cml4ZHJvcGRvd25iYXNlXCI7XG4gIH1cbiAgcHVibGljIGRpc3Bvc2UoKSB7XG4gICAgc3VwZXIuZGlzcG9zZSgpO1xuICAgIHRoaXMuY2xlYXJHZW5lcmF0ZWRSb3dzKCk7XG4gIH1cbiAgcHVibGljIGdldCBoYXNTaW5nbGVJbnB1dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldCBpc1Jvd3NEeW5hbWljKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwcml2YXRlIGlzVXBkYXRpbmc6IGJvb2xlYW47XG4gIHByb3RlY3RlZCBnZXQgaXNVcGRhdGVMb2NrZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNMb2FkaW5nRnJvbUpzb24gfHwgdGhpcy5pc1VwZGF0aW5nO1xuICB9XG4gIHB1YmxpYyBiZWdpblVwZGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmlzVXBkYXRpbmcgPSB0cnVlO1xuICB9XG4gIHB1YmxpYyBlbmRVcGRhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5pc1VwZGF0aW5nID0gZmFsc2U7XG4gICAgdGhpcy51cGRhdGVDb2x1bW5zQW5kUm93cygpO1xuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVDb2x1bW5zQW5kUm93cygpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUNvbHVtbnNJbmRleGVzKHRoaXMuY29sdW1ucyk7XG4gICAgdGhpcy51cGRhdGVDb2x1bW5zQ2VsbFR5cGUoKTtcbiAgICB0aGlzLmdlbmVyYXRlZFRvdGFsUm93ID0gbnVsbDtcbiAgICB0aGlzLmNsZWFyUm93c0FuZFJlc2V0UmVuZGVyZWRUYWJsZSgpO1xuICB9XG4gIHB1YmxpYyBpdGVtVmFsdWVQcm9wZXJ0eUNoYW5nZWQoXG4gICAgaXRlbTogSXRlbVZhbHVlLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBvbGRWYWx1ZTogYW55LFxuICAgIG5ld1ZhbHVlOiBhbnlcbiAgKSB7XG4gICAgc3VwZXIuaXRlbVZhbHVlUHJvcGVydHlDaGFuZ2VkKGl0ZW0sIG5hbWUsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgaWYgKGl0ZW0ub3duZXJQcm9wZXJ0eU5hbWUgPT09IFwiY2hvaWNlc1wiKSB7XG4gICAgICB0aGlzLmNsZWFyUm93c0FuZFJlc2V0UmVuZGVyZWRUYWJsZSgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogU2V0IGNvbHVtbkxheW91dCB0byAndmVydGljYWwnIHRvIHBsYWNlIGNvbHVtbnMgdmVydGljYWxseSBhbmQgcm93cyBob3Jpem9udGFsbHkuIEl0IG1ha2VzIHNlbnNlIHdoZW4gd2UgaGF2ZSBtYW55IGNvbHVtbnMgYW5kIGZldyByb3dzLlxuICAgKiBAc2VlIGNvbHVtbnNcbiAgICogQHNlZSByb3dDb3VudFxuICAgKi9cbiAgcHVibGljIGdldCBjb2x1bW5MYXlvdXQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29sdW1uTGF5b3V0XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY29sdW1uTGF5b3V0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29sdW1uTGF5b3V0XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGNvbHVtbnNMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbkxheW91dDtcbiAgfVxuICBzZXQgY29sdW1uc0xvY2F0aW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5jb2x1bW5MYXlvdXQgPSB2YWw7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBjb2x1bW5zIGFyZSBsb2NhdGVkIGhvcml6b250YWxseVxuICAgKiBAc2VlIGNvbHVtbkxheW91dFxuICAgKi9cbiAgcHVibGljIGdldCBpc0NvbHVtbkxheW91dEhvcml6b250YWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uTGF5b3V0ICE9IFwidmVydGljYWxcIjtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoZSB2YWx1ZSB0byBcInVuZGVyUm93XCIgdG8gc2hvdyB0aGUgZGV0YWlsUGFuZWwgdW5kZXIgdGhlIHJvdy5cbiAgICovXG4gIHB1YmxpYyBnZXQgZGV0YWlsUGFuZWxNb2RlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImRldGFpbFBhbmVsTW9kZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRldGFpbFBhbmVsTW9kZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImRldGFpbFBhbmVsTW9kZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgZGV0YWlsIHRlbXBsYXRlIFBhbmVsLiBUaGlzIHBhbmVsIGlzIHVzZWQgYXMgYSB0ZW1wbGF0ZSBvbiBjcmVhdGluZyBkZXRhaWwgcGFuZWwgZm9yIGEgcm93LlxuICAgKiBAc2VlICBkZXRhaWxFbGVtZW50c1xuICAgKiBAc2VlIGRldGFpbFBhbmVsTW9kZVxuICAgKi9cbiAgcHVibGljIGdldCBkZXRhaWxQYW5lbCgpOiBQYW5lbE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5kZXRhaWxQYW5lbFZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXRQYW5lbCgpOiBJUGFuZWwge1xuICAgIHJldHVybiB0aGlzLmRldGFpbFBhbmVsO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgUGFuZWwgZWxlbWVudHMsIHF1ZXN0aW9ucyBhbmQgcGFuZWxzLlxuICAgKiBAc2VlICBkZXRhaWxQYW5lbFxuICAgKiBAc2VlIGRldGFpbFBhbmVsTW9kZVxuICAgKi9cbiAgcHVibGljIGdldCBkZXRhaWxFbGVtZW50cygpOiBBcnJheTxJRWxlbWVudD4ge1xuICAgIHJldHVybiB0aGlzLmRldGFpbFBhbmVsLmVsZW1lbnRzO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVOZXdEZXRhaWxQYW5lbCgpOiBQYW5lbE1vZGVsIHtcbiAgICByZXR1cm4gU2VyaWFsaXplci5jcmVhdGVDbGFzcyhcInBhbmVsXCIpO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzUm93VGV4dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0Rm9vdGVyVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIGdldCBjYW5BZGRSb3coKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXQgY2FuUmVtb3ZlUm93cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGNhblJlbW92ZVJvdyhyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJvdGVjdGVkIG9uUm93c0NoYW5nZWQoKSB7XG4gICAgdGhpcy5yZXNldFJlbmRlcmVkVGFibGUoKTtcbiAgICBzdXBlci5vblJvd3NDaGFuZ2VkKCk7XG4gIH1cbiAgcHJpdmF0ZSBsb2NrUmVzZXRSZW5kZXJlZFRhYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIHByb3RlY3RlZCBvblN0YXJ0Um93QWRkaW5nUmVtb3ZpbmcoKSB7XG4gICAgdGhpcy5sb2NrUmVzZXRSZW5kZXJlZFRhYmxlID0gdHJ1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgb25FbmRSb3dBZGRpbmcoKSB7XG4gICAgdGhpcy5sb2NrUmVzZXRSZW5kZXJlZFRhYmxlID0gZmFsc2U7XG4gICAgaWYgKCF0aGlzLnJlbmRlcmVkVGFibGUpIHJldHVybjtcbiAgICBpZiAodGhpcy5yZW5kZXJlZFRhYmxlLmlzUmVxdWlyZVJlc2V0KCkpIHtcbiAgICAgIHRoaXMucmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVuZGVyZWRUYWJsZS5vbkFkZGVkUm93KCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBvbkVuZFJvd1JlbW92aW5nKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UpIHtcbiAgICB0aGlzLmxvY2tSZXNldFJlbmRlcmVkVGFibGUgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5yZW5kZXJlZFRhYmxlLmlzUmVxdWlyZVJlc2V0KCkpIHtcbiAgICAgIHRoaXMucmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghIXJvdykge1xuICAgICAgICB0aGlzLnJlbmRlcmVkVGFibGUub25SZW1vdmVkUm93KHJvdyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0IHJlbmRlcmVkVGFibGVWYWx1ZSgpOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJlbmRlcmVkVGFibGVcIiwgbnVsbCk7XG4gIH1cbiAgcHJpdmF0ZSBzZXQgcmVuZGVyZWRUYWJsZVZhbHVlKHZhbDogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJlZFRhYmxlXCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGNsZWFyUm93c0FuZFJlc2V0UmVuZGVyZWRUYWJsZSgpIHtcbiAgICB0aGlzLmNsZWFyR2VuZXJhdGVkUm93cygpO1xuICAgIHRoaXMucmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5jb2x1bW5zQ2hhbmdlZENhbGxiYWNrKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVzZXRSZW5kZXJlZFRhYmxlKCkge1xuICAgIGlmICh0aGlzLmxvY2tSZXNldFJlbmRlcmVkVGFibGUgfHwgdGhpcy5pc1VwZGF0ZUxvY2tlZCkgcmV0dXJuO1xuICAgIHRoaXMucmVuZGVyZWRUYWJsZVZhbHVlID0gbnVsbDtcbiAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLm9uUmVuZGVyZWRUYWJsZVJlc2V0Q2FsbGJhY2spO1xuICB9XG4gIHByb3RlY3RlZCBjbGVhckdlbmVyYXRlZFJvd3MoKSB7XG4gICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldLmRpc3Bvc2UoKTtcbiAgICB9XG4gICAgc3VwZXIuY2xlYXJHZW5lcmF0ZWRSb3dzKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJlbmRlcmVkVGFibGUoKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkVGFibGUge1xuICAgIGlmICghdGhpcy5yZW5kZXJlZFRhYmxlVmFsdWUpIHtcbiAgICAgIHRoaXMucmVuZGVyZWRUYWJsZVZhbHVlID0gdGhpcy5jcmVhdGVSZW5kZXJlZFRhYmxlKCk7XG4gICAgICBpZiAoISF0aGlzLm9uUmVuZGVyZWRUYWJsZUNyZWF0ZWRDYWxsYmFjaykge1xuICAgICAgICB0aGlzLm9uUmVuZGVyZWRUYWJsZUNyZWF0ZWRDYWxsYmFjayh0aGlzLnJlbmRlcmVkVGFibGVWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlbmRlcmVkVGFibGVWYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlUmVuZGVyZWRUYWJsZSgpOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZSh0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25NYXRyaXhSb3dDcmVhdGVkKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UpIHtcbiAgICBpZiAoIXRoaXMuc3VydmV5KSByZXR1cm47XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICByb3dWYWx1ZTogcm93LnZhbHVlLFxuICAgICAgcm93OiByb3csXG4gICAgICBjb2x1bW46IDxhbnk+bnVsbCxcbiAgICAgIGNvbHVtbk5hbWU6IDxhbnk+bnVsbCxcbiAgICAgIGNlbGw6IDxhbnk+bnVsbCxcbiAgICAgIGNlbGxRdWVzdGlvbjogPGFueT5udWxsLFxuICAgICAgdmFsdWU6IDxhbnk+bnVsbCxcbiAgICB9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy52aXNpYmxlQ29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgb3B0aW9ucy5jb2x1bW4gPSB0aGlzLnZpc2libGVDb2x1bW5zW2ldO1xuICAgICAgb3B0aW9ucy5jb2x1bW5OYW1lID0gb3B0aW9ucy5jb2x1bW4ubmFtZTtcbiAgICAgIHZhciBjZWxsID0gcm93LmNlbGxzW2ldO1xuICAgICAgb3B0aW9ucy5jZWxsID0gY2VsbDtcbiAgICAgIG9wdGlvbnMuY2VsbFF1ZXN0aW9uID0gY2VsbC5xdWVzdGlvbjtcbiAgICAgIG9wdGlvbnMudmFsdWUgPSBjZWxsLnZhbHVlO1xuICAgICAgaWYgKCEhdGhpcy5vbkNlbGxDcmVhdGVkQ2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5vbkNlbGxDcmVhdGVkQ2FsbGJhY2sob3B0aW9ucyk7XG4gICAgICB9XG4gICAgICB0aGlzLnN1cnZleS5tYXRyaXhDZWxsQ3JlYXRlZCh0aGlzLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBjZWxsIHR5cGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNlbGxUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNlbGxUeXBlXCIsIHNldHRpbmdzLm1hdHJpeERlZmF1bHRDZWxsVHlwZSk7XG4gIH1cbiAgcHVibGljIHNldCBjZWxsVHlwZSh2YWw6IHN0cmluZykge1xuICAgIHZhbCA9IHZhbC50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNlbGxUeXBlXCIsIHZhbCk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVDb2x1bW5zQ2VsbFR5cGUoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuY29sdW1uc1tpXS5kZWZhdWx0Q2VsbFR5cGVDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgdXBkYXRlQ29sdW1uc0luZGV4ZXMoY29sczogQXJyYXk8TWF0cml4RHJvcGRvd25Db2x1bW4+KSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2xzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb2xzW2ldLnNldEluZGV4KGkpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgY29sdW1uIGNvdW50IGZvciByYWRpb2dyb3VwIGFuZCBjaGVja2JveCAgY2VsbCB0eXBlcy5cbiAgICovXG4gIHB1YmxpYyBnZXQgY29sdW1uQ29sQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29sdW1uQ29sQ291bnRcIik7XG4gIH1cbiAgcHVibGljIHNldCBjb2x1bW5Db2xDb3VudCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHZhbHVlIDwgMCB8fCB2YWx1ZSA+IDQpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjb2x1bW5Db2xDb3VudFwiLCB2YWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIHNldCB0aGUgbWluaW11bSBjb2x1bW4gd2lkdGguXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbHVtbk1pbldpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvbHVtbk1pbldpZHRoXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY29sdW1uTWluV2lkdGgodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjb2x1bW5NaW5XaWR0aFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlIHRvIHNob3cgdGhlIGhvcml6b250YWwgc2Nyb2xsLlxuICAgKi9cbiAgcHVibGljIGdldCBob3Jpem9udGFsU2Nyb2xsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJob3Jpem9udGFsU2Nyb2xsXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGhvcml6b250YWxTY3JvbGwodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaG9yaXpvbnRhbFNjcm9sbFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgTWF0cml4IHRvb2xiYXIgYW5kIGlubmVyIHBhbmVsIHRvb2xiYXJzIGdldCBhZGFwdGl2ZSBpZiB0aGUgcHJvcGVydHkgaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFsbG93QWRhcHRpdmVBY3Rpb25zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhbGxvd0FkYXB0aXZlQWN0aW9uc1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGFsbG93QWRhcHRpdmVBY3Rpb25zKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImFsbG93QWRhcHRpdmVBY3Rpb25zXCIsIHZhbCk7XG4gICAgaWYoISF0aGlzLmRldGFpbFBhbmVsKSB7XG4gICAgICB0aGlzLmRldGFpbFBhbmVsLmFsbG93QWRhcHRpdmVBY3Rpb25zID0gdmFsO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0UmVxdWlyZWRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkucmVxdWlyZWRUZXh0IDogXCJcIjtcbiAgfVxuICBvbkNvbHVtblByb3BlcnR5Q2hhbmdlZChcbiAgICBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBuZXdWYWx1ZTogYW55XG4gICkge1xuICAgIHRoaXMudXBkYXRlSGFzRm9vdGVyKCk7XG4gICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldLnVwZGF0ZUNlbGxRdWVzdGlvbk9uQ29sdW1uQ2hhbmdlZChcbiAgICAgICAgY29sdW1uLFxuICAgICAgICBuYW1lLFxuICAgICAgICBuZXdWYWx1ZVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCEhdGhpcy5nZW5lcmF0ZWRUb3RhbFJvdykge1xuICAgICAgdGhpcy5nZW5lcmF0ZWRUb3RhbFJvdy51cGRhdGVDZWxsUXVlc3Rpb25PbkNvbHVtbkNoYW5nZWQoXG4gICAgICAgIGNvbHVtbixcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbmV3VmFsdWVcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMub25Db2x1bW5zQ2hhbmdlZCgpO1xuICAgIGlmIChuYW1lID09IFwiaXNSZXF1aXJlZFwiKSB7XG4gICAgICB0aGlzLnJlc2V0UmVuZGVyZWRUYWJsZSgpO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLmlzU2hvd0luTXVsdGlwbGVDb2x1bW5zKSB7XG4gICAgICB0aGlzLm9uU2hvd0luTXVsdGlwbGVDb2x1bW5zQ2hhbmdlZChjb2x1bW4pO1xuICAgIH1cbiAgfVxuICBvbkNvbHVtbkl0ZW1WYWx1ZVByb3BlcnR5Q2hhbmdlZChcbiAgICBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uLFxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nLFxuICAgIG9iajogSXRlbVZhbHVlLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBuZXdWYWx1ZTogYW55LFxuICAgIG9sZFZhbHVlOiBhbnlcbiAgKSB7XG4gICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldLnVwZGF0ZUNlbGxRdWVzdGlvbk9uQ29sdW1uSXRlbVZhbHVlQ2hhbmdlZChcbiAgICAgICAgY29sdW1uLFxuICAgICAgICBwcm9wZXJ0eU5hbWUsXG4gICAgICAgIG9iaixcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbmV3VmFsdWUsXG4gICAgICAgIG9sZFZhbHVlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIG9uU2hvd0luTXVsdGlwbGVDb2x1bW5zQ2hhbmdlZChjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKSB7XG4gICAgdGhpcy5jbGVhckdlbmVyYXRlZFJvd3MoKTtcbiAgICB0aGlzLnJlc2V0UmVuZGVyZWRUYWJsZSgpO1xuICB9XG4gIG9uQ29sdW1uQ2VsbFR5cGVDaGFuZ2VkKGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4pIHtcbiAgICB0aGlzLmNsZWFyR2VuZXJhdGVkUm93cygpO1xuICAgIHRoaXMucmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gIH1cbiAgcHVibGljIGdldFJvd1RpdGxlV2lkdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc0Zvb3RlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaGFzRm9vdGVyXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgZ2V0QWRkUm93TG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJkZWZhdWx0XCI7XG4gIH1cbiAgcHVibGljIGdldFNob3dDb2x1bW5zSWZFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIHVwZGF0ZVNob3dUYWJsZUFuZEFkZFJvdygpIHtcbiAgICBpZiAoISF0aGlzLnJlbmRlcmVkVGFibGUpIHtcbiAgICAgIHRoaXMucmVuZGVyZWRUYWJsZS51cGRhdGVTaG93VGFibGVBbmRBZGRSb3coKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIHVwZGF0ZUhhc0Zvb3RlcigpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJoYXNGb290ZXJcIiwgdGhpcy5oYXNUb3RhbCk7XG4gIH1cbiAgcHVibGljIGdldCBoYXNUb3RhbCgpOiBib29sZWFuIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuY29sdW1uc1tpXS5oYXNUb3RhbCkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBnZXRDZWxsVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNlbGxUeXBlO1xuICB9XG4gIGdldEN1c3RvbUNlbGxUeXBlKGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4sIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsIGNlbGxUeXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5zdXJ2ZXkpIHJldHVybiBjZWxsVHlwZTtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIHJvd1ZhbHVlOiByb3cudmFsdWUsXG4gICAgICByb3c6IHJvdyxcbiAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgY29sdW1uTmFtZTogY29sdW1uLm5hbWUsXG4gICAgICBjZWxsVHlwZTogY2VsbFR5cGVcbiAgICB9O1xuICAgIHRoaXMuc3VydmV5Lm1hdHJpeENlbGxDcmVhdGluZyh0aGlzLCBvcHRpb25zKTtcbiAgICByZXR1cm4gb3B0aW9ucy5jZWxsVHlwZTtcbiAgfVxuICBwdWJsaWMgZ2V0Q29uZGl0aW9uSnNvbihvcGVyYXRvcjogc3RyaW5nID0gbnVsbCwgcGF0aDogc3RyaW5nID0gbnVsbCk6IGFueSB7XG4gICAgaWYgKCFwYXRoKSByZXR1cm4gc3VwZXIuZ2V0Q29uZGl0aW9uSnNvbigpO1xuICAgIHZhciBjb2x1bW5OYW1lID0gXCJcIjtcbiAgICBmb3IgKHZhciBpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgaWYgKHBhdGhbaV0gPT0gXCIuXCIpIGJyZWFrO1xuICAgICAgY29sdW1uTmFtZSA9IHBhdGhbaV0gKyBjb2x1bW5OYW1lO1xuICAgIH1cbiAgICB2YXIgY29sdW1uID0gdGhpcy5nZXRDb2x1bW5CeU5hbWUoY29sdW1uTmFtZSk7XG4gICAgaWYgKCFjb2x1bW4pIHJldHVybiBudWxsO1xuICAgIHZhciBxdWVzdGlvbiA9IGNvbHVtbi5jcmVhdGVDZWxsUXVlc3Rpb24obnVsbCk7XG4gICAgaWYgKCFxdWVzdGlvbikgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHF1ZXN0aW9uLmdldENvbmRpdGlvbkpzb24ob3BlcmF0b3IpO1xuICB9XG4gIHB1YmxpYyBjbGVhckluY29ycmVjdFZhbHVlcygpIHtcbiAgICB2YXIgcm93cyA9IHRoaXMudmlzaWJsZVJvd3M7XG4gICAgaWYgKCFyb3dzKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByb3dzW2ldLmNsZWFySW5jb3JyZWN0VmFsdWVzKHRoaXMuZ2V0Um93VmFsdWUoaSkpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgY2xlYXJFcnJvcnMoKSB7XG4gICAgc3VwZXIuY2xlYXJFcnJvcnMoKTtcbiAgICBpZiAoISF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHJvdyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3NbaV07XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcm93LmNlbGxzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgcm93LmNlbGxzW2pdLnF1ZXN0aW9uLmNsZWFyRXJyb3JzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcnVuQ29uZGl0aW9uKHZhbHVlczogSGFzaFRhYmxlPGFueT4sIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+KSB7XG4gICAgc3VwZXIucnVuQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgIHZhciBwcmV2VG90YWxWYWx1ZTtcbiAgICBkbyB7XG4gICAgICBwcmV2VG90YWxWYWx1ZSA9IEhlbHBlcnMuZ2V0VW5iaW5kVmFsdWUodGhpcy50b3RhbFZhbHVlKTtcbiAgICAgIHRoaXMucnVuQ2VsbHNDb25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICAgIHRoaXMucnVuVG90YWxzQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgICBjb3VudGVyKys7XG4gICAgfSB3aGlsZSAoXG4gICAgICAhSGVscGVycy5pc1R3b1ZhbHVlRXF1YWxzKHByZXZUb3RhbFZhbHVlLCB0aGlzLnRvdGFsVmFsdWUpICYmXG4gICAgICBjb3VudGVyIDwgM1xuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHNob3VsZFJ1bkNvbHVtbkV4cHJlc3Npb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCBydW5DZWxsc0NvbmRpdGlvbihcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+XG4gICkge1xuICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykgcmV0dXJuO1xuICAgIHZhciBuZXdWYWx1ZXMgPSB0aGlzLmdldFJvd0NvbmRpdGlvblZhbHVlcyh2YWx1ZXMpO1xuICAgIHZhciByb3dzID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJvd3NbaV0ucnVuQ29uZGl0aW9uKG5ld1ZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgfVxuICAgIHRoaXMuY2hlY2tDb2x1bW5zVmlzaWJpbGl0eSgpO1xuICB9XG4gIHByaXZhdGUgY2hlY2tDb2x1bW5zVmlzaWJpbGl0eSgpIHtcbiAgICB2YXIgaGFzQ2hhbmdlZCA9IGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy52aXNpYmxlQ29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCF0aGlzLnZpc2libGVDb2x1bW5zW2ldLnZpc2libGVJZikgY29udGludWU7XG4gICAgICBoYXNDaGFuZ2VkID1cbiAgICAgICAgdGhpcy5pc0NvbHVtblZpc2liaWxpdHlDaGFuZ2VkKHRoaXMudmlzaWJsZUNvbHVtbnNbaV0pIHx8IGhhc0NoYW5nZWQ7XG4gICAgfVxuICAgIGlmIChoYXNDaGFuZ2VkKSB7XG4gICAgICB0aGlzLnJlc2V0UmVuZGVyZWRUYWJsZSgpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGlzQ29sdW1uVmlzaWJpbGl0eUNoYW5nZWQoY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IGJvb2xlYW4ge1xuICAgIHZhciBjdXJWaXMgPSBjb2x1bW4uaGFzVmlzaWJsZUNlbGw7XG4gICAgdmFyIGhhc1Zpc0NlbGwgPSBmYWxzZTtcbiAgICB2YXIgcm93cyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3M7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2VsbCA9IHJvd3NbaV0uY2VsbHNbY29sdW1uLmluZGV4XTtcbiAgICAgIGlmICghIWNlbGwgJiYgISFjZWxsLnF1ZXN0aW9uICYmIGNlbGwucXVlc3Rpb24uaXNWaXNpYmxlKSB7XG4gICAgICAgIGhhc1Zpc0NlbGwgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGN1clZpcyAhPSBoYXNWaXNDZWxsKSB7XG4gICAgICBjb2x1bW4uaGFzVmlzaWJsZUNlbGwgPSBoYXNWaXNDZWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3VyVmlzICE9IGhhc1Zpc0NlbGw7XG4gIH1cbiAgcHJvdGVjdGVkIHJ1blRvdGFsc0NvbmRpdGlvbihcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+XG4gICkge1xuICAgIGlmICghdGhpcy5nZW5lcmF0ZWRUb3RhbFJvdykgcmV0dXJuO1xuICAgIHRoaXMuZ2VuZXJhdGVkVG90YWxSb3cucnVuQ29uZGl0aW9uKFxuICAgICAgdGhpcy5nZXRSb3dDb25kaXRpb25WYWx1ZXModmFsdWVzKSxcbiAgICAgIHByb3BlcnRpZXNcbiAgICApO1xuICB9XG4gIHByaXZhdGUgZ2V0Um93Q29uZGl0aW9uVmFsdWVzKHZhbHVlczogSGFzaFRhYmxlPGFueT4pOiBIYXNoVGFibGU8YW55PiB7XG4gICAgdmFyIG5ld1ZhbHVlcyA9IHZhbHVlcztcbiAgICBpZiAoIW5ld1ZhbHVlcykgbmV3VmFsdWVzID0ge307XG4gICAgLypcbiAgICB2YXIgbmV3VmFsdWVzOiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBpZiAodmFsdWVzICYmIHZhbHVlcyBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgbmV3VmFsdWVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZXMpKTtcbiAgICB9XG4gICAgKi9cbiAgICB2YXIgdG90YWxSb3cgPSB7fTtcbiAgICBpZiAoIXRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMudG90YWxWYWx1ZSkpIHtcbiAgICAgIHRvdGFsUm93ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnRvdGFsVmFsdWUpKTtcbiAgICB9XG4gICAgbmV3VmFsdWVzW1wicm93XCJdID0ge307XG4gICAgbmV3VmFsdWVzW1widG90YWxSb3dcIl0gPSB0b3RhbFJvdztcbiAgICByZXR1cm4gbmV3VmFsdWVzO1xuICB9XG4gIHB1YmxpYyBsb2NTdHJzQ2hhbmdlZCgpIHtcbiAgICBzdXBlci5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIHZhciBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgY29sdW1uc1tpXS5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIH1cbiAgICB2YXIgcm93cyA9IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3M7XG4gICAgaWYgKCFyb3dzKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByb3dzW2ldLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgfVxuICAgIGlmICghIXRoaXMuZ2VuZXJhdGVkVG90YWxSb3cpIHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVkVG90YWxSb3cubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNvbHVtbiBieSBpdCdzIG5hbWUuIFJldHVybnMgbnVsbCBpZiBhIGNvbHVtbiB3aXRoIHRoaXMgbmFtZSBkb2Vzbid0IGV4aXN0LlxuICAgKiBAcGFyYW0gY29sdW1uXG4gICAqL1xuICBwdWJsaWMgZ2V0Q29sdW1uQnlOYW1lKGNvbHVtbk5hbWU6IHN0cmluZyk6IE1hdHJpeERyb3Bkb3duQ29sdW1uIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuY29sdW1uc1tpXS5uYW1lID09IGNvbHVtbk5hbWUpIHJldHVybiB0aGlzLmNvbHVtbnNbaV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGdldENvbHVtbk5hbWUoY29sdW1uTmFtZTogc3RyaW5nKTogTWF0cml4RHJvcGRvd25Db2x1bW4ge1xuICAgIHJldHVybiB0aGlzLmdldENvbHVtbkJ5TmFtZShjb2x1bW5OYW1lKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY29sdW1uIHdpZHRoLlxuICAgKiBAcGFyYW0gY29sdW1uXG4gICAqL1xuICBwdWJsaWMgZ2V0Q29sdW1uV2lkdGgoY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNvbHVtbi5taW5XaWR0aCA/IGNvbHVtbi5taW5XaWR0aCA6IHRoaXMuY29sdW1uTWluV2lkdGg7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IGNob2ljZXMgZm9yIGRyb3Bkb3duLCBjaGVja2JveCBhbmQgcmFkaW9ncm91cCBjZWxsIHR5cGVzLlxuICAgKi9cbiAgcHVibGljIGdldCBjaG9pY2VzKCk6IEFycmF5PGFueT4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY2hvaWNlcyh2YWw6IEFycmF5PGFueT4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjaG9pY2VzXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IG9wdGlvbnMgY2FwdGlvbiBmb3IgZHJvcGRvd24gY2VsbCB0eXBlLlxuICAgKi9cbiAgcHVibGljIGdldCBvcHRpb25zQ2FwdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXG4gICAgICBcIm9wdGlvbnNDYXB0aW9uXCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwib3B0aW9uc0NhcHRpb25cIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXQgb3B0aW9uc0NhcHRpb24odmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcIm9wdGlvbnNDYXB0aW9uXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBsb2NPcHRpb25zQ2FwdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcIm9wdGlvbnNDYXB0aW9uXCIpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgZHVwbGljYXRpb24gdmFsdWUgZXJyb3IgdGV4dC4gU2V0IGl0IHRvIHNob3cgdGhlIHRleHQgZGlmZmVyZW50IGZyb20gdGhlIGRlZmF1bHQuXG4gICAqIEBzZWUgTWF0cml4RHJvcGRvd25Db2x1bW4uaXNVbmlxdWVcbiAgICovXG4gIHB1YmxpYyBnZXQga2V5RHVwbGljYXRpb25FcnJvcigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXG4gICAgICBcImtleUR1cGxpY2F0aW9uRXJyb3JcIixcbiAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IGtleUR1cGxpY2F0aW9uRXJyb3IodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImtleUR1cGxpY2F0aW9uRXJyb3JcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jS2V5RHVwbGljYXRpb25FcnJvcigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImtleUR1cGxpY2F0aW9uRXJyb3JcIik7XG4gIH1cbiAgcHVibGljIGdldCBzdG9yZU90aGVyc0FzQ29tbWVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5LnN0b3JlT3RoZXJzQXNDb21tZW50IDogZmFsc2U7XG4gIH1cbiAgcHVibGljIGFkZENvbHVtbihuYW1lOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgPSBudWxsKTogTWF0cml4RHJvcGRvd25Db2x1bW4ge1xuICAgIHZhciBjb2x1bW4gPSBuZXcgTWF0cml4RHJvcGRvd25Db2x1bW4obmFtZSwgdGl0bGUpO1xuICAgIHRoaXMuY29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VmlzaWJsZVJvd3MoKTogQXJyYXk8TWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2U+IHtcbiAgICBpZiAodGhpcy5pc1VwZGF0ZUxvY2tlZCkgcmV0dXJuIG51bGw7XG4gICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzID0gdGhpcy5nZW5lcmF0ZVJvd3MoKTtcbiAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MuZm9yRWFjaCgocm93KSA9PiB0aGlzLm9uTWF0cml4Um93Q3JlYXRlZChyb3cpKTtcbiAgICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgICAgdGhpcy5ydW5DZWxsc0NvbmRpdGlvbihcbiAgICAgICAgICB0aGlzLmRhdGEuZ2V0RmlsdGVyZWRWYWx1ZXMoKSxcbiAgICAgICAgICB0aGlzLmRhdGEuZ2V0RmlsdGVyZWRQcm9wZXJ0aWVzKClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlVmFsdWVPblJvd3NHZW5lcmF0aW9uKHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpO1xuICAgICAgdGhpcy51cGRhdGVJc0Fuc3dlcmVkKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlVmFsdWVPblJvd3NHZW5lcmF0aW9uKHJvd3M6IEFycmF5PE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlPikge1xuICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMuY3JlYXRlTmV3VmFsdWUodHJ1ZSk7XG4gICAgdmFyIG5ld1ZhbHVlID0gdGhpcy5jcmVhdGVOZXdWYWx1ZSgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJvdyA9IHJvd3NbaV07XG4gICAgICBpZiAoISFyb3cuZWRpdGluZ09iaikgY29udGludWU7XG4gICAgICB2YXIgcm93VmFsdWUgPSB0aGlzLmdldFJvd1ZhbHVlKGkpO1xuICAgICAgdmFyIHJWYWx1ZSA9IHJvdy52YWx1ZTtcbiAgICAgIGlmICh0aGlzLmlzVHdvVmFsdWVFcXVhbHMocm93VmFsdWUsIHJWYWx1ZSkpIGNvbnRpbnVlO1xuICAgICAgbmV3VmFsdWUgPSB0aGlzLmdldE5ld1ZhbHVlT25Sb3dDaGFuZ2VkKHJvdywgXCJcIiwgclZhbHVlLCBmYWxzZSwgbmV3VmFsdWUpXG4gICAgICAgIC52YWx1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNUd29WYWx1ZUVxdWFscyhvbGRWYWx1ZSwgbmV3VmFsdWUpKSByZXR1cm47XG4gICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gdHJ1ZTtcbiAgICB0aGlzLnNldE5ld1ZhbHVlKG5ld1ZhbHVlKTtcbiAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHRvdGFsVmFsdWUoKTogYW55IHtcbiAgICBpZiAoIXRoaXMuaGFzVG90YWwgfHwgIXRoaXMudmlzaWJsZVRvdGFsUm93KSByZXR1cm4ge307XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZVRvdGFsUm93LnZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRWaXNpYmxlVG90YWxSb3coKTogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2Uge1xuICAgIGlmICh0aGlzLmlzVXBkYXRlTG9ja2VkKSByZXR1cm4gbnVsbDtcbiAgICBpZiAodGhpcy5oYXNUb3RhbCkge1xuICAgICAgaWYgKCF0aGlzLmdlbmVyYXRlZFRvdGFsUm93KSB7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVkVG90YWxSb3cgPSB0aGlzLmdlbmVyYXRlVG90YWxSb3coKTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgICAgIHZhciBwcm9wZXJ0aWVzID0geyBzdXJ2ZXk6IHRoaXMuc3VydmV5IH07XG4gICAgICAgICAgdGhpcy5ydW5Ub3RhbHNDb25kaXRpb24odGhpcy5kYXRhLmdldEFsbFZhbHVlcygpLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdlbmVyYXRlZFRvdGFsUm93ID0gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVkVG90YWxSb3c7XG4gIH1cbiAgcHVibGljIGdldCB2aXNpYmxlVG90YWxSb3coKTogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2Uge1xuICAgIHJldHVybiB0aGlzLmdldFZpc2libGVUb3RhbFJvdygpO1xuICB9XG4gIHB1YmxpYyBvblN1cnZleUxvYWQoKSB7XG4gICAgc3VwZXIub25TdXJ2ZXlMb2FkKCk7XG4gICAgdGhpcy51cGRhdGVDb2x1bW5zSW5kZXhlcyh0aGlzLmNvbHVtbnMpO1xuICAgIHRoaXMuY2xlYXJHZW5lcmF0ZWRSb3dzKCk7XG4gICAgdGhpcy5nZW5lcmF0ZWRUb3RhbFJvdyA9IG51bGw7XG4gICAgdGhpcy51cGRhdGVIYXNGb290ZXIoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcm93IHZhbHVlLiBJZiB0aGUgcm93IHZhbHVlIGlzIGVtcHR5LCB0aGUgb2JqZWN0IGlzIGVtcHR5OiB7fS5cbiAgICogQHBhcmFtIHJvd0luZGV4IHJvdyBpbmRleCBmcm9tIDAgdG8gdmlzaWJsZSByb3cgY291bnQgLSAxLlxuICAgKi9cbiAgcHVibGljIGdldFJvd1ZhbHVlKHJvd0luZGV4OiBudW1iZXIpIHtcbiAgICBpZiAocm93SW5kZXggPCAwKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdmlzUm93cyA9IHRoaXMudmlzaWJsZVJvd3M7XG4gICAgaWYgKHJvd0luZGV4ID49IHZpc1Jvd3MubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgbmV3VmFsdWUgPSB0aGlzLmNyZWF0ZU5ld1ZhbHVlKCk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Um93VmFsdWVDb3JlKHZpc1Jvd3Nbcm93SW5kZXhdLCBuZXdWYWx1ZSk7XG4gIH1cbiAgcHVibGljIGNoZWNrSWZWYWx1ZUluUm93RHVwbGljYXRlZChcbiAgICBjaGVja2VkUm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICBjZWxsUXVlc3Rpb246IFF1ZXN0aW9uXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykgcmV0dXJuIGZhbHNlO1xuICAgIHZhciByZXMgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByb3cgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldO1xuICAgICAgaWYgKGNoZWNrZWRSb3cgPT09IHJvdykgY29udGludWU7XG4gICAgICBpZiAocm93LmdldFZhbHVlKGNlbGxRdWVzdGlvbi5uYW1lKSA9PSBjZWxsUXVlc3Rpb24udmFsdWUpIHtcbiAgICAgICAgcmVzID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZXMpIHtcbiAgICAgIHRoaXMuYWRkRHVwbGljYXRpb25FcnJvcihjZWxsUXVlc3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjZWxsUXVlc3Rpb24uY2xlYXJFcnJvcnMoKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICAvKipcbiAgICogU2V0IHRoZSByb3cgdmFsdWUuXG4gICAqIEBwYXJhbSByb3dJbmRleCByb3cgaW5kZXggZnJvbSAwIHRvIHZpc2libGUgcm93IGNvdW50IC0gMS5cbiAgICogQHBhcmFtIHJvd1ZhbHVlIGFuIG9iamVjdCB7XCJjb2x1bW4gbmFtZVwiOiBjb2x1bW5WYWx1ZSwuLi4gfVxuICAgKi9cbiAgcHVibGljIHNldFJvd1ZhbHVlKHJvd0luZGV4OiBudW1iZXIsIHJvd1ZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmIChyb3dJbmRleCA8IDApIHJldHVybiBudWxsO1xuICAgIHZhciB2aXNSb3dzID0gdGhpcy52aXNpYmxlUm93cztcbiAgICBpZiAocm93SW5kZXggPj0gdmlzUm93cy5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgIHZpc1Jvd3Nbcm93SW5kZXhdLnZhbHVlID0gcm93VmFsdWU7XG4gICAgdGhpcy5vblJvd0NoYW5nZWQodmlzUm93c1tyb3dJbmRleF0sIFwiXCIsIHJvd1ZhbHVlLCBmYWxzZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdlbmVyYXRlUm93cygpOiBBcnJheTxNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZT4ge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBnZW5lcmF0ZVRvdGFsUm93KCk6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlIHtcbiAgICByZXR1cm4gbmV3IE1hdHJpeERyb3Bkb3duVG90YWxSb3dNb2RlbCh0aGlzKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTmV3VmFsdWUobnVsbE9uRW1wdHk6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSB7XG4gICAgdmFyIHJlcyA9ICF0aGlzLnZhbHVlID8ge30gOiB0aGlzLmNyZWF0ZVZhbHVlQ29weSgpO1xuICAgIGlmIChudWxsT25FbXB0eSAmJiB0aGlzLmlzTWF0cml4VmFsdWVFbXB0eShyZXMpKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByb3RlY3RlZCBnZXRSb3dWYWx1ZUNvcmUoXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICBxdWVzdGlvblZhbHVlOiBhbnksXG4gICAgY3JlYXRlOiBib29sZWFuID0gZmFsc2VcbiAgKTogYW55IHtcbiAgICB2YXIgcmVzdWx0ID1cbiAgICAgICEhcXVlc3Rpb25WYWx1ZSAmJiAhIXF1ZXN0aW9uVmFsdWVbcm93LnJvd05hbWVdXG4gICAgICAgID8gcXVlc3Rpb25WYWx1ZVtyb3cucm93TmFtZV1cbiAgICAgICAgOiBudWxsO1xuICAgIGlmICghcmVzdWx0ICYmIGNyZWF0ZSkge1xuICAgICAgcmVzdWx0ID0ge307XG4gICAgICBpZiAoISFxdWVzdGlvblZhbHVlKSB7XG4gICAgICAgIHF1ZXN0aW9uVmFsdWVbcm93LnJvd05hbWVdID0gcmVzdWx0O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHByb3RlY3RlZCBnZXRSb3dPYmoocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSk6IGFueSB7XG4gICAgdmFyIG9iaiA9IHRoaXMuZ2V0Um93VmFsdWVDb3JlKHJvdywgdGhpcy52YWx1ZSk7XG4gICAgcmV0dXJuICEhb2JqICYmICEhb2JqLmdldFR5cGUgPyBvYmogOiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBnZXRSb3dEaXNwbGF5VmFsdWUoXG4gICAga2V5c0FzVGV4dDogYm9vbGVhbixcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIHJvd1ZhbHVlOiBhbnlcbiAgKTogYW55IHtcbiAgICBpZiAoIXJvd1ZhbHVlKSByZXR1cm4gcm93VmFsdWU7XG4gICAgaWYgKCEhcm93LmVkaXRpbmdPYmopIHJldHVybiByb3dWYWx1ZTtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHJvd1ZhbHVlKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgdmFyIHF1ZXN0aW9uID0gcm93LmdldFF1ZXN0aW9uQnlOYW1lKGtleSk7XG4gICAgICBpZiAoIXF1ZXN0aW9uKSB7XG4gICAgICAgIHF1ZXN0aW9uID0gdGhpcy5nZXRTaGFyZWRRdWVzdGlvbkJ5TmFtZShrZXksIHJvdyk7XG4gICAgICB9XG4gICAgICBpZiAoISFxdWVzdGlvbikge1xuICAgICAgICB2YXIgZGlzcGxheXZhbHVlID0gcXVlc3Rpb24uZ2V0RGlzcGxheVZhbHVlKGtleXNBc1RleHQsIHJvd1ZhbHVlW2tleV0pO1xuICAgICAgICBpZiAoa2V5c0FzVGV4dCAmJiAhIXF1ZXN0aW9uLnRpdGxlICYmIHF1ZXN0aW9uLnRpdGxlICE9PSBrZXkpIHtcbiAgICAgICAgICByb3dWYWx1ZVtxdWVzdGlvbi50aXRsZV0gPSBkaXNwbGF5dmFsdWU7XG4gICAgICAgICAgZGVsZXRlIHJvd1ZhbHVlW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcm93VmFsdWVba2V5XSA9IGRpc3BsYXl2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcm93VmFsdWU7XG4gIH1cbiAgcHVibGljIGdldFBsYWluRGF0YShcbiAgICBvcHRpb25zOiB7XG4gICAgICBpbmNsdWRlRW1wdHk/OiBib29sZWFuLFxuICAgICAgY2FsY3VsYXRpb25zPzogQXJyYXk8e1xuICAgICAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZyxcbiAgICAgIH0+LFxuICAgIH0gPSB7XG4gICAgICBpbmNsdWRlRW1wdHk6IHRydWUsXG4gICAgfVxuICApIHtcbiAgICB2YXIgcXVlc3Rpb25QbGFpbkRhdGEgPSBzdXBlci5nZXRQbGFpbkRhdGEob3B0aW9ucyk7XG4gICAgaWYgKCEhcXVlc3Rpb25QbGFpbkRhdGEpIHtcbiAgICAgIHF1ZXN0aW9uUGxhaW5EYXRhLmlzTm9kZSA9IHRydWU7XG4gICAgICBxdWVzdGlvblBsYWluRGF0YS5kYXRhID0gdGhpcy52aXNpYmxlUm93cy5tYXAoXG4gICAgICAgIChyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKSA9PiB7XG4gICAgICAgICAgdmFyIHJvd0RhdGFJdGVtID0gPGFueT57XG4gICAgICAgICAgICBuYW1lOiByb3cucm93TmFtZSxcbiAgICAgICAgICAgIHRpdGxlOiByb3cudGV4dCxcbiAgICAgICAgICAgIHZhbHVlOiByb3cudmFsdWUsXG4gICAgICAgICAgICBkaXNwbGF5VmFsdWU6IHRoaXMuZ2V0Um93RGlzcGxheVZhbHVlKGZhbHNlLCByb3csIHJvdy52YWx1ZSksXG4gICAgICAgICAgICBnZXRTdHJpbmc6ICh2YWw6IGFueSkgPT5cbiAgICAgICAgICAgICAgdHlwZW9mIHZhbCA9PT0gXCJvYmplY3RcIiA/IEpTT04uc3RyaW5naWZ5KHZhbCkgOiB2YWwsXG4gICAgICAgICAgICBpc05vZGU6IHRydWUsXG4gICAgICAgICAgICBkYXRhOiByb3cuY2VsbHNcbiAgICAgICAgICAgICAgLm1hcCgoY2VsbDogTWF0cml4RHJvcGRvd25DZWxsKSA9PlxuICAgICAgICAgICAgICAgIGNlbGwucXVlc3Rpb24uZ2V0UGxhaW5EYXRhKG9wdGlvbnMpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLmZpbHRlcigoZDogYW55KSA9PiAhIWQpLFxuICAgICAgICAgIH07XG4gICAgICAgICAgKG9wdGlvbnMuY2FsY3VsYXRpb25zIHx8IFtdKS5mb3JFYWNoKChjYWxjdWxhdGlvbikgPT4ge1xuICAgICAgICAgICAgcm93RGF0YUl0ZW1bY2FsY3VsYXRpb24ucHJvcGVydHlOYW1lXSA9ICg8YW55PnJvdylbXG4gICAgICAgICAgICAgIGNhbGN1bGF0aW9uLnByb3BlcnR5TmFtZVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gcm93RGF0YUl0ZW07XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBxdWVzdGlvblBsYWluRGF0YTtcbiAgfVxuICBwdWJsaWMgZ2V0UHJvZ3Jlc3NJbmZvKCk6IElQcm9ncmVzc0luZm8ge1xuICAgIHJldHVybiBTdXJ2ZXlFbGVtZW50LmdldFByb2dyZXNzSW5mb0J5RWxlbWVudHMoXG4gICAgICB0aGlzLmdldENlbGxRdWVzdGlvbnMoKSxcbiAgICAgIHRoaXMuaXNSZXF1aXJlZFxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBnZXRDZWxsUXVlc3Rpb25zKCk6IEFycmF5PFF1ZXN0aW9uPiB7XG4gICAgY29uc3Qgcm93cyA9IHRoaXMudmlzaWJsZVJvd3M7XG4gICAgaWYgKCFyb3dzKSByZXR1cm4gW107XG4gICAgY29uc3QgcXVlc3Rpb25zID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByb3cgPSByb3dzW2ldO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCByb3cuY2VsbHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgcXVlc3Rpb25zLnB1c2gocm93LmNlbGxzW2pdLnF1ZXN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHF1ZXN0aW9ucztcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkJlZm9yZVZhbHVlQ2hhbmdlZCh2YWw6IGFueSkgeyB9XG4gIHByaXZhdGUgb25TZXRRdWVzdGlvblZhbHVlKCkge1xuICAgIGlmICh0aGlzLmlzUm93Q2hhbmdpbmcpIHJldHVybjtcbiAgICB0aGlzLm9uQmVmb3JlVmFsdWVDaGFuZ2VkKHRoaXMudmFsdWUpO1xuICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cyB8fCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aCA9PSAwKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IHRydWU7XG4gICAgdmFyIHZhbCA9IHRoaXMuY3JlYXRlTmV3VmFsdWUoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByb3cgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldO1xuICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXS52YWx1ZSA9IHRoaXMuZ2V0Um93VmFsdWVDb3JlKHJvdywgdmFsKTtcbiAgICB9XG4gICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIHNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWU6IGFueSkge1xuICAgIHN1cGVyLnNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWUsIGZhbHNlKTtcbiAgICB0aGlzLm9uU2V0UXVlc3Rpb25WYWx1ZSgpO1xuICAgIHRoaXMudXBkYXRlSXNBbnN3ZXJlZCgpO1xuICB9XG4gIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkge1xuICAgIHZhciByb3dzID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cztcbiAgICBpZiAoIXJvd3MpIHJvd3MgPSB0aGlzLnZpc2libGVSb3dzO1xuICAgIGlmICghcm93cykgcmV0dXJuIHRydWU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2VsbHMgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldLmNlbGxzO1xuICAgICAgaWYgKCFjZWxscykgY29udGludWU7XG4gICAgICBmb3IgKHZhciBjb2xJbmRleCA9IDA7IGNvbEluZGV4IDwgY2VsbHMubGVuZ3RoOyBjb2xJbmRleCsrKSB7XG4gICAgICAgIHZhciBxdWVzdGlvbiA9IGNlbGxzW2NvbEluZGV4XS5xdWVzdGlvbjtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHF1ZXN0aW9uICYmXG4gICAgICAgICAgKCFxdWVzdGlvbi5zdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHx8ICFxdWVzdGlvbi52YWx1ZSlcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJvdGVjdGVkIGdldENvbnRhaW5zRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBzdXBlci5nZXRDb250YWluc0Vycm9ycygpIHx8XG4gICAgICB0aGlzLmNoZWNrRm9yQW5zd2Vyc09yRXJyb3JzKFxuICAgICAgICAocXVlc3Rpb246IFF1ZXN0aW9uKSA9PiBxdWVzdGlvbi5jb250YWluc0Vycm9ycyxcbiAgICAgICAgZmFsc2VcbiAgICAgIClcbiAgICApO1xuICB9XG4gIHByb3RlY3RlZCBnZXRJc0Fuc3dlcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBzdXBlci5nZXRJc0Fuc3dlcmVkKCkgJiZcbiAgICAgIHRoaXMuY2hlY2tGb3JBbnN3ZXJzT3JFcnJvcnMoXG4gICAgICAgIChxdWVzdGlvbjogUXVlc3Rpb24pID0+IHF1ZXN0aW9uLmlzQW5zd2VyZWQsXG4gICAgICAgIHRydWVcbiAgICAgIClcbiAgICApO1xuICB9XG4gIHByaXZhdGUgY2hlY2tGb3JBbnN3ZXJzT3JFcnJvcnMoXG4gICAgcHJlZGljYXRlOiAocXVlc3Rpb246IFF1ZXN0aW9uKSA9PiBib29sZWFuLFxuICAgIGV2ZXJ5OiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgdmFyIHJvd3MgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzO1xuICAgIGlmICghcm93cykgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNlbGxzID0gcm93c1tpXS5jZWxscztcbiAgICAgIGlmICghY2VsbHMpIGNvbnRpbnVlO1xuICAgICAgZm9yICh2YXIgY29sSW5kZXggPSAwOyBjb2xJbmRleCA8IGNlbGxzLmxlbmd0aDsgY29sSW5kZXgrKykge1xuICAgICAgICBpZiAoIWNlbGxzW2NvbEluZGV4XSkgY29udGludWU7XG4gICAgICAgIHZhciBxdWVzdGlvbiA9IGNlbGxzW2NvbEluZGV4XS5xdWVzdGlvbjtcbiAgICAgICAgaWYgKHF1ZXN0aW9uICYmIHF1ZXN0aW9uLmlzVmlzaWJsZSlcbiAgICAgICAgICBpZiAocHJlZGljYXRlKHF1ZXN0aW9uKSkge1xuICAgICAgICAgICAgaWYgKCFldmVyeSkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChldmVyeSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGV2ZXJ5ID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG4gIHB1YmxpYyBoYXNFcnJvcnMoZmlyZUNhbGxiYWNrOiBib29sZWFuID0gdHJ1ZSwgcmVjOiBhbnkgPSBudWxsKTogYm9vbGVhbiB7XG4gICAgdmFyIGVycm9zSW5Sb3dzID0gdGhpcy5oYXNFcnJvckluUm93cyhmaXJlQ2FsbGJhY2ssIHJlYyk7XG4gICAgdmFyIGlzRHVwbGljYXRlZCA9IHRoaXMuaXNWYWx1ZUR1cGxpY2F0ZWQoKTtcbiAgICByZXR1cm4gc3VwZXIuaGFzRXJyb3JzKGZpcmVDYWxsYmFjaywgcmVjKSB8fCBlcnJvc0luUm93cyB8fCBpc0R1cGxpY2F0ZWQ7XG4gIH1cbiAgcHJvdGVjdGVkIGdldElzUnVubmluZ1ZhbGlkYXRvcnMoKTogYm9vbGVhbiB7XG4gICAgaWYgKHN1cGVyLmdldElzUnVubmluZ1ZhbGlkYXRvcnMoKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2VsbHMgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldLmNlbGxzO1xuICAgICAgaWYgKCFjZWxscykgY29udGludWU7XG4gICAgICBmb3IgKHZhciBjb2xJbmRleCA9IDA7IGNvbEluZGV4IDwgY2VsbHMubGVuZ3RoOyBjb2xJbmRleCsrKSB7XG4gICAgICAgIGlmICghY2VsbHNbY29sSW5kZXhdKSBjb250aW51ZTtcbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gY2VsbHNbY29sSW5kZXhdLnF1ZXN0aW9uO1xuICAgICAgICBpZiAoISFxdWVzdGlvbiAmJiBxdWVzdGlvbi5pc1J1bm5pbmdWYWxpZGF0b3JzKSByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXRBbGxFcnJvcnMoKTogQXJyYXk8U3VydmV5RXJyb3I+IHtcbiAgICB2YXIgcmVzdWx0ID0gc3VwZXIuZ2V0QWxsRXJyb3JzKCk7XG4gICAgdmFyIHJvd3MgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzO1xuXG4gICAgaWYgKHJvd3MgPT09IG51bGwpIHJldHVybiByZXN1bHQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciByb3cgPSByb3dzW2ldO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCByb3cuY2VsbHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIGVycm9ycyA9IHJvdy5jZWxsc1tqXS5xdWVzdGlvbi5nZXRBbGxFcnJvcnMoKTtcbiAgICAgICAgaWYgKGVycm9ycyAmJiBlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoZXJyb3JzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHByaXZhdGUgaGFzRXJyb3JJblJvd3MoZmlyZUNhbGxiYWNrOiBib29sZWFuLCByZWM6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykgcmV0dXJuIGZhbHNlO1xuICAgIHZhciByZXMgPSBmYWxzZTtcbiAgICBpZiAoIXJlYykgcmVjID0ge307XG4gICAgcmVjLmlzU2luZ2xlRGV0YWlsUGFuZWwgPSB0aGlzLmRldGFpbFBhbmVsTW9kZSA9PT0gXCJ1bmRlclJvd1NpbmdsZVwiO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzID1cbiAgICAgICAgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1tpXS5oYXNFcnJvcnMoZmlyZUNhbGxiYWNrLCByZWMsICgpID0+IHtcbiAgICAgICAgICB0aGlzLnJhaXNlT25Db21wbGV0ZWRBc3luY1ZhbGlkYXRvcnMoKTtcbiAgICAgICAgfSkgfHwgcmVzO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgaXNWYWx1ZUR1cGxpY2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIGNvbHVtbnMgPSB0aGlzLmdldFVuaXF1ZUNvbHVtbnMoKTtcbiAgICB2YXIgcmVzID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXMgPSB0aGlzLmlzVmFsdWVJbkNvbHVtbkR1cGxpY2F0ZWQoY29sdW1uc1tpXSkgfHwgcmVzO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgaXNWYWx1ZUluQ29sdW1uRHVwbGljYXRlZChjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgdmFyIGtleVZhbHVlcyA9IDxBcnJheTxhbnk+PltdO1xuICAgIHZhciByZXMgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlcyA9XG4gICAgICAgIHRoaXMuaXNWYWx1ZUR1cGxpY2F0ZWRJblJvdyhcbiAgICAgICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldLFxuICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICBrZXlWYWx1ZXNcbiAgICAgICAgKSB8fCByZXM7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVuaXF1ZUNvbHVtbnMoKTogQXJyYXk8TWF0cml4RHJvcGRvd25Db2x1bW4+IHtcbiAgICB2YXIgcmVzID0gbmV3IEFycmF5PE1hdHJpeERyb3Bkb3duQ29sdW1uPigpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5jb2x1bW5zW2ldLmlzVW5pcXVlKSB7XG4gICAgICAgIHJlcy5wdXNoKHRoaXMuY29sdW1uc1tpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJpdmF0ZSBpc1ZhbHVlRHVwbGljYXRlZEluUm93KFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbixcbiAgICBrZXlWYWx1ZXM6IEFycmF5PGFueT5cbiAgKTogYm9vbGVhbiB7XG4gICAgdmFyIHF1ZXN0aW9uID0gcm93LmdldFF1ZXN0aW9uQnlDb2x1bW4oY29sdW1uKTtcbiAgICBpZiAoIXF1ZXN0aW9uIHx8IHF1ZXN0aW9uLmlzRW1wdHkoKSkgcmV0dXJuIGZhbHNlO1xuICAgIHZhciB2YWx1ZSA9IHF1ZXN0aW9uLnZhbHVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5VmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodmFsdWUgPT0ga2V5VmFsdWVzW2ldKSB7XG4gICAgICAgIHRoaXMuYWRkRHVwbGljYXRpb25FcnJvcihxdWVzdGlvbik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBrZXlWYWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByaXZhdGUgYWRkRHVwbGljYXRpb25FcnJvcihxdWVzdGlvbjogUXVlc3Rpb24pIHtcbiAgICBxdWVzdGlvbi5hZGRFcnJvcihuZXcgS2V5RHVwbGljYXRpb25FcnJvcih0aGlzLmtleUR1cGxpY2F0aW9uRXJyb3IsIHRoaXMpKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Rmlyc3RJbnB1dEVsZW1lbnRJZCgpOiBzdHJpbmcge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0Rmlyc3RDZWxsUXVlc3Rpb24oZmFsc2UpO1xuICAgIHJldHVybiBxdWVzdGlvbiA/IHF1ZXN0aW9uLmlucHV0SWQgOiBzdXBlci5nZXRGaXJzdElucHV0RWxlbWVudElkKCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldEZpcnN0RXJyb3JJbnB1dEVsZW1lbnRJZCgpOiBzdHJpbmcge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0Rmlyc3RDZWxsUXVlc3Rpb24odHJ1ZSk7XG4gICAgcmV0dXJuIHF1ZXN0aW9uID8gcXVlc3Rpb24uaW5wdXRJZCA6IHN1cGVyLmdldEZpcnN0RXJyb3JJbnB1dEVsZW1lbnRJZCgpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRGaXJzdENlbGxRdWVzdGlvbihvbkVycm9yOiBib29sZWFuKTogUXVlc3Rpb24ge1xuICAgIGlmICghdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cykgcmV0dXJuIG51bGw7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2VsbHMgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2ldLmNlbGxzO1xuICAgICAgZm9yICh2YXIgY29sSW5kZXggPSAwOyBjb2xJbmRleCA8IGNlbGxzLmxlbmd0aDsgY29sSW5kZXgrKykge1xuICAgICAgICBpZiAoIW9uRXJyb3IpIHJldHVybiBjZWxsc1tjb2xJbmRleF0ucXVlc3Rpb247XG4gICAgICAgIGlmIChjZWxsc1tjb2xJbmRleF0ucXVlc3Rpb24uY3VycmVudEVycm9yQ291bnQgPiAwKVxuICAgICAgICAgIHJldHVybiBjZWxsc1tjb2xJbmRleF0ucXVlc3Rpb247XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBvblJlYWRPbmx5Q2hhbmdlZCgpIHtcbiAgICBzdXBlci5vblJlYWRPbmx5Q2hhbmdlZCgpO1xuICAgIGlmICghdGhpcy5nZW5lcmF0ZVJvd3MpIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudmlzaWJsZVJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMudmlzaWJsZVJvd3NbaV0ub25RdWVzdGlvblJlYWRPbmx5Q2hhbmdlZCh0aGlzLmlzUmVhZE9ubHkpO1xuICAgIH1cbiAgfVxuXG4gIC8vSU1hdHJpeERyb3Bkb3duRGF0YVxuICBwdWJsaWMgY3JlYXRlUXVlc3Rpb24oXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uXG4gICk6IFF1ZXN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVRdWVzdGlvbkNvcmUocm93LCBjb2x1bW4pO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVRdWVzdGlvbkNvcmUoXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uXG4gICk6IFF1ZXN0aW9uIHtcbiAgICB2YXIgcXVlc3Rpb24gPSBjb2x1bW4uY3JlYXRlQ2VsbFF1ZXN0aW9uKHJvdyk7XG4gICAgaWYgKHRoaXMuaXNSZWFkT25seSkge1xuICAgICAgcXVlc3Rpb24ucmVhZE9ubHkgPSB0cnVlO1xuICAgIH1cbiAgICBxdWVzdGlvbi5zZXRTdXJ2ZXlJbXBsKHJvdyk7XG4gICAgcXVlc3Rpb24uc2V0UGFyZW50UXVlc3Rpb24odGhpcyk7XG4gICAgcmV0dXJuIHF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBkZWxldGVSb3dWYWx1ZShcbiAgICBuZXdWYWx1ZTogYW55LFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2VcbiAgKTogYW55IHtcbiAgICBpZiAoIW5ld1ZhbHVlKSByZXR1cm4gbmV3VmFsdWU7XG4gICAgZGVsZXRlIG5ld1ZhbHVlW3Jvdy5yb3dOYW1lXTtcbiAgICByZXR1cm4gdGhpcy5pc09iamVjdChuZXdWYWx1ZSkgJiYgT2JqZWN0LmtleXMobmV3VmFsdWUpLmxlbmd0aCA9PSAwXG4gICAgICA/IG51bGxcbiAgICAgIDogbmV3VmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBpc0RvaW5nb25BbnlWYWx1ZUNoYW5nZWQgPSBmYWxzZTtcbiAgb25BbnlWYWx1ZUNoYW5nZWQobmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5pc1VwZGF0ZUxvY2tlZCB8fFxuICAgICAgdGhpcy5pc0RvaW5nb25BbnlWYWx1ZUNoYW5nZWQgfHxcbiAgICAgICF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuaXNEb2luZ29uQW55VmFsdWVDaGFuZ2VkID0gdHJ1ZTtcbiAgICB2YXIgcm93cyA9IHRoaXMudmlzaWJsZVJvd3M7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByb3dzW2ldLm9uQW55VmFsdWVDaGFuZ2VkKG5hbWUpO1xuICAgIH1cbiAgICB2YXIgdG90YWxSb3cgPSB0aGlzLnZpc2libGVUb3RhbFJvdztcbiAgICBpZiAoISF0b3RhbFJvdykge1xuICAgICAgdG90YWxSb3cub25BbnlWYWx1ZUNoYW5nZWQobmFtZSk7XG4gICAgfVxuICAgIHRoaXMuaXNEb2luZ29uQW55VmFsdWVDaGFuZ2VkID0gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGlzT2JqZWN0KHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiO1xuICB9XG4gIHByaXZhdGUgZ2V0T25DZWxsVmFsdWVDaGFuZ2VkT3B0aW9ucyhcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgICByb3dWYWx1ZTogYW55XG4gICk6IGFueSB7XG4gICAgdmFyIGdldFF1ZXN0aW9uID0gKGNvbE5hbWU6IGFueSkgPT4ge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3cuY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNvbCA9IHJvdy5jZWxsc1tpXS5jb2x1bW47XG4gICAgICAgIGlmICghIWNvbCAmJiBjb2wubmFtZSA9PT0gY29sTmFtZSkge1xuICAgICAgICAgIHJldHVybiByb3cuY2VsbHNbaV0ucXVlc3Rpb247XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHJvdzogcm93LFxuICAgICAgY29sdW1uTmFtZTogY29sdW1uTmFtZSxcbiAgICAgIHJvd1ZhbHVlOiByb3dWYWx1ZSxcbiAgICAgIHZhbHVlOiAhIXJvd1ZhbHVlID8gcm93VmFsdWVbY29sdW1uTmFtZV0gOiBudWxsLFxuICAgICAgZ2V0Q2VsbFF1ZXN0aW9uOiBnZXRRdWVzdGlvbixcbiAgICB9O1xuICB9XG4gIHByb3RlY3RlZCBvbkNlbGxWYWx1ZUNoYW5nZWQoXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICBjb2x1bW5OYW1lOiBzdHJpbmcsXG4gICAgcm93VmFsdWU6IGFueVxuICApIHtcbiAgICBpZiAoIXRoaXMuc3VydmV5KSByZXR1cm47XG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLmdldE9uQ2VsbFZhbHVlQ2hhbmdlZE9wdGlvbnMocm93LCBjb2x1bW5OYW1lLCByb3dWYWx1ZSk7XG4gICAgaWYgKCEhdGhpcy5vbkNlbGxWYWx1ZUNoYW5nZWRDYWxsYmFjaykge1xuICAgICAgdGhpcy5vbkNlbGxWYWx1ZUNoYW5nZWRDYWxsYmFjayhvcHRpb25zKTtcbiAgICB9XG4gICAgdGhpcy5zdXJ2ZXkubWF0cml4Q2VsbFZhbHVlQ2hhbmdlZCh0aGlzLCBvcHRpb25zKTtcbiAgfVxuICB2YWxpZGF0ZUNlbGwoXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcbiAgICBjb2x1bW5OYW1lOiBzdHJpbmcsXG4gICAgcm93VmFsdWU6IGFueVxuICApOiBTdXJ2ZXlFcnJvciB7XG4gICAgaWYgKCF0aGlzLnN1cnZleSkgcmV0dXJuO1xuICAgIHZhciBvcHRpb25zID0gdGhpcy5nZXRPbkNlbGxWYWx1ZUNoYW5nZWRPcHRpb25zKHJvdywgY29sdW1uTmFtZSwgcm93VmFsdWUpO1xuICAgIHJldHVybiB0aGlzLnN1cnZleS5tYXRyaXhDZWxsVmFsaWRhdGUodGhpcywgb3B0aW9ucyk7XG4gIH1cbiAgZ2V0IGlzVmFsaWRhdGVPblZhbHVlQ2hhbmdpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5pc1ZhbGlkYXRlT25WYWx1ZUNoYW5naW5nIDogZmFsc2U7XG4gIH1cbiAgb25Sb3dDaGFuZ2luZyhcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgICByb3dWYWx1ZTogYW55XG4gICk6IGFueSB7XG4gICAgaWYgKCF0aGlzLnN1cnZleSkgcmV0dXJuICEhcm93VmFsdWUgPyByb3dWYWx1ZVtjb2x1bW5OYW1lXSA6IG51bGw7XG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLmdldE9uQ2VsbFZhbHVlQ2hhbmdlZE9wdGlvbnMocm93LCBjb2x1bW5OYW1lLCByb3dWYWx1ZSk7XG4gICAgdmFyIG9sZFJvd1ZhbHVlID0gdGhpcy5nZXRSb3dWYWx1ZUNvcmUocm93LCB0aGlzLmNyZWF0ZU5ld1ZhbHVlKCksIHRydWUpO1xuICAgIG9wdGlvbnMub2xkVmFsdWUgPSAhIW9sZFJvd1ZhbHVlID8gb2xkUm93VmFsdWVbY29sdW1uTmFtZV0gOiBudWxsO1xuICAgIHRoaXMuc3VydmV5Lm1hdHJpeENlbGxWYWx1ZUNoYW5naW5nKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLnZhbHVlO1xuICB9XG4gIG9uUm93Q2hhbmdlZChcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIGNvbHVtbk5hbWU6IHN0cmluZyxcbiAgICBuZXdSb3dWYWx1ZTogYW55LFxuICAgIGlzRGVsZXRpbmdWYWx1ZTogYm9vbGVhblxuICApIHtcbiAgICB2YXIgcm93T2JqID0gISFjb2x1bW5OYW1lID8gdGhpcy5nZXRSb3dPYmoocm93KSA6IG51bGw7XG4gICAgaWYgKCEhcm93T2JqKSB7XG4gICAgICB2YXIgY29sdW1uVmFsdWUgPSBudWxsO1xuICAgICAgaWYgKCEhbmV3Um93VmFsdWUgJiYgIWlzRGVsZXRpbmdWYWx1ZSkge1xuICAgICAgICBjb2x1bW5WYWx1ZSA9IG5ld1Jvd1ZhbHVlW2NvbHVtbk5hbWVdO1xuICAgICAgfVxuICAgICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gdHJ1ZTtcbiAgICAgIHJvd09ialtjb2x1bW5OYW1lXSA9IGNvbHVtblZhbHVlO1xuICAgICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gZmFsc2U7XG4gICAgICB0aGlzLm9uQ2VsbFZhbHVlQ2hhbmdlZChyb3csIGNvbHVtbk5hbWUsIHJvd09iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMuY3JlYXRlTmV3VmFsdWUodHJ1ZSk7XG4gICAgICB2YXIgY29tYmluZSA9IHRoaXMuZ2V0TmV3VmFsdWVPblJvd0NoYW5nZWQoXG4gICAgICAgIHJvdyxcbiAgICAgICAgY29sdW1uTmFtZSxcbiAgICAgICAgbmV3Um93VmFsdWUsXG4gICAgICAgIGlzRGVsZXRpbmdWYWx1ZSxcbiAgICAgICAgdGhpcy5jcmVhdGVOZXdWYWx1ZSgpXG4gICAgICApO1xuICAgICAgaWYgKHRoaXMuaXNUd29WYWx1ZUVxdWFscyhvbGRWYWx1ZSwgY29tYmluZS52YWx1ZSkpIHJldHVybjtcbiAgICAgIHRoaXMuaXNSb3dDaGFuZ2luZyA9IHRydWU7XG4gICAgICB0aGlzLnNldE5ld1ZhbHVlKGNvbWJpbmUudmFsdWUpO1xuICAgICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gZmFsc2U7XG4gICAgICBpZiAoY29sdW1uTmFtZSkge1xuICAgICAgICB0aGlzLm9uQ2VsbFZhbHVlQ2hhbmdlZChyb3csIGNvbHVtbk5hbWUsIGNvbWJpbmUucm93VmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldE5ld1ZhbHVlT25Sb3dDaGFuZ2VkKFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgY29sdW1uTmFtZTogc3RyaW5nLFxuICAgIG5ld1Jvd1ZhbHVlOiBhbnksXG4gICAgaXNEZWxldGluZ1ZhbHVlOiBib29sZWFuLFxuICAgIG5ld1ZhbHVlOiBhbnlcbiAgKTogYW55IHtcbiAgICB2YXIgcm93VmFsdWUgPSB0aGlzLmdldFJvd1ZhbHVlQ29yZShyb3csIG5ld1ZhbHVlLCB0cnVlKTtcbiAgICBpZiAoaXNEZWxldGluZ1ZhbHVlKSB7XG4gICAgICBkZWxldGUgcm93VmFsdWVbY29sdW1uTmFtZV07XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93LmNlbGxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0gcm93LmNlbGxzW2ldLnF1ZXN0aW9uLmdldFZhbHVlTmFtZSgpO1xuICAgICAgZGVsZXRlIHJvd1ZhbHVlW2tleV07XG4gICAgfVxuICAgIGlmIChuZXdSb3dWYWx1ZSkge1xuICAgICAgbmV3Um93VmFsdWUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG5ld1Jvd1ZhbHVlKSk7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gbmV3Um93VmFsdWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eShuZXdSb3dWYWx1ZVtrZXldKSkge1xuICAgICAgICAgIHJvd1ZhbHVlW2tleV0gPSBuZXdSb3dWYWx1ZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmlzT2JqZWN0KHJvd1ZhbHVlKSAmJiBPYmplY3Qua2V5cyhyb3dWYWx1ZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICBuZXdWYWx1ZSA9IHRoaXMuZGVsZXRlUm93VmFsdWUobmV3VmFsdWUsIHJvdyk7XG4gICAgfVxuICAgIHJldHVybiB7IHZhbHVlOiBuZXdWYWx1ZSwgcm93VmFsdWU6IHJvd1ZhbHVlIH07XG4gIH1cbiAgZ2V0Um93SW5kZXgocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSk6IG51bWJlciB7XG4gICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSByZXR1cm4gLTE7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZVJvd3MuaW5kZXhPZihyb3cpO1xuICB9XG4gIHB1YmxpYyBnZXRFbGVtZW50c0luRGVzaWduKGluY2x1ZGVIaWRkZW46IGJvb2xlYW4gPSBmYWxzZSk6IEFycmF5PElFbGVtZW50PiB7XG4gICAgaWYgKHRoaXMuZGV0YWlsUGFuZWxNb2RlID09IFwibm9uZVwiKVxuICAgICAgcmV0dXJuIHN1cGVyLmdldEVsZW1lbnRzSW5EZXNpZ24oaW5jbHVkZUhpZGRlbik7XG4gICAgcmV0dXJuIGluY2x1ZGVIaWRkZW4gPyBbdGhpcy5kZXRhaWxQYW5lbF0gOiB0aGlzLmRldGFpbEVsZW1lbnRzO1xuICB9XG4gIGhhc0RldGFpbFBhbmVsKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5kZXRhaWxQYW5lbE1vZGUgPT0gXCJub25lXCIpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybiB0cnVlO1xuICAgIGlmICghIXRoaXMub25IYXNEZXRhaWxQYW5lbENhbGxiYWNrKVxuICAgICAgcmV0dXJuIHRoaXMub25IYXNEZXRhaWxQYW5lbENhbGxiYWNrKHJvdyk7XG4gICAgcmV0dXJuIHRoaXMuZGV0YWlsRWxlbWVudHMubGVuZ3RoID4gMDtcbiAgfVxuICBnZXRJc0RldGFpbFBhbmVsU2hvd2luZyhyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuZGV0YWlsUGFuZWxNb2RlID09IFwibm9uZVwiKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKSB7XG4gICAgICB2YXIgcmVzID0gdGhpcy52aXNpYmxlUm93cy5pbmRleE9mKHJvdykgPT0gMDtcbiAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgaWYgKCFyb3cuZGV0YWlsUGFuZWwpIHtcbiAgICAgICAgICByb3cuc2hvd0RldGFpbFBhbmVsKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc1Jvd1Nob3dpbmdcIiArIHJvdy5pZCwgZmFsc2UpO1xuICB9XG4gIHNldElzRGV0YWlsUGFuZWxTaG93aW5nKHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsIHZhbDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh2YWwgPT0gdGhpcy5nZXRJc0RldGFpbFBhbmVsU2hvd2luZyhyb3cpKSByZXR1cm47XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNSb3dTaG93aW5nXCIgKyByb3cuaWQsIHZhbCk7XG4gICAgdGhpcy51cGRhdGVEZXRhaWxQYW5lbEJ1dHRvbkNzcyhyb3cpO1xuICAgIGlmICghIXRoaXMucmVuZGVyZWRUYWJsZSkge1xuICAgICAgdGhpcy5yZW5kZXJlZFRhYmxlLm9uRGV0YWlsUGFuZWxDaGFuZ2VWaXNpYmlsaXR5KHJvdywgdmFsKTtcbiAgICB9XG4gICAgaWYgKHZhbCAmJiB0aGlzLmRldGFpbFBhbmVsTW9kZSA9PT0gXCJ1bmRlclJvd1NpbmdsZVwiKSB7XG4gICAgICB2YXIgcm93cyA9IHRoaXMudmlzaWJsZVJvd3M7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHJvd3NbaV0uaWQgIT09IHJvdy5pZCAmJiByb3dzW2ldLmlzRGV0YWlsUGFuZWxTaG93aW5nKSB7XG4gICAgICAgICAgcm93c1tpXS5oaWRlRGV0YWlsUGFuZWwoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0RGV0YWlsUGFuZWxCdXR0b25Dc3Mocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSk6IHN0cmluZyB7XG4gICAgY29uc3QgYnVpbGRlciA9IG5ldyBDc3NDbGFzc0J1aWxkZXIoKS5hcHBlbmQodGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZGV0YWlsQnV0dG9uQ3NzXCIgKyByb3cuaWQpKTtcbiAgICByZXR1cm4gYnVpbGRlci5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmRldGFpbEJ1dHRvbiwgYnVpbGRlci50b1N0cmluZygpID09PSBcIlwiKS50b1N0cmluZygpO1xuICB9XG4gIHB1YmxpYyBnZXREZXRhaWxQYW5lbEljb25Dc3Mocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSk6IHN0cmluZyB7XG4gICAgY29uc3QgYnVpbGRlciA9IG5ldyBDc3NDbGFzc0J1aWxkZXIoKS5hcHBlbmQodGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZGV0YWlsSWNvbkNzc1wiICsgcm93LmlkKSk7XG4gICAgcmV0dXJuIGJ1aWxkZXIuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5kZXRhaWxJY29uLCBidWlsZGVyLnRvU3RyaW5nKCkgPT09IFwiXCIpLnRvU3RyaW5nKCk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVEZXRhaWxQYW5lbEJ1dHRvbkNzcyhyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKSB7XG4gICAgY29uc3QgY2xhc3NlcyA9IHRoaXMuY3NzQ2xhc3NlcztcbiAgICBjb25zdCBpc1BhbmVsU2hvd2luZyA9IHRoaXMuZ2V0SXNEZXRhaWxQYW5lbFNob3dpbmcocm93KTtcblxuICAgIGNvbnN0IGljb25CdWlsZGVyID0gbmV3IENzc0NsYXNzQnVpbGRlcigpLmFwcGVuZChjbGFzc2VzLmRldGFpbEljb24pXG4gICAgICAuYXBwZW5kKGNsYXNzZXMuZGV0YWlsSWNvbkV4cGFuZGVkLCBpc1BhbmVsU2hvd2luZyk7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZGV0YWlsSWNvbkNzc1wiICsgcm93LmlkLCBpY29uQnVpbGRlci50b1N0cmluZygpKTtcblxuICAgIGNvbnN0IGJ1dHRvbkJ1aWxkZXIgPSBuZXcgQ3NzQ2xhc3NCdWlsZGVyKCkuYXBwZW5kKGNsYXNzZXMuZGV0YWlsQnV0dG9uKVxuICAgICAgLmFwcGVuZChjbGFzc2VzLmRldGFpbEJ1dHRvbkV4cGFuZGVkLCBpc1BhbmVsU2hvd2luZyk7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZGV0YWlsQnV0dG9uQ3NzXCIgKyByb3cuaWQsIGJ1dHRvbkJ1aWxkZXIudG9TdHJpbmcoKSk7XG4gIH1cbiAgY3JlYXRlUm93RGV0YWlsUGFuZWwocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSk6IFBhbmVsTW9kZWwge1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuIHRoaXMuZGV0YWlsUGFuZWw7XG4gICAgdmFyIHBhbmVsID0gdGhpcy5jcmVhdGVOZXdEZXRhaWxQYW5lbCgpO1xuICAgIHBhbmVsLnJlYWRPbmx5ID0gdGhpcy5pc1JlYWRPbmx5O1xuICAgIHZhciBqc29uID0gdGhpcy5kZXRhaWxQYW5lbC50b0pTT04oKTtcbiAgICBuZXcgSnNvbk9iamVjdCgpLnRvT2JqZWN0KGpzb24sIHBhbmVsKTtcbiAgICBwYW5lbC5yZW5kZXJXaWR0aCA9IFwiMTAwJVwiO1xuICAgIHBhbmVsLnVwZGF0ZUN1c3RvbVdpZGdldHMoKTtcbiAgICBpZiAoISF0aGlzLm9uQ3JlYXRlRGV0YWlsUGFuZWxDYWxsYmFjaykge1xuICAgICAgdGhpcy5vbkNyZWF0ZURldGFpbFBhbmVsQ2FsbGJhY2socm93LCBwYW5lbCk7XG4gICAgfVxuICAgIHJldHVybiBwYW5lbDtcbiAgfVxuICBnZXRTaGFyZWRRdWVzdGlvbkJ5TmFtZShcbiAgICBjb2x1bW5OYW1lOiBzdHJpbmcsXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZVxuICApOiBRdWVzdGlvbiB7XG4gICAgaWYgKCF0aGlzLnN1cnZleSB8fCAhdGhpcy52YWx1ZU5hbWUpIHJldHVybiBudWxsO1xuICAgIHZhciBpbmRleCA9IHRoaXMuZ2V0Um93SW5kZXgocm93KTtcbiAgICBpZiAoaW5kZXggPCAwKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gPFF1ZXN0aW9uPihcbiAgICAgIHRoaXMuc3VydmV5LmdldFF1ZXN0aW9uQnlWYWx1ZU5hbWVGcm9tQXJyYXkoXG4gICAgICAgIHRoaXMudmFsdWVOYW1lLFxuICAgICAgICBjb2x1bW5OYW1lLFxuICAgICAgICBpbmRleFxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgb25Ub3RhbFZhbHVlQ2hhbmdlZCgpOiBhbnkge1xuICAgIGlmIChcbiAgICAgICEhdGhpcy5kYXRhICYmXG4gICAgICAhIXRoaXMudmlzaWJsZVRvdGFsUm93ICYmXG4gICAgICAhdGhpcy5pc1VwZGF0ZUxvY2tlZCAmJlxuICAgICAgIXRoaXMuaXNTZXR0ICYmXG4gICAgICAhdGhpcy5pc1JlYWRPbmx5XG4gICAgKSB7XG4gICAgICB0aGlzLmRhdGEuc2V0VmFsdWUoXG4gICAgICAgIHRoaXMuZ2V0VmFsdWVOYW1lKCkgKyBzZXR0aW5ncy5tYXRyaXhUb3RhbFZhbHVlUG9zdEZpeCxcbiAgICAgICAgdGhpcy50b3RhbFZhbHVlLFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldFF1ZXN0aW9uRnJvbUFycmF5KG5hbWU6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IElRdWVzdGlvbiB7XG4gICAgaWYgKGluZGV4ID49IHRoaXMudmlzaWJsZVJvd3MubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlUm93c1tpbmRleF0uZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XG4gIH1cbiAgcHJpdmF0ZSBpc01hdHJpeFZhbHVlRW1wdHkodmFsOiBhbnkpIHtcbiAgICBpZiAoIXZhbCkgcmV0dXJuO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0aGlzLmlzT2JqZWN0KHZhbFtpXSkgJiYgT2JqZWN0LmtleXModmFsW2ldKS5sZW5ndGggPiAwKVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmtleXModmFsKS5sZW5ndGggPT0gMDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IFN1cnZleU1vZGVsKCkge1xuICAgIHJldHVybiB0aGlzLnN1cnZleSBhcyBTdXJ2ZXlNb2RlbDtcbiAgfVxuICBwdWJsaWMgZ2V0Q2VsbFRlbXBsYXRlRGF0YShjZWxsOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsKSB7XG4gICAgLy8gcmV0dXJuIGNlbGwuY2VsbC5jb2x1bW4udGVtcGxhdGVRdWVzdGlvbjtcbiAgICByZXR1cm4gdGhpcy5TdXJ2ZXlNb2RlbC5nZXRNYXRyaXhDZWxsVGVtcGxhdGVEYXRhKGNlbGwpO1xuICB9XG4gIHB1YmxpYyBnZXRDZWxsV3JhcHBlckNvbXBvbmVudE5hbWUoY2VsbDogTWF0cml4RHJvcGRvd25DZWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuU3VydmV5TW9kZWwuZ2V0RWxlbWVudFdyYXBwZXJDb21wb25lbnROYW1lKGNlbGwsIFwiY2VsbFwiKTtcbiAgfVxuICBwdWJsaWMgZ2V0Q2VsbFdyYXBwZXJDb21wb25lbnREYXRhKGNlbGw6IE1hdHJpeERyb3Bkb3duQ2VsbCkge1xuICAgIHJldHVybiB0aGlzLlN1cnZleU1vZGVsLmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50RGF0YShjZWxsLCBcImNlbGxcIik7XG4gIH1cbiAgcHVibGljIGdldENvbHVtbkhlYWRlcldyYXBwZXJDb21wb25lbnROYW1lKGNlbGw6IE1hdHJpeERyb3Bkb3duQ2VsbCkge1xuICAgIHJldHVybiB0aGlzLlN1cnZleU1vZGVsLmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50TmFtZShcbiAgICAgIGNlbGwsXG4gICAgICBcImNvbHVtbi1oZWFkZXJcIlxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldENvbHVtbkhlYWRlcldyYXBwZXJDb21wb25lbnREYXRhKGNlbGw6IE1hdHJpeERyb3Bkb3duQ2VsbCkge1xuICAgIHJldHVybiB0aGlzLlN1cnZleU1vZGVsLmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50RGF0YShcbiAgICAgIGNlbGwsXG4gICAgICBcImNvbHVtbi1oZWFkZXJcIlxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldFJvd0hlYWRlcldyYXBwZXJDb21wb25lbnROYW1lKGNlbGw6IE1hdHJpeERyb3Bkb3duQ2VsbCkge1xuICAgIHJldHVybiB0aGlzLlN1cnZleU1vZGVsLmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50TmFtZShjZWxsLCBcInJvdy1oZWFkZXJcIik7XG4gIH1cbiAgcHVibGljIGdldFJvd0hlYWRlcldyYXBwZXJDb21wb25lbnREYXRhKGNlbGw6IE1hdHJpeERyb3Bkb3duQ2VsbCkge1xuICAgIHJldHVybiB0aGlzLlN1cnZleU1vZGVsLmdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50RGF0YShjZWxsLCBcInJvdy1oZWFkZXJcIik7XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJtYXRyaXhkcm9wZG93bmJhc2VcIixcbiAgW1xuICAgIHtcbiAgICAgIG5hbWU6IFwiY29sdW1uczptYXRyaXhkcm9wZG93bmNvbHVtbnNcIixcbiAgICAgIGNsYXNzTmFtZTogXCJtYXRyaXhkcm9wZG93bmNvbHVtblwiLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJjb2x1bW5MYXlvdXRcIixcbiAgICAgIGFsdGVybmF0aXZlTmFtZTogXCJjb2x1bW5zTG9jYXRpb25cIixcbiAgICAgIGRlZmF1bHQ6IFwiaG9yaXpvbnRhbFwiLFxuICAgICAgY2hvaWNlczogW1wiaG9yaXpvbnRhbFwiLCBcInZlcnRpY2FsXCJdLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJkZXRhaWxFbGVtZW50c1wiLFxuICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICBpc0xpZ2h0U2VyaWFsaXphYmxlOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiZGV0YWlsUGFuZWxNb2RlXCIsXG4gICAgICBjaG9pY2VzOiBbXCJub25lXCIsIFwidW5kZXJSb3dcIiwgXCJ1bmRlclJvd1NpbmdsZVwiXSxcbiAgICAgIGRlZmF1bHQ6IFwibm9uZVwiLFxuICAgIH0sXG4gICAgXCJob3Jpem9udGFsU2Nyb2xsOmJvb2xlYW5cIixcbiAgICB7XG4gICAgICBuYW1lOiBcImNob2ljZXM6aXRlbXZhbHVlW11cIixcbiAgICB9LFxuICAgIHsgbmFtZTogXCJvcHRpb25zQ2FwdGlvblwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jT3B0aW9uc0NhcHRpb25cIiB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwia2V5RHVwbGljYXRpb25FcnJvclwiLFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0tleUR1cGxpY2F0aW9uRXJyb3JcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiY2VsbFR5cGVcIixcbiAgICAgIGRlZmF1bHQ6IFwiZHJvcGRvd25cIixcbiAgICAgIGNob2ljZXM6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIE1hdHJpeERyb3Bkb3duQ29sdW1uLmdldENvbHVtblR5cGVzKCk7XG4gICAgICB9LFxuICAgIH0sXG4gICAgeyBuYW1lOiBcImNvbHVtbkNvbENvdW50XCIsIGRlZmF1bHQ6IDAsIGNob2ljZXM6IFswLCAxLCAyLCAzLCA0XSB9LFxuICAgIFwiY29sdW1uTWluV2lkdGhcIixcbiAgICB7IG5hbWU6IFwiYWxsb3dBZGFwdGl2ZUFjdGlvbnM6Ym9vbGVhblwiLCBkZWZhdWx0OiBmYWxzZSwgdmlzaWJsZTogZmFsc2UgfSxcbiAgXSxcbiAgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsQmFzZShcIlwiKTtcbiAgfSxcbiAgXCJtYXRyaXhiYXNlXCJcbik7XG4iLCJpbXBvcnQgeyBKc29uT2JqZWN0LCBKc29uT2JqZWN0UHJvcGVydHksIFNlcmlhbGl6ZXIsIHByb3BlcnR5IH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xyXG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XHJcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7IElTdXJ2ZXksIElXcmFwcGVyT2JqZWN0IH0gZnJvbSBcIi4vYmFzZS1pbnRlcmZhY2VzXCI7XHJcbmltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xyXG5pbXBvcnQgeyBRdWVzdGlvblNlbGVjdEJhc2UgfSBmcm9tIFwiLi9xdWVzdGlvbl9iYXNlc2VsZWN0XCI7XHJcbmltcG9ydCB7IElMb2NhbGl6YWJsZU93bmVyLCBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XHJcbmltcG9ydCB7IFN1cnZleVZhbGlkYXRvciB9IGZyb20gXCIuL3ZhbGlkYXRvclwiO1xyXG5pbXBvcnQgeyBnZXRDdXJyZWN5Q29kZXMgfSBmcm9tIFwiLi9xdWVzdGlvbl9leHByZXNzaW9uXCI7XHJcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcclxuaW1wb3J0IHsgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UgfSBmcm9tIFwiLi9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2VcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU1hdHJpeENvbHVtbk93bmVyIGV4dGVuZHMgSUxvY2FsaXphYmxlT3duZXIge1xyXG4gIGdldFJlcXVpcmVkVGV4dCgpOiBzdHJpbmc7XHJcbiAgb25Db2x1bW5Qcm9wZXJ0eUNoYW5nZWQoXHJcbiAgICBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uLFxyXG4gICAgbmFtZTogc3RyaW5nLFxyXG4gICAgbmV3VmFsdWU6IGFueVxyXG4gICk6IHZvaWQ7XHJcbiAgb25Db2x1bW5JdGVtVmFsdWVQcm9wZXJ0eUNoYW5nZWQoXHJcbiAgICBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uLFxyXG4gICAgcHJvcGVydHlOYW1lOiBzdHJpbmcsXHJcbiAgICBvYmo6IEl0ZW1WYWx1ZSxcclxuICAgIG5hbWU6IHN0cmluZyxcclxuICAgIG5ld1ZhbHVlOiBhbnksXHJcbiAgICBvbGRWYWx1ZTogYW55XHJcbiAgKTogdm9pZDtcclxuICBvblNob3dJbk11bHRpcGxlQ29sdW1uc0NoYW5nZWQoY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IHZvaWQ7XHJcbiAgZ2V0Q2VsbFR5cGUoKTogc3RyaW5nO1xyXG4gIGdldEN1c3RvbUNlbGxUeXBlKGNvbHVtbjogTWF0cml4RHJvcGRvd25Db2x1bW4sIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsIGNlbGxUeXBlOiBzdHJpbmcpOiBzdHJpbmc7XHJcbiAgb25Db2x1bW5DZWxsVHlwZUNoYW5nZWQoY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbik6IHZvaWQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG9uVXBkYXRlU2VsZWN0QmFzZUNlbGxRdWVzdGlvbihcclxuICBjZWxsUXVlc3Rpb246IFF1ZXN0aW9uU2VsZWN0QmFzZSxcclxuICBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uLFxyXG4gIHF1ZXN0aW9uOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlLFxyXG4gIGRhdGE6IGFueVxyXG4pIHtcclxuICBjZWxsUXVlc3Rpb24uc3RvcmVPdGhlcnNBc0NvbW1lbnQgPSAhIXF1ZXN0aW9uXHJcbiAgICA/IHF1ZXN0aW9uLnN0b3JlT3RoZXJzQXNDb21tZW50XHJcbiAgICA6IGZhbHNlO1xyXG4gIGlmIChcclxuICAgICghY2VsbFF1ZXN0aW9uLmNob2ljZXMgfHwgY2VsbFF1ZXN0aW9uLmNob2ljZXMubGVuZ3RoID09IDApICYmXHJcbiAgICBjZWxsUXVlc3Rpb24uY2hvaWNlc0J5VXJsLmlzRW1wdHlcclxuICApIHtcclxuICAgIGNlbGxRdWVzdGlvbi5jaG9pY2VzID0gcXVlc3Rpb24uY2hvaWNlcztcclxuICB9XHJcbiAgaWYgKCFjZWxsUXVlc3Rpb24uY2hvaWNlc0J5VXJsLmlzRW1wdHkpIHtcclxuICAgIGNlbGxRdWVzdGlvbi5jaG9pY2VzQnlVcmwucnVuKGRhdGEuZ2V0VGV4dFByb2Nlc3NvcigpKTtcclxuICB9XHJcbn1cclxuZXhwb3J0IHZhciBtYXRyaXhEcm9wZG93bkNvbHVtblR5cGVzID0ge1xyXG4gIGRyb3Bkb3duOiB7XHJcbiAgICBwcm9wZXJ0aWVzOiBbXHJcbiAgICAgIFwiY2hvaWNlc1wiLFxyXG4gICAgICBcImNob2ljZXNPcmRlclwiLFxyXG4gICAgICBcImNob2ljZXNCeVVybFwiLFxyXG4gICAgICBcIm9wdGlvbnNDYXB0aW9uXCIsXHJcbiAgICAgIFwib3RoZXJUZXh0XCIsXHJcbiAgICAgIFwiY2hvaWNlc1Zpc2libGVJZlwiLFxyXG4gICAgXSxcclxuICAgIG9uQ2VsbFF1ZXN0aW9uVXBkYXRlOiAoXHJcbiAgICAgIGNlbGxRdWVzdGlvbjogYW55LFxyXG4gICAgICBjb2x1bW46IGFueSxcclxuICAgICAgcXVlc3Rpb246IGFueSxcclxuICAgICAgZGF0YTogYW55XHJcbiAgICApID0+IHtcclxuICAgICAgb25VcGRhdGVTZWxlY3RCYXNlQ2VsbFF1ZXN0aW9uKGNlbGxRdWVzdGlvbiwgY29sdW1uLCBxdWVzdGlvbiwgZGF0YSk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAhIWNlbGxRdWVzdGlvbi5sb2NPcHRpb25zQ2FwdGlvbiAmJlxyXG4gICAgICAgIGNlbGxRdWVzdGlvbi5sb2NPcHRpb25zQ2FwdGlvbi5pc0VtcHR5ICYmXHJcbiAgICAgICAgIXF1ZXN0aW9uLmxvY09wdGlvbnNDYXB0aW9uLmlzRW1wdHlcclxuICAgICAgKSB7XHJcbiAgICAgICAgY2VsbFF1ZXN0aW9uLm9wdGlvbnNDYXB0aW9uID0gcXVlc3Rpb24ub3B0aW9uc0NhcHRpb247XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgfSxcclxuICBjaGVja2JveDoge1xyXG4gICAgcHJvcGVydGllczogW1xyXG4gICAgICBcImNob2ljZXNcIixcclxuICAgICAgXCJjaG9pY2VzT3JkZXJcIixcclxuICAgICAgXCJjaG9pY2VzQnlVcmxcIixcclxuICAgICAgXCJvdGhlclRleHRcIixcclxuICAgICAgXCJjaG9pY2VzVmlzaWJsZUlmXCIsXHJcbiAgICAgIFwiaGFzU2VsZWN0QWxsXCIsXHJcbiAgICAgIFwiaGFzTm9uZVwiLFxyXG4gICAgXSxcclxuICAgIG9uQ2VsbFF1ZXN0aW9uVXBkYXRlOiAoXHJcbiAgICAgIGNlbGxRdWVzdGlvbjogYW55LFxyXG4gICAgICBjb2x1bW46IGFueSxcclxuICAgICAgcXVlc3Rpb246IGFueSxcclxuICAgICAgZGF0YTogYW55XHJcbiAgICApID0+IHtcclxuICAgICAgb25VcGRhdGVTZWxlY3RCYXNlQ2VsbFF1ZXN0aW9uKGNlbGxRdWVzdGlvbiwgY29sdW1uLCBxdWVzdGlvbiwgZGF0YSk7XHJcbiAgICAgIGNlbGxRdWVzdGlvbi5jb2xDb3VudCA9XHJcbiAgICAgICAgY29sdW1uLmNvbENvdW50ID4gLTEgPyBjb2x1bW4uY29sQ291bnQgOiBxdWVzdGlvbi5jb2x1bW5Db2xDb3VudDtcclxuICAgIH0sXHJcbiAgfSxcclxuICByYWRpb2dyb3VwOiB7XHJcbiAgICBwcm9wZXJ0aWVzOiBbXHJcbiAgICAgIFwiY2hvaWNlc1wiLFxyXG4gICAgICBcImNob2ljZXNPcmRlclwiLFxyXG4gICAgICBcImNob2ljZXNCeVVybFwiLFxyXG4gICAgICBcIm90aGVyVGV4dFwiLFxyXG4gICAgICBcImNob2ljZXNWaXNpYmxlSWZcIixcclxuICAgIF0sXHJcbiAgICBvbkNlbGxRdWVzdGlvblVwZGF0ZTogKFxyXG4gICAgICBjZWxsUXVlc3Rpb246IGFueSxcclxuICAgICAgY29sdW1uOiBhbnksXHJcbiAgICAgIHF1ZXN0aW9uOiBhbnksXHJcbiAgICAgIGRhdGE6IGFueVxyXG4gICAgKSA9PiB7XHJcbiAgICAgIG9uVXBkYXRlU2VsZWN0QmFzZUNlbGxRdWVzdGlvbihjZWxsUXVlc3Rpb24sIGNvbHVtbiwgcXVlc3Rpb24sIGRhdGEpO1xyXG4gICAgICBjZWxsUXVlc3Rpb24uY29sQ291bnQgPVxyXG4gICAgICAgIGNvbHVtbi5jb2xDb3VudCA+IC0xID8gY29sdW1uLmNvbENvdW50IDogcXVlc3Rpb24uY29sdW1uQ29sQ291bnQ7XHJcbiAgICB9LFxyXG4gIH0sXHJcbiAgdGV4dDoge1xyXG4gICAgcHJvcGVydGllczogW1wicGxhY2VIb2xkZXJcIiwgXCJpbnB1dFR5cGVcIiwgXCJtYXhMZW5ndGhcIiwgXCJtaW5cIiwgXCJtYXhcIiwgXCJzdGVwXCJdLFxyXG4gICAgb25DZWxsUXVlc3Rpb25VcGRhdGU6IChcclxuICAgICAgY2VsbFF1ZXN0aW9uOiBhbnksXHJcbiAgICAgIGNvbHVtbjogYW55LFxyXG4gICAgICBxdWVzdGlvbjogYW55LFxyXG4gICAgICBkYXRhOiBhbnlcclxuICAgICkgPT4geyB9LFxyXG4gIH0sXHJcbiAgY29tbWVudDoge1xyXG4gICAgcHJvcGVydGllczogW1wicGxhY2VIb2xkZXJcIiwgXCJyb3dzXCIsIFwibWF4TGVuZ3RoXCJdLFxyXG4gICAgb25DZWxsUXVlc3Rpb25VcGRhdGU6IChcclxuICAgICAgY2VsbFF1ZXN0aW9uOiBhbnksXHJcbiAgICAgIGNvbHVtbjogYW55LFxyXG4gICAgICBxdWVzdGlvbjogYW55LFxyXG4gICAgICBkYXRhOiBhbnlcclxuICAgICkgPT4geyB9LFxyXG4gIH0sXHJcbiAgYm9vbGVhbjoge1xyXG4gICAgcHJvcGVydGllczogW1wicmVuZGVyQXNcIiwgXCJkZWZhdWx0VmFsdWVcIl0sXHJcbiAgICBvbkNlbGxRdWVzdGlvblVwZGF0ZTogKFxyXG4gICAgICBjZWxsUXVlc3Rpb246IGFueSxcclxuICAgICAgY29sdW1uOiBhbnksXHJcbiAgICAgIHF1ZXN0aW9uOiBhbnksXHJcbiAgICAgIGRhdGE6IGFueVxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGNlbGxRdWVzdGlvbi5zaG93VGl0bGUgPSB0cnVlO1xyXG4gICAgICBjZWxsUXVlc3Rpb24ucmVuZGVyQXMgPSBjb2x1bW4ucmVuZGVyQXM7XHJcbiAgICB9LFxyXG4gIH0sXHJcbiAgZXhwcmVzc2lvbjoge1xyXG4gICAgcHJvcGVydGllczogW1wiZXhwcmVzc2lvblwiLCBcImRpc3BsYXlTdHlsZVwiLCBcImN1cnJlbmN5XCJdLFxyXG4gICAgb25DZWxsUXVlc3Rpb25VcGRhdGU6IChcclxuICAgICAgY2VsbFF1ZXN0aW9uOiBhbnksXHJcbiAgICAgIGNvbHVtbjogYW55LFxyXG4gICAgICBxdWVzdGlvbjogYW55LFxyXG4gICAgICBkYXRhOiBhbnlcclxuICAgICkgPT4geyB9LFxyXG4gIH0sXHJcbiAgcmF0aW5nOiB7XHJcbiAgICBwcm9wZXJ0aWVzOiBbXCJyYXRlVmFsdWVzXCJdLFxyXG4gIH0sXHJcbn07XHJcblxyXG5leHBvcnQgY2xhc3MgTWF0cml4RHJvcGRvd25Db2x1bW4gZXh0ZW5kcyBCYXNlXHJcbiAgaW1wbGVtZW50cyBJTG9jYWxpemFibGVPd25lciwgSVdyYXBwZXJPYmplY3Qge1xyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0Q29sdW1uVHlwZXMoKTogQXJyYXk8c3RyaW5nPiB7XHJcbiAgICB2YXIgcmVzID0gW107XHJcbiAgICBmb3IgKHZhciBrZXkgaW4gbWF0cml4RHJvcGRvd25Db2x1bW5UeXBlcykge1xyXG4gICAgICByZXMucHVzaChrZXkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcbiAgcHJpdmF0ZSB0ZW1wbGF0ZVF1ZXN0aW9uVmFsdWU6IFF1ZXN0aW9uO1xyXG4gIHByaXZhdGUgY29sT3duZXJWYWx1ZTogSU1hdHJpeENvbHVtbk93bmVyID0gbnVsbDtcclxuICBwcml2YXRlIGluZGV4VmFsdWUgPSAtMTtcclxuICBwcml2YXRlIF9pc1Zpc2libGUgPSB0cnVlO1xyXG4gIHByaXZhdGUgX2hhc1Zpc2libGVDZWxsID0gdHJ1ZTtcclxuXHJcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nLCB0aXRsZTogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJ0b3RhbEZvcm1hdFwiLCB0aGlzKTtcclxuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXHJcbiAgICAgIFwic2hvd0luTXVsdGlwbGVDb2x1bW5zXCIsXHJcbiAgICAgIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBzZWxmLmRvU2hvd0luTXVsdGlwbGVDb2x1bW5zQ2hhbmdlZCgpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgdGhpcy51cGRhdGVUZW1wbGF0ZVF1ZXN0aW9uKCk7XHJcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgaWYgKHRpdGxlKSB7XHJcbiAgICAgIHRoaXMudGl0bGUgPSB0aXRsZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5sb2NUaXRsZS5zdHJDaGFuZ2VkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXRPcmlnaW5hbE9iaigpOiBCYXNlIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb247XHJcbiAgfVxyXG4gIGdldENsYXNzTmFtZVByb3BlcnR5KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gXCJjZWxsVHlwZVwiO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0U3VydmV5KGxpdmU6IGJvb2xlYW4gPSBmYWxzZSk6IElTdXJ2ZXkge1xyXG4gICAgcmV0dXJuICEhdGhpcy5jb2xPd25lciA/ICg8YW55PnRoaXMuY29sT3duZXIpLnN1cnZleSA6IG51bGw7XHJcbiAgfVxyXG4gIGVuZExvYWRpbmdGcm9tSnNvbigpIHtcclxuICAgIHN1cGVyLmVuZExvYWRpbmdGcm9tSnNvbigpO1xyXG4gICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmVuZExvYWRpbmdGcm9tSnNvbigpO1xyXG4gICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLm9uR2V0U3VydmV5ID0gKCkgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRTdXJ2ZXkoKTtcclxuICAgIH07XHJcbiAgfVxyXG4gIGdldER5bmFtaWNQcm9wZXJ0eU5hbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBcImNlbGxUeXBlXCI7XHJcbiAgfVxyXG4gIGdldER5bmFtaWNUeXBlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5jYWxjQ2VsbFF1ZXN0aW9uVHlwZShudWxsKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBjb2xPd25lcigpOiBJTWF0cml4Q29sdW1uT3duZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuY29sT3duZXJWYWx1ZTtcclxuICB9XHJcbiAgcHVibGljIHNldCBjb2xPd25lcih2YWx1ZTogSU1hdHJpeENvbHVtbk93bmVyKSB7XHJcbiAgICB0aGlzLmNvbE93bmVyVmFsdWUgPSB2YWx1ZTtcclxuICAgIGlmICghIXZhbHVlKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlVGVtcGxhdGVRdWVzdGlvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwdWJsaWMgbG9jU3Ryc0NoYW5nZWQoKSB7XHJcbiAgICBzdXBlci5sb2NTdHJzQ2hhbmdlZCgpO1xyXG4gICAgdGhpcy5sb2NUaXRsZS5zdHJDaGFuZ2VkKCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBhZGRVc2VkTG9jYWxlcyhsb2NhbGVzOiBBcnJheTxzdHJpbmc+KSB7XHJcbiAgICBzdXBlci5hZGRVc2VkTG9jYWxlcyhsb2NhbGVzKTtcclxuICAgIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5hZGRVc2VkTG9jYWxlcyhsb2NhbGVzKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBpbmRleCgpIHtcclxuICAgIHJldHVybiB0aGlzLmluZGV4VmFsdWU7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXRJbmRleCh2YWw6IG51bWJlcikge1xyXG4gICAgdGhpcy5pbmRleFZhbHVlID0gdmFsO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0VHlwZSgpIHtcclxuICAgIHJldHVybiBcIm1hdHJpeGRyb3Bkb3duY29sdW1uXCI7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgY2VsbFR5cGUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjZWxsVHlwZVwiKTtcclxuICB9XHJcbiAgcHVibGljIHNldCBjZWxsVHlwZSh2YWw6IHN0cmluZykge1xyXG4gICAgdmFsID0gdmFsLnRvTG9jYWxlTG93ZXJDYXNlKCk7XHJcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjZWxsVHlwZVwiLCB2YWwpO1xyXG4gICAgdGhpcy51cGRhdGVUZW1wbGF0ZVF1ZXN0aW9uKCk7XHJcbiAgICBpZiAoISF0aGlzLmNvbE93bmVyKSB7XHJcbiAgICAgIHRoaXMuY29sT3duZXIub25Db2x1bW5DZWxsVHlwZUNoYW5nZWQodGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgdGVtcGxhdGVRdWVzdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb25WYWx1ZTtcclxuICB9XHJcbiAgcHVibGljIGdldCB2YWx1ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ubmFtZTtcclxuICB9XHJcbiAgcHVibGljIGdldCBpc1Zpc2libGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNWaXNpYmxlO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0SXNWaXNpYmxlKG5ld1ZhbDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5faXNWaXNpYmxlID0gbmV3VmFsO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGhhc1Zpc2libGVDZWxsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2hhc1Zpc2libGVDZWxsO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGhhc1Zpc2libGVDZWxsKG5ld1ZhbDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5faGFzVmlzaWJsZUNlbGwgPSBuZXdWYWw7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgbmFtZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ubmFtZTtcclxuICB9XHJcbiAgcHVibGljIHNldCBuYW1lKHZhbDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ubmFtZSA9IHZhbDtcclxuICB9XHJcbiAgcHVibGljIGdldCB0aXRsZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbi50aXRsZTtcclxuICB9XHJcbiAgcHVibGljIHNldCB0aXRsZSh2YWw6IHN0cmluZykge1xyXG4gICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLnRpdGxlID0gdmFsO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGxvY1RpdGxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5sb2NUaXRsZTtcclxuICB9XHJcbiAgcHVibGljIGdldCBmdWxsVGl0bGUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmxvY1RpdGxlLnRleHRPckh0bWw7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgaXNSZXF1aXJlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb24uaXNSZXF1aXJlZDtcclxuICB9XHJcbiAgcHVibGljIHNldCBpc1JlcXVpcmVkKHZhbDogYm9vbGVhbikge1xyXG4gICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmlzUmVxdWlyZWQgPSB2YWw7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgcmVxdWlyZWRUZXh0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLnJlcXVpcmVkVGV4dDtcclxuICB9XHJcbiAgcHVibGljIGdldCByZXF1aXJlZEVycm9yVGV4dCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5yZXF1aXJlZEVycm9yVGV4dDtcclxuICB9XHJcbiAgcHVibGljIHNldCByZXF1aXJlZEVycm9yVGV4dCh2YWw6IHN0cmluZykge1xyXG4gICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLnJlcXVpcmVkRXJyb3JUZXh0ID0gdmFsO1xyXG4gIH1cclxuICBnZXQgbG9jUmVxdWlyZWRFcnJvclRleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5sb2NSZXF1aXJlZEVycm9yVGV4dDtcclxuICB9XHJcbiAgcHVibGljIGdldCByZWFkT25seSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ucmVhZE9ubHk7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgcmVhZE9ubHkodmFsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ucmVhZE9ubHkgPSB2YWw7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgaGFzT3RoZXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmhhc090aGVyO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGhhc090aGVyKHZhbDogYm9vbGVhbikge1xyXG4gICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmhhc090aGVyID0gdmFsO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IHZpc2libGVJZigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbi52aXNpYmxlSWY7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgdmlzaWJsZUlmKHZhbDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24udmlzaWJsZUlmID0gdmFsO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGVuYWJsZUlmKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmVuYWJsZUlmO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGVuYWJsZUlmKHZhbDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24uZW5hYmxlSWYgPSB2YWw7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgcmVxdWlyZWRJZigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5yZXF1aXJlZElmO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IHJlcXVpcmVkSWYodmFsOiBzdHJpbmcpIHtcclxuICAgIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5yZXF1aXJlZElmID0gdmFsO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGlzVW5pcXVlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzVW5pcXVlXCIpO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGlzVW5pcXVlKHZhbDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNVbmlxdWVcIiwgdmFsKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBzaG93SW5NdWx0aXBsZUNvbHVtbnMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd0luTXVsdGlwbGVDb2x1bW5zXCIsIGZhbHNlKTtcclxuICB9XHJcbiAgcHVibGljIHNldCBzaG93SW5NdWx0aXBsZUNvbHVtbnModmFsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93SW5NdWx0aXBsZUNvbHVtbnNcIiwgdmFsKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBpc1N1cHBvcnRNdWx0aXBsZUNvbHVtbnMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gW1wiY2hlY2tib3hcIiwgXCJyYWRpb2dyb3VwXCJdLmluZGV4T2YodGhpcy5jZWxsVHlwZSkgPiAtMTtcclxuICB9XHJcbiAgcHVibGljIGdldCBpc1Nob3dJbk11bHRpcGxlQ29sdW1ucygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnNob3dJbk11bHRpcGxlQ29sdW1ucyAmJiB0aGlzLmlzU3VwcG9ydE11bHRpcGxlQ29sdW1ucztcclxuICB9XHJcbiAgcHVibGljIGdldCB2YWxpZGF0b3JzKCk6IEFycmF5PFN1cnZleVZhbGlkYXRvcj4ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVRdWVzdGlvbi52YWxpZGF0b3JzO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IHZhbGlkYXRvcnModmFsOiBBcnJheTxTdXJ2ZXlWYWxpZGF0b3I+KSB7XHJcbiAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24udmFsaWRhdG9ycyA9IHZhbDtcclxuICB9XHJcbiAgcHVibGljIGdldCB0b3RhbFR5cGUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ0b3RhbFR5cGVcIik7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgdG90YWxUeXBlKHZhbDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ0b3RhbFR5cGVcIiwgdmFsKTtcclxuICB9XHJcbiAgcHVibGljIGdldCB0b3RhbEV4cHJlc3Npb24oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ0b3RhbEV4cHJlc3Npb25cIik7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgdG90YWxFeHByZXNzaW9uKHZhbDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ0b3RhbEV4cHJlc3Npb25cIiwgdmFsKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBoYXNUb3RhbCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnRvdGFsVHlwZSAhPSBcIm5vbmVcIiB8fCAhIXRoaXMudG90YWxFeHByZXNzaW9uO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IHRvdGFsRm9ybWF0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJ0b3RhbEZvcm1hdFwiLCBcIlwiKTtcclxuICB9XHJcbiAgcHVibGljIHNldCB0b3RhbEZvcm1hdCh2YWw6IHN0cmluZykge1xyXG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJ0b3RhbEZvcm1hdFwiLCB2YWwpO1xyXG4gIH1cclxuICBnZXQgbG9jVG90YWxGb3JtYXQoKTogTG9jYWxpemFibGVTdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJ0b3RhbEZvcm1hdFwiKTtcclxuICB9XHJcbiAgcHVibGljIGdldCByZW5kZXJBcygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJlbmRlckFzXCIpO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IHJlbmRlckFzKHZhbDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJBc1wiLCB2YWwpO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IHRvdGFsTWF4aW11bUZyYWN0aW9uRGlnaXRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidG90YWxNYXhpbXVtRnJhY3Rpb25EaWdpdHNcIik7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgdG90YWxNYXhpbXVtRnJhY3Rpb25EaWdpdHModmFsOiBudW1iZXIpIHtcclxuICAgIGlmICh2YWwgPCAtMSB8fCB2YWwgPiAyMCkgcmV0dXJuO1xyXG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidG90YWxNYXhpbXVtRnJhY3Rpb25EaWdpdHNcIiwgdmFsKTtcclxuICB9XHJcbiAgcHVibGljIGdldCB0b3RhbE1pbmltdW1GcmFjdGlvbkRpZ2l0cygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInRvdGFsTWluaW11bUZyYWN0aW9uRGlnaXRzXCIpO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IHRvdGFsTWluaW11bUZyYWN0aW9uRGlnaXRzKHZhbDogbnVtYmVyKSB7XHJcbiAgICBpZiAodmFsIDwgLTEgfHwgdmFsID4gMjApIHJldHVybjtcclxuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInRvdGFsTWluaW11bUZyYWN0aW9uRGlnaXRzXCIsIHZhbCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgdG90YWxEaXNwbGF5U3R5bGUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ0b3RhbERpc3BsYXlTdHlsZVwiKTtcclxuICB9XHJcbiAgcHVibGljIHNldCB0b3RhbERpc3BsYXlTdHlsZSh2YWw6IHN0cmluZykge1xyXG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidG90YWxEaXNwbGF5U3R5bGVcIiwgdmFsKTtcclxuICB9XHJcbiAgcHVibGljIGdldCB0b3RhbEN1cnJlbmN5KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidG90YWxDdXJyZW5jeVwiKTtcclxuICB9XHJcbiAgcHVibGljIHNldCB0b3RhbEN1cnJlbmN5KHZhbDogc3RyaW5nKSB7XHJcbiAgICBpZiAoZ2V0Q3VycmVjeUNvZGVzKCkuaW5kZXhPZih2YWwpIDwgMCkgcmV0dXJuO1xyXG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidG90YWxDdXJyZW5jeVwiLCB2YWwpO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IG1pbldpZHRoKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWluV2lkdGhcIiwgXCJcIik7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgbWluV2lkdGgodmFsOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1pbldpZHRoXCIsIHZhbCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgd2lkdGgoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJ3aWR0aFwiLCBcIlwiKTtcclxuICB9XHJcbiAgcHVibGljIHNldCB3aWR0aCh2YWw6IHN0cmluZykge1xyXG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwid2lkdGhcIiwgdmFsKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBjb2xDb3VudCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvbENvdW50XCIpO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGNvbENvdW50KHZhbDogbnVtYmVyKSB7XHJcbiAgICBpZiAodmFsIDwgLTEgfHwgdmFsID4gNCkgcmV0dXJuO1xyXG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29sQ291bnRcIiwgdmFsKTtcclxuICB9XHJcbiAgcHVibGljIGdldExvY2FsZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuY29sT3duZXIgPyB0aGlzLmNvbE93bmVyLmdldExvY2FsZSgpIDogXCJcIjtcclxuICB9XHJcbiAgcHVibGljIGdldE1hcmtkb3duSHRtbCh0ZXh0OiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5jb2xPd25lciA/IHRoaXMuY29sT3duZXIuZ2V0TWFya2Rvd25IdG1sKHRleHQsIG5hbWUpIDogbnVsbDtcclxuICB9XHJcbiAgcHVibGljIGdldFJlbmRlcmVyKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gISF0aGlzLmNvbE93bmVyID8gdGhpcy5jb2xPd25lci5nZXRSZW5kZXJlcihuYW1lKSA6IG51bGw7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXRSZW5kZXJlckNvbnRleHQobG9jU3RyOiBMb2NhbGl6YWJsZVN0cmluZyk6IGFueSB7XHJcbiAgICByZXR1cm4gISF0aGlzLmNvbE93bmVyID8gdGhpcy5jb2xPd25lci5nZXRSZW5kZXJlckNvbnRleHQobG9jU3RyKSA6IGxvY1N0cjtcclxuICB9XHJcbiAgcHVibGljIGdldFByb2Nlc3NlZFRleHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmNvbE93bmVyID8gdGhpcy5jb2xPd25lci5nZXRQcm9jZXNzZWRUZXh0KHRleHQpIDogdGV4dDtcclxuICB9XHJcbiAgcHVibGljIGNyZWF0ZUNlbGxRdWVzdGlvbihyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKTogUXVlc3Rpb24ge1xyXG4gICAgdmFyIHFUeXBlID0gdGhpcy5jYWxjQ2VsbFF1ZXN0aW9uVHlwZShyb3cpO1xyXG4gICAgdmFyIGNlbGxRdWVzdGlvbiA9IDxRdWVzdGlvbj50aGlzLmNyZWF0ZU5ld1F1ZXN0aW9uKHFUeXBlKTtcclxuICAgIHRoaXMuY2FsbE9uQ2VsbFF1ZXN0aW9uVXBkYXRlKGNlbGxRdWVzdGlvbiwgcm93KTtcclxuICAgIHJldHVybiBjZWxsUXVlc3Rpb247XHJcbiAgfVxyXG4gIHB1YmxpYyB1cGRhdGVDZWxsUXVlc3Rpb24oXHJcbiAgICBjZWxsUXVlc3Rpb246IFF1ZXN0aW9uLFxyXG4gICAgZGF0YTogYW55LFxyXG4gICAgb25VcGRhdGVKc29uOiAoanNvbjogYW55KSA9PiBhbnkgPSBudWxsXHJcbiAgKSB7XHJcbiAgICB0aGlzLnNldFF1ZXN0aW9uUHJvcGVydGllcyhjZWxsUXVlc3Rpb24sIG9uVXBkYXRlSnNvbik7XHJcbiAgICB0aGlzLmNhbGxPbkNlbGxRdWVzdGlvblVwZGF0ZShjZWxsUXVlc3Rpb24sIGRhdGEpO1xyXG4gIH1cclxuICBwcml2YXRlIGNhbGxPbkNlbGxRdWVzdGlvblVwZGF0ZShjZWxsUXVlc3Rpb246IFF1ZXN0aW9uLCBkYXRhOiBhbnkpIHtcclxuICAgIHZhciBxVHlwZSA9IGNlbGxRdWVzdGlvbi5nZXRUeXBlKCk7XHJcbiAgICB2YXIgcURlZmluaXRpb24gPSAoPGFueT5tYXRyaXhEcm9wZG93bkNvbHVtblR5cGVzKVtxVHlwZV07XHJcbiAgICBpZiAocURlZmluaXRpb24gJiYgcURlZmluaXRpb25bXCJvbkNlbGxRdWVzdGlvblVwZGF0ZVwiXSkge1xyXG4gICAgICBxRGVmaW5pdGlvbltcIm9uQ2VsbFF1ZXN0aW9uVXBkYXRlXCJdKFxyXG4gICAgICAgIGNlbGxRdWVzdGlvbixcclxuICAgICAgICB0aGlzLFxyXG4gICAgICAgIHRoaXMuY29sT3duZXIsXHJcbiAgICAgICAgZGF0YVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuICBkZWZhdWx0Q2VsbFR5cGVDaGFuZ2VkKCkge1xyXG4gICAgdGhpcy51cGRhdGVUZW1wbGF0ZVF1ZXN0aW9uKCk7XHJcbiAgfVxyXG4gIHByb3RlY3RlZCBjYWxjQ2VsbFF1ZXN0aW9uVHlwZShyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKTogc3RyaW5nIHtcclxuICAgIGxldCBjZWxsVHlwZSA9IHRoaXMuZ2V0RGVmYXVsdENlbGxRdWVzdGlvblR5cGUoKTtcclxuICAgIGlmICghIXJvdyAmJiAhIXRoaXMuY29sT3duZXIpIHtcclxuICAgICAgY2VsbFR5cGUgPSB0aGlzLmNvbE93bmVyLmdldEN1c3RvbUNlbGxUeXBlKHRoaXMsIHJvdywgY2VsbFR5cGUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNlbGxUeXBlO1xyXG4gIH1cclxuICBwcml2YXRlIGdldERlZmF1bHRDZWxsUXVlc3Rpb25UeXBlKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5jZWxsVHlwZSAhPT0gXCJkZWZhdWx0XCIpIHJldHVybiB0aGlzLmNlbGxUeXBlO1xyXG4gICAgaWYgKHRoaXMuY29sT3duZXIpIHJldHVybiB0aGlzLmNvbE93bmVyLmdldENlbGxUeXBlKCk7XHJcbiAgICByZXR1cm4gc2V0dGluZ3MubWF0cml4RGVmYXVsdENlbGxUeXBlO1xyXG4gIH1cclxuICBwcm90ZWN0ZWQgdXBkYXRlVGVtcGxhdGVRdWVzdGlvbigpIHtcclxuICAgIHZhciBwcmV2Q2VsbFR5cGUgPSB0aGlzLnRlbXBsYXRlUXVlc3Rpb25cclxuICAgICAgPyB0aGlzLnRlbXBsYXRlUXVlc3Rpb24uZ2V0VHlwZSgpXHJcbiAgICAgIDogXCJcIjtcclxuICAgIHZhciBjdXJDZWxsVHlwZSA9IHRoaXMuY2FsY0NlbGxRdWVzdGlvblR5cGUobnVsbCk7XHJcbiAgICBpZiAoY3VyQ2VsbFR5cGUgPT09IHByZXZDZWxsVHlwZSkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMudGVtcGxhdGVRdWVzdGlvbikge1xyXG4gICAgICB0aGlzLnJlbW92ZVByb3BlcnRpZXMocHJldkNlbGxUeXBlKTtcclxuICAgIH1cclxuICAgIHRoaXMudGVtcGxhdGVRdWVzdGlvblZhbHVlID0gdGhpcy5jcmVhdGVOZXdRdWVzdGlvbihjdXJDZWxsVHlwZSk7XHJcbiAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24ubG9jT3duZXIgPSB0aGlzO1xyXG4gICAgdGhpcy5hZGRQcm9wZXJ0aWVzKGN1ckNlbGxUeXBlKTtcclxuICAgIHRoaXMudGVtcGxhdGVRdWVzdGlvbi5vblByb3BlcnR5Q2hhbmdlZC5hZGQoKHNlbmRlciwgb3B0aW9ucykgPT4ge1xyXG4gICAgICB0aGlzLnByb3BlcnR5VmFsdWVDaGFuZ2VkKFxyXG4gICAgICAgIG9wdGlvbnMubmFtZSxcclxuICAgICAgICBvcHRpb25zLm9sZFZhbHVlLFxyXG4gICAgICAgIG9wdGlvbnMubmV3VmFsdWVcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLm9uSXRlbVZhbHVlUHJvcGVydHlDaGFuZ2VkLmFkZCgoc2VuZGVyLCBvcHRpb25zKSA9PiB7XHJcbiAgICAgIHRoaXMuZG9JdGVtVmFsdWVQcm9wZXJ0eUNoYW5nZWQoXHJcbiAgICAgICAgb3B0aW9ucy5wcm9wZXJ0eU5hbWUsXHJcbiAgICAgICAgb3B0aW9ucy5vYmosXHJcbiAgICAgICAgb3B0aW9ucy5uYW1lLFxyXG4gICAgICAgIG9wdGlvbnMubmV3VmFsdWUsXHJcbiAgICAgICAgb3B0aW9ucy5vbGRWYWx1ZVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnRlbXBsYXRlUXVlc3Rpb24uaXNDb250ZW50RWxlbWVudCA9IHRydWU7XHJcbiAgICBpZiAoIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHtcclxuICAgICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLm9uR2V0U3VydmV5ID0gKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFN1cnZleSgpO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmxvY1RpdGxlLnN0ckNoYW5nZWQoKTtcclxuICB9XHJcbiAgcHJvdGVjdGVkIGNyZWF0ZU5ld1F1ZXN0aW9uKGNlbGxUeXBlOiBzdHJpbmcpOiBRdWVzdGlvbiB7XHJcbiAgICB2YXIgcXVlc3Rpb24gPSA8UXVlc3Rpb24+U2VyaWFsaXplci5jcmVhdGVDbGFzcyhjZWxsVHlwZSk7XHJcbiAgICBpZiAoIXF1ZXN0aW9uKSB7XHJcbiAgICAgIHF1ZXN0aW9uID0gPFF1ZXN0aW9uPlNlcmlhbGl6ZXIuY3JlYXRlQ2xhc3MoXCJ0ZXh0XCIpO1xyXG4gICAgfVxyXG4gICAgcXVlc3Rpb24ubG9hZGluZ093bmVyID0gdGhpcztcclxuICAgIHF1ZXN0aW9uLmlzRWRpdGFibGVUZW1wbGF0ZUVsZW1lbnQgPSB0cnVlO1xyXG4gICAgdGhpcy5zZXRRdWVzdGlvblByb3BlcnRpZXMocXVlc3Rpb24pO1xyXG4gICAgcmV0dXJuIHF1ZXN0aW9uO1xyXG4gIH1cclxuICBwcm90ZWN0ZWQgc2V0UXVlc3Rpb25Qcm9wZXJ0aWVzKFxyXG4gICAgcXVlc3Rpb246IFF1ZXN0aW9uLFxyXG4gICAgb25VcGRhdGVKc29uOiAoanNvbjogYW55KSA9PiBhbnkgPSBudWxsXHJcbiAgKSB7XHJcbiAgICBpZiAodGhpcy50ZW1wbGF0ZVF1ZXN0aW9uKSB7XHJcbiAgICAgIHZhciBqc29uID0gbmV3IEpzb25PYmplY3QoKS50b0pzb25PYmplY3QodGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLCB0cnVlKTtcclxuICAgICAgaWYgKG9uVXBkYXRlSnNvbikge1xyXG4gICAgICAgIG9uVXBkYXRlSnNvbihqc29uKTtcclxuICAgICAgfVxyXG4gICAgICBqc29uLnR5cGUgPSBxdWVzdGlvbi5nZXRUeXBlKCk7XHJcbiAgICAgIG5ldyBKc29uT2JqZWN0KCkudG9PYmplY3QoanNvbiwgcXVlc3Rpb24pO1xyXG4gICAgICBxdWVzdGlvbi5pc0NvbnRlbnRFbGVtZW50ID0gdGhpcy50ZW1wbGF0ZVF1ZXN0aW9uLmlzQ29udGVudEVsZW1lbnQ7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByb3RlY3RlZCBwcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lOiBzdHJpbmcsIG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgIHN1cGVyLnByb3BlcnR5VmFsdWVDaGFuZ2VkKG5hbWUsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7XHJcbiAgICBpZiAoIVNlcmlhbGl6ZXIuaGFzT3JpZ2luYWxQcm9wZXJ0eSh0aGlzLCBuYW1lKSkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuY29sT3duZXIgIT0gbnVsbCAmJiAhdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikge1xyXG4gICAgICB0aGlzLmNvbE93bmVyLm9uQ29sdW1uUHJvcGVydHlDaGFuZ2VkKHRoaXMsIG5hbWUsIG5ld1ZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBkb0l0ZW1WYWx1ZVByb3BlcnR5Q2hhbmdlZChcclxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nLFxyXG4gICAgb2JqOiBJdGVtVmFsdWUsXHJcbiAgICBuYW1lOiBzdHJpbmcsXHJcbiAgICBuZXdWYWx1ZTogYW55LFxyXG4gICAgb2xkVmFsdWU6IGFueVxyXG4gICkge1xyXG4gICAgaWYgKCFTZXJpYWxpemVyLmhhc09yaWdpbmFsUHJvcGVydHkob2JqLCBuYW1lKSkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMuY29sT3duZXIgIT0gbnVsbCAmJiAhdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikge1xyXG4gICAgICB0aGlzLmNvbE93bmVyLm9uQ29sdW1uSXRlbVZhbHVlUHJvcGVydHlDaGFuZ2VkKFxyXG4gICAgICAgIHRoaXMsXHJcbiAgICAgICAgcHJvcGVydHlOYW1lLFxyXG4gICAgICAgIG9iaixcclxuICAgICAgICBuYW1lLFxyXG4gICAgICAgIG5ld1ZhbHVlLFxyXG4gICAgICAgIG9sZFZhbHVlXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRvU2hvd0luTXVsdGlwbGVDb2x1bW5zQ2hhbmdlZCgpIHtcclxuICAgIGlmICh0aGlzLmNvbE93bmVyICE9IG51bGwgJiYgIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHtcclxuICAgICAgdGhpcy5jb2xPd25lci5vblNob3dJbk11bHRpcGxlQ29sdW1uc0NoYW5nZWQodGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgZ2V0UHJvcGVydGllcyhjdXJDZWxsVHlwZTogc3RyaW5nKTogQXJyYXk8SnNvbk9iamVjdFByb3BlcnR5PiB7XHJcbiAgICByZXR1cm4gU2VyaWFsaXplci5nZXREeW5hbWljUHJvcGVydGllc0J5T2JqKHRoaXMsIGN1ckNlbGxUeXBlKTtcclxuICB9XHJcbiAgcHJpdmF0ZSByZW1vdmVQcm9wZXJ0aWVzKGN1ckNlbGxUeXBlOiBzdHJpbmcpIHtcclxuICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5nZXRQcm9wZXJ0aWVzKGN1ckNlbGxUeXBlKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICB2YXIgcHJvcCA9IHByb3BlcnRpZXNbaV07XHJcbiAgICAgIGRlbGV0ZSAoPGFueT50aGlzKVtwcm9wLm5hbWVdO1xyXG4gICAgICBpZiAocHJvcC5zZXJpYWxpemF0aW9uUHJvcGVydHkpIHtcclxuICAgICAgICBkZWxldGUgKDxhbnk+dGhpcylbcHJvcC5zZXJpYWxpemF0aW9uUHJvcGVydHldO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgYWRkUHJvcGVydGllcyhjdXJDZWxsVHlwZTogc3RyaW5nKSB7XHJcbiAgICB2YXIgcXVlc3Rpb24gPSB0aGlzLnRlbXBsYXRlUXVlc3Rpb247XHJcbiAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMuZ2V0UHJvcGVydGllcyhjdXJDZWxsVHlwZSk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdmFyIHByb3AgPSBwcm9wZXJ0aWVzW2ldO1xyXG4gICAgICB0aGlzLmFkZFByb3BlcnR5KHF1ZXN0aW9uLCBwcm9wLm5hbWUsIGZhbHNlKTtcclxuICAgICAgaWYgKHByb3Auc2VyaWFsaXphdGlvblByb3BlcnR5KSB7XHJcbiAgICAgICAgdGhpcy5hZGRQcm9wZXJ0eShxdWVzdGlvbiwgcHJvcC5zZXJpYWxpemF0aW9uUHJvcGVydHksIHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgYWRkUHJvcGVydHkoXHJcbiAgICBxdWVzdGlvbjogUXVlc3Rpb24sXHJcbiAgICBwcm9wTmFtZTogc3RyaW5nLFxyXG4gICAgaXNSZWFkT25seTogYm9vbGVhblxyXG4gICkge1xyXG4gICAgdmFyIGRlc2MgPSB7XHJcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcclxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuICg8YW55PnF1ZXN0aW9uKVtwcm9wTmFtZV07XHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gICAgaWYgKCFpc1JlYWRPbmx5KSB7XHJcbiAgICAgICg8YW55PmRlc2MpW1wic2V0XCJdID0gZnVuY3Rpb24gKHY6IGFueSkge1xyXG4gICAgICAgICg8YW55PnF1ZXN0aW9uKVtwcm9wTmFtZV0gPSB2O1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIHByb3BOYW1lLCBkZXNjKTtcclxuICB9XHJcbn1cclxuXHJcblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXHJcbiAgXCJtYXRyaXhkcm9wZG93bmNvbHVtblwiLFxyXG4gIFtcclxuICAgIHsgbmFtZTogXCIhbmFtZVwiLCBpc1VuaXF1ZTogdHJ1ZSB9LFxyXG4gICAgeyBuYW1lOiBcInRpdGxlXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NUaXRsZVwiIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6IFwiY2VsbFR5cGVcIixcclxuICAgICAgZGVmYXVsdDogXCJkZWZhdWx0XCIsXHJcbiAgICAgIGNob2ljZXM6ICgpID0+IHtcclxuICAgICAgICB2YXIgcmVzID0gTWF0cml4RHJvcGRvd25Db2x1bW4uZ2V0Q29sdW1uVHlwZXMoKTtcclxuICAgICAgICByZXMuc3BsaWNlKDAsIDAsIFwiZGVmYXVsdFwiKTtcclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICAgIHsgbmFtZTogXCJjb2xDb3VudFwiLCBkZWZhdWx0OiAtMSwgY2hvaWNlczogWy0xLCAwLCAxLCAyLCAzLCA0XSB9LFxyXG4gICAgXCJpc1JlcXVpcmVkOmJvb2xlYW5cIixcclxuICAgIFwiaXNVbmlxdWU6Ym9vbGVhblwiLFxyXG4gICAge1xyXG4gICAgICBuYW1lOiBcInJlcXVpcmVkRXJyb3JUZXh0OnRleHRcIixcclxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1JlcXVpcmVkRXJyb3JUZXh0XCIsXHJcbiAgICB9LFxyXG4gICAgXCJyZWFkT25seTpib29sZWFuXCIsXHJcbiAgICBcIm1pbldpZHRoXCIsXHJcbiAgICBcIndpZHRoXCIsXHJcbiAgICBcInZpc2libGVJZjpjb25kaXRpb25cIixcclxuICAgIFwiZW5hYmxlSWY6Y29uZGl0aW9uXCIsXHJcbiAgICBcInJlcXVpcmVkSWY6Y29uZGl0aW9uXCIsXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6IFwic2hvd0luTXVsdGlwbGVDb2x1bW5zOmJvb2xlYW5cIixcclxuICAgICAgZGVwZW5kc09uOiBcImNlbGxUeXBlXCIsXHJcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24gKG9iajogYW55KSB7XHJcbiAgICAgICAgaWYgKCFvYmopIHJldHVybiBmYWxzZTtcclxuICAgICAgICByZXR1cm4gb2JqLmlzU3VwcG9ydE11bHRpcGxlQ29sdW1ucztcclxuICAgICAgfSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6IFwidmFsaWRhdG9yczp2YWxpZGF0b3JzXCIsXHJcbiAgICAgIGJhc2VDbGFzc05hbWU6IFwic3VydmV5dmFsaWRhdG9yXCIsXHJcbiAgICAgIGNsYXNzTmFtZVBhcnQ6IFwidmFsaWRhdG9yXCIsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiBcInRvdGFsVHlwZVwiLFxyXG4gICAgICBkZWZhdWx0OiBcIm5vbmVcIixcclxuICAgICAgY2hvaWNlczogW1wibm9uZVwiLCBcInN1bVwiLCBcImNvdW50XCIsIFwibWluXCIsIFwibWF4XCIsIFwiYXZnXCJdLFxyXG4gICAgfSxcclxuICAgIFwidG90YWxFeHByZXNzaW9uOmV4cHJlc3Npb25cIixcclxuICAgIHsgbmFtZTogXCJ0b3RhbEZvcm1hdFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jVG90YWxGb3JtYXRcIiB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiBcInRvdGFsRGlzcGxheVN0eWxlXCIsXHJcbiAgICAgIGRlZmF1bHQ6IFwibm9uZVwiLFxyXG4gICAgICBjaG9pY2VzOiBbXCJub25lXCIsIFwiZGVjaW1hbFwiLCBcImN1cnJlbmN5XCIsIFwicGVyY2VudFwiXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6IFwidG90YWxDdXJyZW5jeVwiLFxyXG4gICAgICBjaG9pY2VzOiAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGdldEN1cnJlY3lDb2RlcygpO1xyXG4gICAgICB9LFxyXG4gICAgICBkZWZhdWx0OiBcIlVTRFwiLFxyXG4gICAgfSxcclxuICAgIHsgbmFtZTogXCJ0b3RhbE1heGltdW1GcmFjdGlvbkRpZ2l0czpudW1iZXJcIiwgZGVmYXVsdDogLTEgfSxcclxuICAgIHsgbmFtZTogXCJ0b3RhbE1pbmltdW1GcmFjdGlvbkRpZ2l0czpudW1iZXJcIiwgZGVmYXVsdDogLTEgfSxcclxuICAgIHsgbmFtZTogXCJyZW5kZXJBc1wiLCBkZWZhdWx0OiBcImRlZmF1bHRcIiwgdmlzaWJsZTogZmFsc2UgfSxcclxuICBdLFxyXG4gIGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiBuZXcgTWF0cml4RHJvcGRvd25Db2x1bW4oXCJcIik7XHJcbiAgfVxyXG4pO1xyXG4iLCJpbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xyXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZVwiO1xyXG5pbXBvcnQgeyBJdGVtVmFsdWUgfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcclxuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xyXG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XHJcbmltcG9ydCB7IFBhbmVsTW9kZWwgfSBmcm9tIFwiLi9wYW5lbFwiO1xyXG5pbXBvcnQgeyBBY3Rpb24sIElBY3Rpb24gfSBmcm9tIFwiLi9hY3Rpb25zL2FjdGlvblwiO1xyXG5pbXBvcnQgeyBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lciB9IGZyb20gXCIuL2FjdGlvbnMvYWRhcHRpdmUtY29udGFpbmVyXCI7XHJcbmltcG9ydCB7IENzc0NsYXNzQnVpbGRlciB9IGZyb20gXCIuL3V0aWxzL2Nzc0NsYXNzQnVpbGRlclwiO1xyXG5pbXBvcnQgeyBNYXRyaXhEcm9wZG93bkNvbHVtbiB9IGZyb20gXCIuL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duY29sdW1uXCI7XHJcbmltcG9ydCB7IE1hdHJpeERyb3Bkb3duQ2VsbCwgTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UgfSBmcm9tIFwiLi9xdWVzdGlvbl9tYXRyaXhkcm9wZG93bmJhc2VcIjtcclxuaW1wb3J0IHsgQWN0aW9uQ29udGFpbmVyIH0gZnJvbSBcIi4vYWN0aW9ucy9jb250YWluZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsIHtcclxuICBwcml2YXRlIHN0YXRpYyBjb3VudGVyID0gMTtcclxuICBwcml2YXRlIGlkVmFsdWU6IG51bWJlcjtcclxuICBwcml2YXRlIGl0ZW1WYWx1ZTogSXRlbVZhbHVlO1xyXG4gIHB1YmxpYyBtaW5XaWR0aDogc3RyaW5nID0gXCJcIjtcclxuICBwdWJsaWMgd2lkdGg6IHN0cmluZyA9IFwiXCI7XHJcbiAgcHVibGljIGxvY1RpdGxlOiBMb2NhbGl6YWJsZVN0cmluZztcclxuICBwdWJsaWMgY2VsbDogTWF0cml4RHJvcGRvd25DZWxsO1xyXG4gIHB1YmxpYyBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uO1xyXG4gIHB1YmxpYyByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlO1xyXG4gIHB1YmxpYyBxdWVzdGlvbjogUXVlc3Rpb247XHJcbiAgcHVibGljIGlzUmVtb3ZlUm93OiBib29sZWFuO1xyXG4gIHB1YmxpYyBjaG9pY2VJbmRleDogbnVtYmVyO1xyXG4gIHB1YmxpYyBtYXRyaXg6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2U7XHJcbiAgcHVibGljIHJlcXVpcmVkVGV4dDogc3RyaW5nO1xyXG4gIHB1YmxpYyBpc0VtcHR5OiBib29sZWFuO1xyXG4gIHB1YmxpYyBjb2xTcGFuczogbnVtYmVyID0gMTtcclxuICBwdWJsaWMgcGFuZWw6IFBhbmVsTW9kZWw7XHJcbiAgcHVibGljIGlzU2hvd0hpZGVEZXRhaWw6IGJvb2xlYW47XHJcbiAgcHVibGljIGlzQWN0aW9uc0NlbGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaXNEcmFnSGFuZGxlckNlbGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIGNsYXNzTmFtZVZhbHVlOiBzdHJpbmcgPSBcIlwiO1xyXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuaWRWYWx1ZSA9IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwuY291bnRlcisrO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGhhc1F1ZXN0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhdGhpcy5xdWVzdGlvbjtcclxuICB9XHJcbiAgcHVibGljIGdldCBoYXNUaXRsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhIXRoaXMubG9jVGl0bGU7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgaGFzUGFuZWwoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLnBhbmVsO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGlkKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5pZFZhbHVlO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IHNob3dFcnJvck9uVG9wKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2hvd0Vycm9yT25Db3JlKFwidG9wXCIpO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IHNob3dFcnJvck9uQm90dG9tKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2hvd0Vycm9yT25Db3JlKFwiYm90dG9tXCIpO1xyXG4gIH1cclxuICBwcml2YXRlIHNob3dFcnJvck9uQ29yZShsb2NhdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLmdldFNob3dFcnJvckxvY2F0aW9uKCkgPT0gbG9jYXRpb24gJiZcclxuICAgICAgKCF0aGlzLmlzQ2hvaWNlIHx8IHRoaXMuaXNGaXJzdENob2ljZSlcclxuICAgICk7XHJcbiAgfVxyXG4gIHByaXZhdGUgZ2V0U2hvd0Vycm9yTG9jYXRpb24oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmhhc1F1ZXN0aW9uID8gdGhpcy5xdWVzdGlvbi5zdXJ2ZXkucXVlc3Rpb25FcnJvckxvY2F0aW9uIDogXCJcIjtcclxuICB9XHJcbiAgcHVibGljIGdldCBpdGVtKCk6IEl0ZW1WYWx1ZSB7XHJcbiAgICByZXR1cm4gdGhpcy5pdGVtVmFsdWU7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgaXRlbSh2YWw6IEl0ZW1WYWx1ZSkge1xyXG4gICAgdGhpcy5pdGVtVmFsdWUgPSB2YWw7XHJcbiAgICBpZiAoISF2YWwpIHtcclxuICAgICAgdmFsLmhpZGVDYXB0aW9uID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbiAgcHVibGljIGdldCBpc0Nob2ljZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhIXRoaXMuaXRlbTtcclxuICB9XHJcbiAgcHVibGljIGdldCBjaG9pY2VWYWx1ZSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNDaG9pY2UgPyB0aGlzLml0ZW0udmFsdWUgOiBudWxsO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGlzQ2hlY2tib3goKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0Nob2ljZSAmJiB0aGlzLnF1ZXN0aW9uLmdldFR5cGUoKSA9PSBcImNoZWNrYm94XCI7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgaXNGaXJzdENob2ljZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNob2ljZUluZGV4ID09PSAwO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGNsYXNzTmFtZSh2YWw6IHN0cmluZykge1xyXG4gICAgdGhpcy5jbGFzc05hbWVWYWx1ZSA9IHZhbDtcclxuICB9XHJcbiAgcHVibGljIGdldCBjbGFzc05hbWUoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQ3NzQ2xhc3NCdWlsZGVyKCkuYXBwZW5kKHRoaXMuY2xhc3NOYW1lVmFsdWUpO1xyXG4gICAgaWYodGhpcy5oYXNRdWVzdGlvbikge1xyXG4gICAgICBidWlsZGVyXHJcbiAgICAgICAgLmFwcGVuZCh0aGlzLnF1ZXN0aW9uLmNzc0Vycm9yLCB0aGlzLnF1ZXN0aW9uLmVycm9ycy5sZW5ndGggPiAwKVxyXG4gICAgICAgIC5hcHBlbmQodGhpcy5xdWVzdGlvbi5jc3NDbGFzc2VzLmFuc3dlcmVkLCB0aGlzLnF1ZXN0aW9uLmlzQW5zd2VyZWQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBoZWFkZXJzKCk6IHN0cmluZyB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY2VsbCAmJlxyXG4gICAgICB0aGlzLmNlbGwuY29sdW1uICYmXHJcbiAgICAgIHRoaXMuY2VsbC5jb2x1bW4uaXNTaG93SW5NdWx0aXBsZUNvbHVtbnNcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdGhpcy5pdGVtLmxvY1RleHQucmVuZGVyZWRIdG1sO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucXVlc3Rpb24gJiYgdGhpcy5xdWVzdGlvbi5pc1Zpc2libGUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucXVlc3Rpb24ubG9jVGl0bGUucmVuZGVyZWRIdG1sO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaGFzVGl0bGUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubG9jVGl0bGUucmVuZGVyZWRIdG1sIHx8IFwiXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gXCJcIjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYWxjdWxhdGVGaW5hbENsYXNzTmFtZShtYXRyaXhDc3NDbGFzc2VzOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgcXVlc3Rpb25Dc3MgPSB0aGlzLmNlbGwucXVlc3Rpb24uY3NzQ2xhc3NlcztcclxuICAgIC8vICd0ZXh0LWFsaWduJzogJGRhdGEuaXNDaG9pY2UgPyAnY2VudGVyJzpcclxuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQ3NzQ2xhc3NCdWlsZGVyKClcclxuICAgICAgLmFwcGVuZChxdWVzdGlvbkNzcy5pdGVtVmFsdWUsICEhcXVlc3Rpb25Dc3MpXHJcbiAgICAgIC5hcHBlbmQocXVlc3Rpb25Dc3MuYXNDZWxsLCAhIXF1ZXN0aW9uQ3NzKTtcclxuICAgIHJldHVybiBidWlsZGVyLmFwcGVuZChtYXRyaXhDc3NDbGFzc2VzLmNlbGwsIGJ1aWxkZXIuaXNFbXB0eSgpICYmICEhbWF0cml4Q3NzQ2xhc3NlcylcclxuICAgICAgLmFwcGVuZChtYXRyaXhDc3NDbGFzc2VzLmNob2ljZUNlbGwsIHRoaXMuaXNDaG9pY2UpXHJcbiAgICAgIC50b1N0cmluZygpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyBleHRlbmRzIEJhc2Uge1xyXG4gIEBwcm9wZXJ0eSh7IGRlZmF1bHRWYWx1ZTogbnVsbCB9KSBnaG9zdFBvc2l0aW9uOiBzdHJpbmc7XHJcbiAgQHByb3BlcnR5KHsgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KSBpc0FkZGl0aW9uYWxDbGFzc2VzOiBib29sZWFuO1xyXG5cclxuICBwdWJsaWMgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZTtcclxuICBwcml2YXRlIHN0YXRpYyBjb3VudGVyID0gMTtcclxuICBwcml2YXRlIGlkVmFsdWU6IG51bWJlcjtcclxuICBwdWJsaWMgY2VsbHM6IEFycmF5PFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGw+ID0gW107XHJcblxyXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgY3NzQ2xhc3NlczogYW55LCBwdWJsaWMgaXNEZXRhaWxSb3c6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMub25DcmVhdGluZygpO1xyXG4gICAgdGhpcy5pZFZhbHVlID0gUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93LmNvdW50ZXIrKztcclxuICB9XHJcbiAgcHVibGljIG9uQ3JlYXRpbmcoKSB7IH0gLy8gbmVlZCBmb3Iga25vY2tvdXQgYmluZGluZyBzZWUgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93LnByb3RvdHlwZVtcIm9uQ3JlYXRpbmdcIl1cclxuICBwdWJsaWMgZ2V0IGlkKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5pZFZhbHVlO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGF0dHJpYnV0ZXMoKSB7XHJcbiAgICBpZiAoIXRoaXMucm93KSByZXR1cm4ge307XHJcbiAgICByZXR1cm4geyBcImRhdGEtc3YtZHJvcC10YXJnZXQtbWF0cml4LXJvd1wiOiB0aGlzLnJvdy5pZCB9O1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGNsYXNzTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIG5ldyBDc3NDbGFzc0J1aWxkZXIoKVxyXG4gICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5yb3cpXHJcbiAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmRldGFpbFJvdywgdGhpcy5pc0RldGFpbFJvdylcclxuICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuZHJhZ0Ryb3BHaG9zdFBvc2l0aW9uVG9wLCB0aGlzLmdob3N0UG9zaXRpb24gPT09IFwidG9wXCIpXHJcbiAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmRyYWdEcm9wR2hvc3RQb3NpdGlvbkJvdHRvbSwgdGhpcy5naG9zdFBvc2l0aW9uID09PSBcImJvdHRvbVwiKVxyXG4gICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5yb3dBZGRpdGlvbmFsLCB0aGlzLmlzQWRkaXRpb25hbENsYXNzZXMpXHJcbiAgICAgIC50b1N0cmluZygpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFRhYmxlIGV4dGVuZHMgQmFzZSB7XHJcbiAgcHJpdmF0ZSBoZWFkZXJSb3dWYWx1ZTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93O1xyXG4gIHByaXZhdGUgZm9vdGVyUm93VmFsdWU6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdztcclxuICBwcml2YXRlIGhhc1JlbW92ZVJvd3NWYWx1ZTogYm9vbGVhbjtcclxuICBwcml2YXRlIHJvd3NBY3Rpb25zOiBBcnJheTxBcnJheTxJQWN0aW9uPj47XHJcbiAgcHJpdmF0ZSBjc3NDbGFzc2VzOiBhbnk7XHJcbiAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyBtYXRyaXg6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLmNyZWF0ZU5ld0FycmF5KFwicm93c1wiKTtcclxuICAgIHRoaXMuYnVpbGQoKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBzaG93VGFibGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1RhYmxlXCIsIHRydWUpO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IHNob3dIZWFkZXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd0hlYWRlclwiKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBzaG93QWRkUm93T25Ub3AoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd0FkZFJvd09uVG9wXCIsIGZhbHNlKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBzaG93QWRkUm93T25Cb3R0b20oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd0FkZFJvd09uQm90dG9tXCIsIGZhbHNlKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBzaG93Rm9vdGVyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubWF0cml4Lmhhc0Zvb3RlciAmJiB0aGlzLm1hdHJpeC5pc0NvbHVtbkxheW91dEhvcml6b250YWw7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgaGFzRm9vdGVyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhdGhpcy5mb290ZXJSb3c7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgaGFzUmVtb3ZlUm93cygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmhhc1JlbW92ZVJvd3NWYWx1ZTtcclxuICB9XHJcbiAgcHVibGljIGlzUmVxdWlyZVJlc2V0KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5oYXNSZW1vdmVSb3dzICE9IHRoaXMubWF0cml4LmNhblJlbW92ZVJvd3MgfHxcclxuICAgICAgIXRoaXMubWF0cml4LmlzQ29sdW1uTGF5b3V0SG9yaXpvbnRhbFxyXG4gICAgKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBoZWFkZXJSb3coKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93IHtcclxuICAgIHJldHVybiB0aGlzLmhlYWRlclJvd1ZhbHVlO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGZvb3RlclJvdygpOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3cge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9vdGVyUm93VmFsdWU7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgcm93cygpOiBBcnJheTxRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3c+IHtcclxuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyb3dzXCIpO1xyXG4gIH1cclxuICBwcm90ZWN0ZWQgYnVpbGQoKSB7XHJcbiAgICB0aGlzLmhhc1JlbW92ZVJvd3NWYWx1ZSA9IHRoaXMubWF0cml4LmNhblJlbW92ZVJvd3M7XHJcbiAgICAvL2J1aWxkIHJvd3Mgbm93XHJcbiAgICB2YXIgcm93cyA9IHRoaXMubWF0cml4LnZpc2libGVSb3dzO1xyXG4gICAgdGhpcy5jc3NDbGFzc2VzID0gdGhpcy5tYXRyaXguY3NzQ2xhc3NlcztcclxuICAgIHRoaXMuYnVpbGRSb3dzQWN0aW9ucygpO1xyXG4gICAgdGhpcy5idWlsZEhlYWRlcigpO1xyXG4gICAgdGhpcy5idWlsZFJvd3MoKTtcclxuICAgIHRoaXMuYnVpbGRGb290ZXIoKTtcclxuICAgIHRoaXMudXBkYXRlU2hvd1RhYmxlQW5kQWRkUm93KCk7XHJcbiAgfVxyXG4gIHB1YmxpYyB1cGRhdGVTaG93VGFibGVBbmRBZGRSb3coKSB7XHJcbiAgICB2YXIgc2hvd1RhYmxlID1cclxuICAgICAgdGhpcy5yb3dzLmxlbmd0aCA+IDAgfHxcclxuICAgICAgdGhpcy5tYXRyaXguaXNEZXNpZ25Nb2RlIHx8XHJcbiAgICAgICF0aGlzLm1hdHJpeC5nZXRTaG93Q29sdW1uc0lmRW1wdHkoKTtcclxuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dUYWJsZVwiLCBzaG93VGFibGUpO1xyXG4gICAgdmFyIHNob3dBZGRSb3cgPSB0aGlzLm1hdHJpeC5jYW5BZGRSb3cgJiYgc2hvd1RhYmxlO1xyXG4gICAgdmFyIHNob3dBZGRSb3dPblRvcCA9IHNob3dBZGRSb3c7XHJcbiAgICB2YXIgc2hvd0FkZFJvd09uQm90dG9tID0gc2hvd0FkZFJvdztcclxuICAgIGlmIChzaG93QWRkUm93T25Ub3ApIHtcclxuICAgICAgaWYgKHRoaXMubWF0cml4LmdldEFkZFJvd0xvY2F0aW9uKCkgPT09IFwiZGVmYXVsdFwiKSB7XHJcbiAgICAgICAgc2hvd0FkZFJvd09uVG9wID0gdGhpcy5tYXRyaXguY29sdW1uTGF5b3V0ID09PSBcInZlcnRpY2FsXCI7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc2hvd0FkZFJvd09uVG9wID0gdGhpcy5tYXRyaXguZ2V0QWRkUm93TG9jYXRpb24oKSAhPT0gXCJib3R0b21cIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHNob3dBZGRSb3dPbkJvdHRvbSAmJiB0aGlzLm1hdHJpeC5nZXRBZGRSb3dMb2NhdGlvbigpICE9PSBcInRvcEJvdHRvbVwiKSB7XHJcbiAgICAgIHNob3dBZGRSb3dPbkJvdHRvbSA9ICFzaG93QWRkUm93T25Ub3A7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93QWRkUm93T25Ub3BcIiwgc2hvd0FkZFJvd09uVG9wKTtcclxuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dBZGRSb3dPbkJvdHRvbVwiLCBzaG93QWRkUm93T25Cb3R0b20pO1xyXG4gIH1cclxuICBwdWJsaWMgb25BZGRlZFJvdygpIHtcclxuICAgIGlmICh0aGlzLmdldFJlbmRlcmVkRGF0YVJvd0NvdW50KCkgPj0gdGhpcy5tYXRyaXgudmlzaWJsZVJvd3MubGVuZ3RoKVxyXG4gICAgICByZXR1cm47XHJcbiAgICB2YXIgcm93ID0gdGhpcy5tYXRyaXgudmlzaWJsZVJvd3NbdGhpcy5tYXRyaXgudmlzaWJsZVJvd3MubGVuZ3RoIC0gMV07XHJcbiAgICB0aGlzLnJvd3NBY3Rpb25zLnB1c2godGhpcy5idWlsZFJvd0FjdGlvbnMocm93KSk7XHJcbiAgICB0aGlzLmFkZEhvcml6b250YWxSb3coXHJcbiAgICAgIHRoaXMucm93cyxcclxuICAgICAgcm93LFxyXG4gICAgICB0aGlzLm1hdHJpeC52aXNpYmxlUm93cy5sZW5ndGggPT0gMSAmJiAhdGhpcy5tYXRyaXguc2hvd0hlYWRlclxyXG4gICAgKTtcclxuICAgIHRoaXMudXBkYXRlU2hvd1RhYmxlQW5kQWRkUm93KCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgZ2V0UmVuZGVyZWREYXRhUm93Q291bnQoKTogbnVtYmVyIHtcclxuICAgIHZhciByZXMgPSAwO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKCF0aGlzLnJvd3NbaV0uaXNEZXRhaWxSb3cpIHJlcysrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcbiAgcHVibGljIG9uUmVtb3ZlZFJvdyhyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKSB7XHJcbiAgICB2YXIgcm93SW5kZXggPSB0aGlzLmdldFJlbmRlcmVkUm93SW5kZXgocm93KTtcclxuICAgIGlmIChyb3dJbmRleCA8IDApIHJldHVybjtcclxuICAgIHRoaXMucm93c0FjdGlvbnMuc3BsaWNlKHJvd0luZGV4LCAxKTtcclxuICAgIHZhciByZW1vdmVDb3VudCA9IDE7XHJcbiAgICBpZiAoXHJcbiAgICAgIHJvd0luZGV4IDwgdGhpcy5yb3dzLmxlbmd0aCAtIDEgJiZcclxuICAgICAgdGhpcy5yb3dzW3Jvd0luZGV4ICsgMV0uaXNEZXRhaWxSb3dcclxuICAgICkge1xyXG4gICAgICByZW1vdmVDb3VudCsrO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yb3dzLnNwbGljZShyb3dJbmRleCwgcmVtb3ZlQ291bnQpO1xyXG4gICAgdGhpcy51cGRhdGVTaG93VGFibGVBbmRBZGRSb3coKTtcclxuICB9XHJcbiAgcHVibGljIG9uRGV0YWlsUGFuZWxDaGFuZ2VWaXNpYmlsaXR5KFxyXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcclxuICAgIGlzU2hvd2luZzogYm9vbGVhblxyXG4gICkge1xyXG4gICAgdmFyIHJvd0luZGV4ID0gdGhpcy5nZXRSZW5kZXJlZFJvd0luZGV4KHJvdyk7XHJcbiAgICBpZiAocm93SW5kZXggPCAwKSByZXR1cm47XHJcbiAgICB2YXIgcGFuZWxSb3dJbmRleCA9XHJcbiAgICAgIHJvd0luZGV4IDwgdGhpcy5yb3dzLmxlbmd0aCAtIDEgJiYgdGhpcy5yb3dzW3Jvd0luZGV4ICsgMV0uaXNEZXRhaWxSb3dcclxuICAgICAgICA/IHJvd0luZGV4ICsgMVxyXG4gICAgICAgIDogLTE7XHJcbiAgICBpZiAoKGlzU2hvd2luZyAmJiBwYW5lbFJvd0luZGV4ID4gLTEpIHx8ICghaXNTaG93aW5nICYmIHBhbmVsUm93SW5kZXggPCAwKSlcclxuICAgICAgcmV0dXJuO1xyXG4gICAgaWYgKGlzU2hvd2luZykge1xyXG4gICAgICB2YXIgZGV0YWlsUm93ID0gdGhpcy5jcmVhdGVEZXRhaWxQYW5lbFJvdyhyb3csIHRoaXMucm93c1tyb3dJbmRleF0pO1xyXG4gICAgICB0aGlzLnJvd3Muc3BsaWNlKHJvd0luZGV4ICsgMSwgMCwgZGV0YWlsUm93KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucm93cy5zcGxpY2UocGFuZWxSb3dJbmRleCwgMSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgZ2V0UmVuZGVyZWRSb3dJbmRleChyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKTogbnVtYmVyIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh0aGlzLnJvd3NbaV0ucm93ID09IHJvdykgcmV0dXJuIGk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gLTE7XHJcbiAgfVxyXG4gIHByb3RlY3RlZCBidWlsZFJvd3NBY3Rpb25zKCkge1xyXG4gICAgdGhpcy5yb3dzQWN0aW9ucyA9IFtdO1xyXG4gICAgdmFyIHJvd3MgPSB0aGlzLm1hdHJpeC52aXNpYmxlUm93cztcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICB0aGlzLnJvd3NBY3Rpb25zLnB1c2godGhpcy5idWlsZFJvd0FjdGlvbnMocm93c1tpXSkpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcm90ZWN0ZWQgYnVpbGRIZWFkZXIoKSB7XHJcbiAgICB2YXIgY29sSGVhZGVycyA9XHJcbiAgICAgIHRoaXMubWF0cml4LmlzQ29sdW1uTGF5b3V0SG9yaXpvbnRhbCAmJiB0aGlzLm1hdHJpeC5zaG93SGVhZGVyO1xyXG4gICAgdmFyIGlzU2hvd24gPVxyXG4gICAgICBjb2xIZWFkZXJzIHx8XHJcbiAgICAgICh0aGlzLm1hdHJpeC5oYXNSb3dUZXh0ICYmICF0aGlzLm1hdHJpeC5pc0NvbHVtbkxheW91dEhvcml6b250YWwpO1xyXG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd0hlYWRlclwiLCBpc1Nob3duKTtcclxuICAgIGlmICghaXNTaG93bikgcmV0dXJuO1xyXG4gICAgdGhpcy5oZWFkZXJSb3dWYWx1ZSA9IG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3coXHJcbiAgICAgIHRoaXMuY3NzQ2xhc3Nlc1xyXG4gICAgKTtcclxuICAgIGlmICh0aGlzLm1hdHJpeC5hbGxvd1Jvd3NEcmFnQW5kRHJvcCkge1xyXG4gICAgICB0aGlzLmhlYWRlclJvdy5jZWxscy5wdXNoKHRoaXMuY3JlYXRlSGVhZGVyQ2VsbChudWxsKSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5oYXNBY3Rpb25DZWxsSW5Sb3dzKFwic3RhcnRcIikpIHtcclxuICAgICAgdGhpcy5oZWFkZXJSb3cuY2VsbHMucHVzaCh0aGlzLmNyZWF0ZUhlYWRlckNlbGwobnVsbCkpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubWF0cml4Lmhhc1Jvd1RleHQgJiYgdGhpcy5tYXRyaXguc2hvd0hlYWRlcikge1xyXG4gICAgICB0aGlzLmhlYWRlclJvdy5jZWxscy5wdXNoKHRoaXMuY3JlYXRlSGVhZGVyQ2VsbChudWxsKSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5tYXRyaXguaXNDb2x1bW5MYXlvdXRIb3Jpem9udGFsKSB7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5tYXRyaXgudmlzaWJsZUNvbHVtbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5tYXRyaXgudmlzaWJsZUNvbHVtbnNbaV07XHJcbiAgICAgICAgaWYgKCFjb2x1bW4uaGFzVmlzaWJsZUNlbGwpIGNvbnRpbnVlO1xyXG4gICAgICAgIGlmIChjb2x1bW4uaXNTaG93SW5NdWx0aXBsZUNvbHVtbnMpIHtcclxuICAgICAgICAgIHRoaXMuY3JlYXRlTXV0bGlwbGVDb2x1bW5zSGVhZGVyKGNvbHVtbik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuaGVhZGVyUm93LmNlbGxzLnB1c2godGhpcy5jcmVhdGVIZWFkZXJDZWxsKGNvbHVtbikpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdmFyIHJvd3MgPSB0aGlzLm1hdHJpeC52aXNpYmxlUm93cztcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy5oZWFkZXJSb3cuY2VsbHMucHVzaCh0aGlzLmNyZWF0ZVRleHRDZWxsKHJvd3NbaV0ubG9jVGV4dCkpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLm1hdHJpeC5oYXNGb290ZXIpIHtcclxuICAgICAgICB0aGlzLmhlYWRlclJvdy5jZWxscy5wdXNoKFxyXG4gICAgICAgICAgdGhpcy5jcmVhdGVUZXh0Q2VsbCh0aGlzLm1hdHJpeC5nZXRGb290ZXJUZXh0KCkpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaGFzQWN0aW9uQ2VsbEluUm93cyhcImVuZFwiKSkge1xyXG4gICAgICB0aGlzLmhlYWRlclJvdy5jZWxscy5wdXNoKHRoaXMuY3JlYXRlSGVhZGVyQ2VsbChudWxsKSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByb3RlY3RlZCBidWlsZEZvb3RlcigpIHtcclxuICAgIGlmICghdGhpcy5zaG93Rm9vdGVyKSByZXR1cm47XHJcbiAgICB0aGlzLmZvb3RlclJvd1ZhbHVlID0gbmV3IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyhcclxuICAgICAgdGhpcy5jc3NDbGFzc2VzXHJcbiAgICApO1xyXG4gICAgaWYgKHRoaXMubWF0cml4LmFsbG93Um93c0RyYWdBbmREcm9wKSB7XHJcbiAgICAgIHRoaXMuZm9vdGVyUm93LmNlbGxzLnB1c2godGhpcy5jcmVhdGVIZWFkZXJDZWxsKG51bGwpKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmhhc0FjdGlvbkNlbGxJblJvd3MoXCJzdGFydFwiKSkge1xyXG4gICAgICB0aGlzLmZvb3RlclJvdy5jZWxscy5wdXNoKHRoaXMuY3JlYXRlSGVhZGVyQ2VsbChudWxsKSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5tYXRyaXguaGFzUm93VGV4dCkge1xyXG4gICAgICB0aGlzLmZvb3RlclJvdy5jZWxscy5wdXNoKFxyXG4gICAgICAgIHRoaXMuY3JlYXRlVGV4dENlbGwodGhpcy5tYXRyaXguZ2V0Rm9vdGVyVGV4dCgpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdmFyIGNlbGxzID0gdGhpcy5tYXRyaXgudmlzaWJsZVRvdGFsUm93LmNlbGxzO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjZWxscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICB2YXIgY2VsbCA9IGNlbGxzW2ldO1xyXG4gICAgICBpZiAoIWNlbGwuY29sdW1uLmhhc1Zpc2libGVDZWxsKSBjb250aW51ZTtcclxuICAgICAgaWYgKGNlbGwuY29sdW1uLmlzU2hvd0luTXVsdGlwbGVDb2x1bW5zKSB7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVNdXRsaXBsZUNvbHVtbnNGb290ZXIodGhpcy5mb290ZXJSb3csIGNlbGwpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZm9vdGVyUm93LmNlbGxzLnB1c2godGhpcy5jcmVhdGVFZGl0Q2VsbChjZWxsKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmhhc0FjdGlvbkNlbGxJblJvd3MoXCJlbmRcIikpIHtcclxuICAgICAgdGhpcy5mb290ZXJSb3cuY2VsbHMucHVzaCh0aGlzLmNyZWF0ZUhlYWRlckNlbGwobnVsbCkpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcm90ZWN0ZWQgYnVpbGRSb3dzKCkge1xyXG4gICAgdmFyIHJvd3MgPSB0aGlzLm1hdHJpeC5pc0NvbHVtbkxheW91dEhvcml6b250YWxcclxuICAgICAgPyB0aGlzLmJ1aWxkSG9yaXpvbnRhbFJvd3MoKVxyXG4gICAgICA6IHRoaXMuYnVpbGRWZXJ0aWNhbFJvd3MoKTtcclxuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJvd3NcIiwgcm93cyk7XHJcbiAgfVxyXG4gIHByaXZhdGUgaGFzQWN0aW9uQ2VsbEluUm93c1ZhbHVlczogYW55ID0ge307XHJcbiAgcHJpdmF0ZSBoYXNBY3Rpb25DZWxsSW5Sb3dzKGxvY2F0aW9uOiBcInN0YXJ0XCIgfCBcImVuZFwiKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5oYXNBY3Rpb25DZWxsSW5Sb3dzVmFsdWVzW2xvY2F0aW9uXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHZhciByb3dzID0gdGhpcy5tYXRyaXgudmlzaWJsZVJvd3M7XHJcbiAgICAgIHRoaXMuaGFzQWN0aW9uQ2VsbEluUm93c1ZhbHVlc1tsb2NhdGlvbl0gPSBmYWxzZTtcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLmdldFJvd0FjdGlvbnMoaSwgbG9jYXRpb24pKSkge1xyXG4gICAgICAgICAgdGhpcy5oYXNBY3Rpb25DZWxsSW5Sb3dzVmFsdWVzW2xvY2F0aW9uXSA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmhhc0FjdGlvbkNlbGxJblJvd3NWYWx1ZXNbbG9jYXRpb25dO1xyXG4gIH1cclxuICBwcml2YXRlIGNhblJlbW92ZVJvdyhyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5tYXRyaXguY2FuUmVtb3ZlUm93KHJvdyk7XHJcbiAgfVxyXG4gIHByaXZhdGUgYnVpbGRIb3Jpem9udGFsUm93cygpOiBBcnJheTxRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3c+IHtcclxuICAgIHZhciByb3dzID0gdGhpcy5tYXRyaXgudmlzaWJsZVJvd3M7XHJcbiAgICB2YXIgcmVuZGVyZWRSb3dzOiBBcnJheTxRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3c+ID0gW107XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdGhpcy5hZGRIb3Jpem9udGFsUm93KFxyXG4gICAgICAgIHJlbmRlcmVkUm93cyxcclxuICAgICAgICByb3dzW2ldLFxyXG4gICAgICAgIGkgPT0gMCAmJiAhdGhpcy5tYXRyaXguc2hvd0hlYWRlclxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlbmRlcmVkUm93cztcclxuICB9XHJcbiAgcHJpdmF0ZSBhZGRIb3Jpem9udGFsUm93KFxyXG4gICAgcmVuZGVyZWRSb3dzOiBBcnJheTxRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3c+LFxyXG4gICAgcm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSxcclxuICAgIHVzZUFzSGVhZGVyOiBib29sZWFuXHJcbiAgKSB7XHJcbiAgICB2YXIgcmVuZGVyZWRSb3cgPSB0aGlzLmNyZWF0ZUhvcml6b250YWxSb3cocm93LCB1c2VBc0hlYWRlcik7XHJcbiAgICByZW5kZXJlZFJvdy5yb3cgPSByb3c7XHJcbiAgICByZW5kZXJlZFJvd3MucHVzaChyZW5kZXJlZFJvdyk7XHJcbiAgICBpZiAocm93LmlzRGV0YWlsUGFuZWxTaG93aW5nKSB7XHJcbiAgICAgIHJlbmRlcmVkUm93cy5wdXNoKHRoaXMuY3JlYXRlRGV0YWlsUGFuZWxSb3cocm93LCByZW5kZXJlZFJvdykpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIGdldFJvd0RyYWdDZWxsKHJvd0luZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGNlbGwgPSBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCgpO1xyXG4gICAgY2VsbC5pc0RyYWdIYW5kbGVyQ2VsbCA9IHRydWU7XHJcbiAgICBjZWxsLmNsYXNzTmFtZSA9IHRoaXMuY3NzQ2xhc3Nlcy5hY3Rpb25zQ2VsbDtcclxuICAgIGNlbGwucm93ID0gdGhpcy5tYXRyaXgudmlzaWJsZVJvd3Nbcm93SW5kZXhdO1xyXG4gICAgcmV0dXJuIGNlbGw7XHJcbiAgfVxyXG4gIHByaXZhdGUgZ2V0Um93QWN0aW9uc0NlbGwocm93SW5kZXg6IG51bWJlciwgbG9jYXRpb246IFwic3RhcnRcIiB8IFwiZW5kXCIpIHtcclxuICAgIGNvbnN0IHJvd0FjdGlvbnMgPSB0aGlzLmdldFJvd0FjdGlvbnMocm93SW5kZXgsIGxvY2F0aW9uKTtcclxuICAgIGlmICghdGhpcy5pc1ZhbHVlRW1wdHkocm93QWN0aW9ucykpIHtcclxuICAgICAgY29uc3QgY2VsbCA9IG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsKCk7XHJcbiAgICAgIGNvbnN0IGFjdGlvbkNvbnRhaW5lciA9IHRoaXMubWF0cml4LmFsbG93QWRhcHRpdmVBY3Rpb25zID8gbmV3IEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyKCkgOiBuZXcgQWN0aW9uQ29udGFpbmVyKCk7XHJcbiAgICAgIGFjdGlvbkNvbnRhaW5lci5zZXRJdGVtcyhyb3dBY3Rpb25zKTtcclxuXHJcbiAgICAgIGNvbnN0IGl0ZW1WYWx1ZSA9IG5ldyBJdGVtVmFsdWUoYWN0aW9uQ29udGFpbmVyKTtcclxuICAgICAgY2VsbC5pdGVtID0gaXRlbVZhbHVlO1xyXG4gICAgICBjZWxsLmlzQWN0aW9uc0NlbGwgPSB0cnVlO1xyXG4gICAgICBjZWxsLmNsYXNzTmFtZSA9IHRoaXMuY3NzQ2xhc3Nlcy5hY3Rpb25zQ2VsbDtcclxuICAgICAgY2VsbC5yb3cgPSB0aGlzLm1hdHJpeC52aXNpYmxlUm93c1tyb3dJbmRleF07XHJcbiAgICAgIHJldHVybiBjZWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG4gIHByaXZhdGUgZ2V0Um93QWN0aW9ucyhyb3dJbmRleDogbnVtYmVyLCBsb2NhdGlvbjogXCJzdGFydFwiIHwgXCJlbmRcIikge1xyXG4gICAgdmFyIGFjdGlvbnMgPSB0aGlzLnJvd3NBY3Rpb25zW3Jvd0luZGV4XTtcclxuICAgIGlmICghQXJyYXkuaXNBcnJheShhY3Rpb25zKSkgcmV0dXJuIFtdO1xyXG4gICAgcmV0dXJuIGFjdGlvbnMuZmlsdGVyKChhY3Rpb24pID0+IHtcclxuICAgICAgaWYgKCFhY3Rpb24ubG9jYXRpb24pIHtcclxuICAgICAgICBhY3Rpb24ubG9jYXRpb24gPSBcInN0YXJ0XCI7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGFjdGlvbi5sb2NhdGlvbiA9PT0gbG9jYXRpb247XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBidWlsZFJvd0FjdGlvbnMocm93OiBNYXRyaXhEcm9wZG93blJvd01vZGVsQmFzZSk6IEFycmF5PElBY3Rpb24+IHtcclxuICAgIHZhciBhY3Rpb25zOiBBcnJheTxJQWN0aW9uPiA9IFtdO1xyXG4gICAgdGhpcy5zZXREZWZhdWx0Um93QWN0aW9ucyhyb3csIGFjdGlvbnMpO1xyXG4gICAgaWYgKCEhdGhpcy5tYXRyaXguc3VydmV5KSB7XHJcbiAgICAgIGFjdGlvbnMgPSB0aGlzLm1hdHJpeC5zdXJ2ZXkuZ2V0VXBkYXRlZE1hdHJpeFJvd0FjdGlvbnMoXHJcbiAgICAgICAgdGhpcy5tYXRyaXgsXHJcbiAgICAgICAgcm93LFxyXG4gICAgICAgIGFjdGlvbnNcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiBhY3Rpb25zO1xyXG4gIH1cclxuICBwcm90ZWN0ZWQgc2V0RGVmYXVsdFJvd0FjdGlvbnMoXHJcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxyXG4gICAgYWN0aW9uczogQXJyYXk8SUFjdGlvbj5cclxuICApIHtcclxuICAgIGlmICh0aGlzLmhhc1JlbW92ZVJvd3MgJiYgdGhpcy5jYW5SZW1vdmVSb3cocm93KSkge1xyXG4gICAgICBhY3Rpb25zLnB1c2goXHJcbiAgICAgICAgbmV3IEFjdGlvbih7XHJcbiAgICAgICAgICBpZDogXCJyZW1vdmUtcm93XCIsXHJcbiAgICAgICAgICBsb2NhdGlvbjogXCJlbmRcIixcclxuICAgICAgICAgIGVuYWJsZWQ6ICF0aGlzLm1hdHJpeC5pc0lucHV0UmVhZE9ubHksXHJcbiAgICAgICAgICBjb21wb25lbnQ6IFwic3YtbWF0cml4LXJlbW92ZS1idXR0b25cIixcclxuICAgICAgICAgIGRhdGE6IHsgcm93OiByb3csIHF1ZXN0aW9uOiB0aGlzLm1hdHJpeCB9LFxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJvdy5oYXNQYW5lbCkge1xyXG4gICAgICBhY3Rpb25zLnB1c2goXHJcbiAgICAgICAgbmV3IEFjdGlvbih7XHJcbiAgICAgICAgICBpZDogXCJzaG93LWRldGFpbFwiLFxyXG4gICAgICAgICAgdGl0bGU6IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJlZGl0VGV4dFwiKSxcclxuICAgICAgICAgIHNob3dUaXRsZTogZmFsc2UsXHJcbiAgICAgICAgICBsb2NhdGlvbjogXCJzdGFydFwiLFxyXG4gICAgICAgICAgY29tcG9uZW50OiBcInN2LW1hdHJpeC1kZXRhaWwtYnV0dG9uXCIsXHJcbiAgICAgICAgICBkYXRhOiB7IHJvdzogcm93LCBxdWVzdGlvbjogdGhpcy5tYXRyaXggfSxcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIGNyZWF0ZUhvcml6b250YWxSb3coXHJcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxyXG4gICAgdXNlQXNIZWFkZXI6IGJvb2xlYW5cclxuICApOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3cge1xyXG4gICAgdmFyIHJlcyA9IG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3codGhpcy5jc3NDbGFzc2VzKTtcclxuICAgIGlmICh0aGlzLm1hdHJpeC5hbGxvd1Jvd3NEcmFnQW5kRHJvcCkge1xyXG4gICAgICB2YXIgcm93SW5kZXggPSB0aGlzLm1hdHJpeC52aXNpYmxlUm93cy5pbmRleE9mKHJvdyk7XHJcbiAgICAgIHJlcy5jZWxscy5wdXNoKHRoaXMuZ2V0Um93RHJhZ0NlbGwocm93SW5kZXgpKTtcclxuICAgIH1cclxuICAgIHRoaXMuYWRkUm93QWN0aW9uc0NlbGwocm93LCByZXMsIFwic3RhcnRcIik7XHJcbiAgICBpZiAodGhpcy5tYXRyaXguaGFzUm93VGV4dCkge1xyXG4gICAgICB2YXIgcmVuZGVyZWRDZWxsID0gdGhpcy5jcmVhdGVUZXh0Q2VsbChyb3cubG9jVGV4dCk7XHJcbiAgICAgIHJlbmRlcmVkQ2VsbC5yb3cgPSByb3c7XHJcbiAgICAgIHJlcy5jZWxscy5wdXNoKHJlbmRlcmVkQ2VsbCk7XHJcbiAgICAgIGlmICh1c2VBc0hlYWRlcikge1xyXG4gICAgICAgIHRoaXMuc2V0SGVhZGVyQ2VsbFdpZHRoKG51bGwsIHJlbmRlcmVkQ2VsbCk7XHJcbiAgICAgIH1cclxuICAgICAgcmVuZGVyZWRDZWxsLmNsYXNzTmFtZSA9IG5ldyBDc3NDbGFzc0J1aWxkZXIoKVxyXG4gICAgICAgIC5hcHBlbmQocmVuZGVyZWRDZWxsLmNsYXNzTmFtZSlcclxuICAgICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5kZXRhaWxSb3dUZXh0LCByb3cuaGFzUGFuZWwpXHJcbiAgICAgICAgLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvdy5jZWxscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgY2VsbCA9IHJvdy5jZWxsc1tpXTtcclxuICAgICAgaWYgKCFjZWxsLmNvbHVtbi5oYXNWaXNpYmxlQ2VsbCkgY29udGludWU7XHJcbiAgICAgIGlmIChjZWxsLmNvbHVtbi5pc1Nob3dJbk11bHRpcGxlQ29sdW1ucykge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlTXV0bGlwbGVFZGl0Q2VsbHMocmVzLCBjZWxsKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB2YXIgcmVuZGVyZWRDZWxsID0gdGhpcy5jcmVhdGVFZGl0Q2VsbChjZWxsKTtcclxuICAgICAgICByZXMuY2VsbHMucHVzaChyZW5kZXJlZENlbGwpO1xyXG4gICAgICAgIGlmICh1c2VBc0hlYWRlcikge1xyXG4gICAgICAgICAgdGhpcy5zZXRIZWFkZXJDZWxsV2lkdGgoY2VsbC5jb2x1bW4sIHJlbmRlcmVkQ2VsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmFkZFJvd0FjdGlvbnNDZWxsKHJvdywgcmVzLCBcImVuZFwiKTtcclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG4gIHByaXZhdGUgYWRkUm93QWN0aW9uc0NlbGwoXHJcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxyXG4gICAgcmVuZGVyZWRSb3c6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyxcclxuICAgIGxvY2F0aW9uOiBcInN0YXJ0XCIgfCBcImVuZFwiXHJcbiAgKSB7XHJcbiAgICB2YXIgcm93SW5kZXggPSB0aGlzLm1hdHJpeC52aXNpYmxlUm93cy5pbmRleE9mKHJvdyk7XHJcbiAgICBpZiAodGhpcy5oYXNBY3Rpb25DZWxsSW5Sb3dzKGxvY2F0aW9uKSkge1xyXG4gICAgICBjb25zdCBhY3Rpb25zID0gdGhpcy5nZXRSb3dBY3Rpb25zQ2VsbChyb3dJbmRleCwgbG9jYXRpb24pO1xyXG4gICAgICBpZiAoISFhY3Rpb25zKSB7XHJcbiAgICAgICAgcmVuZGVyZWRSb3cuY2VsbHMucHVzaChhY3Rpb25zKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB2YXIgY2VsbCA9IG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsKCk7XHJcbiAgICAgICAgY2VsbC5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgICAgICByZW5kZXJlZFJvdy5jZWxscy5wdXNoKGNlbGwpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgY3JlYXRlRGV0YWlsUGFuZWxSb3coXHJcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxyXG4gICAgcmVuZGVyZWRSb3c6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvd1xyXG4gICk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyB7XHJcbiAgICB2YXIgcmVzID0gbmV3IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyh0aGlzLmNzc0NsYXNzZXMsIHRydWUpO1xyXG4gICAgcmVzLnJvdyA9IHJvdztcclxuICAgIHZhciBidXR0b25DZWxsID0gbmV3IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwoKTtcclxuICAgIGlmICh0aGlzLm1hdHJpeC5oYXNSb3dUZXh0KSB7XHJcbiAgICAgIGJ1dHRvbkNlbGwuY29sU3BhbnMgPSAyO1xyXG4gICAgfVxyXG4gICAgYnV0dG9uQ2VsbC5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIHJlcy5jZWxscy5wdXNoKGJ1dHRvbkNlbGwpO1xyXG4gICAgdmFyIGFjdGlvbnNDZWxsID0gbnVsbDtcclxuICAgIGlmICh0aGlzLmhhc0FjdGlvbkNlbGxJblJvd3MoXCJlbmRcIikpIHtcclxuICAgICAgYWN0aW9uc0NlbGwgPSBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCgpO1xyXG4gICAgICBhY3Rpb25zQ2VsbC5pc0VtcHR5ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHZhciBjZWxsID0gbmV3IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwoKTtcclxuICAgIGNlbGwucGFuZWwgPSByb3cuZGV0YWlsUGFuZWw7XHJcbiAgICBjZWxsLmNvbFNwYW5zID1cclxuICAgICAgcmVuZGVyZWRSb3cuY2VsbHMubGVuZ3RoIC1cclxuICAgICAgYnV0dG9uQ2VsbC5jb2xTcGFucyAtXHJcbiAgICAgICghIWFjdGlvbnNDZWxsID8gYWN0aW9uc0NlbGwuY29sU3BhbnMgOiAwKTtcclxuICAgIGNlbGwuY2xhc3NOYW1lID0gdGhpcy5jc3NDbGFzc2VzLmRldGFpbFBhbmVsQ2VsbDtcclxuICAgIHJlcy5jZWxscy5wdXNoKGNlbGwpO1xyXG4gICAgaWYgKCEhYWN0aW9uc0NlbGwpIHtcclxuICAgICAgcmVzLmNlbGxzLnB1c2goYWN0aW9uc0NlbGwpO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICB0eXBlb2YgdGhpcy5tYXRyaXgub25DcmVhdGVEZXRhaWxQYW5lbFJlbmRlcmVkUm93Q2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIlxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMubWF0cml4Lm9uQ3JlYXRlRGV0YWlsUGFuZWxSZW5kZXJlZFJvd0NhbGxiYWNrKHJlcyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZFZlcnRpY2FsUm93cygpOiBBcnJheTxRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3c+IHtcclxuICAgIHZhciBjb2x1bW5zID0gdGhpcy5tYXRyaXguY29sdW1ucztcclxuICAgIHZhciByZW5kZXJlZFJvd3MgPSBbXTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICB2YXIgY29sID0gY29sdW1uc1tpXTtcclxuICAgICAgaWYgKGNvbC5pc1Zpc2libGUgJiYgY29sLmhhc1Zpc2libGVDZWxsKSB7XHJcbiAgICAgICAgaWYgKGNvbC5pc1Nob3dJbk11bHRpcGxlQ29sdW1ucykge1xyXG4gICAgICAgICAgdGhpcy5jcmVhdGVNdXRsaXBsZVZlcnRpY2FsUm93cyhyZW5kZXJlZFJvd3MsIGNvbCwgaSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJlbmRlcmVkUm93cy5wdXNoKHRoaXMuY3JlYXRlVmVydGljYWxSb3coY29sLCBpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5oYXNBY3Rpb25DZWxsSW5Sb3dzKFwiZW5kXCIpKSB7XHJcbiAgICAgIHJlbmRlcmVkUm93cy5wdXNoKHRoaXMuY3JlYXRlRW5kVmVydGljYWxBY3Rpb25Sb3coKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVuZGVyZWRSb3dzO1xyXG4gIH1cclxuICBwcml2YXRlIGNyZWF0ZU11dGxpcGxlVmVydGljYWxSb3dzKFxyXG4gICAgcmVuZGVyZWRSb3dzOiBBcnJheTxRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3c+LFxyXG4gICAgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbixcclxuICAgIGluZGV4OiBudW1iZXJcclxuICApIHtcclxuICAgIHZhciBjaG9pY2VzID0gdGhpcy5nZXRNdWx0aXBsZUNvbHVtbkNob2ljZXMoY29sdW1uKTtcclxuICAgIGlmICghY2hvaWNlcykgcmV0dXJuO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaG9pY2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHJlbmRlcmVkUm93cy5wdXNoKHRoaXMuY3JlYXRlVmVydGljYWxSb3coY29sdW1uLCBpbmRleCwgY2hvaWNlc1tpXSwgaSkpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIGNyZWF0ZVZlcnRpY2FsUm93KFxyXG4gICAgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbixcclxuICAgIGluZGV4OiBudW1iZXIsXHJcbiAgICBjaG9pY2U6IEl0ZW1WYWx1ZSA9IG51bGwsXHJcbiAgICBjaG9pY2VJbmRleDogbnVtYmVyID0gLTFcclxuICApOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3cge1xyXG4gICAgdmFyIHJlcyA9IG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRSb3codGhpcy5jc3NDbGFzc2VzKTtcclxuICAgIGlmICh0aGlzLm1hdHJpeC5zaG93SGVhZGVyKSB7XHJcbiAgICAgIHZhciBsVGl0bGUgPSAhIWNob2ljZSA/IGNob2ljZS5sb2NUZXh0IDogY29sdW1uLmxvY1RpdGxlO1xyXG4gICAgICB2YXIgaENlbGwgPSB0aGlzLmNyZWF0ZVRleHRDZWxsKGxUaXRsZSk7XHJcbiAgICAgIGhDZWxsLmNvbHVtbiA9IGNvbHVtbjtcclxuICAgICAgaWYgKCFjaG9pY2UpIHtcclxuICAgICAgICB0aGlzLnNldFJlcXVyaWVkVG9IZWFkZXJDZWxsKGNvbHVtbiwgaENlbGwpO1xyXG4gICAgICB9XHJcbiAgICAgIHJlcy5jZWxscy5wdXNoKGhDZWxsKTtcclxuICAgIH1cclxuICAgIHZhciByb3dzID0gdGhpcy5tYXRyaXgudmlzaWJsZVJvd3M7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdmFyIHJDaG9pY2UgPSBjaG9pY2U7XHJcbiAgICAgIHZhciByQ2hvaWNlSW5kZXggPSBjaG9pY2VJbmRleCA+PSAwID8gY2hvaWNlSW5kZXggOiBpO1xyXG4gICAgICB2YXIgY2VsbCA9IHJvd3NbaV0uY2VsbHNbaW5kZXhdO1xyXG4gICAgICB2YXIgdmlzQ2hvaWNlcyA9ICEhY2hvaWNlID8gY2VsbC5xdWVzdGlvbi52aXNpYmxlQ2hvaWNlcyA6IHVuZGVmaW5lZDtcclxuICAgICAgaWYgKCEhdmlzQ2hvaWNlcyAmJiByQ2hvaWNlSW5kZXggPCB2aXNDaG9pY2VzLmxlbmd0aCkge1xyXG4gICAgICAgIHJDaG9pY2UgPSB2aXNDaG9pY2VzW3JDaG9pY2VJbmRleF07XHJcbiAgICAgIH1cclxuICAgICAgdmFyIHJDZWxsID0gdGhpcy5jcmVhdGVFZGl0Q2VsbChjZWxsLCByQ2hvaWNlKTtcclxuICAgICAgckNlbGwuaXRlbSA9IHJDaG9pY2U7XHJcbiAgICAgIHJDZWxsLmNob2ljZUluZGV4ID0gckNob2ljZUluZGV4O1xyXG4gICAgICByZXMuY2VsbHMucHVzaChyQ2VsbCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5tYXRyaXguaGFzVG90YWwpIHtcclxuICAgICAgcmVzLmNlbGxzLnB1c2goXHJcbiAgICAgICAgdGhpcy5jcmVhdGVFZGl0Q2VsbCh0aGlzLm1hdHJpeC52aXNpYmxlVG90YWxSb3cuY2VsbHNbaW5kZXhdKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG4gIHByaXZhdGUgY3JlYXRlRW5kVmVydGljYWxBY3Rpb25Sb3coKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93IHtcclxuICAgIHZhciByZXMgPSBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93KHRoaXMuY3NzQ2xhc3Nlcyk7XHJcbiAgICBpZiAodGhpcy5tYXRyaXguc2hvd0hlYWRlcikge1xyXG4gICAgICByZXMuY2VsbHMucHVzaCh0aGlzLmNyZWF0ZUVtcHR5Q2VsbCgpKTtcclxuICAgIH1cclxuICAgIHZhciByb3dzID0gdGhpcy5tYXRyaXgudmlzaWJsZVJvd3M7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgcmVzLmNlbGxzLnB1c2godGhpcy5nZXRSb3dBY3Rpb25zQ2VsbChpLCBcImVuZFwiKSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5tYXRyaXguaGFzVG90YWwpIHtcclxuICAgICAgcmVzLmNlbGxzLnB1c2godGhpcy5jcmVhdGVFbXB0eUNlbGwoKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuICBwcml2YXRlIGNyZWF0ZU11dGxpcGxlRWRpdENlbGxzKFxyXG4gICAgclJvdzogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkUm93LFxyXG4gICAgY2VsbDogTWF0cml4RHJvcGRvd25DZWxsLFxyXG4gICAgaXNGb290ZXI6IGJvb2xlYW4gPSBmYWxzZVxyXG4gICkge1xyXG4gICAgdmFyIGNob2ljZXMgPSBpc0Zvb3RlclxyXG4gICAgICA/IHRoaXMuZ2V0TXVsdGlwbGVDb2x1bW5DaG9pY2VzKGNlbGwuY29sdW1uKVxyXG4gICAgICA6IGNlbGwucXVlc3Rpb24udmlzaWJsZUNob2ljZXM7XHJcbiAgICBpZiAoIWNob2ljZXMpIHJldHVybjtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hvaWNlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICB2YXIgckNlbGwgPSB0aGlzLmNyZWF0ZUVkaXRDZWxsKGNlbGwsICFpc0Zvb3RlciA/IGNob2ljZXNbaV0gOiB1bmRlZmluZWQpO1xyXG4gICAgICBpZiAoIWlzRm9vdGVyKSB7XHJcbiAgICAgICAgLy9yQ2VsbC5pdGVtID0gY2hvaWNlc1tpXTtcclxuICAgICAgICByQ2VsbC5jaG9pY2VJbmRleCA9IGk7XHJcbiAgICAgIH1cclxuICAgICAgclJvdy5jZWxscy5wdXNoKHJDZWxsKTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBjcmVhdGVFZGl0Q2VsbChcclxuICAgIGNlbGw6IE1hdHJpeERyb3Bkb3duQ2VsbCxcclxuICAgIGNob2ljZUl0ZW06IGFueSA9IHVuZGVmaW5lZFxyXG4gICk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwge1xyXG4gICAgdmFyIHJlcyA9IG5ldyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsKCk7XHJcbiAgICByZXMuY2VsbCA9IGNlbGw7XHJcbiAgICByZXMucm93ID0gY2VsbC5yb3c7XHJcbiAgICByZXMucXVlc3Rpb24gPSBjZWxsLnF1ZXN0aW9uO1xyXG4gICAgcmVzLm1hdHJpeCA9IHRoaXMubWF0cml4O1xyXG4gICAgcmVzLml0ZW0gPSBjaG9pY2VJdGVtO1xyXG5cclxuICAgIHJlcy5jbGFzc05hbWUgPSByZXMuY2FsY3VsYXRlRmluYWxDbGFzc05hbWUodGhpcy5jc3NDbGFzc2VzKTtcclxuICAgIC8vcmVzLmNzcyA9IHJlcy5jYWxjQ3NzKHRoaXMuY3NzQ2xhc3Nlcy5jZWxsKTtcclxuXHJcbiAgICAvLyB2YXIgcXVlc3Rpb25Dc3MgPSBjZWxsLnF1ZXN0aW9uLmNzc0NsYXNzZXM7XHJcbiAgICAvLyB2YXIgY2xhc3NOYW1lID0gXCJcIjtcclxuICAgIC8vIGlmICghIXF1ZXN0aW9uQ3NzKSB7XHJcbiAgICAvLyAgIGNsYXNzTmFtZSA9IFwiXCI7XHJcbiAgICAvLyAgIGlmICghIXF1ZXN0aW9uQ3NzLml0ZW1WYWx1ZSkge1xyXG4gICAgLy8gICAgIGNsYXNzTmFtZSArPSBcIiBcIiArIHF1ZXN0aW9uQ3NzLml0ZW1WYWx1ZTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gICBpZiAoISFxdWVzdGlvbkNzcy5hc0NlbGwpIHtcclxuICAgIC8vICAgICBpZiAoISFjbGFzc05hbWUpIGNsYXNzTmFtZSArPSBcIlwiO1xyXG4gICAgLy8gICAgIGNsYXNzTmFtZSArPSBxdWVzdGlvbkNzcy5hc0NlbGw7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuICAgIC8vIGlmICghY2xhc3NOYW1lICYmICEhdGhpcy5jc3NDbGFzc2VzLmNlbGwpIHtcclxuICAgIC8vICAgY2xhc3NOYW1lID0gdGhpcy5jc3NDbGFzc2VzLmNlbGw7XHJcbiAgICAvLyB9XHJcbiAgICAvL3Jlcy5jbGFzc05hbWUgPSBjbGFzc05hbWU7XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuICBwcml2YXRlIGNyZWF0ZU11dGxpcGxlQ29sdW1uc0Zvb3RlcihcclxuICAgIHJSb3c6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZFJvdyxcclxuICAgIGNlbGw6IE1hdHJpeERyb3Bkb3duQ2VsbFxyXG4gICkge1xyXG4gICAgdGhpcy5jcmVhdGVNdXRsaXBsZUVkaXRDZWxscyhyUm93LCBjZWxsLCB0cnVlKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBjcmVhdGVNdXRsaXBsZUNvbHVtbnNIZWFkZXIoY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbikge1xyXG4gICAgdmFyIGNob2ljZXMgPSB0aGlzLmdldE11bHRpcGxlQ29sdW1uQ2hvaWNlcyhjb2x1bW4pO1xyXG4gICAgaWYgKCFjaG9pY2VzKSByZXR1cm47XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNob2ljZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdmFyIGNlbGwgPSB0aGlzLmNyZWF0ZVRleHRDZWxsKGNob2ljZXNbaV0ubG9jVGV4dCk7XHJcbiAgICAgIHRoaXMuc2V0SGVhZGVyQ2VsbChjb2x1bW4sIGNlbGwpO1xyXG4gICAgICB0aGlzLmhlYWRlclJvdy5jZWxscy5wdXNoKGNlbGwpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIGdldE11bHRpcGxlQ29sdW1uQ2hvaWNlcyhjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uKTogYW55IHtcclxuICAgIHZhciBjaG9pY2VzID0gY29sdW1uLnRlbXBsYXRlUXVlc3Rpb24uY2hvaWNlcztcclxuICAgIGlmICghIWNob2ljZXMgJiYgQXJyYXkuaXNBcnJheShjaG9pY2VzKSAmJiBjaG9pY2VzLmxlbmd0aCA9PSAwKVxyXG4gICAgICByZXR1cm4gdGhpcy5tYXRyaXguY2hvaWNlcztcclxuICAgIGNob2ljZXMgPSBjb2x1bW4udGVtcGxhdGVRdWVzdGlvbi52aXNpYmxlQ2hvaWNlcztcclxuICAgIGlmICghY2hvaWNlcyB8fCAhQXJyYXkuaXNBcnJheShjaG9pY2VzKSkgcmV0dXJuIG51bGw7XHJcbiAgICByZXR1cm4gY2hvaWNlcztcclxuICB9XHJcbiAgcHJpdmF0ZSBjcmVhdGVIZWFkZXJDZWxsKFxyXG4gICAgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtblxyXG4gICk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwge1xyXG4gICAgdmFyIGNlbGwgPSB0aGlzLmNyZWF0ZVRleHRDZWxsKCEhY29sdW1uID8gY29sdW1uLmxvY1RpdGxlIDogbnVsbCk7XHJcbiAgICBjZWxsLmNvbHVtbiA9IGNvbHVtbjtcclxuICAgIHRoaXMuc2V0SGVhZGVyQ2VsbChjb2x1bW4sIGNlbGwpO1xyXG4gICAgaWYgKHRoaXMuY3NzQ2xhc3Nlcy5oZWFkZXJDZWxsKSB7XHJcbiAgICAgIGNlbGwuY2xhc3NOYW1lID0gdGhpcy5jc3NDbGFzc2VzLmhlYWRlckNlbGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2VsbDtcclxuICB9XHJcbiAgcHJpdmF0ZSBzZXRIZWFkZXJDZWxsKFxyXG4gICAgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbixcclxuICAgIGNlbGw6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGxcclxuICApIHtcclxuICAgIHRoaXMuc2V0SGVhZGVyQ2VsbFdpZHRoKGNvbHVtbiwgY2VsbCk7XHJcbiAgICB0aGlzLnNldFJlcXVyaWVkVG9IZWFkZXJDZWxsKGNvbHVtbiwgY2VsbCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgc2V0SGVhZGVyQ2VsbFdpZHRoKFxyXG4gICAgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbixcclxuICAgIGNlbGw6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGxcclxuICApIHtcclxuICAgIGNlbGwubWluV2lkdGggPSBjb2x1bW4gIT0gbnVsbCA/IHRoaXMubWF0cml4LmdldENvbHVtbldpZHRoKGNvbHVtbikgOiBcIlwiO1xyXG4gICAgY2VsbC53aWR0aCA9IGNvbHVtbiAhPSBudWxsID8gY29sdW1uLndpZHRoIDogdGhpcy5tYXRyaXguZ2V0Um93VGl0bGVXaWR0aCgpO1xyXG4gIH1cclxuICBwcml2YXRlIHNldFJlcXVyaWVkVG9IZWFkZXJDZWxsKFxyXG4gICAgY29sdW1uOiBNYXRyaXhEcm9wZG93bkNvbHVtbixcclxuICAgIGNlbGw6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGxcclxuICApIHtcclxuICAgIGlmICghIWNvbHVtbiAmJiBjb2x1bW4uaXNSZXF1aXJlZCAmJiB0aGlzLm1hdHJpeC5zdXJ2ZXkpIHtcclxuICAgICAgY2VsbC5yZXF1aXJlZFRleHQgPSB0aGlzLm1hdHJpeC5zdXJ2ZXkucmVxdWlyZWRUZXh0O1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIGNyZWF0ZVJlbW92ZVJvd0NlbGwoXHJcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlXHJcbiAgKTogUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCB7XHJcbiAgICB2YXIgcmVzID0gbmV3IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwoKTtcclxuICAgIHJlcy5yb3cgPSByb3c7XHJcbiAgICByZXMuaXNSZW1vdmVSb3cgPSB0aGlzLmNhblJlbW92ZVJvdyhyb3cpO1xyXG4gICAgaWYgKCEhdGhpcy5jc3NDbGFzc2VzLmNlbGwpIHtcclxuICAgICAgcmVzLmNsYXNzTmFtZSA9IHRoaXMuY3NzQ2xhc3Nlcy5jZWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcbiAgcHJpdmF0ZSBjcmVhdGVUZXh0Q2VsbChcclxuICAgIGxvY1RpdGxlOiBMb2NhbGl6YWJsZVN0cmluZ1xyXG4gICk6IFF1ZXN0aW9uTWF0cml4RHJvcGRvd25SZW5kZXJlZENlbGwge1xyXG4gICAgdmFyIGNlbGwgPSBuZXcgUXVlc3Rpb25NYXRyaXhEcm9wZG93blJlbmRlcmVkQ2VsbCgpO1xyXG4gICAgY2VsbC5sb2NUaXRsZSA9IGxvY1RpdGxlO1xyXG4gICAgaWYgKCEhdGhpcy5jc3NDbGFzc2VzLmNlbGwpIHtcclxuICAgICAgY2VsbC5jbGFzc05hbWUgPSB0aGlzLmNzc0NsYXNzZXMuY2VsbDtcclxuICAgIH1cclxuICAgIHJldHVybiBjZWxsO1xyXG4gIH1cclxuICBwcml2YXRlIGNyZWF0ZUVtcHR5Q2VsbCgpOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRDZWxsIHtcclxuICAgIGNvbnN0IHJlcyA9IHRoaXMuY3JlYXRlVGV4dENlbGwobnVsbCk7XHJcbiAgICByZXMuaXNFbXB0eSA9IHRydWU7XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxufSIsImltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IElDb25kaXRpb25PYmplY3QsIFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7XG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UsXG4gIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICBJTWF0cml4RHJvcGRvd25EYXRhXG59IGZyb20gXCIuL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3duYmFzZVwiO1xuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuaW1wb3J0IHsgU3VydmV5RXJyb3IgfSBmcm9tIFwiLi9zdXJ2ZXktZXJyb3JcIjtcbmltcG9ydCB7IE1pblJvd0NvdW50RXJyb3IgfSBmcm9tIFwiLi9lcnJvclwiO1xuaW1wb3J0IHsgSUFjdGlvbiB9IGZyb20gXCIuL2FjdGlvbnMvYWN0aW9uXCI7XG5pbXBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCIuL3NldHRpbmdzXCI7XG5pbXBvcnQgeyBjb25maXJtQWN0aW9uIH0gZnJvbSBcIi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IERyYWdEcm9wTWF0cml4Um93cyB9IGZyb20gXCIuL2RyYWdkcm9wL21hdHJpeC1yb3dzXCI7XG5pbXBvcnQgeyBJU3VydmV5SW1wbCB9IGZyb20gXCIuL2Jhc2UtaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgQ3NzQ2xhc3NCdWlsZGVyIH0gZnJvbSBcIi4vdXRpbHMvY3NzQ2xhc3NCdWlsZGVyXCI7XG5pbXBvcnQgeyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZSB9IGZyb20gXCIuL3F1ZXN0aW9uX21hdHJpeGRyb3Bkb3ducmVuZGVyZWRcIjtcbmltcG9ydCB7IE1hdHJpeERyb3Bkb3duQ29sdW1uIH0gZnJvbSBcIi4vcXVlc3Rpb25fbWF0cml4ZHJvcGRvd25jb2x1bW5cIjtcblxuZXhwb3J0IGNsYXNzIE1hdHJpeER5bmFtaWNSb3dNb2RlbCBleHRlbmRzIE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlIHtcbiAgY29uc3RydWN0b3IocHVibGljIGluZGV4OiBudW1iZXIsIGRhdGE6IElNYXRyaXhEcm9wZG93bkRhdGEsIHZhbHVlOiBhbnkpIHtcbiAgICBzdXBlcihkYXRhLCB2YWx1ZSk7XG4gICAgdGhpcy5idWlsZENlbGxzKHZhbHVlKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHJvd05hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBBIE1vZGVsIGZvciBhIG1hdHJpeCBkeW1hbmljIHF1ZXN0aW9uLiBZb3UgbWF5IHVzZSBhIGRyb3Bkb3duLCBjaGVja2JveCwgcmFkaW9ncm91cCwgdGV4dCBhbmQgY29tbWVudCBxdWVzdGlvbnMgYXMgYSBjZWxsIGVkaXRvcnMuXG4gKiBBbiBlbmQtdXNlciBtYXkgZHluYW1pY2FsbHkgYWRkL3JlbW92ZSByb3dzLCB1bmxpa2UgaW4gbWF0cml4IGRyb3Bkb3duIHF1ZXN0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwgZXh0ZW5kcyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlXG4gIGltcGxlbWVudHMgSU1hdHJpeERyb3Bkb3duRGF0YSB7XG4gIHB1YmxpYyBvbkdldFZhbHVlRm9yTmV3Um93Q2FsbEJhY2s6IChcbiAgICBzZW5kZXI6IFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsXG4gICkgPT4gYW55O1xuICBwcml2YXRlIHJvd0NvdW50ZXIgPSAwO1xuICBwcml2YXRlIGluaXRpYWxSb3dDb3VudDogbnVtYmVyID0gMjtcbiAgcHJpdmF0ZSBzZXRSb3dDb3VudFZhbHVlRnJvbURhdGE6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB2b2lkICg8TG9jYWxpemFibGVTdHJpbmc+KFxuICAgICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImNvbmZpcm1EZWxldGVUZXh0XCIsIHRoaXMpXG4gICAgKSk7XG4gICAgdmFyIGxvY0FkZFJvd1RleHQgPSB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwiYWRkUm93VGV4dFwiLCB0aGlzKTtcbiAgICBsb2NBZGRSb3dUZXh0Lm9uR2V0VGV4dENhbGxiYWNrID0gKHRleHQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gISF0ZXh0ID8gdGV4dCA6IHRoaXMuZGVmYXVsdEFkZFJvd1RleHQ7XG4gICAgfTtcbiAgICB2YXIgbG9jUmVtb3ZlUm93VGV4dCA9IHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJyZW1vdmVSb3dUZXh0XCIsIHRoaXMpO1xuICAgIGxvY1JlbW92ZVJvd1RleHQub25HZXRUZXh0Q2FsbGJhY2sgPSAodGV4dDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgIHJldHVybiAhIXRleHQgPyB0ZXh0IDogc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInJlbW92ZVJvd1wiKTtcbiAgICB9O1xuICAgIHZhciBsb2NFbXB0eVJvd3NUZXh0ID0gPExvY2FsaXphYmxlU3RyaW5nPihcbiAgICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJlbXB0eVJvd3NUZXh0XCIsIHRoaXMpXG4gICAgKTtcbiAgICBsb2NFbXB0eVJvd3NUZXh0Lm9uR2V0VGV4dENhbGxiYWNrID0gKHRleHQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gISF0ZXh0ID8gdGV4dCA6IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJlbXB0eVJvd3NUZXh0XCIpO1xuICAgIH07XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0aWVzVmFsdWVDaGFuZ2VkKFxuICAgICAgW1wiaGlkZUNvbHVtbnNJZkVtcHR5XCIsIFwiYWxsb3dBZGRSb3dzXCJdLFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZVNob3dUYWJsZUFuZEFkZFJvdygpO1xuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcImFsbG93Um93c0RyYWdBbmREcm9wXCIsICgpID0+IHtcbiAgICAgIHRoaXMuY2xlYXJSb3dzQW5kUmVzZXRSZW5kZXJlZFRhYmxlKCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZHJhZ0Ryb3BNYXRyaXhSb3dzOiBEcmFnRHJvcE1hdHJpeFJvd3M7XG4gIHB1YmxpYyBzZXRTdXJ2ZXlJbXBsKHZhbHVlOiBJU3VydmV5SW1wbCwgaXNMaWdodD86IGJvb2xlYW4pIHtcbiAgICBzdXBlci5zZXRTdXJ2ZXlJbXBsKHZhbHVlLCBpc0xpZ2h0KTtcbiAgICB0aGlzLmRyYWdEcm9wTWF0cml4Um93cyA9IG5ldyBEcmFnRHJvcE1hdHJpeFJvd3ModGhpcy5zdXJ2ZXkpO1xuICB9XG5cbiAgcHVibGljIHN0YXJ0RHJhZ01hdHJpeFJvdyhcbiAgICBldmVudDogUG9pbnRlckV2ZW50LFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2VcbiAgKSB7XG4gICAgdGhpcy5kcmFnRHJvcE1hdHJpeFJvd3Muc3RhcnREcmFnKGV2ZW50LCByb3csIHRoaXMpO1xuICB9XG5cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJtYXRyaXhkeW5hbWljXCI7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzUm93c0R5bmFtaWMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBpdCB0byB0cnVlLCB0byBzaG93IGEgY29uZmlybWF0aW9uIGRpYWxvZyBvbiByZW1vdmluZyBhIHJvd1xuICAgKiBAc2VlIENvbmZpcm1EZWxldGVUZXh0XG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbmZpcm1EZWxldGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvbmZpcm1EZWxldGVcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgY29uZmlybURlbGV0ZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjb25maXJtRGVsZXRlXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCBpdCB0byBhIGNvbHVtbiBuYW1lIGFuZCB0aGUgbGlicmFyeSBzaG93cyBkdXBsaWNhdGlvbiBlcnJvciwgaWYgdGhlcmUgYXJlIHNhbWUgdmFsdWVzIGluIGRpZmZlcmVudCByb3dzIGluIHRoZSBjb2x1bW4uXG4gICAqIEBzZWUga2V5RHVwbGljYXRpb25FcnJvclxuICAgKi9cbiAgcHVibGljIGdldCBrZXlOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImtleU5hbWVcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBrZXlOYW1lKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwia2V5TmFtZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBJZiBpdCBpcyBub3QgZW1wdHksIHRoZW4gdGhpcyB2YWx1ZSBpcyBzZXQgdG8gZXZlcnkgbmV3IHJvdywgaW5jbHVkaW5nIHJvd3MgY3JlYXRlZCBpbml0aWFsbHksIHVubGVzcyB0aGUgZGVmYXVsdFZhbHVlIGlzIG5vdCBlbXB0eVxuICAgKiBAc2VlIGRlZmF1bHRWYWx1ZVxuICAgKiBAc2VlIGRlZmF1bHRWYWx1ZUZyb21MYXN0Um93XG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlZmF1bHRSb3dWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJkZWZhdWx0Um93VmFsdWVcIik7XG4gIH1cbiAgcHVibGljIHNldCBkZWZhdWx0Um93VmFsdWUodmFsOiBhbnkpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJkZWZhdWx0Um93VmFsdWVcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogU2V0IGl0IHRvIHRydWUgdG8gY29weSB0aGUgdmFsdWUgaW50byBuZXcgYWRkZWQgcm93IGZyb20gdGhlIGxhc3Qgcm93LiBJZiBkZWZhdWx0Um93VmFsdWUgaXMgc2V0IGFuZCB0aGlzIHByb3BlcnR5IGVxdWFscyB0byB0cnVlLFxuICAgKiB0aGVuIHRoZSB2YWx1ZSBmb3IgbmV3IGFkZGVkIHJvdyBpcyBtZXJnaW5nLlxuICAgKiBAc2VlIGRlZmF1bHRWYWx1ZVxuICAgKiBAc2VlIGRlZmF1bHRSb3dWYWx1ZVxuICAgKi9cbiAgcHVibGljIGdldCBkZWZhdWx0VmFsdWVGcm9tTGFzdFJvdygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZGVmYXVsdFZhbHVlRnJvbUxhc3RSb3dcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgZGVmYXVsdFZhbHVlRnJvbUxhc3RSb3codmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZGVmYXVsdFZhbHVlRnJvbUxhc3RSb3dcIiwgdmFsKTtcbiAgfVxuICBwcm90ZWN0ZWQgaXNEZWZhdWx0VmFsdWVFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgc3VwZXIuaXNEZWZhdWx0VmFsdWVFbXB0eSgpICYmIHRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuZGVmYXVsdFJvd1ZhbHVlKVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHZhbHVlRnJvbURhdGEodmFsOiBhbnkpOiBhbnkge1xuICAgIGlmICh0aGlzLm1pblJvd0NvdW50IDwgMSkgcmV0dXJuIHN1cGVyLnZhbHVlRnJvbURhdGEodmFsKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSkgdmFsID0gW107XG4gICAgZm9yICh2YXIgaSA9IHZhbC5sZW5ndGg7IGkgPCB0aGlzLm1pblJvd0NvdW50OyBpKyspIHZhbC5wdXNoKHt9KTtcbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIHByb3RlY3RlZCBzZXREZWZhdWx0VmFsdWUoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy5kZWZhdWx0Um93VmFsdWUpIHx8XG4gICAgICAhdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy5kZWZhdWx0VmFsdWUpXG4gICAgKSB7XG4gICAgICBzdXBlci5zZXREZWZhdWx0VmFsdWUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzRW1wdHkoKSB8fCB0aGlzLnJvd0NvdW50ID09IDApIHJldHVybjtcbiAgICB2YXIgbmV3VmFsdWUgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucm93Q291bnQ7IGkrKykge1xuICAgICAgbmV3VmFsdWUucHVzaCh0aGlzLmRlZmF1bHRSb3dWYWx1ZSk7XG4gICAgfVxuICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZTtcbiAgfVxuICBwdWJsaWMgbW92ZVJvd0J5SW5kZXggPSAoZnJvbUluZGV4OiBudW1iZXIsIHRvSW5kZXg6IG51bWJlcik6dm9pZCA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmNyZWF0ZU5ld1ZhbHVlKCk7XG5cbiAgICBpZiAoIXZhbHVlKSByZXR1cm47XG5cbiAgICBjb25zdCBtb3ZhYmxlUm93ID0gdmFsdWVbZnJvbUluZGV4XTtcblxuICAgIGlmICghbW92YWJsZVJvdykgcmV0dXJuO1xuXG4gICAgdmFsdWUuc3BsaWNlKGZyb21JbmRleCwgMSk7XG4gICAgdmFsdWUuc3BsaWNlKHRvSW5kZXgsIDAsIG1vdmFibGVSb3cpO1xuXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9O1xuICAvKipcbiAgICogVGhlIG51bWJlciBvZiByb3dzIGluIHRoZSBtYXRyaXguXG4gICAqIEBzZWUgbWluUm93Q291bnRcbiAgICogQHNlZSBtYXhSb3dDb3VudFxuICAgKi9cbiAgcHVibGljIGdldCByb3dDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnJvd0NvdW50VmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCByb3dDb3VudCh2YWw6IG51bWJlcikge1xuICAgIGlmICh2YWwgPCAwIHx8IHZhbCA+IHNldHRpbmdzLm1hdHJpeE1heGltdW1Sb3dDb3VudCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0Um93Q291bnRWYWx1ZUZyb21EYXRhID0gZmFsc2U7XG4gICAgdmFyIHByZXZWYWx1ZSA9IHRoaXMucm93Q291bnRWYWx1ZTtcbiAgICB0aGlzLnJvd0NvdW50VmFsdWUgPSB2YWw7XG4gICAgaWYgKHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiB2YWwpIHtcbiAgICAgIHZhciBxVmFsID0gdGhpcy52YWx1ZTtcbiAgICAgIHFWYWwuc3BsaWNlKHZhbCk7XG4gICAgICB0aGlzLnZhbHVlID0gcVZhbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNVcGRhdGVMb2NrZWQpIHtcbiAgICAgIHRoaXMuaW5pdGlhbFJvd0NvdW50ID0gdmFsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cyB8fCBwcmV2VmFsdWUgPT0gMCkge1xuICAgICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSB7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MgPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3Muc3BsaWNlKHZhbCk7XG4gICAgICBmb3IgKHZhciBpID0gcHJldlZhbHVlOyBpIDwgdmFsOyBpKyspIHtcbiAgICAgICAgdmFyIG5ld1JvdyA9IHRoaXMuY3JlYXRlTWF0cml4Um93KHRoaXMuZ2V0VmFsdWVGb3JOZXdSb3coKSk7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MucHVzaChuZXdSb3cpO1xuICAgICAgICB0aGlzLm9uTWF0cml4Um93Q3JlYXRlZChuZXdSb3cpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9uUm93c0NoYW5nZWQoKTtcbiAgfVxuICBwcml2YXRlIGdldFZhbHVlRm9yTmV3Um93KCk6IGFueSB7XG4gICAgdmFyIHJlcyA9IG51bGw7XG4gICAgaWYgKCEhdGhpcy5vbkdldFZhbHVlRm9yTmV3Um93Q2FsbEJhY2spIHtcbiAgICAgIHJlcyA9IHRoaXMub25HZXRWYWx1ZUZvck5ld1Jvd0NhbGxCYWNrKHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlLCB0byBhbGxvdyByb3dzIGRyYWcgYW5kIGRyb3AuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFsbG93Um93c0RyYWdBbmREcm9wKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhbGxvd1Jvd3NEcmFnQW5kRHJvcFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGFsbG93Um93c0RyYWdBbmREcm9wKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImFsbG93Um93c0RyYWdBbmREcm9wXCIsIHZhbCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlUmVuZGVyZWRUYWJsZSgpOiBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbk1hdHJpeER5bmFtaWNSZW5kZXJlZFRhYmxlKHRoaXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgcm93Q291bnRWYWx1ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyb3dDb3VudFwiKTtcbiAgfVxuICBwcml2YXRlIHNldCByb3dDb3VudFZhbHVlKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicm93Q291bnRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIG1pbmltdW0gcm93IGNvdW50LiBBIHVzZXIgY291bGQgbm90IGRlbGV0ZSBhIHJvdyBpZiB0aGUgcm93Q291bnQgZXF1YWxzIHRvIG1pblJvd0NvdW50XG4gICAqIEBzZWUgcm93Q291bnRcbiAgICogQHNlZSBtYXhSb3dDb3VudFxuICAgKiBAc2VlIGFsbG93QWRkUm93c1xuICAgKi9cbiAgcHVibGljIGdldCBtaW5Sb3dDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtaW5Sb3dDb3VudFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1pblJvd0NvdW50KHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKHZhbCA8IDApIHZhbCA9IDA7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWluUm93Q291bnRcIiwgdmFsKTtcbiAgICBpZiAodmFsID4gdGhpcy5tYXhSb3dDb3VudCkgdGhpcy5tYXhSb3dDb3VudCA9IHZhbDtcbiAgICBpZiAodGhpcy5yb3dDb3VudCA8IHZhbCkgdGhpcy5yb3dDb3VudCA9IHZhbDtcbiAgfVxuICAvKipcbiAgICogVGhlIG1heGltdW0gcm93IGNvdW50LiBBIHVzZXIgY291bGQgbm90IGFkZCBhIHJvdyBpZiB0aGUgcm93Q291bnQgZXF1YWxzIHRvIG1heFJvd0NvdW50XG4gICAqIEBzZWUgcm93Q291bnRcbiAgICogQHNlZSBtaW5Sb3dDb3VudFxuICAgKiBAc2VlIGFsbG93QWRkUm93c1xuICAgKi9cbiAgcHVibGljIGdldCBtYXhSb3dDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhSb3dDb3VudFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1heFJvd0NvdW50KHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKHZhbCA8PSAwKSByZXR1cm47XG4gICAgaWYgKHZhbCA+IHNldHRpbmdzLm1hdHJpeE1heGltdW1Sb3dDb3VudClcbiAgICAgIHZhbCA9IHNldHRpbmdzLm1hdHJpeE1heGltdW1Sb3dDb3VudDtcbiAgICBpZiAodmFsID09IHRoaXMubWF4Um93Q291bnQpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtYXhSb3dDb3VudFwiLCB2YWwpO1xuICAgIGlmICh2YWwgPCB0aGlzLm1pblJvd0NvdW50KSB0aGlzLm1pblJvd0NvdW50ID0gdmFsO1xuICAgIGlmICh0aGlzLnJvd0NvdW50ID4gdmFsKSB0aGlzLnJvd0NvdW50ID0gdmFsO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBmYWxzZSB0byBkaXNhYmxlIGFiaWxpdHkgdG8gYWRkIG5ldyByb3dzLiBcIkFkZCBuZXcgUm93XCIgYnV0dG9uIGJlY29tZXMgaW52c2libGUgaW4gVUlcbiAgICogQHNlZSBjYW5BZGRSb3dcbiAgICogQHNlZSBhbGxvd1JlbW92ZVJvd3NcbiAgICovXG4gIHB1YmxpYyBnZXQgYWxsb3dBZGRSb3dzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhbGxvd0FkZFJvd3NcIik7XG4gIH1cbiAgcHVibGljIHNldCBhbGxvd0FkZFJvd3ModmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dBZGRSb3dzXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGZhbHNlIHRvIGRpc2FibGUgYWJpbGl0eSB0byByZW1vdmUgcm93cy4gXCJSZW1vdmVcIiByb3cgYnV0dG9ucyBiZWNvbWUgaW52c2libGUgaW4gVUlcbiAgICogQHNlZSBjYW5SZW1vdmVSb3dzXG4gICAqIEBzZWUgYWxsb3dBZGRSb3dzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFsbG93UmVtb3ZlUm93cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dSZW1vdmVSb3dzXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgYWxsb3dSZW1vdmVSb3dzKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImFsbG93UmVtb3ZlUm93c1wiLCB2YWwpO1xuICAgIGlmICghdGhpcy5pc1VwZGF0ZUxvY2tlZCkge1xuICAgICAgdGhpcy5yZXNldFJlbmRlcmVkVGFibGUoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSwgaWYgYSBuZXcgcm93IGNhbiBiZSBhZGRlZC5cbiAgICogQHNlZSBhbGxvd0FkZFJvd3NcbiAgICogQHNlZSBtYXhSb3dDb3VudFxuICAgKiBAc2VlIGNhblJlbW92ZVJvd3NcbiAgICogQHNlZSByb3dDb3VudFxuICAgKi9cbiAgcHVibGljIGdldCBjYW5BZGRSb3coKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuYWxsb3dBZGRSb3dzICYmICF0aGlzLmlzUmVhZE9ubHkgJiYgdGhpcy5yb3dDb3VudCA8IHRoaXMubWF4Um93Q291bnRcbiAgICApO1xuICB9XG4gIHB1YmxpYyBjYW5SZW1vdmVSb3dzQ2FsbGJhY2s6IChhbGxvdzogYm9vbGVhbikgPT4gYm9vbGVhbjtcbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSwgaWYgcm93IGNhbiBiZSByZW1vdmVkLlxuICAgKiBAc2VlIG1pblJvd0NvdW50XG4gICAqIEBzZWUgY2FuQWRkUm93XG4gICAqIEBzZWUgcm93Q291bnRcbiAgICovXG4gIHB1YmxpYyBnZXQgY2FuUmVtb3ZlUm93cygpOiBib29sZWFuIHtcbiAgICB2YXIgcmVzID1cbiAgICAgIHRoaXMuYWxsb3dSZW1vdmVSb3dzICYmXG4gICAgICAhdGhpcy5pc1JlYWRPbmx5ICYmXG4gICAgICB0aGlzLnJvd0NvdW50ID4gdGhpcy5taW5Sb3dDb3VudDtcbiAgICByZXR1cm4gISF0aGlzLmNhblJlbW92ZVJvd3NDYWxsYmFjayA/IHRoaXMuY2FuUmVtb3ZlUm93c0NhbGxiYWNrKHJlcykgOiByZXM7XG4gIH1cbiAgcHVibGljIGNhblJlbW92ZVJvdyhyb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnN1cnZleSkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5Lm1hdHJpeEFsbG93UmVtb3ZlUm93KFxuICAgICAgdGhpcyxcbiAgICAgICg8TWF0cml4RHluYW1pY1Jvd01vZGVsPnJvdykuaW5kZXgsXG4gICAgICByb3dcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuZCBhZGQgYSBuZXcgcm93IGFuZCBmb2N1cyB0aGUgY2VsbCBpbiB0aGUgZmlyc3QgY29sdW1uLlxuICAgKi9cbiAgcHVibGljIGFkZFJvd1VJKCkge1xuICAgIHZhciBvbGRSb3dDb3VudCA9IHRoaXMucm93Q291bnQ7XG4gICAgdGhpcy5hZGRSb3coKTtcbiAgICBpZiAob2xkUm93Q291bnQgPT09IHRoaXMucm93Q291bnQpIHJldHVybjtcbiAgICB2YXIgcSA9IHRoaXMuZ2V0UXVlc3Rpb25Ub0ZvY3VzT25BZGRpbmdSb3coKTtcbiAgICBpZiAoISFxKSB7XG4gICAgICBxLmZvY3VzKCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0UXVlc3Rpb25Ub0ZvY3VzT25BZGRpbmdSb3coKTogUXVlc3Rpb24ge1xuICAgIHZhciByb3cgPSB0aGlzLnZpc2libGVSb3dzW3RoaXMudmlzaWJsZVJvd3MubGVuZ3RoIC0gMV07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3cuY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxID0gcm93LmNlbGxzW2ldLnF1ZXN0aW9uO1xuICAgICAgaWYgKCEhcSAmJiBxLmlzVmlzaWJsZSAmJiAhcS5pc1JlYWRPbmx5KSB7XG4gICAgICAgIHJldHVybiBxO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlcyBhbmQgYWRkIGEgbmV3IHJvdy5cbiAgICovXG4gIHB1YmxpYyBhZGRSb3coKSB7XG4gICAgdmFyIG9wdGlvbnMgPSB7IHF1ZXN0aW9uOiB0aGlzLCBjYW5BZGRSb3c6IHRoaXMuY2FuQWRkUm93IH07XG4gICAgaWYgKCEhdGhpcy5zdXJ2ZXkpIHtcbiAgICAgIHRoaXMuc3VydmV5Lm1hdHJpeEJlZm9yZVJvd0FkZGVkKG9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMuY2FuQWRkUm93KSByZXR1cm47XG4gICAgdGhpcy5vblN0YXJ0Um93QWRkaW5nUmVtb3ZpbmcoKTtcbiAgICB0aGlzLmFkZFJvd0NvcmUoKTtcbiAgICB0aGlzLm9uRW5kUm93QWRkaW5nKCk7XG4gICAgaWYgKHRoaXMuZGV0YWlsUGFuZWxTaG93T25BZGRpbmcgJiYgdGhpcy52aXNpYmxlUm93cy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnZpc2libGVSb3dzW3RoaXMudmlzaWJsZVJvd3MubGVuZ3RoIC0gMV0uc2hvd0RldGFpbFBhbmVsKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlIHRvIHNob3cgZGV0YWlsIHBhbmVsIGltbWVkaWF0ZWx5IG9uIGFkZGluZyBhIG5ldyByb3cuXG4gICAqIEBzZWUgZGV0YWlsUGFuZWxNb2RlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRldGFpbFBhbmVsU2hvd09uQWRkaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJkZXRhaWxQYW5lbFNob3dPbkFkZGluZ1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRldGFpbFBhbmVsU2hvd09uQWRkaW5nKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImRldGFpbFBhbmVsU2hvd09uQWRkaW5nXCIsIHZhbCk7XG4gIH1cbiAgcHJvdGVjdGVkIGhhc1Jvd3NBc0l0ZW1zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgdW5iaW5kVmFsdWUoKSB7XG4gICAgdGhpcy5jbGVhckdlbmVyYXRlZFJvd3MoKTtcbiAgICB0aGlzLmNsZWFyUHJvcGVydHlWYWx1ZShcInZhbHVlXCIpO1xuICAgIHRoaXMucm93Q291bnRWYWx1ZSA9IDA7XG4gICAgc3VwZXIudW5iaW5kVmFsdWUoKTtcbiAgfVxuICBwcm90ZWN0ZWQgaXNWYWx1ZVN1cnZleUVsZW1lbnQodmFsOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0VkaXRpbmdTdXJ2ZXlFbGVtZW50IHx8IHN1cGVyLmlzVmFsdWVTdXJ2ZXlFbGVtZW50KHZhbCk7XG4gIH1cbiAgcHJpdmF0ZSBhZGRSb3dDb3JlKCkge1xuICAgIHZhciBwcmV2Um93Q291bnQgPSB0aGlzLnJvd0NvdW50O1xuICAgIHRoaXMucm93Q291bnQgPSB0aGlzLnJvd0NvdW50ICsgMTtcbiAgICB2YXIgZGVmYXVsdFZhbHVlID0gdGhpcy5nZXREZWZhdWx0Um93VmFsdWUodHJ1ZSk7XG4gICAgdmFyIG5ld1ZhbHVlID0gbnVsbDtcbiAgICBpZiAoIXRoaXMuaXNWYWx1ZUVtcHR5KGRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgIG5ld1ZhbHVlID0gdGhpcy5jcmVhdGVOZXdWYWx1ZSgpO1xuICAgICAgaWYgKG5ld1ZhbHVlLmxlbmd0aCA9PSB0aGlzLnJvd0NvdW50KSB7XG4gICAgICAgIG5ld1ZhbHVlW25ld1ZhbHVlLmxlbmd0aCAtIDFdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgIHRoaXMucnVuQ2VsbHNDb25kaXRpb24oXG4gICAgICAgIHRoaXMuZ2V0RGF0YUZpbHRlcmVkVmFsdWVzKCksXG4gICAgICAgIHRoaXMuZ2V0RGF0YUZpbHRlcmVkUHJvcGVydGllcygpXG4gICAgICApO1xuICAgICAgdmFyIHJvdyA9IHRoaXMudmlzaWJsZVJvd3NbdGhpcy5yb3dDb3VudCAtIDFdO1xuICAgICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eShyb3cudmFsdWUpKSB7XG4gICAgICAgIGlmICghbmV3VmFsdWUpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9IHRoaXMuY3JlYXRlTmV3VmFsdWUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgIXRoaXMuaXNWYWx1ZVN1cnZleUVsZW1lbnQobmV3VmFsdWUpICYmXG4gICAgICAgICAgIXRoaXMuaXNUd29WYWx1ZUVxdWFscyhuZXdWYWx1ZVtuZXdWYWx1ZS5sZW5ndGggLSAxXSwgcm93LnZhbHVlKVxuICAgICAgICApIHtcbiAgICAgICAgICBuZXdWYWx1ZVtuZXdWYWx1ZS5sZW5ndGggLSAxXSA9IHJvdy52YWx1ZTtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICBpZiAocHJldlJvd0NvdW50ICsgMSA9PSB0aGlzLnJvd0NvdW50KSB7XG4gICAgICAgIHRoaXMuc3VydmV5Lm1hdHJpeFJvd0FkZGVkKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy52aXNpYmxlUm93c1t0aGlzLnZpc2libGVSb3dzLmxlbmd0aCAtIDFdXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMub25Sb3dzQ2hhbmdlZCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldERlZmF1bHRSb3dWYWx1ZShpc1Jvd0FkZGVkOiBib29sZWFuKTogYW55IHtcbiAgICB2YXIgcmVzID0gbnVsbDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHEgPSB0aGlzLmNvbHVtbnNbaV0udGVtcGxhdGVRdWVzdGlvbjtcbiAgICAgIGlmICghIXEgJiYgIXRoaXMuaXNWYWx1ZUVtcHR5KHEuZ2V0RGVmYXVsdFZhbHVlKCkpKSB7XG4gICAgICAgIHJlcyA9IHJlcyB8fCB7fTtcbiAgICAgICAgKDxhbnk+cmVzKVt0aGlzLmNvbHVtbnNbaV0ubmFtZV0gPSBxLmdldERlZmF1bHRWYWx1ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuZGVmYXVsdFJvd1ZhbHVlKSkge1xuICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuZGVmYXVsdFJvd1ZhbHVlKSB7XG4gICAgICAgIHJlcyA9IHJlcyB8fCB7fTtcbiAgICAgICAgKDxhbnk+cmVzKVtrZXldID0gdGhpcy5kZWZhdWx0Um93VmFsdWVba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzUm93QWRkZWQgJiYgdGhpcy5kZWZhdWx0VmFsdWVGcm9tTGFzdFJvdykge1xuICAgICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgICBpZiAoISF2YWwgJiYgQXJyYXkuaXNBcnJheSh2YWwpICYmIHZhbC5sZW5ndGggPj0gdGhpcy5yb3dDb3VudCAtIDEpIHtcbiAgICAgICAgdmFyIHJvd1ZhbHVlID0gdmFsW3RoaXMucm93Q291bnQgLSAyXTtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHJvd1ZhbHVlKSB7XG4gICAgICAgICAgcmVzID0gcmVzIHx8IHt9O1xuICAgICAgICAgICg8YW55PnJlcylba2V5XSA9IHJvd1ZhbHVlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICAvKipcbiAgICogUmVtb3ZlcyBhIHJvdyBieSBpdCdzIGluZGV4LiBJZiBjb25maXJtRGVsZXRlIGlzIHRydWUsIHNob3cgYSBjb25maXJtYXRpb24gZGlhbG9nXG4gICAqIEBwYXJhbSBpbmRleCBhIHJvdyBpbmRleCwgZnJvbSAwIHRvIHJvd0NvdW50IC0gMVxuICAgKiBAc2VlIHJlbW92ZVJvd1xuICAgKiBAc2VlIGNvbmZpcm1EZWxldGVcbiAgICovXG4gIHB1YmxpYyByZW1vdmVSb3dVSSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKCEhdmFsdWUgJiYgISF2YWx1ZS5yb3dOYW1lKSB7XG4gICAgICB2YXIgaW5kZXggPSB0aGlzLnZpc2libGVSb3dzLmluZGV4T2YodmFsdWUpO1xuICAgICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuO1xuICAgICAgdmFsdWUgPSBpbmRleDtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgIXRoaXMuaXNSZXF1aXJlQ29uZmlybU9uUm93RGVsZXRlKHZhbHVlKSB8fFxuICAgICAgY29uZmlybUFjdGlvbih0aGlzLmNvbmZpcm1EZWxldGVUZXh0KVxuICAgICkge1xuICAgICAgdGhpcy5yZW1vdmVSb3codmFsdWUpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgaXNSZXF1aXJlQ29uZmlybU9uUm93RGVsZXRlKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY29uZmlybURlbGV0ZSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5yb3dDb3VudCkgcmV0dXJuIGZhbHNlO1xuICAgIHZhciB2YWx1ZSA9IHRoaXMuY3JlYXRlTmV3VmFsdWUoKTtcbiAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkodmFsdWUpIHx8ICFBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChpbmRleCA+PSB2YWx1ZS5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gIXRoaXMuaXNWYWx1ZUVtcHR5KHZhbHVlW2luZGV4XSk7XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSByb3cgYnkgaXQncyBpbmRleC5cbiAgICogQHBhcmFtIGluZGV4IGEgcm93IGluZGV4LCBmcm9tIDAgdG8gcm93Q291bnQgLSAxXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlUm93KGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoIXRoaXMuY2FuUmVtb3ZlUm93cykgcmV0dXJuO1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5yb3dDb3VudCkgcmV0dXJuO1xuICAgIHZhciByb3cgPVxuICAgICAgISF0aGlzLnZpc2libGVSb3dzICYmIGluZGV4IDwgdGhpcy52aXNpYmxlUm93cy5sZW5ndGhcbiAgICAgICAgPyB0aGlzLnZpc2libGVSb3dzW2luZGV4XVxuICAgICAgICA6IG51bGw7XG4gICAgaWYgKFxuICAgICAgISFyb3cgJiZcbiAgICAgICEhdGhpcy5zdXJ2ZXkgJiZcbiAgICAgICF0aGlzLnN1cnZleS5tYXRyaXhSb3dSZW1vdmluZyh0aGlzLCBpbmRleCwgcm93KVxuICAgIClcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLm9uU3RhcnRSb3dBZGRpbmdSZW1vdmluZygpO1xuICAgIHRoaXMucmVtb3ZlUm93Q29yZShpbmRleCk7XG4gICAgdGhpcy5vbkVuZFJvd1JlbW92aW5nKHJvdyk7XG4gIH1cbiAgcHJpdmF0ZSByZW1vdmVSb3dDb3JlKGluZGV4OiBudW1iZXIpIHtcbiAgICB2YXIgcm93ID0gdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93c1xuICAgICAgPyB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW2luZGV4XVxuICAgICAgOiBudWxsO1xuICAgIGlmICh0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzICYmIGluZGV4IDwgdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gICAgdGhpcy5yb3dDb3VudFZhbHVlLS07XG4gICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgIHZhciB2YWwgPSBbXTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpICYmIGluZGV4IDwgdGhpcy52YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgdmFsID0gdGhpcy5jcmVhdGVWYWx1ZUNvcHkoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbCA9IHRoaXMuY3JlYXRlTmV3VmFsdWUoKTtcbiAgICAgIH1cbiAgICAgIHZhbC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgdmFsID0gdGhpcy5kZWxldGVSb3dWYWx1ZSh2YWwsIG51bGwpO1xuICAgICAgdGhpcy5pc1Jvd0NoYW5naW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMudmFsdWUgPSB2YWw7XG4gICAgICB0aGlzLmlzUm93Q2hhbmdpbmcgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5vblJvd3NDaGFuZ2VkKCk7XG4gICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICB0aGlzLnN1cnZleS5tYXRyaXhSb3dSZW1vdmVkKHRoaXMsIGluZGV4LCByb3cpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHRleHQgc2hvd2luZyBpbiB0aGUgY29uZmlybWF0aW9uIGRlbGV0ZSBkaWFsb2cgb24gcmVtb3ZpbmcgYSByb3cuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbmZpcm1EZWxldGVUZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwiY29uZmlybURlbGV0ZVRleHRcIixcbiAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJjb25maXJtRGVsZXRlXCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbmZpcm1EZWxldGVUZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJjb25maXJtRGVsZXRlVGV4dFwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NDb25maXJtRGVsZXRlVGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImNvbmZpcm1EZWxldGVUZXh0XCIpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYWRkIHJvdyBidXR0b24gdGV4dC5cbiAgICovXG4gIHB1YmxpYyBnZXQgYWRkUm93VGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJhZGRSb3dUZXh0XCIsIHRoaXMuZGVmYXVsdEFkZFJvd1RleHQpO1xuICB9XG4gIHB1YmxpYyBzZXQgYWRkUm93VGV4dCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiYWRkUm93VGV4dFwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NBZGRSb3dUZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwiYWRkUm93VGV4dFwiKTtcbiAgfVxuICBwcml2YXRlIGdldCBkZWZhdWx0QWRkUm93VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFxuICAgICAgdGhpcy5pc0NvbHVtbkxheW91dEhvcml6b250YWwgPyBcImFkZFJvd1wiIDogXCJhZGRDb2x1bW5cIlxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgdGhlICdBZGQgUm93JyBidXR0b24gaXMgc2hvd24gb24gYm90dG9tIGlmIGNvbHVtbkxheW91dCBpcyBob3Jpem9udGFsIGFuZCBvbiB0b3AgaWYgY29sdW1uTGF5b3V0IGlzIHZlcnRpY2FsLiA8YnIvPlxuICAgKiBZb3UgbWF5IHNldCBpdCB0byBcInRvcFwiLCBcImJvdHRvbVwiIG9yIFwidG9wQm90dG9tXCIgKHRvIHNob3cgb24gdG9wIGFuZCBib3R0b20pLlxuICAgKiBAc2VlIGNvbHVtbkxheW91dFxuICAgKi9cbiAgcHVibGljIGdldCBhZGRSb3dMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhZGRSb3dMb2NhdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGFkZFJvd0xvY2F0aW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYWRkUm93TG9jYXRpb25cIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0QWRkUm93TG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hZGRSb3dMb2NhdGlvbjtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSB0byBoaWRlIG1hdHJpeCBjb2x1bW5zIHdoZW4gdGhlcmUgaXMgbm8gYW55IHJvdy5cbiAgICovXG4gIHB1YmxpYyBnZXQgaGlkZUNvbHVtbnNJZkVtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJoaWRlQ29sdW1uc0lmRW1wdHlcIik7XG4gIH1cbiAgcHVibGljIHNldCBoaWRlQ29sdW1uc0lmRW1wdHkodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaGlkZUNvbHVtbnNJZkVtcHR5XCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldFNob3dDb2x1bW5zSWZFbXB0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5oaWRlQ29sdW1uc0lmRW1wdHk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCB2YWx1ZSBvZiByZW1vdmUgcm93IGJ1dHRvbiB0ZXh0LlxuICAgKi9cbiAgcHVibGljIGdldCByZW1vdmVSb3dUZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwicmVtb3ZlUm93VGV4dFwiLFxuICAgICAgc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcInJlbW92ZVJvd1wiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCByZW1vdmVSb3dUZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJyZW1vdmVSb3dUZXh0XCIsIHZhbCk7XG4gIH1cbiAgZ2V0IGxvY1JlbW92ZVJvd1RleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJyZW1vdmVSb3dUZXh0XCIpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdmFsdWUgb2YgcmVtb3ZlIHJvdyBidXR0b24gdGV4dC5cbiAgICovXG4gIHB1YmxpYyBnZXQgZW1wdHlSb3dzVGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXG4gICAgICBcImVtcHR5Um93c1RleHRcIixcbiAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJlbXB0eVJvd3NUZXh0XCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IGVtcHR5Um93c1RleHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImVtcHR5Um93c1RleHRcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jRW1wdHlSb3dzVGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImVtcHR5Um93c1RleHRcIik7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERpc3BsYXlWYWx1ZUNvcmUoa2V5c0FzVGV4dDogYm9vbGVhbiwgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgaWYgKCF2YWx1ZSB8fCAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgICB2YXIgdmFsdWVzID0gdGhpcy5nZXRVbmJpbmRWYWx1ZSh2YWx1ZSk7XG4gICAgdmFyIHJvd3MgPSB0aGlzLnZpc2libGVSb3dzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGggJiYgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbCA9IHZhbHVlc1tpXTtcbiAgICAgIGlmICghdmFsKSBjb250aW51ZTtcbiAgICAgIHZhbHVlc1tpXSA9IHRoaXMuZ2V0Um93RGlzcGxheVZhbHVlKGtleXNBc1RleHQsIHJvd3NbaV0sIHZhbCk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH1cbiAgcHVibGljIGFkZENvbmRpdGlvbk9iamVjdHNCeUNvbnRleHQoXG4gICAgb2JqZWN0czogQXJyYXk8SUNvbmRpdGlvbk9iamVjdD4sXG4gICAgY29udGV4dDogYW55XG4gICkge1xuICAgIHZhciBoYXNDb250ZXh0ID0gISFjb250ZXh0ID8gdGhpcy5jb2x1bW5zLmluZGV4T2YoY29udGV4dCkgPiAtMSA6IGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY29sdW1uID0gdGhpcy5jb2x1bW5zW2ldO1xuICAgICAgdGhpcy5hZGRDb2x1bW5JbnRvYWRkQ29uZGl0aW9uT2JqZWN0c0J5Q29udGV4dChvYmplY3RzLCAwLCBjb2x1bW4pO1xuICAgICAgaWYgKGhhc0NvbnRleHQgJiYgY29sdW1uICE9IGNvbnRleHQpIHtcbiAgICAgICAgdGhpcy5hZGRDb2x1bW5JbnRvYWRkQ29uZGl0aW9uT2JqZWN0c0J5Q29udGV4dChvYmplY3RzLCAtMSwgY29sdW1uKTtcbiAgICAgIH1cbiAgICAgIGZvciAoXG4gICAgICAgIHZhciBqID0gMTtcbiAgICAgICAgaiA8IE1hdGgubWluKHNldHRpbmdzLm1hdHJpeE1heFJvd0NvdW50SW5Db25kaXRpb24sIHRoaXMucm93Q291bnQpO1xuICAgICAgICBqKytcbiAgICAgICkge1xuICAgICAgICB0aGlzLmFkZENvbHVtbkludG9hZGRDb25kaXRpb25PYmplY3RzQnlDb250ZXh0KG9iamVjdHMsIGosIGNvbHVtbik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgYWRkQ29sdW1uSW50b2FkZENvbmRpdGlvbk9iamVjdHNCeUNvbnRleHQoXG4gICAgb2JqZWN0czogQXJyYXk8SUNvbmRpdGlvbk9iamVjdD4sXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBjb2x1bW46IE1hdHJpeERyb3Bkb3duQ29sdW1uXG4gICkge1xuICAgIHZhciByb3dOYW1lID0gcm93SW5kZXggPiAtMSA/IFwiW1wiICsgcm93SW5kZXgudG9TdHJpbmcoKSArIFwiXS5cIiA6IFwicm93LlwiO1xuICAgIG9iamVjdHMucHVzaCh7XG4gICAgICBuYW1lOlxuICAgICAgICAocm93SW5kZXggPiAtMSA/IHRoaXMuZ2V0VmFsdWVOYW1lKCkgKyByb3dOYW1lIDogcm93TmFtZSkgKyBjb2x1bW4ubmFtZSxcbiAgICAgIHRleHQ6XG4gICAgICAgIChyb3dJbmRleCA+IC0xID8gdGhpcy5wcm9jZXNzZWRUaXRsZSArIHJvd05hbWUgOiByb3dOYW1lKSArXG4gICAgICAgIGNvbHVtbi5mdWxsVGl0bGUsXG4gICAgICBxdWVzdGlvbjogdGhpcyxcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzUm93VGV4dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIG9uQ2hlY2tGb3JFcnJvcnMoXG4gICAgZXJyb3JzOiBBcnJheTxTdXJ2ZXlFcnJvcj4sXG4gICAgaXNPblZhbHVlQ2hhbmdlZDogYm9vbGVhblxuICApIHtcbiAgICBzdXBlci5vbkNoZWNrRm9yRXJyb3JzKGVycm9ycywgaXNPblZhbHVlQ2hhbmdlZCk7XG4gICAgaWYgKCFpc09uVmFsdWVDaGFuZ2VkICYmIHRoaXMuaGFzRXJyb3JJbk1pblJvd3MoKSkge1xuICAgICAgZXJyb3JzLnB1c2gobmV3IE1pblJvd0NvdW50RXJyb3IodGhpcy5taW5Sb3dDb3VudCwgdGhpcykpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGhhc0Vycm9ySW5NaW5Sb3dzKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLm1pblJvd0NvdW50IDw9IDAgfHwgIXRoaXMuaXNSZXF1aXJlZCB8fCAhdGhpcy5nZW5lcmF0ZWRWaXNpYmxlUm93cylcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB2YXIgc2V0Um93Q291bnQgPSAwO1xuICAgIGZvciAoXG4gICAgICB2YXIgcm93SW5kZXggPSAwO1xuICAgICAgcm93SW5kZXggPCB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzLmxlbmd0aDtcbiAgICAgIHJvd0luZGV4KytcbiAgICApIHtcbiAgICAgIHZhciByb3cgPSB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzW3Jvd0luZGV4XTtcbiAgICAgIGlmICghcm93LmlzRW1wdHkpIHNldFJvd0NvdW50Kys7XG4gICAgfVxuICAgIHJldHVybiBzZXRSb3dDb3VudCA8IHRoaXMubWluUm93Q291bnQ7XG4gIH1cbiAgcHJvdGVjdGVkIGdldFVuaXF1ZUNvbHVtbnMoKTogQXJyYXk8TWF0cml4RHJvcGRvd25Db2x1bW4+IHtcbiAgICB2YXIgcmVzID0gc3VwZXIuZ2V0VW5pcXVlQ29sdW1ucygpO1xuICAgIGlmICghIXRoaXMua2V5TmFtZSkge1xuICAgICAgbGV0IGNvbHVtbiA9IHRoaXMuZ2V0Q29sdW1uQnlOYW1lKHRoaXMua2V5TmFtZSk7XG4gICAgICBpZiAoISFjb2x1bW4gJiYgcmVzLmluZGV4T2YoY29sdW1uKSA8IDApIHtcbiAgICAgICAgcmVzLnB1c2goY29sdW1uKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcm90ZWN0ZWQgZ2VuZXJhdGVSb3dzKCk6IEFycmF5PE1hdHJpeER5bmFtaWNSb3dNb2RlbD4ge1xuICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXk8TWF0cml4RHluYW1pY1Jvd01vZGVsPigpO1xuICAgIGlmICh0aGlzLnJvd0NvdW50ID09PSAwKSByZXR1cm4gcmVzdWx0O1xuICAgIHZhciB2YWwgPSB0aGlzLmNyZWF0ZU5ld1ZhbHVlKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJvd0NvdW50OyBpKyspIHtcbiAgICAgIHJlc3VsdC5wdXNoKHRoaXMuY3JlYXRlTWF0cml4Um93KHRoaXMuZ2V0Um93VmFsdWVCeUluZGV4KHZhbCwgaSkpKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLmdldERlZmF1bHRSb3dWYWx1ZShmYWxzZSkpKSB7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVNYXRyaXhSb3codmFsdWU6IGFueSk6IE1hdHJpeER5bmFtaWNSb3dNb2RlbCB7XG4gICAgcmV0dXJuIG5ldyBNYXRyaXhEeW5hbWljUm93TW9kZWwodGhpcy5yb3dDb3VudGVyKyssIHRoaXMsIHZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25CZWZvcmVWYWx1ZUNoYW5nZWQodmFsOiBhbnkpIHtcbiAgICBpZiAoIXZhbCB8fCAhQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm47XG4gICAgdmFyIG5ld1Jvd0NvdW50ID0gdmFsLmxlbmd0aDtcbiAgICBpZiAobmV3Um93Q291bnQgPT0gdGhpcy5yb3dDb3VudCkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5zZXRSb3dDb3VudFZhbHVlRnJvbURhdGEgJiYgbmV3Um93Q291bnQgPCB0aGlzLmluaXRpYWxSb3dDb3VudClcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLnNldFJvd0NvdW50VmFsdWVGcm9tRGF0YSA9IHRydWU7XG4gICAgdGhpcy5yb3dDb3VudFZhbHVlID0gbmV3Um93Q291bnQ7XG4gICAgaWYgKHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MpIHtcbiAgICAgIHRoaXMuY2xlYXJHZW5lcmF0ZWRSb3dzKCk7XG4gICAgICB0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzID0gdGhpcy52aXNpYmxlUm93cztcbiAgICAgIHRoaXMub25Sb3dzQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlTmV3VmFsdWUoKTogYW55IHtcbiAgICB2YXIgcmVzdWx0ID0gdGhpcy5jcmVhdGVWYWx1ZUNvcHkoKTtcbiAgICBpZiAoIXJlc3VsdCB8fCAhQXJyYXkuaXNBcnJheShyZXN1bHQpKSByZXN1bHQgPSBbXTtcbiAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IHRoaXMucm93Q291bnQpIHJlc3VsdC5zcGxpY2UodGhpcy5yb3dDb3VudCk7XG4gICAgdmFyIHJvd1ZhbHVlID0gdGhpcy5nZXREZWZhdWx0Um93VmFsdWUoZmFsc2UpO1xuICAgIHJvd1ZhbHVlID0gcm93VmFsdWUgfHwge307XG4gICAgZm9yICh2YXIgaSA9IHJlc3VsdC5sZW5ndGg7IGkgPCB0aGlzLnJvd0NvdW50OyBpKyspIHtcbiAgICAgIHJlc3VsdC5wdXNoKHRoaXMuZ2V0VW5iaW5kVmFsdWUocm93VmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBwcm90ZWN0ZWQgZGVsZXRlUm93VmFsdWUoXG4gICAgbmV3VmFsdWU6IGFueSxcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlXG4gICk6IGFueSB7XG4gICAgdmFyIGlzRW1wdHkgPSB0cnVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3VmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmlzT2JqZWN0KG5ld1ZhbHVlW2ldKSAmJiBPYmplY3Qua2V5cyhuZXdWYWx1ZVtpXSkubGVuZ3RoID4gMCkge1xuICAgICAgICBpc0VtcHR5ID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaXNFbXB0eSA/IG51bGwgOiBuZXdWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Um93VmFsdWVCeUluZGV4KHF1ZXN0aW9uVmFsdWU6IGFueSwgaW5kZXg6IG51bWJlcik6IGFueSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocXVlc3Rpb25WYWx1ZSkgJiZcbiAgICAgIGluZGV4ID49IDAgJiZcbiAgICAgIGluZGV4IDwgcXVlc3Rpb25WYWx1ZS5sZW5ndGhcbiAgICAgID8gcXVlc3Rpb25WYWx1ZVtpbmRleF1cbiAgICAgIDogbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Um93VmFsdWVDb3JlKFxuICAgIHJvdzogTWF0cml4RHJvcGRvd25Sb3dNb2RlbEJhc2UsXG4gICAgcXVlc3Rpb25WYWx1ZTogYW55LFxuICAgIGNyZWF0ZTogYm9vbGVhbiA9IGZhbHNlXG4gICk6IGFueSB7XG4gICAgaWYgKCF0aGlzLmdlbmVyYXRlZFZpc2libGVSb3dzKSByZXR1cm4ge307XG4gICAgdmFyIHJlcyA9IHRoaXMuZ2V0Um93VmFsdWVCeUluZGV4KFxuICAgICAgcXVlc3Rpb25WYWx1ZSxcbiAgICAgIHRoaXMuZ2VuZXJhdGVkVmlzaWJsZVJvd3MuaW5kZXhPZihyb3cpXG4gICAgKTtcbiAgICBpZiAoIXJlcyAmJiBjcmVhdGUpIHJlcyA9IHt9O1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHVibGljIGdldEFkZFJvd0J1dHRvbkNzcyhpc0VtcHR5U2VjdGlvbjogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IENzc0NsYXNzQnVpbGRlcigpXG4gICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5idXR0b24pXG4gICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5idXR0b25BZGQpXG4gICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5lbXB0eVJvd3NCdXR0b24sIGlzRW1wdHlTZWN0aW9uKVxuICAgICAgLnRvU3RyaW5nKCk7XG4gIH1cbiAgcHVibGljIGdldFJlbW92ZVJvd0J1dHRvbkNzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgQ3NzQ2xhc3NCdWlsZGVyKClcbiAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmJ1dHRvbilcbiAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmJ1dHRvblJlbW92ZSlcbiAgICAgIC50b1N0cmluZygpO1xuICB9XG59XG5cbmNsYXNzIFF1ZXN0aW9uTWF0cml4RHluYW1pY1JlbmRlcmVkVGFibGUgZXh0ZW5kcyBRdWVzdGlvbk1hdHJpeERyb3Bkb3duUmVuZGVyZWRUYWJsZSB7XG4gIHByb3RlY3RlZCBzZXREZWZhdWx0Um93QWN0aW9ucyhcbiAgICByb3c6IE1hdHJpeERyb3Bkb3duUm93TW9kZWxCYXNlLFxuICAgIGFjdGlvbnM6IEFycmF5PElBY3Rpb24+XG4gICkge1xuICAgIHN1cGVyLnNldERlZmF1bHRSb3dBY3Rpb25zKHJvdywgYWN0aW9ucyk7XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJtYXRyaXhkeW5hbWljXCIsXG4gIFtcbiAgICB7IG5hbWU6IFwicm93c1Zpc2libGVJZjpjb25kaXRpb25cIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwiYWxsb3dBZGRSb3dzOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIHsgbmFtZTogXCJhbGxvd1JlbW92ZVJvd3M6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgeyBuYW1lOiBcInJvd0NvdW50Om51bWJlclwiLCBkZWZhdWx0OiAyLCBtaW5WYWx1ZTogMCwgaXNCaW5kYWJsZTogdHJ1ZSB9LFxuICAgIHsgbmFtZTogXCJtaW5Sb3dDb3VudDpudW1iZXJcIiwgZGVmYXVsdDogMCwgbWluVmFsdWU6IDAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIm1heFJvd0NvdW50Om51bWJlclwiLFxuICAgICAgZGVmYXVsdDogc2V0dGluZ3MubWF0cml4TWF4aW11bVJvd0NvdW50LFxuICAgIH0sXG4gICAgeyBuYW1lOiBcImtleU5hbWVcIiB9LFxuICAgIFwiZGVmYXVsdFJvd1ZhbHVlOnJvd3ZhbHVlXCIsXG4gICAgXCJkZWZhdWx0VmFsdWVGcm9tTGFzdFJvdzpib29sZWFuXCIsXG4gICAgeyBuYW1lOiBcImNvbmZpcm1EZWxldGU6Ym9vbGVhblwiIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJjb25maXJtRGVsZXRlVGV4dFwiLFxuICAgICAgZGVwZW5kc09uOiBcImNvbmZpcm1EZWxldGVcIixcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24ob2JqOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICFvYmogfHwgb2JqLmNvbmZpcm1EZWxldGU7XG4gICAgICB9LFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0NvbmZpcm1EZWxldGVUZXh0XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImFkZFJvd0xvY2F0aW9uXCIsXG4gICAgICBkZWZhdWx0OiBcImRlZmF1bHRcIixcbiAgICAgIGNob2ljZXM6IFtcImRlZmF1bHRcIiwgXCJ0b3BcIiwgXCJib3R0b21cIiwgXCJ0b3BCb3R0b21cIl0sXG4gICAgfSxcbiAgICB7IG5hbWU6IFwiYWRkUm93VGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jQWRkUm93VGV4dFwiIH0sXG4gICAgeyBuYW1lOiBcInJlbW92ZVJvd1RleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1JlbW92ZVJvd1RleHRcIiB9LFxuICAgIFwiaGlkZUNvbHVtbnNJZkVtcHR5OmJvb2xlYW5cIixcbiAgICB7XG4gICAgICBuYW1lOiBcImVtcHR5Um93c1RleHQ6dGV4dFwiLFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0VtcHR5Um93c1RleHRcIixcbiAgICAgIGRlcGVuZHNPbjogXCJoaWRlQ29sdW1uc0lmRW1wdHlcIixcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24ob2JqOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICFvYmogfHwgb2JqLmhpZGVDb2x1bW5zSWZFbXB0eTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImRldGFpbFBhbmVsU2hvd09uQWRkaW5nOmJvb2xlYW5cIixcbiAgICAgIGRlcGVuZHNPbjogXCJkZXRhaWxQYW5lbE1vZGVcIixcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24ob2JqOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIG9iai5kZXRhaWxQYW5lbE1vZGUgIT09IFwibm9uZVwiO1xuICAgICAgfSxcbiAgICB9LFxuICAgIFwiYWxsb3dSb3dzRHJhZ0FuZERyb3A6c3dpdGNoXCJcbiAgXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbChcIlwiKTtcbiAgfSxcbiAgXCJtYXRyaXhkcm9wZG93bmJhc2VcIlxuKTtcblxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJtYXRyaXhkeW5hbWljXCIsIChuYW1lKSA9PiB7XG4gIHZhciBxID0gbmV3IFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsKG5hbWUpO1xuICBxLmNob2ljZXMgPSBbMSwgMiwgMywgNCwgNV07XG4gIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbEJhc2UuYWRkRGVmYXVsdENvbHVtbnMocSk7XG4gIHJldHVybiBxO1xufSk7XG4iLCJpbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZVwiO1xuaW1wb3J0IHtcbiAgSVN1cnZleURhdGEsXG4gIElTdXJ2ZXlJbXBsLFxuICBJU3VydmV5LFxuICBJUGFuZWwsXG4gIElFbGVtZW50LFxuICBJVGV4dFByb2Nlc3NvcixcbiAgSVByb2dyZXNzSW5mb1xufSBmcm9tIFwiLi9iYXNlLWludGVyZmFjZXNcIjtcbmltcG9ydCB7IFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi9zdXJ2ZXktZWxlbWVudFwiO1xuaW1wb3J0IHsgU3VydmV5VmFsaWRhdG9yLCBJVmFsaWRhdG9yT3duZXIgfSBmcm9tIFwiLi92YWxpZGF0b3JcIjtcbmltcG9ydCB7IFF1ZXN0aW9uLCBJQ29uZGl0aW9uT2JqZWN0IH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFF1ZXN0aW9uVGV4dE1vZGVsIH0gZnJvbSBcIi4vcXVlc3Rpb25fdGV4dFwiO1xuaW1wb3J0IHsgSnNvbk9iamVjdCwgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHsgU3VydmV5RXJyb3IgfSBmcm9tIFwiLi9zdXJ2ZXktZXJyb3JcIjtcbmltcG9ydCB7IElMb2NhbGl6YWJsZU93bmVyLCBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgQ3NzQ2xhc3NCdWlsZGVyIH0gZnJvbSBcIi4vdXRpbHMvY3NzQ2xhc3NCdWlsZGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU11bHRpcGxlVGV4dERhdGEgZXh0ZW5kcyBJTG9jYWxpemFibGVPd25lciwgSVBhbmVsIHtcbiAgZ2V0U3VydmV5KCk6IElTdXJ2ZXk7XG4gIGdldFRleHRQcm9jZXNzb3IoKTogSVRleHRQcm9jZXNzb3I7XG4gIGdldEFsbFZhbHVlcygpOiBhbnk7XG4gIGdldE11bHRpcGxlVGV4dFZhbHVlKG5hbWU6IHN0cmluZyk6IGFueTtcbiAgc2V0TXVsdGlwbGVUZXh0VmFsdWUobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55O1xuICBnZXRJdGVtRGVmYXVsdFZhbHVlKG5hbWU6IHN0cmluZyk6IGFueTtcbiAgZ2V0SXNSZXF1aXJlZFRleHQoKTogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgTXVsdGlwbGVUZXh0SXRlbU1vZGVsIGV4dGVuZHMgQmFzZVxuICBpbXBsZW1lbnRzIElWYWxpZGF0b3JPd25lciwgSVN1cnZleURhdGEsIElTdXJ2ZXlJbXBsIHtcbiAgcHJpdmF0ZSBlZGl0b3JWYWx1ZTogUXVlc3Rpb25UZXh0TW9kZWw7XG4gIHByaXZhdGUgZGF0YTogSU11bHRpcGxlVGV4dERhdGE7XG5cbiAgdmFsdWVDaGFuZ2VkQ2FsbGJhY2s6IChuZXdWYWx1ZTogYW55KSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IGFueSA9IG51bGwsIHRpdGxlOiBzdHJpbmcgPSBudWxsKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmVkaXRvclZhbHVlID0gdGhpcy5jcmVhdGVFZGl0b3IobmFtZSk7XG4gICAgdGhpcy5lZGl0b3IucXVlc3Rpb25UaXRsZVRlbXBsYXRlQ2FsbGJhY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH07XG4gICAgdGhpcy5lZGl0b3IudGl0bGVMb2NhdGlvbiA9IFwibGVmdFwiO1xuICAgIGlmICh0aXRsZSkge1xuICAgICAgdGhpcy50aXRsZSA9IHRpdGxlO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIm11bHRpcGxldGV4dGl0ZW1cIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLmlkO1xuICB9XG4gIHB1YmxpYyBnZXRPcmlnaW5hbE9iaigpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3I7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpdGVtIG5hbWUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IubmFtZTtcbiAgfVxuICBwdWJsaWMgc2V0IG5hbWUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmVkaXRvci5uYW1lID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXQgcXVlc3Rpb24oKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiA8UXVlc3Rpb24+KDxhbnk+dGhpcy5kYXRhKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGVkaXRvcigpOiBRdWVzdGlvblRleHRNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yVmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZUVkaXRvcihuYW1lOiBzdHJpbmcpOiBRdWVzdGlvblRleHRNb2RlbCB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvblRleHRNb2RlbChuYW1lKTtcbiAgfVxuICBwdWJsaWMgYWRkVXNlZExvY2FsZXMobG9jYWxlczogQXJyYXk8c3RyaW5nPikge1xuICAgIHN1cGVyLmFkZFVzZWRMb2NhbGVzKGxvY2FsZXMpO1xuICAgIHRoaXMuZWRpdG9yLmFkZFVzZWRMb2NhbGVzKGxvY2FsZXMpO1xuICB9XG4gIHB1YmxpYyBsb2NTdHJzQ2hhbmdlZCgpIHtcbiAgICBzdXBlci5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIHRoaXMuZWRpdG9yLmxvY1N0cnNDaGFuZ2VkKCk7XG4gIH1cbiAgc2V0RGF0YShkYXRhOiBJTXVsdGlwbGVUZXh0RGF0YSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgaWYgKCEhZGF0YSkge1xuICAgICAgdGhpcy5lZGl0b3IuZGVmYXVsdFZhbHVlID0gZGF0YS5nZXRJdGVtRGVmYXVsdFZhbHVlKHRoaXMubmFtZSk7XG4gICAgICB0aGlzLmVkaXRvci5zZXRTdXJ2ZXlJbXBsKHRoaXMpO1xuICAgICAgdGhpcy5lZGl0b3IucGFyZW50ID0gZGF0YTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHRydWUsIHRvIG1ha2UgdGhlIGl0ZW0gYSByZXF1aXJlZC4gSWYgYSB1c2VyIGRvZXNuJ3QgZmlsbCB0aGUgaXRlbSB0aGVuIGEgdmFsaWRhdGlvbiBlcnJvciB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNSZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IuaXNSZXF1aXJlZDtcbiAgfVxuICBwdWJsaWMgc2V0IGlzUmVxdWlyZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5lZGl0b3IuaXNSZXF1aXJlZCA9IHZhbDtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IGlucHV0IHR5cGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlucHV0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmVkaXRvci5pbnB1dFR5cGU7XG4gIH1cbiAgcHVibGljIHNldCBpbnB1dFR5cGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmVkaXRvci5pbnB1dFR5cGUgPSB2YWw7XG4gIH1cbiAgLyoqXG4gICAqIEl0ZW0gdGl0bGUuIElmIGl0IGlzIGVtcHR5LCB0aGUgaXRlbSBuYW1lIGlzIHJlbmRlcmVkIGFzIHRpdGxlLiBUaGlzIHByb3BlcnR5IHN1cHBvcnRzIG1hcmtkb3duLlxuICAgKiBAc2VlIG5hbWVcbiAgICovXG4gIHB1YmxpYyBnZXQgdGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IudGl0bGU7XG4gIH1cbiAgcHVibGljIHNldCB0aXRsZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuZWRpdG9yLnRpdGxlID0gdmFsO1xuICB9XG4gIGdldCBsb2NUaXRsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IubG9jVGl0bGU7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRleHQgb3IgaHRtbCBmb3IgcmVuZGVyaW5nIHRoZSB0aXRsZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgZnVsbFRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLmZ1bGxUaXRsZTtcbiAgfVxuICAvKipcbiAgICogVGhlIG1heGltdW0gdGV4dCBsZW5ndGguIElmIGl0IGlzIC0xLCBkZWZhdWwgdmFsdWUsIHRoZW4gdGhlIHN1cnZleSBtYXhUZXh0TGVuZ3RoIHByb3BlcnR5IHdpbGwgYmUgdXNlZC5cbiAgICogSWYgaXQgaXMgMCwgdGhlbiB0aGUgdmFsdWUgaXMgdW5saW1pdGVkXG4gICAqIEBzZWUgU3VydmV5TW9kZWwubWF4VGV4dExlbmd0aFxuICAgKi9cbiAgcHVibGljIGdldCBtYXhMZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IubWF4TGVuZ3RoO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4TGVuZ3RoKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5lZGl0b3IubWF4TGVuZ3RoID0gdmFsO1xuICB9XG4gIHB1YmxpYyBnZXRNYXhMZW5ndGgoKTogYW55IHtcbiAgICB2YXIgc3VydmV5ID0gdGhpcy5nZXRTdXJ2ZXkoKTtcbiAgICByZXR1cm4gSGVscGVycy5nZXRNYXhMZW5ndGgoXG4gICAgICB0aGlzLm1heExlbmd0aCxcbiAgICAgIHN1cnZleSA/IHN1cnZleS5tYXhUZXh0TGVuZ3RoIDogLTFcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgcGxhY2UgaG9sZGVyLlxuICAgKi9cbiAgcHVibGljIGdldCBwbGFjZUhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmVkaXRvci5wbGFjZUhvbGRlcjtcbiAgfVxuICBwdWJsaWMgc2V0IHBsYWNlSG9sZGVyKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5lZGl0b3IucGxhY2VIb2xkZXIgPSB2YWw7XG4gIH1cbiAgZ2V0IGxvY1BsYWNlSG9sZGVyKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IubG9jUGxhY2VIb2xkZXI7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBjdXN0b20gdGV4dCB0aGF0IHdpbGwgYmUgc2hvd24gb24gcmVxdWlyZWQgZXJyb3IuIFVzZSB0aGlzIHByb3BlcnR5LCBpZiB5b3UgZG8gbm90IHdhbnQgdG8gc2hvdyB0aGUgZGVmYXVsdCB0ZXh0LlxuICAgKi9cbiAgcHVibGljIGdldCByZXF1aXJlZEVycm9yVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmVkaXRvci5yZXF1aXJlZEVycm9yVGV4dDtcbiAgfVxuICBwdWJsaWMgc2V0IHJlcXVpcmVkRXJyb3JUZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5lZGl0b3IucmVxdWlyZWRFcnJvclRleHQgPSB2YWw7XG4gIH1cbiAgZ2V0IGxvY1JlcXVpcmVkRXJyb3JUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IubG9jUmVxdWlyZWRFcnJvclRleHQ7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBzaXplLlxuICAgKi9cbiAgcHVibGljIGdldCBzaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLnNpemU7XG4gIH1cbiAgcHVibGljIHNldCBzaXplKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5lZGl0b3Iuc2l6ZSA9IHZhbDtcbiAgfVxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgcXVlc3Rpb24gdmFsaWRhdG9ycy5cbiAgICovXG4gIHB1YmxpYyBnZXQgdmFsaWRhdG9ycygpOiBBcnJheTxTdXJ2ZXlWYWxpZGF0b3I+IHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IudmFsaWRhdG9ycztcbiAgfVxuICBwdWJsaWMgc2V0IHZhbGlkYXRvcnModmFsOiBBcnJheTxTdXJ2ZXlWYWxpZGF0b3I+KSB7XG4gICAgdGhpcy5lZGl0b3IudmFsaWRhdG9ycyA9IHZhbDtcbiAgfVxuICBwdWJsaWMgZ2V0VmFsaWRhdG9ycygpOiBBcnJheTxTdXJ2ZXlWYWxpZGF0b3I+IHtcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0b3JzO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgaXRlbSB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YSA/IHRoaXMuZGF0YS5nZXRNdWx0aXBsZVRleHRWYWx1ZSh0aGlzLm5hbWUpIDogbnVsbDtcbiAgfVxuICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodGhpcy5kYXRhICE9IG51bGwpIHtcbiAgICAgIHRoaXMuZGF0YS5zZXRNdWx0aXBsZVRleHRWYWx1ZSh0aGlzLm5hbWUsIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGlzRW1wdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yLmlzRW1wdHkoKTtcbiAgfVxuICBwdWJsaWMgb25WYWx1ZUNoYW5nZWQobmV3VmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLnZhbHVlQ2hhbmdlZENhbGxiYWNrKSB0aGlzLnZhbHVlQ2hhbmdlZENhbGxiYWNrKG5ld1ZhbHVlKTtcbiAgfVxuICAvL0lTdXJ2ZXlJbXBsXG4gIGdldFN1cnZleURhdGEoKTogSVN1cnZleURhdGEge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGdldFN1cnZleSgpOiBJU3VydmV5IHtcbiAgICByZXR1cm4gdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldFN1cnZleSgpIDogbnVsbDtcbiAgfVxuICBnZXRUZXh0UHJvY2Vzc29yKCk6IElUZXh0UHJvY2Vzc29yIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldFRleHRQcm9jZXNzb3IoKSA6IG51bGw7XG4gIH1cbiAgLy9JU3VydmV5RGF0YVxuICBnZXRWYWx1ZShuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIGlmICghdGhpcy5kYXRhKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmdldE11bHRpcGxlVGV4dFZhbHVlKG5hbWUpO1xuICB9XG4gIHNldFZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgIHRoaXMuZGF0YS5zZXRNdWx0aXBsZVRleHRWYWx1ZShuYW1lLCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIGdldFZhcmlhYmxlKG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBzZXRWYXJpYWJsZShuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpIHt9XG4gIGdldENvbW1lbnQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBzZXRDb21tZW50KG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IHN0cmluZykge31cbiAgZ2V0QWxsVmFsdWVzKCk6IGFueSB7XG4gICAgaWYgKHRoaXMuZGF0YSkgcmV0dXJuIHRoaXMuZGF0YS5nZXRBbGxWYWx1ZXMoKTtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfVxuICBnZXRGaWx0ZXJlZFZhbHVlcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldEFsbFZhbHVlcygpO1xuICB9XG4gIGdldEZpbHRlcmVkUHJvcGVydGllcygpOiBhbnkge1xuICAgIHJldHVybiB7IHN1cnZleTogdGhpcy5nZXRTdXJ2ZXkoKSB9O1xuICB9XG4gIC8vSVZhbGlkYXRvck93bmVyXG4gIGdldFZhbGlkYXRvclRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGl0bGU7XG4gIH1cbiAgZ2V0IHZhbGlkYXRlZFZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gIH1cbiAgc2V0IHZhbGlkYXRlZFZhbHVlKHZhbDogYW55KSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbDtcbiAgfVxuICBnZXREYXRhRmlsdGVyZWRWYWx1ZXMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWx0ZXJlZFZhbHVlcygpO1xuICB9XG4gIGdldERhdGFGaWx0ZXJlZFByb3BlcnRpZXMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWx0ZXJlZFByb3BlcnRpZXMoKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgTW9kZWwgZm9yIGEgbXVsdGlwbGUgdGV4dCBxdWVzdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uTXVsdGlwbGVUZXh0TW9kZWwgZXh0ZW5kcyBRdWVzdGlvblxuICBpbXBsZW1lbnRzIElNdWx0aXBsZVRleHREYXRhLCBJUGFuZWwge1xuICBwdWJsaWMgc3RhdGljIGFkZERlZmF1bHRJdGVtcyhxdWVzdGlvbjogUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbCkge1xuICAgIHZhciBuYW1lcyA9IFF1ZXN0aW9uRmFjdG9yeS5EZWZhdWx0TXV0bGlwbGVUZXh0SXRlbXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykgcXVlc3Rpb24uYWRkSXRlbShuYW1lc1tpXSk7XG4gIH1cblxuICBjb2xDb3VudENoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdGhpcy5jcmVhdGVOZXdBcnJheShcIml0ZW1zXCIsIChpdGVtOiBhbnkpID0+IHtcbiAgICAgIGl0ZW0uc2V0RGF0YSh0aGlzKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwiaXRlbXNcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5jb2xDb3VudENoYW5nZWRDYWxsYmFjayk7XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcImNvbENvdW50XCIsICgpID0+IHtcbiAgICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMuY29sQ291bnRDaGFuZ2VkQ2FsbGJhY2spO1xuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJpdGVtU2l6ZVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZUl0ZW1zU2l6ZSgpO1xuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwibXVsdGlwbGV0ZXh0XCI7XG4gIH1cbiAgcHVibGljIHNldFN1cnZleUltcGwodmFsdWU6IElTdXJ2ZXlJbXBsLCBpc0xpZ2h0PzogYm9vbGVhbikge1xuICAgIHN1cGVyLnNldFN1cnZleUltcGwodmFsdWUsIGlzTGlnaHQpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5pdGVtc1tpXS5zZXREYXRhKHRoaXMpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0IGlzQWxsb3dUaXRsZUxlZnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzU2luZ2xlSW5wdXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIG9uU3VydmV5TG9hZCgpIHtcbiAgICB0aGlzLmVkaXRvcnNPblN1cnZleUxvYWQoKTtcbiAgICBzdXBlci5vblN1cnZleUxvYWQoKTtcbiAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLmNvbENvdW50Q2hhbmdlZENhbGxiYWNrKTtcbiAgfVxuICBzZXRRdWVzdGlvblZhbHVlKG5ld1ZhbHVlOiBhbnksIHVwZGF0ZUlzQW5zd2VyZWQ6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgc3VwZXIuc2V0UXVlc3Rpb25WYWx1ZShuZXdWYWx1ZSwgdXBkYXRlSXNBbnN3ZXJlZCk7XG4gICAgdGhpcy5wZXJmb3JtRm9yRXZlcnlFZGl0b3IoKGl0ZW06IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCk6IHZvaWQgPT4ge1xuICAgICAgaXRlbS5lZGl0b3IudXBkYXRlVmFsdWVGcm9tU3VydmV5KGl0ZW0udmFsdWUpO1xuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlSXNBbnN3ZXJlZCgpO1xuICB9XG4gIG9uU3VydmV5VmFsdWVDaGFuZ2VkKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBzdXBlci5vblN1cnZleVZhbHVlQ2hhbmdlZChuZXdWYWx1ZSk7XG4gICAgdGhpcy5wZXJmb3JtRm9yRXZlcnlFZGl0b3IoKGl0ZW06IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCk6IHZvaWQgPT4ge1xuICAgICAgaXRlbS5lZGl0b3Iub25TdXJ2ZXlWYWx1ZUNoYW5nZWQoaXRlbS52YWx1ZSk7XG4gICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVJdGVtc1NpemUoKSB7XG4gICAgdGhpcy5wZXJmb3JtRm9yRXZlcnlFZGl0b3IoKGl0ZW06IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCk6IHZvaWQgPT4ge1xuICAgICAgaXRlbS5lZGl0b3IudXBkYXRlSW5wdXRTaXplKCk7XG4gICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSBlZGl0b3JzT25TdXJ2ZXlMb2FkKCkge1xuICAgIHRoaXMucGVyZm9ybUZvckV2ZXJ5RWRpdG9yKChpdGVtOiBNdWx0aXBsZVRleHRJdGVtTW9kZWwpOiB2b2lkID0+IHtcbiAgICAgIGl0ZW0uZWRpdG9yLm9uU3VydmV5TG9hZCgpO1xuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgcGVyZm9ybUZvckV2ZXJ5RWRpdG9yKGZ1bmM6IChpdGVtOiBNdWx0aXBsZVRleHRJdGVtTW9kZWwpID0+IHZvaWQpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gdGhpcy5pdGVtc1tpXTtcbiAgICAgIGlmIChpdGVtLmVkaXRvcikge1xuICAgICAgICBmdW5jKGl0ZW0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgaW5wdXQgaXRlbXMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGl0ZW1zKCk6IEFycmF5PE11bHRpcGxlVGV4dEl0ZW1Nb2RlbD4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpdGVtc1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGl0ZW1zKHZhbDogQXJyYXk8TXVsdGlwbGVUZXh0SXRlbU1vZGVsPikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIml0ZW1zXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyB0ZXh0IGl0ZW0uXG4gICAqIEBwYXJhbSBuYW1lIGEgaXRlbSBuYW1lXG4gICAqIEBwYXJhbSB0aXRsZSBhIGl0ZW0gdGl0bGUgKG9wdGlvbmFsKVxuICAgKi9cbiAgcHVibGljIGFkZEl0ZW0obmFtZTogc3RyaW5nLCB0aXRsZTogc3RyaW5nID0gbnVsbCk6IE11bHRpcGxlVGV4dEl0ZW1Nb2RlbCB7XG4gICAgdmFyIGl0ZW0gPSB0aGlzLmNyZWF0ZVRleHRJdGVtKG5hbWUsIHRpdGxlKTtcbiAgICB0aGlzLml0ZW1zLnB1c2goaXRlbSk7XG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cbiAgcHVibGljIGdldEl0ZW1CeU5hbWUobmFtZTogc3RyaW5nKTogTXVsdGlwbGVUZXh0SXRlbU1vZGVsIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLml0ZW1zW2ldLm5hbWUgPT0gbmFtZSkgcmV0dXJuIHRoaXMuaXRlbXNbaV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyBhZGRDb25kaXRpb25PYmplY3RzQnlDb250ZXh0KFxuICAgIG9iamVjdHM6IEFycmF5PElDb25kaXRpb25PYmplY3Q+LFxuICAgIGNvbnRleHQ6IGFueVxuICApIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gdGhpcy5pdGVtc1tpXTtcbiAgICAgIG9iamVjdHMucHVzaCh7XG4gICAgICAgIG5hbWU6IHRoaXMuZ2V0VmFsdWVOYW1lKCkgKyBcIi5cIiArIGl0ZW0ubmFtZSxcbiAgICAgICAgdGV4dDogdGhpcy5wcm9jZXNzZWRUaXRsZSArIFwiLlwiICsgaXRlbS5mdWxsVGl0bGUsXG4gICAgICAgIHF1ZXN0aW9uOiB0aGlzLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRDb25kaXRpb25Kc29uKG9wZXJhdG9yOiBzdHJpbmcgPSBudWxsLCBwYXRoOiBzdHJpbmcgPSBudWxsKTogYW55IHtcbiAgICBpZiAoIXBhdGgpIHJldHVybiBzdXBlci5nZXRDb25kaXRpb25Kc29uKCk7XG4gICAgdmFyIGl0ZW0gPSB0aGlzLmdldEl0ZW1CeU5hbWUocGF0aCk7XG4gICAgaWYgKCFpdGVtKSByZXR1cm4gbnVsbDtcbiAgICB2YXIganNvbiA9IG5ldyBKc29uT2JqZWN0KCkudG9Kc29uT2JqZWN0KGl0ZW0pO1xuICAgIGpzb25bXCJ0eXBlXCJdID0gXCJ0ZXh0XCI7XG4gICAgcmV0dXJuIGpzb247XG4gIH1cbiAgcHVibGljIGxvY1N0cnNDaGFuZ2VkKCkge1xuICAgIHN1cGVyLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLml0ZW1zW2ldLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG4gIHN1cHBvcnRHb05leHRQYWdlQXV0b21hdGljKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuaXRlbXNbaV0uaXNFbXB0eSgpKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGNvbHVtbnMuIEl0ZW1zIGFyZSByZW5kcmVkIGluIG9uZSBsaW5lIGlmIHRoZSB2YWx1ZSBpcyAwLlxuICAgKi9cbiAgcHVibGljIGdldCBjb2xDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb2xDb3VudFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbENvdW50KHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKHZhbCA8IDEgfHwgdmFsID4gNSkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbENvdW50XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHRleHQgaW5wdXQgc2l6ZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXRlbVNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaXRlbVNpemVcIik7XG4gIH1cbiAgcHVibGljIHNldCBpdGVtU2l6ZSh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIml0ZW1TaXplXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgcmVuZGVyZWQgcm93cy5cbiAgICovXG4gIHB1YmxpYyBnZXRSb3dzKCk6IEFycmF5PGFueT4ge1xuICAgIHZhciBjb2xDb3VudCA9IHRoaXMuY29sQ291bnQ7XG4gICAgdmFyIGl0ZW1zID0gdGhpcy5pdGVtcztcbiAgICB2YXIgcm93cyA9IFtdO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGluZGV4ID09IDApIHtcbiAgICAgICAgcm93cy5wdXNoKFtdKTtcbiAgICAgIH1cbiAgICAgIHJvd3Nbcm93cy5sZW5ndGggLSAxXS5wdXNoKGl0ZW1zW2ldKTtcbiAgICAgIGluZGV4Kys7XG4gICAgICBpZiAoaW5kZXggPj0gY29sQ291bnQpIHtcbiAgICAgICAgaW5kZXggPSAwO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcm93cztcbiAgfVxuICBwcml2YXRlIGlzTXVsdGlwbGVJdGVtVmFsdWVDaGFuZ2luZyA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgb25WYWx1ZUNoYW5nZWQoKSB7XG4gICAgc3VwZXIub25WYWx1ZUNoYW5nZWQoKTtcbiAgICB0aGlzLm9uSXRlbVZhbHVlQ2hhbmdlZCgpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVUZXh0SXRlbShuYW1lOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcpOiBNdWx0aXBsZVRleHRJdGVtTW9kZWwge1xuICAgIHJldHVybiBuZXcgTXVsdGlwbGVUZXh0SXRlbU1vZGVsKG5hbWUsIHRpdGxlKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25JdGVtVmFsdWVDaGFuZ2VkKCkge1xuICAgIGlmICh0aGlzLmlzTXVsdGlwbGVJdGVtVmFsdWVDaGFuZ2luZykgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW1WYWx1ZSA9IG51bGw7XG4gICAgICBpZiAodGhpcy52YWx1ZSAmJiB0aGlzLml0ZW1zW2ldLm5hbWUgaW4gdGhpcy52YWx1ZSkge1xuICAgICAgICBpdGVtVmFsdWUgPSB0aGlzLnZhbHVlW3RoaXMuaXRlbXNbaV0ubmFtZV07XG4gICAgICB9XG4gICAgICB0aGlzLml0ZW1zW2ldLm9uVmFsdWVDaGFuZ2VkKGl0ZW1WYWx1ZSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRJc1J1bm5pbmdWYWxpZGF0b3JzKCk6IGJvb2xlYW4ge1xuICAgIGlmIChzdXBlci5nZXRJc1J1bm5pbmdWYWxpZGF0b3JzKCkpIHJldHVybiB0cnVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuaXRlbXNbaV0uZWRpdG9yLmlzUnVubmluZ1ZhbGlkYXRvcnMpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGhhc0Vycm9ycyhmaXJlQ2FsbGJhY2s6IGJvb2xlYW4gPSB0cnVlLCByZWM6IGFueSA9IG51bGwpOiBib29sZWFuIHtcbiAgICB2YXIgcmVzID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLml0ZW1zW2ldLmVkaXRvci5vbkNvbXBsZXRlZEFzeW5jVmFsaWRhdG9ycyA9IChcbiAgICAgICAgaGFzRXJyb3JzOiBib29sZWFuXG4gICAgICApID0+IHtcbiAgICAgICAgdGhpcy5yYWlzZU9uQ29tcGxldGVkQXN5bmNWYWxpZGF0b3JzKCk7XG4gICAgICB9O1xuICAgICAgaWYgKFxuICAgICAgICAhIXJlYyAmJlxuICAgICAgICByZWMuaXNPblZhbHVlQ2hhbmdlZCA9PT0gdHJ1ZSAmJlxuICAgICAgICB0aGlzLml0ZW1zW2ldLmVkaXRvci5pc0VtcHR5KClcbiAgICAgIClcbiAgICAgICAgY29udGludWU7XG4gICAgICByZXMgPSB0aGlzLml0ZW1zW2ldLmVkaXRvci5oYXNFcnJvcnMoZmlyZUNhbGxiYWNrLCByZWMpIHx8IHJlcztcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLmhhc0Vycm9ycyhmaXJlQ2FsbGJhY2spIHx8IHJlcztcbiAgfVxuICBwdWJsaWMgZ2V0QWxsRXJyb3JzKCk6IEFycmF5PFN1cnZleUVycm9yPiB7XG4gICAgdmFyIHJlc3VsdCA9IHN1cGVyLmdldEFsbEVycm9ycygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVycm9ycyA9IHRoaXMuaXRlbXNbaV0uZWRpdG9yLmdldEFsbEVycm9ycygpO1xuICAgICAgaWYgKGVycm9ycyAmJiBlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KGVycm9ycyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHVibGljIGNsZWFyRXJyb3JzKCkge1xuICAgIHN1cGVyLmNsZWFyRXJyb3JzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLml0ZW1zW2ldLmVkaXRvci5jbGVhckVycm9ycygpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29udGFpbnNFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgdmFyIHJlcyA9IHN1cGVyLmdldENvbnRhaW5zRXJyb3JzKCk7XG4gICAgaWYgKHJlcykgcmV0dXJuIHJlcztcbiAgICB2YXIgaXRlbXMgPSB0aGlzLml0ZW1zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChpdGVtc1tpXS5lZGl0b3IuY29udGFpbnNFcnJvcnMpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGdldElzQW5zd2VyZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKCFzdXBlci5nZXRJc0Fuc3dlcmVkKCkpIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlZGl0b3IgPSB0aGlzLml0ZW1zW2ldLmVkaXRvcjtcbiAgICAgIGlmIChlZGl0b3IuaXNWaXNpYmxlICYmICFlZGl0b3IuaXNBbnN3ZXJlZCkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0UHJvZ3Jlc3NJbmZvKCk6IElQcm9ncmVzc0luZm8ge1xuICAgIHZhciBlbGVtZW50cyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgZWxlbWVudHMucHVzaCh0aGlzLml0ZW1zW2ldLmVkaXRvcik7XG4gICAgfVxuICAgIHJldHVybiBTdXJ2ZXlFbGVtZW50LmdldFByb2dyZXNzSW5mb0J5RWxlbWVudHMoZWxlbWVudHMsIHRoaXMuaXNSZXF1aXJlZCk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERpc3BsYXlWYWx1ZUNvcmUoa2V5c0FzVGV4dDogYm9vbGVhbiwgdmFsdWU6IGFueSk6IGFueSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHZhbHVlO1xuICAgIHZhciByZXMgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gdGhpcy5pdGVtc1tpXTtcbiAgICAgIHZhciB2YWwgPSB2YWx1ZVtpdGVtLm5hbWVdO1xuICAgICAgaWYgKEhlbHBlcnMuaXNWYWx1ZUVtcHR5KHZhbCkpIGNvbnRpbnVlO1xuICAgICAgdmFyIGl0ZW1OYW1lID0gaXRlbS5uYW1lO1xuICAgICAgaWYgKGtleXNBc1RleHQgJiYgISFpdGVtLnRpdGxlKSB7XG4gICAgICAgIGl0ZW1OYW1lID0gaXRlbS50aXRsZTtcbiAgICAgIH1cbiAgICAgICg8YW55PnJlcylbaXRlbU5hbWVdID0gaXRlbS5lZGl0b3IuZ2V0RGlzcGxheVZhbHVlKGtleXNBc1RleHQsIHZhbCk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgLy9JTXVsdGlwbGVUZXh0RGF0YVxuICBnZXRNdWx0aXBsZVRleHRWYWx1ZShuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMudmFsdWUpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnZhbHVlW25hbWVdO1xuICB9XG4gIHNldE11bHRpcGxlVGV4dFZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHRoaXMuaXNNdWx0aXBsZUl0ZW1WYWx1ZUNoYW5naW5nID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdmFyIG5ld1ZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICBpZiAoIW5ld1ZhbHVlKSB7XG4gICAgICBuZXdWYWx1ZSA9IHt9O1xuICAgIH1cbiAgICBuZXdWYWx1ZVtuYW1lXSA9IHZhbHVlO1xuICAgIHRoaXMuc2V0TmV3VmFsdWUobmV3VmFsdWUpO1xuICAgIHRoaXMuaXNNdWx0aXBsZUl0ZW1WYWx1ZUNoYW5naW5nID0gZmFsc2U7XG4gIH1cbiAgZ2V0SXRlbURlZmF1bHRWYWx1ZShuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiAhIXRoaXMuZGVmYXVsdFZhbHVlID8gdGhpcy5kZWZhdWx0VmFsdWVbbmFtZV0gOiBudWxsO1xuICB9XG4gIGdldFRleHRQcm9jZXNzb3IoKTogSVRleHRQcm9jZXNzb3Ige1xuICAgIHJldHVybiB0aGlzLnRleHRQcm9jZXNzb3I7XG4gIH1cbiAgZ2V0QWxsVmFsdWVzKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0QWxsVmFsdWVzKCkgOiBudWxsO1xuICB9XG4gIGdldElzUmVxdWlyZWRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkucmVxdWlyZWRUZXh0IDogXCJcIjtcbiAgfVxuICAvL0lQYW5lbFxuICBhZGRFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50LCBpbmRleDogbnVtYmVyKSB7fVxuICByZW1vdmVFbGVtZW50KGVsZW1lbnQ6IElFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGdldFF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImxlZnRcIjtcbiAgfVxuICBnZXRRdWVzdGlvblN0YXJ0SW5kZXgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdGFydEluZGV4KCk7XG4gIH1cbiAgZ2V0Q2hpbGRyZW5MYXlvdXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwicm93XCI7XG4gIH1cbiAgZWxlbWVudFdpZHRoQ2hhbmdlZChlbDogSUVsZW1lbnQpIHt9XG4gIGdldCBlbGVtZW50cygpOiBBcnJheTxJRWxlbWVudD4ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBpbmRleE9mKGVsOiBJRWxlbWVudCk6IG51bWJlciB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIGVuc3VyZVJvd3NWaXNpYmlsaXR5KCk6IHZvaWQge1xuICAgIC8vIGRvIG5vdGhpbmdcbiAgfVxuICBwdWJsaWMgZ2V0SXRlbUNzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgQ3NzQ2xhc3NCdWlsZGVyKCkuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5pdGVtKVxuICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuY2VsbCkudG9TdHJpbmcoKTtcbiAgfVxuICBwdWJsaWMgZ2V0SXRlbVRpdGxlQ3NzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBDc3NDbGFzc0J1aWxkZXIoKS5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLml0ZW1UaXRsZSlcbiAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLmNlbGwpLnRvU3RyaW5nKCk7XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJtdWx0aXBsZXRleHRpdGVtXCIsXG4gIFtcbiAgICBcIm5hbWVcIixcbiAgICBcImlzUmVxdWlyZWQ6Ym9vbGVhblwiLFxuICAgIHsgbmFtZTogXCJwbGFjZUhvbGRlclwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUGxhY2VIb2xkZXJcIiB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiaW5wdXRUeXBlXCIsXG4gICAgICBkZWZhdWx0OiBcInRleHRcIixcbiAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgXCJjb2xvclwiLFxuICAgICAgICBcImRhdGVcIixcbiAgICAgICAgXCJkYXRldGltZVwiLFxuICAgICAgICBcImRhdGV0aW1lLWxvY2FsXCIsXG4gICAgICAgIFwiZW1haWxcIixcbiAgICAgICAgXCJtb250aFwiLFxuICAgICAgICBcIm51bWJlclwiLFxuICAgICAgICBcInBhc3N3b3JkXCIsXG4gICAgICAgIFwicmFuZ2VcIixcbiAgICAgICAgXCJ0ZWxcIixcbiAgICAgICAgXCJ0ZXh0XCIsXG4gICAgICAgIFwidGltZVwiLFxuICAgICAgICBcInVybFwiLFxuICAgICAgICBcIndlZWtcIixcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7IG5hbWU6IFwidGl0bGVcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RpdGxlXCIgfSxcbiAgICB7IG5hbWU6IFwibWF4TGVuZ3RoOm51bWJlclwiLCBkZWZhdWx0OiAtMSB9LFxuICAgIHsgbmFtZTogXCJzaXplOm51bWJlclwiLCBtaW5WYWx1ZTogMCB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwicmVxdWlyZWRFcnJvclRleHQ6dGV4dFwiLFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1JlcXVpcmVkRXJyb3JUZXh0XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInZhbGlkYXRvcnM6dmFsaWRhdG9yc1wiLFxuICAgICAgYmFzZUNsYXNzTmFtZTogXCJzdXJ2ZXl2YWxpZGF0b3JcIixcbiAgICAgIGNsYXNzTmFtZVBhcnQ6IFwidmFsaWRhdG9yXCIsXG4gICAgfSxcbiAgXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBNdWx0aXBsZVRleHRJdGVtTW9kZWwoXCJcIik7XG4gIH1cbik7XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwibXVsdGlwbGV0ZXh0XCIsXG4gIFtcbiAgICB7IG5hbWU6IFwiIWl0ZW1zOnRleHRpdGVtc1wiLCBjbGFzc05hbWU6IFwibXVsdGlwbGV0ZXh0aXRlbVwiIH0sXG4gICAgeyBuYW1lOiBcIml0ZW1TaXplOm51bWJlclwiLCBtaW5WYWx1ZTogMCB9LFxuICAgIHsgbmFtZTogXCJjb2xDb3VudDpudW1iZXJcIiwgZGVmYXVsdDogMSwgY2hvaWNlczogWzEsIDIsIDMsIDQsIDVdIH0sXG4gIF0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25NdWx0aXBsZVRleHRNb2RlbChcIlwiKTtcbiAgfSxcbiAgXCJxdWVzdGlvblwiXG4pO1xuXG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcIm11bHRpcGxldGV4dFwiLCAobmFtZSkgPT4ge1xuICB2YXIgcSA9IG5ldyBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsKG5hbWUpO1xuICBRdWVzdGlvbk11bHRpcGxlVGV4dE1vZGVsLmFkZERlZmF1bHRJdGVtcyhxKTtcbiAgcmV0dXJuIHE7XG59KTtcbiIsImltcG9ydCB7IEhhc2hUYWJsZSwgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlXCI7XG5cbmltcG9ydCB7XG4gIElFbGVtZW50LFxuICBJUXVlc3Rpb24sXG4gIElQYW5lbCxcbiAgSVN1cnZleURhdGEsXG4gIElTdXJ2ZXksXG4gIElTdXJ2ZXlJbXBsLFxuICBJVGV4dFByb2Nlc3NvcixcbiAgSVByb2dyZXNzSW5mbyxcbn0gZnJvbSBcIi4vYmFzZS1pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBTdXJ2ZXlFbGVtZW50IH0gZnJvbSBcIi4vc3VydmV5LWVsZW1lbnRcIjtcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7XG4gIFRleHRQcmVQcm9jZXNzb3JWYWx1ZSxcbiAgUXVlc3Rpb25UZXh0UHJvY2Vzc29yLFxufSBmcm9tIFwiLi90ZXh0UHJlUHJvY2Vzc29yXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiwgSUNvbmRpdGlvbk9iamVjdCB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsIH0gZnJvbSBcIi4vcGFuZWxcIjtcbmltcG9ydCB7IEpzb25PYmplY3QsIHByb3BlcnR5LCBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XG5pbXBvcnQgeyBLZXlEdXBsaWNhdGlvbkVycm9yIH0gZnJvbSBcIi4vZXJyb3JcIjtcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcbmltcG9ydCB7IFBhbmVsIH0gZnJvbSBcIi4va25vY2tvdXQva29wYWdlXCI7XG5pbXBvcnQgeyBjb25maXJtQWN0aW9uIH0gZnJvbSBcIi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IFN1cnZleUVycm9yIH0gZnJvbSBcIi4vc3VydmV5LWVycm9yXCI7XG5pbXBvcnQgeyBDc3NDbGFzc0J1aWxkZXIgfSBmcm9tIFwiLi91dGlscy9jc3NDbGFzc0J1aWxkZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJUXVlc3Rpb25QYW5lbER5bmFtaWNEYXRhIHtcbiAgZ2V0SXRlbUluZGV4KGl0ZW06IElTdXJ2ZXlEYXRhKTogbnVtYmVyO1xuICBnZXRQYW5lbEl0ZW1EYXRhKGl0ZW06IElTdXJ2ZXlEYXRhKTogYW55O1xuICBzZXRQYW5lbEl0ZW1EYXRhKGl0ZW06IElTdXJ2ZXlEYXRhLCBuYW1lOiBzdHJpbmcsIHZhbDogYW55KTogYW55O1xuICBnZXRTaGFyZWRRdWVzdGlvbkZyb21BcnJheShuYW1lOiBzdHJpbmcsIHBhbmVsSW5kZXg6IG51bWJlcik6IFF1ZXN0aW9uO1xuICBnZXRTdXJ2ZXkoKTogSVN1cnZleTtcbiAgZ2V0Um9vdERhdGEoKTogSVN1cnZleURhdGE7XG59XG5cbmNsYXNzIFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbVRleHRQcm9jZXNzb3IgZXh0ZW5kcyBRdWVzdGlvblRleHRQcm9jZXNzb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRhdGE6IElRdWVzdGlvblBhbmVsRHluYW1pY0RhdGEsXG4gICAgcHJvdGVjdGVkIHBhbmVsSXRlbTogUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtLFxuICAgIHByb3RlY3RlZCB2YXJpYWJsZU5hbWU6IHN0cmluZ1xuICApIHtcbiAgICBzdXBlcih2YXJpYWJsZU5hbWUpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgc3VydmV5KCk6IElTdXJ2ZXkge1xuICAgIHJldHVybiB0aGlzLnBhbmVsSXRlbS5nZXRTdXJ2ZXkoKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHBhbmVsKCk6IFBhbmVsTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnBhbmVsSXRlbS5wYW5lbDtcbiAgfVxuICBwcml2YXRlIGdldCBwYW5lbEluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuICEhdGhpcy5kYXRhID8gdGhpcy5kYXRhLmdldEl0ZW1JbmRleCh0aGlzLnBhbmVsSXRlbSkgOiAtMTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VmFsdWVzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucGFuZWxJdGVtLmdldEFsbFZhbHVlcygpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRRdWVzdGlvbkJ5TmFtZShuYW1lOiBzdHJpbmcpOiBRdWVzdGlvbiB7XG4gICAgdmFyIHJlcyA9IHN1cGVyLmdldFF1ZXN0aW9uQnlOYW1lKG5hbWUpO1xuICAgIGlmICghIXJlcykgcmV0dXJuIHJlcztcbiAgICB2YXIgaW5kZXggPSB0aGlzLnBhbmVsSW5kZXg7XG4gICAgcmV0dXJuIGluZGV4ID4gLTFcbiAgICAgID8gdGhpcy5kYXRhLmdldFNoYXJlZFF1ZXN0aW9uRnJvbUFycmF5KG5hbWUsIGluZGV4KVxuICAgICAgOiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBvbkN1c3RvbVByb2Nlc3NUZXh0KHRleHRWYWx1ZTogVGV4dFByZVByb2Nlc3NvclZhbHVlKTogYm9vbGVhbiB7XG4gICAgaWYgKHRleHRWYWx1ZS5uYW1lID09IFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbS5JbmRleFZhcmlhYmxlTmFtZSkge1xuICAgICAgdmFyIGluZGV4ID0gdGhpcy5wYW5lbEluZGV4O1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgdGV4dFZhbHVlLmlzRXhpc3RzID0gdHJ1ZTtcbiAgICAgICAgdGV4dFZhbHVlLnZhbHVlID0gaW5kZXggKyAxO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGV4dFZhbHVlLm5hbWUuaW5kZXhPZihcbiAgICAgICAgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtLlBhcmVudEl0ZW1WYXJpYWJsZU5hbWUgKyBcIi5cIlxuICAgICAgKSA9PSAwXG4gICAgKSB7XG4gICAgICB2YXIgcSA9IDxRdWVzdGlvbj4oPGFueT50aGlzLmRhdGEpO1xuICAgICAgaWYgKCEhcSAmJiAhIXEucGFyZW50UXVlc3Rpb24gJiYgISFxLnBhcmVudCAmJiAhISg8YW55PnEucGFyZW50KS5kYXRhKSB7XG4gICAgICAgIHZhciBwcm9jZXNzb3IgPSBuZXcgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtVGV4dFByb2Nlc3NvcihcbiAgICAgICAgICA8SVF1ZXN0aW9uUGFuZWxEeW5hbWljRGF0YT4oPGFueT5xLnBhcmVudFF1ZXN0aW9uKSxcbiAgICAgICAgICA8UXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtPig8YW55PnEucGFyZW50KS5kYXRhLFxuICAgICAgICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbS5JdGVtVmFyaWFibGVOYW1lXG4gICAgICAgICk7XG4gICAgICAgIHZhciB0ZXh0ID0gdGV4dFZhbHVlLm5hbWUucmVwbGFjZShcbiAgICAgICAgICBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0uUGFyZW50SXRlbVZhcmlhYmxlTmFtZSxcbiAgICAgICAgICBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0uSXRlbVZhcmlhYmxlTmFtZVxuICAgICAgICApO1xuICAgICAgICB2YXIgcmVzID0gcHJvY2Vzc29yLnByb2Nlc3NWYWx1ZSh0ZXh0LCB0ZXh0VmFsdWUucmV0dXJuRGlzcGxheVZhbHVlKTtcbiAgICAgICAgdGV4dFZhbHVlLmlzRXhpc3RzID0gcmVzLmlzRXhpc3RzO1xuICAgICAgICB0ZXh0VmFsdWUudmFsdWUgPSByZXMudmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0gaW1wbGVtZW50cyBJU3VydmV5RGF0YSwgSVN1cnZleUltcGwge1xuICBwdWJsaWMgc3RhdGljIEl0ZW1WYXJpYWJsZU5hbWUgPSBcInBhbmVsXCI7XG4gIHB1YmxpYyBzdGF0aWMgUGFyZW50SXRlbVZhcmlhYmxlTmFtZSA9IFwicGFyZW50UGFuZWxcIjtcbiAgcHVibGljIHN0YXRpYyBJbmRleFZhcmlhYmxlTmFtZSA9IFwicGFuZWxJbmRleFwiO1xuICBwcml2YXRlIHBhbmVsVmFsdWU6IFBhbmVsTW9kZWw7XG4gIHByaXZhdGUgZGF0YTogSVF1ZXN0aW9uUGFuZWxEeW5hbWljRGF0YTtcbiAgcHJpdmF0ZSB0ZXh0UHJlUHJvY2Vzc29yOiBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW1UZXh0UHJvY2Vzc29yO1xuICBjb25zdHJ1Y3RvcihkYXRhOiBJUXVlc3Rpb25QYW5lbER5bmFtaWNEYXRhLCBwYW5lbDogUGFuZWxNb2RlbCkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5wYW5lbFZhbHVlID0gcGFuZWw7XG4gICAgdGhpcy50ZXh0UHJlUHJvY2Vzc29yID0gbmV3IFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbVRleHRQcm9jZXNzb3IoXG4gICAgICBkYXRhLFxuICAgICAgdGhpcyxcbiAgICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbS5JdGVtVmFyaWFibGVOYW1lXG4gICAgKTtcbiAgICB0aGlzLnNldFN1cnZleUltcGwoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHBhbmVsKCk6IFBhbmVsTW9kZWwge1xuICAgIHJldHVybiB0aGlzLnBhbmVsVmFsdWU7XG4gIH1cbiAgcHVibGljIHNldFN1cnZleUltcGwoKSB7XG4gICAgdGhpcy5wYW5lbC5zZXRTdXJ2ZXlJbXBsKHRoaXMpO1xuICB9XG4gIHB1YmxpYyBnZXRWYWx1ZShuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIHZhciB2YWx1ZXMgPSB0aGlzLmdldEFsbFZhbHVlcygpO1xuICAgIHJldHVybiB2YWx1ZXNbbmFtZV07XG4gIH1cbiAgcHVibGljIHNldFZhbHVlKG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSkge1xuICAgIHRoaXMuZGF0YS5zZXRQYW5lbEl0ZW1EYXRhKHRoaXMsIG5hbWUsIG5ld1ZhbHVlKTtcbiAgfVxuICBnZXRWYXJpYWJsZShuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgc2V0VmFyaWFibGUobmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KSB7fVxuICBwdWJsaWMgZ2V0Q29tbWVudChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHZhciByZXN1bHQgPSB0aGlzLmdldFZhbHVlKG5hbWUgKyBzZXR0aW5ncy5jb21tZW50UHJlZml4KTtcbiAgICByZXR1cm4gcmVzdWx0ID8gcmVzdWx0IDogXCJcIjtcbiAgfVxuICBwdWJsaWMgc2V0Q29tbWVudChuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBzdHJpbmcsIGxvY05vdGlmaWNhdGlvbjogYW55KSB7XG4gICAgdGhpcy5zZXRWYWx1ZShuYW1lICsgc2V0dGluZ3MuY29tbWVudFByZWZpeCwgbmV3VmFsdWUpO1xuICB9XG4gIGdldEFsbFZhbHVlcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmRhdGEuZ2V0UGFuZWxJdGVtRGF0YSh0aGlzKTtcbiAgfVxuICBnZXRGaWx0ZXJlZFZhbHVlcygpOiBhbnkge1xuICAgIHZhciB2YWx1ZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICB2YXIgc3VydmV5VmFsdWVzID1cbiAgICAgICEhdGhpcy5kYXRhICYmICEhdGhpcy5kYXRhLmdldFJvb3REYXRhKClcbiAgICAgICAgPyB0aGlzLmRhdGEuZ2V0Um9vdERhdGEoKS5nZXRGaWx0ZXJlZFZhbHVlcygpXG4gICAgICAgIDoge307XG4gICAgZm9yICh2YXIga2V5IGluIHN1cnZleVZhbHVlcykge1xuICAgICAgdmFsdWVzW2tleV0gPSBzdXJ2ZXlWYWx1ZXNba2V5XTtcbiAgICB9XG4gICAgdmFsdWVzW1F1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbS5JdGVtVmFyaWFibGVOYW1lXSA9IHRoaXMuZ2V0QWxsVmFsdWVzKCk7XG4gICAgaWYgKCEhdGhpcy5kYXRhKSB7XG4gICAgICB2YWx1ZXNbXG4gICAgICAgIFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbS5JbmRleFZhcmlhYmxlTmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICBdID0gdGhpcy5kYXRhLmdldEl0ZW1JbmRleCh0aGlzKTtcbiAgICAgIGNvbnN0IHEgPSA8UXVlc3Rpb24+KDxhbnk+dGhpcy5kYXRhKTtcbiAgICAgIGlmICghIXEgJiYgISFxLnBhcmVudFF1ZXN0aW9uICYmICEhcS5wYXJlbnQpIHtcbiAgICAgICAgdmFsdWVzW1F1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbS5QYXJlbnRJdGVtVmFyaWFibGVOYW1lLnRvTG93ZXJDYXNlKCldID0gKDxhbnk+cS5wYXJlbnQpLmdldFZhbHVlKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH1cbiAgZ2V0RmlsdGVyZWRQcm9wZXJ0aWVzKCk6IGFueSB7XG4gICAgaWYgKCEhdGhpcy5kYXRhICYmICEhdGhpcy5kYXRhLmdldFJvb3REYXRhKCkpXG4gICAgICByZXR1cm4gdGhpcy5kYXRhLmdldFJvb3REYXRhKCkuZ2V0RmlsdGVyZWRQcm9wZXJ0aWVzKCk7XG4gICAgcmV0dXJuIHsgc3VydmV5OiB0aGlzLmdldFN1cnZleSgpIH07XG4gIH1cbiAgZ2V0U3VydmV5RGF0YSgpOiBJU3VydmV5RGF0YSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZ2V0U3VydmV5KCk6IElTdXJ2ZXkge1xuICAgIHJldHVybiB0aGlzLmRhdGEgPyB0aGlzLmRhdGEuZ2V0U3VydmV5KCkgOiBudWxsO1xuICB9XG4gIGdldFRleHRQcm9jZXNzb3IoKTogSVRleHRQcm9jZXNzb3Ige1xuICAgIHJldHVybiB0aGlzLnRleHRQcmVQcm9jZXNzb3I7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uUGFuZWxEeW5hbWljVGVtcGxhdGVTdXJ2ZXlJbXBsIGltcGxlbWVudHMgSVN1cnZleUltcGwge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgZGF0YTogSVF1ZXN0aW9uUGFuZWxEeW5hbWljRGF0YSkge31cbiAgZ2V0U3VydmV5RGF0YSgpOiBJU3VydmV5RGF0YSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgZ2V0U3VydmV5KCk6IElTdXJ2ZXkge1xuICAgIHJldHVybiB0aGlzLmRhdGEuZ2V0U3VydmV5KCk7XG4gIH1cbiAgZ2V0VGV4dFByb2Nlc3NvcigpOiBJVGV4dFByb2Nlc3NvciB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBBIE1vZGVsIGZvciBhIHBhbmVsIGR5bWFuaWMgcXVlc3Rpb24uIFlvdSBzZXR1cCB0aGUgdGVtcGxhdGUgcGFuZWwsIGJ1dCBhZGRpbmcgZWxlbWVudHMgKGFueSBxdWVzdGlvbiBvciBhIHBhbmVsKSBhbmQgYXNzaWduIGEgdGV4dCB0byBpdCdzIHRpdGxlLCBhbmQgdGhpcyBwYW5lbCB3aWxsIGJlIHVzZWQgYXMgYSB0ZW1wbGF0ZSBvbiBjcmVhdGluZyBkeW5hbWljIHBhbmVscy4gVGhlIG51bWJlciBvZiBwYW5lbHMgaXMgZGVmaW5lZCBieSBwYW5lbENvdW50IHByb3BlcnR5LlxuICogQW4gZW5kLXVzZXIgbWF5IGR5bmFtaWNhbGx5IGFkZC9yZW1vdmUgcGFuZWxzLCB1bmxlc3MgeW91IGZvcmJpZGRlbiB0aGlzLlxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbCBleHRlbmRzIFF1ZXN0aW9uXG4gIGltcGxlbWVudHMgSVF1ZXN0aW9uUGFuZWxEeW5hbWljRGF0YSB7XG4gIHByaXZhdGUgdGVtcGxhdGVWYWx1ZTogUGFuZWxNb2RlbDtcbiAgcHJpdmF0ZSBsb2FkaW5nUGFuZWxDb3VudDogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBpc1ZhbHVlQ2hhbmdpbmdJbnRlcm5hbGx5OiBib29sZWFuO1xuICBwcml2YXRlIGNoYW5naW5nVmFsdWVRdWVzdGlvbjogUXVlc3Rpb247XG4gIHByaXZhdGUgY3VycmVudEluZGV4VmFsdWU6IG51bWJlciA9IC0xO1xuXG4gIHJlbmRlck1vZGVDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XG4gIHBhbmVsQ291bnRDaGFuZ2VkQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XG4gIGN1cnJlbnRJbmRleENoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB0aGlzLmNyZWF0ZU5ld0FycmF5KFwicGFuZWxzXCIpO1xuICAgIHRoaXMudGVtcGxhdGVWYWx1ZSA9IHRoaXMuY3JlYXRlQW5kU2V0dXBOZXdQYW5lbE9iamVjdCgpO1xuICAgIHRoaXMudGVtcGxhdGUucmVuZGVyV2lkdGggPSBcIjEwMCVcIjtcbiAgICB0aGlzLnRlbXBsYXRlLnNlbGVjdGVkRWxlbWVudEluRGVzaWduID0gdGhpcztcblxuICAgIHRoaXMudGVtcGxhdGUuYWRkRWxlbWVudENhbGxiYWNrID0gKGVsZW1lbnQpID0+IHtcbiAgICAgIHRoaXMuYWRkT25Qcm9wZXJ0eUNoYW5nZWRDYWxsYmFjayg8U3VydmV5RWxlbWVudD48YW55PmVsZW1lbnQpO1xuICAgICAgdGhpcy5yZWJ1aWxkUGFuZWxzKCk7XG4gICAgfTtcbiAgICB0aGlzLnRlbXBsYXRlLnJlbW92ZUVsZW1lbnRDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgIHRoaXMucmVidWlsZFBhbmVscygpO1xuICAgIH07XG5cbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwiY29uZmlybURlbGV0ZVRleHRcIiwgdGhpcyk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImtleUR1cGxpY2F0aW9uRXJyb3JcIiwgdGhpcyk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInBhbmVsQWRkVGV4dFwiLCB0aGlzKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwicGFuZWxSZW1vdmVUZXh0XCIsIHRoaXMpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJwYW5lbFByZXZUZXh0XCIsIHRoaXMpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJwYW5lbE5leHRUZXh0XCIsIHRoaXMpO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJwYW5lbHNTdGF0ZVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLnNldFBhbmVsc1N0YXRlKCk7XG4gICAgfSk7XG4gIH1cbiAgcHVibGljIGdldCBoYXNTaW5nbGVJbnB1dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIHNldFN1cnZleUltcGwodmFsdWU6IElTdXJ2ZXlJbXBsLCBpc0xpZ2h0PzogYm9vbGVhbikge1xuICAgIHN1cGVyLnNldFN1cnZleUltcGwodmFsdWUsIGlzTGlnaHQpO1xuICAgIHRoaXMuc2V0VGVtcGxhdGVQYW5lbFN1cnZleUltcGwoKTtcbiAgICB0aGlzLnNldFBhbmVsc1N1cnZleUltcGwoKTtcbiAgfVxuICBwcml2YXRlIGFzc2lnbk9uUHJvcGVydHlDaGFuZ2VkVG9UZW1wbGF0ZSgpIHtcbiAgICB2YXIgZWxlbWVudHMgPSB0aGlzLnRlbXBsYXRlLmVsZW1lbnRzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuYWRkT25Qcm9wZXJ0eUNoYW5nZWRDYWxsYmFjayg8U3VydmV5RWxlbWVudD48YW55PmVsZW1lbnRzW2ldKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBhZGRPblByb3BlcnR5Q2hhbmdlZENhbGxiYWNrKGVsZW1lbnQ6IFN1cnZleUVsZW1lbnQpIHtcbiAgICBpZihlbGVtZW50LmlzUXVlc3Rpb24pIHtcbiAgICAgICg8UXVlc3Rpb24+ZWxlbWVudCkuc2V0UGFyZW50UXVlc3Rpb24odGhpcyk7XG4gICAgfVxuICAgIGVsZW1lbnQub25Qcm9wZXJ0eUNoYW5nZWQuYWRkKChlbGVtZW50LCBvcHRpb25zKSA9PiB7XG4gICAgICB0aGlzLm9uVGVtcGxhdGVFbGVtZW50UHJvcGVydHlDaGFuZ2VkKGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgIH0pO1xuICAgIGlmIChlbGVtZW50LmlzUGFuZWwpIHtcbiAgICAgICg8UGFuZWxNb2RlbD5lbGVtZW50KS5hZGRFbGVtZW50Q2FsbGJhY2sgPSAoZWxlbWVudCkgPT4ge1xuICAgICAgICB0aGlzLmFkZE9uUHJvcGVydHlDaGFuZ2VkQ2FsbGJhY2soPFN1cnZleUVsZW1lbnQ+PGFueT5lbGVtZW50KTtcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIHByaXZhdGUgb25UZW1wbGF0ZUVsZW1lbnRQcm9wZXJ0eUNoYW5nZWQoZWxlbWVudDogYW55LCBvcHRpb25zOiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbiB8fCB0aGlzLmlzRGVzaWduTW9kZSB8fCB0aGlzLnBhbmVscy5sZW5ndGggPT0gMClcbiAgICAgIHJldHVybjtcbiAgICB2YXIgcHJvcGVydHkgPSBTZXJpYWxpemVyLmZpbmRQcm9wZXJ0eShlbGVtZW50LmdldFR5cGUoKSwgb3B0aW9ucy5uYW1lKTtcbiAgICBpZiAoIXByb3BlcnR5KSByZXR1cm47XG4gICAgdmFyIHBhbmVscyA9IHRoaXMucGFuZWxzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcXVlc3Rpb24gPSBwYW5lbHNbaV0uZ2V0UXVlc3Rpb25CeU5hbWUoZWxlbWVudC5uYW1lKTtcbiAgICAgIGlmICghIXF1ZXN0aW9uICYmICg8YW55PnF1ZXN0aW9uKVtvcHRpb25zLm5hbWVdICE9PSBvcHRpb25zLm5ld1ZhbHVlKSB7XG4gICAgICAgICg8YW55PnF1ZXN0aW9uKVtvcHRpb25zLm5hbWVdID0gb3B0aW9ucy5uZXdWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJwYW5lbGR5bmFtaWNcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzQ29tcG9zaXRlUXVlc3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIGNsZWFyT25EZWxldGluZ0NvbnRhaW5lcigpIHtcbiAgICB0aGlzLnBhbmVscy5mb3JFYWNoKChwYW5lbCkgPT4ge1xuICAgICAgcGFuZWwuY2xlYXJPbkRlbGV0aW5nQ29udGFpbmVyKCk7XG4gICAgfSk7XG4gIH1cbiAgcHVibGljIGdldCBpc0FsbG93VGl0bGVMZWZ0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgcmVtb3ZlRWxlbWVudChlbGVtZW50OiBJRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlLnJlbW92ZUVsZW1lbnQoZWxlbWVudCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIFBhbmVsLiBUaGlzIHBhbmVsIGlzIHVzZWQgYXMgYSB0ZW1wbGF0ZSBvbiBjcmVhdGlnbiBkeW5hbWljIHBhbmVsc1xuICAgKiBAc2VlICB0ZW1wbGF0ZUVsZW1lbnRzXG4gICAqIEBzZWUgdGVtcGxhdGVUaXRsZVxuICAgKiBAc2VlIHBhbmVsQ291bnRcbiAgICovXG4gIHB1YmxpYyBnZXQgdGVtcGxhdGUoKTogUGFuZWxNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVWYWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0UGFuZWwoKTogSVBhbmVsIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZTtcbiAgfVxuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIFBhbmVsIGVsZW1lbnRzLCBxdWVzdGlvbnMgYW5kIHBhbmVscy5cbiAgICogQHNlZSAgdGVtcGxhdGVFbGVtZW50c1xuICAgKiBAc2VlIHRlbXBsYXRlXG4gICAqIEBzZWUgcGFuZWxDb3VudFxuICAgKi9cbiAgcHVibGljIGdldCB0ZW1wbGF0ZUVsZW1lbnRzKCk6IEFycmF5PElFbGVtZW50PiB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGUuZWxlbWVudHM7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSBQYW5lbCB0aXRsZSBwcm9wZXJ0eS5cbiAgICogQHNlZSAgdGVtcGxhdGVFbGVtZW50c1xuICAgKiBAc2VlIHRlbXBsYXRlXG4gICAqIEBzZWUgcGFuZWxDb3VudFxuICAgKi9cbiAgcHVibGljIGdldCB0ZW1wbGF0ZVRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGUudGl0bGU7XG4gIH1cbiAgcHVibGljIHNldCB0ZW1wbGF0ZVRpdGxlKG5ld1ZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRlbXBsYXRlLnRpdGxlID0gbmV3VmFsdWU7XG4gIH1cbiAgZ2V0IGxvY1RlbXBsYXRlVGl0bGUoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlLmxvY1RpdGxlO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgUGFuZWwgZGVzY3JpcHRpb24gcHJvcGVydHkuXG4gICAqIEBzZWUgIHRlbXBsYXRlRWxlbWVudHNcbiAgICogQHNlZSB0ZW1wbGF0ZVxuICAgKiBAc2VlIHBhbmVsQ291bnRcbiAgICogQHNlZSB0ZW1wbGF0ZVRpdGxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHRlbXBsYXRlRGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZS5kZXNjcmlwdGlvbjtcbiAgfVxuICBwdWJsaWMgc2V0IHRlbXBsYXRlRGVzY3JpcHRpb24obmV3VmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudGVtcGxhdGUuZGVzY3JpcHRpb24gPSBuZXdWYWx1ZTtcbiAgfVxuICBnZXQgbG9jVGVtcGxhdGVEZXNjcmlwdGlvbigpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGUubG9jRGVzY3JpcHRpb247XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGl0ZW1zKCk6IEFycmF5PElTdXJ2ZXlEYXRhPiB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlcy5wdXNoKHRoaXMucGFuZWxzW2ldLmRhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgYXJyYXkgb2YgZHluYW1pYyBwYW5lbHMgY3JlYXRlZCBiYXNlZCBvbiBwYW5lbCB0ZW1wbGF0ZVxuICAgKiBAc2VlIHRlbXBsYXRlXG4gICAqIEBzZWUgcGFuZWxDb3VudFxuICAgKi9cbiAgcHVibGljIGdldCBwYW5lbHMoKTogQXJyYXk8UGFuZWxNb2RlbD4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJwYW5lbHNcIik7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiBjdXJyZW50IGFjdGl2ZSBkeW5hbWljYWwgcGFuZWwgd2hlbiB0aGUgcmVuZGVyTW9kZSBpcyBub3QgXCJsaXN0XCIuIElmIHRoZXJlIGlzIG5vIGR5bWFtaWMgcGFuZWwgKHBhbmVsQ291bnQgPSAwKSBvciByZW5kZXJNb2RlIGVxdWFscyBcImxpc3RcIiBpdCByZXR1cm5zIC0xLCBvdGhlcndpc2UgaXQgcmV0dXJucyBhIHZhbHVlIGZyb20gMCB0byBwYW5lbENvdW50IC0gMS5cbiAgICogQHNlZSBjdXJyZW50UGFuZWxcbiAgICogQHNlZSBwYW5lbHNcbiAgICogQHNlZSBwYW5lbENvdW50XG4gICAqIEBzZWUgcmVuZGVyTW9kZVxuICAgKi9cbiAgcHVibGljIGdldCBjdXJyZW50SW5kZXgoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5pc1JlbmRlck1vZGVMaXN0KSByZXR1cm4gLTE7XG4gICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKSByZXR1cm4gMDtcbiAgICBpZiAodGhpcy5jdXJyZW50SW5kZXhWYWx1ZSA8IDAgJiYgdGhpcy5wYW5lbENvdW50ID4gMCkge1xuICAgICAgdGhpcy5jdXJyZW50SW5kZXhWYWx1ZSA9IDA7XG4gICAgfVxuICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleFZhbHVlID49IHRoaXMucGFuZWxDb3VudCkge1xuICAgICAgdGhpcy5jdXJyZW50SW5kZXhWYWx1ZSA9IHRoaXMucGFuZWxDb3VudCAtIDE7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmN1cnJlbnRJbmRleFZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXQgY3VycmVudEluZGV4KHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuY3VycmVudEluZGV4VmFsdWUgIT09IHZhbCkge1xuICAgICAgaWYgKHZhbCA+PSB0aGlzLnBhbmVsQ291bnQpIHZhbCA9IHRoaXMucGFuZWxDb3VudCAtIDE7XG4gICAgICB0aGlzLmN1cnJlbnRJbmRleFZhbHVlID0gdmFsO1xuICAgICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5jdXJyZW50SW5kZXhDaGFuZ2VkQ2FsbGJhY2spO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgYWN0aXZlIGR5bmFtaWNhbCBwYW5lbCB3aGVuIHRoZSByZW5kZXJNb2RlIGlzIG5vdCBcImxpc3RcIi4gSWYgdGhlcmUgaXMgbm8gZHltYW1pYyBwYW5lbCAocGFuZWxDb3VudCA9IDApIG9yIHJlbmRlck1vZGUgZXF1YWxzIFwibGlzdFwiIGl0IHJldHVybnMgbnVsbC5cbiAgICogQHNlZSBjdXJyZW5JbmRleFxuICAgKiBAc2VlIHBhbmVsc1xuICAgKiBAc2VlIHBhbmVsQ291bnRcbiAgICogQHNlZSByZW5kZXJNb2RlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGN1cnJlbnRQYW5lbCgpOiBQYW5lbE1vZGVsIHtcbiAgICB2YXIgaW5kZXggPSB0aGlzLmN1cnJlbnRJbmRleDtcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMucGFuZWxzLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMucGFuZWxzW2luZGV4XTtcbiAgfVxuICAvKipcbiAgICogU2V0IGl0IHRvIHRydWUsIHRvIHNob3cgYSBjb25maXJtYXRpb24gZGlhbG9nIG9uIHJlbW92aW5nIGEgcGFuZWxcbiAgICogQHNlZSBDb25maXJtRGVsZXRlVGV4dFxuICAgKi9cbiAgcHVibGljIGdldCBjb25maXJtRGVsZXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjb25maXJtRGVsZXRlXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbmZpcm1EZWxldGUodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29uZmlybURlbGV0ZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gYSBxdWVzdGlvbiBuYW1lIHVzZWQgaW4gdGhlIHRlbXBsYXRlIHBhbmVsIGFuZCB0aGUgbGlicmFyeSBzaG93cyBkdXBsaWNhdGlvbiBlcnJvciwgaWYgdGhlcmUgYXJlIHNhbWUgdmFsdWVzIGluIGRpZmZlcmVudCBwYW5lbHMgb2YgdGhpcyBxdWVzdGlvbi5cbiAgICogQHNlZSBrZXlEdXBsaWNhdGlvbkVycm9yXG4gICAqL1xuICBwdWJsaWMgZ2V0IGtleU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwia2V5TmFtZVwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGtleU5hbWUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJrZXlOYW1lXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCB0ZXh0IHNob3dpbmcgaW4gdGhlIGNvbmZpcm1hdGlvbiBkZWxldGUgZGlhbG9nIG9uIHJlbW92aW5nIGEgcGFuZWwuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvbmZpcm1EZWxldGVUZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwiY29uZmlybURlbGV0ZVRleHRcIixcbiAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJjb25maXJtRGVsZXRlXCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbmZpcm1EZWxldGVUZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJjb25maXJtRGVsZXRlVGV4dFwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NDb25maXJtRGVsZXRlVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJjb25maXJtRGVsZXRlVGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGR1cGxpY2F0aW9uIHZhbHVlIGVycm9yIHRleHQuIFNldCBpdCB0byBzaG93IHRoZSB0ZXh0IGRpZmZlcmVudCBmcm9tIHRoZSBkZWZhdWx0LlxuICAgKiBAc2VlIGtleU5hbWVcbiAgICovXG4gIHB1YmxpYyBnZXQga2V5RHVwbGljYXRpb25FcnJvcigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXG4gICAgICBcImtleUR1cGxpY2F0aW9uRXJyb3JcIixcbiAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IGtleUR1cGxpY2F0aW9uRXJyb3IodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImtleUR1cGxpY2F0aW9uRXJyb3JcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jS2V5RHVwbGljYXRpb25FcnJvcigpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJrZXlEdXBsaWNhdGlvbkVycm9yXCIpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgcHJldmlvdXMgYnV0dG9uIHRleHQuIFByZXZpb3VzIGJ1dHRvbiBzaG93cyB0aGUgcHJldmlvdXMgcGFuZWwsIGNoYW5nZSB0aGUgY3VycmVudFBhbmVsLCB3aGVuIHRoZSByZW5kZXJNb2RlIGRvZXNuJ3QgZXF1YWwgdG8gXCJsaXN0XCIuXG4gICAqIEBzZWUgY3VycmVudFBhbmVsXG4gICAqIEBzZWUgY3VycmVudEluZGV4XG4gICAqIEBzZWUgcmVuZGVyTW9kZVxuICAgKi9cbiAgcHVibGljIGdldCBwYW5lbFByZXZUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJwYW5lbFByZXZUZXh0XCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicGFnZVByZXZUZXh0XCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IHBhbmVsUHJldlRleHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInBhbmVsUHJldlRleHRcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jUGFuZWxQcmV2VGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJwYW5lbFByZXZUZXh0XCIpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgbmV4dCBidXR0b24gdGV4dC4gTmV4dCBidXR0b24gc2hvd3MgdGhlIG5leHQgcGFuZWwsIGNoYW5nZSB0aGUgY3VycmVudFBhbmVsLCB3aGVuIHRoZSByZW5kZXJNb2RlIGRvZXNuJ3QgZXF1YWwgdG8gXCJsaXN0XCIuXG4gICAqIEBzZWUgY3VycmVudFBhbmVsXG4gICAqIEBzZWUgY3VycmVudEluZGV4XG4gICAqIEBzZWUgcmVuZGVyTW9kZVxuICAgKi9cbiAgcHVibGljIGdldCBwYW5lbE5leHRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJwYW5lbE5leHRUZXh0XCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicGFnZU5leHRUZXh0XCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgc2V0IHBhbmVsTmV4dFRleHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInBhbmVsTmV4dFRleHRcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jUGFuZWxOZXh0VGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJwYW5lbE5leHRUZXh0XCIpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYWRkIHBhbmVsIGJ1dHRvbiB0ZXh0LlxuICAgKi9cbiAgcHVibGljIGdldCBwYW5lbEFkZFRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFxuICAgICAgXCJwYW5lbEFkZFRleHRcIixcbiAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJhZGRQYW5lbFwiKVxuICAgICk7XG4gIH1cbiAgcHVibGljIHNldCBwYW5lbEFkZFRleHQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicGFuZWxBZGRUZXh0XCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgbG9jUGFuZWxBZGRUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInBhbmVsQWRkVGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHJlbW92ZSBwYW5lbCBidXR0b24gdGV4dC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcGFuZWxSZW1vdmVUZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwicGFuZWxSZW1vdmVUZXh0XCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwicmVtb3ZlUGFuZWxcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXQgcGFuZWxSZW1vdmVUZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJwYW5lbFJlbW92ZVRleHRcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jUGFuZWxSZW1vdmVUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInBhbmVsUmVtb3ZlVGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIHdoZW4gdGhlIHJlbmRlck1vZGUgZXF1YWxzIHRvIFwicHJvZ3Jlc3NUb3BcIiBvciBcInByb2dyZXNzVG9wQm90dG9tXCJcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNQcm9ncmVzc1RvcFNob3dpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyTW9kZSA9PT0gXCJwcm9ncmVzc1RvcFwiIHx8IHRoaXMucmVuZGVyTW9kZSA9PT0gXCJwcm9ncmVzc1RvcEJvdHRvbVwiO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgd2hlbiB0aGUgcmVuZGVyTW9kZSBlcXVhbHMgdG8gXCJwcm9ncmVzc0JvdHRvbVwiIG9yIFwicHJvZ3Jlc3NUb3BCb3R0b21cIlxuICAgKi9cbiAgcHVibGljIGdldCBpc1Byb2dyZXNzQm90dG9tU2hvd2luZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJNb2RlID09PSBcInByb2dyZXNzQm90dG9tXCIgfHwgdGhpcy5yZW5kZXJNb2RlID09PSBcInByb2dyZXNzVG9wQm90dG9tXCI7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSB3aGVuIGN1cnJlbnRJbmRleCBpcyBtb3JlIHRoYW4gMC5cbiAgICogQHNlZSBjdXJyZW5JbmRleFxuICAgKiBAc2VlIGN1cnJlblBhbmVsXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzUHJldkJ1dHRvblNob3dpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudEluZGV4ID4gMDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIHdoZW4gY3VycmVudEluZGV4IGlzIG1vcmUgdGhhbiBvciBlcXVhbCAwIGFuZCBsZXNzIHRoYW4gcGFuZWxDb3VudCAtIDEuXG4gICAqIEBzZWUgY3VycmVuSW5kZXhcbiAgICogQHNlZSBjdXJyZW5QYW5lbFxuICAgKiBAc2VlIHBhbmVsQ291bnRcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNOZXh0QnV0dG9uU2hvd2luZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50SW5kZXggPj0gMCAmJiB0aGlzLmN1cnJlbnRJbmRleCA8IHRoaXMucGFuZWxDb3VudCAtIDE7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSB3aGVuIHNob3dSYW5nZUluUHJvZ3Jlc3MgZXF1YWxzIHRvIHRydWUsIHJlbmRlck1vZGUgZG9lc24ndCBlcXVhbCB0byBcImxpc3RcIiBhbmQgcGFuZWxDb3VudCBpcyA+PSAyLlxuICAgKi9cbiAgcHVibGljIGdldCBpc1JhbmdlU2hvd2luZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5zaG93UmFuZ2VJblByb2dyZXNzICYmIHRoaXMuY3VycmVudEluZGV4ID49IDAgJiYgdGhpcy5wYW5lbENvdW50ID4gMVxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldEVsZW1lbnRzSW5EZXNpZ24oaW5jbHVkZUhpZGRlbjogYm9vbGVhbiA9IGZhbHNlKTogQXJyYXk8SUVsZW1lbnQ+IHtcbiAgICByZXR1cm4gaW5jbHVkZUhpZGRlbiA/IFt0aGlzLnRlbXBsYXRlXSA6IHRoaXMudGVtcGxhdGVFbGVtZW50cztcbiAgfVxuICBwcml2YXRlIGlzQWRkaW5nTmV3UGFuZWxzOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgYWRkaW5nTmV3UGFuZWxzVmFsdWU6IGFueTtcbiAgcHJpdmF0ZSBpc05ld1BhbmVsc1ZhbHVlQ2hhbmdlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBwcmVwYXJlVmFsdWVGb3JQYW5lbENyZWF0aW5nKCkge1xuICAgIHRoaXMuYWRkaW5nTmV3UGFuZWxzVmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIHRoaXMuaXNBZGRpbmdOZXdQYW5lbHMgPSB0cnVlO1xuICAgIHRoaXMuaXNOZXdQYW5lbHNWYWx1ZUNoYW5nZWQgPSBmYWxzZTtcbiAgfVxuICBwcml2YXRlIHNldFZhbHVlQWZ0ZXJQYW5lbHNDcmVhdGluZygpIHtcbiAgICB0aGlzLmlzQWRkaW5nTmV3UGFuZWxzID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuaXNOZXdQYW5lbHNWYWx1ZUNoYW5nZWQpIHtcbiAgICAgIHRoaXMuaXNWYWx1ZUNoYW5naW5nSW50ZXJuYWxseSA9IHRydWU7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5hZGRpbmdOZXdQYW5lbHNWYWx1ZTtcbiAgICAgIHRoaXMuaXNWYWx1ZUNoYW5naW5nSW50ZXJuYWxseSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0VmFsdWVDb3JlKCkge1xuICAgIHJldHVybiB0aGlzLmlzQWRkaW5nTmV3UGFuZWxzXG4gICAgICA/IHRoaXMuYWRkaW5nTmV3UGFuZWxzVmFsdWVcbiAgICAgIDogc3VwZXIuZ2V0VmFsdWVDb3JlKCk7XG4gIH1cbiAgcHJvdGVjdGVkIHNldFZhbHVlQ29yZShuZXdWYWx1ZTogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNBZGRpbmdOZXdQYW5lbHMpIHtcbiAgICAgIHRoaXMuaXNOZXdQYW5lbHNWYWx1ZUNoYW5nZWQgPSB0cnVlO1xuICAgICAgdGhpcy5hZGRpbmdOZXdQYW5lbHNWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdXBlci5zZXRWYWx1ZUNvcmUobmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gZ2V0L3NldCB0aGUgbnVtYmVyIG9mIGR5bmFtaWMgcGFuZWxzLlxuICAgKiBAc2VlIHRlbXBsYXRlXG4gICAqIEBzZWUgbWluUGFuZWxDb3VudFxuICAgKiBAc2VlIG1heFBhbmVsQ291bnRcbiAgICogQHNlZSBhZGRQYW5lbFxuICAgKiBAc2VlIHJlbW92ZVBhbmVsXG4gICAqIEBzZWUgcmVtb3ZlUGFuZWxVSVxuICAgKi9cbiAgcHVibGljIGdldCBwYW5lbENvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaXNMb2FkaW5nRnJvbUpzb24gfHwgdGhpcy5pc0Rlc2lnbk1vZGVcbiAgICAgID8gdGhpcy5sb2FkaW5nUGFuZWxDb3VudFxuICAgICAgOiB0aGlzLnBhbmVscy5sZW5ndGg7XG4gIH1cbiAgcHVibGljIHNldCBwYW5lbENvdW50KHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKHZhbCA8IDApIHJldHVybjtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbiB8fCB0aGlzLmlzRGVzaWduTW9kZSkge1xuICAgICAgdGhpcy5sb2FkaW5nUGFuZWxDb3VudCA9IHZhbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHZhbCA9PSB0aGlzLnBhbmVscy5sZW5ndGggfHwgdGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybjtcbiAgICB0aGlzLnVwZGF0ZUJpbmRpbmdzKFwicGFuZWxDb3VudFwiLCB2YWwpO1xuICAgIHRoaXMucHJlcGFyZVZhbHVlRm9yUGFuZWxDcmVhdGluZygpO1xuICAgIGZvciAobGV0IGkgPSB0aGlzLnBhbmVsQ291bnQ7IGkgPCB2YWw7IGkrKykge1xuICAgICAgdmFyIHBhbmVsID0gdGhpcy5jcmVhdGVOZXdQYW5lbCgpO1xuICAgICAgdGhpcy5wYW5lbHMucHVzaChwYW5lbCk7XG4gICAgICBpZiAodGhpcy5yZW5kZXJNb2RlID09IFwibGlzdFwiICYmIHRoaXMucGFuZWxzU3RhdGUgIT0gXCJkZWZhdWx0XCIpIHtcbiAgICAgICAgaWYgKHRoaXMucGFuZWxzU3RhdGUgPT09IFwiZXhwYW5kXCIpIHtcbiAgICAgICAgICBwYW5lbC5leHBhbmQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoISFwYW5lbC50aXRsZSkge1xuICAgICAgICAgICAgcGFuZWwuY29sbGFwc2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHZhbCA8IHRoaXMucGFuZWxDb3VudCkgdGhpcy5wYW5lbHMuc3BsaWNlKHZhbCwgdGhpcy5wYW5lbENvdW50IC0gdmFsKTtcbiAgICB0aGlzLnNldFZhbHVlQWZ0ZXJQYW5lbHNDcmVhdGluZygpO1xuICAgIHRoaXMuc2V0VmFsdWVCYXNlZE9uUGFuZWxDb3VudCgpO1xuICAgIHRoaXMucmVSdW5Db25kaXRpb24oKTtcbiAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnBhbmVsQ291bnRDaGFuZ2VkQ2FsbGJhY2spO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBhbGxvdyB0aGUgZW5kLXVzZXIgdG8gY29sbGFwc2UvZXhwYW5kIHRoZSBwYW5lbHMuIEl0IHdvcmtzIG9ubHkgaWYgdGhlIHJlbmRlck1vZGUgcHJvcGVydHkgZXF1YWxzIHRvIFwibGlzdFwiIGFuZCB0ZW1wbGF0ZVRpdGxlIHByb3BlcnR5IGlzIG5vdCBlbXB0eS4gVGhlIGZvbGxvd2luZyB2YWx1ZXMgYXJlIGF2YWlsYWJsZTpcbiAgICogPGJyLz4gZGVmYXVsdCAtIHRoZSBkZWZhdWx0IHZhbHVlLiBVc2VyIGNhbid0IGNvbGxhcHNlL2V4cGFuZCBwYW5lbHNcbiAgICogPGJyLz4gZXhwYW5kZWQgLSBVc2VyIGNhbiBjb2xsYXBzZS9leHBhbmQgcGFuZWxzIGFuZCBhbGwgcGFuZWxzIGFyZSBleHBhbmRlZCBieSBkZWZhdWx0XG4gICAqIDxici8+IGNvbGxhcHNlZCAtIFVzZXIgY2FuIGNvbGxhcHNlL2V4cGFuZCBwYW5lbHMgYW5kIGFsbCBwYW5lbHMgYXJlIGNvbGxhcHNlZCBieSBkZWZhdWx0XG4gICAqIDxici8+IGZpcnN0RXhwYW5kZWQgLSBVc2VyIGNhbiBjb2xsYXBzZS9leHBhbmQgcGFuZWxzLiBUaGUgZmlyc3QgcGFuZWwgaXMgZXhwYW5kZWQgYW5kIG90aGVycyBhcmUgY29sbGFwc2VkXG4gICAqIEBzZWUgcmVuZGVyTW9kZVxuICAgKiBAc2VlIHRlbXBsYXRlVGl0bGVcbiAgICovXG4gIHB1YmxpYyBnZXQgcGFuZWxzU3RhdGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFuZWxzU3RhdGVcIik7XG4gIH1cbiAgcHVibGljIHNldCBwYW5lbHNTdGF0ZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInBhbmVsc1N0YXRlXCIsIHZhbCk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRUZW1wbGF0ZVBhbmVsU3VydmV5SW1wbCgpIHtcbiAgICB0aGlzLnRlbXBsYXRlLnNldFN1cnZleUltcGwoXG4gICAgICB0aGlzLmlzRGVzaWduTW9kZVxuICAgICAgICA/IHRoaXMuc3VydmV5SW1wbFxuICAgICAgICA6IG5ldyBRdWVzdGlvblBhbmVsRHluYW1pY1RlbXBsYXRlU3VydmV5SW1wbCh0aGlzKVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRQYW5lbHNTdXJ2ZXlJbXBsKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwYW5lbCA9IHRoaXMucGFuZWxzW2ldO1xuICAgICAgaWYgKHBhbmVsID09IHRoaXMudGVtcGxhdGUpIGNvbnRpbnVlO1xuICAgICAgcGFuZWwuc2V0U3VydmV5SW1wbCg8UXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtPnBhbmVsLmRhdGEpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHNldFBhbmVsc1N0YXRlKCkge1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSB8fCB0aGlzLnJlbmRlck1vZGUgIT0gXCJsaXN0XCIgfHwgIXRoaXMudGVtcGxhdGVUaXRsZSlcbiAgICAgIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc3RhdGUgPSB0aGlzLnBhbmVsc1N0YXRlO1xuICAgICAgaWYgKHN0YXRlID09PSBcImZpcnN0RXhwYW5kZWRcIikge1xuICAgICAgICBzdGF0ZSA9IGkgPT09IDAgPyBcImV4cGFuZGVkXCIgOiBcImNvbGxhcHNlZFwiO1xuICAgICAgfVxuICAgICAgdGhpcy5wYW5lbHNbaV0uc3RhdGUgPSBzdGF0ZTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBzZXRWYWx1ZUJhc2VkT25QYW5lbENvdW50KCkge1xuICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgaWYgKCF2YWx1ZSB8fCAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHZhbHVlID0gW107XG4gICAgaWYgKHZhbHVlLmxlbmd0aCA9PSB0aGlzLnBhbmVsQ291bnQpIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gdmFsdWUubGVuZ3RoOyBpIDwgdGhpcy5wYW5lbENvdW50OyBpKyspIHZhbHVlLnB1c2goe30pO1xuICAgIGlmICh2YWx1ZS5sZW5ndGggPiB0aGlzLnBhbmVsQ291bnQpIHtcbiAgICAgIHZhbHVlLnNwbGljZSh0aGlzLnBhbmVsQ291bnQsIHZhbHVlLmxlbmd0aCAtIHRoaXMucGFuZWxDb3VudCk7XG4gICAgfVxuICAgIHRoaXMuaXNWYWx1ZUNoYW5naW5nSW50ZXJuYWxseSA9IHRydWU7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuaXNWYWx1ZUNoYW5naW5nSW50ZXJuYWxseSA9IGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSBwYW5lbCBjb3VudC4gQSB1c2VyIGNvdWxkIG5vdCBkZWxldGUgYSBwYW5lbCBpZiB0aGUgcGFuZWxDb3VudCBlcXVhbHMgdG8gbWluUGFuZWxDb3VudFxuICAgKiBAc2VlIHBhbmVsQ291bnRcbiAgICogQHNlZSBtYXhQYW5lbENvdW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IG1pblBhbmVsQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWluUGFuZWxDb3VudFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1pblBhbmVsQ291bnQodmFsOiBudW1iZXIpIHtcbiAgICBpZiAodmFsIDwgMCkgdmFsID0gMDtcbiAgICBpZiAodmFsID09IHRoaXMubWluUGFuZWxDb3VudCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1pblBhbmVsQ291bnRcIiwgdmFsKTtcbiAgICBpZiAodmFsID4gdGhpcy5tYXhQYW5lbENvdW50KSB0aGlzLm1heFBhbmVsQ291bnQgPSB2YWw7XG4gICAgaWYgKHRoaXMucGFuZWxDb3VudCA8IHZhbCkgdGhpcy5wYW5lbENvdW50ID0gdmFsO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBwYW5lbCBjb3VudC4gQSB1c2VyIGNvdWxkIG5vdCBhZGQgYSBwYW5lbCBpZiB0aGUgcGFuZWxDb3VudCBlcXVhbHMgdG8gbWF4UGFuZWxDb3VudFxuICAgKiBAc2VlIHBhbmVsQ291bnRcbiAgICogQHNlZSBtaW5QYW5lbENvdW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IG1heFBhbmVsQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4UGFuZWxDb3VudFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1heFBhbmVsQ291bnQodmFsOiBudW1iZXIpIHtcbiAgICBpZiAodmFsIDw9IDApIHJldHVybjtcbiAgICBpZiAodmFsID4gc2V0dGluZ3MucGFuZWxNYXhpbXVtUGFuZWxDb3VudClcbiAgICAgIHZhbCA9IHNldHRpbmdzLnBhbmVsTWF4aW11bVBhbmVsQ291bnQ7XG4gICAgaWYgKHZhbCA9PSB0aGlzLm1heFBhbmVsQ291bnQpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtYXhQYW5lbENvdW50XCIsIHZhbCk7XG4gICAgaWYgKHZhbCA8IHRoaXMubWluUGFuZWxDb3VudCkgdGhpcy5taW5QYW5lbENvdW50ID0gdmFsO1xuICAgIGlmICh0aGlzLnBhbmVsQ291bnQgPiB2YWwpIHRoaXMucGFuZWxDb3VudCA9IHZhbDtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gZmFsc2UgdG8gaGlkZSB0aGUgJ0FkZCBOZXcnIGJ1dHRvblxuICAgKiBAc2VlIGFsbG93UmVtb3ZlUGFuZWxcbiAgICovXG4gIHB1YmxpYyBnZXQgYWxsb3dBZGRQYW5lbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dBZGRQYW5lbFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGFsbG93QWRkUGFuZWwodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dBZGRQYW5lbFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBmYWxzZSB0byBoaWRlIHRoZSAnUmVtb3ZlJyBidXR0b25cbiAgICogQHNlZSBhbGxvd0FkZFBhbmVsXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFsbG93UmVtb3ZlUGFuZWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImFsbG93UmVtb3ZlUGFuZWxcIik7XG4gIH1cbiAgcHVibGljIHNldCBhbGxvd1JlbW92ZVBhbmVsKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImFsbG93UmVtb3ZlUGFuZWxcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgZGlmZmVyZW50IGZyb20gXCJkZWZhdWx0XCIgdG8gc2V0IHRoZSBzcGVjaWZpYyBxdWVzdGlvbiB0aXRsZSBsb2NhdGlvbiBmb3IgdGhlIHRlbXBsYXRlIHF1ZXN0aW9ucy5cbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5xdWVzdGlvblRpdGxlTG9jYXRpb25cbiAgICogQHNlZSBQYW5lbE1vZGVsQmFzZS5xdWVzdGlvblRpdGxlTG9jYXRpb25cbiAgICovXG4gIHB1YmxpYyBnZXQgdGVtcGxhdGVUaXRsZUxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInRlbXBsYXRlVGl0bGVMb2NhdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRlbXBsYXRlVGl0bGVMb2NhdGlvbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidGVtcGxhdGVUaXRsZUxvY2F0aW9uXCIsIHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBzaG93L2hpZGUgdGhlIG51bWJlcnMgaW4gdGl0bGVzIGluIHF1ZXN0aW9ucyBpbnNpZGUgYSBkeW5hbWljIHBhbmVsLlxuICAgKiBCeSBkZWZhdWx0IHRoZSB2YWx1ZSBpcyBcIm9mZlwiLiBZb3UgbWF5IHNldCBpdCB0byBcIm9uUGFuZWxcIiBhbmQgdGhlIGZpcnN0IHF1ZXN0aW9uIGluc2lkZSBhIGR5bmFtaWMgcGFuZWwgd2lsbCBzdGFydCB3aXRoIDEgb3IgXCJvblN1cnZleVwiIHRvIGluY2x1ZGUgbmVzdGVkIHF1ZXN0aW9ucyBpbiBkeW1hbWljIHBhbmVscyBpbnRvIGdsb2JhbCBzdXJ2ZXkgcXVlc3Rpb24gbnVtYmVyaW5nLlxuICAgKi9cbiAgcHVibGljIGdldCBzaG93UXVlc3Rpb25OdW1iZXJzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dRdWVzdGlvbk51bWJlcnNcIik7XG4gIH1cbiAgcHVibGljIHNldCBzaG93UXVlc3Rpb25OdW1iZXJzKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1F1ZXN0aW9uTnVtYmVyc1wiLCB2YWwpO1xuICAgIGlmICghdGhpcy5pc0xvYWRpbmdGcm9tSnNvbiAmJiB0aGlzLnN1cnZleSkge1xuICAgICAgdGhpcy5zdXJ2ZXkucXVlc3Rpb25WaXNpYmlsaXR5Q2hhbmdlZCh0aGlzLCB0aGlzLnZpc2libGUpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gY2hhbmdlIHRoZSBsb2NhdGlvbiBvZiB0aGUgcmVtb3ZlIGJ1dHRvbiByZWxhdGl2ZSB0byB0aGUgcGFuZWwuXG4gICAqIEJ5IGRlZmF1bHQgdGhlIHZhbHVlIGlzIFwiYm90dG9tXCIuIFlvdSBtYXkgc2V0IGl0IHRvIFwicmlnaHRcIiBhbmQgcmVtb3ZlIGJ1dHRvbiB3aWxsIGFwcGVhciB0byB0aGUgcmlnaHQgb2YgdGhlIHBhbmVsLlxuICAgKi9cbiAgcHVibGljIGdldCBwYW5lbFJlbW92ZUJ1dHRvbkxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInBhbmVsUmVtb3ZlQnV0dG9uTG9jYXRpb25cIik7XG4gIH1cbiAgcHVibGljIHNldCBwYW5lbFJlbW92ZUJ1dHRvbkxvY2F0aW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGFuZWxSZW1vdmVCdXR0b25Mb2NhdGlvblwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTaG93cyB0aGUgcmFuZ2UgZnJvbSAxIHRvIHBhbmVsQ291bnQgd2hlbiByZW5kZXJNb2RlIGRvZXNuJ3QgZXF1YWwgdG8gXCJsaXN0XCIuIFNldCB0byBmYWxzZSB0byBoaWRlIHRoaXMgZWxlbWVudC5cbiAgICogQHNlZSBwYW5lbENvdW50XG4gICAqIEBzZWUgcmVuZGVyTW9kZVxuICAgKi9cbiAgcHVibGljIGdldCBzaG93UmFuZ2VJblByb2dyZXNzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93UmFuZ2VJblByb2dyZXNzXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd1JhbmdlSW5Qcm9ncmVzcyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93UmFuZ2VJblByb2dyZXNzXCIsIHZhbCk7XG4gICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5jdXJyZW50SW5kZXhDaGFuZ2VkQ2FsbGJhY2spO1xuICB9XG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBwcm9wZXJ0eSBlcXVhbHMgdG8gXCJsaXN0XCIgYW5kIGFsbCBkeW5hbWljIHBhbmVscyBhcmUgcmVuZGVyZWQgb25lIGJ5IG9uZSBvbiB0aGUgcGFnZS4gWW91IG1heSBjaGFuZ2UgaXQgdG86IFwicHJvZ3Jlc3NUb3BcIiwgXCJwcm9ncmVzc0JvdHRvbVwiIG9yIFwicHJvZ3Jlc3NUb3BCb3R0b21cIiB0byByZW5kZXIgb25seSBvbmUgZHluYW1pYyBwYW5lbCBhdCBvbmNlLiBUaGUgcHJvZ3Jlc3MgYW5kIG5hdmlnYXRpb24gZWxlbWVudHMgY2FuIGJlIHJlbmRyZWQgb24gdG9wLCBib3R0b20gb3IgYm90aC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcmVuZGVyTW9kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJNb2RlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVuZGVyTW9kZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJlbmRlck1vZGVcIiwgdmFsKTtcbiAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnJlbmRlck1vZGVDaGFuZ2VkQ2FsbGJhY2spO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgd2hlbiByZW5kZXJNb2RlIGVxdWFscyB0byBcImxpc3RcIi5cbiAgICogQHNlZSByZW5kZXJNb2RlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzUmVuZGVyTW9kZUxpc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyTW9kZSA9PT0gXCJsaXN0XCI7XG4gIH1cbiAgcHVibGljIHNldFZpc2libGVJbmRleCh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMuaXNWaXNpYmxlKSByZXR1cm4gMDtcbiAgICB2YXIgc3RhcnRJbmRleCA9IHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVycyA9PSBcIm9uU3VydmV5XCIgPyB2YWx1ZSA6IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNvdW50ZXIgPSB0aGlzLnNldFBhbmVsVmlzaWJsZUluZGV4KFxuICAgICAgICB0aGlzLnBhbmVsc1tpXSxcbiAgICAgICAgc3RhcnRJbmRleCxcbiAgICAgICAgdGhpcy5zaG93UXVlc3Rpb25OdW1iZXJzICE9IFwib2ZmXCJcbiAgICAgICk7XG4gICAgICBpZiAodGhpcy5zaG93UXVlc3Rpb25OdW1iZXJzID09IFwib25TdXJ2ZXlcIikge1xuICAgICAgICBzdGFydEluZGV4ICs9IGNvdW50ZXI7XG4gICAgICB9XG4gICAgfVxuICAgIHN1cGVyLnNldFZpc2libGVJbmRleCh0aGlzLnNob3dRdWVzdGlvbk51bWJlcnMgIT0gXCJvblN1cnZleVwiID8gdmFsdWUgOiAtMSk7XG4gICAgcmV0dXJuIHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVycyAhPSBcIm9uU3VydmV5XCIgPyAxIDogc3RhcnRJbmRleCAtIHZhbHVlO1xuICB9XG4gIHByaXZhdGUgc2V0UGFuZWxWaXNpYmxlSW5kZXgoXG4gICAgcGFuZWw6IFBhbmVsTW9kZWwsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBzaG93SW5kZXg6IGJvb2xlYW5cbiAgKTogbnVtYmVyIHtcbiAgICBpZiAoIXNob3dJbmRleCkge1xuICAgICAgcGFuZWwuc2V0VmlzaWJsZUluZGV4KC0xKTtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICByZXR1cm4gcGFuZWwuc2V0VmlzaWJsZUluZGV4KGluZGV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgd2hlbiBhbiBlbmQgdXNlciBtYXkgYWRkIGEgbmV3IHBhbmVsLiBUaGUgcXVlc3Rpb24gaXMgbm90IHJlYWQgb25seSBhbmQgcGFuZWxDb3VudCBsZXNzIHRoYW4gbWF4UGFuZWxDb3VudFxuICAgKiBAc2VlIGlzUmVhZE9ubHlcbiAgICogQHNlZSBwYW5lbENvdW50XG4gICAqIEBzZWUgbWF4UGFuZWxDb3VudFxuICAgKi9cbiAgcHVibGljIGdldCBjYW5BZGRQYW5lbCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuaXNEZXNpZ25Nb2RlKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuYWxsb3dBZGRQYW5lbCAmJlxuICAgICAgIXRoaXMuaXNSZWFkT25seSAmJlxuICAgICAgdGhpcy5wYW5lbENvdW50IDwgdGhpcy5tYXhQYW5lbENvdW50XG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIHdoZW4gYW4gZW5kIHVzZXIgbWF5IHJlbW92ZSBhIHBhbmVsLiBUaGUgcXVlc3Rpb24gaXMgbm90IHJlYWQgb25seSBhbmQgcGFuZWxDb3VudCBpcyBtb3JlIHRoYW4gbWluUGFuZWxDb3VudFxuICAgKiBAc2VlIGlzUmVhZE9ubHlcbiAgICogQHNlZSBwYW5lbENvdW50XG4gICAqIEBzZWUgbWluUGFuZWxDb3VudFxuICAgKi9cbiAgcHVibGljIGdldCBjYW5SZW1vdmVQYW5lbCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuaXNEZXNpZ25Nb2RlKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuYWxsb3dSZW1vdmVQYW5lbCAmJlxuICAgICAgIXRoaXMuaXNSZWFkT25seSAmJlxuICAgICAgdGhpcy5wYW5lbENvdW50ID4gdGhpcy5taW5QYW5lbENvdW50XG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcmVidWlsZFBhbmVscygpIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuO1xuICAgIHRoaXMucHJlcGFyZVZhbHVlRm9yUGFuZWxDcmVhdGluZygpO1xuICAgIHZhciBwYW5lbHMgPSBbXTtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHtcbiAgICAgIG5ldyBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0odGhpcywgdGhpcy50ZW1wbGF0ZSk7XG4gICAgICBwYW5lbHMucHVzaCh0aGlzLnRlbXBsYXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVsQ291bnQ7IGkrKykge1xuICAgICAgICBwYW5lbHMucHVzaCh0aGlzLmNyZWF0ZU5ld1BhbmVsKCkpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnBhbmVscy5zcGxpY2UoMCwgdGhpcy5wYW5lbHMubGVuZ3RoLCAuLi5wYW5lbHMpO1xuICAgIHRoaXMuc2V0VmFsdWVBZnRlclBhbmVsc0NyZWF0aW5nKCk7XG4gICAgdGhpcy5zZXRQYW5lbHNTdGF0ZSgpO1xuICAgIHRoaXMucmVSdW5Db25kaXRpb24oKTtcbiAgICB0aGlzLmZpcmVDYWxsYmFjayh0aGlzLnBhbmVsQ291bnRDaGFuZ2VkQ2FsbGJhY2spO1xuICB9XG4gIC8qKlxuICAgKiBJZiBpdCBpcyBub3QgZW1wdHksIHRoZW4gdGhpcyB2YWx1ZSBpcyBzZXQgdG8gZXZlcnkgbmV3IHBhbmVsLCBpbmNsdWRpbmcgcGFuZWxzIGNyZWF0ZWQgaW5pdGlhbGx5LCB1bmxlc3MgdGhlIGRlZmF1bHRWYWx1ZSBpcyBub3QgZW1wdHlcbiAgICogQHNlZSBkZWZhdWx0VmFsdWVcbiAgICogQHNlZSBkZWZhdWx0VmFsdWVGcm9tTGFzdFJvd1xuICAgKi9cbiAgcHVibGljIGdldCBkZWZhdWx0UGFuZWxWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJkZWZhdWx0UGFuZWxWYWx1ZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRlZmF1bHRQYW5lbFZhbHVlKHZhbDogYW55KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZGVmYXVsdFBhbmVsVmFsdWVcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogU2V0IGl0IHRvIHRydWUgdG8gY29weSB0aGUgdmFsdWUgaW50byBuZXcgYWRkZWQgcGFuZWwgZnJvbSB0aGUgbGFzdCBwYW5lbC4gSWYgZGVmYXVsdFBhbmVsVmFsdWUgaXMgc2V0IGFuZCB0aGlzIHByb3BlcnR5IGVxdWFscyB0byB0cnVlLFxuICAgKiB0aGVuIHRoZSB2YWx1ZSBmb3IgbmV3IGFkZGVkIHBhbmVsIGlzIG1lcmdpbmcuXG4gICAqIEBzZWUgZGVmYXVsdFZhbHVlXG4gICAqIEBzZWUgZGVmYXVsdFBhbmVsVmFsdWVcbiAgICovXG4gIHB1YmxpYyBnZXQgZGVmYXVsdFZhbHVlRnJvbUxhc3RQYW5lbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZGVmYXVsdFZhbHVlRnJvbUxhc3RQYW5lbFwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBkZWZhdWx0VmFsdWVGcm9tTGFzdFBhbmVsKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImRlZmF1bHRWYWx1ZUZyb21MYXN0UGFuZWxcIiwgdmFsKTtcbiAgfVxuICBwcm90ZWN0ZWQgaXNEZWZhdWx0VmFsdWVFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgc3VwZXIuaXNEZWZhdWx0VmFsdWVFbXB0eSgpICYmIHRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuZGVmYXVsdFBhbmVsVmFsdWUpXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0RGVmYXVsdFZhbHVlKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuZGVmYXVsdFBhbmVsVmFsdWUpIHx8XG4gICAgICAhdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy5kZWZhdWx0VmFsdWUpXG4gICAgKSB7XG4gICAgICBzdXBlci5zZXREZWZhdWx0VmFsdWUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzRW1wdHkoKSB8fCB0aGlzLnBhbmVsQ291bnQgPT0gMCkgcmV0dXJuO1xuICAgIHZhciBuZXdWYWx1ZSA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbENvdW50OyBpKyspIHtcbiAgICAgIG5ld1ZhbHVlLnB1c2godGhpcy5kZWZhdWx0UGFuZWxWYWx1ZSk7XG4gICAgfVxuICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZTtcbiAgfVxuICBwdWJsaWMgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICBpZiAoIXZhbCB8fCAhQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gdHJ1ZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCF0aGlzLmlzUm93RW1wdHkodmFsW2ldKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0UHJvZ3Jlc3NJbmZvKCk6IElQcm9ncmVzc0luZm8ge1xuICAgIHJldHVybiBTdXJ2ZXlFbGVtZW50LmdldFByb2dyZXNzSW5mb0J5RWxlbWVudHMoXG4gICAgICB0aGlzLnBhbmVscyxcbiAgICAgIHRoaXMuaXNSZXF1aXJlZFxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBpc1Jvd0VtcHR5KHZhbDogYW55KSB7XG4gICAgZm9yICh2YXIgcHJvcCBpbiB2YWwpIHtcbiAgICAgIGlmICh2YWwuaGFzT3duUHJvcGVydHkocHJvcCkpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IGR5bmFtaWMgcGFuZWwgYmFzZWQgb24gdGhlIHRlbXBsYXRlIFBhbmVsLiBJdCBjaGVja3MgaWYgY2FuQWRkUGFuZWwgcmV0dXJucyB0cnVlIGFuZCB0aGVuIGNhbGxzIGFkZFBhbmVsIG1ldGhvZC5cbiAgICogQHNlZSB0ZW1wbGF0ZVxuICAgKiBAc2VlIHBhbmVsQ291bnRcbiAgICogQHNlZSBwYW5lbHNcbiAgICogQHNlZSBjYW5BZGRQYW5lbFxuICAgKi9cbiAgcHVibGljIGFkZFBhbmVsVUkoKTogUGFuZWxNb2RlbCB7XG4gICAgaWYgKCF0aGlzLmNhbkFkZFBhbmVsKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBuZXdQYW5lbCA9IHRoaXMuYWRkUGFuZWwoKTtcbiAgICBpZiAodGhpcy5yZW5kZXJNb2RlID09PSBcImxpc3RcIiAmJiB0aGlzLnBhbmVsc1N0YXRlICE9PSBcImRlZmF1bHRcIikge1xuICAgICAgbmV3UGFuZWwuZXhwYW5kKCk7XG4gICAgfVxuICAgIHJldHVybiBuZXdQYW5lbDtcbiAgfVxuICAvKipcbiAgICogQWRkIGEgbmV3IGR5bmFtaWMgcGFuZWwgYmFzZWQgb24gdGhlIHRlbXBsYXRlIFBhbmVsLlxuICAgKiBAc2VlIHRlbXBsYXRlXG4gICAqIEBzZWUgcGFuZWxDb3VudFxuICAgKiBAc2VlIHBhbmVsc1xuICAgKi9cbiAgcHVibGljIGFkZFBhbmVsKCk6IFBhbmVsTW9kZWwge1xuICAgIHRoaXMucGFuZWxDb3VudCsrO1xuICAgIGlmICghdGhpcy5pc1JlbmRlck1vZGVMaXN0KSB7XG4gICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IHRoaXMucGFuZWxDb3VudCAtIDE7XG4gICAgfVxuICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgdmFyIGhhc01vZGlmaWVkID0gZmFsc2U7XG4gICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLmRlZmF1bHRQYW5lbFZhbHVlKSkge1xuICAgICAgaWYgKFxuICAgICAgICAhIW5ld1ZhbHVlICYmXG4gICAgICAgIEFycmF5LmlzQXJyYXkobmV3VmFsdWUpICYmXG4gICAgICAgIG5ld1ZhbHVlLmxlbmd0aCA9PSB0aGlzLnBhbmVsQ291bnRcbiAgICAgICkge1xuICAgICAgICBoYXNNb2RpZmllZCA9IHRydWU7XG4gICAgICAgIHRoaXMuY29weVZhbHVlKG5ld1ZhbHVlW25ld1ZhbHVlLmxlbmd0aCAtIDFdLCB0aGlzLmRlZmF1bHRQYW5lbFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy5kZWZhdWx0VmFsdWVGcm9tTGFzdFBhbmVsICYmXG4gICAgICAhIW5ld1ZhbHVlICYmXG4gICAgICBBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSAmJlxuICAgICAgbmV3VmFsdWUubGVuZ3RoID4gMSAmJlxuICAgICAgbmV3VmFsdWUubGVuZ3RoID09IHRoaXMucGFuZWxDb3VudFxuICAgICkge1xuICAgICAgaGFzTW9kaWZpZWQgPSB0cnVlO1xuICAgICAgdGhpcy5jb3B5VmFsdWUoXG4gICAgICAgIG5ld1ZhbHVlW25ld1ZhbHVlLmxlbmd0aCAtIDFdLFxuICAgICAgICBuZXdWYWx1ZVtuZXdWYWx1ZS5sZW5ndGggLSAyXVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGhhc01vZGlmaWVkKSB7XG4gICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnN1cnZleSkgdGhpcy5zdXJ2ZXkuZHluYW1pY1BhbmVsQWRkZWQodGhpcyk7XG4gICAgcmV0dXJuIHRoaXMucGFuZWxzW3RoaXMucGFuZWxDb3VudCAtIDFdO1xuICB9XG4gIHByaXZhdGUgY29weVZhbHVlKHNyYzogYW55LCBkZXN0OiBhbnkpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gZGVzdCkge1xuICAgICAgc3JjW2tleV0gPSBkZXN0W2tleV07XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDYWxsIHJlbW92ZVBhbmVsIGZ1bmN0aW9uLiBEbyBub3RoaW5nIGlzIGNhblJlbW92ZVBhbmVsIHJldHVybnMgZmFsc2UuIElmIGNvbmZpcm1EZWxldGUgc2V0IHRvIHRydWUsIGl0IHNob3dzIHRoZSBjb25maXJtYXRpb24gZGlhbG9nIGZpcnN0LlxuICAgKiBAcGFyYW0gdmFsdWUgYSBwYW5lbCBvciBwYW5lbCBpbmRleFxuICAgKiBAc2VlIHJlbW92ZVBhbmVsXG4gICAqIEBzZWUgY29uZmlybURlbGV0ZVxuICAgKiBAc2VlIGNvbmZpcm1EZWxldGVUZXh0XG4gICAqIEBzZWUgY2FuUmVtb3ZlUGFuZWxcbiAgICpcbiAgICovXG4gIHB1YmxpYyByZW1vdmVQYW5lbFVJKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuY2FuUmVtb3ZlUGFuZWwpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuY29uZmlybURlbGV0ZSB8fCBjb25maXJtQWN0aW9uKHRoaXMuY29uZmlybURlbGV0ZVRleHQpKSB7XG4gICAgICB0aGlzLnJlbW92ZVBhbmVsKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEdvZXMgdG8gdGhlIG5leHQgcGFuZWwgaW4gdGhlIFBhbmVsRHluYW1pY1xuICAgKlxuICAgKi9cbiAgcHVibGljIGdvVG9OZXh0UGFuZWwoKSB7XG4gICAgaWYgKHRoaXMucmVuZGVyTW9kZSAhPT0gXCJsaXN0XCIgJiYgdGhpcy5jdXJyZW50UGFuZWwuaGFzRXJyb3JzKCkpIHJldHVybjtcbiAgICB0aGlzLmN1cnJlbnRJbmRleCsrO1xuICB9XG4gIC8qKlxuICAgKiBHb2VzIHRvIHRoZSBwcmV2aW91cyBwYW5lbCBpbiB0aGUgUGFuZWxEeW5hbWljXG4gICAqXG4gICAqL1xuICBwdWJsaWMgZ29Ub1ByZXZQYW5lbCgpIHtcbiAgICB0aGlzLmN1cnJlbnRJbmRleC0tO1xuICB9XG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgZHluYW1pYyBwYW5lbCBmcm9tIHRoZSBwYW5lbHMgYXJyYXkuXG4gICAqIEBwYXJhbSB2YWx1ZSBhIHBhbmVsIG9yIHBhbmVsIGluZGV4XG4gICAqIEBzZWUgcGFuZWxzXG4gICAqIEBzZWUgdGVtcGxhdGVcbiAgICovXG4gIHB1YmxpYyByZW1vdmVQYW5lbCh2YWx1ZTogYW55KSB7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5nZXRQYW5lbEluZGV4KHZhbHVlKTtcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMucGFuZWxDb3VudCkgcmV0dXJuO1xuICAgIHZhciBwYW5lbCA9IHRoaXMucGFuZWxzW2luZGV4XTtcbiAgICB0aGlzLnBhbmVscy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHRoaXMudXBkYXRlQmluZGluZ3MoXCJwYW5lbENvdW50XCIsIHRoaXMucGFuZWxDb3VudCk7XG4gICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICBpZiAoIXZhbHVlIHx8ICFBcnJheS5pc0FycmF5KHZhbHVlKSB8fCBpbmRleCA+PSB2YWx1ZS5sZW5ndGgpIHJldHVybjtcbiAgICB0aGlzLmlzVmFsdWVDaGFuZ2luZ0ludGVybmFsbHkgPSB0cnVlO1xuICAgIHZhbHVlLnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuZmlyZUNhbGxiYWNrKHRoaXMucGFuZWxDb3VudENoYW5nZWRDYWxsYmFjayk7XG4gICAgaWYgKHRoaXMuc3VydmV5KSB0aGlzLnN1cnZleS5keW5hbWljUGFuZWxSZW1vdmVkKHRoaXMsIGluZGV4LCBwYW5lbCk7XG4gICAgdGhpcy5pc1ZhbHVlQ2hhbmdpbmdJbnRlcm5hbGx5ID0gZmFsc2U7XG4gIH1cbiAgcHJpdmF0ZSBnZXRQYW5lbEluZGV4KHZhbDogYW55KTogbnVtYmVyIHtcbiAgICBpZiAoSGVscGVycy5pc051bWJlcih2YWwpKSByZXR1cm4gdmFsO1xuICAgIHZhciBpdGVtcyA9IHRoaXMuaXRlbXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMucGFuZWxzW2ldID09PSB2YWwgfHwgaXRlbXNbaV0gPT09IHZhbCkgcmV0dXJuIGk7XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuICBwdWJsaWMgbG9jU3Ryc0NoYW5nZWQoKSB7XG4gICAgc3VwZXIubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICB2YXIgcGFuZWxzID0gdGhpcy5wYW5lbHM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHBhbmVsc1tpXS5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgY2xlYXJJbmNvcnJlY3RWYWx1ZXMoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5jbGVhckluY29ycmVjdFZhbHVlc0luUGFuZWwoaSk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBjbGVhckVycm9ycygpIHtcbiAgICBzdXBlci5jbGVhckVycm9ycygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMucGFuZWxzW2ldLmNsZWFyRXJyb3JzKCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXRRdWVzdGlvbkZyb21BcnJheShuYW1lOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBJUXVlc3Rpb24ge1xuICAgIGlmIChpbmRleCA+PSB0aGlzLnBhbmVsQ291bnQpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLnBhbmVsc1tpbmRleF0uZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XG4gIH1cbiAgcHJpdmF0ZSBjbGVhckluY29ycmVjdFZhbHVlc0luUGFuZWwoaW5kZXg6IG51bWJlcikge1xuICAgIHZhciBwYW5lbCA9IHRoaXMucGFuZWxzW2luZGV4XTtcbiAgICBwYW5lbC5jbGVhckluY29ycmVjdFZhbHVlcygpO1xuICAgIHZhciB2YWwgPSB0aGlzLnZhbHVlO1xuICAgIHZhciB2YWx1ZXMgPSAhIXZhbCAmJiBpbmRleCA8IHZhbC5sZW5ndGggPyB2YWxbaW5kZXhdIDogbnVsbDtcbiAgICBpZiAoIXZhbHVlcykgcmV0dXJuO1xuICAgIHZhciBpc0NoYW5nZWQgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWVzKSB7XG4gICAgICBpZiAodGhpcy5nZXRTaGFyZWRRdWVzdGlvbkZyb21BcnJheShrZXksIGluZGV4KSkgY29udGludWU7XG4gICAgICB2YXIgcSA9IHBhbmVsLmdldFF1ZXN0aW9uQnlOYW1lKGtleSk7XG4gICAgICBpZiAoISFxKSBjb250aW51ZTtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc2NvcnJlY3RWYWx1ZVdpdGhQb3N0UHJlZml4KHBhbmVsLCBrZXksIHNldHRpbmdzLmNvbW1lbnRQcmVmaXgpIHx8XG4gICAgICAgIHRoaXMuaXNjb3JyZWN0VmFsdWVXaXRoUG9zdFByZWZpeChcbiAgICAgICAgICBwYW5lbCxcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgc2V0dGluZ3MubWF0cml4VG90YWxWYWx1ZVBvc3RGaXhcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIGRlbGV0ZSB2YWx1ZXNba2V5XTtcbiAgICAgIGlzQ2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICAgIGlmIChpc0NoYW5nZWQpIHtcbiAgICAgIHZhbFtpbmRleF0gPSB2YWx1ZXM7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGlzY29ycmVjdFZhbHVlV2l0aFBvc3RQcmVmaXgoXG4gICAgcGFuZWw6IFBhbmVsTW9kZWwsXG4gICAga2V5OiBzdHJpbmcsXG4gICAgcG9zdFByZWZpeDogc3RyaW5nXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmIChrZXkuaW5kZXhPZihwb3N0UHJlZml4KSAhPT0ga2V5Lmxlbmd0aCAtIHBvc3RQcmVmaXgubGVuZ3RoKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAhIXBhbmVsLmdldFF1ZXN0aW9uQnlOYW1lKGtleS5zdWJzdHIoMCwga2V5LmluZGV4T2YocG9zdFByZWZpeCkpKTtcbiAgfVxuICBwdWJsaWMgZ2V0U2hhcmVkUXVlc3Rpb25Gcm9tQXJyYXkoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHBhbmVsSW5kZXg6IG51bWJlclxuICApOiBRdWVzdGlvbiB7XG4gICAgcmV0dXJuICEhdGhpcy5zdXJ2ZXkgJiYgISF0aGlzLnZhbHVlTmFtZVxuICAgICAgPyA8UXVlc3Rpb24+KFxuICAgICAgICAgIHRoaXMuc3VydmV5LmdldFF1ZXN0aW9uQnlWYWx1ZU5hbWVGcm9tQXJyYXkoXG4gICAgICAgICAgICB0aGlzLnZhbHVlTmFtZSxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBwYW5lbEluZGV4XG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICA6IG51bGw7XG4gIH1cbiAgcHVibGljIGFkZENvbmRpdGlvbk9iamVjdHNCeUNvbnRleHQoXG4gICAgb2JqZWN0czogQXJyYXk8SUNvbmRpdGlvbk9iamVjdD4sXG4gICAgY29udGV4dDogYW55XG4gICkge1xuICAgIHZhciBoYXNDb250ZXh0ID0gISFjb250ZXh0XG4gICAgICA/IHRoaXMudGVtcGxhdGUucXVlc3Rpb25zLmluZGV4T2YoY29udGV4dCkgPiAtMVxuICAgICAgOiBmYWxzZTtcbiAgICB2YXIgcHJlZml4TmFtZSA9IHRoaXMuZ2V0VmFsdWVOYW1lKCkgKyBcIlswXS5cIjtcbiAgICB2YXIgcHJlZml4VGV4dCA9IHRoaXMucHJvY2Vzc2VkVGl0bGUgKyBcIlswXS5cIjtcbiAgICB2YXIgcGFuZWxPYmpzID0gbmV3IEFycmF5PElDb25kaXRpb25PYmplY3Q+KCk7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMudGVtcGxhdGUucXVlc3Rpb25zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBxdWVzdGlvbnNbaV0uYWRkQ29uZGl0aW9uT2JqZWN0c0J5Q29udGV4dChwYW5lbE9ianMsIGNvbnRleHQpO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhbmVsT2Jqcy5sZW5ndGg7IGkrKykge1xuICAgICAgb2JqZWN0cy5wdXNoKHtcbiAgICAgICAgbmFtZTogcHJlZml4TmFtZSArIHBhbmVsT2Jqc1tpXS5uYW1lLFxuICAgICAgICB0ZXh0OiBwcmVmaXhUZXh0ICsgcGFuZWxPYmpzW2ldLnRleHQsXG4gICAgICAgIHF1ZXN0aW9uOiBwYW5lbE9ianNbaV0ucXVlc3Rpb24sXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGhhc0NvbnRleHQpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFuZWxPYmpzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChwYW5lbE9ianNbaV0ucXVlc3Rpb24gPT0gY29udGV4dCkgY29udGludWU7XG4gICAgICAgIG9iamVjdHMucHVzaCh7XG4gICAgICAgICAgbmFtZTogXCJwYW5lbC5cIiArIHBhbmVsT2Jqc1tpXS5uYW1lLFxuICAgICAgICAgIHRleHQ6IFwicGFuZWwuXCIgKyBwYW5lbE9ianNbaV0udGV4dCxcbiAgICAgICAgICBxdWVzdGlvbjogcGFuZWxPYmpzW2ldLnF1ZXN0aW9uLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIGdldENvbmRpdGlvbkpzb24ob3BlcmF0b3I6IHN0cmluZyA9IG51bGwsIHBhdGg6IHN0cmluZyA9IG51bGwpOiBhbnkge1xuICAgIGlmICghcGF0aCkgcmV0dXJuIHN1cGVyLmdldENvbmRpdGlvbkpzb24ob3BlcmF0b3IsIHBhdGgpO1xuICAgIHZhciBxdWVzdGlvbk5hbWUgPSBwYXRoO1xuICAgIHZhciBwb3MgPSBwYXRoLmluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChwb3MgPiAtMSkge1xuICAgICAgcXVlc3Rpb25OYW1lID0gcGF0aC5zdWJzdHIoMCwgcG9zKTtcbiAgICAgIHBhdGggPSBwYXRoLnN1YnN0cihwb3MgKyAxKTtcbiAgICB9XG4gICAgdmFyIHF1ZXN0aW9uID0gdGhpcy50ZW1wbGF0ZS5nZXRRdWVzdGlvbkJ5TmFtZShxdWVzdGlvbk5hbWUpO1xuICAgIGlmICghcXVlc3Rpb24pIHJldHVybiBudWxsO1xuICAgIHJldHVybiBxdWVzdGlvbi5nZXRDb25kaXRpb25Kc29uKG9wZXJhdG9yLCBwYXRoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25SZWFkT25seUNoYW5nZWQoKSB7XG4gICAgdmFyIHJlYWRPbmx5ID0gdGhpcy5pc1JlYWRPbmx5O1xuICAgIHRoaXMudGVtcGxhdGUucmVhZE9ubHkgPSByZWFkT25seTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhbmVsc1tpXS5yZWFkT25seSA9IHJlYWRPbmx5O1xuICAgIH1cbiAgICBzdXBlci5vblJlYWRPbmx5Q2hhbmdlZCgpO1xuICB9XG4gIHB1YmxpYyBvblN1cnZleUxvYWQoKSB7XG4gICAgdGhpcy50ZW1wbGF0ZS5yZWFkT25seSA9IHRoaXMuaXNSZWFkT25seTtcbiAgICB0aGlzLnRlbXBsYXRlLm9uU3VydmV5TG9hZCgpO1xuICAgIGlmICh0aGlzLmxvYWRpbmdQYW5lbENvdW50ID4gMCkge1xuICAgICAgdGhpcy5wYW5lbENvdW50ID0gdGhpcy5sb2FkaW5nUGFuZWxDb3VudDtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKSB7XG4gICAgICB0aGlzLnJlYnVpbGRQYW5lbHMoKTtcbiAgICB9XG4gICAgdGhpcy5zZXRQYW5lbHNTdXJ2ZXlJbXBsKCk7XG4gICAgdGhpcy5zZXRQYW5lbHNTdGF0ZSgpO1xuICAgIHRoaXMuYXNzaWduT25Qcm9wZXJ0eUNoYW5nZWRUb1RlbXBsYXRlKCk7XG4gICAgc3VwZXIub25TdXJ2ZXlMb2FkKCk7XG4gIH1cbiAgcHVibGljIG9uRmlyc3RSZW5kZXJpbmcoKSB7XG4gICAgdGhpcy50ZW1wbGF0ZS5vbkZpcnN0UmVuZGVyaW5nKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYW5lbHNbaV0ub25GaXJzdFJlbmRlcmluZygpO1xuICAgIH1cbiAgICBzdXBlci5vbkZpcnN0UmVuZGVyaW5nKCk7XG4gIH1cbiAgcHVibGljIHJ1bkNvbmRpdGlvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIHN1cGVyLnJ1bkNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIHRoaXMucnVuUGFuZWxzQ29uZGl0aW9uKHZhbHVlcywgcHJvcGVydGllcyk7XG4gIH1cbiAgcHJpdmF0ZSByZVJ1bkNvbmRpdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuZGF0YSkgcmV0dXJuO1xuICAgIHRoaXMucnVuQ29uZGl0aW9uKFxuICAgICAgdGhpcy5nZXREYXRhRmlsdGVyZWRWYWx1ZXMoKSxcbiAgICAgIHRoaXMuZ2V0RGF0YUZpbHRlcmVkUHJvcGVydGllcygpXG4gICAgKTtcbiAgfVxuICBwcm90ZWN0ZWQgcnVuUGFuZWxzQ29uZGl0aW9uKFxuICAgIHZhbHVlczogSGFzaFRhYmxlPGFueT4sXG4gICAgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT5cbiAgKSB7XG4gICAgdmFyIGNhY2hlZFZhbHVlczogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgIGNhY2hlZFZhbHVlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodmFsdWVzKSk7XG4gICAgfVxuICAgIGlmICghIXRoaXMucGFyZW50UXVlc3Rpb24gJiYgISF0aGlzLnBhcmVudCkge1xuICAgICAgY2FjaGVkVmFsdWVzW1F1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbS5QYXJlbnRJdGVtVmFyaWFibGVOYW1lLnRvTG93ZXJDYXNlKCldID0gKDxhbnk+dGhpcy5wYXJlbnQpLmdldFZhbHVlKCk7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwYW5lbFZhbHVlcyA9IHRoaXMuZ2V0UGFuZWxJdGVtRGF0YSh0aGlzLnBhbmVsc1tpXS5kYXRhKTtcbiAgICAgIC8vU2hvdWxkIGJlIHVuaXF1ZSBmb3IgZXZlcnkgcGFuZWwgZHVlIGFzeW5jIGV4cHJlc3Npb24gc3VwcG9ydFxuICAgICAgdmFyIG5ld1ZhbHVlcyA9IEhlbHBlcnMuY3JlYXRlQ29weShjYWNoZWRWYWx1ZXMpO1xuICAgICAgbmV3VmFsdWVzW1xuICAgICAgICBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0uSXRlbVZhcmlhYmxlTmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICBdID0gcGFuZWxWYWx1ZXM7XG4gICAgICBuZXdWYWx1ZXNbUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtLkluZGV4VmFyaWFibGVOYW1lLnRvTG93ZXJDYXNlKCldID0gaTtcbiAgICAgIHRoaXMucGFuZWxzW2ldLnJ1bkNvbmRpdGlvbihuZXdWYWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIH1cbiAgfVxuICBvbkFueVZhbHVlQ2hhbmdlZChuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlci5vbkFueVZhbHVlQ2hhbmdlZChuYW1lKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhbmVsc1tpXS5vbkFueVZhbHVlQ2hhbmdlZChuYW1lKTtcbiAgICAgIHRoaXMucGFuZWxzW2ldLm9uQW55VmFsdWVDaGFuZ2VkKFxuICAgICAgICBRdWVzdGlvblBhbmVsRHluYW1pY0l0ZW0uSXRlbVZhcmlhYmxlTmFtZVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBoYXNLZXlzRHVwbGljYXRlZChmaXJlQ2FsbGJhY2s6IGJvb2xlYW4sIHJlYzogYW55ID0gbnVsbCkge1xuICAgIHZhciBrZXlWYWx1ZXM6IEFycmF5PGFueT4gPSBbXTtcbiAgICB2YXIgcmVzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlcyA9XG4gICAgICAgIHRoaXMuaXNWYWx1ZUR1cGxpY2F0ZWQodGhpcy5wYW5lbHNbaV0sIGtleVZhbHVlcywgcmVjLCBmaXJlQ2FsbGJhY2spIHx8XG4gICAgICAgIHJlcztcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIHVwZGF0ZVBhbmVsc0NvbnRhaW5zRXJyb3JzKCkge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuY2hhbmdpbmdWYWx1ZVF1ZXN0aW9uO1xuICAgIHZhciBwYXJlbnQgPSA8UGFuZWw+cXVlc3Rpb24ucGFyZW50O1xuICAgIHdoaWxlICghIXBhcmVudCkge1xuICAgICAgcGFyZW50LnVwZGF0ZUNvbnRhaW5zRXJyb3JzKCk7XG4gICAgICBwYXJlbnQgPSA8UGFuZWw+cGFyZW50LnBhcmVudDtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVDb250YWluc0Vycm9ycygpO1xuICB9XG4gIHB1YmxpYyBoYXNFcnJvcnMoZmlyZUNhbGxiYWNrOiBib29sZWFuID0gdHJ1ZSwgcmVjOiBhbnkgPSBudWxsKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUNoYW5naW5nSW50ZXJuYWxseSkgcmV0dXJuIGZhbHNlO1xuICAgIHZhciByZXMgPSBmYWxzZTtcbiAgICBpZiAoISF0aGlzLmNoYW5naW5nVmFsdWVRdWVzdGlvbikge1xuICAgICAgdmFyIHJlcyA9IHRoaXMuY2hhbmdpbmdWYWx1ZVF1ZXN0aW9uLmhhc0Vycm9ycyhmaXJlQ2FsbGJhY2ssIHJlYyk7XG4gICAgICByZXMgPSB0aGlzLmhhc0tleXNEdXBsaWNhdGVkKGZpcmVDYWxsYmFjaywgcmVjKSB8fCByZXM7XG4gICAgICB0aGlzLnVwZGF0ZVBhbmVsc0NvbnRhaW5zRXJyb3JzKCk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZXJyb3NJblBhbmVscyA9IHRoaXMuaGFzRXJyb3JJblBhbmVscyhmaXJlQ2FsbGJhY2ssIHJlYyk7XG4gICAgICByZXR1cm4gc3VwZXIuaGFzRXJyb3JzKGZpcmVDYWxsYmFjaykgfHwgZXJyb3NJblBhbmVscztcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGdldENvbnRhaW5zRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHZhciByZXMgPSBzdXBlci5nZXRDb250YWluc0Vycm9ycygpO1xuICAgIGlmIChyZXMpIHJldHVybiByZXM7XG4gICAgdmFyIHBhbmVscyA9IHRoaXMucGFuZWxzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocGFuZWxzW2ldLmNvbnRhaW5zRXJyb3JzKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHByb3RlY3RlZCBnZXRJc0Fuc3dlcmVkKCk6IGJvb2xlYW4ge1xuICAgIGlmICghc3VwZXIuZ2V0SXNBbnN3ZXJlZCgpKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHBhbmVscyA9IHRoaXMucGFuZWxzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmlzaWJsZVF1ZXN0aW9ucyA9IDxBcnJheTxhbnk+PltdO1xuICAgICAgcGFuZWxzW2ldLmFkZFF1ZXN0aW9uc1RvTGlzdCh2aXNpYmxlUXVlc3Rpb25zLCB0cnVlKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmlzaWJsZVF1ZXN0aW9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICBpZiAoIXZpc2libGVRdWVzdGlvbnNbal0uaXNBbnN3ZXJlZCkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgY2xlYXJWYWx1ZUlmSW52aXNpYmxlKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnBhbmVsc1tpXS5xdWVzdGlvbnM7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHF1ZXN0aW9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICBxdWVzdGlvbnNbal0uY2xlYXJWYWx1ZUlmSW52aXNpYmxlKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHN1cGVyLmNsZWFyVmFsdWVJZkludmlzaWJsZSgpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRJc1J1bm5pbmdWYWxpZGF0b3JzKCk6IGJvb2xlYW4ge1xuICAgIGlmIChzdXBlci5nZXRJc1J1bm5pbmdWYWxpZGF0b3JzKCkpIHJldHVybiB0cnVlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnBhbmVsc1tpXS5xdWVzdGlvbnM7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHF1ZXN0aW9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICBpZiAocXVlc3Rpb25zW2pdLmlzUnVubmluZ1ZhbGlkYXRvcnMpIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldEFsbEVycm9ycygpOiBBcnJheTxTdXJ2ZXlFcnJvcj4ge1xuICAgIHZhciByZXN1bHQgPSBzdXBlci5nZXRBbGxFcnJvcnMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5wYW5lbHNbaV0ucXVlc3Rpb25zO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBxdWVzdGlvbnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIGVycm9ycyA9IHF1ZXN0aW9uc1tqXS5nZXRBbGxFcnJvcnMoKTtcbiAgICAgICAgaWYgKGVycm9ycyAmJiBlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoZXJyb3JzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHByb3RlY3RlZCBnZXREaXNwbGF5VmFsdWVDb3JlKGtleXNBc1RleHQ6IGJvb2xlYW4sIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIHZhciB2YWx1ZXMgPSB0aGlzLmdldFVuYmluZFZhbHVlKHZhbHVlKTtcbiAgICBpZiAoIXZhbHVlcyB8fCAhQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSByZXR1cm4gdmFsdWVzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYW5lbHMubGVuZ3RoICYmIGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWwgPSB2YWx1ZXNbaV07XG4gICAgICBpZiAoIXZhbCkgY29udGludWU7XG4gICAgICB2YWx1ZXNbaV0gPSB0aGlzLmdldFBhbmVsRGlzcGxheVZhbHVlKGksIHZhbCwga2V5c0FzVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH1cblxuICBwcml2YXRlIGdldFBhbmVsRGlzcGxheVZhbHVlKFxuICAgIHBhbmVsSW5kZXg6IG51bWJlcixcbiAgICB2YWw6IGFueSxcbiAgICBrZXlzQXNUZXh0OiBib29sZWFuXG4gICk6IGFueSB7XG4gICAgaWYgKCF2YWwpIHJldHVybiB2YWw7XG4gICAgdmFyIHBhbmVsID0gdGhpcy5wYW5lbHNbcGFuZWxJbmRleF07XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh2YWwpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICB2YXIgcXVlc3Rpb24gPSBwYW5lbC5nZXRRdWVzdGlvbkJ5VmFsdWVOYW1lKGtleSk7XG4gICAgICBpZiAoIXF1ZXN0aW9uKSB7XG4gICAgICAgIHF1ZXN0aW9uID0gdGhpcy5nZXRTaGFyZWRRdWVzdGlvbkZyb21BcnJheShrZXksIHBhbmVsSW5kZXgpO1xuICAgICAgfVxuICAgICAgaWYgKCEhcXVlc3Rpb24pIHtcbiAgICAgICAgdmFyIHFWYWx1ZSA9IHF1ZXN0aW9uLmdldERpc3BsYXlWYWx1ZShrZXlzQXNUZXh0LCB2YWxba2V5XSk7XG4gICAgICAgIHZhbFtrZXldID0gcVZhbHVlO1xuICAgICAgICBpZiAoa2V5c0FzVGV4dCAmJiAhIXF1ZXN0aW9uLnRpdGxlICYmIHF1ZXN0aW9uLnRpdGxlICE9PSBrZXkpIHtcbiAgICAgICAgICB2YWxbcXVlc3Rpb24udGl0bGVdID0gcVZhbHVlO1xuICAgICAgICAgIGRlbGV0ZSB2YWxba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsO1xuICB9XG4gIHByaXZhdGUgaGFzRXJyb3JJblBhbmVscyhmaXJlQ2FsbGJhY2s6IGJvb2xlYW4sIHJlYzogYW55KTogYm9vbGVhbiB7XG4gICAgdmFyIHJlcyA9IGZhbHNlO1xuICAgIHZhciBwYW5lbHMgPSB0aGlzLnBhbmVscztcbiAgICB2YXIga2V5VmFsdWVzOiBBcnJheTxhbnk+ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuc2V0T25Db21wbGV0ZUFzeW5jSW5QYW5lbChwYW5lbHNbaV0pO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHBubEVycm9yID0gcGFuZWxzW2ldLmhhc0Vycm9ycyhcbiAgICAgICAgZmlyZUNhbGxiYWNrLFxuICAgICAgICAhIXJlYyAmJiByZWMuZm9jdXNlT25GaXJzdEVycm9yLFxuICAgICAgICByZWNcbiAgICAgICk7XG4gICAgICBwbmxFcnJvciA9IHRoaXMuaXNWYWx1ZUR1cGxpY2F0ZWQocGFuZWxzW2ldLCBrZXlWYWx1ZXMsIHJlYykgfHwgcG5sRXJyb3I7XG4gICAgICBpZiAoIXRoaXMuaXNSZW5kZXJNb2RlTGlzdCAmJiBwbmxFcnJvciAmJiAhcmVzKSB7XG4gICAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gaTtcbiAgICAgIH1cbiAgICAgIHJlcyA9IHBubEVycm9yIHx8IHJlcztcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIHNldE9uQ29tcGxldGVBc3luY0luUGFuZWwocGFuZWw6IFBhbmVsTW9kZWwpIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gcGFuZWwucXVlc3Rpb25zO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBxdWVzdGlvbnNbaV0ub25Db21wbGV0ZWRBc3luY1ZhbGlkYXRvcnMgPSAoaGFzRXJyb3JzOiBib29sZWFuKSA9PiB7XG4gICAgICAgIHRoaXMucmFpc2VPbkNvbXBsZXRlZEFzeW5jVmFsaWRhdG9ycygpO1xuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBpc1ZhbHVlRHVwbGljYXRlZChcbiAgICBwYW5lbDogUGFuZWxNb2RlbCxcbiAgICBrZXlWYWx1ZXM6IEFycmF5PGFueT4sXG4gICAgcmVjOiBhbnksXG4gICAgZmlyZUNhbGxiYWNrPzogYm9vbGVhblxuICApOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMua2V5TmFtZSkgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBxdWVzdGlvbiA9IDxRdWVzdGlvbj5wYW5lbC5nZXRRdWVzdGlvbkJ5VmFsdWVOYW1lKHRoaXMua2V5TmFtZSk7XG4gICAgaWYgKCFxdWVzdGlvbiB8fCBxdWVzdGlvbi5pc0VtcHR5KCkpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgdmFsdWUgPSBxdWVzdGlvbi52YWx1ZTtcbiAgICBpZiAoXG4gICAgICAhIXRoaXMuY2hhbmdpbmdWYWx1ZVF1ZXN0aW9uICYmXG4gICAgICBxdWVzdGlvbiAhPSB0aGlzLmNoYW5naW5nVmFsdWVRdWVzdGlvblxuICAgICkge1xuICAgICAgcXVlc3Rpb24uaGFzRXJyb3JzKGZpcmVDYWxsYmFjaywgcmVjKTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh2YWx1ZSA9PSBrZXlWYWx1ZXNbaV0pIHtcbiAgICAgICAgcXVlc3Rpb24uYWRkRXJyb3IoXG4gICAgICAgICAgbmV3IEtleUR1cGxpY2F0aW9uRXJyb3IodGhpcy5rZXlEdXBsaWNhdGlvbkVycm9yLCB0aGlzKVxuICAgICAgICApO1xuICAgICAgICBpZiAoISFyZWMgJiYgIXJlYy5maXJzdEVycm9yUXVlc3Rpb24pIHtcbiAgICAgICAgICByZWMuZmlyc3RFcnJvclF1ZXN0aW9uID0gcXVlc3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGtleVZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJvdGVjdGVkIGNyZWF0ZU5ld1BhbmVsKCk6IFBhbmVsTW9kZWwge1xuICAgIHZhciBwYW5lbCA9IHRoaXMuY3JlYXRlQW5kU2V0dXBOZXdQYW5lbE9iamVjdCgpO1xuICAgIHZhciBqc29uID0gdGhpcy50ZW1wbGF0ZS50b0pTT04oKTtcbiAgICBuZXcgSnNvbk9iamVjdCgpLnRvT2JqZWN0KGpzb24sIHBhbmVsKTtcbiAgICBwYW5lbC5yZW5kZXJXaWR0aCA9IFwiMTAwJVwiO1xuICAgIHBhbmVsLnVwZGF0ZUN1c3RvbVdpZGdldHMoKTtcbiAgICBuZXcgUXVlc3Rpb25QYW5lbER5bmFtaWNJdGVtKHRoaXMsIHBhbmVsKTtcbiAgICBwYW5lbC5vbkZpcnN0UmVuZGVyaW5nKCk7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHBhbmVsLnF1ZXN0aW9ucztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgcXVlc3Rpb25zW2ldLnNldFBhcmVudFF1ZXN0aW9uKHRoaXMpO1xuICAgIH1cbiAgICBwYW5lbC5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIHJldHVybiBwYW5lbDtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlQW5kU2V0dXBOZXdQYW5lbE9iamVjdCgpOiBQYW5lbE1vZGVsIHtcbiAgICB2YXIgcGFuZWwgPSB0aGlzLmNyZWF0ZU5ld1BhbmVsT2JqZWN0KCk7XG4gICAgcGFuZWwuaXNJbnRlcmFjdGl2ZURlc2lnbkVsZW1lbnQgPSBmYWxzZTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgcGFuZWwub25HZXRRdWVzdGlvblRpdGxlTG9jYXRpb24gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBzZWxmLmdldFRlbXBsYXRlUXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk7XG4gICAgfTtcbiAgICByZXR1cm4gcGFuZWw7XG4gIH1cbiAgcHJpdmF0ZSBnZXRUZW1wbGF0ZVF1ZXN0aW9uVGl0bGVMb2NhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVRpdGxlTG9jYXRpb24gIT0gXCJkZWZhdWx0XCJcbiAgICAgID8gdGhpcy50ZW1wbGF0ZVRpdGxlTG9jYXRpb25cbiAgICAgIDogdGhpcy5nZXRUaXRsZUxvY2F0aW9uQ29yZSgpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVOZXdQYW5lbE9iamVjdCgpOiBQYW5lbE1vZGVsIHtcbiAgICByZXR1cm4gU2VyaWFsaXplci5jcmVhdGVDbGFzcyhcInBhbmVsXCIpO1xuICB9XG4gIHByaXZhdGUgc2V0UGFuZWxDb3VudEJhc2VkT25WYWx1ZSgpIHtcbiAgICBpZiAodGhpcy5pc1ZhbHVlQ2hhbmdpbmdJbnRlcm5hbGx5IHx8IHRoaXMuaXNEZXNpZ25Nb2RlKSByZXR1cm47XG4gICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgdmFyIG5ld1BhbmVsQ291bnQgPSB2YWwgJiYgQXJyYXkuaXNBcnJheSh2YWwpID8gdmFsLmxlbmd0aCA6IDA7XG4gICAgaWYgKG5ld1BhbmVsQ291bnQgPT0gMCAmJiB0aGlzLmxvYWRpbmdQYW5lbENvdW50ID4gMCkge1xuICAgICAgbmV3UGFuZWxDb3VudCA9IHRoaXMubG9hZGluZ1BhbmVsQ291bnQ7XG4gICAgfVxuICAgIHRoaXMucGFuZWxDb3VudCA9IG5ld1BhbmVsQ291bnQ7XG4gIH1cbiAgcHVibGljIHNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWU6IGFueSkge1xuICAgIHN1cGVyLnNldFF1ZXN0aW9uVmFsdWUobmV3VmFsdWUsIGZhbHNlKTtcbiAgICB0aGlzLnNldFBhbmVsQ291bnRCYXNlZE9uVmFsdWUoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhbmVsVXBkYXRlVmFsdWVGcm9tU3VydmV5KHRoaXMucGFuZWxzW2ldKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVJc0Fuc3dlcmVkKCk7XG4gIH1cbiAgcHVibGljIG9uU3VydmV5VmFsdWVDaGFuZ2VkKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBzdXBlci5vblN1cnZleVZhbHVlQ2hhbmdlZChuZXdWYWx1ZSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYW5lbFN1cnZleVZhbHVlQ2hhbmdlZCh0aGlzLnBhbmVsc1tpXSk7XG4gICAgfVxuICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNldFZhbHVlQmFzZWRPblBhbmVsQ291bnQoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBwYW5lbFVwZGF0ZVZhbHVlRnJvbVN1cnZleShwYW5lbDogUGFuZWxNb2RlbCkge1xuICAgIHZhciBxdWVzdGlvbnMgPSBwYW5lbC5xdWVzdGlvbnM7XG4gICAgdmFyIHZhbHVlcyA9IHRoaXMuZ2V0UGFuZWxJdGVtRGF0YShwYW5lbC5kYXRhKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHEgPSBxdWVzdGlvbnNbaV07XG4gICAgICBxLnVwZGF0ZVZhbHVlRnJvbVN1cnZleSh2YWx1ZXNbcS5nZXRWYWx1ZU5hbWUoKV0pO1xuICAgICAgcS51cGRhdGVDb21tZW50RnJvbVN1cnZleShcbiAgICAgICAgdmFsdWVzW3EuZ2V0VmFsdWVOYW1lKCkgKyBzZXR0aW5ncy5jb21tZW50UHJlZml4XVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBwYW5lbFN1cnZleVZhbHVlQ2hhbmdlZChwYW5lbDogUGFuZWxNb2RlbCkge1xuICAgIHZhciBxdWVzdGlvbnMgPSBwYW5lbC5xdWVzdGlvbnM7XG4gICAgdmFyIHZhbHVlcyA9IHRoaXMuZ2V0UGFuZWxJdGVtRGF0YShwYW5lbC5kYXRhKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHEgPSBxdWVzdGlvbnNbaV07XG4gICAgICBxLm9uU3VydmV5VmFsdWVDaGFuZ2VkKHZhbHVlc1txLmdldFZhbHVlTmFtZSgpXSk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBvblNldERhdGEoKSB7XG4gICAgc3VwZXIub25TZXREYXRhKCk7XG4gICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKSB7XG4gICAgICB0aGlzLnNldFRlbXBsYXRlUGFuZWxTdXJ2ZXlJbXBsKCk7XG4gICAgICB0aGlzLnJlYnVpbGRQYW5lbHMoKTtcbiAgICB9XG4gIH1cbiAgLy9JUXVlc3Rpb25QYW5lbER5bmFtaWNEYXRhXG4gIGdldEl0ZW1JbmRleChpdGVtOiBJU3VydmV5RGF0YSk6IG51bWJlciB7XG4gICAgdmFyIHJlcyA9IHRoaXMuaXRlbXMuaW5kZXhPZihpdGVtKTtcbiAgICByZXR1cm4gcmVzID4gLTEgPyByZXMgOiB0aGlzLml0ZW1zLmxlbmd0aDtcbiAgfVxuICBnZXRQYW5lbEl0ZW1EYXRhKGl0ZW06IElTdXJ2ZXlEYXRhKTogYW55IHtcbiAgICB2YXIgaXRlbXMgPSB0aGlzLml0ZW1zO1xuICAgIHZhciBpbmRleCA9IGl0ZW1zLmluZGV4T2YoaXRlbSk7XG4gICAgdmFyIHFWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgaWYgKGluZGV4IDwgMCAmJiBBcnJheS5pc0FycmF5KHFWYWx1ZSkgJiYgcVZhbHVlLmxlbmd0aCA+IGl0ZW1zLmxlbmd0aCkge1xuICAgICAgaW5kZXggPSBpdGVtcy5sZW5ndGg7XG4gICAgfVxuICAgIGlmIChpbmRleCA8IDApIHJldHVybiB7fTtcbiAgICBpZiAoIXFWYWx1ZSB8fCAhQXJyYXkuaXNBcnJheShxVmFsdWUpIHx8IHFWYWx1ZS5sZW5ndGggPD0gaW5kZXgpIHJldHVybiB7fTtcbiAgICByZXR1cm4gcVZhbHVlW2luZGV4XTtcbiAgfVxuICBwcml2YXRlIGlzU2V0UGFuZWxJdGVtRGF0YTogQXJyYXk8c3RyaW5nPjtcbiAgc2V0UGFuZWxJdGVtRGF0YShpdGVtOiBJU3VydmV5RGF0YSwgbmFtZTogc3RyaW5nLCB2YWw6IGFueSkge1xuICAgIGlmICh0aGlzLmlzU2V0UGFuZWxJdGVtRGF0YSAmJiB0aGlzLmlzU2V0UGFuZWxJdGVtRGF0YS5pbmRleE9mKG5hbWUpID4gLTEpXG4gICAgICByZXR1cm47XG4gICAgaWYgKCF0aGlzLmlzU2V0UGFuZWxJdGVtRGF0YSkgdGhpcy5pc1NldFBhbmVsSXRlbURhdGEgPSBbXTtcbiAgICB0aGlzLmlzU2V0UGFuZWxJdGVtRGF0YS5wdXNoKG5hbWUpO1xuICAgIHZhciBpdGVtcyA9IHRoaXMuaXRlbXM7XG4gICAgdmFyIGluZGV4ID0gaXRlbXMuaW5kZXhPZihpdGVtKTtcbiAgICBpZiAoaW5kZXggPCAwKSBpbmRleCA9IGl0ZW1zLmxlbmd0aDtcbiAgICB2YXIgcVZhbHVlID0gdGhpcy5nZXRVbmJpbmRWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICBpZiAoIXFWYWx1ZSB8fCAhQXJyYXkuaXNBcnJheShxVmFsdWUpKSB7XG4gICAgICBxVmFsdWUgPSBbXTtcbiAgICB9XG4gICAgaWYgKHFWYWx1ZS5sZW5ndGggPD0gaW5kZXgpIHtcbiAgICAgIGZvciAodmFyIGkgPSBxVmFsdWUubGVuZ3RoOyBpIDw9IGluZGV4OyBpKyspIHtcbiAgICAgICAgcVZhbHVlLnB1c2goe30pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXFWYWx1ZVtpbmRleF0pIHFWYWx1ZVtpbmRleF0gPSB7fTtcbiAgICBpZiAoIXRoaXMuaXNWYWx1ZUVtcHR5KHZhbCkpIHtcbiAgICAgIHFWYWx1ZVtpbmRleF1bbmFtZV0gPSB2YWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSBxVmFsdWVbaW5kZXhdW25hbWVdO1xuICAgIH1cbiAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IHRoaXMucGFuZWxzLmxlbmd0aCkge1xuICAgICAgdGhpcy5jaGFuZ2luZ1ZhbHVlUXVlc3Rpb24gPSB0aGlzLnBhbmVsc1tpbmRleF0uZ2V0UXVlc3Rpb25CeVZhbHVlTmFtZShcbiAgICAgICAgbmFtZVxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy52YWx1ZSA9IHFWYWx1ZTtcbiAgICB0aGlzLmNoYW5naW5nVmFsdWVRdWVzdGlvbiA9IG51bGw7XG4gICAgaWYgKHRoaXMuc3VydmV5KSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgcXVlc3Rpb246IHRoaXMsXG4gICAgICAgIHBhbmVsOiAoPFF1ZXN0aW9uUGFuZWxEeW5hbWljSXRlbT5pdGVtKS5wYW5lbCxcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgaXRlbUluZGV4OiBpbmRleCxcbiAgICAgICAgaXRlbVZhbHVlOiBxVmFsdWVbaW5kZXhdLFxuICAgICAgICB2YWx1ZTogdmFsLFxuICAgICAgfTtcbiAgICAgIHRoaXMuc3VydmV5LmR5bmFtaWNQYW5lbEl0ZW1WYWx1ZUNoYW5nZWQodGhpcywgb3B0aW9ucyk7XG4gICAgfVxuICAgIHZhciBpbmRleCA9IHRoaXMuaXNTZXRQYW5lbEl0ZW1EYXRhLmluZGV4T2YobmFtZSk7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHRoaXMuaXNTZXRQYW5lbEl0ZW1EYXRhLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG4gIGdldFJvb3REYXRhKCk6IElTdXJ2ZXlEYXRhIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhO1xuICB9XG4gIHB1YmxpYyBnZXRQbGFpbkRhdGEoXG4gICAgb3B0aW9uczoge1xuICAgICAgaW5jbHVkZUVtcHR5PzogYm9vbGVhbixcbiAgICAgIGNhbGN1bGF0aW9ucz86IEFycmF5PHtcbiAgICAgICAgcHJvcGVydHlOYW1lOiBzdHJpbmcsXG4gICAgICB9PixcbiAgICB9ID0ge1xuICAgICAgaW5jbHVkZUVtcHR5OiB0cnVlLFxuICAgIH1cbiAgKSB7XG4gICAgdmFyIHF1ZXN0aW9uUGxhaW5EYXRhID0gc3VwZXIuZ2V0UGxhaW5EYXRhKG9wdGlvbnMpO1xuICAgIGlmICghIXF1ZXN0aW9uUGxhaW5EYXRhKSB7XG4gICAgICBxdWVzdGlvblBsYWluRGF0YS5pc05vZGUgPSB0cnVlO1xuICAgICAgcXVlc3Rpb25QbGFpbkRhdGEuZGF0YSA9IHRoaXMucGFuZWxzLm1hcChcbiAgICAgICAgKHBhbmVsOiBQYW5lbE1vZGVsLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgdmFyIHBhbmVsRGF0YUl0ZW0gPSA8YW55PntcbiAgICAgICAgICAgIG5hbWU6IHBhbmVsLm5hbWUgfHwgaW5kZXgsXG4gICAgICAgICAgICB0aXRsZTogcGFuZWwudGl0bGUgfHwgXCJQYW5lbFwiLFxuICAgICAgICAgICAgdmFsdWU6IHBhbmVsLmdldFZhbHVlKCksXG4gICAgICAgICAgICBkaXNwbGF5VmFsdWU6IHBhbmVsLmdldFZhbHVlKCksXG4gICAgICAgICAgICBnZXRTdHJpbmc6ICh2YWw6IGFueSkgPT5cbiAgICAgICAgICAgICAgdHlwZW9mIHZhbCA9PT0gXCJvYmplY3RcIiA/IEpTT04uc3RyaW5naWZ5KHZhbCkgOiB2YWwsXG4gICAgICAgICAgICBpc05vZGU6IHRydWUsXG4gICAgICAgICAgICBkYXRhOiBwYW5lbC5xdWVzdGlvbnNcbiAgICAgICAgICAgICAgLm1hcCgocXVlc3Rpb246IFF1ZXN0aW9uKSA9PiBxdWVzdGlvbi5nZXRQbGFpbkRhdGEob3B0aW9ucykpXG4gICAgICAgICAgICAgIC5maWx0ZXIoKGQ6IGFueSkgPT4gISFkKSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIChvcHRpb25zLmNhbGN1bGF0aW9ucyB8fCBbXSkuZm9yRWFjaCgoY2FsY3VsYXRpb24pID0+IHtcbiAgICAgICAgICAgIHBhbmVsRGF0YUl0ZW1bY2FsY3VsYXRpb24ucHJvcGVydHlOYW1lXSA9ICg8YW55PnBhbmVsKVtcbiAgICAgICAgICAgICAgY2FsY3VsYXRpb24ucHJvcGVydHlOYW1lXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBwYW5lbERhdGFJdGVtO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcXVlc3Rpb25QbGFpbkRhdGE7XG4gIH1cbiAgcHVibGljIHVwZGF0ZUVsZW1lbnRDc3MocmVOZXc/OiBib29sZWFuKSB7XG4gICAgc3VwZXIudXBkYXRlRWxlbWVudENzcyhyZU5ldyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVsID0gdGhpcy5wYW5lbHNbaV07XG4gICAgICBlbC51cGRhdGVFbGVtZW50Q3NzKHJlTmV3KTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCBwcm9ncmVzc1RleHQoKTogc3RyaW5nIHtcbiAgICB2YXIgcmFuZ2VNYXggPSB0aGlzLnBhbmVsQ291bnQ7XG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvblxuICAgICAgLmdldFN0cmluZyhcInBhbmVsRHluYW1pY1Byb2dyZXNzVGV4dFwiKVxuICAgICAgW1wiZm9ybWF0XCJdKHRoaXMuY3VycmVudEluZGV4ICsgMSwgcmFuZ2VNYXgpO1xuICB9XG4gIHB1YmxpYyBnZXRQYW5lbFdyYXBwZXJDc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IENzc0NsYXNzQnVpbGRlcigpXG4gICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5wYW5lbFdyYXBwZXIpXG4gICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5wYW5lbFdyYXBwZXJJblJvdywgdGhpcy5wYW5lbFJlbW92ZUJ1dHRvbkxvY2F0aW9uID09PSBcInJpZ2h0XCIpXG4gICAgICAudG9TdHJpbmcoKTtcbiAgfVxuICBwdWJsaWMgZ2V0UGFuZWxSZW1vdmVCdXR0b25Dc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IENzc0NsYXNzQnVpbGRlcigpXG4gICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5idXR0b24pXG4gICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5idXR0b25SZW1vdmUpXG4gICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5idXR0b25SZW1vdmVSaWdodCwgdGhpcy5wYW5lbFJlbW92ZUJ1dHRvbkxvY2F0aW9uID09PSBcInJpZ2h0XCIpXG4gICAgICAudG9TdHJpbmcoKTtcbiAgfVxuICBwdWJsaWMgZ2V0QWRkQnV0dG9uQ3NzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBDc3NDbGFzc0J1aWxkZXIoKVxuICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuYnV0dG9uKVxuICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuYnV0dG9uQWRkKVxuICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuYnV0dG9uQWRkICsgXCItLWxpc3QtbW9kZVwiLCB0aGlzLnJlbmRlck1vZGUgPT09IFwibGlzdFwiKVxuICAgICAgLnRvU3RyaW5nKCk7XG4gIH1cbiAgcHVibGljIGdldFByZXZCdXR0b25Dc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IENzc0NsYXNzQnVpbGRlcigpXG4gICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5idXR0b25QcmV2KVxuICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuYnV0dG9uUHJldiArIFwiLS1kaXNhYmxlZFwiLCAhdGhpcy5pc1ByZXZCdXR0b25TaG93aW5nKVxuICAgICAgLnRvU3RyaW5nKCk7XG4gIH1cbiAgcHVibGljIGdldE5leHRCdXR0b25Dc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IENzc0NsYXNzQnVpbGRlcigpXG4gICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5idXR0b25OZXh0KVxuICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuYnV0dG9uTmV4dCArIFwiLS1kaXNhYmxlZFwiLCAhdGhpcy5pc05leHRCdXR0b25TaG93aW5nKVxuICAgICAgLnRvU3RyaW5nKCk7XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJwYW5lbGR5bmFtaWNcIixcbiAgW1xuICAgIHtcbiAgICAgIG5hbWU6IFwidGVtcGxhdGVFbGVtZW50c1wiLFxuICAgICAgYWx0ZXJuYXRpdmVOYW1lOiBcInF1ZXN0aW9uc1wiLFxuICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICBpc0xpZ2h0U2VyaWFsaXphYmxlOiBmYWxzZSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJ0ZW1wbGF0ZVRpdGxlOnRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1RlbXBsYXRlVGl0bGVcIiB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwidGVtcGxhdGVEZXNjcmlwdGlvbjp0ZXh0XCIsXG4gICAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jVGVtcGxhdGVEZXNjcmlwdGlvblwiLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcImFsbG93QWRkUGFuZWw6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgeyBuYW1lOiBcImFsbG93UmVtb3ZlUGFuZWw6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJwYW5lbENvdW50Om51bWJlclwiLFxuICAgICAgaXNCaW5kYWJsZTogdHJ1ZSxcbiAgICAgIGRlZmF1bHQ6IDAsXG4gICAgICBjaG9pY2VzOiBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTBdLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcIm1pblBhbmVsQ291bnQ6bnVtYmVyXCIsIGRlZmF1bHQ6IDAsIG1pblZhbHVlOiAwIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJtYXhQYW5lbENvdW50Om51bWJlclwiLFxuICAgICAgZGVmYXVsdDogc2V0dGluZ3MucGFuZWxNYXhpbXVtUGFuZWxDb3VudCxcbiAgICB9LFxuICAgIFwiZGVmYXVsdFBhbmVsVmFsdWU6cGFuZWx2YWx1ZVwiLFxuICAgIFwiZGVmYXVsdFZhbHVlRnJvbUxhc3RQYW5lbDpib29sZWFuXCIsXG4gICAge1xuICAgICAgbmFtZTogXCJwYW5lbHNTdGF0ZVwiLFxuICAgICAgZGVmYXVsdDogXCJkZWZhdWx0XCIsXG4gICAgICBjaG9pY2VzOiBbXCJkZWZhdWx0XCIsIFwiY29sbGFwc2VkXCIsIFwiZXhwYW5kZWRcIiwgXCJmaXJzdEV4cGFuZGVkXCJdLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcImtleU5hbWVcIiB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwia2V5RHVwbGljYXRpb25FcnJvclwiLFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0tleUR1cGxpY2F0aW9uRXJyb3JcIixcbiAgICB9LFxuICAgIHsgbmFtZTogXCJjb25maXJtRGVsZXRlOmJvb2xlYW5cIiB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiY29uZmlybURlbGV0ZVRleHRcIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NDb25maXJtRGVsZXRlVGV4dFwiLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcInBhbmVsQWRkVGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUGFuZWxBZGRUZXh0XCIgfSxcbiAgICB7IG5hbWU6IFwicGFuZWxSZW1vdmVUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQYW5lbFJlbW92ZVRleHRcIiB9LFxuICAgIHsgbmFtZTogXCJwYW5lbFByZXZUZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NQYW5lbFByZXZUZXh0XCIgfSxcbiAgICB7IG5hbWU6IFwicGFuZWxOZXh0VGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUGFuZWxOZXh0VGV4dFwiIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJzaG93UXVlc3Rpb25OdW1iZXJzXCIsXG4gICAgICBkZWZhdWx0OiBcIm9mZlwiLFxuICAgICAgY2hvaWNlczogW1wib2ZmXCIsIFwib25QYW5lbFwiLCBcIm9uU3VydmV5XCJdLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcInNob3dSYW5nZUluUHJvZ3Jlc3M6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJyZW5kZXJNb2RlXCIsXG4gICAgICBkZWZhdWx0OiBcImxpc3RcIixcbiAgICAgIGNob2ljZXM6IFtcImxpc3RcIiwgXCJwcm9ncmVzc1RvcFwiLCBcInByb2dyZXNzQm90dG9tXCIsIFwicHJvZ3Jlc3NUb3BCb3R0b21cIl0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInRlbXBsYXRlVGl0bGVMb2NhdGlvblwiLFxuICAgICAgZGVmYXVsdDogXCJkZWZhdWx0XCIsXG4gICAgICBjaG9pY2VzOiBbXCJkZWZhdWx0XCIsIFwidG9wXCIsIFwiYm90dG9tXCIsIFwibGVmdFwiXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwicGFuZWxSZW1vdmVCdXR0b25Mb2NhdGlvblwiLFxuICAgICAgZGVmYXVsdDogXCJib3R0b21cIixcbiAgICAgIGNob2ljZXM6IFtcImJvdHRvbVwiLCBcInJpZ2h0XCJdLFxuICAgIH0sXG4gIF0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbChcIlwiKTtcbiAgfSxcbiAgXCJxdWVzdGlvblwiXG4pO1xuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJwYW5lbGR5bmFtaWNcIiwgKG5hbWUpID0+IHtcbiAgcmV0dXJuIG5ldyBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsKG5hbWUpO1xufSk7XG4iLCJpbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkNoZWNrYm94QmFzZSB9IGZyb20gXCIuL3F1ZXN0aW9uX2Jhc2VzZWxlY3RcIjtcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcbmltcG9ydCB7IEl0ZW1WYWx1ZSB9IGZyb20gXCIuL2l0ZW12YWx1ZVwiO1xuXG4vKipcbiAqIEEgTW9kZWwgZm9yIGEgcmFkaW9ncm91cCBxdWVzdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsIGV4dGVuZHMgUXVlc3Rpb25DaGVja2JveEJhc2Uge1xuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInJhZGlvZ3JvdXBcIjtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Rmlyc3RJbnB1dEVsZW1lbnRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlucHV0SWQgKyBcIl8wXCI7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgc2VsZWN0ZWQgaXRlbSBpbiB0aGUgcmFkaW8gZ3JvdXAuIFJldHVybnMgbnVsbCBpZiB0aGUgdmFsdWUgaXMgZW1wdHlcbiAgICovXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRJdGVtKCk6IEl0ZW1WYWx1ZSB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gSXRlbVZhbHVlLmdldEl0ZW1CeVZhbHVlKHRoaXMudmlzaWJsZUNob2ljZXMsIHRoaXMudmFsdWUpO1xuICB9XG4gIC8qKlxuICAgKiBTaG93IFwiY2xlYXIgYnV0dG9uXCIgZmxhZy5cbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd0NsZWFyQnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93Q2xlYXJCdXR0b25cIik7XG4gIH1cbiAgcHVibGljIHNldCBzaG93Q2xlYXJCdXR0b24odmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd0NsZWFyQnV0dG9uXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBjYW5TaG93Q2xlYXJCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0NsZWFyQnV0dG9uICYmICF0aGlzLmlzUmVhZE9ubHk7XG4gIH1cbiAgcHVibGljIGdldCBjbGVhckJ1dHRvbkNhcHRpb24oKSB7XG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJjbGVhckNhcHRpb25cIik7XG4gIH1cbiAgc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIGdldCBhcmlhUm9sZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInJhZGlvZ3JvdXBcIjtcbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcInJhZGlvZ3JvdXBcIixcbiAgW3sgbmFtZTogXCJzaG93Q2xlYXJCdXR0b246Ym9vbGVhblwiLCBkZWZhdWx0OiBmYWxzZSB9XSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvblJhZGlvZ3JvdXBNb2RlbChcIlwiKTtcbiAgfSxcbiAgXCJjaGVja2JveGJhc2VcIlxuKTtcblxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJyYWRpb2dyb3VwXCIsIChuYW1lKSA9PiB7XG4gIHZhciBxID0gbmV3IFF1ZXN0aW9uUmFkaW9ncm91cE1vZGVsKG5hbWUpO1xuICBxLmNob2ljZXMgPSBRdWVzdGlvbkZhY3RvcnkuRGVmYXVsdENob2ljZXM7XG4gIHJldHVybiBxO1xufSk7XG4iLCJpbXBvcnQgU29ydGFibGVMaWIgZnJvbSBcInNvcnRhYmxlanNcIjtcbmltcG9ydCB7IElTdXJ2ZXksIElTdXJ2ZXlJbXBsIH0gZnJvbSBcIi4vYmFzZS1pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBEcmFnRHJvcFJhbmtpbmdDaG9pY2VzIH0gZnJvbSBcIi4vZHJhZ2Ryb3AvcmFua2luZy1jaG9pY2VzXCI7XG5pbXBvcnQgeyBJdGVtVmFsdWUgfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcbmltcG9ydCB7IHByb3BlcnR5LCBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgUXVlc3Rpb25GYWN0b3J5IH0gZnJvbSBcIi4vcXVlc3Rpb25mYWN0b3J5XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkNoZWNrYm94TW9kZWwgfSBmcm9tIFwiLi9xdWVzdGlvbl9jaGVja2JveFwiO1xuaW1wb3J0IHsgQ3NzQ2xhc3NCdWlsZGVyIH0gZnJvbSBcIi4vdXRpbHMvY3NzQ2xhc3NCdWlsZGVyXCI7XG5pbXBvcnQgeyBJc01vYmlsZSB9IGZyb20gXCIuL3V0aWxzL2lzLW1vYmlsZVwiO1xuXG5jb25zdCBTb3J0YWJsZSA9IDxhbnk+U29ydGFibGVMaWI7XG5cbi8qKlxuICogQSBNb2RlbCBmb3IgYSByYW5raW5nIHF1ZXN0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvblJhbmtpbmdNb2RlbCBleHRlbmRzIFF1ZXN0aW9uQ2hlY2tib3hNb2RlbCB7XG4gIHByaXZhdGUgZG9tTm9kZTogSFRNTEVsZW1lbnQgPSBudWxsO1xuICBwcml2YXRlIHNvcnRhYmxlSW5zdDogYW55ID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB0aGlzLmNyZWF0ZU5ld0FycmF5KFwicmFua2luZ0Nob2ljZXNcIik7XG4gIH1cblxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInJhbmtpbmdcIjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcm9vdENsYXNzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBDc3NDbGFzc0J1aWxkZXIoKVxuICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMucm9vdClcbiAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLnJvb3RNb2JpbGVNb2QsIElzTW9iaWxlKVxuICAgICAgLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0SXRlbUNsYXNzQ29yZShpdGVtOiBJdGVtVmFsdWUsIG9wdGlvbnM6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgaXRlbUluZGV4ID0gdGhpcy5yYW5raW5nQ2hvaWNlcy5pbmRleE9mKGl0ZW0pO1xuICAgIGNvbnN0IGRyb3BUYXJnZXRJbmRleCA9IHRoaXMucmFua2luZ0Nob2ljZXMuaW5kZXhPZihcbiAgICAgIHRoaXMuY3VycmVudERyb3BUYXJnZXRcbiAgICApO1xuXG4gICAgcmV0dXJuIG5ldyBDc3NDbGFzc0J1aWxkZXIoKVxuICAgICAgLmFwcGVuZChzdXBlci5nZXRJdGVtQ2xhc3NDb3JlKGl0ZW0sIG9wdGlvbnMpKVxuICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuaXRlbUdob3N0TW9kLCB0aGlzLmN1cnJlbnREcm9wVGFyZ2V0ID09PSBpdGVtKVxuICAgICAgLmFwcGVuZChcbiAgICAgICAgXCJzdi1kcmFnZHJvcC1tb3ZlZG93blwiLFxuICAgICAgICBpdGVtSW5kZXggPT09IGRyb3BUYXJnZXRJbmRleCArIDEgJiYgdGhpcy5kcm9wVGFyZ2V0Tm9kZU1vdmUgPT09IFwiZG93blwiXG4gICAgICApXG4gICAgICAuYXBwZW5kKFxuICAgICAgICBcInN2LWRyYWdkcm9wLW1vdmV1cFwiLFxuICAgICAgICBpdGVtSW5kZXggPT09IGRyb3BUYXJnZXRJbmRleCAtIDEgJiYgdGhpcy5kcm9wVGFyZ2V0Tm9kZU1vdmUgPT09IFwidXBcIlxuICAgICAgKVxuICAgICAgLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNJdGVtQ3VycmVudERyb3BUYXJnZXQoaXRlbTogSXRlbVZhbHVlKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuZmFsbGJhY2tUb1NvcnRhYmxlSlMpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5kcmFnRHJvcFJhbmtpbmdDaG9pY2VzLmRyb3BUYXJnZXQgPT09IGl0ZW07XG4gIH1cblxuICBwdWJsaWMgZ2V0IGdob3N0UG9zaXRpb25Dc3NDbGFzcygpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmdob3N0UG9zaXRpb24gPT09IFwidG9wXCIpXG4gICAgICByZXR1cm4gdGhpcy5jc3NDbGFzc2VzLmRyYWdEcm9wR2hvc3RQb3NpdGlvblRvcDtcbiAgICBpZiAodGhpcy5naG9zdFBvc2l0aW9uID09PSBcImJvdHRvbVwiKVxuICAgICAgcmV0dXJuIHRoaXMuY3NzQ2xhc3Nlcy5kcmFnRHJvcEdob3N0UG9zaXRpb25Cb3R0b207XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBwdWJsaWMgZ2V0TnVtYmVyQnlJbmRleChpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pc0VtcHR5KCkgPyBcIlxcdTIwMTNcIiA6IGluZGV4ICsgMSArIFwiXCI7XG4gIH1cblxuICBwdWJsaWMgc2V0U3VydmV5SW1wbCh2YWx1ZTogSVN1cnZleUltcGwsIGlzTGlnaHQ/OiBib29sZWFuKSB7XG4gICAgc3VwZXIuc2V0U3VydmV5SW1wbCh2YWx1ZSwgaXNMaWdodCk7XG4gICAgdGhpcy51cGRhdGVSYW5raW5nQ2hvaWNlcygpO1xuICB9XG5cbiAgb25TdXJ2ZXlWYWx1ZUNoYW5nZWQobmV3VmFsdWU6IGFueSkge1xuICAgIHN1cGVyLm9uU3VydmV5VmFsdWVDaGFuZ2VkKG5ld1ZhbHVlKTtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuO1xuICAgIHRoaXMudXBkYXRlUmFua2luZ0Nob2ljZXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblZpc2libGVDaG9pY2VzQ2hhbmdlZCA9ICgpOiB2b2lkID0+IHtcbiAgICBzdXBlci5vblZpc2libGVDaG9pY2VzQ2hhbmdlZCgpO1xuXG4gICAgLy8gcmFua2luZyBxdWVzdGlvbiB3aXRoIG9ubHkgb25lIGNob2ljZSBkb2Vzbid0IG1ha2Ugc2Vuc2VcbiAgICBpZiAodGhpcy52aXNpYmxlQ2hvaWNlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBbXTtcbiAgICAgIHRoaXMudXBkYXRlUmFua2luZ0Nob2ljZXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHtcbiAgICAgIHRoaXMudXBkYXRlUmFua2luZ0Nob2ljZXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52aXNpYmxlQ2hvaWNlcy5sZW5ndGggPiB0aGlzLnZhbHVlLmxlbmd0aClcbiAgICAgIHRoaXMuYWRkVG9WYWx1ZUJ5VmlzaWJsZUNob2ljZXMoKTtcbiAgICBpZiAodGhpcy52aXNpYmxlQ2hvaWNlcy5sZW5ndGggPCB0aGlzLnZhbHVlLmxlbmd0aClcbiAgICAgIHRoaXMucmVtb3ZlRnJvbVZhbHVlQnlWaXNpYmxlQ2hvaWNlcygpO1xuICAgIHRoaXMudXBkYXRlUmFua2luZ0Nob2ljZXMoKTtcbiAgfTtcblxuICBwdWJsaWMgbG9jYWxlQ2hhbmdlZCA9ICgpOiB2b2lkID0+IHtcbiAgICBzdXBlci5sb2NhbGVDaGFuZ2VkKCk7XG4gICAgdGhpcy51cGRhdGVSYW5raW5nQ2hvaWNlcygpO1xuICB9O1xuXG4gIHByaXZhdGUgYWRkVG9WYWx1ZUJ5VmlzaWJsZUNob2ljZXMoKSB7XG4gICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLnZhbHVlLnNsaWNlKCk7XG5cbiAgICB0aGlzLnZpc2libGVDaG9pY2VzLmZvckVhY2goKGNob2ljZSkgPT4ge1xuICAgICAgaWYgKG5ld1ZhbHVlLmluZGV4T2YoY2hvaWNlLnZhbHVlKSA9PT0gLTEpIHtcbiAgICAgICAgbmV3VmFsdWUucHVzaChjaG9pY2UudmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlRnJvbVZhbHVlQnlWaXNpYmxlQ2hvaWNlcygpIHtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMudmFsdWUuc2xpY2UoKTtcblxuICAgIHRoaXMudmFsdWUuZm9yRWFjaCgodmFsdWVJdGVtOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGxldCBpc1ZhbHVlSXRlbVRvUmVtb3ZlID0gdHJ1ZTtcbiAgICAgIHRoaXMudmlzaWJsZUNob2ljZXMuZm9yRWFjaCgoY2hvaWNlKSA9PiB7XG4gICAgICAgIGlmIChjaG9pY2UudmFsdWUgPT09IHZhbHVlSXRlbSkgaXNWYWx1ZUl0ZW1Ub1JlbW92ZSA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgICBpc1ZhbHVlSXRlbVRvUmVtb3ZlICYmIG5ld1ZhbHVlLnNwbGljZShpbmRleCwgMSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJhbmtpbmdDaG9pY2VzKCk6IEFycmF5PEl0ZW1WYWx1ZT4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyYW5raW5nQ2hvaWNlc1wiLCBbXSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVJhbmtpbmdDaG9pY2VzKCk6IEl0ZW1WYWx1ZVtdIHtcbiAgICBjb25zdCBuZXdSYW5raW5nQ2hvaWNlczogSXRlbVZhbHVlW10gPSBbXTtcblxuICAgIC8vIHJhbmtpbmcgcXVlc3Rpb24gd2l0aCBvbmx5IG9uZSBjaG9pY2UgZG9lc24ndCBtYWtlIHNlbnNlXG4gICAgaWYgKHRoaXMudmlzaWJsZUNob2ljZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyYW5raW5nQ2hvaWNlc1wiLCBuZXdSYW5raW5nQ2hvaWNlcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7XG4gICAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyYW5raW5nQ2hvaWNlc1wiLCB0aGlzLnZpc2libGVDaG9pY2VzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnZhbHVlLmZvckVhY2goKHZhbHVlSXRlbTogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLnZpc2libGVDaG9pY2VzLmZvckVhY2goKGNob2ljZSkgPT4ge1xuICAgICAgICBpZiAoY2hvaWNlLnZhbHVlID09PSB2YWx1ZUl0ZW0pIG5ld1JhbmtpbmdDaG9pY2VzLnB1c2goY2hvaWNlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJhbmtpbmdDaG9pY2VzXCIsIG5ld1JhbmtpbmdDaG9pY2VzKTtcbiAgfVxuXG4gIHB1YmxpYyBkcmFnRHJvcFJhbmtpbmdDaG9pY2VzOiBEcmFnRHJvcFJhbmtpbmdDaG9pY2VzO1xuICBAcHJvcGVydHkoeyBkZWZhdWx0VmFsdWU6IG51bGwgfSkgY3VycmVudERyb3BUYXJnZXQ6IEl0ZW1WYWx1ZTtcbiAgQHByb3BlcnR5KHsgZGVmYXVsdFZhbHVlOiBudWxsIH0pIGRyb3BUYXJnZXROb2RlTW92ZTogc3RyaW5nO1xuXG4gIGVuZExvYWRpbmdGcm9tSnNvbigpOiB2b2lkIHtcbiAgICBzdXBlci5lbmRMb2FkaW5nRnJvbUpzb24oKTtcbiAgICBpZiAoIXRoaXMuZmFsbGJhY2tUb1NvcnRhYmxlSlMpIHtcbiAgICAgIHRoaXMuZHJhZ0Ryb3BSYW5raW5nQ2hvaWNlcyA9IG5ldyBEcmFnRHJvcFJhbmtpbmdDaG9pY2VzKHRoaXMuc3VydmV5KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlUG9pbnRlckRvd24gPSAoXG4gICAgZXZlbnQ6IFBvaW50ZXJFdmVudCxcbiAgICBjaG9pY2U6IEl0ZW1WYWx1ZSxcbiAgICBub2RlOiBIVE1MRWxlbWVudFxuICApOiB2b2lkID0+IHtcbiAgICBpZiAoIXRoaXMuZmFsbGJhY2tUb1NvcnRhYmxlSlMgJiYgIXRoaXMuc3VydmV5LmlzRGVzaWduTW9kZSkge1xuICAgICAgdGhpcy5kcmFnRHJvcFJhbmtpbmdDaG9pY2VzLnN0YXJ0RHJhZyhldmVudCwgY2hvaWNlLCB0aGlzLCBub2RlKTtcbiAgICB9XG4gIH07XG5cbiAgLy9jcm9zcyBmcmFtZXdvcmsgaW5pdGlhbGl6YXRpb25cbiAgcHVibGljIGFmdGVyUmVuZGVyUXVlc3Rpb25FbGVtZW50KGVsOiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuZG9tTm9kZSA9IGVsO1xuICAgIGlmICghIWVsICYmIHRoaXMuZmFsbGJhY2tUb1NvcnRhYmxlSlMpIHtcbiAgICAgIHRoaXMuaW5pdFNvcnRhYmxlKGVsKTtcbiAgICB9XG4gICAgc3VwZXIuYWZ0ZXJSZW5kZXJRdWVzdGlvbkVsZW1lbnQoZWwpO1xuICB9XG4gIC8vY3Jvc3MgZnJhbWV3b3JrIGRlc3Ryb3lcbiAgcHVibGljIGJlZm9yZURlc3Ryb3lRdWVzdGlvbkVsZW1lbnQoZWw6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc29ydGFibGVJbnN0KSB0aGlzLnNvcnRhYmxlSW5zdC5kZXN0cm95KCk7XG4gICAgc3VwZXIuYmVmb3JlRGVzdHJveVF1ZXN0aW9uRWxlbWVudChlbCk7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlS2V5ZG93biA9IChldmVudDogS2V5Ym9hcmRFdmVudCwgY2hvaWNlOiBJdGVtVmFsdWUpOiB2b2lkID0+IHtcbiAgICBjb25zdCBrZXk6IGFueSA9IGV2ZW50LmtleTtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMucmFua2luZ0Nob2ljZXMuaW5kZXhPZihjaG9pY2UpO1xuXG4gICAgaWYgKGtleSA9PT0gXCJBcnJvd1VwXCIgJiYgaW5kZXgpIHtcbiAgICAgIHRoaXMuaGFuZGxlQXJyb3dVcChpbmRleCwgY2hvaWNlKTtcbiAgICB9XG4gICAgaWYgKGtleSA9PT0gXCJBcnJvd0Rvd25cIiAmJiBpbmRleCAhPT0gdGhpcy5yYW5raW5nQ2hvaWNlcy5sZW5ndGggLSAxKSB7XG4gICAgICB0aGlzLmhhbmRsZUFycm93RG93bihpbmRleCwgY2hvaWNlKTtcbiAgICB9XG4gIH07XG5cbiAgcHJvdGVjdGVkIHN1cHBvcnRTZWxlY3RBbGwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBzdXBwb3J0T3RoZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBzdXBwb3J0Tm9uZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGluaXRTb3J0YWJsZShkb21Ob2RlOiBIVE1MRWxlbWVudCkge1xuICAgIGlmICghZG9tTm9kZSkgcmV0dXJuO1xuICAgIGNvbnN0IHNlbGY6IFF1ZXN0aW9uUmFua2luZ01vZGVsID0gdGhpcztcbiAgICBpZiAodGhpcy5pc1JlYWRPbmx5KSByZXR1cm47XG4gICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKSByZXR1cm47XG5cbiAgICBzZWxmLnNvcnRhYmxlSW5zdCA9IG5ldyBTb3J0YWJsZShkb21Ob2RlLCB7XG4gICAgICBhbmltYXRpb246IDEwMCxcbiAgICAgIGZvcmNlRmFsbGJhY2s6IHRydWUsXG4gICAgICBkZWxheTogMjAwLFxuICAgICAgZGVsYXlPblRvdWNoT25seTogdHJ1ZSxcbiAgICAgIGhhbmRsZTogSXNNb2JpbGVcbiAgICAgICAgPyBcIi5cIiArIHNlbGYuY3NzQ2xhc3Nlcy5pdGVtSWNvbkNvbnRhaW5lclxuICAgICAgICA6IFwiLlwiICsgc2VsZi5jc3NDbGFzc2VzLml0ZW1Db250ZW50LFxuICAgICAgZ2hvc3RDbGFzczogc2VsZi5jc3NDbGFzc2VzLml0ZW1HaG9zdE1vZCxcbiAgICAgIGRyYWdDbGFzczogc2VsZi5jc3NDbGFzc2VzLml0ZW1EcmFnTW9kLFxuICAgICAgb25TdGFydChldnQ6IGFueSkge1xuICAgICAgICAoPGFueT5Tb3J0YWJsZS5naG9zdC5zdHlsZS5vcGFjaXR5KSA9IDE7XG4gICAgICAgIGRvbU5vZGUuY2xhc3NOYW1lICs9IFwiIFwiICsgc2VsZi5jc3NDbGFzc2VzLnJvb3REcmFnTW9kO1xuICAgICAgICBpZiAoc2VsZi5pc0VtcHR5KCkpIHtcbiAgICAgICAgICBzZWxmLnNldEdob3N0VGV4dChldnQub2xkSW5kZXggKyAxKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uRW5kKCkge1xuICAgICAgICBkb21Ob2RlLmNsYXNzTmFtZSA9IGRvbU5vZGUuY2xhc3NOYW1lLnJlcGxhY2UoXG4gICAgICAgICAgXCIgXCIgKyBzZWxmLmNzc0NsYXNzZXMucm9vdERyYWdNb2QsXG4gICAgICAgICAgXCJcIlxuICAgICAgICApO1xuICAgICAgICBzZWxmLnNldFZhbHVlRnJvbVVJKCk7XG4gICAgICB9LFxuICAgICAgb25DaGFuZ2UoZXZ0OiBhbnkpIHtcbiAgICAgICAgaWYgKCFzZWxmLmlzRW1wdHkoKSkgc2VsZi5zeW5jTnVtYmVycygpO1xuICAgICAgICBzZWxmLnNldEdob3N0VGV4dChldnQubmV3SW5kZXggKyAxKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZhbGxiYWNrVG9Tb3J0YWJsZUpTKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJmYWxsYmFja1RvU29ydGFibGVKU1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGZhbGxiYWNrVG9Tb3J0YWJsZUpTKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImZhbGxiYWNrVG9Tb3J0YWJsZUpTXCIsIHZhbCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUFycm93VXAgPSAoaW5kZXg6IG51bWJlciwgY2hvaWNlOiBJdGVtVmFsdWUpID0+IHtcbiAgICBjb25zdCBjaG9pY2VzID0gdGhpcy5yYW5raW5nQ2hvaWNlcztcbiAgICBjaG9pY2VzLnNwbGljZShpbmRleCwgMSk7XG4gICAgY2hvaWNlcy5zcGxpY2UoaW5kZXggLSAxLCAwLCBjaG9pY2UpO1xuICAgIHRoaXMuc2V0VmFsdWUoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZm9jdXNJdGVtKGluZGV4IC0gMSk7XG4gICAgfSwgMSk7XG4gIH07XG5cbiAgcHJpdmF0ZSBoYW5kbGVBcnJvd0Rvd24gPSAoaW5kZXg6IG51bWJlciwgY2hvaWNlOiBJdGVtVmFsdWUpID0+IHtcbiAgICBjb25zdCBjaG9pY2VzID0gdGhpcy5yYW5raW5nQ2hvaWNlcztcbiAgICBjaG9pY2VzLnNwbGljZShpbmRleCwgMSk7XG4gICAgY2hvaWNlcy5zcGxpY2UoaW5kZXggKyAxLCAwLCBjaG9pY2UpO1xuICAgIHRoaXMuc2V0VmFsdWUoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZm9jdXNJdGVtKGluZGV4ICsgMSk7XG4gICAgfSwgMSk7XG4gIH07XG5cbiAgcHJpdmF0ZSBmb2N1c0l0ZW0gPSAoaW5kZXg6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGl0ZW1zTm9kZXM6IGFueSA9IHRoaXMuZG9tTm9kZS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgXCIuXCIgKyB0aGlzLmNzc0NsYXNzZXMuaXRlbVxuICAgICk7XG4gICAgaXRlbXNOb2Rlc1tpbmRleF0uZm9jdXMoKTtcbiAgfTtcblxuICBwdWJsaWMgc2V0VmFsdWUgPSAoKTogdm9pZCA9PiB7XG4gICAgY29uc3QgdmFsdWU6IHN0cmluZ1tdID0gW107XG4gICAgdGhpcy5yYW5raW5nQ2hvaWNlcy5mb3JFYWNoKChjaG9pY2U6IEl0ZW1WYWx1ZSkgPT4ge1xuICAgICAgdmFsdWUucHVzaChjaG9pY2UudmFsdWUpO1xuICAgIH0pO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfTtcblxuICBwcml2YXRlIHNldFZhbHVlRnJvbVVJID0gKCkgPT4ge1xuICAgIGNvbnN0IHZhbHVlOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHRleHROb2RlcyA9IHRoaXMuZG9tTm9kZS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgXCIuXCIgKyB0aGlzLmNzc0NsYXNzZXMuY29udHJvbExhYmVsXG4gICAgKTtcbiAgICB0ZXh0Tm9kZXMuZm9yRWFjaCgodGV4dE5vZGU6IGFueSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGlubmVyVGV4dDogc3RyaW5nID0gdGV4dE5vZGUuaW5uZXJUZXh0O1xuICAgICAgdGhpcy52aXNpYmxlQ2hvaWNlcy5mb3JFYWNoKCh2aXNpYmxlQ2hvaWNlOiBJdGVtVmFsdWUpID0+IHtcbiAgICAgICAgaWYgKGlubmVyVGV4dCA9PT0gdmlzaWJsZUNob2ljZS50ZXh0KSB7XG4gICAgICAgICAgdmFsdWUucHVzaCh2aXNpYmxlQ2hvaWNlLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9O1xuXG4gIHByaXZhdGUgc3luY051bWJlcnMgPSAoKSA9PiB7XG4gICAgaWYgKCF0aGlzLmRvbU5vZGUpIHJldHVybjtcbiAgICBjb25zdCBzZWxlY3Rvcjogc3RyaW5nID1cbiAgICAgIFwiLlwiICtcbiAgICAgIHRoaXMuY3NzQ2xhc3Nlcy5pdGVtICtcbiAgICAgIFwiOm5vdCguXCIgK1xuICAgICAgdGhpcy5jc3NDbGFzc2VzLml0ZW1EcmFnTW9kICtcbiAgICAgIFwiKVwiICtcbiAgICAgIFwiIC5cIiArXG4gICAgICB0aGlzLmNzc0NsYXNzZXMuaXRlbUluZGV4O1xuXG4gICAgY29uc3QgaW5kZXhOb2RlczogTm9kZUxpc3RPZjxFbGVtZW50PiA9IHRoaXMuZG9tTm9kZS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgc2VsZWN0b3JcbiAgICApO1xuICAgIGluZGV4Tm9kZXMuZm9yRWFjaCgoaW5kZXhOb2RlOiBhbnksIGluZGV4KSA9PiB7XG4gICAgICBpbmRleE5vZGUuaW5uZXJUZXh0ID0gdGhpcy5nZXROdW1iZXJCeUluZGV4KGluZGV4KTtcbiAgICB9KTtcbiAgfTtcblxuICBwcml2YXRlIHNldEdob3N0VGV4dCA9ICh0ZXh0OiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBpbmRleE5vZGVzOiBOb2RlTGlzdE9mPEVsZW1lbnQ+ID0gdGhpcy5kb21Ob2RlLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICBcIi5cIiArIHRoaXMuY3NzQ2xhc3Nlcy5pdGVtSW5kZXhcbiAgICApO1xuICAgIGNvbnN0IGdob3N0Tm9kZTogRWxlbWVudCA9IGluZGV4Tm9kZXNbaW5kZXhOb2Rlcy5sZW5ndGggLSAxXTtcbiAgICAoPGFueT5naG9zdE5vZGUpLmlubmVyVGV4dCA9IHRleHQ7XG4gIH07XG5cbiAgcHVibGljIGdldEljb25Ib3ZlckNzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgQ3NzQ2xhc3NCdWlsZGVyKClcbiAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLml0ZW1JY29uKVxuICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuaXRlbUljb25Ib3Zlck1vZClcbiAgICAgIC50b1N0cmluZygpO1xuICB9XG5cbiAgcHVibGljIGdldEljb25Gb2N1c0NzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgQ3NzQ2xhc3NCdWlsZGVyKClcbiAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLml0ZW1JY29uKVxuICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuaXRlbUljb25Gb2N1c01vZClcbiAgICAgIC50b1N0cmluZygpO1xuICB9XG59XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwicmFua2luZ1wiLFxuICBbXG4gICAgeyBuYW1lOiBcImhhc090aGVyXCIsIHZpc2libGU6IGZhbHNlLCBpc1NlcmlhbGl6YWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwib3RoZXJUZXh0XCIsIHZpc2libGU6IGZhbHNlLCBpc1NlcmlhbGl6YWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwib3RoZXJFcnJvclRleHRcIiwgdmlzaWJsZTogZmFsc2UsIGlzU2VyaWFsaXphYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJzdG9yZU90aGVyc0FzQ29tbWVudFwiLCB2aXNpYmxlOiBmYWxzZSwgaXNTZXJpYWxpemFibGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImhhc05vbmVcIiwgdmlzaWJsZTogZmFsc2UsIGlzU2VyaWFsaXphYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJub25lVGV4dFwiLCB2aXNpYmxlOiBmYWxzZSwgaXNTZXJpYWxpemFibGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImhhc1NlbGVjdEFsbFwiLCB2aXNpYmxlOiBmYWxzZSwgaXNTZXJpYWxpemFibGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInNlbGVjdEFsbFRleHRcIiwgdmlzaWJsZTogZmFsc2UsIGlzU2VyaWFsaXphYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJjb2xDb3VudDpudW1iZXJcIiwgdmlzaWJsZTogZmFsc2UsIGlzU2VyaWFsaXphYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJtYXhTZWxlY3RlZENob2ljZXNcIiwgdmlzaWJsZTogZmFsc2UsIGlzU2VyaWFsaXphYmxlOiBmYWxzZSB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiZmFsbGJhY2tUb1NvcnRhYmxlSlNcIixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICBpc1NlcmlhbGl6YWJsZTogZmFsc2UsXG4gICAgfSxcbiAgXSxcbiAgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25SYW5raW5nTW9kZWwoXCJcIik7XG4gIH0sXG4gIFwiY2hlY2tib3hcIlxuKTtcblxuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJyYW5raW5nXCIsIChuYW1lKSA9PiB7XG4gIGNvbnN0IHE6IFF1ZXN0aW9uUmFua2luZ01vZGVsID0gbmV3IFF1ZXN0aW9uUmFua2luZ01vZGVsKG5hbWUpO1xuICBxLmNob2ljZXMgPSBRdWVzdGlvbkZhY3RvcnkuRGVmYXVsdENob2ljZXM7XG4gIHJldHVybiBxO1xufSk7XG4iLCJpbXBvcnQgeyBJdGVtVmFsdWUgfSBmcm9tIFwiLi9pdGVtdmFsdWVcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IExvY2FsaXphYmxlU3RyaW5nIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcbmltcG9ydCB7IENzc0NsYXNzQnVpbGRlciB9IGZyb20gXCIuL3V0aWxzL2Nzc0NsYXNzQnVpbGRlclwiO1xuXG4vKipcbiAqIEEgTW9kZWwgZm9yIGEgcmF0aW5nIHF1ZXN0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25SYXRpbmdNb2RlbCBleHRlbmRzIFF1ZXN0aW9uIHtcbiAgcmF0ZVZhbHVlc0NoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgICB0aGlzLmNyZWF0ZUl0ZW1WYWx1ZXMoXCJyYXRlVmFsdWVzXCIpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwicmF0ZVZhbHVlc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgIHNlbGYuZmlyZUNhbGxiYWNrKHNlbGYucmF0ZVZhbHVlc0NoYW5nZWRDYWxsYmFjayk7XG4gICAgfSk7XG4gICAgdGhpcy5vblByb3BlcnR5Q2hhbmdlZC5hZGQoZnVuY3Rpb24oc2VuZGVyOiBhbnksIG9wdGlvbnM6IGFueSkge1xuICAgICAgaWYgKFxuICAgICAgICBvcHRpb25zLm5hbWUgPT0gXCJyYXRlTWluXCIgfHxcbiAgICAgICAgb3B0aW9ucy5uYW1lID09IFwicmF0ZU1heFwiIHx8XG4gICAgICAgIG9wdGlvbnMubmFtZSA9PSBcInJhdGVTdGVwXCJcbiAgICAgICkge1xuICAgICAgICBzZWxmLmZpcmVDYWxsYmFjayhzZWxmLnJhdGVWYWx1ZXNDaGFuZ2VkQ2FsbGJhY2spO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIGxvY01pblJhdGVEZXNjcmlwdGlvblZhbHVlID0gdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcbiAgICAgIFwibWluUmF0ZURlc2NyaXB0aW9uXCIsXG4gICAgICB0aGlzLFxuICAgICAgdHJ1ZVxuICAgICk7XG4gICAgdmFyIGxvY01heFJhdGVEZXNjcmlwdGlvblZhbHVlID0gdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcbiAgICAgIFwibWF4UmF0ZURlc2NyaXB0aW9uXCIsXG4gICAgICB0aGlzLFxuICAgICAgdHJ1ZVxuICAgICk7XG4gICAgbG9jTWluUmF0ZURlc2NyaXB0aW9uVmFsdWUub25HZXRUZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgICByZXR1cm4gdGV4dCA/IHRleHQgKyBcIiBcIiA6IHRleHQ7XG4gICAgfTtcbiAgICBsb2NNYXhSYXRlRGVzY3JpcHRpb25WYWx1ZS5vbkdldFRleHRDYWxsYmFjayA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgIHJldHVybiB0ZXh0ID8gXCIgXCIgKyB0ZXh0IDogdGV4dDtcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBvblN1cnZleUxvYWQoKSB7XG4gICAgc3VwZXIub25TdXJ2ZXlMb2FkKCk7XG4gICAgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5yYXRlVmFsdWVzQ2hhbmdlZENhbGxiYWNrKTtcbiAgfVxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgcmF0ZSBpdGVtcy4gRXZlcnkgaXRlbSBoYXMgdmFsdWUgYW5kIHRleHQuIElmIHRleHQgaXMgZW1wdHksIHRoZSB2YWx1ZSBpcyByZW5kZXJlZC4gVGhlIGl0ZW0gdGV4dCBzdXBwb3J0cyBtYXJrZG93bi4gSWYgaXQgaXMgZW1wdHkgdGhlIGFycmF5IGlzIGdlbmVyYXRlZCBieSB1c2luZyByYXRlTWluLCByYXRlTWF4IGFuZCByYXRlU3RlcCBwcm9wZXJ0aWVzLlxuICAgKiBAc2VlIHJhdGVNaW5cbiAgICogQHNlZSByYXRlTWF4XG4gICAqIEBzZWUgcmF0ZVN0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXQgcmF0ZVZhbHVlcygpOiBBcnJheTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicmF0ZVZhbHVlc1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHJhdGVWYWx1ZXModmFsOiBBcnJheTxhbnk+KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmF0ZVZhbHVlc1wiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGlzIHByb3BlcnR5IGlzIHVzZWQgdG8gZ2VuZXJhdGUgcmF0ZSB2YWx1ZXMgaWYgcmF0ZVZhbHVlcyBhcnJheSBpcyBlbXB0eS4gSXQgaXMgdGhlIGZpcnN0IHZhbHVlIGluIHRoZSByYXRpbmcuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEuXG4gICAqIEBzZWUgcmF0ZVZhbHVlc1xuICAgKiBAc2VlIHJhdGVNYXhcbiAgICogQHNlZSByYXRlU3RlcFxuICAgKi9cbiAgcHVibGljIGdldCByYXRlTWluKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJhdGVNaW5cIik7XG4gIH1cbiAgcHVibGljIHNldCByYXRlTWluKHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uICYmIHZhbCA+IHRoaXMucmF0ZU1heCAtIHRoaXMucmF0ZVN0ZXApXG4gICAgICB2YWwgPSB0aGlzLnJhdGVNYXggLSB0aGlzLnJhdGVTdGVwO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJhdGVNaW5cIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhpcyBwcm9wZXJ0eSBpcyB1c2VkIHRvIGdlbmVyYXRlIHJhdGUgdmFsdWVzIGlmIHJhdGVWYWx1ZXMgYXJyYXkgaXMgZW1wdHkuIEl0IGlzIHRoZSBsYXN0IHZhbHVlIGluIHRoZSByYXRpbmcuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDUuXG4gICAqIEBzZWUgcmF0ZVZhbHVlc1xuICAgKiBAc2VlIHJhdGVNaW5cbiAgICogQHNlZSByYXRlU3RlcFxuICAgKi9cbiAgcHVibGljIGdldCByYXRlTWF4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJhdGVNYXhcIik7XG4gIH1cbiAgcHVibGljIHNldCByYXRlTWF4KHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uICYmIHZhbCA8IHRoaXMucmF0ZU1pbiArIHRoaXMucmF0ZVN0ZXApXG4gICAgICB2YWwgPSB0aGlzLnJhdGVNaW4gKyB0aGlzLnJhdGVTdGVwO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJhdGVNYXhcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhpcyBwcm9wZXJ0eSBpcyB1c2VkIHRvIGdlbmVyYXRlIHJhdGUgdmFsdWVzIGlmIHJhdGVWYWx1ZXMgYXJyYXkgaXMgZW1wdHkuIEl0IGlzIHRoZSBzdGVwIHZhbHVlLiBUaGUgbnVtYmVyIG9mIHJhdGUgdmFsdWVzIGFyZSAocmF0ZU1heCAtIHJhdGVNaW4pIC8gcmF0ZVN0ZXAuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEuXG4gICAqIEBzZWUgcmF0ZVZhbHVlc1xuICAgKiBAc2VlIHJhdGVNaW5cbiAgICogQHNlZSByYXRlTWF4XG4gICAqL1xuICBwdWJsaWMgZ2V0IHJhdGVTdGVwKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJhdGVTdGVwXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmF0ZVN0ZXAodmFsOiBudW1iZXIpIHtcbiAgICBpZiAodmFsIDw9IDApIHZhbCA9IDE7XG4gICAgaWYgKCF0aGlzLmlzTG9hZGluZ0Zyb21Kc29uICYmIHZhbCA+IHRoaXMucmF0ZU1heCAtIHRoaXMucmF0ZU1pbilcbiAgICAgIHZhbCA9IHRoaXMucmF0ZU1heCAtIHRoaXMucmF0ZU1pbjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyYXRlU3RlcFwiLCB2YWwpO1xuICB9XG4gIHByb3RlY3RlZCBnZXREaXNwbGF5VmFsdWVDb3JlKGtleXNBc1RleHQ6IGJvb2xlYW4sIHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIHZhciByZXMgPSBJdGVtVmFsdWUuZ2V0VGV4dE9ySHRtbEJ5VmFsdWUodGhpcy52aXNpYmxlUmF0ZVZhbHVlcywgdmFsdWUpO1xuICAgIHJldHVybiAhIXJlcyA/IHJlcyA6IHZhbHVlO1xuICB9XG4gIGdldCB2aXNpYmxlUmF0ZVZhbHVlcygpOiBJdGVtVmFsdWVbXSB7XG4gICAgaWYgKHRoaXMucmF0ZVZhbHVlcy5sZW5ndGggPiAwKSByZXR1cm4gdGhpcy5yYXRlVmFsdWVzO1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnJhdGVNaW47XG4gICAgdmFyIHN0ZXAgPSB0aGlzLnJhdGVTdGVwO1xuICAgIHdoaWxlIChcbiAgICAgIHZhbHVlIDw9IHRoaXMucmF0ZU1heCAmJlxuICAgICAgcmVzLmxlbmd0aCA8IHNldHRpbmdzLnJhdGluZ01heGltdW1SYXRlVmFsdWVDb3VudFxuICAgICkge1xuICAgICAgcmVzLnB1c2gobmV3IEl0ZW1WYWx1ZSh2YWx1ZSkpO1xuICAgICAgdmFsdWUgPSB0aGlzLmNvcnJlY3RWYWx1ZSh2YWx1ZSArIHN0ZXAsIHN0ZXApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgY29ycmVjdFZhbHVlKHZhbHVlOiBudW1iZXIsIHN0ZXA6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHZhbHVlO1xuICAgIGlmIChNYXRoLnJvdW5kKHZhbHVlKSA9PSB2YWx1ZSkgcmV0dXJuIHZhbHVlO1xuICAgIHZhciBmciA9IDA7XG4gICAgd2hpbGUgKE1hdGgucm91bmQoc3RlcCkgIT0gc3RlcCkge1xuICAgICAgc3RlcCAqPSAxMDtcbiAgICAgIGZyKys7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlLnRvRml4ZWQoZnIpKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInJhdGluZ1wiO1xuICB9XG4gIHByb3RlY3RlZCBnZXRGaXJzdElucHV0RWxlbWVudElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRJZCArIFwiXzBcIjtcbiAgfVxuICBzdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgc3VwcG9ydENvbW1lbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHVibGljIHN1cHBvcnRPdGhlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIG1pbmltdW0gKGZpcnN0KSBpdGVtLlxuICAgKi9cbiAgcHVibGljIGdldCBtaW5SYXRlRGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJtaW5SYXRlRGVzY3JpcHRpb25cIik7XG4gIH1cbiAgcHVibGljIHNldCBtaW5SYXRlRGVzY3JpcHRpb24odmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcIm1pblJhdGVEZXNjcmlwdGlvblwiLCB2YWwpO1xuICB9XG4gIGdldCBsb2NNaW5SYXRlRGVzY3JpcHRpb24oKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwibWluUmF0ZURlc2NyaXB0aW9uXCIpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgbWF4aW11bSAobGFzdCkgaXRlbS5cbiAgICovXG4gIHB1YmxpYyBnZXQgbWF4UmF0ZURlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibWF4UmF0ZURlc2NyaXB0aW9uXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4UmF0ZURlc2NyaXB0aW9uKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJtYXhSYXRlRGVzY3JpcHRpb25cIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jTWF4UmF0ZURlc2NyaXB0aW9uKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcIm1heFJhdGVEZXNjcmlwdGlvblwiKTtcbiAgfVxuICBwcm90ZWN0ZWQgdmFsdWVUb0RhdGEodmFsOiBhbnkpOiBhbnkge1xuICAgIGlmICh0aGlzLnJhdGVWYWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgdmFyIGl0ZW0gPSBJdGVtVmFsdWUuZ2V0SXRlbUJ5VmFsdWUodGhpcy5yYXRlVmFsdWVzLCB2YWwpO1xuICAgICAgcmV0dXJuICEhaXRlbSA/IGl0ZW0udmFsdWUgOiB2YWw7XG4gICAgfVxuICAgIHJldHVybiAhaXNOYU4odmFsKSA/IHBhcnNlRmxvYXQodmFsKSA6IHZhbDtcbiAgfVxuICAvKipcbiAgICogQ2xpY2sgdmFsdWUgYWdhaW4gdG8gY2xlYXIuXG4gICAqL1xuICBwdWJsaWMgc2V0VmFsdWVGcm9tQ2xpY2sodmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLnZhbHVlID09PSBwYXJzZUZsb2F0KHZhbHVlKSkge1xuICAgICAgdGhpcy5jbGVhclZhbHVlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldEl0ZW1DbGFzcyhpdGVtOiBJdGVtVmFsdWUpIHtcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gdGhpcy52YWx1ZSA9PSBpdGVtLnZhbHVlO1xuICAgIGNvbnN0IGlzRGlzYWJsZWQgPSB0aGlzLmlzUmVhZE9ubHkgJiYgIWl0ZW0uaXNFbmFibGVkO1xuICAgIGNvbnN0IGFsbG93SG92ZXIgPSAhaXNEaXNhYmxlZCAmJiAhaXNTZWxlY3RlZCAmJiAhKCEhdGhpcy5zdXJ2ZXkgJiYgdGhpcy5zdXJ2ZXkuaXNEZXNpZ25Nb2RlKTtcblxuICAgIHJldHVybiBuZXcgQ3NzQ2xhc3NCdWlsZGVyKClcbiAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLml0ZW0pXG4gICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5zZWxlY3RlZCwgdGhpcy52YWx1ZSA9PSBpdGVtLnZhbHVlKVxuICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuaXRlbURpc2FibGVkLCB0aGlzLmlzUmVhZE9ubHkpXG4gICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5pdGVtSG92ZXIsIGFsbG93SG92ZXIpXG4gICAgICAudG9TdHJpbmcoKTtcbiAgfVxufVxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJyYXRpbmdcIixcbiAgW1xuICAgIHsgbmFtZTogXCJoYXNDb21tZW50OnN3aXRjaFwiLCBsYXlvdXQ6IFwicm93XCIgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImNvbW1lbnRUZXh0XCIsXG4gICAgICBkZXBlbmRzT246IFwiaGFzQ29tbWVudFwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gb2JqLmhhc0NvbW1lbnQ7XG4gICAgICB9LFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0NvbW1lbnRUZXh0XCIsXG4gICAgICBsYXlvdXQ6IFwicm93XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInJhdGVWYWx1ZXM6aXRlbXZhbHVlW11cIixcbiAgICAgIGJhc2VWYWx1ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiY2hvaWNlc19JdGVtXCIpO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJyYXRlTWluOm51bWJlclwiLCBkZWZhdWx0OiAxIH0sXG4gICAgeyBuYW1lOiBcInJhdGVNYXg6bnVtYmVyXCIsIGRlZmF1bHQ6IDUgfSxcbiAgICB7IG5hbWU6IFwicmF0ZVN0ZXA6bnVtYmVyXCIsIGRlZmF1bHQ6IDEsIG1pblZhbHVlOiAwLjEgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIm1pblJhdGVEZXNjcmlwdGlvblwiLFxuICAgICAgYWx0ZXJuYXRpdmVOYW1lOiBcIm1pbmludW1SYXRlRGVzY3JpcHRpb25cIixcbiAgICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NNaW5SYXRlRGVzY3JpcHRpb25cIixcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwibWF4UmF0ZURlc2NyaXB0aW9uXCIsXG4gICAgICBhbHRlcm5hdGl2ZU5hbWU6IFwibWF4aW11bVJhdGVEZXNjcmlwdGlvblwiLFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY01heFJhdGVEZXNjcmlwdGlvblwiLFxuICAgIH0sXG4gIF0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25SYXRpbmdNb2RlbChcIlwiKTtcbiAgfSxcbiAgXCJxdWVzdGlvblwiXG4pO1xuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJyYXRpbmdcIiwgKG5hbWUpID0+IHtcbiAgcmV0dXJuIG5ldyBRdWVzdGlvblJhdGluZ01vZGVsKG5hbWUpO1xufSk7XG4iLCJpbXBvcnQgeyBwcm9wZXJ0eSwgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IFNpZ25hdHVyZVBhZCBmcm9tIFwic2lnbmF0dXJlX3BhZFwiO1xuaW1wb3J0IHsgQ3NzQ2xhc3NCdWlsZGVyIH0gZnJvbSBcIi4vdXRpbHMvY3NzQ2xhc3NCdWlsZGVyXCI7XG5cbnZhciBkZWZhdWx0V2lkdGggPSAzMDA7XG52YXIgZGVmYXVsdEhlaWdodCA9IDIwMDtcblxuZnVuY3Rpb24gcmVzaXplQ2FudmFzKGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQpIHtcbiAgdmFyIGNvbnRleHQ6IGFueSA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gIHZhciBkZXZpY2VQaXhlbFJhdGlvID0gd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbiAgdmFyIGJhY2tpbmdTdG9yZVJhdGlvID1cbiAgICBjb250ZXh0LndlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICBjb250ZXh0Lm1vekJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICBjb250ZXh0Lm1zQmFja2luZ1N0b3JlUGl4ZWxSYXRpbyB8fFxuICAgIGNvbnRleHQub0JhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICBjb250ZXh0LmJhY2tpbmdTdG9yZVBpeGVsUmF0aW8gfHxcbiAgICAxO1xuXG4gIHZhciByYXRpbyA9IGRldmljZVBpeGVsUmF0aW8gLyBiYWNraW5nU3RvcmVSYXRpbztcblxuICB2YXIgb2xkV2lkdGggPSBjYW52YXMud2lkdGg7XG4gIHZhciBvbGRIZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuXG4gIGNhbnZhcy53aWR0aCA9IG9sZFdpZHRoICogcmF0aW87XG4gIGNhbnZhcy5oZWlnaHQgPSBvbGRIZWlnaHQgKiByYXRpbztcblxuICBjYW52YXMuc3R5bGUud2lkdGggPSBvbGRXaWR0aCArIFwicHhcIjtcbiAgY2FudmFzLnN0eWxlLmhlaWdodCA9IG9sZEhlaWdodCArIFwicHhcIjtcblxuICBjb250ZXh0LnNjYWxlKHJhdGlvLCByYXRpbyk7XG59XG5cbi8qKlxuICogQSBNb2RlbCBmb3Igc2lnbmF0dXJlIHBhZCBxdWVzdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uU2lnbmF0dXJlUGFkTW9kZWwgZXh0ZW5kcyBRdWVzdGlvbiB7XG4gIEBwcm9wZXJ0eSh7IGRlZmF1bHRWYWx1ZTogZmFsc2UgfSkgaXNEcmF3aW5nVmFsdWU6IGJvb2xlYW47XG4gIHByb3RlY3RlZCBnZXRDc3NSb290KGNzc0NsYXNzZXM6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBDc3NDbGFzc0J1aWxkZXIoKVxuICAgICAgLmFwcGVuZChzdXBlci5nZXRDc3NSb290KGNzc0NsYXNzZXMpKVxuICAgICAgLmFwcGVuZChjc3NDbGFzc2VzLnNtYWxsLCB0aGlzLndpZHRoLnRvU3RyaW5nKCkgPT09IFwiMzAwXCIpXG4gICAgICAudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVWYWx1ZSgpIHtcbiAgICBpZiAodGhpcy5zaWduYXR1cmVQYWQpIHtcbiAgICAgIHZhciBkYXRhID0gdGhpcy5zaWduYXR1cmVQYWQudG9EYXRhVVJMKHRoaXMuZGF0YUZvcm1hdCk7XG4gICAgICB0aGlzLnZhbHVlID0gZGF0YTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihuYW1lKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInNpZ25hdHVyZXBhZFwiO1xuICB9XG4gIHB1YmxpYyBhZnRlclJlbmRlclF1ZXN0aW9uRWxlbWVudChlbDogSFRNTEVsZW1lbnQpIHtcbiAgICBpZiAoISFlbCkge1xuICAgICAgdGhpcy5pbml0U2lnbmF0dXJlUGFkKGVsKTtcbiAgICB9XG4gICAgc3VwZXIuYWZ0ZXJSZW5kZXJRdWVzdGlvbkVsZW1lbnQoZWwpO1xuICB9XG4gIHB1YmxpYyBiZWZvcmVEZXN0cm95UXVlc3Rpb25FbGVtZW50KGVsOiBIVE1MRWxlbWVudCkge1xuICAgIGlmICghIWVsKSB7XG4gICAgICB0aGlzLmRlc3Ryb3lTaWduYXR1cmVQYWQoZWwpO1xuICAgIH1cbiAgfVxuXG4gIGluaXRTaWduYXR1cmVQYWQoZWw6IEhUTUxFbGVtZW50KSB7XG4gICAgdmFyIGNhbnZhczogYW55ID0gZWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJjYW52YXNcIilbMF07XG4gICAgdmFyIGJ1dHRvbkVsID0gZWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJidXR0b25cIilbMF07XG4gICAgdmFyIHNpZ25hdHVyZVBhZCA9IG5ldyBTaWduYXR1cmVQYWQoY2FudmFzLCB7IGJhY2tncm91bmRDb2xvcjogXCIjZmZmZmZmXCIgfSk7XG4gICAgaWYgKHRoaXMuaXNJbnB1dFJlYWRPbmx5KSB7XG4gICAgICBzaWduYXR1cmVQYWQub2ZmKCk7XG4gICAgfVxuXG4gICAgYnV0dG9uRWwub25jbGljayA9ICgpID0+IHtcbiAgICAgIHRoaXMudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgfTtcblxuICAgIHRoaXMucmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuYWxsb3dDbGVhciB8fCB0aGlzLmlzSW5wdXRSZWFkT25seSkge1xuICAgICAgICBzaWduYXR1cmVQYWQub2ZmKCk7XG4gICAgICAgIGJ1dHRvbkVsLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNpZ25hdHVyZVBhZC5vbigpO1xuICAgICAgICBidXR0b25FbC5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBzaWduYXR1cmVQYWQucGVuQ29sb3IgPSB0aGlzLnBlbkNvbG9yO1xuICAgIHNpZ25hdHVyZVBhZC5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmJhY2tncm91bmRDb2xvcjtcbiAgICBzaWduYXR1cmVQYWQub25CZWdpbiA9ICgpID0+IHtcbiAgICAgIHRoaXMuaXNEcmF3aW5nVmFsdWUgPSB0cnVlO1xuICAgICAgY2FudmFzLmZvY3VzKCk7XG4gICAgfTtcbiAgICBzaWduYXR1cmVQYWQub25FbmQgPSAoKSA9PiB7XG4gICAgICB0aGlzLmlzRHJhd2luZ1ZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XG4gICAgfTtcbiAgICB2YXIgdXBkYXRlVmFsdWVIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLnZhbHVlO1xuICAgICAgY2FudmFzLndpZHRoID0gdGhpcy53aWR0aCB8fCBkZWZhdWx0V2lkdGg7XG4gICAgICBjYW52YXMuaGVpZ2h0ID0gdGhpcy5oZWlnaHQgfHwgZGVmYXVsdEhlaWdodDtcbiAgICAgIHJlc2l6ZUNhbnZhcyhjYW52YXMpO1xuICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIHNpZ25hdHVyZVBhZC5jbGVhcigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2lnbmF0dXJlUGFkLmZyb21EYXRhVVJMKGRhdGEpO1xuICAgICAgfVxuICAgIH07XG4gICAgdXBkYXRlVmFsdWVIYW5kbGVyKCk7XG4gICAgdGhpcy5yZWFkT25seUNoYW5nZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuc2lnbmF0dXJlUGFkID0gc2lnbmF0dXJlUGFkO1xuICAgIHZhciBwcm9wZXJ0eUNoYW5nZWRIYW5kbGVyID0gKHNlbmRlcjogYW55LCBvcHRpb25zOiBhbnkpID0+IHtcbiAgICAgIGlmIChvcHRpb25zLm5hbWUgPT09IFwid2lkdGhcIiB8fCBvcHRpb25zLm5hbWUgPT09IFwiaGVpZ2h0XCIpIHtcbiAgICAgICAgdXBkYXRlVmFsdWVIYW5kbGVyKCk7XG4gICAgICB9XG4gICAgICBpZihvcHRpb25zLm5hbWUgPT09IFwidmFsdWVcIikge1xuICAgICAgICB1cGRhdGVWYWx1ZUhhbmRsZXIoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMub25Qcm9wZXJ0eUNoYW5nZWQuYWRkKHByb3BlcnR5Q2hhbmdlZEhhbmRsZXIpO1xuICAgIHRoaXMuc2lnbmF0dXJlUGFkLnByb3BlcnR5Q2hhbmdlZEhhbmRsZXIgPSBwcm9wZXJ0eUNoYW5nZWRIYW5kbGVyO1xuICB9XG4gIGRlc3Ryb3lTaWduYXR1cmVQYWQoZWw6IEhUTUxFbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuc2lnbmF0dXJlUGFkKSB7XG4gICAgICB0aGlzLm9uUHJvcGVydHlDaGFuZ2VkLnJlbW92ZSh0aGlzLnNpZ25hdHVyZVBhZC5wcm9wZXJ0eUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuc2lnbmF0dXJlUGFkLm9mZigpO1xuICAgIH1cbiAgICB0aGlzLnJlYWRPbmx5Q2hhbmdlZENhbGxiYWNrID0gbnVsbDtcbiAgICB0aGlzLnNpZ25hdHVyZVBhZCA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogVXNlIGl0IHRvIHNldCB0aGUgc3BlY2lmaWMgZGF0YUZvcm1hdCBmb3IgdGhlIHNpZ25hdHVyZSBwYWQgaW1hZ2UgZGF0YS5cbiAgICogZm9ybWF0czogXCJcIiAoZGVmYXVsdCkgLSBwbmcsIFwiaW1hZ2UvanBlZ1wiIC0ganBlZywgXCJpbWFnZS9zdmcreG1sXCIgLSBzdmdcbiAgICovXG4gIEBwcm9wZXJ0eSh7IGRlZmF1bHRWYWx1ZTogXCJcIiB9KSBkYXRhRm9ybWF0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVzZSBpdCB0byBzZXQgdGhlIHNwZWNpZmljIHdpZHRoIGZvciB0aGUgc2lnbmF0dXJlIHBhZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgd2lkdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwid2lkdGhcIik7XG4gIH1cbiAgcHVibGljIHNldCB3aWR0aCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIndpZHRoXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSBpdCB0byBzZXQgdGhlIHNwZWNpZmljIGhlaWdodCBmb3IgdGhlIHNpZ25hdHVyZSBwYWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGhlaWdodCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJoZWlnaHRcIik7XG4gIH1cbiAgcHVibGljIHNldCBoZWlnaHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJoZWlnaHRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVXNlIGl0IHRvIGNsZWFyIGNvbnRlbnQgb2YgdGhlIHNpZ25hdHVyZSBwYWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFsbG93Q2xlYXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImFsbG93Q2xlYXJcIik7XG4gIH1cbiAgcHVibGljIHNldCBhbGxvd0NsZWFyKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImFsbG93Q2xlYXJcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVXNlIGl0IHRvIHNldCBwZW4gY29sb3IgZm9yIHRoZSBzaWduYXR1cmUgcGFkLlxuICAgKi9cbiAgcHVibGljIGdldCBwZW5Db2xvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJwZW5Db2xvclwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHBlbkNvbG9yKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGVuQ29sb3JcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVXNlIGl0IHRvIHNldCBiYWNrZ3JvdW5kIGNvbG9yIGZvciB0aGUgc2lnbmF0dXJlIHBhZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgYmFja2dyb3VuZENvbG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImJhY2tncm91bmRDb2xvclwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGJhY2tncm91bmRDb2xvcih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImJhY2tncm91bmRDb2xvclwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgY2xlYXIgc2lnbmF0dXJlIGJ1dHRvbiBjYXB0aW9uLlxuICAgKi9cbiAgZ2V0IGNsZWFyQnV0dG9uQ2FwdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiY2xlYXJDYXB0aW9uXCIpO1xuICB9XG5cbiAgcHVibGljIG5lZWRTaG93UGxhY2Vob2xkZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmlzRHJhd2luZ1ZhbHVlICYmIHRoaXMuaXNFbXB0eSgpO1xuICB9XG5cbiAgZ2V0IHBsYWNlSG9sZGVyVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwic2lnbmF0dXJlUGxhY2VIb2xkZXJcIik7XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJzaWduYXR1cmVwYWRcIixcbiAgW1xuICAgIHtcbiAgICAgIG5hbWU6IFwid2lkdGg6bnVtYmVyXCIsXG4gICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICBkZWZhdWx0OiAzMDAsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImhlaWdodDpudW1iZXJcIixcbiAgICAgIGNhdGVnb3J5OiBcImdlbmVyYWxcIixcbiAgICAgIGRlZmF1bHQ6IDIwMCxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiYWxsb3dDbGVhcjpib29sZWFuXCIsXG4gICAgICBjYXRlZ29yeTogXCJnZW5lcmFsXCIsXG4gICAgICBkZWZhdWx0OiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJwZW5Db2xvcjpjb2xvclwiLFxuICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgZGVmYXVsdDogXCIjMWFiMzk0XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImJhY2tncm91bmRDb2xvcjpjb2xvclwiLFxuICAgICAgY2F0ZWdvcnk6IFwiZ2VuZXJhbFwiLFxuICAgICAgZGVmYXVsdDogXCIjZmZmZmZmXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImRhdGFGb3JtYXRcIixcbiAgICAgIGNhdGVnb3J5OiBcImdlbmVyYWxcIixcbiAgICAgIGRlZmF1bHQ6IFwiXCIsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIHsgdmFsdWU6IFwiXCIsIHRleHQ6IFwiUE5HXCIgfSxcbiAgICAgICAgeyB2YWx1ZTogXCJpbWFnZS9qcGVnXCIsIHRleHQ6IFwiSlBFR1wiIH0sXG4gICAgICAgIHsgdmFsdWU6IFwiaW1hZ2Uvc3ZnK3htbFwiLCB0ZXh0OiBcIlNWR1wiIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAgeyBuYW1lOiBcImRlZmF1bHRWYWx1ZVwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJjb3JyZWN0QW5zd2VyXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gIF0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25TaWduYXR1cmVQYWRNb2RlbChcIlwiKTtcbiAgfSxcbiAgXCJxdWVzdGlvblwiXG4pO1xuUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnJlZ2lzdGVyUXVlc3Rpb24oXCJzaWduYXR1cmVwYWRcIiwgKG5hbWUpID0+IHtcbiAgcmV0dXJuIG5ldyBRdWVzdGlvblNpZ25hdHVyZVBhZE1vZGVsKG5hbWUpO1xufSk7XG4iLCJpbXBvcnQgeyBRdWVzdGlvbkZhY3RvcnkgfSBmcm9tIFwiLi9xdWVzdGlvbmZhY3RvcnlcIjtcbmltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBMb2NhbGl6YWJsZVN0cmluZywgTG9jYWxpemFibGVTdHJpbmdzIH0gZnJvbSBcIi4vbG9jYWxpemFibGVzdHJpbmdcIjtcbmltcG9ydCB7IEhlbHBlcnMsIEhhc2hUYWJsZSB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7IEVtYWlsVmFsaWRhdG9yLCBTdXJ2ZXlWYWxpZGF0b3IgfSBmcm9tIFwiLi92YWxpZGF0b3JcIjtcbmltcG9ydCB7IFN1cnZleUVycm9yIH0gZnJvbSBcIi4vc3VydmV5LWVycm9yXCI7XG5pbXBvcnQgeyBzdXJ2ZXlMb2NhbGl6YXRpb24gfSBmcm9tIFwiLi9zdXJ2ZXlTdHJpbmdzXCI7XG5pbXBvcnQgeyBDdXN0b21FcnJvciB9IGZyb20gXCIuL2Vycm9yXCI7XG5pbXBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCIuL3NldHRpbmdzXCI7XG5pbXBvcnQgeyBRdWVzdGlvblRleHRCYXNlIH0gZnJvbSBcIi4vcXVlc3Rpb25fdGV4dGJhc2VcIjtcbmltcG9ydCB7IENzc0NsYXNzQnVpbGRlciB9IGZyb20gXCIuL3V0aWxzL2Nzc0NsYXNzQnVpbGRlclwiO1xuXG4vKipcbiAqIEEgTW9kZWwgZm9yIGFuIGlucHV0IHRleHQgcXVlc3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWVzdGlvblRleHRNb2RlbCBleHRlbmRzIFF1ZXN0aW9uVGV4dEJhc2Uge1xuICBwcml2YXRlIGxvY0RhdGFMaXN0VmFsdWU6IExvY2FsaXphYmxlU3RyaW5ncztcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcIm1pbkVycm9yVGV4dFwiLCB0aGlzLCB0cnVlKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwibWF4RXJyb3JUZXh0XCIsIHRoaXMsIHRydWUpO1xuICAgIHRoaXMubG9jRGF0YUxpc3RWYWx1ZSA9IG5ldyBMb2NhbGl6YWJsZVN0cmluZ3ModGhpcyk7XG4gICAgdGhpcy5sb2NEYXRhTGlzdFZhbHVlLm9uVmFsdWVDaGFuZ2VkID0gKG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBhbnkpID0+IHtcbiAgICAgIHRoaXMucHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJkYXRhTGlzdFwiLCBvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0aWVzVmFsdWVDaGFuZ2VkKFxuICAgICAgW1wibWluXCIsIFwibWF4XCIsIFwiaW5wdXRUeXBlXCIsIFwibWluVmFsdWVFeHByZXNzaW9uXCIsIFwibWF4VmFsdWVFeHByZXNzaW9uXCJdLFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLnNldFJlbmRlcmVkTWluTWF4KCk7XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnRpZXNWYWx1ZUNoYW5nZWQoW1wiaW5wdXRUeXBlXCIsIFwic2l6ZVwiXSwgKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVJbnB1dFNpemUoKTtcbiAgICAgIHRoaXMuY2FsY1JlbmRlcmVkUGxhY2VIb2xkZXIoKTtcbiAgICB9KTtcbiAgfVxuICBwcm90ZWN0ZWQgaXNUZXh0VmFsdWUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFtcInRleHRcIiwgXCJudW1iZXJcIiwgXCJwYXNzd29yZFwiXS5pbmRleE9mKHRoaXMuaW5wdXRUeXBlKSA+IC0xO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwidGV4dFwiO1xuICB9XG4gIHB1YmxpYyBvblN1cnZleUxvYWQoKSB7XG4gICAgc3VwZXIub25TdXJ2ZXlMb2FkKCk7XG4gICAgdGhpcy5zZXRSZW5kZXJlZE1pbk1heCgpO1xuICAgIHRoaXMudXBkYXRlSW5wdXRTaXplKCk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBpbnB1dCB0eXBlLlxuICAgKi9cbiAgcHVibGljIGdldCBpbnB1dFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW5wdXRUeXBlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgaW5wdXRUeXBlKHZhbDogc3RyaW5nKSB7XG4gICAgdmFsID0gdmFsLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHZhbCA9PSBcImRhdGV0aW1lX2xvY2FsXCIpIHZhbCA9IFwiZGF0ZXRpbWUtbG9jYWxcIjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpbnB1dFR5cGVcIiwgdmFsLnRvTG93ZXJDYXNlKCkpO1xuICAgIGlmICghdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikge1xuICAgICAgdGhpcy5taW4gPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLm1heCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuc3RlcCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgcHVibGljIHJ1bkNvbmRpdGlvbih2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIHN1cGVyLnJ1bkNvbmRpdGlvbih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIGlmICghIXRoaXMubWluVmFsdWVFeHByZXNzaW9uIHx8ICEhdGhpcy5tYXhWYWx1ZUV4cHJlc3Npb24pIHtcbiAgICAgIHRoaXMuc2V0UmVuZGVyZWRNaW5NYXgodmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldFZhbGlkYXRvcnMoKTogQXJyYXk8U3VydmV5VmFsaWRhdG9yPiB7XG4gICAgdmFyIHZhbGlkYXRvcnMgPSBzdXBlci5nZXRWYWxpZGF0b3JzKCk7XG4gICAgaWYgKFxuICAgICAgdGhpcy5pbnB1dFR5cGUgPT09IFwiZW1haWxcIiAmJlxuICAgICAgIXRoaXMudmFsaWRhdG9ycy5zb21lKCh2KSA9PiB2LmdldFR5cGUoKSA9PT0gXCJlbWFpbHZhbGlkYXRvclwiKVxuICAgICkge1xuICAgICAgdmFsaWRhdG9ycy5wdXNoKG5ldyBFbWFpbFZhbGlkYXRvcigpKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkYXRvcnM7XG4gIH1cbiAgaXNMYXlvdXRUeXBlU3VwcG9ydGVkKGxheW91dFR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgdGV4dCBpbnB1dCBzaXplXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2l6ZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNpemUodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaXplXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBpc1RleHRJbnB1dCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgW1widGV4dFwiLCBcInNlYXJjaFwiLCBcInRlbFwiLCBcInVybFwiLCBcImVtYWlsXCIsIFwicGFzc3dvcmRcIl0uaW5kZXhPZihcbiAgICAgICAgdGhpcy5pbnB1dFR5cGVcbiAgICAgICkgPiAtMVxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCBpbnB1dFNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaW5wdXRTaXplXCIsIDApO1xuICB9XG4gIHB1YmxpYyBnZXQgaW5wdXRXaWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpbnB1dFdpZHRoXCIpO1xuICB9XG4gIHB1YmxpYyB1cGRhdGVJbnB1dFNpemUoKSB7XG4gICAgdmFyIHNpemUgPSB0aGlzLmlzVGV4dElucHV0ICYmIHRoaXMuc2l6ZSA+IDAgPyB0aGlzLnNpemUgOiAwO1xuICAgIGlmIChcbiAgICAgIHRoaXMuaXNUZXh0SW5wdXQgJiZcbiAgICAgIHNpemUgPCAxICYmXG4gICAgICB0aGlzLnBhcmVudCAmJlxuICAgICAgISEoPGFueT50aGlzLnBhcmVudClbXCJpdGVtU2l6ZVwiXVxuICAgICkge1xuICAgICAgc2l6ZSA9ICg8YW55PnRoaXMucGFyZW50KVtcIml0ZW1TaXplXCJdO1xuICAgIH1cbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpbnB1dFNpemVcIiwgc2l6ZSk7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaW5wdXRXaWR0aFwiLCBzaXplID4gMCA/IFwiYXV0b1wiIDogXCJcIik7XG4gIH1cbiAgLyoqXG4gICAqIFRleHQgYXV0byBjb21wbGV0ZVxuICAgKi9cbiAgcHVibGljIGdldCBhdXRvQ29tcGxldGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYXV0b0NvbXBsZXRlXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgYXV0b0NvbXBsZXRlKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYXV0b0NvbXBsZXRlXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1pbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtaW5cIik7XG4gIH1cbiAgcHVibGljIHNldCBtaW4odmFsOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5pc1ZhbHVlRXhwcmVzc2lvbih2YWwpKSB7XG4gICAgICB0aGlzLm1pblZhbHVlRXhwcmVzc2lvbiA9IHZhbC5zdWJzdHIoMSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1pblwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSB2YWx1ZVxuICAgKi9cbiAgcHVibGljIGdldCBtYXgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4KHZhbDogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUV4cHJlc3Npb24odmFsKSkge1xuICAgICAgdGhpcy5tYXhWYWx1ZUV4cHJlc3Npb24gPSB2YWwuc3Vic3RyKDEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtYXhcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIG1pbmltdW0gdmFsdWUgdGhhdCB5b3UgY2FuIHNldHVwIGFzIGV4cHJlc3Npb24sIGZvciBleGFtcGxlIHRvZGF5KC0xKSA9IHllc3RlcmRheTtcbiAgICovXG4gIHB1YmxpYyBnZXQgbWluVmFsdWVFeHByZXNzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1pblZhbHVlRXhwcmVzc2lvblwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1pblZhbHVlRXhwcmVzc2lvbih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1pblZhbHVlRXhwcmVzc2lvblwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSB2YWx1ZSB0aGF0IHlvdSBjYW4gc2V0dXAgYXMgZXhwcmVzc2lvbiwgZm9yIGV4YW1wbGUgdG9kYXkoMSkgPSB0b21vcnJvdztcbiAgICovXG4gIHB1YmxpYyBnZXQgbWF4VmFsdWVFeHByZXNzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1heFZhbHVlRXhwcmVzc2lvblwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1heFZhbHVlRXhwcmVzc2lvbih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heFZhbHVlRXhwcmVzc2lvblwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgcmVuZGVyZWRNaW4oKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicmVuZGVyZWRNaW5cIik7XG4gIH1cbiAgcHVibGljIGdldCByZW5kZXJlZE1heCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyZW5kZXJlZE1heFwiKTtcbiAgfVxuICAvKipcbiAgICogVGhlIHRleHQgdGhhdCBzaG93cyB3aGVuIHZhbHVlIGlzIGxlc3MgdGhhbiBtaW4gcHJvcGVydHkuXG4gICAqIEBzZWUgbWluXG4gICAqIEBzZWUgbWF4RXJyb3JUZXh0XG4gICAqL1xuICBwdWJsaWMgZ2V0IG1pbkVycm9yVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwibWluRXJyb3JUZXh0XCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwibWluRXJyb3JcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXQgbWluRXJyb3JUZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJtaW5FcnJvclRleHRcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jTWluRXJyb3JUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcIm1pbkVycm9yVGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogVGhlIHRleHQgdGhhdCBzaG93cyB3aGVuIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBtYW4gcHJvcGVydHkuXG4gICAqIEBzZWUgbWF4XG4gICAqIEBzZWUgbWluRXJyb3JUZXh0XG4gICAqL1xuICBwdWJsaWMgZ2V0IG1heEVycm9yVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcbiAgICAgIFwibWF4RXJyb3JUZXh0XCIsXG4gICAgICBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwibWF4RXJyb3JcIilcbiAgICApO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4RXJyb3JUZXh0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJtYXhFcnJvclRleHRcIiwgdmFsKTtcbiAgfVxuICBnZXQgbG9jTWF4RXJyb3JUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcIm1heEVycm9yVGV4dFwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkb25seSBwcm9wZXJ0eSB0aGF0IHJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBpbnB1dFR5cGUgYWxsb3dzIHRvIHNldCBtaW4gYW5kIG1heCBwcm9wZXJ0aWVzXG4gICAqIEBzZWUgaW5wdXRUeXBlXG4gICAqIEBzZWUgbWluXG4gICAqIEBzZWUgbWF4XG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzTWluTWF4VHlwZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbWluTWF4VHlwZXMuaW5kZXhPZih0aGlzLmlucHV0VHlwZSkgPiAtMTtcbiAgfVxuICBwcm90ZWN0ZWQgb25DaGVja0ZvckVycm9ycyhcbiAgICBlcnJvcnM6IEFycmF5PFN1cnZleUVycm9yPixcbiAgICBpc09uVmFsdWVDaGFuZ2VkOiBib29sZWFuXG4gICkge1xuICAgIHN1cGVyLm9uQ2hlY2tGb3JFcnJvcnMoZXJyb3JzLCBpc09uVmFsdWVDaGFuZ2VkKTtcbiAgICBpZiAoaXNPblZhbHVlQ2hhbmdlZCB8fCB0aGlzLmNhblNldFZhbHVlVG9TdXJ2ZXkoKSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmlzVmFsdWVMZXNzTWluKSB7XG4gICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgbmV3IEN1c3RvbUVycm9yKFxuICAgICAgICAgIHRoaXMuZ2V0TWluTWF4RXJyb3JUZXh0KFxuICAgICAgICAgICAgdGhpcy5taW5FcnJvclRleHQsXG4gICAgICAgICAgICB0aGlzLmdldENhbGN1bGF0ZWRNaW5NYXgodGhpcy5yZW5kZXJlZE1pbilcbiAgICAgICAgICApLFxuICAgICAgICAgIHRoaXNcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUdyZWF0ZXJNYXgpIHtcbiAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICBuZXcgQ3VzdG9tRXJyb3IoXG4gICAgICAgICAgdGhpcy5nZXRNaW5NYXhFcnJvclRleHQoXG4gICAgICAgICAgICB0aGlzLm1heEVycm9yVGV4dCxcbiAgICAgICAgICAgIHRoaXMuZ2V0Q2FsY3VsYXRlZE1pbk1heCh0aGlzLnJlbmRlcmVkTWF4KVxuICAgICAgICAgICksXG4gICAgICAgICAgdGhpc1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgY2FuU2V0VmFsdWVUb1N1cnZleSgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuaXNNaW5NYXhUeXBlKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAodGhpcy5pc1ZhbHVlTGVzc01pbikgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0aGlzLmlzVmFsdWVHcmVhdGVyTWF4KSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJpdmF0ZSBnZXRNaW5NYXhFcnJvclRleHQoZXJyb3JUZXh0OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICghdmFsdWUpIHJldHVybiBlcnJvclRleHQ7XG4gICAgcmV0dXJuIGVycm9yVGV4dC5yZXBsYWNlKFwiezB9XCIsIHZhbHVlLnRvU3RyaW5nKCkpO1xuICB9XG4gIHByaXZhdGUgZ2V0IGlzVmFsdWVMZXNzTWluKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAhdGhpcy5pc1ZhbHVlRW1wdHkodGhpcy5yZW5kZXJlZE1pbikgJiZcbiAgICAgIHRoaXMuZ2V0Q2FsY3VsYXRlZE1pbk1heCh0aGlzLnZhbHVlKSA8XG4gICAgICAgIHRoaXMuZ2V0Q2FsY3VsYXRlZE1pbk1heCh0aGlzLnJlbmRlcmVkTWluKVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaXNWYWx1ZUdyZWF0ZXJNYXgoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICF0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLnJlbmRlcmVkTWF4KSAmJlxuICAgICAgdGhpcy5nZXRDYWxjdWxhdGVkTWluTWF4KHRoaXMudmFsdWUpID5cbiAgICAgICAgdGhpcy5nZXRDYWxjdWxhdGVkTWluTWF4KHRoaXMucmVuZGVyZWRNYXgpXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGdldCBpc0RhdGVJbnB1dFR5cGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRUeXBlID09PSBcImRhdGVcIiB8fCB0aGlzLmlucHV0VHlwZSA9PT0gXCJkYXRldGltZS1sb2NhbFwiO1xuICB9XG4gIHByaXZhdGUgZ2V0Q2FsY3VsYXRlZE1pbk1heChtaW5NYXg6IGFueSk6IGFueSB7XG4gICAgaWYgKHRoaXMuaXNWYWx1ZUVtcHR5KG1pbk1heCkpIHJldHVybiBtaW5NYXg7XG4gICAgcmV0dXJuIHRoaXMuaXNEYXRlSW5wdXRUeXBlID8gbmV3IERhdGUobWluTWF4KSA6IG1pbk1heDtcbiAgfVxuICBwcml2YXRlIHNldFJlbmRlcmVkTWluTWF4KFxuICAgIHZhbHVlczogSGFzaFRhYmxlPGFueT4gPSBudWxsLFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+ID0gbnVsbFxuICApIHtcbiAgICB0aGlzLnNldFZhbHVlQW5kUnVuRXhwcmVzc2lvbihcbiAgICAgIHRoaXMubWluVmFsdWVFeHByZXNzaW9uLFxuICAgICAgdGhpcy5taW4sXG4gICAgICAodmFsKSA9PiB7XG4gICAgICAgIGlmICghdmFsICYmIHRoaXMuaXNEYXRlSW5wdXRUeXBlICYmICEhc2V0dGluZ3MubWluRGF0ZSkge1xuICAgICAgICAgIHZhbCA9IHNldHRpbmdzLm1pbkRhdGU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicmVuZGVyZWRNaW5cIiwgdmFsKTtcbiAgICAgIH0sXG4gICAgICB2YWx1ZXMsXG4gICAgICBwcm9wZXJ0aWVzXG4gICAgKTtcbiAgICB0aGlzLnNldFZhbHVlQW5kUnVuRXhwcmVzc2lvbihcbiAgICAgIHRoaXMubWF4VmFsdWVFeHByZXNzaW9uLFxuICAgICAgdGhpcy5tYXgsXG4gICAgICAodmFsKSA9PiB7XG4gICAgICAgIGlmICghdmFsICYmIHRoaXMuaXNEYXRlSW5wdXRUeXBlKSB7XG4gICAgICAgICAgdmFsID0gISFzZXR0aW5ncy5tYXhEYXRlID8gc2V0dGluZ3MubWF4RGF0ZSA6IFwiMjk5OS0xMi0zMVwiO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJlbmRlcmVkTWF4XCIsIHZhbCk7XG4gICAgICB9LFxuICAgICAgdmFsdWVzLFxuICAgICAgcHJvcGVydGllc1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHN0ZXAgdmFsdWVcbiAgICovXG4gIHB1YmxpYyBnZXQgc3RlcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzdGVwXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc3RlcCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInN0ZXBcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHJlbmRlcmVkU3RlcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLnN0ZXApID8gXCJhbnlcIiA6IHRoaXMuc3RlcDtcbiAgfVxuICBzdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpIHtcbiAgICByZXR1cm4gW1wiZGF0ZVwiLCBcImRhdGV0aW1lXCIsIFwiZGF0ZXRpbWUtbG9jYWxcIl0uaW5kZXhPZih0aGlzLmlucHV0VHlwZSkgPCAwO1xuICB9XG4gIHB1YmxpYyBzdXBwb3J0R29OZXh0UGFnZUVycm9yKCkge1xuICAgIHJldHVybiBbXCJkYXRlXCIsIFwiZGF0ZXRpbWVcIiwgXCJkYXRldGltZS1sb2NhbFwiXS5pbmRleE9mKHRoaXMuaW5wdXRUeXBlKSA8IDA7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIHJlY29tbWVuZGVkIG9wdGlvbnMgYXZhaWxhYmxlIHRvIGNob29zZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgZGF0YUxpc3QoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMubG9jRGF0YUxpc3QudmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCBkYXRhTGlzdCh2YWw6IEFycmF5PHN0cmluZz4pIHtcbiAgICB0aGlzLmxvY0RhdGFMaXN0LnZhbHVlID0gdmFsO1xuICB9XG4gIGdldCBsb2NEYXRhTGlzdCgpOiBMb2NhbGl6YWJsZVN0cmluZ3Mge1xuICAgIHJldHVybiB0aGlzLmxvY0RhdGFMaXN0VmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCBkYXRhTGlzdElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubG9jRGF0YUxpc3QuaGFzVmFsdWUoKSA/IHRoaXMuaWQgKyBcIl9kYXRhbGlzdFwiIDogXCJcIjtcbiAgfVxuICBwcm90ZWN0ZWQgY2FuUnVuVmFsaWRhdG9ycyhpc09uVmFsdWVDaGFuZ2VkOiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuZXJyb3JzLmxlbmd0aCA+IDAgfHxcbiAgICAgICFpc09uVmFsdWVDaGFuZ2VkIHx8XG4gICAgICB0aGlzLnN1cHBvcnRHb05leHRQYWdlRXJyb3IoKVxuICAgICk7XG4gIH1cbiAgcHJvdGVjdGVkIHNldE5ld1ZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBuZXdWYWx1ZSA9IHRoaXMuY29ycmVjdFZhbHVlVHlwZShuZXdWYWx1ZSk7XG4gICAgc3VwZXIuc2V0TmV3VmFsdWUobmV3VmFsdWUpO1xuICB9XG4gIHByb3RlY3RlZCBjb3JyZWN0VmFsdWVUeXBlKG5ld1ZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICghbmV3VmFsdWUpIHJldHVybiBuZXdWYWx1ZTtcbiAgICBpZiAodGhpcy5pbnB1dFR5cGUgPT0gXCJudW1iZXJcIiB8fCB0aGlzLmlucHV0VHlwZSA9PSBcInJhbmdlXCIpIHtcbiAgICAgIHJldHVybiBIZWxwZXJzLmlzTnVtYmVyKG5ld1ZhbHVlKSA/IHBhcnNlRmxvYXQobmV3VmFsdWUpIDogXCJcIjtcbiAgICB9XG4gICAgcmV0dXJuIG5ld1ZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBoYXNQbGFjZUhvbGRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuaXNSZWFkT25seSAmJiB0aGlzLmlucHV0VHlwZSAhPT0gXCJyYW5nZVwiO1xuICB9XG4gIHB1YmxpYyBpc1JlYWRPbmx5UmVuZGVyRGl2KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzUmVhZE9ubHkgJiYgc2V0dGluZ3MucmVhZE9ubHlUZXh0UmVuZGVyTW9kZSA9PT0gXCJkaXZcIjtcbiAgfVxuICBnZXQgaW5wdXRTdHlsZSgpOiBhbnkge1xuICAgIHZhciBzdHlsZTogYW55ID0ge307XG4gICAgaWYgKCEhdGhpcy5pbnB1dFdpZHRoKSB7XG4gICAgICBzdHlsZS53aWR0aCA9IHRoaXMuaW5wdXRXaWR0aDtcbiAgICB9XG4gICAgcmV0dXJuIHN0eWxlO1xuICB9XG59XG5cbmNvbnN0IG1pbk1heFR5cGVzID0gW1xuICBcIm51bWJlclwiLFxuICBcInJhbmdlXCIsXG4gIFwiZGF0ZVwiLFxuICBcImRhdGV0aW1lLWxvY2FsXCIsXG4gIFwibW9udGhcIixcbiAgXCJ0aW1lXCIsXG4gIFwid2Vla1wiLFxuXTtcblxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJ0ZXh0XCIsXG4gIFtcbiAgICB7XG4gICAgICBuYW1lOiBcImlucHV0VHlwZVwiLFxuICAgICAgZGVmYXVsdDogXCJ0ZXh0XCIsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIFwiY29sb3JcIixcbiAgICAgICAgXCJkYXRlXCIsXG4gICAgICAgIFwiZGF0ZXRpbWVcIixcbiAgICAgICAgXCJkYXRldGltZS1sb2NhbFwiLFxuICAgICAgICBcImVtYWlsXCIsXG4gICAgICAgIFwibW9udGhcIixcbiAgICAgICAgXCJudW1iZXJcIixcbiAgICAgICAgXCJwYXNzd29yZFwiLFxuICAgICAgICBcInJhbmdlXCIsXG4gICAgICAgIFwidGVsXCIsXG4gICAgICAgIFwidGV4dFwiLFxuICAgICAgICBcInRpbWVcIixcbiAgICAgICAgXCJ1cmxcIixcbiAgICAgICAgXCJ3ZWVrXCIsXG4gICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJzaXplOm51bWJlclwiLFxuICAgICAgbWluVmFsdWU6IDAsXG4gICAgICBkZXBlbmRzT246IFwiaW5wdXRUeXBlXCIsXG4gICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uKG9iajogYW55KSB7XG4gICAgICAgIGlmICghb2JqKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBvYmouaXNUZXh0SW5wdXQ7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJ0ZXh0VXBkYXRlTW9kZVwiLFxuICAgICAgZGVmYXVsdDogXCJkZWZhdWx0XCIsXG4gICAgICBjaG9pY2VzOiBbXCJkZWZhdWx0XCIsIFwib25CbHVyXCIsIFwib25UeXBpbmdcIl0sXG4gICAgICBkZXBlbmRzT246IFwiaW5wdXRUeXBlXCIsXG4gICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uKG9iajogYW55KSB7XG4gICAgICAgIGlmICghb2JqKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBvYmouaXNUZXh0SW5wdXQ7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJhdXRvQ29tcGxldGVcIixcbiAgICAgIGRhdGFMaXN0OiBbXG4gICAgICAgIFwibmFtZVwiLFxuICAgICAgICBcImhvbm9yaWZpYy1wcmVmaXhcIixcbiAgICAgICAgXCJnaXZlbi1uYW1lXCIsXG4gICAgICAgIFwiYWRkaXRpb25hbC1uYW1lXCIsXG4gICAgICAgIFwiZmFtaWx5LW5hbWVcIixcbiAgICAgICAgXCJob25vcmlmaWMtc3VmZml4XCIsXG4gICAgICAgIFwibmlja25hbWVcIixcbiAgICAgICAgXCJvcmdhbml6YXRpb24tdGl0bGVcIixcbiAgICAgICAgXCJ1c2VybmFtZVwiLFxuICAgICAgICBcIm5ldy1wYXNzd29yZFwiLFxuICAgICAgICBcImN1cnJlbnQtcGFzc3dvcmRcIixcbiAgICAgICAgXCJvcmdhbml6YXRpb25cIixcbiAgICAgICAgXCJzdHJlZXQtYWRkcmVzc1wiLFxuICAgICAgICBcImFkZHJlc3MtbGluZTFcIixcbiAgICAgICAgXCJhZGRyZXNzLWxpbmUyXCIsXG4gICAgICAgIFwiYWRkcmVzcy1saW5lM1wiLFxuICAgICAgICBcImFkZHJlc3MtbGV2ZWw0XCIsXG4gICAgICAgIFwiYWRkcmVzcy1sZXZlbDNcIixcbiAgICAgICAgXCJhZGRyZXNzLWxldmVsMlwiLFxuICAgICAgICBcImFkZHJlc3MtbGV2ZWwxXCIsXG4gICAgICAgIFwiY291bnRyeVwiLFxuICAgICAgICBcImNvdW50cnktbmFtZVwiLFxuICAgICAgICBcInBvc3RhbC1jb2RlXCIsXG4gICAgICAgIFwiY2MtbmFtZVwiLFxuICAgICAgICBcImNjLWdpdmVuLW5hbWVcIixcbiAgICAgICAgXCJjYy1hZGRpdGlvbmFsLW5hbWVcIixcbiAgICAgICAgXCJjYy1mYW1pbHktbmFtZVwiLFxuICAgICAgICBcImNjLW51bWJlclwiLFxuICAgICAgICBcImNjLWV4cFwiLFxuICAgICAgICBcImNjLWV4cC1tb250aFwiLFxuICAgICAgICBcImNjLWV4cC15ZWFyXCIsXG4gICAgICAgIFwiY2MtY3NjXCIsXG4gICAgICAgIFwiY2MtdHlwZVwiLFxuICAgICAgICBcInRyYW5zYWN0aW9uLWN1cnJlbmN5XCIsXG4gICAgICAgIFwidHJhbnNhY3Rpb24tYW1vdW50XCIsXG4gICAgICAgIFwibGFuZ3VhZ2VcIixcbiAgICAgICAgXCJiZGF5XCIsXG4gICAgICAgIFwiYmRheS1kYXlcIixcbiAgICAgICAgXCJiZGF5LW1vbnRoXCIsXG4gICAgICAgIFwiYmRheS15ZWFyXCIsXG4gICAgICAgIFwic2V4XCIsXG4gICAgICAgIFwidXJsXCIsXG4gICAgICAgIFwicGhvdG9cIixcbiAgICAgICAgXCJ0ZWxcIixcbiAgICAgICAgXCJ0ZWwtY291bnRyeS1jb2RlXCIsXG4gICAgICAgIFwidGVsLW5hdGlvbmFsXCIsXG4gICAgICAgIFwidGVsLWFyZWEtY29kZVwiLFxuICAgICAgICBcInRlbC1sb2NhbFwiLFxuICAgICAgICBcInRlbC1sb2NhbC1wcmVmaXhcIixcbiAgICAgICAgXCJ0ZWwtbG9jYWwtc3VmZml4XCIsXG4gICAgICAgIFwidGVsLWV4dGVuc2lvblwiLFxuICAgICAgICBcImVtYWlsXCIsXG4gICAgICAgIFwiaW1wcFwiLFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwibWluXCIsXG4gICAgICBkZXBlbmRzT246IFwiaW5wdXRUeXBlXCIsXG4gICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uKG9iajogYW55KSB7XG4gICAgICAgIHJldHVybiAhIW9iaiAmJiBvYmouaXNNaW5NYXhUeXBlO1xuICAgICAgfSxcbiAgICAgIG9uUHJvcGVydHlFZGl0b3JVcGRhdGU6IGZ1bmN0aW9uKG9iajogYW55LCBwcm9wZXJ0eUVkaXRvcjogYW55KSB7XG4gICAgICAgIHByb3BlcnR5RWRpdG9yLmlucHV0VHlwZSA9IG9iai5pbnB1dFR5cGU7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJtYXhcIixcbiAgICAgIGRlcGVuZHNPbjogXCJpbnB1dFR5cGVcIixcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24ob2JqOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuICEhb2JqICYmIG9iai5pc01pbk1heFR5cGU7XG4gICAgICB9LFxuICAgICAgb25Qcm9wZXJ0eUVkaXRvclVwZGF0ZTogZnVuY3Rpb24ob2JqOiBhbnksIHByb3BlcnR5RWRpdG9yOiBhbnkpIHtcbiAgICAgICAgcHJvcGVydHlFZGl0b3IuaW5wdXRUeXBlID0gb2JqLmlucHV0VHlwZTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIm1pblZhbHVlRXhwcmVzc2lvbjpleHByZXNzaW9uXCIsXG4gICAgICBjYXRlZ29yeTogXCJsb2dpY1wiLFxuICAgICAgZGVwZW5kc09uOiBcImlucHV0VHlwZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gISFvYmogJiYgb2JqLmlzTWluTWF4VHlwZTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIm1heFZhbHVlRXhwcmVzc2lvbjpleHByZXNzaW9uXCIsXG4gICAgICBjYXRlZ29yeTogXCJsb2dpY1wiLFxuICAgICAgZGVwZW5kc09uOiBcImlucHV0VHlwZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gISFvYmogJiYgb2JqLmlzTWluTWF4VHlwZTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIm1pbkVycm9yVGV4dFwiLFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY01pbkVycm9yVGV4dFwiLFxuICAgICAgZGVwZW5kc09uOiBcImlucHV0VHlwZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gISFvYmogJiYgb2JqLmlzTWluTWF4VHlwZTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIm1heEVycm9yVGV4dFwiLFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY01heEVycm9yVGV4dFwiLFxuICAgICAgZGVwZW5kc09uOiBcImlucHV0VHlwZVwiLFxuICAgICAgdmlzaWJsZUlmOiBmdW5jdGlvbihvYmo6IGFueSkge1xuICAgICAgICByZXR1cm4gISFvYmogJiYgb2JqLmlzTWluTWF4VHlwZTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcInN0ZXA6bnVtYmVyXCIsXG4gICAgICBkZXBlbmRzT246IFwiaW5wdXRUeXBlXCIsXG4gICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uKG9iajogYW55KSB7XG4gICAgICAgIGlmICghb2JqKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBvYmouaW5wdXRUeXBlID09PSBcIm51bWJlclwiO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwibWF4TGVuZ3RoOm51bWJlclwiLFxuICAgICAgZGVmYXVsdDogLTEsXG4gICAgICBkZXBlbmRzT246IFwiaW5wdXRUeXBlXCIsXG4gICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uKG9iajogYW55KSB7XG4gICAgICAgIGlmICghb2JqKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBvYmouaXNUZXh0SW5wdXQ7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJwbGFjZUhvbGRlclwiLFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1BsYWNlSG9sZGVyXCIsXG4gICAgICBkZXBlbmRzT246IFwiaW5wdXRUeXBlXCIsXG4gICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uKG9iajogYW55KSB7XG4gICAgICAgIGlmICghb2JqKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBvYmouaXNUZXh0SW5wdXQ7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJkYXRhTGlzdDpzdHJpbmdbXVwiLFxuICAgICAgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0RhdGFMaXN0XCIsXG4gICAgICBkZXBlbmRzT246IFwiaW5wdXRUeXBlXCIsXG4gICAgICB2aXNpYmxlSWY6IGZ1bmN0aW9uKG9iajogYW55KSB7XG4gICAgICAgIGlmICghb2JqKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBvYmouaW5wdXRUeXBlID09PSBcInRleHRcIjtcbiAgICAgIH0sXG4gICAgfSxcbiAgXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvblRleHRNb2RlbChcIlwiKTtcbiAgfSxcbiAgXCJ0ZXh0YmFzZVwiXG4pO1xuXG5RdWVzdGlvbkZhY3RvcnkuSW5zdGFuY2UucmVnaXN0ZXJRdWVzdGlvbihcInRleHRcIiwgKG5hbWUpID0+IHtcbiAgcmV0dXJuIG5ldyBRdWVzdGlvblRleHRNb2RlbChuYW1lKTtcbn0pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IFF1ZXN0aW9uRmFjdG9yeSB9IGZyb20gXCIuL3F1ZXN0aW9uZmFjdG9yeVwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7IENzc0NsYXNzQnVpbGRlciB9IGZyb20gXCIuL3V0aWxzL2Nzc0NsYXNzQnVpbGRlclwiO1xuXG4vKipcbiAqIEEgQmFzZSBNb2RlbCBmb3IgYSBjb21tZW50IGFuZCB0ZXh0IHF1ZXN0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25UZXh0QmFzZSBleHRlbmRzIFF1ZXN0aW9uIHtcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobmFtZSk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcInBsYWNlSG9sZGVyXCIsIHRoaXMpO1xuICB9XG4gIHByb3RlY3RlZCBpc1RleHRWYWx1ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogVGhlIG1heGltdW0gdGV4dCBsZW5ndGguIElmIGl0IGlzIC0xLCBkZWZhdWwgdmFsdWUsIHRoZW4gdGhlIHN1cnZleSBtYXhUZXh0TGVuZ3RoIHByb3BlcnR5IHdpbGwgYmUgdXNlZC5cbiAgICogSWYgaXQgaXMgMCwgdGhlbiB0aGUgdmFsdWUgaXMgdW5saW1pdGVkXG4gICAqIEBzZWUgU3VydmV5TW9kZWwubWF4VGV4dExlbmd0aFxuICAgKi9cbiAgcHVibGljIGdldCBtYXhMZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4TGVuZ3RoXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4TGVuZ3RoKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF4TGVuZ3RoXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldE1heExlbmd0aCgpOiBhbnkge1xuICAgIHJldHVybiBIZWxwZXJzLmdldE1heExlbmd0aChcbiAgICAgIHRoaXMubWF4TGVuZ3RoLFxuICAgICAgdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5tYXhUZXh0TGVuZ3RoIDogLTFcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byBzZXQgdGhlIGlucHV0IHBsYWNlIGhvbGRlci5cbiAgICovXG4gIHB1YmxpYyBnZXQgcGxhY2VIb2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJwbGFjZUhvbGRlclwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHBsYWNlSG9sZGVyKHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJwbGFjZUhvbGRlclwiLCB2YWwpO1xuICAgIHRoaXMuY2FsY1JlbmRlcmVkUGxhY2VIb2xkZXIoKTtcbiAgfVxuICBnZXQgbG9jUGxhY2VIb2xkZXIoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwicGxhY2VIb2xkZXJcIik7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJ0ZXh0YmFzZVwiO1xuICB9XG4gIGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN1cGVyLmlzRW1wdHkoKSB8fCB0aGlzLnZhbHVlID09PSBcIlwiO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSB2YWx1ZSB0aGF0IHNwZWNpZmllcyBob3cgdGhlIHF1ZXN0aW9uIHVwZGF0ZXMgaXQncyB2YWx1ZS5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGU6XG4gICAqIC0gYGRlZmF1bHRgIC0gZ2V0IHRoZSB2YWx1ZSBmcm9tIHN1cnZleS50ZXh0VXBkYXRlTW9kZVxuICAgKiAtIGBvbkJsdXJgIC0gdGhlIHZhbHVlIGlzIHVwZGF0ZWQgYWZ0ZXIgYW4gaW5wdXQgbG9zZXMgdGhlIGZvY3VzLlxuICAgKiAtIGBvblR5cGluZ2AgLSB1cGRhdGUgdGhlIHZhbHVlIG9mIHRleHQgcXVlc3Rpb25zLCBcInRleHRcIiBhbmQgXCJjb21tZW50XCIsIG9uIGV2ZXJ5IGtleSBwcmVzcy5cbiAgICpcbiAgICogTm90ZSwgdGhhdCBzZXR0aW5nIHRvIFwib25UeXBpbmdcIiBtYXkgbGVhZCB0byBhIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uLCBpbiBjYXNlIHlvdSBoYXZlIG1hbnkgZXhwcmVzc2lvbnMgaW4gdGhlIHN1cnZleS5cbiAgICogQHNlZSBzdXJ2ZXkudGV4dFVwZGF0ZU1vZGVcbiAgICovXG4gIHB1YmxpYyBnZXQgdGV4dFVwZGF0ZU1vZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidGV4dFVwZGF0ZU1vZGVcIik7XG4gIH1cbiAgcHVibGljIHNldCB0ZXh0VXBkYXRlTW9kZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInRleHRVcGRhdGVNb2RlXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBpc1N1cnZleUlucHV0VGV4dFVwZGF0ZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy50ZXh0VXBkYXRlTW9kZSA9PSBcImRlZmF1bHRcIilcbiAgICAgIHJldHVybiAhIXRoaXMuc3VydmV5ID8gdGhpcy5zdXJ2ZXkuaXNVcGRhdGVWYWx1ZVRleHRPblR5cGluZyA6IGZhbHNlO1xuICAgIHJldHVybiB0aGlzLnRleHRVcGRhdGVNb2RlID09IFwib25UeXBpbmdcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IHJlbmRlcmVkUGxhY2VIb2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicmVuZGVyZWRQbGFjZUhvbGRlclwiKTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0UmVuZGVyZWRQbGFjZUhvbGRlcih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJlbmRlcmVkUGxhY2VIb2xkZXJcIiwgdmFsKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25SZWFkT25seUNoYW5nZWQoKSB7XG4gICAgc3VwZXIub25SZWFkT25seUNoYW5nZWQoKTtcbiAgICB0aGlzLmNhbGNSZW5kZXJlZFBsYWNlSG9sZGVyKCk7XG4gIH1cbiAgcHVibGljIG9uU3VydmV5TG9hZCgpOiB2b2lkIHtcbiAgICB0aGlzLmNhbGNSZW5kZXJlZFBsYWNlSG9sZGVyKCk7XG4gICAgc3VwZXIub25TdXJ2ZXlMb2FkKCk7XG4gIH1cbiAgcHVibGljIGxvY2FsZUNoYW5nZWQoKSB7XG4gICAgc3VwZXIubG9jYWxlQ2hhbmdlZCgpO1xuICAgIHRoaXMuY2FsY1JlbmRlcmVkUGxhY2VIb2xkZXIoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY2FsY1JlbmRlcmVkUGxhY2VIb2xkZXIoKSB7XG4gICAgbGV0IHJlcyA9IHRoaXMucGxhY2VIb2xkZXI7XG4gICAgaWYoISFyZXMgJiYgIXRoaXMuaGFzUGxhY2VIb2xkZXIoKSkge1xuICAgICAgcmVzID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLnNldFJlbmRlcmVkUGxhY2VIb2xkZXIocmVzKTtcbiAgfVxuICBwcm90ZWN0ZWQgaGFzUGxhY2VIb2xkZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmlzUmVhZE9ubHk7XG4gIH1cbiAgcHVibGljIGdldENvbnRyb2xDbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgQ3NzQ2xhc3NCdWlsZGVyKClcbiAgICAgIC5hcHBlbmQodGhpcy5jc3NDbGFzc2VzLnJvb3QpXG4gICAgICAuYXBwZW5kKHRoaXMuY3NzQ2xhc3Nlcy5vbkVycm9yLCB0aGlzLmVycm9ycy5sZW5ndGggPiAwKVxuICAgICAgLmFwcGVuZCh0aGlzLmNzc0NsYXNzZXMuY29udHJvbERpc2FibGVkLCB0aGlzLmlzUmVhZE9ubHkpXG4gICAgICAudG9TdHJpbmcoKTtcbiAgfVxufVxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJ0ZXh0YmFzZVwiLFxuICBbXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBRdWVzdGlvblRleHRCYXNlKFwiXCIpO1xuICB9LFxuICBcInF1ZXN0aW9uXCJcbik7XG4iLCJpbXBvcnQgeyBIYXNoVGFibGUgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5pbXBvcnQgeyBJRWxlbWVudCB9IGZyb20gXCIuL2Jhc2UtaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgc3VydmV5TG9jYWxpemF0aW9uIH0gZnJvbSBcIi4vc3VydmV5U3RyaW5nc1wiO1xuaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcblxuLy9UT0RPIHJlcGxhY2UgY29tcGxldGVseSB3aXRoIEVsZW1lbnRGYWN0b3J5XG5leHBvcnQgY2xhc3MgUXVlc3Rpb25GYWN0b3J5IHtcbiAgcHVibGljIHN0YXRpYyBJbnN0YW5jZTogUXVlc3Rpb25GYWN0b3J5ID0gbmV3IFF1ZXN0aW9uRmFjdG9yeSgpO1xuICBwdWJsaWMgc3RhdGljIGdldCBEZWZhdWx0Q2hvaWNlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJjaG9pY2VzX0l0ZW1cIikgKyBcIjFcIixcbiAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJjaG9pY2VzX0l0ZW1cIikgKyBcIjJcIixcbiAgICAgIHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJjaG9pY2VzX0l0ZW1cIikgKyBcIjNcIixcbiAgICBdO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZ2V0IERlZmF1bHRDb2x1bXMoKTogc3RyaW5nW10ge1xuICAgIHZhciBjb2xOYW1lID0gc3VydmV5TG9jYWxpemF0aW9uLmdldFN0cmluZyhcIm1hdHJpeF9jb2x1bW5cIikgKyBcIiBcIjtcbiAgICByZXR1cm4gW2NvbE5hbWUgKyBcIjFcIiwgY29sTmFtZSArIFwiMlwiLCBjb2xOYW1lICsgXCIzXCJdO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgZ2V0IERlZmF1bHRSb3dzKCk6IHN0cmluZ1tdIHtcbiAgICB2YXIgcm93TmFtZSA9IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJtYXRyaXhfcm93XCIpICsgXCIgXCI7XG4gICAgcmV0dXJuIFtyb3dOYW1lICsgXCIxXCIsIHJvd05hbWUgKyBcIjJcIl07XG4gIH1cbiAgcHVibGljIHN0YXRpYyBnZXQgRGVmYXVsdE11dGxpcGxlVGV4dEl0ZW1zKCk6IHN0cmluZ1tdIHtcbiAgICB2YXIgaXRlbU5hbWUgPSBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwibXVsdGlwbGV0ZXh0X2l0ZW1uYW1lXCIpO1xuICAgIHJldHVybiBbaXRlbU5hbWUgKyBcIjFcIiwgaXRlbU5hbWUgKyBcIjJcIl07XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdG9ySGFzaDogSGFzaFRhYmxlPChuYW1lOiBzdHJpbmcpID0+IFF1ZXN0aW9uPiA9IHt9O1xuXG4gIHB1YmxpYyByZWdpc3RlclF1ZXN0aW9uKFxuICAgIHF1ZXN0aW9uVHlwZTogc3RyaW5nLFxuICAgIHF1ZXN0aW9uQ3JlYXRvcjogKG5hbWU6IHN0cmluZykgPT4gUXVlc3Rpb25cbiAgKSB7XG4gICAgdGhpcy5jcmVhdG9ySGFzaFtxdWVzdGlvblR5cGVdID0gcXVlc3Rpb25DcmVhdG9yO1xuICB9XG4gIHB1YmxpYyB1bnJlZ2lzdGVyRWxlbWVudChlbGVtZW50VHlwZTogc3RyaW5nKSB7XG4gICAgZGVsZXRlIHRoaXMuY3JlYXRvckhhc2hbZWxlbWVudFR5cGVdO1xuICB9XG4gIHB1YmxpYyBjbGVhcigpIHtcbiAgICB0aGlzLmNyZWF0b3JIYXNoID0ge307XG4gIH1cbiAgcHVibGljIGdldEFsbFR5cGVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmNyZWF0b3JIYXNoKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0LnNvcnQoKTtcbiAgfVxuICBwdWJsaWMgY3JlYXRlUXVlc3Rpb24ocXVlc3Rpb25UeXBlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IFF1ZXN0aW9uIHtcbiAgICB2YXIgY3JlYXRvciA9IHRoaXMuY3JlYXRvckhhc2hbcXVlc3Rpb25UeXBlXTtcbiAgICBpZiAoY3JlYXRvciA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gY3JlYXRvcihuYW1lKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRWxlbWVudEZhY3Rvcnkge1xuICBwdWJsaWMgc3RhdGljIEluc3RhbmNlOiBFbGVtZW50RmFjdG9yeSA9IG5ldyBFbGVtZW50RmFjdG9yeSgpO1xuICBwcml2YXRlIGNyZWF0b3JIYXNoOiBIYXNoVGFibGU8KG5hbWU6IHN0cmluZykgPT4gSUVsZW1lbnQ+ID0ge307XG5cbiAgcHVibGljIHJlZ2lzdGVyRWxlbWVudChcbiAgICBlbGVtZW50VHlwZTogc3RyaW5nLFxuICAgIGVsZW1lbnRDcmVhdG9yOiAobmFtZTogc3RyaW5nKSA9PiBJRWxlbWVudFxuICApIHtcbiAgICB0aGlzLmNyZWF0b3JIYXNoW2VsZW1lbnRUeXBlXSA9IGVsZW1lbnRDcmVhdG9yO1xuICB9XG4gIHB1YmxpYyBjbGVhcigpIHtcbiAgICB0aGlzLmNyZWF0b3JIYXNoID0ge307XG4gIH1cbiAgcHVibGljIHVucmVnaXN0ZXJFbGVtZW50KFxuICAgIGVsZW1lbnRUeXBlOiBzdHJpbmcsXG4gICAgcmVtb3ZlRnJvbVNlcmlhbGl6ZXI6IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcbiAgICBkZWxldGUgdGhpcy5jcmVhdG9ySGFzaFtlbGVtZW50VHlwZV07XG4gICAgUXVlc3Rpb25GYWN0b3J5Lkluc3RhbmNlLnVucmVnaXN0ZXJFbGVtZW50KGVsZW1lbnRUeXBlKTtcbiAgICBpZiAocmVtb3ZlRnJvbVNlcmlhbGl6ZXIpIHtcbiAgICAgIFNlcmlhbGl6ZXIucmVtb3ZlQ2xhc3MoZWxlbWVudFR5cGUpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0QWxsVHlwZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIHJlc3VsdCA9IFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5nZXRBbGxUeXBlcygpO1xuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmNyZWF0b3JIYXNoKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0LnNvcnQoKTtcbiAgfVxuICBwdWJsaWMgY3JlYXRlRWxlbWVudChlbGVtZW50VHlwZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBJRWxlbWVudCB7XG4gICAgdmFyIGNyZWF0b3IgPSB0aGlzLmNyZWF0b3JIYXNoW2VsZW1lbnRUeXBlXTtcbiAgICBpZiAoY3JlYXRvciA9PSBudWxsKVxuICAgICAgcmV0dXJuIFF1ZXN0aW9uRmFjdG9yeS5JbnN0YW5jZS5jcmVhdGVRdWVzdGlvbihlbGVtZW50VHlwZSwgbmFtZSk7XG4gICAgcmV0dXJuIGNyZWF0b3IobmFtZSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IFF1ZXN0aW9uLCBJQ29uZGl0aW9uT2JqZWN0IH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9qc29ub2JqZWN0XCI7XG5pbXBvcnQgeyBTdXJ2ZXlFcnJvciB9IGZyb20gXCIuL3N1cnZleS1lcnJvclwiO1xuXG4vKipcbiAqIEEgTW9kZWwgZm9yIG5vbiB2YWx1ZSBxdWVzdGlvbi4gVGhpcyBxdWVzdGlvbiBkb2Vzbid0IGFkZCBhbnkgbmV3IGZ1bmN0aW9uYWxpdHkuIEl0IGhpZGVzIHNvbWUgcHJvcGVydGllcywgaW5jbHVkaW5nIHRoZSB2YWx1ZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXN0aW9uTm9uVmFsdWUgZXh0ZW5kcyBRdWVzdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKG5hbWUpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwibm9udmFsdWVcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc0lucHV0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc1RpdGxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZ2V0VGl0bGVMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzQ29tbWVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGhhc0Vycm9ycyhmaXJlQ2FsbGJhY2s6IGJvb2xlYW4gPSB0cnVlLCByZWM6IGFueSA9IG51bGwpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHVibGljIGdldEFsbEVycm9ycygpOiBBcnJheTxTdXJ2ZXlFcnJvcj4ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBwdWJsaWMgc3VwcG9ydEdvTmV4dFBhZ2VBdXRvbWF0aWMoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBhZGRDb25kaXRpb25PYmplY3RzQnlDb250ZXh0KFxuICAgIG9iamVjdHM6IEFycmF5PElDb25kaXRpb25PYmplY3Q+LFxuICAgIGNvbnRleHQ6IGFueVxuICApIHt9XG4gIHB1YmxpYyBnZXRDb25kaXRpb25Kc29uKG9wZXJhdG9yOiBzdHJpbmcgPSBudWxsLCBwYXRoOiBzdHJpbmcgPSBudWxsKTogYW55IHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJub252YWx1ZVwiLFxuICBbXG4gICAgeyBuYW1lOiBcInRpdGxlXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcImRlc2NyaXB0aW9uXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInZhbHVlTmFtZVwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJlbmFibGVJZlwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJkZWZhdWx0VmFsdWVcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwiY29ycmVjdEFuc3dlclwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJpc1JlcXVpcmVkXCIsIHZpc2libGU6IGZhbHNlLCBpc1NlcmlhbGl6YWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwicmVxdWlyZWRFcnJvclRleHRcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwicmVhZE9ubHlcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwicmVxdWlyZWRJZlwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICAgIHsgbmFtZTogXCJ2YWxpZGF0b3JzXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gICAgeyBuYW1lOiBcInRpdGxlTG9jYXRpb25cIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgICB7IG5hbWU6IFwidXNlRGlzcGxheVZhbHVlc0luVGl0bGVcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgXSxcbiAgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUXVlc3Rpb25Ob25WYWx1ZShcIlwiKTtcbiAgfSxcbiAgXCJxdWVzdGlvblwiXG4pO1xuIiwiaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuXG5leHBvcnQgY2xhc3MgUmVuZGVyZXJGYWN0b3J5IHtcbiAgcHVibGljIHN0YXRpYyBJbnN0YW5jZTogUmVuZGVyZXJGYWN0b3J5ID0gbmV3IFJlbmRlcmVyRmFjdG9yeSgpO1xuXG4gIHByaXZhdGUgcmVuZGVyZXJzSGFzaDoge1xuICAgIFtxdWVzdGlvblR5cGU6IHN0cmluZ106IHsgW3JlbmRlckFzOiBzdHJpbmddOiBhbnkgfSxcbiAgfSA9IHt9O1xuXG4gIHB1YmxpYyB1bnJlZ2lzdGVyUmVuZGVyZXIocXVlc3Rpb25UeXBlOiBzdHJpbmcsIHJlbmRlcmVyQXM6IHN0cmluZykge1xuICAgIGRlbGV0ZSB0aGlzLnJlbmRlcmVyc0hhc2hbcXVlc3Rpb25UeXBlXVtyZW5kZXJlckFzXTtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3RlclJlbmRlcmVyKFxuICAgIHF1ZXN0aW9uVHlwZTogc3RyaW5nLFxuICAgIHJlbmRlckFzOiBzdHJpbmcsXG4gICAgcmVuZGVyZXI6IGFueVxuICApIHtcbiAgICBpZiAoIXRoaXMucmVuZGVyZXJzSGFzaFtxdWVzdGlvblR5cGVdKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyc0hhc2hbcXVlc3Rpb25UeXBlXSA9IHt9O1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcmVyc0hhc2hbcXVlc3Rpb25UeXBlXVtyZW5kZXJBc10gPSByZW5kZXJlcjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZW5kZXJlcihxdWVzdGlvblR5cGU6IHN0cmluZywgcmVuZGVyQXM6IHN0cmluZykge1xuICAgIHJldHVybiAoXG4gICAgICAodGhpcy5yZW5kZXJlcnNIYXNoW3F1ZXN0aW9uVHlwZV0gJiZcbiAgICAgICAgdGhpcy5yZW5kZXJlcnNIYXNoW3F1ZXN0aW9uVHlwZV1bcmVuZGVyQXNdKSB8fFxuICAgICAgXCJkZWZhdWx0XCJcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldFJlbmRlcmVyQnlRdWVzdGlvbihxdWVzdGlvbjogUXVlc3Rpb24pOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldFJlbmRlcmVyKHF1ZXN0aW9uLmdldFR5cGUoKSwgcXVlc3Rpb24ucmVuZGVyQXMpO1xuICB9XG4gIHB1YmxpYyBjbGVhcigpIHtcbiAgICB0aGlzLnJlbmRlcmVyc0hhc2ggPSB7fTtcbiAgfVxufVxuIiwiLyoqXG4gKiBHbG9iYWwgc3VydmV5IHNldHRpbmdzXG4gKi9cbmV4cG9ydCB2YXIgc2V0dGluZ3MgPSB7XG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciBTdXJ2ZXlKUyBjb21wYXJhdG9yLiBCeSBkZWZhdWx0IHdlIHRyaW0gc3RyaW5ncyBhbmQgY29tcGFyZSB0aGVtIGFzIGNhc2UgaW5zZW5zaXRpdmUuIFRvIGNoYW5nZSB0aGUgYmVoYXZpb3IgeW91IGNhbiB1c2UgZm9sbG93aW5nIGNvZGU6XG4gICAqIHNldHRpbmdzLmNvbXBhcmF0b3IudHJpbVN0cmluZ3MgPSBmYWxzZTsgLy9cImFiYyBcIiB3aWxsIG5vdCBlcXVhbCB0byBcImFiY1wiLiBUaGV5IGFyZSBlcXVhbCBieSBkZWZhdWx0LlxuICAgKiBzZXR0aW5ncy5jb21wYXJhdG9yLmNhc2VTZW5zaXRpdmUgPSB0cnVlOyAvL1wiYWJjIFwiIHdpbGwgbm90IGVxdWFsIHRvIFwiQWJjXCIuIFRoZXkgYXJlIGVxdWFsIGJ5IGRlZmF1bHQuXG4gICAqL1xuICBjb21wYXJhdG9yOiB7XG4gICAgdHJpbVN0cmluZ3M6IHRydWUsXG4gICAgY2FzZVNlbnNpdGl2ZTogZmFsc2VcbiAgfSxcbiAgLyoqXG4gICAqIFRoZSBwcmVmaXggdGhhdCB1c2VzIHRvIHN0b3JlIHRoZSBxdWVzdGlvbiBjb21tZW50LCBhcyB7cXVlc3Rpb25OYW1lfSArIHtjb21tZW50UHJlZml4fS5cbiAgICogVGhlIGRlZmF1bHRcbiAgICovXG4gIGNvbW1lbnRQcmVmaXg6IFwiLUNvbW1lbnRcIixcbiAgLyoqXG4gICAqIEVuY29kZSBwYXJhbWV0ZXIgb24gY2FsbGluZyByZXN0ZnVsIHdlYiBBUElcbiAgICovXG4gIHdlYnNlcnZpY2VFbmNvZGVQYXJhbWV0ZXJzOiB0cnVlLFxuICAvKipcbiAgICogQ2FjaGUgdGhlIHJlc3VsdCBmb3IgY2hvaWNlcyBnZXR0aW5nIGZyb20gd2ViIHNlcnZpY2VzLiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBmYWxzZSwgdG8gZGlzYWJsZSB0aGUgY2FjaGluZy5cbiAgICovXG4gIHVzZUNhY2hpbmdGb3JDaG9pY2VzUmVzdGZ1bDogdHJ1ZSxcbiAgZ2V0IHVzZUNhY2hpbmdGb3JDaG9pY2VzUmVzdGZ1bGwoKSB7XG4gICAgcmV0dXJuIHNldHRpbmdzLnVzZUNhY2hpbmdGb3JDaG9pY2VzUmVzdGZ1bDtcbiAgfSxcbiAgc2V0IHVzZUNhY2hpbmdGb3JDaG9pY2VzUmVzdGZ1bGwodmFsOiBib29sZWFuKSB7XG4gICAgc2V0dGluZ3MudXNlQ2FjaGluZ0ZvckNob2ljZXNSZXN0ZnVsID0gdmFsO1xuICB9LFxuICAvKipcbiAgICogU3VydmV5SlMgd2ViIHNlcnZpY2UgQVBJIHVybFxuICAgKi9cbiAgc3VydmV5U2VydmljZVVybDogXCJodHRwczovL2FwaS5zdXJ2ZXlqcy5pby9wdWJsaWMvdjEvU3VydmV5XCIsXG4gIC8qKlxuICAgKiBzZXBhcmF0b3IgdGhhdCBjYW4gYWxsb3cgdG8gc2V0IHZhbHVlIGFuZCB0ZXh0IG9mIEl0ZW1WYWx1ZSBvYmplY3QgaW4gb25lIHN0cmluZyBhczogXCJ2YWx1ZXx0ZXh0XCJcbiAgICovXG4gIGl0ZW1WYWx1ZVNlcGFyYXRvcjogXCJ8XCIsXG4gIC8qKlxuICAgKiBTZXQgaXQgdG8gdHJ1ZSB0byBzZXJpYWxpemUgaXRlbXZhbHVlIGluc3RhbmNlIGFsd2F5cyBhcyBvYmplY3QgZXZlbiBpZiB0ZXh0IHByb3BlcnR5IGlzIGVtcHR5XG4gICAqIGNvbnN0IGl0ZW0gPSBuZXcgU3VydmV5Lkl0ZW1WYWx1ZSg1KTtcbiAgICogaXRlbS50b0pTT04oKTsgLy93aWxsIHJldHVybiB7dmFsdWU6IDV9LCBpbnN0ZWFkIG9mIDUgYnkgZGVmYXVsdC5cbiAgICovXG4gIGl0ZW1WYWx1ZUFsd2F5c1NlcmlhbGl6ZUFzT2JqZWN0OiBmYWxzZSxcbiAgLyoqXG4gICAqIGRlZmF1bHQgbG9jYWxlIG5hbWUgZm9yIGxvY2FsaXphYmxlIHN0cmluZ3MgdGhhdCB1c2VzIGR1cmluZyBzZXJpYWxpemF0aW9uLCB7XCJkZWZhdWx0XCI6IFwiTXkgdGV4dFwiLCBcImRlXCI6IFwiTWVpbiBUZXh0XCJ9XG4gICAqL1xuICBkZWZhdWx0TG9jYWxlTmFtZTogXCJkZWZhdWx0XCIsXG4gIC8qKlxuICAgKiBEZWZhdWx0IHJvdyBuYW1lIGZvciBtYXRyaXggKHNpbmdsZSBjaG9pY2UpXG4gICAqL1xuICBtYXRyaXhEZWZhdWx0Um93TmFtZTogXCJkZWZhdWx0XCIsXG4gIC8qKlxuICAgKiBEZWZhdWx0IGNlbGwgdHlwZSBmb3IgZHJvcGRvd24gYW5kIGR5bmFtaWMgbWF0cmljZXNcbiAgICovXG4gIG1hdHJpeERlZmF1bHRDZWxsVHlwZTogXCJkcm9wZG93blwiLFxuICAvKipcbiAgICogVG90YWwgdmFsdWUgcG9zdGZpeCBmb3IgZHJvcGRvd24gYW5kIGR5bmFtaWMgbWF0cmljZXMuIFRoZSB0b3RhbCB2YWx1ZSBzdG9yZXMgYXM6IHttYXRyaXhOYW1lfSArIHtwb3N0Zml4fVxuICAgKi9cbiAgbWF0cml4VG90YWxWYWx1ZVBvc3RGaXg6IFwiLXRvdGFsXCIsXG4gIC8qKlxuICAgKiBNYXhpbXVtIHJvdyBjb3VudCBpbiBkeW5hbWljIG1hdHJpeFxuICAgKi9cbiAgbWF0cml4TWF4aW11bVJvd0NvdW50OiAxMDAwLFxuICAvKipcbiAgICogTWF4aW11bSByb3dDb3VudCB0aGF0IHJldHVybnMgaW4gYWRkQ29uZGl0aW9uT2JqZWN0c0J5Q29udGV4dCBmdW5jdGlvblxuICAgKi9cbiAgbWF0cml4TWF4Um93Q291bnRJbkNvbmRpdGlvbjogMSxcbiAgLyoqXG4gICAqIE1heGltdW0gcGFuZWwgY291bnQgaW4gZHluYW1pYyBwYW5lbFxuICAgKi9cbiAgcGFuZWxNYXhpbXVtUGFuZWxDb3VudDogMTAwLFxuICAvKipcbiAgICogTWF4aW11bSByYXRlIHZhbHVlIGNvdW50IGluIHJhdGluZyBxdWVzdGlvblxuICAgKi9cbiAgcmF0aW5nTWF4aW11bVJhdGVWYWx1ZUNvdW50OiAyMCxcbiAgLyoqXG4gICAqIERpc2FibGUgdGhlIHF1ZXN0aW9uIHdoaWxlIGNob2ljZXMgYXJlIGdldHRpbmcgZnJvbSB0aGUgd2ViIHNlcnZpY2VcbiAgICovXG4gIGRpc2FibGVPbkdldHRpbmdDaG9pY2VzRnJvbVdlYjogZmFsc2UsXG4gIC8qKlxuICAgKiBTZXQgdG8gdHJ1ZSB0byBhbHdheXMgc2VyaWFsaXplIHRoZSBsb2NhbGl6YXRpb24gc3RyaW5nIGFzIG9iamVjdCBldmVuIGlmIHRoZXJlIGlzIG9ubHkgb25lIHZhbHVlIGZvciBkZWZhdWx0IGxvY2FsZS4gSW5zdGVhZCBvZiBzdHJpbmcgXCJNeVN0clwiIHNlcmlhbGl6ZSBhcyB7ZGVmYXVsdDogXCJNeVN0clwifVxuICAgKi9cbiAgc2VyaWFsaXplTG9jYWxpemFibGVTdHJpbmdBc09iamVjdDogZmFsc2UsXG4gIC8qKlxuICAgKiBTZXQgdG8gZmFsc2UgdG8gaGlkZSBlbXB0eSBwYWdlIHRpdGxlIGFuZCBkZXNjcmlwdGlvbiBpbiBkZXNpZ24gbW9kZVxuICAgKi9cbiAgYWxsb3dTaG93RW1wdHlUaXRsZUluRGVzaWduTW9kZTogdHJ1ZSxcbiAgLyoqXG4gICAqIFNldCB0byBmYWxzZSB0byBoaWRlIGVtcHR5IHBhZ2UgZGVzY3JpcHRpb24gaW4gZGVzaWduIG1vZGVcbiAgICovXG4gIGFsbG93U2hvd0VtcHR5RGVzY3JpcHRpb25JbkRlc2lnbk1vZGU6IHRydWUsXG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlIHRvIGV4ZWN1dGUgdGhlIGNvbXBsZXRlIHRyaWdnZXIgb24gdmFsdWUgY2hhbmdlIGluc3RlYWQgb2Ygb24gbmV4dCBwYWdlLlxuICAgKi9cbiAgZXhlY3V0ZUNvbXBsZXRlVHJpZ2dlck9uVmFsdWVDaGFuZ2VkOiBmYWxzZSxcbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGZhbHNlIHRvIGV4ZWN1dGUgdGhlIHNraXAgdHJpZ2dlciBvbiBuZXh0IHBhZ2UgaW5zdGVhZCBvZiBvbiB2YWx1ZSBjaGFuZ2UuXG4gICAqL1xuICBleGVjdXRlU2tpcFRyaWdnZXJPblZhbHVlQ2hhbmdlZDogdHJ1ZSxcbiAgLyoqXG4gICAqIFNwZWNpZmllcyBob3cgdGhlIGlucHV0IGZpZWxkIG9mIFtDb21tZW50XShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeT9pZD1xdWVzdGlvbmNvbW1lbnRtb2RlbCkgcXVlc3Rpb25zIGlzIHJlbmRlcmVkIGluIHRoZSByZWFkLW9ubHkgbW9kZS5cbiAgICogQXZhaWxhYmxlIHZhbHVlczpcbiAgICogXCJ0ZXh0YXJlYVwiIChkZWZhdWx0KSAtIEEgJ3RleHRhcmVhJyBlbGVtZW50IGlzIHVzZWQgdG8gcmVuZGVyIGEgQ29tbWVudCBxdWVzdGlvbidzIGlucHV0IGZpZWxkLlxuICAgKiBcImRpdlwiIC0gQSAnZGl2JyBlbGVtZW50IGlzIHVzZWQgdG8gcmVuZGVyIGEgQ29tbWVudCBxdWVzdGlvbidzIGlucHV0IGZpZWxkLlxuICAgKi9cbiAgcmVhZE9ubHlDb21tZW50UmVuZGVyTW9kZTogXCJ0ZXh0YXJlYVwiLFxuICAvKipcbiAgICogU3BlY2lmaWVzIGhvdyB0aGUgaW5wdXQgZmllbGQgb2YgW1RleHRdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5P2lkPXF1ZXN0aW9udGV4dG1vZGVsKSBxdWVzdGlvbnMgaXMgcmVuZGVyZWQgaW4gdGhlIHJlYWQtb25seSBtb2RlLlxuICAgKiBBdmFpbGFibGUgdmFsdWVzOlxuICAgKiBcImlucHV0XCIgKGRlZmF1bHQpIC0gQW4gJ2lucHV0JyBlbGVtZW50IGlzIHVzZWQgdG8gcmVuZGVyIGEgVGV4dCBxdWVzdGlvbidzIGlucHV0IGZpZWxkLlxuICAgKiBcImRpdlwiIC0gQSAnZGl2JyBlbGVtZW50IGlzIHVzZWQgdG8gcmVuZGVyIGEgVGV4dCBxdWVzdGlvbidzIGlucHV0IGZpZWxkLlxuICAgKi9cbiAgcmVhZE9ubHlUZXh0UmVuZGVyTW9kZTogXCJpbnB1dFwiLFxuICAvKipcbiAgICogT3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiwgc2V0IHlvdXIgZnVuY3Rpb24sIGlmIHlvdSB3YW50IHRvIHNob3cgeW91ciBvd24gZGlhbG9nIGNvbmZpcm0gd2luZG93IGluc3RlYWQgb2Ygc3RhbmRhcmQgYnJvd3NlciB3aW5kb3cuXG4gICAqIEBwYXJhbSBtZXNzYWdlXG4gICAqL1xuICBjb25maXJtQWN0aW9uRnVuYzogZnVuY3Rpb24obWVzc2FnZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNvbmZpcm0obWVzc2FnZSk7XG4gIH0sXG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIG1pbldpZHRoIGNvbnN0cmFpbnRcbiAgICovXG4gIG1pbldpZHRoOiBcIjMwMHB4XCIsXG4gIC8qKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIG1pbldpZHRoIGNvbnN0cmFpbnRcbiAgICovXG4gIG1heFdpZHRoOiBcImluaXRpYWxcIixcbiAgLyoqXG4gICAqIFRoaXMgcHJvcGVydHkgdGVsbHMgaG93IG1hbnkgdGltZXMgc3VydmV5IHJlLXJ1biBleHByZXNzaW9ucyBvbiB2YWx1ZSBjaGFuZ2VzIGR1cmluZyBjb25kaXRpb24gcnVubmluZy4gV2UgbmVlZCBpdCB0byBhdm9pZCByZWN1cnNpb25zIGluIHRoZSBleHByZXNzaW9uc1xuICAgKi9cbiAgbWF4aW11bUNvbmRpdGlvblJ1bkNvdW50T25WYWx1ZUNoYW5nZWQ6IDEwLFxuICAvKipcbiAgICogQnkgZGVmYXVsdCB2aXNpYmxlSW5kZXggZm9yIHF1ZXN0aW9uIHdpdGggdGl0bGVMb2NhdGlvbiA9IFwiaGlkZGVuXCIgaXMgLTEsIGFuZCBzdXJ2ZXkgZG9lc24ndCBjb3VudCB0aGVzZSBxdWVzdGlvbnMgd2hlbiBzZXQgcXVlc3Rpb25zIG51bWJlcnMuXG4gICAqIFNldCBpdCB0cnVlLCBhbmQgYSBxdWVzdGlvbiBuZXh0IHRvIGEgcXVlc3Rpb24gd2l0aCBoaWRkZW4gdGl0bGUgd2lsbCBpbmNyZWFzZSBpdCdzIG51bWJlci5cbiAgICovXG4gIHNldFF1ZXN0aW9uVmlzaWJsZUluZGV4Rm9ySGlkZGVuVGl0bGU6IGZhbHNlLFxuICAvKipcbiAgICogQnkgZGVmYXVsdCB2aXNpYmxlSW5kZXggZm9yIHF1ZXN0aW9uIHdpdGggaGlkZU51bWJlciA9IHRydWUgaXMgLTEsIGFuZCBzdXJ2ZXkgZG9lc24ndCBjb3VudCB0aGVzZSBxdWVzdGlvbnMgd2hlbiBzZXQgcXVlc3Rpb25zIG51bWJlcnMuXG4gICAqIFNldCBpdCB0cnVlLCBhbmQgYSBxdWVzdGlvbiBuZXh0IHRvIGEgcXVlc3Rpb24gd2l0aCBoaWRkZW4gdGl0bGUgbnVtYmVyIHdpbGwgaW5jcmVhc2UgaXQncyBudW1iZXIuXG4gICAqL1xuICBzZXRRdWVzdGlvblZpc2libGVJbmRleEZvckhpZGRlbk51bWJlcjogZmFsc2UsXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IGFsbCByb3dzIGFyZSByZW5kZXJlZCBubyBtYXR0ZXJzIHdod3RoZXIgdGhleSBhcmUgdmlzaWJsZS5cbiAgICogU2V0IGl0IHRydWUsIGFuZCBzdXJ2ZXkgbWFya3VwIHJvd3Mgd2lsbCBiZSByZW5kZXJlZCBvbmx5IGlmIHRoZXkgYXJlIHZpc2libGUgaW4gdmlld3BvcnQuXG4gICAqIFRoaXMgZmVhdHVyZSBpcyBleHBlcmltYW50YWwgYW5kIG1pZ2h0IGRvIG5vdCBzdXBwb3J0IGFsbCB0aGUgdXNlIGNhc2VzLlxuICAgKi9cbiAgbGF6eVJvd3NSZW5kZXJpbmc6IGZhbHNlLFxuICBsYXp5Um93c1JlbmRlcmluZ1N0YXJ0Um93OiAzLFxuICAvKipcbiAgICogQnkgZGVmYXVsdCBjaGVja2JveCBhbmQgcmFkaW9ncm91cCBpdGVtcyBhcmUgb3JkZXJlZCBpbiByb3dzLlxuICAgKiBTZXQgaXQgXCJjb2x1bW5cIiwgYW5kIGl0ZW1zIHdpbGwgYmUgb3JkZXJlZCBpbiBjb2x1bW5zLlxuICAgKi9cbiAgc2hvd0l0ZW1zSW5PcmRlcjogXCJkZWZhdWx0XCIsXG4gIC8qKlxuICAgKiBTdXBwb3J0ZWQgdmFsaWRhdG9ycyBieSBxdWVzdGlvbiB0eXBlcy4gWW91IGNhbiBtb2RpZnkgdGhpcyB2YXJpYWJsZSB0byBhZGQgdmFsaWRhdG9ycyBmb3IgbmV3IHF1ZXN0aW9uIHR5cGVzIG9yIGFkZC9yZW1vdmUgZm9yIGV4aXN0aW5nIHF1ZXN0aW9uIHR5cGVzLlxuICAgKi9cbiAgc3VwcG9ydGVkVmFsaWRhdG9yczoge1xuICAgIHF1ZXN0aW9uOiBbXCJleHByZXNzaW9uXCJdLFxuICAgIGNvbW1lbnQ6IFtcInRleHRcIiwgXCJyZWdleFwiXSxcbiAgICB0ZXh0OiBbXCJudW1lcmljXCIsIFwidGV4dFwiLCBcInJlZ2V4XCIsIFwiZW1haWxcIl0sXG4gICAgY2hlY2tib3g6IFtcImFuc3dlcmNvdW50XCJdLFxuICB9LFxuICAvKipcbiAgICogU2V0IHRoZSB2YWx1ZSBhcyBzdHJpbmcgXCJ5eXl5LW1tLWRkXCIuIHRleHQgcXVlc3Rpb25zIHdpdGggaW5wdXRUeXBlIFwiZGF0ZVwiIHdpbGwgbm90IGFsbG93IHRvIHNldCB0byBzdXJ2ZXkgZGF0ZSB0aGF0IGxlc3MgdGhhbiB0aGlzIHZhbHVlXG4gICAqL1xuICBtaW5EYXRlOiBcIlwiLFxuICAvKipcbiAgICogU2V0IHRoZSB2YWx1ZSBhcyBzdHJpbmcgXCJ5eXl5LW1tLWRkXCIuIHRleHQgcXVlc3Rpb25zIHdpdGggaW5wdXRUeXBlIFwiZGF0ZVwiIHdpbGwgbm90IGFsbG93IHRvIHNldCB0byBzdXJ2ZXkgZGF0ZSB0aGF0IGdyZWF0ZXIgdGhhbiB0aGlzIHZhbHVlXG4gICAqL1xuICBtYXhEYXRlOiBcIlwiLFxuICBzaG93TW9kYWw6IDxcbiAgICAoXG4gICAgICBjb21wb25lbnROYW1lOiBzdHJpbmcsXG4gICAgICBkYXRhOiBhbnksXG4gICAgICBvbkFwcGx5OiAoKSA9PiBib29sZWFuLFxuICAgICAgb25DYW5jZWw/OiAoKSA9PiB2b2lkLFxuICAgICAgY3NzQ2xhc3M/OiBzdHJpbmcsXG4gICAgICB0aXRsZT86IHN0cmluZ1xuICAgICkgPT4gdm9pZFxuICA+dW5kZWZpbmVkLFxuICBzdXBwb3J0Q3JlYXRvclYyOiBmYWxzZSxcbiAgLyoqXG4gICAqIFNwZWNpZmllcyBhIGxpc3Qgb2YgY3VzdG9tIGljb25zLlxuICAgKiBVc2UgdGhpcyBwcm9wZXJ0eSB0byByZXBsYWNlIFN1cnZleUpTIGRlZmF1bHQgaWNvbnMgKGRpc3BsYXllZCBpbiBVSSBlbGVtZW50cyBvZiBTdXJ2ZXlKUyBMaWJyYXJ5IG9yIENyZWF0b3IpIHdpdGggeW91ciBjdXN0b20gaWNvbnMuXG4gICAqIEZvciBldmVyeSBkZWZhdWx0IGljb24gdG8gcmVwbGFjZSwgYWRkIGEga2V5L3ZhbHVlIG9iamVjdCB3aXRoIHRoZSBkZWZhdWx0IGljb24ncyBuYW1lIGFzIGEga2V5IGFuZCB0aGUgbmFtZSBvZiB5b3VyIGN1c3RvbSBpY29uIGFzIGEgdmFsdWUuXG4gICAqIEZvciBleGFtcGxlOiBTdXJ2ZXkuc2V0dGluZ3MuY3VzdG9tSWNvbnNbXCJpY29uLXJlZG9cIl0gPSBcIm15LW93bi1yZWRvLWljb25cIlxuICAgKi9cbiAgY3VzdG9tSWNvbnM6IHt9LFxuICB0aXRsZVRhZ3M6IHtcbiAgICBzdXJ2ZXk6IFwiaDNcIixcbiAgICBwYWdlOiBcImg0XCIsXG4gICAgcGFuZWw6IFwiaDRcIixcbiAgICBxdWVzdGlvbjogXCJoNVwiLFxuICB9XG59O1xuIiwiaW1wb3J0IHsgc3VydmV5Q3NzIH0gZnJvbSBcIi4vZGVmYXVsdENzcy9jc3NzdGFuZGFyZFwiO1xuZXhwb3J0IGNsYXNzIFN0eWxlc01hbmFnZXIge1xuICBwcml2YXRlIHN0YXRpYyBTdXJ2ZXlKU1N0eWxlc1NoZWV0SWQgPSBcInN1cnZleWpzLXN0eWxlc1wiO1xuXG4gIHB1YmxpYyBzdGF0aWMgU3R5bGVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgIC8vIFwiLnN2X2Jvb3RzdHJhcF9jc3NcIjpcbiAgICAvLyAgIFwicG9zaXRpb246IHJlbGF0aXZlOyB3aWR0aDogMTAwJTsgYmFja2dyb3VuZC1jb2xvcjogI2Y0ZjRmNFwiLFxuICAgIC8vIFwiLnN2X2Jvb3RzdHJhcF9jc3MgLnN2X2N1c3RvbV9oZWFkZXJcIjpcbiAgICAvLyAgIFwicG9zaXRpb246IGFic29sdXRlOyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAyNzVweDsgYmFja2dyb3VuZC1jb2xvcjogI2U3ZTdlNztcIixcbiAgICAvLyBcIi5zdl9ib290c3RyYXBfY3NzIC5zdl9jb250YWluZXJcIjpcbiAgICAvLyAgIFwibWF4LXdpZHRoOiA4MCU7IG1hcmdpbjogYXV0bzsgcG9zaXRpb246IHJlbGF0aXZlOyBjb2xvcjogIzZkNzA3MjsgcGFkZGluZzogMCAxZW07XCIsXG4gICAgLy8gXCIuc3ZfYm9vdHN0cmFwX2NzcyAucGFuZWwtYm9keVwiOlxuICAgIC8vICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgcGFkZGluZzogMWVtIDFlbSA1ZW0gMWVtOyBib3JkZXItdG9wOiAycHggc29saWQgbGlnaHRncmF5O1wiLFxuICAgIFwiLnN2X21haW4gc3BhblwiOiBcIndvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XCIsXG5cbiAgICBcIi5zdl9tYWluIGxlZ2VuZFwiOiBcImJvcmRlcjogbm9uZTsgbWFyZ2luOiAwO1wiLFxuXG4gICAgXCIuc3ZfYm9vdHN0cmFwX2NzcyAuc3ZfcXN0blwiOiBcInBhZGRpbmc6IDAuNWVtIDFlbSAxLjVlbSAxZW07XCIsXG4gICAgXCIuc3ZfYm9vdHN0cmFwX2NzcyAuc3ZfcWNiYyBpbnB1dFt0eXBlPWNoZWNrYm94XSwgLnN2X2Jvb3RzdHJhcF9jc3MgLnN2X3FjYmMgaW5wdXRbdHlwZT1yYWRpb11cIjpcbiAgICAgIFwidmVydGljYWwtYWxpZ246IG1pZGRsZTsgbWFyZ2luLXRvcDogLTFweFwiLFxuICAgIFwiLnN2X2Jvb3RzdHJhcF9jc3MgLnN2X3FzdG4gZmllbGRzZXRcIjogXCJkaXNwbGF5OiBibG9jaztcIixcbiAgICBcIi5zdl9ib290c3RyYXBfY3NzIC5zdl9xc3RuICAuc3ZfcV9jaGVja2JveF9pbmxpbmUsIC5zdl9ib290c3RyYXBfY3NzIC5zdl9xc3RuIC5zdl9xX3JhZGlvZ3JvdXBfaW5saW5lXCI6XG4gICAgICBcImRpc3BsYXk6IGlubGluZS1ibG9jaztcIixcblxuICAgIFwiLnN2X2Jvb3RzdHJhcF9jc3MgLnN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtY29udGFpbmVyIFwiOlxuICAgICAgXCJwb3NpdGlvbjogcmVsYXRpdmU7IG1hcmdpbi1yaWdodDogMjUwcHg7IG1hcmdpbi1sZWZ0OiA0MHB4OyBtYXJnaW4tdG9wOiAxMHB4O1wiLFxuXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnN2X3FfcmFkaW9ncm91cF9jb250cm9sX2xhYmVsXCI6XG4gICAgICBcImRpc3BsYXk6IGlubGluZTsgcG9zaXRpb246IHN0YXRpYztcIixcbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAuY2hlY2tib3hcIjpcbiAgICAgIFwibWFyZ2luLXRvcDoxMHB4O21hcmdpbi1ib3R0b206MTBweDtcIixcblxuICAgIFwiLnN2X3Jvd1wiOiBcImNsZWFyOiBib3RoOyBtaW4td2lkdGg6MzAwcHg7XCIsXG4gICAgXCIuc3Zfcm93IC5zdl9xc3RuXCI6IFwiZmxvYXQ6IGxlZnRcIixcbiAgICBcIi5zdl9yb3cgLnN2X3FzdG46bGFzdC1jaGlsZFwiOiBcImZsb2F0OiBub25lXCIsXG4gICAgXCIuc3ZfcXN0blwiOlxuICAgICAgXCJkaXNwbGF5OiB2ZXJ0aWNhbC1hbGlnbjogdG9wOyBvdmVyZmxvdzogYXV0bzsgbWluLXdpZHRoOjMwMHB4O1wiLFxuICAgIFwiLnN2X3BfY29udGFpbmVyXCI6IFwiZGlzcGxheTogdmVydGljYWwtYWxpZ246IHRvcDsgbWluLXdpZHRoOjMwMHB4O1wiLFxuXG4gICAgXCIuc3ZfcV90aXRsZSAuc3ZfcXVlc3Rpb25faWNvblwiOiBcImZsb2F0OiByaWdodDsgbWFyZ2luLXJpZ2h0OiAxZW07XCIsXG4gICAgXCIuc3ZfcV90aXRsZSAuc3ZfcXVlc3Rpb25faWNvbjo6YmVmb3JlXCI6XG4gICAgICBcImNvbnRlbnQ6ICcnOyBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7IHBhZGRpbmc6IDAuNWVtOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBEOTRiV3dnZG1WeWMybHZiajBpTVM0d0lpQmxibU52WkdsdVp6MGlkWFJtTFRnaVB6NE5DandoTFMwZ1IyVnVaWEpoZEc5eU9pQkJaRzlpWlNCSmJHeDFjM1J5WVhSdmNpQXlNaTR3TGpFc0lGTldSeUJGZUhCdmNuUWdVR3gxWnkxSmJpQXVJRk5XUnlCV1pYSnphVzl1T2lBMkxqQXdJRUoxYVd4a0lEQXBJQ0F0TFQ0TkNqeHpkbWNnZG1WeWMybHZiajBpTVM0eElpQnBaRDBpVEdGNVpYSmZNU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JaUI0Yld4dWN6cDRiR2x1YXowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzk0YkdsdWF5SWdlRDBpTUhCNElpQjVQU0l3Y0hnaURRb0pJSFpwWlhkQ2IzZzlJakFnTUNBeE1DQXhNQ0lnYzNSNWJHVTlJbVZ1WVdKc1pTMWlZV05yWjNKdmRXNWtPbTVsZHlBd0lEQWdNVEFnTVRBN0lpQjRiV3c2YzNCaFkyVTlJbkJ5WlhObGNuWmxJajROQ2p4emRIbHNaU0IwZVhCbFBTSjBaWGgwTDJOemN5SStEUW9KTG5OME1IdG1hV3hzT2lNMlJEY3dOekk3ZlEwS1BDOXpkSGxzWlQ0TkNqeHdiMng1WjI5dUlHTnNZWE56UFNKemREQWlJSEJ2YVc1MGN6MGlNaXd5SURBc05DQTFMRGtnTVRBc05DQTRMRElnTlN3MUlDSXZQZzBLUEM5emRtYytEUW89KTtcIixcbiAgICBcIi5zdl9xX3RpdGxlIC5zdl9xdWVzdGlvbl9pY29uLnN2X2V4cGFuZGVkOjpiZWZvcmVcIjpcbiAgICAgIFwidHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcIixcbiAgICBcIi5zdl9xYmxuIC5jaGVja2JveC1tYXRlcmlhbFwiOiBcIm1hcmdpbi1yaWdodDogM3B4O1wiLFxuICAgIFwiLnN2X3FjYnggLmNoZWNrYm94LW1hdGVyaWFsXCI6IFwibWFyZ2luLXJpZ2h0OiA1cHg7XCIsXG4gICAgXCIuc3ZfcWNieCAuY2hlY2tib3ggbGFiZWxcIjogXCJqdXN0aWZ5LWNvbnRlbnQ6IGxlZnQ7IGRpc3BsYXk6IGlubGluZS1ibG9jaztcIixcbiAgICBcIi5zdl9xc3RuIC5yYWRpbyBsYWJlbFwiOiBcImp1c3RpZnktY29udGVudDogbGVmdDsgZGlzcGxheTogaW5saW5lLWJsb2NrO1wiLFxuICAgIFwiLnN2X3FzdG4gLnN2X3FfaW1nc2VsID4gbGFiZWwgaW1nXCI6IFwicG9pbnRlci1ldmVudHM6IG5vbmU7XCIsXG4gICAgXCIuc3ZfcXN0biAuc3ZfcV9pbWdzZWwuc3ZfcV9pbWFnZXBpY2tlcl9pbmxpbmVcIjogXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XCIsXG4gICAgXCIuc3ZfcXN0biBsYWJlbC5zdl9xX21fbGFiZWxcIjpcbiAgICAgIFwicG9zaXRpb246IGFic29sdXRlOyBtYXJnaW46IDA7IGRpc3BsYXk6IGJsb2NrOyB3aWR0aDogMTAwJTtcIixcbiAgICBcIi5zdl9xc3RuIHRkXCI6IFwicG9zaXRpb246IHJlbGF0aXZlO1wiLFxuICAgIFwiLnN2X3FfbXRfaXRlbV92YWx1ZVwiOiBcImZsb2F0OiBsZWZ0O1wiLFxuICAgICdbZGlyPVwicnRsXCJdIC5zdl9xX210X2l0ZW1fdmFsdWUnOiBcImZsb2F0OiByaWdodDtcIixcbiAgICBcIi5zdl9xc3RuLnN2X3FzdG5fbGVmdFwiOiBcIm1hcmdpbi10b3A6IDAuNzVlbTtcIixcbiAgICBcIi5zdl9xc3RuIC50aXRsZS1sZWZ0XCI6IFwiZmxvYXQ6IGxlZnQ7IG1hcmdpbi1yaWdodDogMWVtOyBtYXgtd2lkdGg6IDUwJVwiLFxuICAgICdbZGlyPVwicnRsXCJdIC5zdl9xc3RuIC50aXRsZS1sZWZ0JzogXCJmbG9hdDogcmlnaHQ7IG1hcmdpbi1sZWZ0OiAxZW07XCIsXG4gICAgXCIuc3ZfcXN0biAuY29udGVudC1sZWZ0XCI6IFwib3ZlcmZsb3c6IGhpZGRlblwiLFxuICAgIFwiLnN2X3FfcmFkaW9ncm91cF9pbmxpbmUgLnN2X3FfcmFkaW9ncm91cF9vdGhlclwiOiBcImRpc3BsYXk6IGlubGluZS1ibG9jaztcIixcbiAgICBcIi5zdl9xX2NoZWNrYm94X2lubGluZSAuc3ZfcV9jaGVja2JveF9vdGhlclwiOiBcImRpc3BsYXk6IGlubGluZS1ibG9jaztcIixcbiAgICBcIi5zdl9xX2NoZWNrYm94X2lubGluZSwgLnN2X3FfcmFkaW9ncm91cF9pbmxpbmUsIC5zdl9xX2ltYWdlcGlja2VyX2lubGluZVwiOlxuICAgICAgXCJsaW5lLWhlaWdodDogMi41ZW07XCIsXG4gICAgXCIuZm9ybS1pbmxpbmUgLnN2X3FfY2hlY2tib3hfaW5saW5lOm5vdCg6bGFzdC1jaGlsZClcIjogXCJtYXJnaW4tcmlnaHQ6IDFlbTtcIixcbiAgICBcIi5mb3JtLWlubGluZSAuc3ZfcV9yYWRpb2dyb3VwX2lubGluZTpub3QoOmxhc3QtY2hpbGQpXCI6XG4gICAgICBcIm1hcmdpbi1yaWdodDogMWVtO1wiLFxuICAgIFwiLnN2X2ltZ3NlbCAuc3ZfcV9pbWFnZXBpY2tlcl9pbmxpbmU6bm90KDpsYXN0LWNoaWxkKVwiOlxuICAgICAgXCJtYXJnaW4tcmlnaHQ6IDFlbTtcIixcbiAgICBcIi5zdl9xc3RuIGZpZWxkc2V0XCI6IFwiYm9yZGVyOiBub25lOyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7XCIsXG4gICAgXCIuc3ZfcXN0biAuc3ZfcV9maWxlX3BsYWNlaG9sZGVyXCI6IFwiZGlzcGxheTpub25lXCIsXG5cbiAgICBcIi5zdl9wX3RpdGxlXCI6IFwicGFkZGluZy1sZWZ0OiAxZW07IHBhZGRpbmctYm90dG9tOiAwLjNlbTtcIixcbiAgICBcIi5zdl9wX3RpdGxlX2V4cGFuZGFibGVcIjogXCJjdXJzb3I6IHBvaW50ZXI7XCIsXG4gICAgXCIuc3ZfcV90aXRsZV9leHBhbmRhYmxlXCI6IFwiY3Vyc29yOiBwb2ludGVyO1wiLFxuICAgIFwiLnN2X3BfdGl0bGUgLnN2X3BhbmVsX2ljb25cIjogXCJmbG9hdDogcmlnaHQ7IG1hcmdpbi1yaWdodDogMWVtO1wiLFxuICAgIFwiLnN2X3BfdGl0bGUgLnN2X3BhbmVsX2ljb246OmJlZm9yZVwiOlxuICAgICAgXCJjb250ZW50OiAnJzsgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOyBwYWRkaW5nOiAwLjVlbTsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQRDk0Yld3Z2RtVnljMmx2YmowaU1TNHdJaUJsYm1OdlpHbHVaejBpZFhSbUxUZ2lQejROQ2p3aExTMGdSMlZ1WlhKaGRHOXlPaUJCWkc5aVpTQkpiR3gxYzNSeVlYUnZjaUF5TWk0d0xqRXNJRk5XUnlCRmVIQnZjblFnVUd4MVp5MUpiaUF1SUZOV1J5QldaWEp6YVc5dU9pQTJMakF3SUVKMWFXeGtJREFwSUNBdExUNE5Danh6ZG1jZ2RtVnljMmx2YmowaU1TNHhJaUJwWkQwaVRHRjVaWEpmTVNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWlCNGJXeHVjenA0YkdsdWF6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNVGs1T1M5NGJHbHVheUlnZUQwaU1IQjRJaUI1UFNJd2NIZ2lEUW9KSUhacFpYZENiM2c5SWpBZ01DQXhNQ0F4TUNJZ2MzUjViR1U5SW1WdVlXSnNaUzFpWVdOclozSnZkVzVrT201bGR5QXdJREFnTVRBZ01UQTdJaUI0Yld3NmMzQmhZMlU5SW5CeVpYTmxjblpsSWo0TkNqeHpkSGxzWlNCMGVYQmxQU0owWlhoMEwyTnpjeUkrRFFvSkxuTjBNSHRtYVd4c09pTTJSRGN3TnpJN2ZRMEtQQzl6ZEhsc1pUNE5Danh3YjJ4NVoyOXVJR05zWVhOelBTSnpkREFpSUhCdmFXNTBjejBpTWl3eUlEQXNOQ0ExTERrZ01UQXNOQ0E0TERJZ05TdzFJQ0l2UGcwS1BDOXpkbWMrRFFvPSk7XCIsXG4gICAgXCIuc3ZfcF90aXRsZSAuc3ZfcGFuZWxfaWNvbi5zdl9leHBhbmRlZDo6YmVmb3JlXCI6XG4gICAgICBcInRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XCIsXG4gICAgXCIuc3ZfcF9mb290ZXJcIjogXCJwYWRkaW5nLWxlZnQ6IDFlbTsgcGFkZGluZy1ib3R0b206IDFlbTtwYWRkaW5nLXRvcDogMWVtO1wiLFxuXG4gICAgXCIuc3ZfbWF0cml4X2NlbGxfZGV0YWlsX2J1dHRvblwiOiBcInBvc2l0aW9uOiByZWxhdGl2ZVwiLFxuICAgIFwiLnN2X2RldGFpbF9wYW5lbF9pY29uXCI6XG4gICAgICBcImRpc3BsYXk6IGJsb2NrOyBwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDUwJTsgdG9wOiA1MCU7IHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOyB3aWR0aDogMTRweDsgaGVpZ2h0OiAxNHB4O1wiLFxuICAgIFwiLnN2X2RldGFpbF9wYW5lbF9pY29uOjpiZWZvcmVcIjpcbiAgICAgIFwiY29udGVudDogJyc7IGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7IGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsgd2lkdGg6IDE0cHg7IGhlaWdodDogMTRweDsgZGlzcGxheTogYmxvY2s7IHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7IGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQyUzRnhtbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSd1dGYtOCclM0YlM0UlM0MhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMS4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApIC0tJTNFJTNDc3ZnIHZlcnNpb249JzEuMScgaWQ9J0xheWVyXzEnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgeG1sbnM6eGxpbms9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnIHg9JzBweCcgeT0nMHB4JyB2aWV3Qm94PScwIDAgMTUgMTUnIHN0eWxlPSdlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDE1IDE1OycgeG1sOnNwYWNlPSdwcmVzZXJ2ZSclM0UlM0NzdHlsZSB0eXBlPSd0ZXh0L2NzcyclM0UgLnN0MCU3QmZpbGw6JTIzRkZGRkZGOyU3RCUwQSUzQy9zdHlsZSUzRSUzQ3BvbHlnb24gY2xhc3M9J3N0MCcgcG9pbnRzPScxNCw1LjUgMTIuNiw0LjEgNy41LDkuMSAyLjQsNC4xIDEsNS41IDcuNSwxMiAnLyUzRSUzQy9zdmclM0UlMEFcXFwiKTtcIixcbiAgICBcIi5zdl9kZXRhaWxfcGFuZWxfaWNvbi5zdl9kZXRhaWxfZXhwYW5kZWQ6OmJlZm9yZVwiOlxuICAgICAgXCJ0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKVwiLFxuICAgIFwiLnN2X21hdHJpeF9lbXB0eV9yb3dzX3NlY3Rpb25cIjpcbiAgICAgIFwidGV4dC1hbGlnbjogY2VudGVyOyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1wiLFxuICAgIFwiLnN2X21hdHJpeF9lbXB0eV9yb3dzX3RleHRcIjogXCJwYWRkaW5nOjIwcHhcIixcblxuICAgIFwiLnN2X3FfZmlsZSA+IGlucHV0W3R5cGU9ZmlsZV0sIC5zdl9xX2ZpbGUgPiBidXR0b25cIjpcbiAgICAgIFwiZGlzcGxheTogaW5saW5lLWJsb2NrO1wiLFxuICAgIFwiLnN2X3FfZmlsZV9wcmV2aWV3XCI6XG4gICAgICBcImRpc3BsYXk6IGlubGluZS1ibG9jazsgdmVydGljYWwtYWxpZ246IHRvcDsgYm9yZGVyOiAxcHggc29saWQgbGlnaHRncmF5OyBwYWRkaW5nOiA1cHg7IG1hcmdpbi10b3A6IDEwcHg7XCIsXG4gICAgXCIuc3ZfcV9maWxlX3ByZXZpZXcgPiBhXCI6XG4gICAgICBcImRpc3BsYXk6IGJsb2NrOyBvdmVyZmxvdzogaGlkZGVuOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyB3aGl0ZS1zcGFjZTogbm93cmFwOyB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcIixcbiAgICBcIi5zdl9xX2ZpbGVfcmVtb3ZlX2J1dHRvblwiOiBcImxpbmUtaGVpZ2h0OiBub3JtYWw7XCIsXG4gICAgXCIuc3ZfcV9maWxlX3JlbW92ZVwiOiBcImRpc3BsYXk6IGJsb2NrOyBjdXJzb3I6IHBvaW50ZXI7XCIsXG5cbiAgICBcIi5zdl9xX21fY2VsbF90ZXh0XCI6IFwiY3Vyc29yOiBwb2ludGVyO1wiLFxuXG4gICAgXCIuc3ZfcV9kZF9vdGhlclwiOiBcIm1hcmdpbi10b3A6IDFlbTtcIixcbiAgICBcIi5zdl9xX2RkX290aGVyIGlucHV0XCI6IFwid2lkdGg6IDEwMCU7XCIsXG5cbiAgICBcIi5zdl9xc3RuIC5zdi1xLWNvbC0xLCAuc3YtcXVlc3Rpb24gLnN2LXEtY29sLTFcIjpcbiAgICAgIFwid2lkdGg6IDEwMCU7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgcGFkZGluZy1yaWdodDogMWVtOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB3b3JkLWJyZWFrOiBicmVhay13b3JkO1wiLFxuICAgIFwiLnN2X3FzdG4gLnN2LXEtY29sLTIsIC5zdi1xdWVzdGlvbiAuc3YtcS1jb2wtMlwiOlxuICAgICAgXCJ3aWR0aDogY2FsYyg1MCUgLSAxZW0pOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmctcmlnaHQ6IDFlbTsgYm94LXNpemluZzogYm9yZGVyLWJveDsgd29yZC1icmVhazogYnJlYWstd29yZDtcIixcbiAgICBcIi5zdl9xc3RuIC5zdi1xLWNvbC0zLCAuc3YtcXVlc3Rpb24gLnN2LXEtY29sLTNcIjpcbiAgICAgIFwid2lkdGg6IGNhbGMoMzMuMzMzMzMlIC0gMWVtKTsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBwYWRkaW5nLXJpZ2h0OiAxZW07IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XCIsXG4gICAgXCIuc3ZfcXN0biAuc3YtcS1jb2wtNCwgLnN2LXF1ZXN0aW9uIC5zdi1xLWNvbC00XCI6XG4gICAgICBcIndpZHRoOiBjYWxjKDI1JSAtIDFlbSk7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgcGFkZGluZy1yaWdodDogMWVtOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB3b3JkLWJyZWFrOiBicmVhay13b3JkO1wiLFxuICAgIFwiLnN2X3FzdG4gLnN2LXEtY29sLTUsIC5zdi1xdWVzdGlvbiAuc3YtcS1jb2wtNVwiOlxuICAgICAgXCJ3aWR0aDogY2FsYygyMCUgLSAxZW0pOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmctcmlnaHQ6IDFlbTsgYm94LXNpemluZzogYm9yZGVyLWJveDsgd29yZC1icmVhazogYnJlYWstd29yZDtcIixcblxuICAgIFwiLnN2X3FzdG4gLnN2LXEtY29sdW1uLTEsIC5zdi1xdWVzdGlvbiAuc3YtcS1jb2x1bW4tMVwiOlxuICAgICAgXCJ3aWR0aDogMTAwJTsgbWF4LXdpZHRoOiAxMDAlOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmctcmlnaHQ6IDFlbTsgYm94LXNpemluZzogYm9yZGVyLWJveDsgd29yZC1icmVhazogYnJlYWstd29yZDtcIixcbiAgICBcIi5zdl9xc3RuIC5zdi1xLWNvbHVtbi0yLCAuc3YtcXVlc3Rpb24gLnN2LXEtY29sdW1uLTJcIjpcbiAgICAgIFwibWF4LXdpZHRoOiA1MCU7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgcGFkZGluZy1yaWdodDogMWVtOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB3b3JkLWJyZWFrOiBicmVhay13b3JkO1wiLFxuICAgIFwiLnN2X3FzdG4gLnN2LXEtY29sdW1uLTMsIC5zdi1xdWVzdGlvbiAuc3YtcS1jb2x1bW4tM1wiOlxuICAgICAgXCJtYXgtd2lkdGg6IDMzLjMzMzMzJTsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBwYWRkaW5nLXJpZ2h0OiAxZW07IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XCIsXG4gICAgXCIuc3ZfcXN0biAuc3YtcS1jb2x1bW4tNCwgLnN2LXF1ZXN0aW9uIC5zdi1xLWNvbHVtbi00XCI6XG4gICAgICBcIm1heC13aWR0aDogMjUlOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmctcmlnaHQ6IDFlbTsgYm94LXNpemluZzogYm9yZGVyLWJveDsgd29yZC1icmVhazogYnJlYWstd29yZDtcIixcbiAgICBcIi5zdl9xc3RuIC5zdi1xLWNvbHVtbi01LCAuc3YtcXVlc3Rpb24gLnN2LXEtY29sdW1uLTVcIjpcbiAgICAgIFwibWF4LXdpZHRoOiAyMCU7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgcGFkZGluZy1yaWdodDogMWVtOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB3b3JkLWJyZWFrOiBicmVhay13b3JkO1wiLFxuXG4gICAgXCIuc3ZfcXN0biAuc3ZfcV9maWxlX2lucHV0XCI6IFwiY29sb3I6IHRyYW5zcGFyZW50O1wiLFxuXG4gICAgXCIuc3ZfcXN0biAuc3ZfcV9pbWdzZWwgbGFiZWwgPiBkaXZcIjpcbiAgICAgIFwib3ZlcmZsb3c6IGhpZGRlbjsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7IHBhZGRpbmc6IDRweDsgYm9yZGVyOiAxcHggc29saWQgbGlnaHRncmF5OyBib3JkZXItcmFkaXVzOiA0cHg7XCIsXG4gICAgXCIuc3ZfcXN0biAuc3ZfcV9pbWdzZWwgbGFiZWwgPiBkaXYgPiBpbWcsIC5zdl9xc3RuIC5zdl9xX2ltZ3NlbCBsYWJlbCA+IGRpdiA+IGVtYmVkXCI6XG4gICAgICBcImRpc3BsYXk6IGJsb2NrO1wiLFxuXG4gICAgXCIuc3ZfcXN0biB0YWJsZSB0ciB0ZCAuc3ZfcV9tX2NlbGxfbGFiZWxcIjpcbiAgICAgIFwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAwOyByaWdodDogMDsgdG9wOiAwOyBib3R0b206IDA7XCIsXG5cbiAgICBcImYtcGFuZWxcIjogXCJwYWRkaW5nOiAwLjVlbSAxZW07IGRpc3BsYXk6IGlubGluZS1ibG9jazsgbGluZS1oZWlnaHQ6IDJlbTtcIixcblxuICAgIFwiLnN2X3Byb2dyZXNzX2JhciA+IHNwYW5cIjogXCJ3aGl0ZS1zcGFjZTogbm93cmFwO1wiLFxuXG4gICAgLy9wcm9ncmVzcyBidXR0b25zXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fY29udGFpbmVyLWNlbnRlclwiOiBcInRleHQtYWxpZ246IGNlbnRlcjtcIixcbiAgICBcIi5zdl9wcm9ncmVzcy1idXR0b25zX19jb250YWluZXJcIjpcbiAgICAgIFwiZGlzcGxheTogaW5saW5lLWJsb2NrOyBmb250LXNpemU6IDA7IHdpZHRoOiAxMDAlOyBtYXgtd2lkdGg6IDExMDBweDsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgb3ZlcmZsb3c6IGhpZGRlbjtcIixcbiAgICBcIi5zdl9wcm9ncmVzcy1idXR0b25zX19pbWFnZS1idXR0b24tbGVmdFwiOlxuICAgICAgXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHZlcnRpY2FsLWFsaWduOiB0b3A7IG1hcmdpbi10b3A6IDIycHg7IGZvbnQtc2l6ZTogMTRweDsgd2lkdGg6IDE2cHg7IGhlaWdodDogMTZweDsgY3Vyc29yOiBwb2ludGVyOyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQRDk0Yld3Z2RtVnljMmx2YmowaU1TNHdJaUJsYm1OdlpHbHVaejBpZFhSbUxUZ2lQejROQ2p3aExTMGdSMlZ1WlhKaGRHOXlPaUJCWkc5aVpTQkpiR3gxYzNSeVlYUnZjaUF5TWk0d0xqRXNJRk5XUnlCRmVIQnZjblFnVUd4MVp5MUpiaUF1SUZOV1J5QldaWEp6YVc5dU9pQTJMakF3SUVKMWFXeGtJREFwSUNBdExUNE5Danh6ZG1jZ2RtVnljMmx2YmowaU1TNHhJaUJwWkQwaVRHRjVaWEpmTVNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWlCNGJXeHVjenA0YkdsdWF6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNVGs1T1M5NGJHbHVheUlnZUQwaU1IQjRJaUI1UFNJd2NIZ2lEUW9KSUhacFpYZENiM2c5SWpBZ01DQXhOaUF4TmlJZ2MzUjViR1U5SW1WdVlXSnNaUzFpWVdOclozSnZkVzVrT201bGR5QXdJREFnTVRZZ01UWTdJaUI0Yld3NmMzQmhZMlU5SW5CeVpYTmxjblpsSWo0TkNqeHdiMng1WjI5dUlIQnZhVzUwY3owaU1URXNNVElnT1N3eE5DQXpMRGdnT1N3eUlERXhMRFFnTnl3NElDSXZQZzBLUEM5emRtYytEUW89KTtcIixcbiAgICBcIi5zdl9wcm9ncmVzcy1idXR0b25zX19pbWFnZS1idXR0b24tcmlnaHRcIjpcbiAgICAgIFwiZGlzcGxheTogaW5saW5lLWJsb2NrOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyBtYXJnaW4tdG9wOiAyMnB4OyBmb250LXNpemU6IDE0cHg7IHdpZHRoOiAxNnB4OyBoZWlnaHQ6IDE2cHg7IGN1cnNvcjogcG9pbnRlcjsgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEQ5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlCbGJtTnZaR2x1WnowaWRYUm1MVGdpUHo0TkNqd2hMUzBnUjJWdVpYSmhkRzl5T2lCQlpHOWlaU0JKYkd4MWMzUnlZWFJ2Y2lBeU1pNHdMakVzSUZOV1J5QkZlSEJ2Y25RZ1VHeDFaeTFKYmlBdUlGTldSeUJXWlhKemFXOXVPaUEyTGpBd0lFSjFhV3hrSURBcElDQXRMVDROQ2p4emRtY2dkbVZ5YzJsdmJqMGlNUzR4SWlCcFpEMGlUR0Y1WlhKZk1TSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklpQjRiV3h1Y3pwNGJHbHVhejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TVRrNU9TOTRiR2x1YXlJZ2VEMGlNSEI0SWlCNVBTSXdjSGdpRFFvSklIWnBaWGRDYjNnOUlqQWdNQ0F4TmlBeE5pSWdjM1I1YkdVOUltVnVZV0pzWlMxaVlXTnJaM0p2ZFc1a09tNWxkeUF3SURBZ01UWWdNVFk3SWlCNGJXdzZjM0JoWTJVOUluQnlaWE5sY25abElqNE5Danh3YjJ4NVoyOXVJSEJ2YVc1MGN6MGlOU3cwSURjc01pQXhNeXc0SURjc01UUWdOU3d4TWlBNUxEZ2dJaTgrRFFvOEwzTjJaejROQ2c9PSk7XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19faW1hZ2UtYnV0dG9uLS1oaWRkZW5cIjogXCJ2aXNpYmlsaXR5OiBoaWRkZW47XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1jb250YWluZXJcIjpcbiAgICAgIFwibWF4LXdpZHRoOiBjYWxjKDEwMCUgLSAzNnB4KTsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBvdmVyZmxvdzogaGlkZGVuO1wiLFxuICAgIFwiLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3RcIjpcbiAgICAgIFwiZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogbWF4LWNvbnRlbnQ7IHBhZGRpbmctbGVmdDogMjhweDsgcGFkZGluZy1yaWdodDogMjhweDsgbWFyZ2luLXRvcDogMTRweDsgbWFyZ2luLWJvdHRvbTogMTRweDtcIixcbiAgICBcIi5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0IGxpXCI6XG4gICAgICBcIndpZHRoOiAxMzhweDsgZm9udC1zaXplOiAxNHB4OyBmb250LWZhbWlseTogJ1NlZ29lIFVJJywgJ0hlbHZldGljYSBOZXVlJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsgcG9zaXRpb246IHJlbGF0aXZlOyB0ZXh0LWFsaWduOiBjZW50ZXI7IHZlcnRpY2FsLWFsaWduOiB0b3A7IGRpc3BsYXk6IGlubGluZS1ibG9jaztcIixcbiAgICBcIi5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0IGxpOmJlZm9yZVwiOlxuICAgICAgXCJ3aWR0aDogMjRweDsgaGVpZ2h0OiAyNHB4OyBjb250ZW50OiAnJzsgbGluZS1oZWlnaHQ6IDMwcHg7IGRpc3BsYXk6IGJsb2NrOyBtYXJnaW46IDAgYXV0byAxMHB4IGF1dG87IGJvcmRlcjogM3B4IHNvbGlkOyBib3JkZXItcmFkaXVzOiA1MCU7IGJveC1zaXppbmc6IGNvbnRlbnQtYm94OyBjdXJzb3I6IHBvaW50ZXI7XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaTphZnRlclwiOlxuICAgICAgXCJ3aWR0aDogNzMlOyBoZWlnaHQ6IDNweDsgY29udGVudDogJyc7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAxNXB4OyBsZWZ0OiAtMzYuNSU7XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaTpmaXJzdC1jaGlsZDphZnRlclwiOiBcImNvbnRlbnQ6IG5vbmU7XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCAuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fcGFnZS10aXRsZVwiOlxuICAgICAgXCJ3aWR0aDogMTAwJTsgb3ZlcmZsb3c6IGhpZGRlbjsgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7IHdoaXRlLXNwYWNlOiBub3dyYXA7IGZvbnQtd2VpZ2h0OiBib2xkO1wiLFxuICAgIFwiLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QgLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX3BhZ2UtZGVzY3JpcHRpb25cIjpcbiAgICAgIFwid2lkdGg6IDEwMCU7IG92ZXJmbG93OiBoaWRkZW47IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyB3aGl0ZS1zcGFjZTogbm93cmFwO1wiLFxuICAgIFwiLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QgbGkuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1lbGVtZW50LS1ub25jbGlja2FibGU6YmVmb3JlXCI6XG4gICAgICBcImN1cnNvcjogbm90LWFsbG93ZWQ7XCIsXG5cbiAgICAvLyByYW5raW5nXG4gICAgXCIuc3YtcmFua2luZ1wiOiBcIm91dGxpbmU6IG5vbmU7IHVzZXItc2VsZWN0OiBub25lOyB0b3VjaC1hY3Rpb246IG5vbmU7XCIsXG4gICAgXCIuc3YtcmFua2luZy1pdGVtXCI6XG4gICAgICBcImN1cnNvcjogcG9pbnRlcjsgbWFyZ2luLWJvdHRvbTogNXB4O3Bvc2l0aW9uOiByZWxhdGl2ZTtcIixcbiAgICBcIi5zdi1yYW5raW5nLWl0ZW06Zm9jdXMgLnN2LXJhbmtpbmctaXRlbV9faWNvbi0taG92ZXJcIjpcbiAgICAgIFwidmlzaWJpbGl0eTogaGlkZGVuO1wiLFxuICAgIFwiLnN2LXJhbmtpbmctaXRlbTpob3ZlciAuc3YtcmFua2luZy1pdGVtX19pY29uLS1ob3ZlclwiOlxuICAgICAgXCJ2aXNpYmlsaXR5OiB2aXNpYmxlO1wiLFxuICAgIFwiLnN2LXF1ZXN0aW9uLS1kaXNhYmxlZCAuc3YtcmFua2luZy1pdGVtOmhvdmVyIC5zdi1yYW5raW5nLWl0ZW1fX2ljb24tLWhvdmVyXCI6XG4gICAgICBcInZpc2liaWxpdHk6IGhpZGRlbjtcIixcbiAgICBcIi5zdi1yYW5raW5nLWl0ZW06Zm9jdXNcIjogXCJvdXRsaW5lOiBub25lO1wiLFxuICAgIFwiLnN2LXJhbmtpbmctaXRlbTpmb2N1cyAuc3YtcmFua2luZy1pdGVtX19pY29uLS1mb2N1c1wiOlxuICAgICAgXCJ2aXNpYmlsaXR5OiB2aXNpYmxlOyB0b3A6IDE1cHg7XCIsXG4gICAgXCIuc3YtcmFua2luZy1pdGVtOmZvY3VzIC5zdi1yYW5raW5nLWl0ZW1fX2luZGV4XCI6XG4gICAgICBcImJhY2tncm91bmQ6IHdoaXRlOyBib3JkZXI6IDJweCBzb2xpZCAjMTliMzk0O1wiLFxuICAgIFwiLnN2LXJhbmtpbmctaXRlbV9fY29udGVudFwiOlxuICAgICAgXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7YmFja2dyb3VuZC1jb2xvcjogd2hpdGU7cGFkZGluZy10b3A6IDVweDtwYWRkaW5nLWJvdHRvbTogNXB4O3BhZGRpbmctbGVmdDogMzVweDtwYWRkaW5nLXJpZ2h0OiAxMHB4OyBib3JkZXItcmFkaXVzOiAxMDBweDtcIixcbiAgICBcIi5zdi1yYW5raW5nLWl0ZW1fX2ljb24tY29udGFpbmVyXCI6XG4gICAgICBcInBvc2l0aW9uOiBhYnNvbHV0ZTtsZWZ0OiAwO3RvcDogMDtib3R0b206IDA7d2lkdGg6IDM1cHg7XCIsXG4gICAgXCIuc3YtcmFua2luZy1pdGVtX19pY29uXCI6XG4gICAgICBcInZpc2liaWxpdHk6IGhpZGRlbjtsZWZ0OjEwcHg7dG9wOjIwcHg7ZmlsbDojMTliMzk0O3Bvc2l0aW9uOiBhYnNvbHV0ZTtcIixcbiAgICBcIi5zdi1yYW5raW5nLWl0ZW1fX2luZGV4XCI6XG4gICAgICBcImRpc3BsYXk6IGlubGluZS1ibG9jaztwYWRkaW5nOiAxMHB4IDE2cHg7YmFja2dyb3VuZDogcmdiYSgyNSwgMTc5LCAxNDgsIDAuMSk7Ym9yZGVyLXJhZGl1czogMTAwcHg7Ym9yZGVyOiAycHggc29saWQgdHJhbnNwYXJlbnQ7IG1hcmdpbi1yaWdodDogMTBweDtcIixcbiAgICBcIi5zdi1yYW5raW5nLWl0ZW1fX3RleHRcIjogXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XCIsXG4gICAgXCIuc3YtcmFua2luZy1pdGVtX19naG9zdFwiOlxuICAgICAgXCJkaXNwbGF5OiBub25lO2JhY2tncm91bmQ6ICNmM2YzZjM7Ym9yZGVyLXJhZGl1czogMTAwcHg7d2lkdGg6IDIwMHB4O2hlaWdodDogNTVweDt6LWluZGV4OiAxO3Bvc2l0aW9uOiBhYnNvbHV0ZTtsZWZ0OiAzNXB4O1wiLFxuICAgIFwiLnN2LXJhbmtpbmctaXRlbS0tZ2hvc3QgLnN2LXJhbmtpbmctaXRlbV9fZ2hvc3RcIjogXCJkaXNwbGF5OiBibG9jaztcIixcbiAgICBcIi5zdi1yYW5raW5nLWl0ZW0tLWdob3N0IC5zdi1yYW5raW5nLWl0ZW1fX2NvbnRlbnRcIjogXCJ2aXNpYmlsaXR5OiBoaWRkZW47XCIsXG4gICAgXCIuc3YtcmFua2luZy1pdGVtLS1kcmFnIC5zdi1yYW5raW5nLWl0ZW1fX2NvbnRlbnRcIjpcbiAgICAgIFwiYm94LXNoYWRvdzogMHB4IDhweCAxNnB4IHJnYmEoMCwgMCwgMCwgMC4xKTtib3JkZXItcmFkaXVzOiAxMDBweDtcIixcbiAgICBcIi5zdi1yYW5raW5nLS1kcmFnIC5zdi1yYW5raW5nLWl0ZW06aG92ZXIgLnN2LXJhbmtpbmctaXRlbV9faWNvblwiOlxuICAgICAgXCJ2aXNpYmlsaXR5OiBoaWRkZW47XCIsXG4gICAgXCIuc3YtcmFua2luZy1pdGVtLS1kcmFnIC5zdi1yYW5raW5nLWl0ZW1fX2ljb24tLWhvdmVyXCI6XG4gICAgICBcInZpc2liaWxpdHk6IHZpc2libGU7XCIsXG4gICAgXCIuc3YtcmFua2luZy0tbW9iaWxlIC5zdi1yYW5raW5nLWl0ZW1fX2ljb24tLWhvdmVyXCI6XG4gICAgICBcInZpc2liaWxpdHk6dmlzaWJsZTsgZmlsbDojOWY5ZjlmO1wiLFxuICAgIFwiLnN2LXJhbmtpbmctLW1vYmlsZS5zdi1yYW5raW5nLS1kcmFnIC5zdi1yYW5raW5nLWl0ZW0tLWdob3N0IC5zdi1yYW5raW5nLWl0ZW1fX2ljb24uc3YtcmFua2luZy1pdGVtX19pY29uLS1ob3ZlclwiOlxuICAgICAgXCJ2aXNpYmlsaXR5OmhpZGRlbjtcIixcblxuICAgIFwiLnN2X3FzdG4gLnN2X3Ffc2VsZWN0X2NvbHVtblwiOlxuICAgICAgXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHZlcnRpY2FsLWFsaWduOiB0b3A7IG1pbi13aWR0aDogMTAlO1wiLFxuXG4gICAgXCIuc3ZfcXN0biAuc3ZfcV9zZWxlY3RfY29sdW1uID4gKjpub3QoLnN2X3RlY2huaWNhbClcIjogXCJkaXNwbGF5OiBibG9jaztcIixcblxuICAgIFwiLnN2X21haW4gLnN2X2NvbnRhaW5lciAuc3ZfYm9keSAuc3ZfcF9yb290IC5zdl9xc3RuIC5zdl9xX3NlbGVjdF9jb2x1bW4gdGV4dGFyZWFcIjpcbiAgICAgIFwibWFyZ2luLWxlZnQ6IDA7IHBhZGRpbmctbGVmdDogMDsgbGluZS1oZWlnaHQ6IGluaXRpYWw7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtaGlkZGVuXCI6IFwiZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1wiLFxuICAgIFwiLnN2X21haW4gLnN2LXZpc3VhbGx5aGlkZGVuXCI6XG4gICAgICBcInBvc2l0aW9uOiBhYnNvbHV0ZTsgaGVpZ2h0OiAxcHggIWltcG9ydGFudDsgd2lkdGg6IDFweCAhaW1wb3J0YW50OyBvdmVyZmxvdzogaGlkZGVuOyBjbGlwOiByZWN0KDFweCAxcHggMXB4IDFweCk7IGNsaXA6IHJlY3QoMXB4LCAxcHgsIDFweCwgMXB4KTtcIixcblxuICAgIC8vIHBhbmVsZHluYW1pYyBwcm9ncmVzc1xuICAgIFwiLnN2X21haW4gLnN2LXByb2dyZXNzXCI6XG4gICAgICBcImhlaWdodDogMC4xOWVtOyBiYWNrZ3JvdW5kLWNvbG9yOiAkaGVhZGVyLWJhY2tncm91bmQtY29sb3I7IHBvc2l0aW9uOiByZWxhdGl2ZTtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1wcm9ncmVzc19fYmFyXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yOyBoZWlnaHQ6IDEwMCU7IHBvc2l0aW9uOiByZWxhdGl2ZTtcIixcbiAgICAvLyBFTyBwYW5lbGR5bmFtaWMgcHJvZ3Jlc3NcblxuICAgIC8vIHBhbmVsZHluYW1pY1xuICAgIFwiLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtY29udGFpbmVyXCI6XG4gICAgICBcInBvc2l0aW9uOiByZWxhdGl2ZTsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogY2FsYygxMDAlIC0gMjUwcHgpOyBtYXJnaW4tdG9wOiAyMHB4O1wiLFxuICAgIFwiLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fYWRkLWJ0blwiOiBcImZsb2F0OiByaWdodDtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX2FkZC1idG4tLWxpc3QtbW9kZVwiOlxuICAgICAgXCJmbG9hdDogbm9uZTsgbWFyZ2luLXRvcDogMDtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX3JlbW92ZS1idG5cIjogXCJtYXJnaW4tdG9wOiAxLjI1ZW07XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19yZW1vdmUtYnRuLS1yaWdodFwiOlxuICAgICAgXCJtYXJnaW4tdG9wOiAwOyBtYXJnaW4tbGVmdDogMS4yNWVtO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fcHJldi1idG4sIC5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuXCI6XG4gICAgICBcImJveC1zaXppbmc6IGJvcmRlci1ib3g7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgY3Vyc29yOiBwb2ludGVyOyB3aWR0aDogMC43ZW07IHRvcDogLTAuMjhlbTsgcG9zaXRpb246IGFic29sdXRlO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fcHJldi1idG5cIjpcbiAgICAgIFwibGVmdDogLTEuM2VtOyB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19uZXh0LWJ0biBcIjpcbiAgICAgIFwicmlnaHQ6IC0xLjNlbTsgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuLnN2LXBhbmVsZHluYW1pY19fcHJldi1idG4tLWRpc2FibGVkLCAuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19uZXh0LWJ0bi5zdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuLS1kaXNhYmxlZFwiOlxuICAgICAgXCJjdXJzb3I6IGF1dG87XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy10ZXh0XCI6XG4gICAgICBcImZvbnQtd2VpZ2h0OiBib2xkOyBmb250LXNpemU6IDAuODdlbTsgbWFyZ2luLXRvcDogMC42OWVtOyBtYXJnaW4tbGVmdDogNGVtXCIsXG4gICAgLy8gRU8gcGFuZWxkeW5hbWljXG4gICAgLy9ib29sZWFuXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbl9fc3dpdGNoXCI6XG4gICAgICBcImRpc3BsYXk6IGlubGluZS1ibG9jazsgYm94LXNpemluZzogYm9yZGVyLWJveDsgd2lkdGg6IDYzcHg7IGhlaWdodDogMjRweDsgbWFyZ2luLXJpZ2h0OiAxN3B4OyBtYXJnaW4tbGVmdDogMjFweDsgcGFkZGluZzogMnB4IDNweDsgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgYm9yZGVyLXJhZGl1czogMTJweDsgY3Vyc29yOiBwb2ludGVyO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW5fX3NsaWRlclwiOlxuICAgICAgXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiAyMHB4OyBoZWlnaHQ6IDIwcHg7IHRyYW5zaXRpb24tZHVyYXRpb246IC40czsgdHJhbnNpdGlvbi1wcm9wZXJ0eTogbWFyZ2luLWxlZnQ7IGJvcmRlcjogbm9uZTsgYm9yZGVyLXJhZGl1czogMTAwJTtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuX19sYWJlbFwiOiBcInZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IGN1cnNvcjogcG9pbnRlcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuLS1pbmRldGVybWluYXRlICAuc3YtYm9vbGVhbl9fc2xpZGVyXCI6XG4gICAgICBcIm1hcmdpbi1sZWZ0OiBjYWxjKDUwJSAtIDEwcHgpO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW4tLWNoZWNrZWQgIC5zdi1ib29sZWFuX19zbGlkZXJcIjpcbiAgICAgIFwibWFyZ2luLWxlZnQ6IGNhbGMoMTAwJSAtIDIwcHgpO1wiLFxuICAgIFwiW2Rpcj0ncnRsJ10gLnN2LWJvb2xlYW5fX2xhYmVsIFwiOiBcImZsb2F0OiByaWdodDtcIixcbiAgICBcIltkaXI9J3J0bCddIC5zdi1ib29sZWFuLS1pbmRldGVybWluYXRlIC5zdi1ib29sZWFuX19zbGlkZXJcIjpcbiAgICAgIFwibWFyZ2luLXJpZ2h0OiBjYWxjKDUwJSAtIDAuNjI1ZW0pO1wiLFxuICAgIFwiW2Rpcj0ncnRsJ10gLnN2LWJvb2xlYW4tLWNoZWNrZWQgLnN2LWJvb2xlYW5fX3NsaWRlclwiOlxuICAgICAgXCJtYXJnaW4tcmlnaHQ6IGNhbGMoMTAwJSAtIDEuMjVlbSk7XCIsXG4gICAgXCJbZGlyPSdydGwnXSAuc3YtYm9vbGVhbl9fc3dpdGNoXCI6IFwiZmxvYXQ6IHJpZ2h0O1wiLFxuICAgIFwiW3N0eWxlKj0nZGlyZWN0aW9uOnJ0bCddIC5zdi1ib29sZWFuX19sYWJlbCBcIjogXCJmbG9hdDogcmlnaHQ7XCIsXG4gICAgXCJbc3R5bGUqPSdkaXJlY3Rpb246cnRsJ10gLnN2LWJvb2xlYW4tLWluZGV0ZXJtaW5hdGUgLnN2LWJvb2xlYW5fX3NsaWRlclwiOlxuICAgICAgXCJtYXJnaW4tcmlnaHQ6IGNhbGMoNTAlIC0gMC42MjVlbSk7XCIsXG4gICAgXCJbc3R5bGUqPSdkaXJlY3Rpb246cnRsJ10gLnN2LWJvb2xlYW4tLWNoZWNrZWQgLnN2LWJvb2xlYW5fX3NsaWRlclwiOlxuICAgICAgXCJtYXJnaW4tcmlnaHQ6IGNhbGMoMTAwJSAtIDEuMjVlbSk7XCIsXG4gICAgXCJbc3R5bGUqPSdkaXJlY3Rpb246cnRsJ10gLnN2LWJvb2xlYW5fX3N3aXRjaFwiOiBcImZsb2F0OiByaWdodDtcIixcblxuICAgIC8vIEVPIGJvb2xlYW5cbiAgICBcIi5zdl9tYWluIC5zdl9xX251bVwiOiBcIlwiLFxuICAgIFwiLnN2X21haW4gLnN2X3FfbnVtICsgc3BhblwiOiBcIlwiLFxuXG4gICAgLy8gU2lnbmF0dXJlUGFkXG4gICAgXCIuc3ZfbWFpbiAuc2pzX3NwX2NvbnRhaW5lclwiOlxuICAgICAgXCJwb3NpdGlvbjogcmVsYXRpdmU7IGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1wiLFxuICAgIFwiLnN2X21haW4gLnNqc19zcF9jb250cm9sc1wiOiBcInBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMDsgYm90dG9tOiAwO1wiLFxuICAgIFwiLnN2X21haW4gLnNqc19zcF9jb250cm9scyA+IGJ1dHRvblwiOiBcInVzZXItc2VsZWN0OiBub25lO1wiLFxuICAgIFwiLnN2X21haW4gLnNqc19zcF9jb250YWluZXI+ZGl2PmNhbnZhczpmb2N1c1wiOiBcIm91dGxpbmU6IG5vbmU7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc2pzX3NwX3BsYWNlaG9sZGVyXCI6XG4gICAgICBcImRpc3BsYXk6IGZsZXg7ICBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgcG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4OiAwOyB1c2VyLXNlbGVjdDogbm9uZTsgcG9pbnRlci1ldmVudHM6IG5vbmU7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7XCIsXG5cbiAgICAvLyBsb2dvXG4gICAgLy8gXCIuc3ZfbWFpbiAuc3ZfaGVhZGVyXCI6IFwid2hpdGUtc3BhY2U6IG5vd3JhcDtcIixcbiAgICBcIi5zdl9tYWluIC5zdl9sb2dvXCI6IFwiXCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtbG9nby0tbGVmdFwiOlxuICAgICAgXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHZlcnRpY2FsLWFsaWduOiB0b3A7IG1hcmdpbi1yaWdodDogMmVtO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWxvZ28tLXJpZ2h0XCI6IFwiZGlzcGxheTogaW5saW5lLWJsb2NrOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyBtYXJnaW4tbGVmdDogMmVtOyBcIixcbiAgICBcIi5zdl9tYWluIC5zdi1sb2dvLS10b3BcIjpcbiAgICAgIFwiZGlzcGxheTogYmxvY2s7IHdpZHRoOiAxMDAlOyB0ZXh0LWFsaWduOiBjZW50ZXI7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtbG9nby0tYm90dG9tXCI6XG4gICAgICBcImRpc3BsYXk6IGJsb2NrOyB3aWR0aDogMTAwJTsgdGV4dC1hbGlnbjogY2VudGVyO1wiLFxuICAgIFwiLnN2X21haW4gLnN2X2hlYWRlcl9fdGV4dFwiOiBcImRpc3BsYXk6IGlubGluZS1ibG9jazsgdmVydGljYWwtYWxpZ246IHRvcDsgbWF4LXdpZHRoOiAxMDAlOyB3aWR0aDogMTAwJVwiLFxuXG4gICAgXCIuc3ZfbWFpbiAuc3YtZXhwYW5kLWFjdGlvbjpiZWZvcmVcIjogXCJjb250ZW50OiBcXFwiXFxcIjsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0MlM0Z4bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0ndXRmLTgnJTNGJTNFJTNDIS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMjEuMS4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAtLSUzRSUzQ3N2ZyB2ZXJzaW9uPScxLjEnIGlkPSdMYXllcl8xJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHhtbG5zOnhsaW5rPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyB4PScwcHgnIHk9JzBweCcgdmlld0JveD0nMCAwIDEwIDEwJyBzdHlsZT0nZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAxMCAxMDsnIHhtbDpzcGFjZT0ncHJlc2VydmUnJTNFJTNDc3R5bGUgdHlwZT0ndGV4dC9jc3MnJTNFIC5zdDAlN0JmaWxsOiUyMzQwNDA0MDslN0QlMEElM0Mvc3R5bGUlM0UlM0Nwb2x5Z29uIGNsYXNzPSdzdDAnIHBvaW50cz0nMiwyIDAsNCA1LDkgMTAsNCA4LDIgNSw1ICcvJTNFJTNDL3N2ZyUzRSUwQVxcXCIpOyBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyOyBoZWlnaHQ6IDEwcHg7IHdpZHRoOiAxMnB4OyBtYXJnaW46IGF1dG8gOHB4O1wiLFxuXG4gICAgXCIuc3ZfbWFpbiAuc3YtZXhwYW5kLWFjdGlvbi0tZXhwYW5kZWQ6YmVmb3JlXCI6IFwidHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcIixcblxuICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbi1iYXJcIjogXCJkaXNwbGF5OiBmbGV4OyBwb3NpdGlvbjogcmVsYXRpdmU7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IG1hcmdpbi1sZWZ0OiBhdXRvOyBwYWRkaW5nOiAwIDAgMCAxNnB4OyBvdmVyZmxvdzogaGlkZGVuOyB3aGl0ZS1zcGFjZTogbm93cmFwO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbi1iYXItc2VwYXJhdG9yXCI6IFwiZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogMXB4OyBoZWlnaHQ6IDI0cHg7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IG1hcmdpbi1yaWdodDogMTZweDsgYmFja2dyb3VuZC1jb2xvcjogI2Q2ZDZkNjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1hY3Rpb24tYmFyLWl0ZW1cIjogXCItd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7IC1tb3otYXBwZWFyYW5jZTogbm9uZTsgYXBwZWFyYW5jZTogbm9uZTsgZGlzcGxheTogZmxleDsgaGVpZ2h0OiA0MHB4OyBwYWRkaW5nOiA4cHg7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IG1hcmdpbi1yaWdodDogMTZweDsgYm9yZGVyOiBub25lOyBib3JkZXItcmFkaXVzOiAycHg7IGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyBjdXJzb3I6IHBvaW50ZXI7IGxpbmUtaGVpZ2h0OiAyNHB4OyBmb250LXNpemU6IDE2cHg7IG92ZXJmbG93LXg6IGhpZGRlbjsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgbWluLXdpZHRoOiBhdXRvOyBmb250LXdlaWdodDogbm9ybWFsXCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYWN0aW9uLWJhci1pdGVtX190aXRsZVwiOiBcInZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IHdoaXRlLXNwYWNlOiBub3dyYXA7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYWN0aW9uLWJhci1pdGVtX190aXRsZS0td2l0aC1pY29uXCI6IFwibWFyZ2luLWxlZnQ6IDhweDtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1hY3Rpb25fX2NvbnRlbnRcIjogXCJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogcm93OyBhbGlnbi1pdGVtczogY2VudGVyO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbl9fY29udGVudCA+ICpcIjogXCJmbGV4OiAwIDAgYXV0bztcIixcbiAgICBcIi5zdl9tYWluIC5zdi1hY3Rpb24tLWhpZGRlblwiOiBcIndpZHRoOiAwcHg7IGhlaWdodDogMHB4OyBvdmVyZmxvdzogaGlkZGVuO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbi1iYXItaXRlbV9faWNvbiBzdmdcIjogXCJkaXNwbGF5OiBibG9jaztcIixcbiAgICBcIi5zdl9tYWluIC5zdi1hY3Rpb24tYmFyLWl0ZW06YWN0aXZlXCI6IFwib3BhY2l0eTogMC41O1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbi1iYXItaXRlbTpmb2N1c1wiOiBcIm91dGxpbmU6IG5vbmU7XCIsXG5cbiAgICBcIi5zdl9tYWluIC5zdi10aXRsZS1hY3Rpb25zXCI6IFwiZGlzcGxheTogZmxleDthbGlnbi1pdGVtczogY2VudGVyO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LXRpdGxlLWFjdGlvbnNfX3RpdGxlXCI6XG4gICAgICBcImZsZXgtd3JhcDogd3JhcDsgbWF4LXdpZHRoOiA5MCU7IG1pbi13aWR0aDogNTAlO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LXRpdGxlLWFjdGlvbnNfX2JhclwiOiBcIm1pbi13aWR0aDogNTZweDtcIixcbiAgICBcIi5zdl9tYWluIC5zdl9tYXRyaXhfY2VsbF9hY3Rpb25zIC5zdi1hY3Rpb24tYmFyXCI6XG4gICAgICBcIm1hcmdpbi1sZWZ0OiAwOyBwYWRkaW5nLWxlZnQ6IDA7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3ZfcF93cmFwcGVyX2luX3Jvd1wiOlxuICAgICAgXCJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogcm93OyBhbGlnbi1pdGVtczogY2VudGVyO1wiLFxuICAgIFwiLnN2X21haW4gIC5zdl9wX3JlbW92ZV9idG5fcmlnaHRcIjogXCJtYXJnaW4tbGVmdDogMWVtO1wiLFxuICAgIC8vYnV0dG9uLWdyb3VwXG4gICAgXCIuc3ZfbWFpbiAuc3YtYnV0dG9uLWdyb3VwXCI6XG4gICAgICBcImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGZsZXgtZGlyZWN0aW9uOiByb3c7IGZvbnQtc2l6ZTogMTZweDsgaGVpZ2h0OiA0OHB4OyBvdmVyZmxvdzogYXV0bztcIixcbiAgICBcIi5zdl9tYWluIC5zdi1idXR0b24tZ3JvdXBfX2l0ZW1cIjpcbiAgICAgIFwiZGlzcGxheTogZmxleDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgZmxleC1kaXJlY3Rpb246IHJvdzsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IHdpZHRoOiAxMDAlOyBwYWRkaW5nOiAxMXB4IDE2cHg7IGxpbmUtaGVpZ2h0OiAyNHB4OyBib3JkZXItd2lkdGg6IDFweDsgYm9yZGVyLXN0eWxlOiBzb2xpZDsgb3V0bGluZTogbm9uZTsgZm9udC1zaXplOiAxNnB4OyBmb250LXdlaWdodDogNDAwOyBjdXJzb3I6IHBvaW50ZXI7IG92ZXJmbG93OiBoaWRkZW47XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYnV0dG9uLWdyb3VwX19pdGVtOm5vdCg6Zmlyc3Qtb2YtdHlwZSlcIjogXCJtYXJnaW4tbGVmdDogLTFweDtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1idXR0b24tZ3JvdXBfX2l0ZW0taWNvblwiOiBcImRpc3BsYXk6IGJsb2NrOyBoZWlnaHQ6IDI0cHg7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYnV0dG9uLWdyb3VwX19pdGVtLS1zZWxlY3RlZFwiOiBcImZvbnQtd2VpZ2h0OiA2MDA7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYnV0dG9uLWdyb3VwX19pdGVtLWRlY29yYXRvclwiOlxuICAgICAgXCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBtYXgtd2lkdGg6IDEwMCU7XCIsXG4gICAgXCIuc3ZfbWFpbiAgLnN2LWJ1dHRvbi1ncm91cF9faXRlbS1pY29uICsgLnN2LWJ1dHRvbi1ncm91cF9faXRlbS1jYXB0aW9uXCI6XG4gICAgICBcIm1hcmdpbi1sZWZ0OiA4cHhcIixcbiAgICBcIi5zdl9tYWluIC5zdi1idXR0b24tZ3JvdXBfX2l0ZW0tY2FwdGlvblwiOiBcImRpc3BsYXk6IGJsb2NrOyBvdmVyZmxvdzogaGlkZGVuOyB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsgd2hpdGUtc3BhY2U6IG5vd3JhcDtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1idXR0b24tZ3JvdXBfX2l0ZW0tLWRpc2FibGVkXCI6IFwiY29sb3I6IGN1cnNvcjogZGVmYXVsdDtcIixcbiAgICAvL2VvIGJ1dHRvbi1ncm91cFxuICAgIC8vcG9wdXBcbiAgICBcInN2LXBvcHVwXCI6IFwiZGlzcGxheTogYmxvY2s7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgei1pbmRleDogLTE7XCIsXG4gICAgXCIuc3YtcG9wdXBcIjpcbiAgICAgIFwicG9zaXRpb246IGZpeGVkOyBsZWZ0OiAwOyB0b3A6IDA7IHotaW5kZXg6IDEwMDA7IHdpZHRoOiAxMDB2dzsgaGVpZ2h0OiAxMDB2aDsgb3V0bGluZTogbm9uZTtcIixcbiAgICBcIi5zdi1wb3B1cC0tbW9kYWxcIjpcbiAgICAgIFwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XCIsXG4gICAgXCIuc3YtcG9wdXAtLW1vZGFsIC5zdi1wb3B1cF9fY29udGFpbmVyXCI6XG4gICAgICBcInBvc2l0aW9uOiBzdGF0aWM7IGZpbHRlcjogbm9uZTsgcGFkZGluZzogY2FsYyg0ICogOHB4KTtcIixcbiAgICBcIi5zdi1wb3B1cF9fY29udGFpbmVyXCI6IFwicG9zaXRpb246IGFic29sdXRlOyBmaWx0ZXI6IGRyb3Atc2hhZG93KDBweCBjYWxjKDEgKiA4cHgpIGNhbGMoMiAqIDhweCkgcmdiYSgwLCAwLCAwLCAwLjEpKTsgcGFkZGluZzogY2FsYygxICogOHB4KSAwOyBiYWNrZ3JvdW5kOiB3aGl0ZTsgYm9yZGVyLXJhZGl1czogNHB4OyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBtYXgtaGVpZ2h0OiA5MHZoOyBtYXgtd2lkdGg6IDkwdnc7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7XCIsXG4gICAgXCIuc3YtcG9wdXBfX3Njcm9sbGluZy1jb250ZW50XCI6IFwib3ZlcmZsb3c6IGF1dG87XCIsXG4gICAgXCIuc3YtcG9wdXBfX3Njcm9sbGluZy1jb250ZW50Ojotd2Via2l0LXNjcm9sbGJhclwiOlxuICAgICAgXCJoZWlnaHQ6IDZweDsgd2lkdGg6IDZweDsgYmFja2dyb3VuZC1jb2xvcjogI2YzZjNmMztcIixcbiAgICBcIi5zdi1wb3B1cF9fc2Nyb2xsaW5nLWNvbnRlbnQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iXCI6XG4gICAgICBcImJhY2tncm91bmQ6IHJnYmEoMjUsIDE3OSwgMTQ4LCAwLjEpO1wiLFxuICAgIFwiLnN2LXBvcHVwX19jb250ZW50XCI6IFwibWluLXdpZHRoOiAxMDAlO1wiLFxuICAgIFwiLnN2LXBvcHVwLS1zaG93LXBvaW50ZXIuc3YtcG9wdXAtLXRvcFwiOlxuICAgICAgXCJ0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoY2FsYygtMSAqIDhweCkpO1wiLFxuICAgIFwiLnN2LXBvcHVwLS1zaG93LXBvaW50ZXIuc3YtcG9wdXAtLXRvcCAuc3YtcG9wdXBfX3BvaW50ZXJcIjpcbiAgICAgIFwidHJhbnNmb3JtOiB0cmFuc2xhdGUoY2FsYygtMSAqIDhweCkpIHJvdGF0ZSgxODBkZWcpO1wiLFxuICAgIFwiLnN2LXBvcHVwLS1zaG93LXBvaW50ZXIuc3YtcG9wdXAtLWJvdHRvbVwiOlxuICAgICAgXCJ0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoY2FsYygxICogOHB4KSk7XCIsXG4gICAgXCIuc3YtcG9wdXAtLXNob3ctcG9pbnRlci5zdi1wb3B1cC0tYm90dG9tIC5zdi1wb3B1cF9fcG9pbnRlclwiOlxuICAgICAgXCJ0cmFuc2Zvcm06IHRyYW5zbGF0ZShjYWxjKC0xICogOHB4KSwgY2FsYygtMSAqIDhweCkpO1wiLFxuICAgIFwiLnN2LXBvcHVwLS1zaG93LXBvaW50ZXIuc3YtcG9wdXAtLXJpZ2h0XCI6XG4gICAgICBcInRyYW5zZm9ybTogdHJhbnNsYXRlKGNhbGMoMSAqIDhweCkpO1wiLFxuICAgIFwiLnN2LXBvcHVwLS1zaG93LXBvaW50ZXIuc3YtcG9wdXAtLXJpZ2h0IC5zdi1wb3B1cF9fcG9pbnRlclwiOlxuICAgICAgXCJ0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMTJweCwgLTRweCkgcm90YXRlKC05MGRlZyk7XCIsXG4gICAgXCIuc3YtcG9wdXAtLXNob3ctcG9pbnRlci5zdi1wb3B1cC0tbGVmdFwiOlxuICAgICAgXCJ0cmFuc2Zvcm06IHRyYW5zbGF0ZShjYWxjKC0xICogOHB4KSk7XCIsXG4gICAgXCIuc3YtcG9wdXAtLXNob3ctcG9pbnRlci5zdi1wb3B1cC0tbGVmdCAuc3YtcG9wdXBfX3BvaW50ZXJcIjpcbiAgICAgIFwidHJhbnNmb3JtOiB0cmFuc2xhdGUoLTRweCwgLTRweCkgcm90YXRlKDkwZGVnKTtcIixcbiAgICBcIi5zdi1wb3B1cF9fcG9pbnRlclwiOiBcImRpc3BsYXk6IGJsb2NrOyBwb3NpdGlvbjogYWJzb2x1dGU7XCIsXG4gICAgXCIuc3YtcG9wdXBfX3BvaW50ZXI6YWZ0ZXJcIjpcbiAgICAgIFwiY29udGVudDogJyAnOyBkaXNwbGF5OiBibG9jazsgd2lkdGg6IDA7IGhlaWdodDogMDsgYm9yZGVyLWxlZnQ6IGNhbGMoMSAqIDhweCkgc29saWQgdHJhbnNwYXJlbnQ7IGJvcmRlci1yaWdodDogY2FsYygxICogOHB4KSBzb2xpZCB0cmFuc3BhcmVudDsgYm9yZGVyLWJvdHRvbTogY2FsYygxICogOHB4KSBzb2xpZCB3aGl0ZTsgYWxpZ24tc2VsZjogY2VudGVyO1wiLFxuICAgIFwiLnN2LXBvcHVwX19oZWFkZXJcIjogXCJmb250LWZhbWlseTogT3BlbiBTYW5zOyBmb250LXNpemU6IGNhbGMoMyAqIDhweCk7IGxpbmUtaGVpZ2h0OiBjYWxjKDQgKiA4cHgpOyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtd2VpZ2h0OiA3MDA7IG1hcmdpbi1ib3R0b206IGNhbGMoMiAqIDhweCk7IGNvbG9yOiByZ2IoMjIsIDIyLCAyMilcIixcbiAgICBcIi5zdi1wb3B1cF9fZm9vdGVyXCI6IFwiZGlzcGxheTogZmxleDsgbWFyZ2luLXRvcDogY2FsYyg0ICogOHB4KTtcIixcbiAgICBcIi5zdi1wb3B1cF9fZm9vdGVyLWl0ZW06Zmlyc3QtY2hpbGRcIjogXCJtYXJnaW4tbGVmdDogYXV0bztcIixcbiAgICBcIi5zdi1wb3B1cF9fZm9vdGVyLWl0ZW0gKyAuc3YtcG9wdXBfX2Zvb3Rlci1pdGVtXCI6XG4gICAgICBcIm1hcmdpbi1sZWZ0OiBjYWxjKDEgKiA4cHgpO1wiLFxuICAgIFwiLnN2LXBvcHVwX19idXR0b25cIjpcbiAgICAgIFwicGFkZGluZzogY2FsYygyICogOHB4KSBjYWxjKDYgKiA4cHgpOyBiYWNrZ3JvdW5kOiAjZmZmOyBib3gtc2hhZG93OiAwcHggMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTUpOyBib3JkZXItcmFkaXVzOiA0cHg7IGN1cnNvcjogcG9pbnRlcjsgbWFyZ2luOiAycHg7IGZvbnQtZmFtaWx5OiAnU2Vnb2UgVUknLCAnSGVsdmV0aWNhIE5ldWUnLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQtc2l6ZTogY2FsYygyICogOHB4KTsgbGluZS1oZWlnaHQ6IGNhbGMoMyAqIDhweCk7IHRleHQtYWxpZ246IGNlbnRlcjsgY29sb3I6ICMxOWIzOTQ7IGJvcmRlcjogbm9uZTsgb3V0bGluZTogbm9uZTtcIixcbiAgICBcIi5zdi1wb3B1cF9fYnV0dG9uOmhvdmVyXCI6IFwiYm94LXNoYWRvdzogMCAwIDAgMnB4ICMxOWIzOTQ7XCIsXG4gICAgXCIuc3YtcG9wdXBfX2J1dHRvbjpkaXNhYmxlZFwiOiBcImNvbG9yOiByZ2JhKDIyLCAyMiwgMjIsIDAuMTYpOyBjdXJzb3I6IGRlZmF1bHQ7XCIsXG4gICAgXCIuc3YtcG9wdXBfX2J1dHRvbjpkaXNhYmxlZDpob3ZlclwiOlxuICAgICAgXCJib3gtc2hhZG93OiAwcHggMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTUpO1wiLFxuICAgIFwiLnN2LXBvcHVwX19idXR0b24uc3YtcG9wdXBfX2J1dHRvbi0tYXBwbHlcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAjMTliMzk0OyBjb2xvcjogI2ZmZjtcIixcbiAgICBcIi5zdi1wb3B1cF9fYnV0dG9uLnN2LXBvcHVwX19idXR0b24tLWFwcGx5OmRpc2FibGVkXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogI2YzZjNmMztcIixcbiAgICAvL2VvIHBvcHVwXG4gICAgLy9saXN0XG4gICAgXCIuc3YtbGlzdFwiOlxuICAgICAgXCJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBhbGlnbi1pdGVtczogZmxleC1zdGFydDsgcGFkZGluZzogMDsgbWFyZ2luOiAwOyBiYWNrZ3JvdW5kOiAjZmZmZmZmOyBmb250LWZhbWlseTogJ09wZW4gU2Fucyc7IGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcIixcbiAgICBcIi5zdi1saXN0X19pdGVtXCI6XG4gICAgICBcIndpZHRoOiAxMDAlOyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyBwYWRkaW5nOiBjYWxjKDEgKiA4cHgpIGNhbGMoMiAqIDhweCk7IGN1cnNvcjogcG9pbnRlcjtcIixcbiAgICBcIi5zdi1saXN0X19pdGVtLWljb25cIjpcbiAgICAgIFwiZmxvYXQ6IGxlZnQ7IHdpZHRoOiBjYWxjKDMgKiA4cHgpOyBoZWlnaHQ6IGNhbGMoMyAqIDhweCk7IG1hcmdpbi1yaWdodDogY2FsYygyICogOHB4KTtcIixcbiAgICBcIi5zdi1saXN0X19pdGVtLWljb24gc3ZnXCI6IFwiZGlzcGxheTogYmxvY2s7XCIsXG4gICAgXCIuc3YtbGlzdF9faXRlbS1pY29uIHVzZVwiOiBcImZpbGw6ICM5MDkwOTA7XCIsXG4gICAgXCIuc3YtbGlzdF9faXRlbTpub3QoLnN2LWxpc3RfX2l0ZW0tLXNlbGVjdGVkKTpob3ZlclwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAjZjNmM2YzO1wiLFxuICAgIFwiLnN2LWxpc3RfX2l0ZW0tLXNlbGVjdGVkXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogIzE5YjM5NDsgY29sb3I6ICNmZmY7XCIsXG4gICAgXCIuc3YtbGlzdF9faXRlbS0tc2VsZWN0ZWQgLnN2LWxpc3RfX2l0ZW0taWNvbiB1c2VcIjogXCJmaWxsOiAjZmZmO1wiLFxuICAgIFwiLnN2LWxpc3RfX2l0ZW0tLWRpc2FibGVkXCI6IFwiY29sb3I6IHJnYmEoMjIsIDIyLCAyMiwgMC4xNik7IGN1cnNvcjogZGVmYXVsdDsgcG9pbnRlci1ldmVudHM6IG5vbmU7XCIsXG4gICAgXCIuc3YtbGlzdF9faXRlbSBzcGFuXCI6IFwid2hpdGUtc3BhY2U6IG5vd3JhcDtcIixcbiAgICBcIi5zdi1saXN0X19pbnB1dFwiOiBcIi13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsgLW1vei1hcHBlYXJhbmNlOiBub25lOyBhcHBlYXJhbmNlOiBub25lOyBkaXNwbGF5OiBibG9jazsgYm94LXNpemluZzogYm9yZGVyLWJveDsgd2lkdGg6IDEwMCU7IGhlaWdodDogY2FsYygyZW0gKyAxcHgpOyBwYWRkaW5nLWxlZnQ6IDFlbTsgb3V0bGluZTogbm9uZTsgZm9udC1zaXplOiAxZW07IGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1wiLFxuICAgIC8vZW8gbGlzdFxuICAgIFwiLnN2LXNrZWxldG9uLWVsZW1lbnRcIjogXCJtaW4taGVpZ2h0OiA1MHB4O1wiLFxuICB9O1xuXG4gIHB1YmxpYyBzdGF0aWMgTWVkaWE6IHsgW2tleTogc3RyaW5nXTogeyBtZWRpYTogc3RyaW5nLCBzdHlsZTogc3RyaW5nIH0gfSA9IHtcbiAgICBcIi5zdl9xc3RuIGZpZWxkc2V0IC5zdi1xLWNvbC0xXCI6IHtcbiAgICAgIHN0eWxlOiBcIndpZHRoOiAxMDAlO1wiLFxuICAgICAgbWVkaWE6IFwiQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0ODBweClcIixcbiAgICB9LFxuICAgIFwiLnN2X3FzdG4gZmllbGRzZXQgLnN2LXEtY29sLTJcIjoge1xuICAgICAgc3R5bGU6IFwid2lkdGg6IDEwMCU7XCIsXG4gICAgICBtZWRpYTogXCJAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ4MHB4KVwiLFxuICAgIH0sXG4gICAgXCIuc3ZfcXN0biBmaWVsZHNldCAuc3YtcS1jb2wtM1wiOiB7XG4gICAgICBzdHlsZTogXCJ3aWR0aDogMTAwJTtcIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDgwcHgpXCIsXG4gICAgfSxcbiAgICBcIi5zdl9xc3RuIGZpZWxkc2V0IC5zdi1xLWNvbC00XCI6IHtcbiAgICAgIHN0eWxlOiBcIndpZHRoOiAxMDAlO1wiLFxuICAgICAgbWVkaWE6IFwiQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0ODBweClcIixcbiAgICB9LFxuICAgIFwiLnN2X3FzdG4gZmllbGRzZXQgLnN2LXEtY29sLTVcIjoge1xuICAgICAgc3R5bGU6IFwid2lkdGg6IDEwMCU7XCIsXG4gICAgICBtZWRpYTogXCJAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ4MHB4KVwiLFxuICAgIH0sXG5cbiAgICBcIi5zdl9tYWluIC5zdl9jb250YWluZXIgLnBhbmVsLWJvZHkuY2FyZC1ibG9jayAuc3Zfcm93IC5zdl9xc3RuXCI6IHtcbiAgICAgIHN0eWxlOiBcImRpc3BsYXk6IGJsb2NrOyB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1wiLFxuICAgICAgbWVkaWE6IFwiQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KVwiLFxuICAgIH0sXG4gICAgXCIuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5wYW5lbC1ib2R5LmNhcmQtYmxvY2sgLnN2X3JvdyAuc3ZfcXN0biAudGl0bGUtbGVmdFwiOiB7XG4gICAgICBzdHlsZTogXCJmbG9hdDogbm9uZTtcIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweClcIixcbiAgICB9LFxuICAgIFwiLnN2X21haW4gLnN2X2NvbnRhaW5lciAucGFuZWwtYm9keS5jYXJkLWJsb2NrIC5zdl9yb3cgLnN2X3FzdG4gLnN2X3FfcmFkaW9ncm91cF9pbmxpbmUsIC5zdl9tYWluIC5zdl9jb250YWluZXIgLnBhbmVsLWJvZHkuY2FyZC1ibG9jayAuc3Zfcm93IC5zdl9xc3RuIC5zdl9xX2NoZWNrYm94X2lubGluZSwgLnN2X21haW4gLnN2X2NvbnRhaW5lciAucGFuZWwtYm9keS5jYXJkLWJsb2NrIC5zdl9yb3cgLnN2X3FzdG4gLnN2X3FfaW1hZ2VwaWNrZXJfaW5saW5lXCI6IHtcbiAgICAgIHN0eWxlOiBcImRpc3BsYXk6IGJsb2NrO1wiLFxuICAgICAgbWVkaWE6IFwiQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KVwiLFxuICAgIH0sXG4gICAgXCIuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5wYW5lbC1ib2R5LmNhcmQtYmxvY2sgLnN2X3JvdyAuc3ZfcXN0biB0YWJsZS50YWJsZVwiOiB7XG4gICAgICBzdHlsZTogXCJkaXNwbGF5OiBibG9jaztcIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweClcIixcbiAgICB9LFxuICAgIFwiLnN2X21haW4gLnN2X2NvbnRhaW5lciAucGFuZWwtYm9keS5jYXJkLWJsb2NrIC5zdl9yb3cgLnN2X3FzdG4gdGFibGUudGFibGUgdGhlYWRcIjoge1xuICAgICAgc3R5bGU6IFwiZGlzcGxheTogbm9uZTtcIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweClcIixcbiAgICB9LFxuICAgIFwiLnN2X21haW4gLnN2X2NvbnRhaW5lciAucGFuZWwtYm9keS5jYXJkLWJsb2NrIC5zdl9yb3cgLnN2X3FzdG4gdGFibGUudGFibGUgdGJvZHksIC5zdl9tYWluIC5zdl9jb250YWluZXIgLnBhbmVsLWJvZHkuY2FyZC1ibG9jayAuc3Zfcm93IC5zdl9xc3RuIHRhYmxlLnRhYmxlIHRyLCAuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5wYW5lbC1ib2R5LmNhcmQtYmxvY2sgLnN2X3JvdyAuc3ZfcXN0biB0YWJsZS50YWJsZSB0ZFwiOiB7XG4gICAgICBzdHlsZTogXCJkaXNwbGF5OiBibG9jaztcIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweClcIixcbiAgICB9LFxuICAgIFwiLnN2X21haW4gLnN2X2NvbnRhaW5lciAucGFuZWwtYm9keS5jYXJkLWJsb2NrIC5zdl9yb3cgLnN2X3FzdG4gdGFibGUudGFibGU6bm90KC5zdl9xX21hdHJpeCkgdGQ6YmVmb3JlXCI6IHtcbiAgICAgIHN0eWxlOiBcImNvbnRlbnQ6IGF0dHIodGl0bGUpO1wiLFxuICAgICAgbWVkaWE6IFwiQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KVwiLFxuICAgIH0sXG4gICAgXCIuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5wYW5lbC1ib2R5LmNhcmQtYmxvY2sgLnN2X3JvdyAuc3ZfcXN0biB0YWJsZS5zdl9xX21hdHJpeCB0ZDphZnRlclwiOiB7XG4gICAgICBzdHlsZTogXCJjb250ZW50OiBhdHRyKHRpdGxlKTsgcGFkZGluZy1sZWZ0OiAxZW1cIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweClcIixcbiAgICB9LFxuICAgIFwiLnN2X21haW4gLnN2X2NvbnRhaW5lciAucGFuZWwtYm9keS5jYXJkLWJsb2NrIC5zdl9yb3cgLnN2X3FzdG4gLnJhZGlvIGxhYmVsLCAuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5wYW5lbC1ib2R5LmNhcmQtYmxvY2sgLnN2X3JvdyAuc3ZfcXN0biAuY2hlY2tib3ggbGFiZWxcIjoge1xuICAgICAgc3R5bGU6IFwibGluZS1oZWlnaHQ6IDEycHg7IHZlcnRpY2FsLWFsaWduOiB0b3A7XCIsXG4gICAgICBtZWRpYTogXCJAbWVkaWEgKG1heC13aWR0aDogNjAwcHgpXCIsXG4gICAgfSxcbiAgICBcIi5zdl9xc3RuIGxhYmVsLnN2X3FfbV9sYWJlbFwiOiB7XG4gICAgICBzdHlsZTogXCJkaXNwbGF5OiBpbmxpbmU7XCIsXG4gICAgICBtZWRpYTogXCJAbWVkaWEgKG1heC13aWR0aDogNjAwcHgpXCIsXG4gICAgfSxcbiAgICBcIi5zdl9tYWluIC5zdl9jdXN0b21faGVhZGVyXCI6IHtcbiAgICAgIHN0eWxlOiBcImRpc3BsYXk6IG5vbmU7XCIsXG4gICAgICBtZWRpYTogXCJAbWVkaWEgKG1heC13aWR0aDogMTMwMHB4KVwiLFxuICAgIH0sXG4gICAgXCIuc3ZfbWFpbiAuc3ZfY29udGFpbmVyIC5zdl9oZWFkZXIgaDNcIjoge1xuICAgICAgc3R5bGU6IFwiZm9udC1zaXplOiAxLjVlbTtcIixcbiAgICAgIG1lZGlhOiBcIkBtZWRpYSAobWF4LXdpZHRoOiAxMzAwcHgpXCIsXG4gICAgfSxcbiAgICBcIi5zdl9tYWluIC5zdl9jb250YWluZXIgLnN2X2hlYWRlciBoMyBzcGFuXCI6IHtcbiAgICAgIHN0eWxlOiBcImZvbnQtc2l6ZTogMC43NWVtO1wiLFxuICAgICAgbWVkaWE6IFwiQG1lZGlhIChtYXgtd2lkdGg6IDcwMHB4KVwiLFxuICAgIH0sXG5cbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcF9jc3MgLnN2LXByb2dyZXNzX190ZXh0XCI6IHtcbiAgICAgIHN0eWxlOiBcIm1hcmdpbi1sZWZ0OiA4ZW07XCIsXG4gICAgICBtZWRpYTogXCJAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpXCIsXG4gICAgfSxcblxuICAgIFwiLnN2X3Jvd1wiOiB7XG4gICAgICBzdHlsZTogXCIgZGlzcGxheTogZmxleDsgZmxleC13cmFwOiB3cmFwO1wiLFxuICAgICAgbWVkaWE6IFwiQHN1cHBvcnRzIChkaXNwbGF5OiBmbGV4KVwiLFxuICAgIH0sXG5cbiAgICBcIi5zdi12dWUtcm93LWFkZGl0aW9uYWwtZGl2XCI6IHtcbiAgICAgIHN0eWxlOiBcIiBkaXNwbGF5OiBmbGV4OyBmbGV4LXdyYXA6IHdyYXA7IGZsZXgtYmFzaXM6IDEwMCU7IHdpZHRoOiAxMDAlO1wiLFxuICAgICAgbWVkaWE6IFwiQHN1cHBvcnRzIChkaXNwbGF5OiBmbGV4KVwiLFxuICAgIH0sXG5cbiAgICBcIi5zdi1yb3cgPiAuc3Ytcm93X19wYW5lbCwgLnN2LXJvd19fcXVlc3Rpb246bm90KDpsYXN0LWNoaWxkKVwiOiB7XG4gICAgICBzdHlsZTogXCJmbG9hdDogbGVmdDtcIixcbiAgICAgIG1lZGlhOlxuICAgICAgICBcIkBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSwgKC1tcy1oaWdoLWNvbnRyYXN0OiBub25lKVwiLFxuICAgIH0sXG5cbiAgICBcIltkaXI9J3J0bCddLFtzdHlsZSo9J2RpcmVjdGlvbjpydGwnXSAuc3Ytcm93X19xdWVzdGlvbjpub3QoOmxhc3QtY2hpbGQpXCI6IHtcbiAgICAgIHN0eWxlOiBcImZsb2F0OiByaWdodDtcIixcbiAgICAgIG1lZGlhOlxuICAgICAgICBcIkBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSwgKC1tcy1oaWdoLWNvbnRyYXN0OiBub25lKVwiLFxuICAgIH0sXG5cbiAgICBcIi5zdi1yb3cgPiAuc3Ytcm93X19wYW5lbCwgLnN2LXJvd19fcXVlc3Rpb25cIjoge1xuICAgICAgc3R5bGU6IFwid2lkdGg6IDEwMCUgIWltcG9ydGFudDsgcGFkZGluZy1yaWdodDogMCAhaW1wb3J0YW50O1wiLFxuICAgICAgbWVkaWE6IFwiQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA2MDBweClcIixcbiAgICB9LFxuICB9O1xuXG4gIHB1YmxpYyBzdGF0aWMgVGhlbWVDb2xvcnM6IHsgW2tleTogc3RyaW5nXTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB9ID0ge1xuICAgIGRlZmF1bHQ6IHtcbiAgICAgIFwiJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2U3ZTdlN1wiLFxuICAgICAgXCIkYm9keS1jb250YWluZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmNGY0ZjRcIixcblxuICAgICAgXCIkbWFpbi1jb2xvclwiOiBcIiMxYWIzOTRcIixcbiAgICAgIFwiJG1haW4taG92ZXItY29sb3JcIjogXCIjMGFhMzg0XCIsXG4gICAgICBcIiRib2R5LWJhY2tncm91bmQtY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkaW5wdXRzLWJhY2tncm91bmQtY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkdGV4dC1jb2xvclwiOiBcIiM2ZDcwNzJcIixcbiAgICAgIFwiJHRleHQtaW5wdXQtY29sb3JcIjogXCIjNmQ3MDcyXCIsXG4gICAgICBcIiRoZWFkZXItY29sb3JcIjogXCIjNmQ3MDcyXCIsXG4gICAgICBcIiRib3JkZXItY29sb3JcIjogXCIjZTdlN2U3XCIsXG5cbiAgICAgIFwiJGVycm9yLWNvbG9yXCI6IFwiI2VkNTU2NVwiLFxuICAgICAgXCIkZXJyb3ItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmZDY1NzVcIixcblxuICAgICAgXCIkcHJvZ3Jlc3MtdGV4dC1jb2xvclwiOiBcIiM5ZDlkOWRcIixcbiAgICAgIFwiJGRpc2FibGUtY29sb3JcIjogXCIjZGJkYmRiXCIsXG4gICAgICBcIiRkaXNhYmxlZC1sYWJlbC1jb2xvclwiOiBcInJnYmEoNjQsIDY0LCA2NCwgMC41KVwiLFxuICAgICAgXCIkc2xpZGVyLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgIFwiJGRpc2FibGVkLXN3aXRjaC1jb2xvclwiOiBcIiM5ZjlmOWZcIixcbiAgICAgIFwiJGRpc2FibGVkLXNsaWRlci1jb2xvclwiOiBcIiNjZmNmY2ZcIixcbiAgICAgIFwiJGZvcmVncm91bmQtbGlnaHRcIjogXCIjOTA5MDkwXCIsXG4gICAgICBcIiRmb3JlZ3JvdW5kLWRpc2FibGVkXCI6IFwiIzE2MTYxNlwiLFxuICAgICAgXCIkYmFja2dyb3VuZC1kaW1cIjogXCIjZjNmM2YzXCIsXG5cbiAgICAgIFwiJHByb2dyZXNzLWJ1dHRvbnMtY29sb3JcIjogXCIjOGRkOWNhXCIsXG4gICAgICBcIiRwcm9ncmVzcy1idXR0b25zLWxpbmUtY29sb3JcIjogXCIjZDRkNGQ0XCJcbiAgICB9LFxuICAgIG9yYW5nZToge1xuICAgICAgXCIkaGVhZGVyLWJhY2tncm91bmQtY29sb3JcIjogXCIjNGE0YTRhXCIsXG4gICAgICBcIiRib2R5LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2Y4ZjhmOFwiLFxuXG4gICAgICBcIiRtYWluLWNvbG9yXCI6IFwiI2Y3ODExOVwiLFxuICAgICAgXCIkbWFpbi1ob3Zlci1jb2xvclwiOiBcIiNlNzcxMDlcIixcbiAgICAgIFwiJGJvZHktYmFja2dyb3VuZC1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiRpbnB1dHMtYmFja2dyb3VuZC1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiR0ZXh0LWNvbG9yXCI6IFwiIzRhNGE0YVwiLFxuICAgICAgXCIkdGV4dC1pbnB1dC1jb2xvclwiOiBcIiM0YTRhNGFcIixcbiAgICAgIFwiJGhlYWRlci1jb2xvclwiOiBcIiNmNzgxMTlcIixcbiAgICAgIFwiJGJvcmRlci1jb2xvclwiOiBcIiNlN2U3ZTdcIixcblxuICAgICAgXCIkZXJyb3ItY29sb3JcIjogXCIjZWQ1NTY1XCIsXG4gICAgICBcIiRlcnJvci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2ZkNjU3NVwiLFxuXG4gICAgICBcIiRwcm9ncmVzcy10ZXh0LWNvbG9yXCI6IFwiIzlkOWQ5ZFwiLFxuICAgICAgXCIkZGlzYWJsZS1jb2xvclwiOiBcIiNkYmRiZGJcIixcbiAgICAgIFwiJGRpc2FibGVkLWxhYmVsLWNvbG9yXCI6IFwicmdiYSg2NCwgNjQsIDY0LCAwLjUpXCIsXG4gICAgICBcIiRzbGlkZXItY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkZGlzYWJsZWQtc3dpdGNoLWNvbG9yXCI6IFwiIzlmOWY5ZlwiLFxuICAgICAgXCIkZGlzYWJsZWQtc2xpZGVyLWNvbG9yXCI6IFwiI2NmY2ZjZlwiLFxuICAgICAgXCIkZm9yZWdyb3VuZC1saWdodFwiOiBcIiM5MDkwOTBcIixcbiAgICAgIFwiJGZvcmVncm91bmQtZGlzYWJsZWRcIjogXCIjMTYxNjE2XCIsXG4gICAgICBcIiRiYWNrZ3JvdW5kLWRpbVwiOiBcIiNmM2YzZjNcIixcblxuICAgICAgXCIkcHJvZ3Jlc3MtYnV0dG9ucy1jb2xvclwiOiBcIiNmN2I3ODFcIixcbiAgICAgIFwiJHByb2dyZXNzLWJ1dHRvbnMtbGluZS1jb2xvclwiOiBcIiNkNGQ0ZDRcIlxuICAgIH0sXG4gICAgZGFya2JsdWU6IHtcbiAgICAgIFwiJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2Q5ZDhkZFwiLFxuICAgICAgXCIkYm9keS1jb250YWluZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmNmY3ZjJcIixcblxuICAgICAgXCIkbWFpbi1jb2xvclwiOiBcIiMzYzRmNmRcIixcbiAgICAgIFwiJG1haW4taG92ZXItY29sb3JcIjogXCIjMmMzZjVkXCIsXG4gICAgICBcIiRib2R5LWJhY2tncm91bmQtY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkaW5wdXRzLWJhY2tncm91bmQtY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkdGV4dC1jb2xvclwiOiBcIiM0YTRhNGFcIixcbiAgICAgIFwiJHRleHQtaW5wdXQtY29sb3JcIjogXCIjNGE0YTRhXCIsXG4gICAgICBcIiRoZWFkZXItY29sb3JcIjogXCIjNmQ3MDcyXCIsXG4gICAgICBcIiRib3JkZXItY29sb3JcIjogXCIjZTdlN2U3XCIsXG5cbiAgICAgIFwiJGVycm9yLWNvbG9yXCI6IFwiI2VkNTU2NVwiLFxuICAgICAgXCIkZXJyb3ItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmZDY1NzVcIixcblxuICAgICAgXCIkcHJvZ3Jlc3MtdGV4dC1jb2xvclwiOiBcIiM5ZDlkOWRcIixcbiAgICAgIFwiJGRpc2FibGUtY29sb3JcIjogXCIjZGJkYmRiXCIsXG4gICAgICBcIiRkaXNhYmxlZC1sYWJlbC1jb2xvclwiOiBcInJnYmEoNjQsIDY0LCA2NCwgMC41KVwiLFxuICAgICAgXCIkc2xpZGVyLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgIFwiJGRpc2FibGVkLXN3aXRjaC1jb2xvclwiOiBcIiM5ZjlmOWZcIixcbiAgICAgIFwiJGRpc2FibGVkLXNsaWRlci1jb2xvclwiOiBcIiNjZmNmY2ZcIixcbiAgICAgIFwiJGZvcmVncm91bmQtbGlnaHRcIjogXCIjOTA5MDkwXCIsXG4gICAgICBcIiRmb3JlZ3JvdW5kLWRpc2FibGVkXCI6IFwiIzE2MTYxNlwiLFxuICAgICAgXCIkYmFja2dyb3VuZC1kaW1cIjogXCIjZjNmM2YzXCIsXG5cbiAgICAgIFwiJHByb2dyZXNzLWJ1dHRvbnMtY29sb3JcIjogXCIjODM5ZWM5XCIsXG4gICAgICBcIiRwcm9ncmVzcy1idXR0b25zLWxpbmUtY29sb3JcIjogXCIjZDRkNGQ0XCJcbiAgICB9LFxuICAgIGRhcmtyb3NlOiB7XG4gICAgICBcIiRoZWFkZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNkZGQyY2VcIixcbiAgICAgIFwiJGJvZHktY29udGFpbmVyLWJhY2tncm91bmQtY29sb3JcIjogXCIjZjdlZmVkXCIsXG5cbiAgICAgIFwiJG1haW4tY29sb3JcIjogXCIjNjg2NTZlXCIsXG4gICAgICBcIiRtYWluLWhvdmVyLWNvbG9yXCI6IFwiIzU4NTU1ZVwiLFxuICAgICAgXCIkYm9keS1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgIFwiJGlucHV0cy1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgIFwiJHRleHQtY29sb3JcIjogXCIjNGE0YTRhXCIsXG4gICAgICBcIiR0ZXh0LWlucHV0LWNvbG9yXCI6IFwiIzRhNGE0YVwiLFxuICAgICAgXCIkaGVhZGVyLWNvbG9yXCI6IFwiIzZkNzA3MlwiLFxuICAgICAgXCIkYm9yZGVyLWNvbG9yXCI6IFwiI2U3ZTdlN1wiLFxuXG4gICAgICBcIiRlcnJvci1jb2xvclwiOiBcIiNlZDU1NjVcIixcbiAgICAgIFwiJGVycm9yLWJhY2tncm91bmQtY29sb3JcIjogXCIjZmQ2NTc1XCIsXG5cbiAgICAgIFwiJHByb2dyZXNzLXRleHQtY29sb3JcIjogXCIjOWQ5ZDlkXCIsXG4gICAgICBcIiRkaXNhYmxlLWNvbG9yXCI6IFwiI2RiZGJkYlwiLFxuICAgICAgXCIkZGlzYWJsZWQtbGFiZWwtY29sb3JcIjogXCJyZ2JhKDY0LCA2NCwgNjQsIDAuNSlcIixcbiAgICAgIFwiJHNsaWRlci1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiRkaXNhYmxlZC1zd2l0Y2gtY29sb3JcIjogXCIjOWY5ZjlmXCIsXG4gICAgICBcIiRkaXNhYmxlZC1zbGlkZXItY29sb3JcIjogXCIjY2ZjZmNmXCIsXG4gICAgICBcIiRmb3JlZ3JvdW5kLWxpZ2h0XCI6IFwiIzkwOTA5MFwiLFxuICAgICAgXCIkZm9yZWdyb3VuZC1kaXNhYmxlZFwiOiBcIiMxNjE2MTZcIixcbiAgICAgIFwiJGJhY2tncm91bmQtZGltXCI6IFwiI2YzZjNmM1wiLFxuXG4gICAgICBcIiRwcm9ncmVzcy1idXR0b25zLWNvbG9yXCI6IFwiI2M2YmVkNFwiLFxuICAgICAgXCIkcHJvZ3Jlc3MtYnV0dG9ucy1saW5lLWNvbG9yXCI6IFwiI2Q0ZDRkNFwiXG4gICAgfSxcbiAgICBzdG9uZToge1xuICAgICAgXCIkaGVhZGVyLWJhY2tncm91bmQtY29sb3JcIjogXCIjY2RjY2QyXCIsXG4gICAgICBcIiRib2R5LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2VmZWRmNFwiLFxuXG4gICAgICBcIiRtYWluLWNvbG9yXCI6IFwiIzBmMGYzM1wiLFxuICAgICAgXCIkbWFpbi1ob3Zlci1jb2xvclwiOiBcIiMxOTE5NTVcIixcbiAgICAgIFwiJGJvZHktYmFja2dyb3VuZC1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiRpbnB1dHMtYmFja2dyb3VuZC1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiR0ZXh0LWNvbG9yXCI6IFwiIzBmMGYzM1wiLFxuICAgICAgXCIkdGV4dC1pbnB1dC1jb2xvclwiOiBcIiMwZjBmMzNcIixcbiAgICAgIFwiJGhlYWRlci1jb2xvclwiOiBcIiMwZjBmMzNcIixcbiAgICAgIFwiJGJvcmRlci1jb2xvclwiOiBcIiNlN2U3ZTdcIixcblxuICAgICAgXCIkZXJyb3ItY29sb3JcIjogXCIjZWQ1NTY1XCIsXG4gICAgICBcIiRlcnJvci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2ZkNjU3NVwiLFxuXG4gICAgICBcIiRwcm9ncmVzcy10ZXh0LWNvbG9yXCI6IFwiIzlkOWQ5ZFwiLFxuICAgICAgXCIkZGlzYWJsZS1jb2xvclwiOiBcIiNkYmRiZGJcIixcbiAgICAgIFwiJGRpc2FibGVkLWxhYmVsLWNvbG9yXCI6IFwicmdiYSg2NCwgNjQsIDY0LCAwLjUpXCIsXG4gICAgICBcIiRzbGlkZXItY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkZGlzYWJsZWQtc3dpdGNoLWNvbG9yXCI6IFwiIzlmOWY5ZlwiLFxuICAgICAgXCIkZGlzYWJsZWQtc2xpZGVyLWNvbG9yXCI6IFwiI2NmY2ZjZlwiLFxuICAgICAgXCIkZm9yZWdyb3VuZC1saWdodFwiOiBcIiM5MDkwOTBcIixcbiAgICAgIFwiJGZvcmVncm91bmQtZGlzYWJsZWRcIjogXCIjMTYxNjE2XCIsXG4gICAgICBcIiRiYWNrZ3JvdW5kLWRpbVwiOiBcIiNmM2YzZjNcIixcblxuICAgICAgXCIkcHJvZ3Jlc3MtYnV0dG9ucy1jb2xvclwiOiBcIiM3NDc0OTFcIixcbiAgICAgIFwiJHByb2dyZXNzLWJ1dHRvbnMtbGluZS1jb2xvclwiOiBcIiNkNGQ0ZDRcIlxuICAgIH0sXG4gICAgd2ludGVyOiB7XG4gICAgICBcIiRoZWFkZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiM4MmI4ZGFcIixcbiAgICAgIFwiJGJvZHktY29udGFpbmVyLWJhY2tncm91bmQtY29sb3JcIjogXCIjZGFlMWU3XCIsXG5cbiAgICAgIFwiJG1haW4tY29sb3JcIjogXCIjM2MzYjQwXCIsXG4gICAgICBcIiRtYWluLWhvdmVyLWNvbG9yXCI6IFwiIzFlMWQyMFwiLFxuICAgICAgXCIkYm9keS1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgIFwiJGlucHV0cy1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwid2hpdGVcIixcbiAgICAgIFwiJHRleHQtY29sb3JcIjogXCIjMDAwXCIsXG4gICAgICBcIiR0ZXh0LWlucHV0LWNvbG9yXCI6IFwiIzAwMFwiLFxuICAgICAgXCIkaGVhZGVyLWNvbG9yXCI6IFwiIzAwMFwiLFxuICAgICAgXCIkYm9yZGVyLWNvbG9yXCI6IFwiI2U3ZTdlN1wiLFxuXG4gICAgICBcIiRlcnJvci1jb2xvclwiOiBcIiNlZDU1NjVcIixcbiAgICAgIFwiJGVycm9yLWJhY2tncm91bmQtY29sb3JcIjogXCIjZmQ2NTc1XCIsXG5cbiAgICAgIFwiJGRpc2FibGUtY29sb3JcIjogXCIjZGJkYmRiXCIsXG4gICAgICBcIiRwcm9ncmVzcy10ZXh0LWNvbG9yXCI6IFwiIzlkOWQ5ZFwiLFxuICAgICAgXCIkZGlzYWJsZWQtbGFiZWwtY29sb3JcIjogXCJyZ2JhKDY0LCA2NCwgNjQsIDAuNSlcIixcbiAgICAgIFwiJHNsaWRlci1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiRkaXNhYmxlZC1zd2l0Y2gtY29sb3JcIjogXCIjOWY5ZjlmXCIsXG4gICAgICBcIiRkaXNhYmxlZC1zbGlkZXItY29sb3JcIjogXCIjY2ZjZmNmXCIsXG4gICAgICBcIiRmb3JlZ3JvdW5kLWxpZ2h0XCI6IFwiIzkwOTA5MFwiLFxuICAgICAgXCIkZm9yZWdyb3VuZC1kaXNhYmxlZFwiOiBcIiMxNjE2MTZcIixcbiAgICAgIFwiJGJhY2tncm91bmQtZGltXCI6IFwiI2YzZjNmM1wiLFxuXG4gICAgICBcIiRwcm9ncmVzcy1idXR0b25zLWNvbG9yXCI6IFwiI2QxYzlmNVwiLFxuICAgICAgXCIkcHJvZ3Jlc3MtYnV0dG9ucy1saW5lLWNvbG9yXCI6IFwiI2Q0ZDRkNFwiXG4gICAgfSxcbiAgICB3aW50ZXJzdG9uZToge1xuICAgICAgXCIkaGVhZGVyLWJhY2tncm91bmQtY29sb3JcIjogXCIjMzIzMjMyXCIsXG4gICAgICBcIiRib2R5LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2Y4ZjhmOFwiLFxuXG4gICAgICBcIiRtYWluLWNvbG9yXCI6IFwiIzVhYzhmYVwiLFxuICAgICAgXCIkbWFpbi1ob3Zlci1jb2xvclwiOiBcIiMwNmExZTdcIixcbiAgICAgIFwiJGJvZHktYmFja2dyb3VuZC1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiRpbnB1dHMtYmFja2dyb3VuZC1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiR0ZXh0LWNvbG9yXCI6IFwiIzAwMFwiLFxuICAgICAgXCIkdGV4dC1pbnB1dC1jb2xvclwiOiBcIiMwMDBcIixcbiAgICAgIFwiJGhlYWRlci1jb2xvclwiOiBcIiMwMDBcIixcbiAgICAgIFwiJGJvcmRlci1jb2xvclwiOiBcIiNlN2U3ZTdcIixcblxuICAgICAgXCIkZXJyb3ItY29sb3JcIjogXCIjZWQ1NTY1XCIsXG4gICAgICBcIiRlcnJvci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2ZkNjU3NVwiLFxuXG4gICAgICBcIiRkaXNhYmxlLWNvbG9yXCI6IFwiI2RiZGJkYlwiLFxuICAgICAgXCIkcHJvZ3Jlc3MtdGV4dC1jb2xvclwiOiBcIiM5ZDlkOWRcIixcbiAgICAgIFwiJGRpc2FibGVkLWxhYmVsLWNvbG9yXCI6IFwicmdiYSg2NCwgNjQsIDY0LCAwLjUpXCIsXG4gICAgICBcIiRzbGlkZXItY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkZGlzYWJsZWQtc3dpdGNoLWNvbG9yXCI6IFwiIzlmOWY5ZlwiLFxuICAgICAgXCIkZGlzYWJsZWQtc2xpZGVyLWNvbG9yXCI6IFwiI2NmY2ZjZlwiLFxuICAgICAgXCIkZm9yZWdyb3VuZC1saWdodFwiOiBcIiM5MDkwOTBcIixcbiAgICAgIFwiJGZvcmVncm91bmQtZGlzYWJsZWRcIjogXCIjMTYxNjE2XCIsXG4gICAgICBcIiRiYWNrZ3JvdW5kLWRpbVwiOiBcIiNmM2YzZjNcIixcblxuICAgICAgXCIkcHJvZ3Jlc3MtYnV0dG9ucy1jb2xvclwiOiBcIiNhY2RjZjJcIixcbiAgICAgIFwiJHByb2dyZXNzLWJ1dHRvbnMtbGluZS1jb2xvclwiOiBcIiNkNGQ0ZDRcIlxuICAgIH0sXG4gICAgbW9kZXJuOiB7XG4gICAgICBcIiRtYWluLWNvbG9yXCI6IFwiIzFhYjM5NFwiLFxuICAgICAgXCIkYWRkLWJ1dHRvbi1jb2xvclwiOiBcIiMxOTQ4YjNcIixcbiAgICAgIFwiJHJlbW92ZS1idXR0b24tY29sb3JcIjogXCIjZmYxODAwXCIsXG4gICAgICBcIiRkaXNhYmxlLWNvbG9yXCI6IFwiI2RiZGJkYlwiLFxuICAgICAgXCIkcHJvZ3Jlc3MtdGV4dC1jb2xvclwiOiBcIiM5ZDlkOWRcIixcbiAgICAgIFwiJGRpc2FibGVkLWxhYmVsLWNvbG9yXCI6IFwicmdiYSg2NCwgNjQsIDY0LCAwLjUpXCIsXG4gICAgICBcIiRzbGlkZXItY29sb3JcIjogXCJ3aGl0ZVwiLFxuICAgICAgXCIkZGlzYWJsZWQtc3dpdGNoLWNvbG9yXCI6IFwiIzlmOWY5ZlwiLFxuICAgICAgXCIkZGlzYWJsZWQtc2xpZGVyLWNvbG9yXCI6IFwiI2NmY2ZjZlwiLFxuICAgICAgXCIkZXJyb3ItY29sb3JcIjogXCIjZDUyOTAxXCIsXG4gICAgICBcIiR0ZXh0LWNvbG9yXCI6IFwiIzQwNDA0MFwiLFxuICAgICAgXCIkbGlnaHQtdGV4dC1jb2xvclwiOiBcIiNmZmZcIixcbiAgICAgIFwiJGJ1dHRvbi10ZXh0LWNvbG9yXCI6IFwiI2ZmZlwiLFxuICAgICAgXCIkY2hlY2ttYXJrLWNvbG9yXCI6IFwiI2ZmZlwiLFxuICAgICAgXCIkbWF0cml4LXRleHQtY2hlY2tlZC1jb2xvclwiOiBcIiNmZmZcIixcblxuICAgICAgXCIkcHJvZ3Jlc3MtYnV0dG9ucy1jb2xvclwiOiBcIiM4ZGQ5Y2FcIixcbiAgICAgIFwiJHByb2dyZXNzLWJ1dHRvbnMtbGluZS1jb2xvclwiOiBcIiNkNGQ0ZDRcIixcblxuICAgICAgXCIkdGV4dC1pbnB1dC1jb2xvclwiOiBcIiM0MDQwNDBcIixcbiAgICAgIFwiJGlucHV0cy1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwidHJhbnNwYXJlbnRcIixcbiAgICAgIFwiJG1haW4taG92ZXItY29sb3JcIjogXCIjOWY5ZjlmXCIsXG4gICAgICBcIiRib2R5LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2Y0ZjRmNFwiLFxuICAgICAgXCIkdGV4dC1ib3JkZXItY29sb3JcIjogXCIjZDRkNGQ0XCIsXG4gICAgICBcIiRkaXNhYmxlZC10ZXh0LWNvbG9yXCI6IFwicmdiYSg2NCwgNjQsIDY0LCAwLjUpXCIsXG4gICAgICBcIiRib3JkZXItY29sb3JcIjogXCJyZ2IoNjQsIDY0LCA2NCwgMC41KVwiLFxuICAgICAgXCIkZHJvcGRvd24tYm9yZGVyLWNvbG9yXCI6IFwiI2Q0ZDRkNFwiLFxuICAgICAgXCIkaGVhZGVyLWJhY2tncm91bmQtY29sb3JcIjogXCIjZTdlN2U3XCIsXG4gICAgICBcIiRhbnN3ZXItYmFja2dyb3VuZC1jb2xvclwiOiBcInJnYmEoMjYsIDE3OSwgMTQ4LCAwLjIpXCIsXG4gICAgICBcIiRlcnJvci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwicmdiYSgyMTMsIDQxLCAxLCAwLjIpXCIsXG4gICAgICBcIiRyYWRpby1jaGVja2VkLWNvbG9yXCI6IFwiIzQwNDA0MFwiLFxuICAgICAgXCIkY2xlYW4tYnV0dG9uLWNvbG9yXCI6IFwiIzE5NDhiM1wiLFxuICAgICAgXCIkYm9keS1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2ZmZmZmZlwiLFxuICAgICAgXCIkZm9yZWdyb3VuZC1saWdodFwiOiBcIiM5MDkwOTBcIixcbiAgICAgIFwiJGZvcmVncm91bmQtZGlzYWJsZWRcIjogXCIjMTYxNjE2XCIsXG4gICAgICBcIiRiYWNrZ3JvdW5kLWRpbVwiOiBcIiNmM2YzZjNcIixcbiAgICB9LFxuICAgIGJvb3RzdHJhcDoge1xuICAgICAgXCIkbWFpbi1jb2xvclwiOiBcIiMxOGE2ODlcIixcbiAgICAgIFwiJHRleHQtY29sb3JcIjogXCIjNDA0MDQwO1wiLFxuICAgICAgXCIkdGV4dC1pbnB1dC1jb2xvclwiOiBcIiM0MDQwNDA7XCIsXG4gICAgICBcIiRwcm9ncmVzcy10ZXh0LWNvbG9yXCI6IFwiIzlkOWQ5ZFwiLFxuICAgICAgXCIkZGlzYWJsZS1jb2xvclwiOiBcIiNkYmRiZGJcIixcbiAgICAgIFwiJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yXCI6IFwiI2U3ZTdlN1wiLFxuICAgICAgXCIkZGlzYWJsZWQtbGFiZWwtY29sb3JcIjogXCJyZ2JhKDY0LCA2NCwgNjQsIDAuNSlcIixcbiAgICAgIFwiJHNsaWRlci1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiRkaXNhYmxlZC1zd2l0Y2gtY29sb3JcIjogXCIjOWY5ZjlmXCIsXG4gICAgICBcIiRkaXNhYmxlZC1zbGlkZXItY29sb3JcIjogXCIjY2ZjZmNmXCIsXG4gICAgICBcIiRmb3JlZ3JvdW5kLWxpZ2h0XCI6IFwiIzkwOTA5MFwiLFxuICAgICAgXCIkZm9yZWdyb3VuZC1kaXNhYmxlZFwiOiBcIiMxNjE2MTZcIixcbiAgICAgIFwiJGJhY2tncm91bmQtZGltXCI6IFwiI2YzZjNmM1wiLFxuXG4gICAgICBcIiRwcm9ncmVzcy1idXR0b25zLWNvbG9yXCI6IFwiIzhkZDZjN1wiLFxuICAgICAgXCIkcHJvZ3Jlc3MtYnV0dG9ucy1saW5lLWNvbG9yXCI6IFwiI2Q0ZDRkNFwiLFxuICAgIH0sXG4gICAgYm9vdHN0cmFwbWF0ZXJpYWw6IHtcbiAgICAgIFwiJG1haW4tY29sb3JcIjogXCIjMThhNjg5XCIsXG4gICAgICBcIiR0ZXh0LWNvbG9yXCI6IFwiIzQwNDA0MDtcIixcbiAgICAgIFwiJHRleHQtaW5wdXQtY29sb3JcIjogXCIjNDA0MDQwO1wiLFxuICAgICAgXCIkcHJvZ3Jlc3MtdGV4dC1jb2xvclwiOiBcIiM5ZDlkOWRcIixcbiAgICAgIFwiJGRpc2FibGUtY29sb3JcIjogXCIjZGJkYmRiXCIsXG4gICAgICBcIiRoZWFkZXItYmFja2dyb3VuZC1jb2xvclwiOiBcIiNlN2U3ZTdcIixcblxuICAgICAgXCIkZGlzYWJsZWQtbGFiZWwtY29sb3JcIjogXCJyZ2JhKDY0LCA2NCwgNjQsIDAuNSlcIixcbiAgICAgIFwiJHNsaWRlci1jb2xvclwiOiBcIndoaXRlXCIsXG4gICAgICBcIiRkaXNhYmxlZC1zd2l0Y2gtY29sb3JcIjogXCIjOWY5ZjlmXCIsXG4gICAgICBcIiRkaXNhYmxlZC1zbGlkZXItY29sb3JcIjogXCIjY2ZjZmNmXCIsXG4gICAgICBcIiRib2R5LWJhY2tncm91bmQtY29sb3JcIjogXCIjZmZmZmZmXCIsXG4gICAgICBcIiRmb3JlZ3JvdW5kLWxpZ2h0XCI6IFwiIzkwOTA5MFwiLFxuICAgICAgXCIkZm9yZWdyb3VuZC1kaXNhYmxlZFwiOiBcIiMxNjE2MTZcIixcbiAgICAgIFwiJGJhY2tncm91bmQtZGltXCI6IFwiI2YzZjNmM1wiLFxuXG4gICAgICBcIiRwcm9ncmVzcy1idXR0b25zLWNvbG9yXCI6IFwiIzhkZDZjN1wiLFxuICAgICAgXCIkcHJvZ3Jlc3MtYnV0dG9ucy1saW5lLWNvbG9yXCI6IFwiI2Q0ZDRkNFwiLFxuICAgIH0sXG4gIH07XG5cbiAgcHVibGljIHN0YXRpYyBUaGVtZUNzczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICBcIi5zdl9kZWZhdWx0X2Nzc1wiOiBcImJhY2tncm91bmQtY29sb3I6ICRib2R5LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgaHJcIjogXCJib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XCIsXG5cbiAgICBcIi5zdl9kZWZhdWx0X2NzcyBpbnB1dFt0eXBlPSdidXR0b24nXSwgLnN2X2RlZmF1bHRfY3NzIGJ1dHRvblwiOlxuICAgICAgXCJjb2xvcjogJGJvZHktYmFja2dyb3VuZC1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgaW5wdXRbdHlwZT0nYnV0dG9uJ106aG92ZXIsIC5zdl9kZWZhdWx0X2NzcyBidXR0b246aG92ZXJcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4taG92ZXItY29sb3I7XCIsXG5cbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfaGVhZGVyXCI6IFwiY29sb3I6ICRoZWFkZXItY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X2N1c3RvbV9oZWFkZXJcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9jb250YWluZXJcIjogXCJjb2xvcjogJHRleHQtY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X2JvZHlcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJGJvZHktYmFja2dyb3VuZC1jb2xvcjsgYm9yZGVyLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfcHJvZ3Jlc3NcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9wcm9ncmVzc19iYXJcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcblxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0IGxpOmJlZm9yZVwiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRwcm9ncmVzcy1idXR0b25zLWNvbG9yOyBiYWNrZ3JvdW5kLWNvbG9yOiAkcHJvZ3Jlc3MtYnV0dG9ucy1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaTphZnRlclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRwcm9ncmVzcy1idXR0b25zLWxpbmUtY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QgLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX3BhZ2UtdGl0bGVcIjogXCIgY29sb3I6ICR0ZXh0LWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0IC5zdl9wcm9ncmVzcy1idXR0b25zX19wYWdlLWRlc2NyaXB0aW9uXCI6IFwiIGNvbG9yOiAkdGV4dC1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaS5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLXBhc3NlZDpiZWZvcmVcIjpcbiAgICAgIFwiYm9yZGVyLWNvbG9yOiAkbWFpbi1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QgbGkuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1lbGVtZW50LS1wYXNzZWQgKyBsaTphZnRlclwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkcHJvZ3Jlc3MtYnV0dG9ucy1jb2xvclwiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0IGxpLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtZWxlbWVudC0tY3VycmVudDpiZWZvcmVcIjpcbiAgICAgIFwiYm9yZGVyLWNvbG9yOiAkbWFpbi1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QgbGkuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1lbGVtZW50LS1wYXNzZWQuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1lbGVtZW50LS1jdXJyZW50OmJlZm9yZVwiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRtYWluLWNvbG9yOyBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcIixcblxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9wX3Jvb3QgPiAuc3Zfcm93XCI6IFwiYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9wX3Jvb3QgPiAuc3Zfcm93Om50aC1jaGlsZChvZGQpXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRib2R5LWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X3Bfcm9vdCA+IC5zdl9yb3c6bnRoLWNoaWxkKGV2ZW4pXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRib2R5LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X3Ffb3RoZXIgaW5wdXRcIjpcbiAgICAgIFwiY29sb3I6ICR0ZXh0LWNvbG9yOyAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogJHRleHQtY29sb3I7IGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0cy1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9xX3RleHRfcm9vdFwiOlxuICAgICAgXCJjb2xvcjogJHRleHQtY29sb3I7IC13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiAkdGV4dC1jb2xvcjsgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yOyBiYWNrZ3JvdW5kLWNvbG9yOiAkaW5wdXRzLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X3FfZHJvcGRvd25fY29udHJvbFwiOlxuICAgICAgXCJjb2xvcjogJHRleHQtaW5wdXQtY29sb3I7IGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0cy1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIGlucHV0W3R5cGU9J3RleHQnXVwiOlxuICAgICAgXCJjb2xvcjogJHRleHQtY29sb3I7IC13ZWJraXQtdGV4dC1maWxsLWNvbG9yOiAkdGV4dC1jb2xvcjsgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yOyBiYWNrZ3JvdW5kLWNvbG9yOiAkaW5wdXRzLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3Mgc2VsZWN0XCI6XG4gICAgICBcImNvbG9yOiAkdGV4dC1jb2xvcjsgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yOyBiYWNrZ3JvdW5kLWNvbG9yOiAkaW5wdXRzLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgdGV4dGFyZWFcIjpcbiAgICAgIFwiY29sb3I6ICR0ZXh0LWlucHV0LWNvbG9yOyAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogJHRleHQtaW5wdXQtY29sb3I7IGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0cy1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIGlucHV0Om5vdChbdHlwZT0nYnV0dG9uJ10pOm5vdChbdHlwZT0ncmVzZXQnXSk6bm90KFt0eXBlPSdzdWJtaXQnXSk6bm90KFt0eXBlPSdpbWFnZSddKTpub3QoW3R5cGU9J2NoZWNrYm94J10pOm5vdChbdHlwZT0ncmFkaW8nXSlcIjpcbiAgICAgIFwiYm9yZGVyOiAxcHggc29saWQgJGJvcmRlci1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0cy1iYWNrZ3JvdW5kLWNvbG9yO2NvbG9yOiAkdGV4dC1pbnB1dC1jb2xvcjsgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6ICR0ZXh0LWlucHV0LWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIGlucHV0Om5vdChbdHlwZT0nYnV0dG9uJ10pOm5vdChbdHlwZT0ncmVzZXQnXSk6bm90KFt0eXBlPSdzdWJtaXQnXSk6bm90KFt0eXBlPSdpbWFnZSddKTpub3QoW3R5cGU9J2NoZWNrYm94J10pOm5vdChbdHlwZT0ncmFkaW8nXSk6Zm9jdXNcIjpcbiAgICAgIFwiYm9yZGVyOiAxcHggc29saWQgJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X2NvbnRhaW5lciAuc3ZfYm9keSAuc3ZfcF9yb290IC5zdl9xIC5zdl9zZWxlY3Rfd3JhcHBlciAuc3ZfcV9kcm9wZG93bl9jb250cm9sIFwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkaW5wdXRzLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X3Ffb3RoZXIgaW5wdXQ6Zm9jdXNcIjogXCJib3JkZXItY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9xX3RleHRfcm9vdDpmb2N1c1wiOiBcImJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgLnN2X3FfZHJvcGRvd25fY29udHJvbDpmb2N1c1wiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIGlucHV0W3R5cGU9J3RleHQnXTpmb2N1c1wiOiBcImJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgJy5zdl9kZWZhdWx0X2NzcyAuc3ZfY29udGFpbmVyIC5zdl9ib2R5IC5zdl9wX3Jvb3QgLnN2X3EgaW5wdXRbdHlwZT1cInJhZGlvXCJdOmZvY3VzLCAuc3ZfZGVmYXVsdF9jc3MgLnN2X2NvbnRhaW5lciAuc3ZfYm9keSAuc3ZfcF9yb290IC5zdl9xIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXTpmb2N1cyc6XG4gICAgICBcIm91dGxpbmU6IDFweCBkb3R0ZWQgJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3Mgc2VsZWN0OmZvY3VzXCI6IFwiYm9yZGVyLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyB0ZXh0YXJlYTpmb2N1c1wiOiBcImJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7XCIsXG5cbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3Zfc2VsZWN0X3dyYXBwZXJcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJGJvZHktYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3Zfc2VsZWN0X3dyYXBwZXI6OmJlZm9yZVwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcblxuICAgIFwiLnN2X2RlZmF1bHRfY3NzIC5zdl9xX3JhdGluZ19pdGVtLmFjdGl2ZSAuc3ZfcV9yYXRpbmdfaXRlbV90ZXh0XCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWhvdmVyLWNvbG9yOyBib3JkZXItY29sb3I6ICRtYWluLWhvdmVyLWNvbG9yOyBjb2xvcjogJGJvZHktYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfcV9yYXRpbmdfaXRlbSAuc3ZfcV9yYXRpbmdfaXRlbV90ZXh0XCI6XG4gICAgICBcImJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfcV9yYXRpbmdfaXRlbSAuc3ZfcV9yYXRpbmdfaXRlbV90ZXh0OmhvdmVyXCI6XG4gICAgICBcImJvcmRlci1jb2xvcjogJG1haW4taG92ZXItY29sb3I7XCIsXG5cbiAgICBcIi5zdl9kZWZhdWx0X2NzcyB0YWJsZS5zdl9xX21hdHJpeCB0clwiOiBcImJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjtcIixcbiAgICBcIi5zdl9kZWZhdWx0X2NzcyB0YWJsZS5zdl9xX21hdHJpeF9kcm9wZG93biB0clwiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XCIsXG4gICAgXCIuc3ZfZGVmYXVsdF9jc3MgdGFibGUuc3ZfcV9tYXRyaXhfZHluYW1pYyB0clwiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XCIsXG5cbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfcV9tX2NlbGxfc2VsZWN0ZWRcIjpcbiAgICAgIFwiY29sb3I6ICRib2R5LWJhY2tncm91bmQtY29sb3I7IGJhY2tncm91bmQtY29sb3I6ICRtYWluLWhvdmVyLWNvbG9yO1wiLFxuXG4gICAgXCIuc3ZfbWFpbiAuc3ZfcV9maWxlX3JlbW92ZTpob3ZlclwiOiBcImNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdl9xX2ZpbGVfY2hvb3NlX2J1dHRvblwiOlxuICAgICAgXCJjb2xvcjogJGJvZHktYmFja2dyb3VuZC1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3ZfcV9maWxlX2Nob29zZV9idXR0b246aG92ZXJcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4taG92ZXItY29sb3I7XCIsXG5cbiAgICBcIi5zdl9tYWluIC5zdl9xX2ltZ3NlbC5jaGVja2VkIGxhYmVsPmRpdlwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yXCIsXG5cbiAgICBcIi5zdl9kZWZhdWx0X2NzcyAuc3ZfcF9kZXNjcmlwdGlvblwiOiBcInBhZGRpbmctbGVmdDogMS4yOWVtO1wiLFxuICAgIC8vcHJvZ3Jlc3MgYmFyXG4gICAgXCIuc3ZfbWFpbiAuc3YtcHJvZ3Jlc3NcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkaGVhZGVyLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcHJvZ3Jlc3NfX2JhclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuXG4gICAgLy9wYW5lbGR5bmFtaWNcbiAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuLnN2LXBhbmVsZHluYW1pY19fcHJldi1idG4tLWRpc2FibGVkLCAuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19uZXh0LWJ0bi5zdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuLS1kaXNhYmxlZFwiOlxuICAgICAgXCJmaWxsOiAkZGlzYWJsZS1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX3Byb2dyZXNzLXRleHRcIjogXCJjb2xvcjogJHByb2dyZXNzLXRleHQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0biwgLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fbmV4dC1idG5cIjpcbiAgICAgIFwiZmlsbDogJHRleHQtY29sb3JcIixcblxuICAgIC8vYm9vbGVhblxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW5fX3N3aXRjaFwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW5fX3NsaWRlclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRzbGlkZXItY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbl9fbGFiZWwtLWRpc2FibGVkXCI6IFwiY29sb3I6ICRkaXNhYmxlZC1sYWJlbC1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuLS1kaXNhYmxlZCAuc3YtYm9vbGVhbl9fc3dpdGNoXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlZC1zd2l0Y2gtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbi0tZGlzYWJsZWQgLnN2LWJvb2xlYW5fX3NsaWRlclwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkZGlzYWJsZWQtc2xpZGVyLWNvbG9yO1wiLFxuICAgIC8vZW8gYm9vbGVhblxuXG4gICAgLy9zaWduYXR1cmUgcGFkXG4gICAgXCIuc3ZfbWFpbiAuc2pzX3NwX2NvbnRhaW5lclwiOiBcImJvcmRlcjogMXB4IGRhc2hlZCAkZGlzYWJsZS1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zanNfc3BfcGxhY2Vob2xkZXJcIjogXCJjb2xvcjogJGZvcmVncm91bmQtbGlnaHQ7XCIsXG5cbiAgICBcIi5zdl9tYWluIC5zdl9tYXRyaXhfZGV0YWlsX3Jvd1wiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAjZWRlZGVkOyBib3JkZXItdG9wOiAxcHggc29saWQgJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuXG4gICAgLy9hY3Rpb24tYmFyXG4gICAgXCIuc3ZfbWFpbiAuc3YtYWN0aW9uLWJhci1pdGVtXCI6IFwiY29sb3I6ICR0ZXh0LWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbi1iYXItaXRlbV9faWNvbiB1c2VcIjogXCJmaWxsOiAkZm9yZWdyb3VuZC1saWdodDtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1hY3Rpb24tYmFyLWl0ZW06aG92ZXJcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZC1kaW07XCIsXG4gICAgLy9lbyBhY3Rpb24tYmFyXG5cbiAgICAvL2J1dHRvbi1ncm91cFxuICAgIFwiLnN2X21haW4gLnN2LWJ1dHRvbi1ncm91cF9faXRlbS0taG92ZXI6aG92ZXJcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtZGltO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJ1dHRvbi1ncm91cF9faXRlbS1pY29uIHVzZVwiOiBcImZpbGw6ICRmb3JlZ3JvdW5kLWxpZ2h0O1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJ1dHRvbi1ncm91cF9faXRlbS0tc2VsZWN0ZWRcIjogXCJjb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYnV0dG9uLWdyb3VwX19pdGVtLS1zZWxlY3RlZCAuc3YtYnV0dG9uLWdyb3VwX19pdGVtLWljb24gdXNlXCI6XG4gICAgICBcImZpbGw6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJ1dHRvbi1ncm91cF9faXRlbS0tZGlzYWJsZWRcIjogXCJjb2xvcjogJGZvcmVncm91bmQtZGlzYWJsZWQ7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYnV0dG9uLWdyb3VwX19pdGVtLS1kaXNhYmxlZCAuc3YtYnV0dG9uLWdyb3VwX19pdGVtLWljb24gdXNlXCI6XG4gICAgICBcImZpbGw6ICRmb3JlZ3JvdW5kLWRpc2FibGVkO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJ1dHRvbi1ncm91cF9faXRlbVwiOlxuICAgICAgXCJiYWNrZ3JvdW5kOiAkYm9keS1iYWNrZ3JvdW5kLWNvbG9yOyBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XCIsXG5cbiAgICAvL2VvIGJ1dHRvbi1ncm91cFxuXG4gICAgXCIuc3ZfbWFpbiAuc3ZfcXN0biB0ZXh0YXJlYVwiOiBcIm1heC13aWR0aDogMTAwJVwiLFxuXG4gICAgLy9kcmFnLWRyb3BcbiAgICBcIi5zdl9tYWluIC5zdi1tYXRyaXhkeW5hbWljX19kcmFnLWljb25cIjogXCJwYWRkaW5nLXRvcDoxNHB4XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtbWF0cml4ZHluYW1pY19fZHJhZy1pY29uOmFmdGVyXCI6XG4gICAgICBcImNvbnRlbnQ6ICcgJzsgZGlzcGxheTogYmxvY2s7IGhlaWdodDogNnB4OyB3aWR0aDogMjBweDsgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlci1jb2xvcjsgYm94LXNpemluZzogYm9yZGVyLWJveDsgYm9yZGVyLXJhZGl1czogMTBweDsgY3Vyc29yOiBtb3ZlOyBtYXJnaW4tdG9wOiAxMnB4O1wiLFxuICAgIFwiLnN2X21haW4gLnN2LW1hdHJpeF9fZHJhZy1kcm9wLWdob3N0LXBvc2l0aW9uLXRvcCwgLnN2X21haW4gLnN2LW1hdHJpeF9fZHJhZy1kcm9wLWdob3N0LXBvc2l0aW9uLWJvdHRvbVwiOlxuICAgICAgXCJwb3NpdGlvbjogcmVsYXRpdmU7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtbWF0cml4X19kcmFnLWRyb3AtZ2hvc3QtcG9zaXRpb24tdG9wOjphZnRlciwgLnN2X21haW4gLnN2LW1hdHJpeF9fZHJhZy1kcm9wLWdob3N0LXBvc2l0aW9uLWJvdHRvbTo6YWZ0ZXJcIjpcbiAgICAgIFwiY29udGVudDogJyc7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDRweDsgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcHJpbWFyeSwgIzE5YjM5NCk7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMDtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1tYXRyaXhfX2RyYWctZHJvcC1naG9zdC1wb3NpdGlvbi10b3A6OmFmdGVyXCI6IFwidG9wOiAwO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LW1hdHJpeF9fZHJhZy1kcm9wLWdob3N0LXBvc2l0aW9uLWJvdHRvbTo6YWZ0ZXJcIjogXCJib3R0b206IDA7XCIsXG4gICAgLy9lbyBkcmFnLWRyb3BcbiAgICAvL2xpc3RcbiAgICBcIi5zdi1saXN0X19pbnB1dFwiOiBcImNvbG9yOiAkdGV4dC1pbnB1dC1jb2xvcjsgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yOyBiYWNrZ3JvdW5kLWNvbG9yOiAkaW5wdXRzLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3YtbGlzdF9faW5wdXQ6OnBsYWNlaG9sZGVyXCI6IFwiY29sb3I6ICRmb3JlZ3JvdW5kLWxpZ2h0O1wiLFxuICAgIFwiLnN2LWxpc3RfX2lucHV0OmZvY3VzXCI6IFwiYm9yZGVyLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdi1saXN0X19pbnB1dDpkaXNhYmxlZFwiOiBcImNvbG9yOiAkZm9yZWdyb3VuZC1kaXNhYmxlZDtcIixcbiAgICBcIi5zdi1saXN0X19pbnB1dDpkaXNhYmxlZDo6cGxhY2Vob2xkZXJcIjogXCJjb2xvcjogJGZvcmVncm91bmQtZGlzYWJsZWQ7XCIsXG4gICAgLy9lbyBsaXN0XG4gICAgXCIuc3Ytc2tlbGV0b24tZWxlbWVudFwiOiBcImJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWRpbTtcIixcbiAgfTtcblxuICBwdWJsaWMgc3RhdGljIG1vZGVyblRoZW1lQ3NzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgIC8vIFwiLnN2LXBhbmVsZHluYW1pY19fYWRkLWJ0blwiOiBcImJhY2tncm91bmQtY29sb3I6ICRhZGQtYnV0dG9uLWNvbG9yO1wiLFxuICAgIC8vIFwiLnN2LXBhbmVsZHluYW1pY19fcmVtb3ZlLWJ0blwiOiBcImJhY2tncm91bmQtY29sb3I6ICRyZW1vdmUtYnV0dG9uLWNvbG9yO1wiLFxuICAgIFwiLnN2LWJvb2xlYW5fX3N3aXRjaFwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2LWJvb2xlYW5fX3NsaWRlclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRzbGlkZXItY29sb3I7XCIsXG4gICAgXCIuc3YtYm9vbGVhbl9fbGFiZWwtLWRpc2FibGVkXCI6IFwiY29sb3I6ICRkaXNhYmxlZC1sYWJlbC1jb2xvcjtcIixcbiAgICBcIi5zdi1ib29sZWFuLS1kaXNhYmxlZCAuc3YtYm9vbGVhbl9fc3dpdGNoXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlZC1zd2l0Y2gtY29sb3I7XCIsXG4gICAgXCIuc3YtYm9vbGVhbi0tZGlzYWJsZWQgLnN2LWJvb2xlYW5fX3NsaWRlclwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkZGlzYWJsZWQtc2xpZGVyLWNvbG9yO1wiLFxuXG4gICAgXCIuc3YtYnRuXCI6IFwiY29sb3I6ICRidXR0b24tdGV4dC1jb2xvcjtcIixcbiAgICBcIi5zdi1jaGVja2JveF9fc3ZnXCI6IFwiYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yOyBmaWxsOiB0cmFuc3BhcmVudDtcIixcbiAgICBcIi5zdi1jaGVja2JveC0tYWxsb3dob3Zlcjpob3ZlciAuc3YtY2hlY2tib3hfX3N2Z1wiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1ob3Zlci1jb2xvcjsgZmlsbDogJGNoZWNrbWFyay1jb2xvcjtcIixcbiAgICBcIi5zdi1jaGVja2JveC0tY2hlY2tlZCAuc3YtY2hlY2tib3hfX3N2Z1wiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjsgZmlsbDogJGNoZWNrbWFyay1jb2xvcjtcIixcbiAgICBcIi5zdi1jaGVja2JveC0tY2hlY2tlZC5zdi1jaGVja2JveC0tZGlzYWJsZWQgLnN2LWNoZWNrYm94X19zdmdcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJGRpc2FibGUtY29sb3I7IGZpbGw6ICRjaGVja21hcmstY29sb3I7XCIsXG4gICAgXCIuc3YtY2hlY2tib3gtLWRpc2FibGVkIC5zdi1jaGVja2JveF9fc3ZnXCI6IFwiYm9yZGVyLWNvbG9yOiAkZGlzYWJsZS1jb2xvcjtcIixcbiAgICBcIi5zdi1jb21tZW50XCI6IFwiYm9yZGVyLWNvbG9yOiAkdGV4dC1ib3JkZXItY29sb3I7IG1heC13aWR0aDogMTAwJTtcIixcbiAgICBcIi5zdi1jb21tZW50OmZvY3VzXCI6IFwiYm9yZGVyLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdi1jb21wbGV0ZWRwYWdlXCI6XG4gICAgICBcImNvbG9yOiAkdGV4dC1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJGJvZHktY29udGFpbmVyLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3YtY29udGFpbmVyLW1vZGVyblwiOiBcImNvbG9yOiAkdGV4dC1jb2xvcjtcIixcbiAgICBcIi5zdi1jb250YWluZXItbW9kZXJuX190aXRsZVwiOiBcImNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdi1kZXNjcmlwdGlvblwiOiBcImNvbG9yOiAkZGlzYWJsZWQtdGV4dC1jb2xvcjtcIixcbiAgICBcIi5zdi1kcm9wZG93blwiOiBcImJvcmRlci1ib3R0b206IDAuMDZlbSBzb2xpZCAkdGV4dC1ib3JkZXItY29sb3I7XCIsXG4gICAgXCIuc3YtZHJvcGRvd246Zm9jdXNcIjogXCJib3JkZXItY29sb3I6ICRkcm9wZG93bi1ib3JkZXItY29sb3I7XCIsXG4gICAgXCIuc3YtZHJvcGRvd24tLWVycm9yXCI6IFwiYm9yZGVyLWNvbG9yOiAkZXJyb3ItY29sb3I7IGNvbG9yOiAkZXJyb3ItY29sb3I7XCIsXG4gICAgXCIuc3YtZHJvcGRvd24tLWVycm9yOjpwbGFjZWhvbGRlclwiOiBcImNvbG9yOiAkZXJyb3ItY29sb3I7XCIsXG4gICAgXCIuc3YtZHJvcGRvd24tLWVycm9yOjotbXMtaW5wdXQtcGxhY2Vob2xkZXJcIjogXCJjb2xvcjogJGVycm9yLWNvbG9yO1wiLFxuICAgIFwiLnN2LWZpbGVfX2RlY29yYXRvclwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkYm9keS1jb250YWluZXItYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdi1maWxlX19jbGVhbi1idG5cIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkcmVtb3ZlLWJ1dHRvbi1jb2xvcjtcIixcbiAgICBcIi5zdi1maWxlX19jaG9vc2UtYnRuOm5vdCguc3YtZmlsZV9fY2hvb3NlLWJ0bi0tZGlzYWJsZWQpXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRhZGQtYnV0dG9uLWNvbG9yO1wiLFxuICAgIFwiLnN2LWZpbGVfX2Nob29zZS1idG4tLWRpc2FibGVkXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJGRpc2FibGUtY29sb3I7XCIsXG4gICAgXCIuc3YtZmlsZV9fcmVtb3ZlLXN2Z1wiOiBcImZpbGw6ICNmZjE4MDA7XCIsXG4gICAgXCIuc3YtZmlsZV9fc2lnbiBhXCI6IFwiY29sb3I6ICR0ZXh0LWNvbG9yO1wiLFxuICAgIFwiLnN2LWZvb3Rlcl9fY29tcGxldGUtYnRuXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3YtZm9vdGVyX19uZXh0LWJ0blwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2LWZvb3Rlcl9fcHJldi1idG5cIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdi1mb290ZXJfX3N0YXJ0LWJ0blwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2LWZvb3Rlcl9fcHJldmlldy1idG5cIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdi1mb290ZXJfX2VkaXQtYnRuXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3YtaW1hZ2VwaWNrZXJfX2l0ZW0tLWFsbG93aG92ZXI6aG92ZXIgLnN2LWltYWdlcGlja2VyX19pbWFnZVwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1ob3Zlci1jb2xvcjsgYm9yZGVyLWNvbG9yOiAkbWFpbi1ob3Zlci1jb2xvcjtcIixcbiAgICBcIi5zdi1pbWFnZXBpY2tlcl9faXRlbS0tY2hlY2tlZCAuc3YtaW1hZ2VwaWNrZXJfX2ltYWdlXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yOyBib3JkZXItY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2LWltYWdlcGlja2VyX19pdGVtLS1kaXNhYmxlZC5zdi1pbWFnZXBpY2tlcl9faXRlbS0tY2hlY2tlZCAuc3YtaW1hZ2VwaWNrZXJfX2ltYWdlXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlLWNvbG9yOyBib3JkZXItY29sb3I6ICRkaXNhYmxlLWNvbG9yO1wiLFxuICAgIFwiLnN2LWl0ZW1fX2NvbnRyb2w6Zm9jdXMgKyAuc3YtaXRlbV9fZGVjb3JhdG9yXCI6XG4gICAgICBcImJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3YtbWF0cml4X190ZXh0LS1jaGVja2VkXCI6XG4gICAgICBcImNvbG9yOiAkbWF0cml4LXRleHQtY2hlY2tlZC1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3YtbWF0cml4X190ZXh0LS1kaXNhYmxlZC5zdi1tYXRyaXhfX3RleHQtLWNoZWNrZWRcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJGRpc2FibGUtY29sb3I7XCIsXG4gICAgXCIuc3YtbWF0cml4ZHluYW1pY19fYWRkLWJ0blwiOiBcImJhY2tncm91bmQtY29sb3I6ICRhZGQtYnV0dG9uLWNvbG9yO1wiLFxuICAgIFwiLnN2LW1hdHJpeGR5bmFtaWNfX3JlbW92ZS1idG5cIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkcmVtb3ZlLWJ1dHRvbi1jb2xvcjtcIixcbiAgICBcIi5zdi1wYW5lbGR5bmFtaWNfX2FkZC1idG5cIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkYWRkLWJ1dHRvbi1jb2xvcjtcIixcbiAgICBcIi5zdi1wYW5lbGR5bmFtaWNfX3JlbW92ZS1idG5cIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkcmVtb3ZlLWJ1dHRvbi1jb2xvcjtcIixcbiAgICBcIi5zdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuLCAuc3YtcGFuZWxkeW5hbWljX19uZXh0LWJ0blwiOlxuICAgICAgXCJmaWxsOiAkdGV4dC1jb2xvcjtcIixcbiAgICBcIi5zdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuLS1kaXNhYmxlZCwgLnN2LXBhbmVsZHluYW1pY19fbmV4dC1idG4tLWRpc2FibGVkXCI6XG4gICAgICBcImZpbGw6ICRkaXNhYmxlLWNvbG9yO1wiLFxuICAgIFwiLnN2LXBhbmVsZHluYW1pY19fcHJvZ3Jlc3MtdGV4dFwiOiBcImNvbG9yOiAkcHJvZ3Jlc3MtdGV4dC1jb2xvcjtcIixcbiAgICBcIi5zdi1wcm9ncmVzc1wiOiBcImJhY2tncm91bmQtY29sb3I6ICRoZWFkZXItYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdi1wcm9ncmVzc19fYmFyXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3YtcHJvZ3Jlc3NfX3RleHRcIjogXCJjb2xvcjogJHByb2dyZXNzLXRleHQtY29sb3I7XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaTpiZWZvcmVcIjpcbiAgICAgIFwiYm9yZGVyLWNvbG9yOiAkcHJvZ3Jlc3MtYnV0dG9ucy1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJHByb2dyZXNzLWJ1dHRvbnMtY29sb3I7XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaTphZnRlclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRwcm9ncmVzcy1idXR0b25zLWxpbmUtY29sb3I7XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCAuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fcGFnZS10aXRsZVwiOiBcIiBjb2xvcjogJHRleHQtY29sb3I7XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCAuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fcGFnZS1kZXNjcmlwdGlvblwiOiBcIiBjb2xvcjogJHRleHQtY29sb3I7XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaS5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLXBhc3NlZDpiZWZvcmVcIjpcbiAgICAgIFwiYm9yZGVyLWNvbG9yOiAkbWFpbi1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaS5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLXBhc3NlZCArIGxpOmFmdGVyXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRwcm9ncmVzcy1idXR0b25zLWNvbG9yXCIsXG4gICAgXCIuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaS5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLWN1cnJlbnQ6YmVmb3JlXCI6XG4gICAgICBcImJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7IGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1wiLFxuICAgIFwiLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QgbGkuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1lbGVtZW50LS1wYXNzZWQuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1lbGVtZW50LS1jdXJyZW50OmJlZm9yZVwiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRtYWluLWNvbG9yOyBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcIixcbiAgICBcIi5zdi1xdWVzdGlvbl9fZXJib3hcIjogXCJjb2xvcjogJGVycm9yLWNvbG9yO1wiLFxuICAgIFwiLnN2LXF1ZXN0aW9uX190aXRsZS0tYW5zd2VyXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRhbnN3ZXItYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdi1xdWVzdGlvbl9fdGl0bGUtLWVycm9yXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJGVycm9yLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3YtcGFuZWxfX3RpdGxlLS1lcnJvclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRlcnJvci1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2LXJhZGlvX19zdmdcIjogXCJib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7IGZpbGw6IHRyYW5zcGFyZW50O1wiLFxuICAgIFwiLnN2LXJhZGlvLS1hbGxvd2hvdmVyOmhvdmVyIC5zdi1yYWRpb19fc3ZnXCI6IFwiZmlsbDogJGJvcmRlci1jb2xvcjtcIixcbiAgICBcIi5zdi1yYWRpby0tY2hlY2tlZCAuc3YtcmFkaW9fX3N2Z1wiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRyYWRpby1jaGVja2VkLWNvbG9yOyBmaWxsOiAkcmFkaW8tY2hlY2tlZC1jb2xvcjtcIixcbiAgICBcIi5zdi1yYWRpby0tZGlzYWJsZWQgLnN2LXJhZGlvX19zdmdcIjogXCJib3JkZXItY29sb3I6ICRkaXNhYmxlLWNvbG9yO1wiLFxuICAgIFwiLnN2LXJhZGlvLS1kaXNhYmxlZC5zdi1yYWRpby0tY2hlY2tlZCAuc3YtcmFkaW9fX3N2Z1wiOlxuICAgICAgXCJmaWxsOiAkZGlzYWJsZS1jb2xvcjtcIixcbiAgICBcIi5zdi1yYXRpbmdcIjogXCJjb2xvcjogJHRleHQtY29sb3I7XCIsXG4gICAgXCIuc3YtcmF0aW5nIGlucHV0OmZvY3VzICsgLnN2LXJhdGluZ19fbWluLXRleHQgKyAuc3YtcmF0aW5nX19pdGVtLXRleHQsIC5zdi1yYXRpbmcgaW5wdXQ6Zm9jdXMgKyAuc3YtcmF0aW5nX19pdGVtLXRleHRcIjpcbiAgICAgIFwib3V0bGluZS1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3YtcmF0aW5nX19pdGVtLXRleHRcIjpcbiAgICAgIFwiY29sb3I6ICRtYWluLWhvdmVyLWNvbG9yOyBib3JkZXI6IHNvbGlkIDAuMTg3NWVtICRtYWluLWhvdmVyLWNvbG9yO1wiLFxuICAgIFwiLnN2LXJhdGluZ19faXRlbS10ZXh0OmhvdmVyXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWhvdmVyLWNvbG9yOyBjb2xvcjogJGJvZHktYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdi1yYXRpbmdfX2l0ZW0tLXNlbGVjdGVkIC5zdi1yYXRpbmdfX2l0ZW0tdGV4dFwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjsgY29sb3I6ICRib2R5LWJhY2tncm91bmQtY29sb3I7IGJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3YtcmF0aW5nLS1kaXNhYmxlZCAuc3YtcmF0aW5nX19pdGVtLXRleHRcIjpcbiAgICAgIFwiY29sb3I6ICRkaXNhYmxlLWNvbG9yOyBib3JkZXItY29sb3I6ICRkaXNhYmxlLWNvbG9yO1wiLFxuICAgIFwiLnN2LXJhdGluZy0tZGlzYWJsZWQgLnN2LXJhdGluZ19faXRlbS10ZXh0OmhvdmVyXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1wiLFxuICAgIFwiLnN2LXJhdGluZy0tZGlzYWJsZWQgLnN2LXJhdGluZ19faXRlbS10ZXh0OmhvdmVyIC5zdi1yYXRpbmdfX2l0ZW0tLXNlbGVjdGVkIC5zdi1yYXRpbmdfX2l0ZW0tdGV4dFwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkZGlzYWJsZS1jb2xvcjsgY29sb3I6ICRib2R5LWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCI6Oi13ZWJraXQtc2Nyb2xsYmFyXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4taG92ZXItY29sb3I7XCIsXG4gICAgXCI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iXCI6IFwiYmFja2dyb3VuZDogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3Ytc2VsZWN0YmFzZV9fY2xlYXItYnRuXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJGNsZWFuLWJ1dHRvbi1jb2xvcjtcIixcbiAgICBcIi5zdi10YWJsZVwiOiBcImJhY2tncm91bmQtY29sb3I6IHJnYmEoJG1haW4taG92ZXItY29sb3IsIDAuMSk7XCIsXG4gICAgXCIuc3YtdGV4dDpmb2N1c1wiOiBcImJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgJy5zdi10ZXh0W3R5cGU9XCJkYXRlXCJdOjotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3InOlxuICAgICAgXCJjb2xvcjogdHJhbnNwYXJlbnQ7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1wiLFxuICAgIFwiLnN2LXRleHQtLWVycm9yXCI6IFwiY29sb3I6ICRlcnJvci1jb2xvcjsgYm9yZGVyLWNvbG9yOiAkZXJyb3ItY29sb3I7XCIsXG4gICAgXCIuc3YtdGV4dC0tZXJyb3I6OnBsYWNlaG9sZGVyXCI6IFwiY29sb3I6ICRlcnJvci1jb2xvcjtcIixcbiAgICBcIi5zdi10ZXh0LS1lcnJvcjo6LW1zLXBsYWNlaG9sZGVyXCI6IFwiY29sb3I6ICRlcnJvci1jb2xvcjtcIixcbiAgICBcIi5zdi10ZXh0LS1lcnJvcjotbXMtcGxhY2Vob2xkZXJcIjogXCJjb2xvcjogJGVycm9yLWNvbG9yO1wiLFxuICAgIFwiaW5wdXQuc3YtdGV4dCwgdGV4dGFyZWEuc3YtY29tbWVudCwgc2VsZWN0LnN2LWRyb3Bkb3duXCI6XG4gICAgICBcImNvbG9yOiAkdGV4dC1pbnB1dC1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJGlucHV0cy1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2LXRleHQ6OnBsYWNlaG9sZGVyXCI6IFwiY29sb3I6ICR0ZXh0LWlucHV0LWNvbG9yO1wiLFxuICAgIFwiLnN2LXRleHQ6Oi1tcy1wbGFjZWhvbGRlclwiOiBcImNvbG9yOiAkdGV4dC1pbnB1dC1jb2xvcjtcIixcbiAgICBcIi5zdi10ZXh0Oi1tcy1wbGFjZWhvbGRlclwiOiBcImNvbG9yOiAkdGV4dC1pbnB1dC1jb2xvcjtcIixcbiAgICBcIi5zdi10YWJsZV9fcm93LS1kZXRhaWxcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkaGVhZGVyLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgLy9zaWduYXR1cmUgcGFkXG4gICAgXCIuc2pzX3NwX2NvbnRhaW5lclwiOiBcImJvcmRlcjogMXB4IGRhc2hlZCAkZGlzYWJsZS1jb2xvcjtcIixcbiAgICBcIi5zanNfc3BfcGxhY2Vob2xkZXJcIjogXCJjb2xvcjogJGZvcmVncm91bmQtbGlnaHQ7XCIsXG5cbiAgICAvL2RyYWctZHJvcFxuICAgIFwiLnN2LW1hdHJpeGR5bmFtaWNfX2RyYWctaWNvblwiOiBcInBhZGRpbmctdG9wOjE2cHhcIixcbiAgICBcIi5zdi1tYXRyaXhkeW5hbWljX19kcmFnLWljb246YWZ0ZXJcIjpcbiAgICAgIFwiY29udGVudDogJyAnOyBkaXNwbGF5OiBibG9jazsgaGVpZ2h0OiA2cHg7IHdpZHRoOiAyMHB4OyBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyLWNvbG9yOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyBib3JkZXItcmFkaXVzOiAxMHB4OyBjdXJzb3I6IG1vdmU7IG1hcmdpbi10b3A6IDEycHg7XCIsXG4gICAgXCIuc3YtbWF0cml4X19kcmFnLWRyb3AtZ2hvc3QtcG9zaXRpb24tdG9wLCAuc3YtbWF0cml4X19kcmFnLWRyb3AtZ2hvc3QtcG9zaXRpb24tYm90dG9tXCI6XG4gICAgICBcInBvc2l0aW9uOiByZWxhdGl2ZTtcIixcbiAgICBcIi5zdi1tYXRyaXhfX2RyYWctZHJvcC1naG9zdC1wb3NpdGlvbi10b3A6OmFmdGVyLCAuc3YtbWF0cml4X19kcmFnLWRyb3AtZ2hvc3QtcG9zaXRpb24tYm90dG9tOjphZnRlclwiOlxuICAgICAgXCJjb250ZW50OiAnJzsgd2lkdGg6IDEwMCU7IGhlaWdodDogNHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wcmltYXJ5LCAjMTliMzk0KTsgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAwO1wiLFxuICAgIFwiLnN2LW1hdHJpeF9fZHJhZy1kcm9wLWdob3N0LXBvc2l0aW9uLXRvcDo6YWZ0ZXJcIjogXCJ0b3A6IDA7XCIsXG4gICAgXCIuc3YtbWF0cml4X19kcmFnLWRyb3AtZ2hvc3QtcG9zaXRpb24tYm90dG9tOjphZnRlclwiOiBcImJvdHRvbTogMDtcIixcbiAgICAvL2VvIGRyYWctZHJvcFxuICAgIFwiLnN2LXNrZWxldG9uLWVsZW1lbnRcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZC1kaW07XCIsXG4gIH07XG5cbiAgcHVibGljIHN0YXRpYyBib290c3RyYXBUaGVtZUNzczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICBcIi5zdl9tYWluIC5zdl9xX2ltZ3NlbC5jaGVja2VkIGxhYmVsPmRpdlwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yXCIsXG4gICAgXCIuc3ZfbWFpbiAuc3ZfcF9kZXNjcmlwdGlvblwiOiBcInBhZGRpbmctbGVmdDogMS42NmVtO1wiLFxuICAgIFwiLnN2X21haW4gLnN2X3FzdG5fZXJyb3JfYm90dG9tXCI6IFwibWFyZ2luLXRvcDogMjBweDsgbWFyZ2luLWJvdHRvbTogMDtcIixcbiAgICBcIi5zdl9tYWluIC5wcm9ncmVzc1wiOiBcIndpZHRoOiA2MCU7XCIsXG4gICAgXCIuc3ZfbWFpbiAucHJvZ3Jlc3MtYmFyXCI6XG4gICAgICBcIndpZHRoOiBhdXRvOyBtYXJnaW4tbGVmdDogMnB4OyBtYXJnaW4tcmlnaHQ6IDJweDtcIixcbiAgICBcIi5zdl9tYWluIC50YWJsZT50Ym9keT50cj50ZFwiOiBcIm1pbi13aWR0aDogOTBweDtcIixcbiAgICBcIi5zdl9tYWluIGYtcGFuZWwgLnN2X3FzdG5cIjogXCJwYWRkaW5nOiAwOyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1wiLFxuXG4gICAgXCIuc3ZfbWFpbiAuc3ZfcV9pbWFnZVwiOiBcImRpc3BsYXk6IGlubGluZS1ibG9jaztcIixcbiAgICBcIi5zdl9tYWluIC5zdl9yb3cgLnN2X3FzdG46Zmlyc3QtY2hpbGQ6bGFzdC1jaGlsZFwiOlxuICAgICAgXCJmbGV4OiBub25lICFpbXBvcnRhbnQ7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3Zfcm93IC5zdl9wX2NvbnRhaW5lcjpmaXJzdC1jaGlsZDpsYXN0LWNoaWxkXCI6XG4gICAgICBcImZsZXg6IG5vbmUgIWltcG9ydGFudDtcIixcblxuICAgIC8vcHJvZ3Jlc3MgYmFyXG4gICAgXCIuc3ZfbWFpbiAuc3YtcHJvZ3Jlc3NcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkaGVhZGVyLWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcHJvZ3Jlc3NfX2JhclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuXG4gICAgLy9wcm9ncmVzcyBidXR0b25zXG4gICAgXCIuc3ZfbWFpbiAuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaTpiZWZvcmVcIjpcbiAgICAgIFwiYm9yZGVyLWNvbG9yOiAkcHJvZ3Jlc3MtYnV0dG9ucy1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJHByb2dyZXNzLWJ1dHRvbnMtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaTphZnRlclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRwcm9ncmVzcy1idXR0b25zLWxpbmUtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCAuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fcGFnZS10aXRsZVwiOiBcIiBjb2xvcjogJHRleHQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCAuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fcGFnZS1kZXNjcmlwdGlvblwiOiBcIiBjb2xvcjogJHRleHQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaS5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLXBhc3NlZDpiZWZvcmVcIjpcbiAgICAgIFwiYm9yZGVyLWNvbG9yOiAkbWFpbi1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaS5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLXBhc3NlZCArIGxpOmFmdGVyXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRwcm9ncmVzcy1idXR0b25zLWNvbG9yXCIsXG4gICAgXCIuc3ZfbWFpbiAuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaS5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLWN1cnJlbnQ6YmVmb3JlXCI6XG4gICAgICBcImJvcmRlci1jb2xvcjogJG1haW4tY29sb3I7IGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1wiLFxuICAgIFwiLnN2X21haW4gLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QgbGkuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1lbGVtZW50LS1wYXNzZWQuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1lbGVtZW50LS1jdXJyZW50OmJlZm9yZVwiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRtYWluLWNvbG9yOyBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcIixcblxuICAgIC8vcGFuZWxkeW5hbWljXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0bi5zdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuLS1kaXNhYmxlZCwgLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fbmV4dC1idG4uc3YtcGFuZWxkeW5hbWljX19uZXh0LWJ0bi0tZGlzYWJsZWRcIjpcbiAgICAgIFwiZmlsbDogJGRpc2FibGUtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy10ZXh0XCI6IFwiY29sb3I6ICRwcm9ncmVzcy10ZXh0LWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fcHJldi1idG4sIC5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuXCI6XG4gICAgICBcImZpbGw6ICR0ZXh0LWNvbG9yXCIsXG5cbiAgICAvL2Jvb2xlYW5cbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuX19zd2l0Y2hcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuX19zbGlkZXJcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkc2xpZGVyLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW5fX2xhYmVsLS1kaXNhYmxlZFwiOiBcImNvbG9yOiAkZGlzYWJsZWQtbGFiZWwtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbi0tZGlzYWJsZWQgLnN2LWJvb2xlYW5fX3N3aXRjaFwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkZGlzYWJsZWQtc3dpdGNoLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW4tLWRpc2FibGVkICAuc3YtYm9vbGVhbl9fc2xpZGVyXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlZC1zbGlkZXItY29sb3I7XCIsXG4gICAgLy9lbyBib29sZWFuXG5cbiAgICAvL3NpZ25hdHVyZSBwYWRcbiAgICBcIi5zdl9tYWluIC5zanNfc3BfY29udGFpbmVyXCI6IFwiYm9yZGVyOiAxcHggZGFzaGVkICRkaXNhYmxlLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnNqc19zcF9wbGFjZWhvbGRlclwiOiBcImNvbG9yOiAkZm9yZWdyb3VuZC1saWdodDtcIixcblxuICAgIFwiLnN2X21haW4gLnN2X21hdHJpeF9kZXRhaWxfcm93XCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICNlZGVkZWQ7IGJvcmRlci10b3A6IDFweCBzb2xpZCAkaGVhZGVyLWJhY2tncm91bmQtY29sb3I7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkaGVhZGVyLWJhY2tncm91bmQtY29sb3I7XCIsXG5cbiAgICBcIi5zdl9tYWluIC5zdi1hY3Rpb24tYmFyLWl0ZW1cIjogXCJjb2xvcjogJHRleHQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYWN0aW9uLWJhci1pdGVtX19pY29uIHVzZVwiOiBcImZpbGw6ICRmb3JlZ3JvdW5kLWxpZ2h0O1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbi1iYXItaXRlbTpob3ZlclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLWRpbTtcIixcblxuICAgIFwiLnN2LXNrZWxldG9uLWVsZW1lbnRcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZC1kaW07XCIsXG4gIH07XG5cbiAgcHVibGljIHN0YXRpYyBib290c3RyYXBtYXRlcmlhbFRoZW1lQ3NzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5mb3JtLWdyb3VwLmlzLWZvY3VzZWQgLmZvcm0tY29udHJvbFwiOlxuICAgICAgXCJsaW5lYXItZ3JhZGllbnQoMGRlZywgJG1haW4tY29sb3IgMnB4LCAkbWFpbi1jb2xvciAwKSxsaW5lYXItZ3JhZGllbnQoMGRlZywgI0QyRDJEMiAxcHgsIHRyYW5zcGFyZW50IDApO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5zdl9xc3RuXCI6IFwibWFyZ2luLWJvdHRvbTogMXJlbTtcIixcbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAuc3ZfcXN0biBsYWJlbC5zdl9xX21fbGFiZWxcIjpcbiAgICAgIFwiaGVpZ2h0OiAxMDAlO1wiLFxuXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnN2X3FfaW1hZ2VcIjogXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3Zfcm93IC5zdl9xc3RuOmZpcnN0LWNoaWxkOmxhc3QtY2hpbGRcIjpcbiAgICAgIFwiZmxleDogbm9uZSAhaW1wb3J0YW50O1wiLFxuICAgIFwiLnN2X21haW4gLnN2X3JvdyAuc3ZfcF9jb250YWluZXI6Zmlyc3QtY2hpbGQ6bGFzdC1jaGlsZFwiOlxuICAgICAgXCJmbGV4OiBub25lICFpbXBvcnRhbnQ7XCIsXG5cbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAuY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCArIC5jaGVja2JveC1tYXRlcmlhbCAuY2hlY2tcIjpcbiAgICAgIFwiYm9yZGVyLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyBsYWJlbC5jaGVja2JveC1pbmxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCArIC5jaGVja2JveC1tYXRlcmlhbCAuY2hlY2tcIjpcbiAgICAgIFwiYm9yZGVyLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAuY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCArIC5jaGVja2JveC1tYXRlcmlhbCAuY2hlY2s6YmVmb3JlXCI6XG4gICAgICBcImNvbG9yOiAkbWFpbi1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyBsYWJlbC5jaGVja2JveC1pbmxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCArIC5jaGVja2JveC1tYXRlcmlhbCAuY2hlY2s6YmVmb3JlXCI6XG4gICAgICBcImNvbG9yOiAkbWFpbi1jb2xvcjtcIixcblxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5yYWRpbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkIH4gLmNpcmNsZVwiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIGxhYmVsLnJhZGlvLWlubGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkIH4gLmNpcmNsZVwiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5yYWRpbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkIH4gLmNoZWNrXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIGxhYmVsLnJhZGlvLWlubGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkIH4gLmNoZWNrXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5idG4tZGVmYXVsdC5hY3RpdmVcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7IGNvbG9yOiAkYm9keS1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5idG4tZGVmYXVsdDphY3RpdmVcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7IGNvbG9yOiAkYm9keS1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5idG4tc2Vjb25kYXJ5LmFjdGl2ZVwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjsgY29sb3I6ICRib2R5LWJhY2tncm91bmQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLmJ0bi1zZWNvbmRhcnk6YWN0aXZlXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yOyBjb2xvcjogJGJvZHktYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAub3Blbj4uZHJvcGRvd24tdG9nZ2xlLmJ0bi1kZWZhdWx0XCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yOyBjb2xvcjogJGJvZHktYmFja2dyb3VuZC1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyBpbnB1dFt0eXBlPSdidXR0b24nXS5idG4tcHJpbWFyeSwgLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIGJ1dHRvbi5idG4tcHJpbWFyeVwiOlxuICAgICAgXCJjb2xvcjogJGJvZHktYmFja2dyb3VuZC1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgaW5wdXRbdHlwZT0nYnV0dG9uJ10uYnRuLXByaW1hcnk6aG92ZXIsIC5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyBidXR0b24uYnRuLXByaW1hcnk6aG92ZXJcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogJG1haW4taG92ZXItY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3ZfcV9pbWdzZWwuY2hlY2tlZCBsYWJlbD5kaXZcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcblxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5zdl9xX2ZpbGVfcmVtb3ZlOmhvdmVyXCI6XG4gICAgICBcImNvbG9yOiAkbWFpbi1jb2xvcjtcIixcblxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5mb3JtLWdyb3VwIGlucHV0W3R5cGU9ZmlsZV1cIjpcbiAgICAgIFwicG9zaXRpb246IHJlbGF0aXZlOyBvcGFjaXR5OiAxO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5wcm9ncmVzc1wiOiBcIndpZHRoOiA2MCU7IGhlaWdodDogMS41ZW07XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnByb2dyZXNzLWJhclwiOlxuICAgICAgXCJ3aWR0aDogYXV0bzsgbWFyZ2luLWxlZnQ6IDJweDsgbWFyZ2luLXJpZ2h0OiAycHg7XCIsXG5cbiAgICAvL3Byb2dyZXNzIGJhclxuICAgIFwiLnN2X21haW4gLnN2LXByb2dyZXNzXCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJGhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LXByb2dyZXNzX19iYXJcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFpbi1jb2xvcjtcIixcblxuICAgIC8vcHJvZ3Jlc3MgYnV0dG9uc1xuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0IGxpOmJlZm9yZVwiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRwcm9ncmVzcy1idXR0b25zLWNvbG9yOyBiYWNrZ3JvdW5kLWNvbG9yOiAkcHJvZ3Jlc3MtYnV0dG9ucy1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaTphZnRlclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRwcm9ncmVzcy1idXR0b25zLWxpbmUtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QgLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX3BhZ2UtdGl0bGVcIjogXCIgY29sb3I6ICR0ZXh0LWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0IC5zdl9wcm9ncmVzcy1idXR0b25zX19wYWdlLWRlc2NyaXB0aW9uXCI6IFwiIGNvbG9yOiAkdGV4dC1jb2xvcjtcIixcbiAgICBcIi5zdl9tYWluLnN2X2Jvb3RzdHJhcG1hdGVyaWFsX2NzcyAuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdCBsaS5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0LWVsZW1lbnQtLXBhc3NlZDpiZWZvcmVcIjpcbiAgICAgIFwiYm9yZGVyLWNvbG9yOiAkbWFpbi1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogJG1haW4tY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QgbGkuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1lbGVtZW50LS1wYXNzZWQgKyBsaTphZnRlclwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkcHJvZ3Jlc3MtYnV0dG9ucy1jb2xvclwiLFxuICAgIFwiLnN2X21haW4uc3ZfYm9vdHN0cmFwbWF0ZXJpYWxfY3NzIC5zdl9wcm9ncmVzcy1idXR0b25zX19saXN0IGxpLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QtZWxlbWVudC0tY3VycmVudDpiZWZvcmVcIjpcbiAgICAgIFwiYm9yZGVyLWNvbG9yOiAkbWFpbi1jb2xvcjsgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XCIsXG4gICAgXCIuc3ZfbWFpbi5zdl9ib290c3RyYXBtYXRlcmlhbF9jc3MgLnN2X3Byb2dyZXNzLWJ1dHRvbnNfX2xpc3QgbGkuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1lbGVtZW50LS1wYXNzZWQuc3ZfcHJvZ3Jlc3MtYnV0dG9uc19fbGlzdC1lbGVtZW50LS1jdXJyZW50OmJlZm9yZVwiOlxuICAgICAgXCJib3JkZXItY29sb3I6ICRtYWluLWNvbG9yOyBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcIixcblxuICAgIC8vcGFuZWxkeW5hbWljXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19wcmV2LWJ0bi5zdi1wYW5lbGR5bmFtaWNfX3ByZXYtYnRuLS1kaXNhYmxlZCwgLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fbmV4dC1idG4uc3YtcGFuZWxkeW5hbWljX19uZXh0LWJ0bi0tZGlzYWJsZWRcIjpcbiAgICAgIFwiZmlsbDogJGRpc2FibGUtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtcGFuZWxkeW5hbWljX19wcm9ncmVzcy10ZXh0XCI6IFwiY29sb3I6ICRwcm9ncmVzcy10ZXh0LWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LXBhbmVsZHluYW1pY19fcHJldi1idG4sIC5zdl9tYWluIC5zdi1wYW5lbGR5bmFtaWNfX25leHQtYnRuXCI6XG4gICAgICBcImZpbGw6ICR0ZXh0LWNvbG9yXCIsXG5cbiAgICAvL2Jvb2xlYW5cbiAgICBcIi5zdl9tYWluIC5zdi1ib29sZWFuIC5jaGVja2JveC1kZWNvcmF0b3JcIjogXCJkaXNwbGF5OiBub25lO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW5fX3N3aXRjaFwiOiBcImJhY2tncm91bmQtY29sb3I6ICRtYWluLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW5fX3NsaWRlclwiOiBcImJhY2tncm91bmQtY29sb3I6ICRzbGlkZXItY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbl9fbGFiZWwuc3YtYm9vbGVhbl9fbGFiZWwtLWRpc2FibGVkXCI6XG4gICAgICBcImNvbG9yOiAkZGlzYWJsZWQtbGFiZWwtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbl9fbGFiZWxcIjogXCJjb2xvcjogJHRleHQtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc3YtYm9vbGVhbi0tZGlzYWJsZWQgLnN2LWJvb2xlYW5fX3N3aXRjaFwiOlxuICAgICAgXCJiYWNrZ3JvdW5kLWNvbG9yOiAkZGlzYWJsZWQtc3dpdGNoLWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWJvb2xlYW4tLWRpc2FibGVkICAuc3YtYm9vbGVhbl9fc2xpZGVyXCI6XG4gICAgICBcImJhY2tncm91bmQtY29sb3I6ICRkaXNhYmxlZC1zbGlkZXItY29sb3I7XCIsXG4gICAgLy9lbyBib29sZWFuXG4gICAgXCIuc3ZfbWFpbiAuc3ZfbWF0cml4X2RldGFpbF9yb3dcIjpcbiAgICAgIFwiYmFja2dyb3VuZC1jb2xvcjogI2VkZWRlZDsgYm9yZGVyLXRvcDogMXB4IHNvbGlkICRoZWFkZXItYmFja2dyb3VuZC1jb2xvcjsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRoZWFkZXItYmFja2dyb3VuZC1jb2xvcjtcIixcblxuICAgIC8vc2lnbmF0dXJlIHBhZFxuICAgIFwiLnN2X21haW4gLnNqc19zcF9jb250YWluZXJcIjogXCJib3JkZXI6IDFweCBkYXNoZWQgJGRpc2FibGUtY29sb3I7XCIsXG4gICAgXCIuc3ZfbWFpbiAuc2pzX3NwX3BsYWNlaG9sZGVyXCI6IFwiY29sb3I6ICRmb3JlZ3JvdW5kLWxpZ2h0O1wiLFxuXG4gICAgXCIuc3ZfbWFpbiAuc3YtYWN0aW9uLWJhci1pdGVtXCI6IFwiY29sb3I6ICR0ZXh0LWNvbG9yO1wiLFxuICAgIFwiLnN2X21haW4gLnN2LWFjdGlvbi1iYXItaXRlbV9faWNvbiB1c2VcIjogXCJmaWxsOiAkZm9yZWdyb3VuZC1saWdodDtcIixcbiAgICBcIi5zdl9tYWluIC5zdi1hY3Rpb24tYmFyLWl0ZW06aG92ZXJcIjogXCJiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZC1kaW07XCIsXG5cbiAgICBcIi5zdi1za2VsZXRvbi1lbGVtZW50XCI6IFwiYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtZGltO1wiLFxuICB9O1xuXG4gIHByaXZhdGUgc2hlZXQ6IENTU1N0eWxlU2hlZXQgPSBudWxsO1xuXG4gIHN0YXRpYyBmaW5kU2hlZXQoc3R5bGVTaGVldElkOiBzdHJpbmcpOiBhbnkge1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBudWxsO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZG9jdW1lbnQuc3R5bGVTaGVldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgISFkb2N1bWVudC5zdHlsZVNoZWV0c1tpXS5vd25lck5vZGUgJiZcbiAgICAgICAgKDxhbnk+ZG9jdW1lbnQpLnN0eWxlU2hlZXRzW2ldLm93bmVyTm9kZVtcImlkXCJdID09PSBzdHlsZVNoZWV0SWRcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gPENTU1N0eWxlU2hlZXQ+ZG9jdW1lbnQuc3R5bGVTaGVldHNbaV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZVNoZWV0KHN0eWxlU2hlZXRJZDogc3RyaW5nKSB7XG4gICAgbGV0IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICAgIHN0eWxlLmlkID0gc3R5bGVTaGVldElkO1xuICAgIC8vIEFkZCBhIG1lZGlhIChhbmQvb3IgbWVkaWEgcXVlcnkpIGhlcmUgaWYgeW91J2QgbGlrZSFcbiAgICAvLyBzdHlsZS5zZXRBdHRyaWJ1dGUoXCJtZWRpYVwiLCBcInNjcmVlblwiKVxuICAgIC8vIHN0eWxlLnNldEF0dHJpYnV0ZShcIm1lZGlhXCIsIFwib25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGggOiAxMDI0cHgpXCIpXG4gICAgc3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIikpO1xuICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgIHJldHVybiA8Q1NTU3R5bGVTaGVldD5zdHlsZS5zaGVldDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgYXBwbHlUaGVtZShcbiAgICB0aGVtZU5hbWU6IHN0cmluZyA9IFwiZGVmYXVsdFwiLFxuICAgIHRoZW1lU2VsZWN0b3I6IHN0cmluZyA9IFwiLnN2X21haW5cIlxuICApIHtcbiAgICBsZXQgVGhlbWVDc3M6IGFueTtcblxuICAgIGlmICh0aGVtZU5hbWUgPT09IFwibW9kZXJuXCIpIHRoZW1lU2VsZWN0b3IgPSBcIi5zdi1yb290LW1vZGVybiBcIjtcbiAgICBpZih0aGVtZU5hbWUgPT09IFwiZGVmYXVsdFYyXCIpIHtcbiAgICAgIHN1cnZleUNzcy5jdXJyZW50VHlwZSA9IHRoZW1lTmFtZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgW1wiYm9vdHN0cmFwXCIsIFwiYm9vdHN0cmFwbWF0ZXJpYWxcIiwgXCJtb2Rlcm5cIl0uaW5kZXhPZih0aGVtZU5hbWUpICE9PSAtMVxuICAgICkge1xuICAgICAgVGhlbWVDc3MgPSAoPGFueT5TdHlsZXNNYW5hZ2VyKVt0aGVtZU5hbWUgKyBcIlRoZW1lQ3NzXCJdO1xuICAgICAgc3VydmV5Q3NzLmN1cnJlbnRUeXBlID0gdGhlbWVOYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICBUaGVtZUNzcyA9IFN0eWxlc01hbmFnZXIuVGhlbWVDc3M7XG4gICAgICBzdXJ2ZXlDc3MuY3VycmVudFR5cGUgPSBcInN0YW5kYXJkXCI7XG4gICAgfVxuXG4gICAgaWYgKFN0eWxlc01hbmFnZXIuRW5hYmxlZCkge1xuICAgICAgbGV0IHNoZWV0ID0gU3R5bGVzTWFuYWdlci5maW5kU2hlZXQodGhlbWVOYW1lICsgdGhlbWVTZWxlY3Rvcik7XG4gICAgICBpZiAoIXNoZWV0KSB7XG4gICAgICAgIHNoZWV0ID0gU3R5bGVzTWFuYWdlci5jcmVhdGVTaGVldCh0aGVtZU5hbWUgKyB0aGVtZVNlbGVjdG9yKTtcbiAgICAgICAgY29uc3QgdGhlbWUgPSBTdHlsZXNNYW5hZ2VyLlRoZW1lQ29sb3JzW3RoZW1lTmFtZV0gfHxcbiAgICAgICAgICBTdHlsZXNNYW5hZ2VyLlRoZW1lQ29sb3JzW1wiZGVmYXVsdFwiXTtcblxuICAgICAgICBPYmplY3Qua2V5cyhUaGVtZUNzcykuZm9yRWFjaCgoc2VsZWN0b3IpID0+IHtcbiAgICAgICAgICBsZXQgY3NzUnVsZVRleHQgPSBUaGVtZUNzc1tzZWxlY3Rvcl07XG4gICAgICAgICAgT2JqZWN0LmtleXModGhlbWUpLmZvckVhY2goXG4gICAgICAgICAgICAoY29sb3JWYXJpYWJsZU5hbWUpID0+XG4gICAgICAgICAgICAgIChjc3NSdWxlVGV4dCA9IGNzc1J1bGVUZXh0LnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgbmV3IFJlZ0V4cChcIlxcXFxcIiArIGNvbG9yVmFyaWFibGVOYW1lLCBcImdcIiksXG4gICAgICAgICAgICAgICAgdGhlbWVbY29sb3JWYXJpYWJsZU5hbWVdXG4gICAgICAgICAgICAgICkpXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgc2hlZXQuaW5zZXJ0UnVsZShcbiAgICAgICAgICAgICAgdGhlbWVTZWxlY3RvciArIHNlbGVjdG9yICsgXCIgeyBcIiArIGNzc1J1bGVUZXh0ICsgXCIgfVwiLFxuICAgICAgICAgICAgICAwXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIEVuYWJsZWQgPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGlmIChTdHlsZXNNYW5hZ2VyLkVuYWJsZWQpIHtcbiAgICAgIHRoaXMuc2hlZXQgPSBTdHlsZXNNYW5hZ2VyLmZpbmRTaGVldChTdHlsZXNNYW5hZ2VyLlN1cnZleUpTU3R5bGVzU2hlZXRJZCk7XG4gICAgICBpZiAoIXRoaXMuc2hlZXQpIHtcbiAgICAgICAgdGhpcy5zaGVldCA9IFN0eWxlc01hbmFnZXIuY3JlYXRlU2hlZXQoXG4gICAgICAgICAgU3R5bGVzTWFuYWdlci5TdXJ2ZXlKU1N0eWxlc1NoZWV0SWRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplU3R5bGVzKHRoaXMuc2hlZXQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpbml0aWFsaXplU3R5bGVzKHNoZWV0OiBDU1NTdHlsZVNoZWV0KSB7XG4gICAgaWYgKFN0eWxlc01hbmFnZXIuRW5hYmxlZCkge1xuICAgICAgT2JqZWN0LmtleXMoU3R5bGVzTWFuYWdlci5TdHlsZXMpLmZvckVhY2goKHNlbGVjdG9yKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc2hlZXQuaW5zZXJ0UnVsZShcbiAgICAgICAgICAgIHNlbGVjdG9yICsgXCIgeyBcIiArIFN0eWxlc01hbmFnZXIuU3R5bGVzW3NlbGVjdG9yXSArIFwiIH1cIixcbiAgICAgICAgICAgIDBcbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlKSB7IH1cbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmtleXMoU3R5bGVzTWFuYWdlci5NZWRpYSkuZm9yRWFjaCgoc2VsZWN0b3IpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBzaGVldC5pbnNlcnRSdWxlKFxuICAgICAgICAgICAgU3R5bGVzTWFuYWdlci5NZWRpYVtzZWxlY3Rvcl0ubWVkaWEgK1xuICAgICAgICAgICAgXCIgeyBcIiArXG4gICAgICAgICAgICBzZWxlY3RvciArXG4gICAgICAgICAgICBcIiB7IFwiICtcbiAgICAgICAgICAgIFN0eWxlc01hbmFnZXIuTWVkaWFbc2VsZWN0b3JdLnN0eWxlICtcbiAgICAgICAgICAgIFwiIH0gfVwiLFxuICAgICAgICAgICAgMFxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcclxuaW1wb3J0IHsgUmVuZGVyZXJGYWN0b3J5IH0gZnJvbSBcIi4vcmVuZGVyZXJGYWN0b3J5XCI7XHJcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlXCI7XHJcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCIuL2FjdGlvbnMvYWN0aW9uXCI7XHJcbmltcG9ydCB7IEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyIH0gZnJvbSBcIi4vYWN0aW9ucy9hZGFwdGl2ZS1jb250YWluZXJcIjtcclxuaW1wb3J0IHtcclxuICBJU3VydmV5RWxlbWVudCxcclxuICBJRWxlbWVudCxcclxuICBJUGFnZSxcclxuICBJUGFuZWwsXHJcbiAgSVByb2dyZXNzSW5mbyxcclxuICBJU3VydmV5LFxyXG4gIElTdXJ2ZXlEYXRhLFxyXG4gIElTdXJ2ZXlJbXBsLFxyXG4gIElUZXh0UHJvY2Vzc29yLFxyXG4gIElUaXRsZU93bmVyXHJcbn0gZnJvbSBcIi4vYmFzZS1pbnRlcmZhY2VzXCI7XHJcbmltcG9ydCB7IFN1cnZleUVycm9yIH0gZnJvbSBcIi4vc3VydmV5LWVycm9yXCI7XHJcbmltcG9ydCB7IENzc0NsYXNzQnVpbGRlciB9IGZyb20gXCIuL3V0aWxzL2Nzc0NsYXNzQnVpbGRlclwiO1xyXG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSBcIi4vaGVscGVyc1wiO1xyXG5pbXBvcnQgeyBzZXR0aW5ncyB9IGZyb20gXCIuL3NldHRpbmdzXCI7XHJcbmltcG9ydCB7IElMb2NhbGl6YWJsZU93bmVyLCBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XHJcblxyXG4vKipcclxuICogQmFzZSBjbGFzcyBvZiBTdXJ2ZXlKUyBFbGVtZW50cyBhbmQgU3VydmV5LlxyXG4gKi9cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFN1cnZleUVsZW1lbnRDb3JlIGV4dGVuZHMgQmFzZSBpbXBsZW1lbnRzIElMb2NhbGl6YWJsZU93bmVyIHtcclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLmNyZWF0ZUxvY1RpdGxlUHJvcGVydHkoKTtcclxuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJkZXNjcmlwdGlvblwiLCB0aGlzLCB0cnVlKTtcclxuICB9XHJcbiAgcHJvdGVjdGVkIGNyZWF0ZUxvY1RpdGxlUHJvcGVydHkoKTogTG9jYWxpemFibGVTdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJ0aXRsZVwiLCB0aGlzLCB0cnVlKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUXVlc3Rpb24sIFBhbmVsLCBQYWdlIGFuZCBTdXJ2ZXkgdGl0bGUuIElmIHBhZ2UgYW5kIHBhbmVsIGlzIGVtcHR5IHRoZW4gdGhleSBhcmUgbm90IHJlbmRlcmVkLlxyXG4gICAqIFF1ZXN0aW9uIHJlbmRlcnMgcXVlc3Rpb24gbmFtZSBpZiB0aGUgdGl0bGUgaXMgZW1wdHkuIFVzZSBzdXJ2ZXkgcXVlc3Rpb25UaXRsZVRlbXBsYXRlIHByb3BlcnR5IHRvIGNoYW5nZSB0aGUgdGl0bGUgcXVlc3Rpb24gcmVuZGVyaW5nLlxyXG4gICAqIEBzZWUgU3VydmV5TW9kZWwucXVlc3Rpb25UaXRsZVRlbXBsYXRlXHJcbiAgKi9cclxuICBwdWJsaWMgZ2V0IHRpdGxlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJ0aXRsZVwiLCB0aGlzLmdldERlZmF1bHRUaXRsZVZhbHVlKCkpO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IHRpdGxlKHZhbDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInRpdGxlXCIsIHZhbCk7XHJcbiAgfVxyXG4gIGdldCBsb2NUaXRsZSgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInRpdGxlXCIpO1xyXG4gIH1cclxuICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdFRpdGxlVmFsdWUoKTogc3RyaW5nIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxyXG4gIC8qKlxyXG4gICAqIFF1ZXN0aW9uLCBQYW5lbCBhbmQgUGFnZSBkZXNjcmlwdGlvbi4gSXQgcmVuZGVycyB1bmRlciBlbGVtZW50IHRpdGxlIGJ5IHVzaW5nIHNtYWxsZXIgZm9udC4gVW5saWtlIHRoZSBxdWVzdGlvbiB0aXRsZSwgZGVzY3JpcHRpb24gY2FuIGJlIGVtcHR5LlxyXG4gICAqIFBsZWFzZSBub3RlLCB0aGlzIHByb3BlcnR5IGlzIGhpZGRlbiBmb3IgcXVlc3Rpb25zIHdpdGhvdXQgaW5wdXQsIGZvciBleGFtcGxlIGh0bWwgcXVlc3Rpb24uXHJcbiAgICogQHNlZSB0aXRsZVxyXG4gICovXHJcbiAgcHVibGljIGdldCBkZXNjcmlwdGlvbigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiZGVzY3JpcHRpb25cIik7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgZGVzY3JpcHRpb24odmFsOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiZGVzY3JpcHRpb25cIiwgdmFsKTtcclxuICB9XHJcbiAgZ2V0IGxvY0Rlc2NyaXB0aW9uKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwiZGVzY3JpcHRpb25cIik7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgdGl0bGVUYWdOYW1lKCk6IHN0cmluZyB7XHJcbiAgICBsZXQgdGl0bGVUYWdOYW1lID0gdGhpcy5nZXREZWZhdWx0VGl0bGVUYWdOYW1lKCk7XHJcbiAgICBjb25zdCBzdXJ2ZXkgPSB0aGlzLmdldFN1cnZleSgpO1xyXG4gICAgcmV0dXJuICEhc3VydmV5ID8gc3VydmV5LmdldEVsZW1lbnRUaXRsZVRhZ05hbWUodGhpcywgdGl0bGVUYWdOYW1lKSA6IHRpdGxlVGFnTmFtZTtcclxuICB9XHJcbiAgcHJvdGVjdGVkIGdldERlZmF1bHRUaXRsZVRhZ05hbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAoPGFueT5zZXR0aW5ncy50aXRsZVRhZ3MpW3RoaXMuZ2V0VHlwZSgpXTtcclxuICB9XHJcbiAgcHVibGljIGdldCBoYXNUaXRsZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudGl0bGUubGVuZ3RoID4gMDsgfVxyXG4gIHB1YmxpYyBnZXQgaGFzVGl0bGVBY3Rpb25zKCk6IGJvb2xlYW4geyByZXR1cm4gZmFsc2U7IH1cclxuICBwdWJsaWMgZ2V0IGhhc1RpdGxlRXZlbnRzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFzVGl0bGVBY3Rpb25zO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0VGl0bGVUb29sYmFyKCk6IEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyIHsgcmV0dXJuIG51bGw7IH1cclxuICBwdWJsaWMgZ2V0VGl0bGVPd25lcigpOiBJVGl0bGVPd25lciB7IHJldHVybiB1bmRlZmluZWQ7IH1cclxuICBwdWJsaWMgZ2V0IGlzVGl0bGVPd25lcigpOiBib29sZWFuIHsgcmV0dXJuICEhdGhpcy5nZXRUaXRsZU93bmVyKCk7IH1cclxuICBwdWJsaWMgdG9nZ2xlU3RhdGUoKTogYm9vbGVhbiB7IHJldHVybiB1bmRlZmluZWQ7IH1cclxuICBwdWJsaWMgZ2V0IGNzc0NsYXNzZXMoKTogYW55IHsgcmV0dXJuIHt9OyB9XHJcbiAgcHVibGljIGdldCBjc3NUaXRsZSgpOiBzdHJpbmcgeyByZXR1cm4gXCJcIjsgfVxyXG4gIHB1YmxpYyBnZXQgYXJpYVRpdGxlSWQoKTogc3RyaW5nIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxyXG4gIHB1YmxpYyBnZXQgdGl0bGVUYWJJbmRleCgpOiBudW1iZXIgeyByZXR1cm4gdW5kZWZpbmVkOyB9XHJcbiAgcHVibGljIGdldCB0aXRsZUFyaWFFeHBhbmRlZCgpOiBib29sZWFuIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxyXG4gIC8vSUxvY2FsaXphYmxlT3duZXJcclxuICBwdWJsaWMgYWJzdHJhY3QgZ2V0TG9jYWxlKCk6IHN0cmluZztcclxuICBwdWJsaWMgYWJzdHJhY3QgZ2V0TWFya2Rvd25IdG1sKHRleHQ6IHN0cmluZywgbmFtZTogc3RyaW5nKTogc3RyaW5nO1xyXG4gIHB1YmxpYyBhYnN0cmFjdCBnZXRSZW5kZXJlcihuYW1lOiBzdHJpbmcpOiBzdHJpbmc7XHJcbiAgcHVibGljIGFic3RyYWN0IGdldFJlbmRlcmVyQ29udGV4dChsb2NTdHI6IExvY2FsaXphYmxlU3RyaW5nKTogYW55O1xyXG4gIHB1YmxpYyBhYnN0cmFjdCBnZXRQcm9jZXNzZWRUZXh0KHRleHQ6IHN0cmluZyk6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGVudW0gRHJhZ1R5cGVPdmVyTWVFbnVtIHtcclxuICBJbnNpZGVFbXB0eVBhbmVsID0gMSxcclxuICBNdWx0aWxpbmVSaWdodCxcclxuICBNdWx0aWxpbmVMZWZ0XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBCYXNlIGNsYXNzIG9mIFN1cnZleUpTIEVsZW1lbnRzLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFN1cnZleUVsZW1lbnQgZXh0ZW5kcyBTdXJ2ZXlFbGVtZW50Q29yZSBpbXBsZW1lbnRzIElTdXJ2ZXlFbGVtZW50IHtcclxuICBzdGF0ZUNoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuXHJcbiAgcHVibGljIHN0YXRpYyBnZXRQcm9ncmVzc0luZm9CeUVsZW1lbnRzKFxyXG4gICAgY2hpbGRyZW46IEFycmF5PFN1cnZleUVsZW1lbnQ+LFxyXG4gICAgaXNSZXF1aXJlZDogYm9vbGVhblxyXG4gICk6IElQcm9ncmVzc0luZm8ge1xyXG4gICAgY29uc3QgaW5mbzogSVByb2dyZXNzSW5mbyA9IEJhc2UuY3JlYXRlUHJvZ3Jlc3NJbmZvKCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICghY2hpbGRyZW5baV0uaXNWaXNpYmxlKSBjb250aW51ZTtcclxuICAgICAgY29uc3QgY2hpbGRJbmZvOiBJUHJvZ3Jlc3NJbmZvID0gY2hpbGRyZW5baV0uZ2V0UHJvZ3Jlc3NJbmZvKCk7XHJcbiAgICAgIGluZm8ucXVlc3Rpb25Db3VudCArPSBjaGlsZEluZm8ucXVlc3Rpb25Db3VudDtcclxuICAgICAgaW5mby5hbnN3ZXJlZFF1ZXN0aW9uQ291bnQgKz0gY2hpbGRJbmZvLmFuc3dlcmVkUXVlc3Rpb25Db3VudDtcclxuICAgICAgaW5mby5yZXF1aXJlZFF1ZXN0aW9uQ291bnQgKz0gY2hpbGRJbmZvLnJlcXVpcmVkUXVlc3Rpb25Db3VudDtcclxuICAgICAgaW5mby5yZXF1aXJlZEFuc3dlcmVkUXVlc3Rpb25Db3VudCArPVxyXG4gICAgICAgIGNoaWxkSW5mby5yZXF1aXJlZEFuc3dlcmVkUXVlc3Rpb25Db3VudDtcclxuICAgIH1cclxuICAgIGlmIChpc1JlcXVpcmVkICYmIGluZm8ucXVlc3Rpb25Db3VudCA+IDApIHtcclxuICAgICAgaWYgKGluZm8ucmVxdWlyZWRRdWVzdGlvbkNvdW50ID09IDApIGluZm8ucmVxdWlyZWRRdWVzdGlvbkNvdW50ID0gMTtcclxuICAgICAgaWYgKGluZm8uYW5zd2VyZWRRdWVzdGlvbkNvdW50ID4gMClcclxuICAgICAgICBpbmZvLnJlcXVpcmVkQW5zd2VyZWRRdWVzdGlvbkNvdW50ID0gMTtcclxuICAgIH1cclxuICAgIHJldHVybiBpbmZvO1xyXG4gIH1cclxuICBwcml2YXRlIHN1cnZleUltcGxWYWx1ZTogSVN1cnZleUltcGw7XHJcbiAgcHJpdmF0ZSBzdXJ2ZXlEYXRhVmFsdWU6IElTdXJ2ZXlEYXRhO1xyXG4gIHByaXZhdGUgc3VydmV5VmFsdWU6IElTdXJ2ZXk7XHJcbiAgcHJpdmF0ZSB0ZXh0UHJvY2Vzc29yVmFsdWU6IElUZXh0UHJvY2Vzc29yO1xyXG4gIHByaXZhdGUgc2VsZWN0ZWRFbGVtZW50SW5EZXNpZ25WYWx1ZTogU3VydmV5RWxlbWVudCA9IHRoaXM7XHJcbiAgcHJpdmF0ZSBleHBhbmRBY3Rpb246IEFjdGlvbjtcclxuXHJcbiAgQHByb3BlcnR5KHsgZGVmYXVsdFZhbHVlOiBudWxsIH0pIGRyYWdUeXBlT3Zlck1lOiBEcmFnVHlwZU92ZXJNZUVudW07XHJcblxyXG4gIHB1YmxpYyByZWFkT25seUNoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcclxuXHJcbiAgcHVibGljIHN0YXRpYyBTY3JvbGxFbGVtZW50VG9Ub3AoZWxlbWVudElkOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICghZWxlbWVudElkIHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGZhbHNlO1xyXG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpO1xyXG4gICAgaWYgKCFlbCB8fCAhZWwuc2Nyb2xsSW50b1ZpZXcpIHJldHVybiBmYWxzZTtcclxuICAgIGNvbnN0IGVsZW1Ub3A6IG51bWJlciA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcclxuICAgIGlmIChlbGVtVG9wIDwgMCkgZWwuc2Nyb2xsSW50b1ZpZXcoKTtcclxuICAgIHJldHVybiBlbGVtVG9wIDwgMDtcclxuICB9XHJcbiAgcHVibGljIHN0YXRpYyBHZXRGaXJzdE5vblRleHRFbGVtZW50KFxyXG4gICAgZWxlbWVudHM6IGFueSxcclxuICAgIHJlbW92ZVNwYWNlczogYm9vbGVhbiA9IGZhbHNlXHJcbiAgKSB7XHJcbiAgICBpZiAoIWVsZW1lbnRzIHx8ICFlbGVtZW50cy5sZW5ndGggfHwgZWxlbWVudHMubGVuZ3RoID09IDApIHJldHVybiBudWxsO1xyXG4gICAgaWYgKHJlbW92ZVNwYWNlcykge1xyXG4gICAgICBsZXQgdEVsID0gZWxlbWVudHNbMF07XHJcbiAgICAgIGlmICh0RWwubm9kZU5hbWUgPT09IFwiI3RleHRcIikgdEVsLmRhdGEgPSBcIlwiO1xyXG4gICAgICB0RWwgPSBlbGVtZW50c1tlbGVtZW50cy5sZW5ndGggLSAxXTtcclxuICAgICAgaWYgKHRFbC5ub2RlTmFtZSA9PT0gXCIjdGV4dFwiKSB0RWwuZGF0YSA9IFwiXCI7XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChlbGVtZW50c1tpXS5ub2RlTmFtZSAhPSBcIiN0ZXh0XCIgJiYgZWxlbWVudHNbaV0ubm9kZU5hbWUgIT0gXCIjY29tbWVudFwiKVxyXG4gICAgICAgIHJldHVybiBlbGVtZW50c1tpXTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuICBwdWJsaWMgc3RhdGljIEZvY3VzRWxlbWVudChlbGVtZW50SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFlbGVtZW50SWQgfHwgdHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZmFsc2U7XHJcbiAgICBjb25zdCByZXM6IGJvb2xlYW4gPSBTdXJ2ZXlFbGVtZW50LmZvY3VzRWxlbWVudENvcmUoZWxlbWVudElkKTtcclxuICAgIGlmICghcmVzKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIFN1cnZleUVsZW1lbnQuZm9jdXNFbGVtZW50Q29yZShlbGVtZW50SWQpO1xyXG4gICAgICB9LCAxMCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuICBwcml2YXRlIHN0YXRpYyBmb2N1c0VsZW1lbnRDb3JlKGVsZW1lbnRJZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7XHJcbiAgICBpZiAoZWwpIHtcclxuICAgICAgZWwuZm9jdXMoKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIHB1YmxpYyBzdGF0aWMgQ3JlYXRlRGlzYWJsZWREZXNpZ25FbGVtZW50czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBkaXNhYmxlRGVzaWduQWN0aW9uczogYm9vbGVhbiA9XHJcbiAgICBTdXJ2ZXlFbGVtZW50LkNyZWF0ZURpc2FibGVkRGVzaWduRWxlbWVudHM7XHJcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgIHRoaXMuY3JlYXRlTmV3QXJyYXkoXCJlcnJvcnNcIik7XHJcbiAgICB0aGlzLmNyZWF0ZU5ld0FycmF5KFwidGl0bGVBY3Rpb25zXCIpO1xyXG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcImlzUmVhZE9ubHlcIiwgKCkgPT4ge1xyXG4gICAgICB0aGlzLm9uUmVhZE9ubHlDaGFuZ2VkKCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydHlWYWx1ZUNoYW5nZWQoXCJlcnJvcnNcIiwgKCkgPT4ge1xyXG4gICAgICB0aGlzLnVwZGF0ZVZpc2libGVFcnJvcnMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBwcm90ZWN0ZWQgb25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lOiBzdHJpbmcsIG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgIHN1cGVyLm9uUHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTtcclxuICAgIGlmIChuYW1lID09PSBcInN0YXRlXCIpIHtcclxuICAgICAgaWYgKG9sZFZhbHVlID09PSBcImRlZmF1bHRcIiB8fCBuZXdWYWx1ZSA9PT0gXCJkZWZhdWx0XCIpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVRpdGxlQWN0aW9ucygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudXBkYXRlRXhwYW5kQWN0aW9uKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuc3RhdGVDaGFuZ2VkQ2FsbGJhY2spIHRoaXMuc3RhdGVDaGFuZ2VkQ2FsbGJhY2soKTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJvdGVjdGVkIGdldFNrZWxldG9uQ29tcG9uZW50TmFtZUNvcmUoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLnN1cnZleSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zdXJ2ZXkuZ2V0U2tlbGV0b25Db21wb25lbnROYW1lKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgc2tlbGV0b25Db21wb25lbnROYW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRTa2VsZXRvbkNvbXBvbmVudE5hbWVDb3JlKCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIFwiY29sbGFwc2VkXCIgdG8gcmVuZGVyIG9ubHkgUGFuZWwgdGl0bGUgYW5kIGV4cGFuZGVkIGJ1dHRvbiBhbmQgdG8gXCJleHBhbmRlZFwiIHRvIHJlbmRlciB0aGUgY29sbGFwc2VkIGJ1dHRvbiBpbiB0aGUgUGFuZWwgY2FwdGlvblxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgc3RhdGUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzdGF0ZVwiKTtcclxuICB9XHJcbiAgcHVibGljIHNldCBzdGF0ZSh2YWw6IHN0cmluZykge1xyXG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic3RhdGVcIiwgdmFsKTtcclxuICAgIHRoaXMubm90aWZ5U3RhdGVDaGFuZ2VkKCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgbm90aWZ5U3RhdGVDaGFuZ2VkKCkge1xyXG4gICAgaWYgKHRoaXMuc3VydmV5KSB7XHJcbiAgICAgIHRoaXMuc3VydmV5LmVsZW1lbnRDb250ZW50VmlzaWJpbGl0eUNoYW5nZWQodGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgRWxlbWVudCBpcyBpbiB0aGUgY29sbGFwc2VkIHN0YXRlXHJcbiAgICogQHNlZSBzdGF0ZVxyXG4gICAqIEBzZWUgY29sbGFwc2VcclxuICAgKiBAc2VlIGlzRXhwYW5kZWRcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IGlzQ29sbGFwc2VkKCkge1xyXG4gICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKSByZXR1cm47XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gXCJjb2xsYXBzZWRcIjtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBFbGVtZW50IGlzIGluIHRoZSBleHBhbmRlZCBzdGF0ZVxyXG4gICAqIEBzZWUgc3RhdGVcclxuICAgKiBAc2VlIGV4cGFuZFxyXG4gICAqIEBzZWUgaXNDb2xsYXBzZWRcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IGlzRXhwYW5kZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gXCJleHBhbmRlZFwiO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDb2xsYXBzZSB0aGUgRWxlbWVudFxyXG4gICAqIEBzZWUgc3RhdGVcclxuICAgKi9cclxuICBwdWJsaWMgY29sbGFwc2UoKSB7XHJcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybjtcclxuICAgIHRoaXMuc3RhdGUgPSBcImNvbGxhcHNlZFwiO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBFeHBhbmQgdGhlIEVsZW1lbnRcclxuICAgKiBAc2VlIHN0YXRlXHJcbiAgICovXHJcbiAgcHVibGljIGV4cGFuZCgpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBcImV4cGFuZGVkXCI7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFRvZ2dsZSBlbGVtZW50J3Mgc3RhdGVcclxuICAgKiBAc2VlIHN0YXRlXHJcbiAgICovXHJcbiAgcHVibGljIHRvZ2dsZVN0YXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuaXNDb2xsYXBzZWQpIHtcclxuICAgICAgdGhpcy5leHBhbmQoKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc0V4cGFuZGVkKSB7XHJcbiAgICAgIHRoaXMuY29sbGFwc2UoKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgaGFzU3RhdGVCdXR0b24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0V4cGFuZGVkIHx8IHRoaXMuaXNDb2xsYXBzZWQ7XHJcbiAgfVxyXG4gIHByaXZhdGUgdGl0bGVUb29sYmFyVmFsdWU6IEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyO1xyXG4gIHB1YmxpYyBnZXRUaXRsZVRvb2xiYXIoKTogQWRhcHRpdmVBY3Rpb25Db250YWluZXIge1xyXG4gICAgaWYgKCF0aGlzLnRpdGxlVG9vbGJhclZhbHVlKSB7XHJcbiAgICAgIHRoaXMudGl0bGVUb29sYmFyVmFsdWUgPSBuZXcgQWRhcHRpdmVBY3Rpb25Db250YWluZXIoKTtcclxuICAgICAgdGhpcy50aXRsZVRvb2xiYXJWYWx1ZS5zZXRJdGVtcyh0aGlzLmdldFRpdGxlQWN0aW9ucygpKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLnRpdGxlVG9vbGJhclZhbHVlO1xyXG4gIH1cclxuICBwcml2YXRlIHVwZGF0ZUV4cGFuZEFjdGlvbigpIHtcclxuICAgIGlmICghIXRoaXMuZXhwYW5kQWN0aW9uKSB7XHJcbiAgICAgIHRoaXMuZXhwYW5kQWN0aW9uLnZpc2libGUgPSB0aGlzLmlzRXhwYW5kZWQgfHwgdGhpcy5pc0NvbGxhcHNlZDtcclxuICAgICAgdGhpcy5leHBhbmRBY3Rpb24uaW5uZXJDc3MgPSBuZXcgQ3NzQ2xhc3NCdWlsZGVyKClcclxuICAgICAgICAuYXBwZW5kKFwic3YtZXhwYW5kLWFjdGlvblwiKS5hcHBlbmQoXCJzdi1leHBhbmQtYWN0aW9uLS1leHBhbmRlZFwiLCB0aGlzLmlzRXhwYW5kZWQpLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgdGl0bGVBY3Rpb25zKCk6IEFycmF5PGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInRpdGxlQWN0aW9uc1wiKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBpc1RpdGxlQWN0aW9uUmVxdWVzdGVkOiBib29sZWFuO1xyXG4gIHB1YmxpYyBnZXRUaXRsZUFjdGlvbnMoKTogQXJyYXk8YW55PiB7XHJcbiAgICBpZiAoIXRoaXMuaXNUaXRsZUFjdGlvblJlcXVlc3RlZCkge1xyXG4gICAgICB0aGlzLnVwZGF0ZVRpdGxlQWN0aW9ucygpO1xyXG4gICAgICB0aGlzLmlzVGl0bGVBY3Rpb25SZXF1ZXN0ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMudGl0bGVBY3Rpb25zO1xyXG4gIH1cclxuICBwcml2YXRlIHVwZGF0ZVRpdGxlQWN0aW9ucygpIHtcclxuICAgIGxldCBhY3Rpb25zID0gW107XHJcbiAgICBpZiAodGhpcy5oYXNTdGF0ZUJ1dHRvbiAmJiAhdGhpcy5leHBhbmRBY3Rpb24pIHtcclxuICAgICAgdGhpcy5leHBhbmRBY3Rpb24gPSBuZXcgQWN0aW9uKHtcclxuICAgICAgICBpZDogXCJleHBhbmQtY29sbGFwc2UtYWN0aW9uXCIsXHJcbiAgICAgICAgdGl0bGU6IFwiXCIsXHJcbiAgICAgICAgZGlzYWJsZVRhYlN0b3A6IHRydWUsXHJcbiAgICAgICAgYWN0aW9uOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRvZ2dsZVN0YXRlKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAoISF0aGlzLmV4cGFuZEFjdGlvbikge1xyXG4gICAgICBhY3Rpb25zLnB1c2godGhpcy5leHBhbmRBY3Rpb24pO1xyXG4gICAgfVxyXG4gICAgaWYgKCEhdGhpcy5zdXJ2ZXkpIHtcclxuICAgICAgYWN0aW9ucyA9IHRoaXMuc3VydmV5LmdldFVwZGF0ZWRFbGVtZW50VGl0bGVBY3Rpb25zKHRoaXMsIGFjdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgdGhpcy51cGRhdGVFeHBhbmRBY3Rpb24oKTtcclxuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInRpdGxlQWN0aW9uc1wiLCBhY3Rpb25zKTtcclxuICB9XHJcbiAgcHVibGljIGdldCBoYXNUaXRsZUFjdGlvbnMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRUaXRsZUFjdGlvbnMoKS5sZW5ndGggPiAwO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGhhc1RpdGxlRXZlbnRzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFzVGl0bGVBY3Rpb25zIHx8IHRoaXMuc3RhdGUgIT09IFwiZGVmYXVsdFwiO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0VGl0bGVDb21wb25lbnROYW1lKCk6IHN0cmluZyB7XHJcbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IFJlbmRlcmVyRmFjdG9yeS5JbnN0YW5jZS5nZXRSZW5kZXJlcihcclxuICAgICAgXCJlbGVtZW50XCIsXHJcbiAgICAgIFwidGl0bGUtYWN0aW9uc1wiXHJcbiAgICApO1xyXG4gICAgaWYgKGNvbXBvbmVudE5hbWUgPT0gXCJkZWZhdWx0XCIpIHtcclxuICAgICAgcmV0dXJuIFwic3YtZGVmYXVsdC10aXRsZVwiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbXBvbmVudE5hbWU7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgdGl0bGVUYWJJbmRleCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuICF0aGlzLmlzUGFnZSAmJiB0aGlzLnN0YXRlICE9PSBcImRlZmF1bHRcIiA/IDAgOiB1bmRlZmluZWQ7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgdGl0bGVBcmlhRXhwYW5kZWQoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5pc1BhZ2UgfHwgdGhpcy5zdGF0ZSA9PT0gXCJkZWZhdWx0XCIpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gXCJleHBhbmRlZFwiO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0U3VydmV5SW1wbCh2YWx1ZTogSVN1cnZleUltcGwsIGlzTGlnaHQ/OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnN1cnZleUltcGxWYWx1ZSA9IHZhbHVlO1xyXG4gICAgaWYgKCF0aGlzLnN1cnZleUltcGxWYWx1ZSkge1xyXG4gICAgICB0aGlzLnNldFN1cnZleUNvcmUobnVsbCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnN1cnZleURhdGFWYWx1ZSA9IHRoaXMuc3VydmV5SW1wbFZhbHVlLmdldFN1cnZleURhdGEoKTtcclxuICAgICAgdGhpcy5zZXRTdXJ2ZXlDb3JlKHRoaXMuc3VydmV5SW1wbFZhbHVlLmdldFN1cnZleSgpKTtcclxuICAgICAgdGhpcy50ZXh0UHJvY2Vzc29yVmFsdWUgPSB0aGlzLnN1cnZleUltcGxWYWx1ZS5nZXRUZXh0UHJvY2Vzc29yKCk7XHJcbiAgICAgIHRoaXMub25TZXREYXRhKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByb3RlY3RlZCBnZXQgc3VydmV5SW1wbCgpIHtcclxuICAgIHJldHVybiB0aGlzLnN1cnZleUltcGxWYWx1ZTtcclxuICB9XHJcbiAgcHVibGljIGdldCBkYXRhKCk6IElTdXJ2ZXlEYXRhIHtcclxuICAgIHJldHVybiB0aGlzLnN1cnZleURhdGFWYWx1ZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgc3VydmV5IG9iamVjdC5cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IHN1cnZleSgpOiBJU3VydmV5IHtcclxuICAgIHJldHVybiB0aGlzLmdldFN1cnZleSgpO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0U3VydmV5KGxpdmU6IGJvb2xlYW4gPSBmYWxzZSk6IElTdXJ2ZXkge1xyXG4gICAgaWYgKCEhdGhpcy5zdXJ2ZXlWYWx1ZSkgcmV0dXJuIHRoaXMuc3VydmV5VmFsdWU7XHJcbiAgICBpZiAoISF0aGlzLnN1cnZleUltcGxWYWx1ZSkge1xyXG4gICAgICB0aGlzLnNldFN1cnZleUNvcmUodGhpcy5zdXJ2ZXlJbXBsVmFsdWUuZ2V0U3VydmV5KCkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuc3VydmV5VmFsdWU7XHJcbiAgfVxyXG4gIHByb3RlY3RlZCBzZXRTdXJ2ZXlDb3JlKHZhbHVlOiBJU3VydmV5KSB7XHJcbiAgICB0aGlzLnN1cnZleVZhbHVlID0gdmFsdWU7XHJcbiAgICBpZiAoISF0aGlzLnN1cnZleUNoYW5nZWRDYWxsYmFjaykge1xyXG4gICAgICB0aGlzLnN1cnZleUNoYW5nZWRDYWxsYmFjaygpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHF1ZXN0aW9uIGluIGRlc2lnbiBtb2RlIHJpZ2h0IG5vdy5cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IGlzRGVzaWduTW9kZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhIXRoaXMuc3VydmV5ICYmIHRoaXMuc3VydmV5LmlzRGVzaWduTW9kZTtcclxuICB9XHJcbiAgcHVibGljIGlzQ29udGVudEVsZW1lbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaXNFZGl0YWJsZVRlbXBsYXRlRWxlbWVudDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc0ludGVyYWN0aXZlRGVzaWduRWxlbWVudDogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJvdGVjdGVkIGdldCBpc0ludGVybmFsKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNDb250ZW50RWxlbWVudDtcclxuICB9XHJcbiAgcHVibGljIGdldCBhcmVJbnZpc2libGVFbGVtZW50c1Nob3dpbmcoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICAhIXRoaXMuc3VydmV5ICYmXHJcbiAgICAgIHRoaXMuc3VydmV5LmFyZUludmlzaWJsZUVsZW1lbnRzU2hvd2luZyAmJlxyXG4gICAgICAhdGhpcy5pc0NvbnRlbnRFbGVtZW50XHJcbiAgICApO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGlzVmlzaWJsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGlzUmVhZE9ubHkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldCBpdCB0byB0cnVlIHRvIG1ha2UgYW4gZWxlbWVudCBxdWVzdGlvbi9wYW5lbC9wYWdlIHJlYWRvbmx5LlxyXG4gICAqIFBsZWFzZSBub3RlLCB0aGlzIHByb3BlcnR5IGlzIGhpZGRlbiBmb3IgcXVlc3Rpb24gd2l0aG91dCBpbnB1dCwgZm9yIGV4YW1wbGUgaHRtbCBxdWVzdGlvbi5cclxuICAgKiBAc2VlIGVuYWJsZUlmXHJcbiAgICogQHNlZSBpc1JlYWRPbmx5XHJcbiAgICovXHJcbiAgcHVibGljIGdldCByZWFkT25seSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJyZWFkT25seVwiLCBmYWxzZSk7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgcmVhZE9ubHkodmFsOiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5yZWFkT25seSA9PSB2YWwpIHJldHVybjtcclxuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJlYWRPbmx5XCIsIHZhbCk7XHJcbiAgICBpZiAoIXRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHtcclxuICAgICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNSZWFkT25seVwiLCB0aGlzLmlzUmVhZE9ubHkpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcm90ZWN0ZWQgb25SZWFkT25seUNoYW5nZWQoKSB7XHJcbiAgICBpZiAoISF0aGlzLnJlYWRPbmx5Q2hhbmdlZENhbGxiYWNrKSB7XHJcbiAgICAgIHRoaXMucmVhZE9ubHlDaGFuZ2VkQ2FsbGJhY2soKTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBnZXQgY3NzKCk6IGFueSB7XHJcbiAgICByZXR1cm4gISF0aGlzLnN1cnZleSA/IHRoaXMuc3VydmV5LmdldENzcygpIDoge307XHJcbiAgfVxyXG4gIEBwcm9wZXJ0eSgpIGNzc0NsYXNzZXNWYWx1ZTogYW55O1xyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgYWxsIGNzcyBjbGFzc2VzIHRoYXQgdXNlZCBmb3IgcmVuZGVyaW5nIHRoZSBxdWVzdGlvbiwgcGFuZWwgb3IgcGFnZS5cclxuICAgKiBZb3UgY2FuIHVzZSBzdXJ2ZXkub25VcGRhdGVRdWVzdGlvbkNzc0NsYXNzZXMgZXZlbnQgdG8gb3ZlcnJpZGUgY3NzIGNsYXNzZXMgZm9yIGEgcXVlc3Rpb24sIHN1cnZleS5vblVwZGF0ZVBhbmVsQ3NzQ2xhc3NlcyBldmVudCBmb3IgYSBwYW5lbCBhbmQgc3VydmV5Lm9uVXBkYXRlUGFnZUNzc0NsYXNzZXMgZm9yIGEgcGFnZS5cclxuICAgKiBAc2VlIFN1cnZleU1vZGVsLnVwZGF0ZVF1ZXN0aW9uQ3NzQ2xhc3Nlc1xyXG4gICAqIEBzZWUgU3VydmV5TW9kZWwudXBkYXRlUGFuZWxDc3NDbGFzc2VzXHJcbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC51cGRhdGVQYWdlQ3NzQ2xhc3Nlc1xyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgY3NzQ2xhc3NlcygpOiBhbnkge1xyXG4gICAgaWYgKCF0aGlzLnN1cnZleSkgcmV0dXJuIHRoaXMuY2FsY0Nzc0NsYXNzZXModGhpcy5jc3MpO1xyXG4gICAgaWYgKCF0aGlzLmNzc0NsYXNzZXNWYWx1ZSkge1xyXG4gICAgICB0aGlzLmNzc0NsYXNzZXNWYWx1ZSA9IHRoaXMuY2FsY0Nzc0NsYXNzZXModGhpcy5jc3MpO1xyXG4gICAgICB0aGlzLnVwZGF0ZUVsZW1lbnRDc3NDb3JlKHRoaXMuY3NzQ2xhc3Nlc1ZhbHVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmNzc0NsYXNzZXNWYWx1ZTtcclxuICB9XHJcbiAgcHJvdGVjdGVkIGNhbGNDc3NDbGFzc2VzKGNzczogYW55KTogYW55IHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxyXG4gIHByb3RlY3RlZCB1cGRhdGVFbGVtZW50Q3NzQ29yZShjc3NDbGFzc2VzOiBhbnkpIHsgfVxyXG4gIHB1YmxpYyBnZXQgY3NzRXJyb3IoKTogc3RyaW5nIHsgcmV0dXJuIFwiXCI7IH1cclxuICBwdWJsaWMgdXBkYXRlRWxlbWVudENzcyhyZU5ldz86IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuY3NzQ2xhc3Nlc1ZhbHVlID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuICBwcm90ZWN0ZWQgZ2V0SXNMb2FkaW5nRnJvbUpzb24oKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoc3VwZXIuZ2V0SXNMb2FkaW5nRnJvbUpzb24oKSkgcmV0dXJuIHRydWU7XHJcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkgPyB0aGlzLnN1cnZleS5pc0xvYWRpbmdGcm9tSnNvbiA6IGZhbHNlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBUaGlzIGlzIHRoZSBpZGVudGlmaWVyIG9mIGEgc3VydmV5IGVsZW1lbnQgLSBxdWVzdGlvbiBvciBwYW5lbC5cclxuICAgKiBAc2VlIHZhbHVlTmFtZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgbmFtZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm5hbWVcIiwgXCJcIik7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgbmFtZSh2YWw6IHN0cmluZykge1xyXG4gICAgdmFyIG9sZFZhbHVlID0gdGhpcy5uYW1lO1xyXG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibmFtZVwiLCB0aGlzLmdldFZhbGlkTmFtZSh2YWwpKTtcclxuICAgIGlmICghdGhpcy5pc0xvYWRpbmdGcm9tSnNvbiAmJiAhIW9sZFZhbHVlKSB7XHJcbiAgICAgIHRoaXMub25OYW1lQ2hhbmdlZChvbGRWYWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByb3RlY3RlZCBnZXRWYWxpZE5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBuYW1lO1xyXG4gIH1cclxuICBwcm90ZWN0ZWQgb25OYW1lQ2hhbmdlZChvbGRWYWx1ZTogc3RyaW5nKSB7IH1cclxuICBwcm90ZWN0ZWQgdXBkYXRlQmluZGluZ1ZhbHVlKHZhbHVlTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAoXHJcbiAgICAgICEhdGhpcy5kYXRhICYmXHJcbiAgICAgICF0aGlzLmlzVHdvVmFsdWVFcXVhbHModmFsdWUsIHRoaXMuZGF0YS5nZXRWYWx1ZSh2YWx1ZU5hbWUpKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZGF0YS5zZXRWYWx1ZSh2YWx1ZU5hbWUsIHZhbHVlLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFRoZSBsaXN0IG9mIGVycm9ycy4gSXQgaXMgY3JlYXRlZCBieSBjYWxsaWcgaGFzRXJyb3JzIGZ1bmN0aW9uc1xyXG4gICAqIEBzZWUgaGFzRXJyb3JzXHJcbiAgICovXHJcbiAgcHVibGljIGdldCBlcnJvcnMoKTogQXJyYXk8U3VydmV5RXJyb3I+IHtcclxuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJlcnJvcnNcIik7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgZXJyb3JzKHZhbDogQXJyYXk8U3VydmV5RXJyb3I+KSB7XHJcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJlcnJvcnNcIiwgdmFsKTtcclxuICB9XHJcbiAgQHByb3BlcnR5KHsgZGVmYXVsdFZhbHVlOiBmYWxzZSB9KSBoYXNWaXNpYmxlRXJyb3JzOiBib29sZWFuO1xyXG4gIHByaXZhdGUgdXBkYXRlVmlzaWJsZUVycm9ycygpIHtcclxuICAgIHZhciBjb3VudGVyID0gMDtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5lcnJvcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHRoaXMuZXJyb3JzW2ldLnZpc2libGUpIGNvdW50ZXIrKztcclxuICAgIH1cclxuICAgIHRoaXMuaGFzVmlzaWJsZUVycm9ycyA9IGNvdW50ZXIgPiAwO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRydWUgaWYgYSBxdWVzdGlvbiBvciBhIGNvbnRhaW5lciAocGFuZWwvcGFnZSkgb3IgdGhlaXIgY2hpZHJlbiBoYXZlIGFuIGVycm9yLlxyXG4gICAqIFRoZSB2YWx1ZSBjYW4gYmUgb3V0IG9mIGRhdGUuIGhhc0Vycm9ycyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHRvIGdldCB0aGUgY29ycmVjdCB2YWx1ZS5cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IGNvbnRhaW5zRXJyb3JzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvbnRhaW5zRXJyb3JzXCIsIGZhbHNlKTtcclxuICB9XHJcbiAgcHVibGljIHVwZGF0ZUNvbnRhaW5zRXJyb3JzKCkge1xyXG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY29udGFpbnNFcnJvcnNcIiwgdGhpcy5nZXRDb250YWluc0Vycm9ycygpKTtcclxuICB9XHJcbiAgcHJvdGVjdGVkIGdldENvbnRhaW5zRXJyb3JzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZXJyb3JzLmxlbmd0aCA+IDA7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXRFbGVtZW50c0luRGVzaWduKGluY2x1ZGVIaWRkZW46IGJvb2xlYW4gPSBmYWxzZSk6IEFycmF5PElFbGVtZW50PiB7XHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRFbGVtZW50SW5EZXNpZ24oKTogU3VydmV5RWxlbWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEVsZW1lbnRJbkRlc2lnblZhbHVlO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IHNlbGVjdGVkRWxlbWVudEluRGVzaWduKHZhbDogU3VydmV5RWxlbWVudCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRJbkRlc2lnblZhbHVlID0gdmFsO1xyXG4gIH1cclxuICBwdWJsaWMgdXBkYXRlQ3VzdG9tV2lkZ2V0cygpIHsgfVxyXG5cclxuICBwdWJsaWMgb25TdXJ2ZXlMb2FkKCkgeyB9XHJcbiAgcHVibGljIG9uRmlyc3RSZW5kZXJpbmcoKSB7IH1cclxuICBlbmRMb2FkaW5nRnJvbUpzb24oKSB7XHJcbiAgICBzdXBlci5lbmRMb2FkaW5nRnJvbUpzb24oKTtcclxuICAgIGlmICghdGhpcy5zdXJ2ZXkpIHtcclxuICAgICAgdGhpcy5vblN1cnZleUxvYWQoKTtcclxuICAgIH1cclxuICB9XHJcbiAgcHVibGljIHNldFZpc2libGVJbmRleChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAwO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRydWUgaWYgaXQgaXMgYSBwYWdlLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgaXNQYWdlKCkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRydWUgaWYgaXQgaXMgYSBwYW5lbC5cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IGlzUGFuZWwoKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBpdCBpcyBhIHF1ZXN0aW9uLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgaXNRdWVzdGlvbigpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgcHVibGljIGRlbGV0ZSgpIHsgfVxyXG4gIC8vSUxvY2FsaXphYmxlT3duZXJcclxuICBsb2NPd25lcjogSUxvY2FsaXphYmxlT3duZXI7XHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCBzdXJ2ZXkgbG9jYWxlXHJcbiAgICogQHNlZSBTdXJ2ZXlNb2RlbC5sb2NhbGVcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0TG9jYWxlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXlcclxuICAgICAgPyAoPElMb2NhbGl6YWJsZU93bmVyPig8YW55PnRoaXMuc3VydmV5KSkuZ2V0TG9jYWxlKClcclxuICAgICAgOiB0aGlzLmxvY093bmVyXHJcbiAgICAgICAgPyB0aGlzLmxvY093bmVyLmdldExvY2FsZSgpXHJcbiAgICAgICAgOiBcIlwiO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0TWFya2Rvd25IdG1sKHRleHQ6IHN0cmluZywgbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnN1cnZleVxyXG4gICAgICA/IHRoaXMuc3VydmV5LmdldFN1cnZleU1hcmtkb3duSHRtbCh0aGlzLCB0ZXh0LCBuYW1lKVxyXG4gICAgICA6IHRoaXMubG9jT3duZXJcclxuICAgICAgICA/IHRoaXMubG9jT3duZXIuZ2V0TWFya2Rvd25IdG1sKHRleHQsIG5hbWUpXHJcbiAgICAgICAgOiBudWxsO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0UmVuZGVyZXIobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnN1cnZleSAmJiB0eXBlb2YgdGhpcy5zdXJ2ZXkuZ2V0UmVuZGVyZXJGb3JTdHJpbmcgPT09IFwiZnVuY3Rpb25cIlxyXG4gICAgICA/IHRoaXMuc3VydmV5LmdldFJlbmRlcmVyRm9yU3RyaW5nKHRoaXMsIG5hbWUpXHJcbiAgICAgIDogdGhpcy5sb2NPd25lciAmJiB0eXBlb2YgdGhpcy5sb2NPd25lci5nZXRSZW5kZXJlciA9PT0gXCJmdW5jdGlvblwiXHJcbiAgICAgICAgPyB0aGlzLmxvY093bmVyLmdldFJlbmRlcmVyKG5hbWUpXHJcbiAgICAgICAgOiBudWxsO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0UmVuZGVyZXJDb250ZXh0KGxvY1N0cjogTG9jYWxpemFibGVTdHJpbmcpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3VydmV5ICYmIHR5cGVvZiB0aGlzLnN1cnZleS5nZXRSZW5kZXJlckNvbnRleHRGb3JTdHJpbmcgPT09IFwiZnVuY3Rpb25cIlxyXG4gICAgICA/IHRoaXMuc3VydmV5LmdldFJlbmRlcmVyQ29udGV4dEZvclN0cmluZyh0aGlzLCBsb2NTdHIpXHJcbiAgICAgIDogdGhpcy5sb2NPd25lciAmJiB0eXBlb2YgdGhpcy5sb2NPd25lci5nZXRSZW5kZXJlckNvbnRleHQgPT09IFwiZnVuY3Rpb25cIlxyXG4gICAgICAgID8gdGhpcy5sb2NPd25lci5nZXRSZW5kZXJlckNvbnRleHQobG9jU3RyKVxyXG4gICAgICAgIDogbG9jU3RyO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybiB0ZXh0O1xyXG4gICAgaWYgKHRoaXMudGV4dFByb2Nlc3NvcilcclxuICAgICAgcmV0dXJuIHRoaXMudGV4dFByb2Nlc3Nvci5wcm9jZXNzVGV4dCh0ZXh0LCB0aGlzLmdldFVzZURpc3BsYXlWYWx1ZXNJblRpdGxlKCkpO1xyXG4gICAgaWYgKHRoaXMubG9jT3duZXIpIHJldHVybiB0aGlzLmxvY093bmVyLmdldFByb2Nlc3NlZFRleHQodGV4dCk7XHJcbiAgICByZXR1cm4gdGV4dDtcclxuICB9XHJcbiAgcHJvdGVjdGVkIGdldFVzZURpc3BsYXlWYWx1ZXNJblRpdGxlKCk6IGJvb2xlYW4geyByZXR1cm4gdHJ1ZTsgfVxyXG4gIHByb3RlY3RlZCByZW1vdmVTZWxmRnJvbUxpc3QobGlzdDogQXJyYXk8YW55Pikge1xyXG4gICAgaWYgKCFsaXN0IHx8ICFBcnJheS5pc0FycmF5KGxpc3QpKSByZXR1cm47XHJcbiAgICBjb25zdCBpbmRleDogbnVtYmVyID0gbGlzdC5pbmRleE9mKHRoaXMpO1xyXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgbGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcm90ZWN0ZWQgZ2V0IHRleHRQcm9jZXNzb3IoKTogSVRleHRQcm9jZXNzb3Ige1xyXG4gICAgcmV0dXJuIHRoaXMudGV4dFByb2Nlc3NvclZhbHVlO1xyXG4gIH1cclxuICBwcm90ZWN0ZWQgZ2V0UHJvY2Vzc2VkSHRtbChodG1sOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFodG1sIHx8ICF0aGlzLnRleHRQcm9jZXNzb3IpIHJldHVybiBodG1sO1xyXG4gICAgcmV0dXJuIHRoaXMudGV4dFByb2Nlc3Nvci5wcm9jZXNzVGV4dChodG1sLCB0cnVlKTtcclxuICB9XHJcbiAgcHJvdGVjdGVkIG9uU2V0RGF0YSgpIHsgfVxyXG4gIHB1YmxpYyBnZXQgcGFyZW50KCk6IElQYW5lbCB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFyZW50XCIsIG51bGwpO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IHBhcmVudCh2YWw6IElQYW5lbCkge1xyXG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicGFyZW50XCIsIHZhbCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0UGFnZShwYXJlbnQ6IElQYW5lbCk6IElQYWdlIHtcclxuICAgIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50LnBhcmVudCkgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcclxuICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LmdldFR5cGUoKSA9PSBcInBhZ2VcIikgcmV0dXJuIDxJUGFnZT4oPGFueT5wYXJlbnQpO1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG4gIHByb3RlY3RlZCBtb3ZlVG9CYXNlKFxyXG4gICAgcGFyZW50OiBJUGFuZWwsXHJcbiAgICBjb250YWluZXI6IElQYW5lbCxcclxuICAgIGluc2VydEJlZm9yZTogYW55ID0gbnVsbFxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFjb250YWluZXIpIHJldHVybiBmYWxzZTtcclxuICAgIHBhcmVudC5yZW1vdmVFbGVtZW50KDxJRWxlbWVudD4oPGFueT50aGlzKSk7XHJcbiAgICBsZXQgaW5kZXggPSAtMTtcclxuICAgIGlmIChIZWxwZXJzLmlzTnVtYmVyKGluc2VydEJlZm9yZSkpIHtcclxuICAgICAgaW5kZXggPSBwYXJzZUludChpbnNlcnRCZWZvcmUpO1xyXG4gICAgfVxyXG4gICAgaWYgKGluZGV4ID09IC0xICYmICEhaW5zZXJ0QmVmb3JlICYmICEhaW5zZXJ0QmVmb3JlLmdldFR5cGUpIHtcclxuICAgICAgaW5kZXggPSBjb250YWluZXIuaW5kZXhPZihpbnNlcnRCZWZvcmUpO1xyXG4gICAgfVxyXG4gICAgY29udGFpbmVyLmFkZEVsZW1lbnQoPElFbGVtZW50Pig8YW55PnRoaXMpLCBpbmRleCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBzZXRQYWdlKHBhcmVudDogSVBhbmVsLCBuZXdQYWdlOiBJUGFnZSk6IHZvaWQge1xyXG4gICAgY29uc3Qgb2xkUGFnZTogSVBhZ2UgPSB0aGlzLmdldFBhZ2UocGFyZW50KTtcclxuXHJcbiAgICAvL2ZpeCBmb3IgdGhlIGNyZWF0b3IgdjE6IGh0dHBzOi8vZ2l0aHViLmNvbS9zdXJ2ZXlqcy9zdXJ2ZXktY3JlYXRvci9pc3N1ZXMvMTc0NFxyXG4gICAgaWYgKHR5cGVvZiBuZXdQYWdlID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIGNvbnN0IHN1cnZleSA9IHRoaXMuZ2V0U3VydmV5KCk7XHJcbiAgICAgIHN1cnZleS5wYWdlcy5mb3JFYWNoKChwYWdlOiBJUGFnZSkgPT4ge1xyXG4gICAgICAgIGlmICg8YW55Pm5ld1BhZ2UgPT09IHBhZ2UubmFtZSkgbmV3UGFnZSA9IHBhZ2U7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvbGRQYWdlID09PSBuZXdQYWdlKSByZXR1cm47XHJcbiAgICBpZiAocGFyZW50KSBwYXJlbnQucmVtb3ZlRWxlbWVudCg8SUVsZW1lbnQ+KDxhbnk+dGhpcykpO1xyXG4gICAgaWYgKG5ld1BhZ2UpIHtcclxuICAgICAgbmV3UGFnZS5hZGRFbGVtZW50KDxJRWxlbWVudD4oPGFueT50aGlzKSwgLTEpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcm90ZWN0ZWQgZ2V0U2VhcmNoYWJsZUxvY0tleXMoa2V5czogQXJyYXk8c3RyaW5nPikge1xyXG4gICAga2V5cy5wdXNoKFwidGl0bGVcIik7XHJcbiAgICBrZXlzLnB1c2goXCJkZXNjcmlwdGlvblwiKTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgSVN1cnZleUVycm9yT3duZXIgfSBmcm9tIFwiLi9iYXNlLWludGVyZmFjZXNcIjtcclxuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN1cnZleUVycm9yIHtcclxuICBwcml2YXRlIGxvY1RleHRWYWx1ZTogTG9jYWxpemFibGVTdHJpbmc7XHJcbiAgcHVibGljIHZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHRleHQ6IHN0cmluZyA9IG51bGwsXHJcbiAgICBwcm90ZWN0ZWQgZXJyb3JPd25lcjogSVN1cnZleUVycm9yT3duZXIgPSBudWxsXHJcbiAgKSB7fVxyXG4gIHB1YmxpYyBnZXQgbG9jVGV4dCgpIHtcclxuICAgIGlmICghdGhpcy5sb2NUZXh0VmFsdWUpIHtcclxuICAgICAgdGhpcy5sb2NUZXh0VmFsdWUgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcy5lcnJvck93bmVyLCB0cnVlKTtcclxuICAgICAgdGhpcy5sb2NUZXh0VmFsdWUudGV4dCA9IHRoaXMuZ2V0VGV4dCgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMubG9jVGV4dFZhbHVlO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0VGV4dCgpOiBzdHJpbmcge1xyXG4gICAgdmFyIHJlcyA9IHRoaXMudGV4dDtcclxuICAgIGlmICghcmVzKSByZXMgPSB0aGlzLmdldERlZmF1bHRUZXh0KCk7XHJcbiAgICBpZiAoISF0aGlzLmVycm9yT3duZXIpIHtcclxuICAgICAgcmVzID0gdGhpcy5lcnJvck93bmVyLmdldEVycm9yQ3VzdG9tVGV4dChyZXMsIHRoaXMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcbiAgcHVibGljIGdldEVycm9yVHlwZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIFwiYmFzZVwiO1xyXG4gIH1cclxuICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdFRleHQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBcIlwiO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBIYXNoVGFibGUsIEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBKc29uT2JqZWN0LCBKc29uRXJyb3IsIFNlcmlhbGl6ZXIsIHByb3BlcnR5IH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgQmFzZSwgRXZlbnRCYXNlIH0gZnJvbSBcIi4vYmFzZVwiO1xuaW1wb3J0IHtcbiAgSVN1cnZleSxcbiAgSVN1cnZleURhdGEsXG4gIElTdXJ2ZXlJbXBsLFxuICBJVGV4dFByb2Nlc3NvcixcbiAgSVF1ZXN0aW9uLFxuICBJUGFuZWwsXG4gIElFbGVtZW50LFxuICBJUGFnZSxcbiAgSVN1cnZleUVycm9yT3duZXIsXG4gIElTdXJ2ZXlFbGVtZW50LFxuICBJUHJvZ3Jlc3NJbmZvLFxuICBJRmluZEVsZW1lbnQsXG59IGZyb20gXCIuL2Jhc2UtaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgU3VydmV5RWxlbWVudENvcmUsIFN1cnZleUVsZW1lbnQgfSBmcm9tIFwiLi9zdXJ2ZXktZWxlbWVudFwiO1xuaW1wb3J0IHsgc3VydmV5Q3NzIH0gZnJvbSBcIi4vZGVmYXVsdENzcy9jc3NzdGFuZGFyZFwiO1xuaW1wb3J0IHsgSVN1cnZleVRyaWdnZXJPd25lciwgU3VydmV5VHJpZ2dlciB9IGZyb20gXCIuL3RyaWdnZXJcIjtcbmltcG9ydCB7IENhbGN1bGF0ZWRWYWx1ZSB9IGZyb20gXCIuL2NhbGN1bGF0ZWRWYWx1ZVwiO1xuaW1wb3J0IHsgUGFnZU1vZGVsIH0gZnJvbSBcIi4vcGFnZVwiO1xuaW1wb3J0IHsgVGV4dFByZVByb2Nlc3NvciwgVGV4dFByZVByb2Nlc3NvclZhbHVlIH0gZnJvbSBcIi4vdGV4dFByZVByb2Nlc3NvclwiO1xuaW1wb3J0IHsgUHJvY2Vzc1ZhbHVlIH0gZnJvbSBcIi4vY29uZGl0aW9uUHJvY2Vzc1ZhbHVlXCI7XG5pbXBvcnQgeyBkeFN1cnZleVNlcnZpY2UgfSBmcm9tIFwiLi9keFN1cnZleVNlcnZpY2VcIjtcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcbmltcG9ydCB7IEN1c3RvbUVycm9yIH0gZnJvbSBcIi4vZXJyb3JcIjtcbmltcG9ydCB7IElMb2NhbGl6YWJsZU93bmVyLCBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQgeyBTdHlsZXNNYW5hZ2VyIH0gZnJvbSBcIi4vc3R5bGVzbWFuYWdlclwiO1xuaW1wb3J0IHsgU3VydmV5VGltZXIgfSBmcm9tIFwiLi9zdXJ2ZXl0aW1lclwiO1xuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tIFwiLi9xdWVzdGlvblwiO1xuaW1wb3J0IHsgUXVlc3Rpb25TZWxlY3RCYXNlIH0gZnJvbSBcIi4vcXVlc3Rpb25fYmFzZXNlbGVjdFwiO1xuaW1wb3J0IHsgSXRlbVZhbHVlIH0gZnJvbSBcIi4vaXRlbXZhbHVlXCI7XG5pbXBvcnQgeyBQYW5lbE1vZGVsQmFzZSwgUXVlc3Rpb25Sb3dNb2RlbCB9IGZyb20gXCIuL3BhbmVsXCI7XG5pbXBvcnQge1xuICBIdG1sQ29uZGl0aW9uSXRlbSxcbiAgVXJsQ29uZGl0aW9uSXRlbSxcbiAgRXhwcmVzc2lvbkl0ZW0sXG59IGZyb20gXCIuL2V4cHJlc3Npb25JdGVtc1wiO1xuaW1wb3J0IHsgRXhwcmVzc2lvblJ1bm5lciwgQ29uZGl0aW9uUnVubmVyIH0gZnJvbSBcIi4vY29uZGl0aW9uc1wiO1xuaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuaW1wb3J0IHsgZ2V0U2l6ZSwgaXNNb2JpbGUsIHNjcm9sbEVsZW1lbnRCeUNoaWxkSWQgfSBmcm9tIFwiLi91dGlscy91dGlsc1wiO1xuaW1wb3J0IHsgU3VydmV5RXJyb3IgfSBmcm9tIFwiLi9zdXJ2ZXktZXJyb3JcIjtcbmltcG9ydCB7IElBY3Rpb24gfSBmcm9tIFwiLi9hY3Rpb25zL2FjdGlvblwiO1xuaW1wb3J0IHsgQ3NzQ2xhc3NCdWlsZGVyIH0gZnJvbSBcIi4vdXRpbHMvY3NzQ2xhc3NCdWlsZGVyXCI7XG5cbi8qKlxuICogVGhlIGBTdXJ2ZXlgIG9iamVjdCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3VydmV5LCBQYWdlcywgUXVlc3Rpb25zLCBmbG93IGxvZ2ljIGFuZCBldGMuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlNb2RlbCBleHRlbmRzIFN1cnZleUVsZW1lbnRDb3JlXG4gIGltcGxlbWVudHNcbiAgSVN1cnZleSxcbiAgSVN1cnZleURhdGEsXG4gIElTdXJ2ZXlJbXBsLFxuICBJU3VydmV5VHJpZ2dlck93bmVyLFxuICBJU3VydmV5RXJyb3JPd25lciB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVGVtcGxhdGVSZW5kZXJlckNvbXBvbmVudE5hbWU6IHN0cmluZyA9XG4gICAgXCJzdi10ZW1wbGF0ZS1yZW5kZXJlclwiO1xuICBbaW5kZXg6IHN0cmluZ106IGFueTtcbiAgcHJpdmF0ZSBzdGF0aWMgc3R5bGVzTWFuYWdlcjogU3R5bGVzTWFuYWdlciA9IG51bGw7XG4gIHB1YmxpYyBzdGF0aWMgcGxhdGZvcm06IHN0cmluZyA9IFwidW5rbm93blwiO1xuICBwdWJsaWMgZ2V0IHBsYXRmb3JtTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBTdXJ2ZXlNb2RlbC5wbGF0Zm9ybTtcbiAgfVxuICAvKipcbiAgICogWW91IGNhbiBkaXNwbGF5IGFuIGFkZGl0aW9uYWwgZmllbGQgKGNvbW1lbnQgZmllbGQpIGZvciB0aGUgbW9zdCBvZiBxdWVzdGlvbnM7IHVzZXJzIGNhbiBlbnRlciBhZGRpdGlvbmFsIGNvbW1lbnRzIHRvIHRoZWlyIHJlc3BvbnNlLlxuICAgKiBUaGUgY29tbWVudCBmaWVsZCBpbnB1dCBpcyBzYXZlZCBhcyBgJ3F1ZXN0aW9uIG5hbWUnICsgJ2NvbW1lbnRQcmVmaXgnYC5cbiAgICogQHNlZSBkYXRhXG4gICAqIEBzZWUgUXVlc3Rpb24uaGFzQ29tbWVudFxuICAgKi9cbiAgcHVibGljIGdldCBjb21tZW50UHJlZml4KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHNldHRpbmdzLmNvbW1lbnRQcmVmaXg7XG4gIH1cbiAgcHVibGljIHNldCBjb21tZW50UHJlZml4KHZhbDogc3RyaW5nKSB7XG4gICAgc2V0dGluZ3MuY29tbWVudFByZWZpeCA9IHZhbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGN1cnJlbnRQYWdlVmFsdWUoKTogUGFnZU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY3VycmVudFBhZ2VWYWx1ZVwiLCBudWxsKTtcbiAgfVxuICBwcml2YXRlIHNldCBjdXJyZW50UGFnZVZhbHVlKHZhbDogUGFnZU1vZGVsKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY3VycmVudFBhZ2VWYWx1ZVwiLCB2YWwpO1xuICAgIHRoaXMudXBkYXRlSXNGaXJzdExhc3RQYWdlU3RhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsdWVzSGFzaDogSGFzaFRhYmxlPGFueT4gPSB7fTtcbiAgcHJpdmF0ZSB2YXJpYWJsZXNIYXNoOiBIYXNoVGFibGU8YW55PiA9IHt9O1xuICBwcml2YXRlIGVkaXRpbmdPYmpWYWx1ZTogQmFzZTtcblxuICBwcml2YXRlIGxvY2FsZVZhbHVlOiBzdHJpbmcgPSBcIlwiO1xuXG4gIHByaXZhdGUgdGV4dFByZVByb2Nlc3NvcjogVGV4dFByZVByb2Nlc3NvcjtcbiAgcHJpdmF0ZSBjb21wbGV0ZWRTdGF0ZVZhbHVlOiBzdHJpbmcgPSBcIlwiO1xuICBwcml2YXRlIGNvbXBsZXRlZFN0YXRlVGV4dFZhbHVlOiBzdHJpbmcgPSBcIlwiO1xuXG4gIHByaXZhdGUgaXNUaW1lclN0YXJ0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyNyZWdpb24gRXZlbnQgZGVjbGFyYXRpb25zXG5cbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBiZWZvcmUgdGhlIHN1cnZleSBpcyBjb21wbGV0ZWQgYW5kIHRoZSBgb25Db21wbGV0ZWAgZXZlbnQgaXMgZmlyZWQuIFlvdSBjYW4gcHJldmVudCB0aGUgc3VydmV5IGZyb20gY29tcGxldGluZyBieSBzZXR0aW5nIGBvcHRpb25zLmFsbG93Q29tcGxldGVgIHRvIGBmYWxzZWBcbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMuYWxsb3dDb21wbGV0ZWAgLSBTcGVjaWZpZXMgd2hldGhlciBhIHVzZXIgY2FuIGNvbXBsZXRlIGEgc3VydmV5LiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBgZmFsc2VgIHRvIHByZXZlbnQgdGhlIHN1cnZleSBmcm9tIGNvbXBsZXRpbmcuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cbiAgICogPGJyLz4gYG9wdGlvbnMuaXNDb21wbGV0ZU9uVHJpZ2dlcmAgLSByZXR1cm5zIHRydWUgaWYgdGhlIHN1cnZleSBpcyBjb21wbGV0aW5nIG9uIFwiY29tcGxldGVcIiB0cmlnZ2VyLlxuICAgKiBAc2VlIG9uQ29tcGxldGVcbiAgICovXG4gIHB1YmxpYyBvbkNvbXBsZXRpbmc6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGFmdGVyIGEgdXNlciBjbGlja3MgdGhlICdDb21wbGV0ZScgYnV0dG9uIGFuZCBmaW5pc2hlcyBhIHN1cnZleS4gVXNlIHRoaXMgZXZlbnQgdG8gc2VuZCB0aGUgc3VydmV5IGRhdGEgdG8geW91ciB3ZWIgc2VydmVyLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5zaG93RGF0YVNhdmluZyh0ZXh0KWAgLSBjYWxsIHRoaXMgbWV0aG9kIHRvIHNob3cgdGhhdCB0aGUgc3VydmV5IGlzIHNhdmluZyBzdXJ2ZXkgZGF0YSBvbiB5b3VyIHNlcnZlci4gVGhlIGB0ZXh0YCBpcyBhbiBvcHRpb25hbCBwYXJhbWV0ZXIgdG8gc2hvdyBhIGN1c3RvbSBtZXNzYWdlIGluc3RlYWQgb2YgZGVmYXVsdC5cbiAgICogPGJyLz4gYG9wdGlvbnMuc2hvd0RhdGFTYXZpbmdFcnJvcih0ZXh0KWAgLSBjYWxsIHRoaXMgbWV0aG9kIHRvIHNob3cgdGhhdCBhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBzYXZpbmcgdGhlIGRhdGEgb24geW91ciBzZXJ2ZXIuIElmIHlvdSB3YW50IHRvIHNob3cgYSBjdXN0b20gZXJyb3IsIHVzZSBhbiBvcHRpb25hbCBgdGV4dGAgcGFyYW1ldGVyLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5zaG93RGF0YVNhdmluZ1N1Y2Nlc3ModGV4dClgIC0gY2FsbCB0aGlzIG1ldGhvZCB0byBzaG93IHRoYXQgdGhlIGRhdGEgd2FzIHN1Y2Nlc3NmdWxseSBzYXZlZCBvbiB0aGUgc2VydmVyLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5zaG93RGF0YVNhdmluZ0NsZWFyYCAtIGNhbGwgdGhpcyBtZXRob2QgdG8gaGlkZSB0aGUgdGV4dCBhYm91dCB0aGUgc2F2aW5nIHByb2dyZXNzLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5pc0NvbXBsZXRlT25UcmlnZ2VyYCAtIHJldHVybnMgdHJ1ZSBpZiB0aGUgc3VydmV5IGlzIGNvbXBsZXRlZCBvbiBcImNvbXBsZXRlXCIgdHJpZ2dlci5cbiAgICogIEBzZWUgZGF0YVxuICAgKiBAc2VlIGNsZWFySW52aXNpYmxlVmFsdWVzXG4gICAqIEBzZWUgY29tcGxldGVMYXN0UGFnZVxuICAgKiBAc2VlIHN1cnZleVBvc3RJZFxuICAgKi9cbiAgcHVibGljIG9uQ29tcGxldGU6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGJlZm9yZSB0aGUgc3VydmV5IGlzIGdvaW5nIHRvIHByZXZpZXcgbW9kZSwgc3RhdGUgZXF1YWxzIHRvIGBwcmV2aWV3YC4gSXQgaGFwcGVucyB3aGVuIGEgdXNlciBjbGljayBvbiBcIlByZXZpZXdcIiBidXR0b24uIEl0IHNob3dzIHdoZW4gXCJzaG93UHJldmlld0JlZm9yZUNvbXBsZXRlXCIgcHJvZXBydHkgZXF1YWxzIHRvIFwic2hvd0FsbFF1ZXN0aW9uc1wiIG9yIFwic2hvd0Fuc3dlcmVkUXVlc3Rpb25zXCIuXG4gICAqIFlvdSBjYW4gcHJldmVudCBzaG93aW5nIGl0IGJ5IHNldHRpbmcgYWxsb3dTaG93UHJldmlldyB0byBgZmFsc2VgLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5hbGxvd1Nob3dQcmV2aWV3YCAtIFNwZWNpZmllcyB3aGV0aGVyIGEgdXNlciBjYW4gc2VlIGEgcHJldmlldy4gU2V0IHRoaXMgcHJvcGVydHkgdG8gYGZhbHNlYCB0byBwcmV2ZW50IGZyb20gc2hvd2luZyB0aGUgcHJldmlldy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYHRydWVgLlxuICAgKiBAc2VlIHNob3dQcmV2aWV3QmVmb3JlQ29tcGxldGVcbiAgICovXG4gIHB1YmxpYyBvblNob3dpbmdQcmV2aWV3OiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgYSB1c2VyIGNsaWNrcyB0aGUgJ0NvbXBsZXRlJyBidXR0b24uIFRoZSBldmVudCBhbGxvd3MgeW91IHRvIHNwZWNpZnkgdGhlIFVSTCBvcGVuZWQgYWZ0ZXIgY29tcGxldGluZyBhIHN1cnZleS5cbiAgICogU3BlY2lmeSB0aGUgYG5hdmlnYXRlVG9VcmxgIHByb3BlcnR5IHRvIG1ha2Ugc3VydmV5IG5hdmlnYXRlIHRvIGFub3RoZXIgdXJsLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy51cmxgIC0gU3BlY2lmaWVzIGEgVVJMIG9wZW5lZCBhZnRlciBjb21wbGV0aW5nIGEgc3VydmV5LiBTZXQgdGhpcyBwcm9wZXJ0eSB0byBhbiBlbXB0eSBzdHJpbmcgdG8gY2FuY2VsIHRoZSBuYXZpZ2F0aW9uIGFuZCBzaG93IHRoZSBjb21wbGV0ZWQgc3VydmV5IHBhZ2UuXG4gICAqIEBzZWUgbmF2aWdhdGVUb1VybFxuICAgKiBAc2VlIG5hdmlnYXRlVG9VcmxPbkNvbmRpdGlvblxuICAgKi9cbiAgcHVibGljIG9uTmF2aWdhdGVUb1VybDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8U3VydmV5TW9kZWw+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgdGhlIHN1cnZleSBjaGFuZ2VkIGl0J3Mgc3RhdGUgZnJvbSBcInN0YXJ0aW5nXCIgdG8gXCJydW5uaW5nXCIuIFRoZSBcInN0YXJ0aW5nXCIgc3RhdGUgbWVhbnMgdGhhdCBzdXJ2ZXkgc2hvd3MgdGhlIHN0YXJ0ZWQgcGFnZS5cbiAgICogVGhlIGBmaXJzdFBhZ2VJc1N0YXJ0ZWRgIHByb3BlcnR5IHNob3VsZCBiZSBzZXQgdG8gYHRydWVgLCBpZiB5b3Ugd2FudCB0byBkaXNwbGF5IGEgc3RhcnQgcGFnZSBpbiB5b3VyIHN1cnZleS4gSW4gdGhpcyBjYXNlLCBhbiBlbmQgdXNlciBzaG91bGQgY2xpY2sgdGhlIFwiU3RhcnRcIiBidXR0b24gdG8gc3RhcnQgdGhlIHN1cnZleS5cbiAgICogQHNlZSBmaXJzdFBhZ2VJc1N0YXJ0ZWRcbiAgICovXG4gIHB1YmxpYyBvblN0YXJ0ZWQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIG9uIGNsaWNraW5nIHRoZSAnTmV4dCcgYnV0dG9uIGlmIHRoZSBgc2VuZFJlc3VsdE9uUGFnZU5leHRgIGlzIHNldCB0byBgdHJ1ZWAuIFlvdSBjYW4gdXNlIGl0IHRvIHNhdmUgdGhlIGludGVybWVkaWF0ZSByZXN1bHRzLCBmb3IgZXhhbXBsZSwgaWYgeW91ciBzdXJ2ZXkgaXMgbGFyZ2UgZW5vdWdoLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiBAc2VlIHNlbmRSZXN1bHRPblBhZ2VOZXh0XG4gICAqL1xuICBwdWJsaWMgb25QYXJ0aWFsU2VuZDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8U3VydmV5TW9kZWw+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgYmVmb3JlIHRoZSBjdXJyZW50IHBhZ2UgY2hhbmdlcyB0byBhbm90aGVyIHBhZ2UuIFR5cGljYWxseSBpdCBoYXBwZW5zIHdoZW4gYSB1c2VyIGNsaWNrIHRoZSAnTmV4dCcgb3IgJ1ByZXYnIGJ1dHRvbnMuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb24ub2xkQ3VycmVudFBhZ2VgIC0gdGhlIHByZXZpb3VzIGN1cnJlbnQvYWN0aXZlIHBhZ2UuXG4gICAqIDxici8+IGBvcHRpb24ubmV3Q3VycmVudFBhZ2VgIC0gYSBuZXcgY3VycmVudC9hY3RpdmUgcGFnZS5cbiAgICogPGJyLz4gYG9wdGlvbi5hbGxvd0NoYW5naW5nYCAtIHNldCBpdCB0byBgZmFsc2VgIHRvIGRpc2FibGUgdGhlIGN1cnJlbnQgcGFnZSBjaGFuZ2luZy4gSXQgaXMgYHRydWVgIGJ5IGRlZmF1bHQuXG4gICAqIDxici8+IGBvcHRpb24uaXNOZXh0UGFnZWAgLSBjb21tb25seSBtZWFucywgdGhhdCBlbmQtdXNlciBwcmVzcyB0aGUgbmV4dCBwYWdlIGJ1dHRvbi4gSW4gZ2VuZXJhbCwgaXQgbWVhbnMgdGhhdCBvcHRpb25zLm5ld0N1cnJlbnRQYWdlIGlzIHRoZSBuZXh0IHBhZ2UgYWZ0ZXIgb3B0aW9ucy5vbGRDdXJyZW50UGFnZVxuICAgKiA8YnIvPiBgb3B0aW9uLmlzUHJldlBhZ2VgIC0gY29tbW9ubHkgbWVhbnMsIHRoYXQgZW5kLXVzZXIgcHJlc3MgdGhlIHByZXZpb3VzIHBhZ2UgYnV0dG9uLiBJbiBnZW5lcmFsLCBpdCBtZWFucyB0aGF0IG9wdGlvbnMubmV3Q3VycmVudFBhZ2UgaXMgdGhlIHByZXZpb3VzIHBhZ2UgYmVmb3JlIG9wdGlvbnMub2xkQ3VycmVudFBhZ2VcbiAgICogQHNlZSBjdXJyZW50UGFnZVxuICAgKiBAc2VlIGN1cnJlbnRQYWdlTm9cbiAgICogQHNlZSBuZXh0UGFnZVxuICAgKiBAc2VlIHByZXZQYWdlXG4gICAqIEBzZWUgY29tcGxldGVMYXN0UGFnZVxuICAgKiBAc2VlIG9uQ3VycmVudFBhZ2VDaGFuZ2VkXG4gICAqKi9cbiAgcHVibGljIG9uQ3VycmVudFBhZ2VDaGFuZ2luZzogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIGN1cnJlbnQgcGFnZSBoYXMgYmVlbiBjaGFuZ2VkIHRvIGFub3RoZXIgcGFnZS4gVHlwaWNhbGx5IGl0IGhhcHBlbnMgd2hlbiBhIHVzZXIgY2xpY2sgb24gJ05leHQnIG9yICdQcmV2JyBidXR0b25zLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9uLm9sZEN1cnJlbnRQYWdlYCAtIGEgcHJldmlvdXMgY3VycmVudC9hY3RpdmUgcGFnZS5cbiAgICogPGJyLz4gYG9wdGlvbi5uZXdDdXJyZW50UGFnZWAgLSBhIG5ldyBjdXJyZW50L2FjdGl2ZSBwYWdlLlxuICAgKiA8YnIvPiBgb3B0aW9uLmlzTmV4dFBhZ2VgIC0gY29tbW9ubHkgbWVhbnMsIHRoYXQgZW5kLXVzZXIgcHJlc3MgdGhlIG5leHQgcGFnZSBidXR0b24uIEluIGdlbmVyYWwsIGl0IG1lYW5zIHRoYXQgb3B0aW9ucy5uZXdDdXJyZW50UGFnZSBpcyB0aGUgbmV4dCBwYWdlIGFmdGVyIG9wdGlvbnMub2xkQ3VycmVudFBhZ2VcbiAgICogPGJyLz4gYG9wdGlvbi5pc1ByZXZQYWdlYCAtIGNvbW1vbmx5IG1lYW5zLCB0aGF0IGVuZC11c2VyIHByZXNzIHRoZSBwcmV2aW91cyBwYWdlIGJ1dHRvbi4gSW4gZ2VuZXJhbCwgaXQgbWVhbnMgdGhhdCBvcHRpb25zLm5ld0N1cnJlbnRQYWdlIGlzIHRoZSBwcmV2aW91cyBwYWdlIGJlZm9yZSBvcHRpb25zLm9sZEN1cnJlbnRQYWdlXG4gICAqIEBzZWUgY3VycmVudFBhZ2VcbiAgICogQHNlZSBjdXJyZW50UGFnZU5vXG4gICAqIEBzZWUgbmV4dFBhZ2VcbiAgICogQHNlZSBwcmV2UGFnZVxuICAgKiBAc2VlIGNvbXBsZXRlTGFzdFBhZ2VcbiAgICogQHNlZSBvbkN1cnJlbnRQYWdlQ2hhbmdpbmdcbiAgICovXG4gIHB1YmxpYyBvbkN1cnJlbnRQYWdlQ2hhbmdlZDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGJlZm9yZSB0aGUgcXVlc3Rpb24gdmFsdWUgKGFuc3dlcikgaXMgY2hhbmdlZC4gSXQgY2FuIGJlIGRvbmUgdmlhIFVJIGJ5IGEgdXNlciBvciBwcm9ncmFtbWF0aWNhbGx5IG9uIGNhbGxpbmcgdGhlIGBzZXRWYWx1ZWAgbWV0aG9kLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5uYW1lYCAtIHRoZSB2YWx1ZSBuYW1lIHRoYXQgaGFzIGJlaW5nIGNoYW5nZWQuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIGEgcXVlc3Rpb24gd2hpY2ggYHF1ZXN0aW9uLm5hbWVgIGVxdWFscyB0byB0aGUgdmFsdWUgbmFtZS4gSWYgdGhlcmUgYXJlIHNldmVyYWwgcXVlc3Rpb25zIHdpdGggdGhlIHNhbWUgbmFtZSwgdGhlIGZpcnN0IHF1ZXN0aW9uIGlzIHVzZWQuIElmIHRoZXJlIGlzIG5vIHN1Y2ggcXVlc3Rpb25zLCB0aGUgYG9wdGlvbnMucXVlc3Rpb25gIGlzIG51bGwuXG4gICAqIDxici8+IGBvcHRpb25zLm9sZFZhbHVlYCAtIGFuIG9sZCwgcHJldmlvdXMgdmFsdWUuXG4gICAqIDxici8+IGBvcHRpb25zLnZhbHVlYCAtIGEgbmV3IHZhbHVlLiBZb3UgY2FuIGNoYW5nZSBpdC5cbiAgICogQHNlZSBzZXRWYWx1ZVxuICAgKiBAc2VlIG9uVmFsdWVDaGFuZ2VkXG4gICAqL1xuICBwdWJsaWMgb25WYWx1ZUNoYW5naW5nOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSBxdWVzdGlvbiB2YWx1ZSAoaS5lLiwgYW5zd2VyKSBoYXMgYmVlbiBjaGFuZ2VkLiBUaGUgcXVlc3Rpb24gdmFsdWUgY2FuIGJlIGNoYW5nZWQgaW4gVUkgKGJ5IGEgdXNlcikgb3IgcHJvZ3JhbW1hdGljYWxseSAob24gY2FsbGluZyBgc2V0VmFsdWVgIG1ldGhvZCkuXG4gICAqIFVzZSB0aGUgYG9uRHluYW1pY1BhbmVsSXRlbVZhbHVlQ2hhbmdlZGAgYW5kIGBvbk1hdHJpeENlbGxWYWx1ZUNoYW5nZWRgIGV2ZW50cyB0byBoYW5kbGUgY2hhbmdlcyBpbiBhIHF1ZXN0aW9uIGluIHRoZSBQYW5lbCBEeW5hbWljIGFuZCBhIGNlbGwgcXVlc3Rpb24gaW4gbWF0cmljZXMuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLm5hbWVgIC0gdGhlIHZhbHVlIG5hbWUgdGhhdCBoYXMgYmVlbiBjaGFuZ2VkLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBhIHF1ZXN0aW9uIHdoaWNoIGBxdWVzdGlvbi5uYW1lYCBlcXVhbHMgdG8gdGhlIHZhbHVlIG5hbWUuIElmIHRoZXJlIGFyZSBzZXZlcmFsIHF1ZXN0aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWUsIHRoZSBmaXJzdCBxdWVzdGlvbiBpcyB1c2VkLiBJZiB0aGVyZSBpcyBubyBzdWNoIHF1ZXN0aW9ucywgdGhlIGBvcHRpb25zLnF1ZXN0aW9uYCBpcyBgbnVsbGAuXG4gICAqIDxici8+IGBvcHRpb25zLnZhbHVlYCAtIGEgbmV3IHZhbHVlLlxuICAgKiBAc2VlIHNldFZhbHVlXG4gICAqIEBzZWUgb25WYWx1ZUNoYW5naW5nXG4gICAqIEBzZWUgb25EeW5hbWljUGFuZWxJdGVtVmFsdWVDaGFuZ2VkXG4gICAqIEBzZWUgb25NYXRyaXhDZWxsVmFsdWVDaGFuZ2VkXG4gICAqL1xuICBwdWJsaWMgb25WYWx1ZUNoYW5nZWQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIHdoZW4gc2V0VmFyaWFibGUgZnVuY3Rpb24gaXMgY2FsbGVkLiBJdCBjYW4gYmUgY2FsbGVkIG9uIGNoYW5naW5nIGEgY2FsY3VsYXRlZCB2YWx1ZS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMubmFtZWAgLSB0aGUgdmFyaWFibGUgbmFtZSB0aGF0IGhhcyBiZWVuIGNoYW5nZWQuXG4gICAqIDxici8+IGBvcHRpb25zLnZhbHVlYCAtIGEgbmV3IHZhbHVlLlxuICAgKiBAc2VlIHNldFZhcmlhYmxlXG4gICAqIEBzZWUgb25WYWx1ZUNoYW5nZWRcbiAgICogQHNlZSBjYWxjdWxhdGVkVmFsdWVzXG4gICAqL1xuICBwdWJsaWMgb25WYXJpYWJsZUNoYW5nZWQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIHdoZW4gYSBxdWVzdGlvbiB2aXNpYmlsaXR5IGhhcyBiZWVuIGNoYW5nZWQuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIGEgcXVlc3Rpb24gd2hpY2ggdmlzaWJpbGl0eSBoYXMgYmVlbiBjaGFuZ2VkLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5uYW1lYCAtIGEgcXVlc3Rpb24gbmFtZS5cbiAgICogPGJyLz4gYG9wdGlvbnMudmlzaWJsZWAgLSBhIHF1ZXN0aW9uIGB2aXNpYmxlYCBib29sZWFuIHZhbHVlLlxuICAgKiBAc2VlIFF1ZXN0aW9uLnZpc2liaWxlXG4gICAqIEBzZWUgUXVlc3Rpb24udmlzaWJpbGVJZlxuICAgKi9cbiAgcHVibGljIG9uVmlzaWJsZUNoYW5nZWQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiBjaGFuZ2luZyBhIHBhZ2UgdmlzaWJpbGl0eS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucGFnZWAgLSBhIHBhZ2Ugd2hpY2ggdmlzaWJpbGl0eSBoYXMgYmVlbiBjaGFuZ2VkLlxuICAgKiA8YnIvPiBgb3B0aW9ucy52aXNpYmxlYCAtIGEgcGFnZSBgdmlzaWJsZWAgYm9vbGVhbiB2YWx1ZS5cbiAgICogQHNlZSBQYWdlTW9kZWwudmlzaWJpbGVcbiAgICogQHNlZSBQYWdlTW9kZWwudmlzaWJpbGVJZlxuICAgKi9cbiAgcHVibGljIG9uUGFnZVZpc2libGVDaGFuZ2VkOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgb24gY2hhbmdpbmcgYSBwYW5lbCB2aXNpYmlsaXR5LlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5wYW5lbGAgLSBhIHBhbmVsIHdoaWNoIHZpc2liaWxpdHkgaGFzIGJlZW4gY2hhbmdlZC5cbiAgICogPGJyLz4gYG9wdGlvbnMudmlzaWJsZWAgLSBhIHBhbmVsIGB2aXNpYmxlYCBib29sZWFuIHZhbHVlLlxuICAgKiBAc2VlIFBhbmVsTW9kZWwudmlzaWJpbGVcbiAgICogQHNlZSBQYW5lbE1vZGVsLnZpc2liaWxlSWZcbiAgICovXG4gIHB1YmxpYyBvblBhbmVsVmlzaWJsZUNoYW5nZWQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiBjcmVhdGluZyBhIG5ldyBxdWVzdGlvbi5cbiAgICogVW5saWtlIHRoZSBvblF1ZXN0aW9uQWRkZWQgZXZlbnQsIHRoaXMgZXZlbnQgY2FsbHMgZm9yIGFsbCBxdWVzdGlvbiBjcmVhdGVkIGluIHN1cnZleSBpbmNsdWRpbmcgaW5zaWRlOiBhIHBhZ2UsIHBhbmVsLCBtYXRyaXggY2VsbCwgZHluYW1pYyBwYW5lbCBhbmQgbXVsdGlwbGUgdGV4dC5cbiAgICogb3IgaW5zaWRlIGEgbWF0cml4IGNlbGwgb3IgaXQgY2FuIGJlIGEgdGV4dCBxdWVzdGlvbiBpbiBtdWx0aXBsZSB0ZXh0IGl0ZW1zIG9yIGluc2lkZSBhIHBhbmVsIG9mIGEgcGFuZWwgZHluYW1pYy5cbiAgICogWW91IGNhbiB1c2UgdGhpcyBldmVudCB0byBzZXQgdXAgcHJvcGVydGllcyB0byBhIHF1ZXN0aW9uIGJhc2VkIG9uIGl0J3MgdHlwZSBmb3IgYWxsIHF1ZXN0aW9ucywgcmVnYXJkbGVzcyB3aGVyZSB0aGV5IGFyZSBsb2NhdGVkLCBvbiB0aGUgcGFnZSBvciBpbnNpZGUgYSBtYXRyaXggY2VsbC5cbiAgICogUGxlYXNlIG5vdGU6IElmIHlvdSB3YW50IHRvIHVzZSB0aGlzIGV2ZW50IGZvciBxdWVzdGlvbnMgbG9hZGVkIGZyb20gSlNPTiB0aGVuIHlvdSBoYXZlIHRvIGNyZWF0ZSBzdXJ2ZXkgd2l0aCBlbXB0eS9udWxsIEpTT04gcGFyYW1ldGVyLCBhc3NpZ24gdGhlIGV2ZW50IGFuZCBjYWxsIHN1cnZleS5mcm9tSlNPTih5b3VySlNPTikgZnVuY3Rpb24uXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIGEgbmV3bHkgY3JlYXRlZCBxdWVzdGlvbiBvYmplY3QuXG4gICAqIEBzZWUgUXVlc3Rpb25cbiAgICogQHNlZSBvblF1ZXN0aW9uQWRkZWRcbiAgICovXG4gIHB1YmxpYyBvblF1ZXN0aW9uQ3JlYXRlZDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIG9uIGFkZGluZyBhIG5ldyBxdWVzdGlvbiBpbnRvIHN1cnZleS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBuZXdseSBhZGRlZCBxdWVzdGlvbiBvYmplY3QuXG4gICAqIDxici8+IGBvcHRpb25zLm5hbWVgIC0gYSBxdWVzdGlvbiBuYW1lLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5pbmRleGAgLSBhbiBpbmRleCBvZiB0aGUgcXVlc3Rpb24gaW4gdGhlIGNvbnRhaW5lciAocGFnZSBvciBwYW5lbCkuXG4gICAqIDxici8+IGBvcHRpb25zLnBhcmVudFBhbmVsYCAtIGEgY29udGFpbmVyIHdoZXJlIGEgbmV3IHF1ZXN0aW9uIGlzIGxvY2F0ZWQuIEl0IGNhbiBiZSBhIHBhZ2Ugb3IgcGFuZWwuXG4gICAqIDxici8+IGBvcHRpb25zLnJvb3RQYW5lbGAgLSB0eXBpY2FsbHksIGl0IGlzIGEgcGFnZS5cbiAgICogQHNlZSBRdWVzdGlvblxuICAgKiBAc2VlIG9uUXVlc3Rpb25DcmVhdGVkXG4gICAqL1xuICBwdWJsaWMgb25RdWVzdGlvbkFkZGVkOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiByZW1vdmluZyBhIHF1ZXN0aW9uIGZyb20gc3VydmV5LlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBhIHJlbW92ZWQgcXVlc3Rpb24gb2JqZWN0LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5uYW1lYCAtIGEgcXVlc3Rpb24gbmFtZS5cbiAgICogQHNlZSBRdWVzdGlvblxuICAgKi9cbiAgcHVibGljIG9uUXVlc3Rpb25SZW1vdmVkOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgb24gYWRkaW5nIGEgcGFuZWwgaW50byBzdXJ2ZXkuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnBhbmVsYCAtIGEgbmV3bHkgYWRkZWQgcGFuZWwgb2JqZWN0LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5uYW1lYCAtIGEgcGFuZWwgbmFtZS5cbiAgICogPGJyLz4gYG9wdGlvbnMuaW5kZXhgIC0gYW4gaW5kZXggb2YgdGhlIHBhbmVsIGluIHRoZSBjb250YWluZXIgKGEgcGFnZSBvciBwYW5lbCkuXG4gICAqIDxici8+IGBvcHRpb25zLnBhcmVudFBhbmVsYCAtIGEgY29udGFpbmVyIChhIHBhZ2Ugb3IgcGFuZWwpIHdoZXJlIGEgbmV3IHBhbmVsIGlzIGxvY2F0ZWQuXG4gICAqIDxici8+IGBvcHRpb25zLnJvb3RQYW5lbGAgLSBhIHJvb3QgY29udGFpbmVyLCB0eXBpY2FsbHkgaXQgaXMgYSBwYWdlLlxuICAgKiBAc2VlIFBhbmVsTW9kZWxcbiAgICovXG4gIHB1YmxpYyBvblBhbmVsQWRkZWQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIG9uIHJlbW92aW5nIGEgcGFuZWwgZnJvbSBzdXJ2ZXkuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnBhbmVsYCAtIGEgcmVtb3ZlZCBwYW5lbCBvYmplY3QuXG4gICAqIDxici8+IGBvcHRpb25zLm5hbWVgIC0gYSBwYW5lbCBuYW1lLlxuICAgKiBAc2VlIFBhbmVsTW9kZWxcbiAgICovXG4gIHB1YmxpYyBvblBhbmVsUmVtb3ZlZDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8U3VydmV5TW9kZWw+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgb24gYWRkaW5nIGEgcGFnZSBpbnRvIHN1cnZleS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucGFnZWAgLSBhIG5ld2x5IGFkZGVkIGBwYW5lbGAgb2JqZWN0LlxuICAgKiBAc2VlIFBhbmVsTW9kZWxcbiAgICovXG4gIHB1YmxpYyBvblBhZ2VBZGRlZDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8U3VydmV5TW9kZWw+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgb24gdmFsaWRhdGluZyB2YWx1ZSBpbiBhIHF1ZXN0aW9uLiBZb3UgY2FuIHNwZWNpZnkgYSBjdXN0b20gZXJyb3IgbWVzc2FnZSB1c2luZyBgb3B0aW9ucy5lcnJvcmAuIFRoZSBzdXJ2ZXkgYmxvY2tzIGNvbXBsZXRpbmcgdGhlIHN1cnZleSBvciBnb2luZyB0byB0aGUgbmV4dCBwYWdlIHdoZW4gdGhlIGVycm9yIG1lc3NhZ2VzIGFyZSBkaXNwbGF5ZWQuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIGEgdmFsaWRhdGVkIHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5uYW1lYCAtIGEgcXVlc3Rpb24gbmFtZS5cbiAgICogPGJyLz4gYG9wdGlvbnMudmFsdWVgIC0gdGhlIGN1cnJlbnQgcXVlc3Rpb24gdmFsdWUgKGFuc3dlcikuXG4gICAqIDxici8+IGBvcHRpb25zLmVycm9yYCAtIGFuIGVycm9yIHN0cmluZy4gSXQgaXMgZW1wdHkgYnkgZGVmYXVsdC5cbiAgICogQHNlZSBvblNlcnZlclZhbGlkYXRlUXVlc3Rpb25zXG4gICAqIEBzZWUgb25TZXR0aW5nUXVlc3Rpb25FcnJvcnNcbiAgICovXG4gIHB1YmxpYyBvblZhbGlkYXRlUXVlc3Rpb246IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBiZWZvcmUgZXJyb3JzIGFyZSBhc3NpZ25lZCB0byBhIHF1ZXN0aW9uLiBZb3UgbWF5IGFkZC9yZW1vdmUvbW9kaWZ5IGVycm9ycyBmb3IgYSBxdWVzdGlvbi5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSB2YWxpZGF0ZWQgcXVlc3Rpb24uXG4gICAqIDxici8+IGBvcHRpb25zLmVycm9yc2AgLSB0aGUgbGlzdCBvZiBlcnJvcnMuIFRoZSBsaXN0IGlzIGVtcHR5IGJ5IGRlZmF1bHQgYW5kIHJlbWFpbnMgZW1wdHkgaWYgYSB2YWxpZGF0ZWQgcXVlc3Rpb24gaGFzIG5vIGVycm9ycy5cbiAgICogQHNlZSBvblZhbGlkYXRlUXVlc3Rpb25cbiAgICovXG4gIHB1YmxpYyBvblNldHRpbmdRdWVzdGlvbkVycm9yczogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVXNlIHRoaXMgZXZlbnQgdG8gdmFsaWRhdGUgZGF0YSBvbiB5b3VyIHNlcnZlci5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMuZGF0YWAgLSB0aGUgdmFsdWVzIG9mIGFsbCBub24tZW1wdHkgcXVlc3Rpb25zIG9uIHRoZSBjdXJyZW50IHBhZ2UuIFlvdSBjYW4gZ2V0IGEgcXVlc3Rpb24gdmFsdWUgYXMgYG9wdGlvbnMuZGF0YVtcIm15UXVlc3Rpb25OYW1lXCJdYC5cbiAgICogPGJyLz4gYG9wdGlvbnMuZXJyb3JzYCAtIHNldCB5b3VyIGVycm9ycyB0byB0aGlzIG9iamVjdCBhczogYG9wdGlvbnMuZXJyb3JzW1wibXlRdWVzdGlvbk5hbWVcIl0gPSBcIkVycm9yIHRleHRcIjtgLiBJdCB3aWxsIGJlIHNob3duIGFzIGEgcXVlc3Rpb24gZXJyb3IuXG4gICAqIDxici8+IGBvcHRpb25zLmNvbXBsZXRlKClgIC0gY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHRlbGwgc3VydmV5IHRoYXQgeW91ciBzZXJ2ZXIgY2FsbGJhY2sgaGFzIGJlZW4gcHJvY2Vzc2VkLlxuICAgKiBAc2VlIG9uVmFsaWRhdGVRdWVzdGlvblxuICAgKiBAc2VlIG9uVmFsaWRhdGVQYW5lbFxuICAgKi9cbiAgcHVibGljIG9uU2VydmVyVmFsaWRhdGVRdWVzdGlvbnM6IGFueSA9IHRoaXMuYWRkRXZlbnQ8U3VydmV5TW9kZWw+KCk7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBldmVudCB0byBtb2RpZnkgdGhlIEhUTUwgYmVmb3JlIHJlbmRlcmluZywgZm9yIGV4YW1wbGUgSFRNTCBvbiBhIGNvbXBsZXRlZCBwYWdlLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5odG1sYCAtIGFuIEhUTUwgdGhhdCB5b3UgbWF5IGNoYW5nZSBiZWZvcmUgdGV4dCBwcm9jZXNzaW5nIGFuZCB0aGVuIHJlbmRlcmluZy5cbiAgICogQHNlZSBjb21wbGV0ZWRIdG1sXG4gICAqIEBzZWUgbG9hZGluZ0h0bWxcbiAgICogQHNlZSBRdWVzdGlvbkh0bWxNb2RlbC5odG1sXG4gICAqL1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIG9uIHZhbGlkYXRpbmcgYSBwYW5lbC4gU2V0IHlvdXIgZXJyb3IgdG8gYG9wdGlvbnMuZXJyb3JgIGFuZCBzdXJ2ZXkgd2lsbCBzaG93IHRoZSBlcnJvciBmb3IgdGhlIHBhbmVsIGFuZCBibG9jayBjb21wbGV0aW5nIHRoZSBzdXJ2ZXkgb3IgZ29pbmcgdG8gdGhlIG5leHQgcGFnZS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMubmFtZWAgLSBhIHBhbmVsIG5hbWUuXG4gICAqIDxici8+IGBvcHRpb25zLmVycm9yYCAtIGFuIGVycm9yIHN0cmluZy4gSXQgaXMgZW1wdHkgYnkgZGVmYXVsdC5cbiAgICogQHNlZSBvblZhbGlkYXRlUXVlc3Rpb25cbiAgICovXG4gIHB1YmxpYyBvblZhbGlkYXRlUGFuZWw6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuICAvKipcbiAgICogVXNlIHRoZSBldmVudCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgZXJyb3IgdGV4dC5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMudGV4dGAgLSBhbiBlcnJvciB0ZXh0LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5lcnJvcmAgLSBhbiBpbnN0YW5jZSBvZiB0aGUgYFN1cnZleUVycm9yYCBvYmplY3QuXG4gICAqIDxici8+IGBvcHRpb25zLm5hbWVgIC0gdGhlIGVycm9yIG5hbWUuIFRoZSBmb2xsb3dpbmcgZXJyb3IgbmFtZXMgYXJlIGF2YWlsYWJsZTpcbiAgICogcmVxdWlyZWQsIHJlcXVpcmVvbmVhbnN3ZXIsIHJlcXVpcmVudW1lcmljLCBleGNlZWRzaXplLCB3ZWJyZXF1ZXN0LCB3ZWJyZXF1ZXN0ZW1wdHksIG90aGVyZW1wdHksXG4gICAqIHVwbG9hZGluZ2ZpbGUsIHJlcXVpcmVkaW5hbGxyb3dzZXJyb3IsIG1pbnJvd2NvdW50ZXJyb3IsIGtleWR1cGxpY2F0aW9uZXJyb3IsIGN1c3RvbVxuICAgKi9cbiAgcHVibGljIG9uRXJyb3JDdXN0b21UZXh0OiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBVc2UgdGhlIHRoaXMgZXZlbnQgdG8gYmUgbm90aWZpZWQgd2hlbiB0aGUgc3VydmV5IGZpbmlzaGVkIHZhbGlkYXRlIHF1ZXN0aW9ucyBvbiB0aGUgY3VycmVudCBwYWdlLiBJdCBjb21tb25seSBoYXBwZW5zIHdoZW4gYSB1c2VyIHRyeSB0byBnbyB0byB0aGUgbmV4dCBwYWdlIG9yIGNvbXBsZXRlIHRoZSBzdXJ2ZXlcbiAgICogb3B0aW9ucy5xdWVzdGlvbnMgLSB0aGUgbGlzdCBvZiBxdWVzdGlvbnMgdGhhdCBoYXZlIGVycm9yc1xuICAgKiBvcHRpb25zLmVycm9ycyAtIHRoZSBsaXN0IG9mIGVycm9yc1xuICAgKiBvcHRpb25zLnBhZ2UgLSB0aGUgcGFnZSB3aGVyZSBxdWVzdGlvbihzKSBhcmUgbG9jYXRlZFxuICAgKi9cbiAgcHVibGljIG9uVmFsaWRhdGVkRXJyb3JzT25DdXJyZW50UGFnZTogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVXNlIHRoaXMgZXZlbnQgdG8gbW9kaWZ5IHRoZSBIVE1MIGNvbnRlbnQgYmVmb3JlIHJlbmRlcmluZywgZm9yIGV4YW1wbGUgYGNvbXBsZXRlSHRtbGAgb3IgYGxvYWRpbmdIdG1sYC5cbiAgICogYG9wdGlvbnMuaHRtbGAgLSBzcGVjaWZpZXMgdGhlIG1vZGlmaWVkIEhUTUwgY29udGVudC5cbiAgICogQHNlZSBjb21wbGV0ZWRIdG1sXG4gICAqIEBzZWUgbG9hZGluZ0h0bWxcbiAgICovXG4gIHB1YmxpYyBvblByb2Nlc3NIdG1sOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIGNoYW5nZSB0aGUgcXVlc3Rpb24gdGl0bGUgaW4gY29kZS4gSWYgeW91IHdhbnQgdG8gcmVtb3ZlIHF1ZXN0aW9uIG51bWJlcmluZyB0aGVuIHNldCBzaG93UXVlc3Rpb25OdW1iZXJzIHRvIFwib2ZmXCIuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnRpdGxlYCAtIGEgY2FsY3VsYXRlZCBxdWVzdGlvbiB0aXRsZSwgYmFzZWQgb24gcXVlc3Rpb24gYHRpdGxlYCwgYG5hbWVgLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBhIHF1ZXN0aW9uIG9iamVjdC5cbiAgICogQHNlZSBzaG93UXVlc3Rpb25OdW1iZXJzXG4gICAqIEBzZWUgcmVxdWlyZWRUZXh0XG4gICAqL1xuICBwdWJsaWMgb25HZXRRdWVzdGlvblRpdGxlOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBldmVudCB0byBjaGFuZ2UgdGhlIGVsZW1lbnQgdGl0bGUgdGFnIG5hbWUgdGhhdCByZW5kZXJzIGJ5IGRlZmF1bHQuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLmVsZW1lbnRgIC0gYW4gZWxlbWVudCAocXVlc3Rpb24sIHBhbmVsLCBwYWdlIGFuZCBzdXJ2ZXkpIHRoYXQgU3VydmV5SlMgaXMgZ29pbmcgdG8gcmVuZGVyLlxuICAgKiA8YnIvPiBgb3B0aW9ucy50YWdOYW1lYCAtIGFuIGVsZW1lbnQgdGl0bGUgdGFnTmFtZSB0aGF0IGFyZSB1c2VkIHRvIHJlbmRlciBhIHRpdGxlLiBZb3UgY2FuIGNoYW5nZSBpdCBmcm9tIHRoZSBkZWZhdWx0IHZhbHVlLlxuICAgKiBAc2VlIHNob3dRdWVzdGlvbk51bWJlcnNcbiAgICogQHNlZSByZXF1aXJlZFRleHRcbiAgICovXG4gIHB1YmxpYyBvbkdldFRpdGxlVGFnTmFtZTogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVXNlIHRoaXMgZXZlbnQgdG8gY2hhbmdlIHRoZSBxdWVzdGlvbiBubyBpbiBjb2RlLiBJZiB5b3Ugd2FudCB0byByZW1vdmUgcXVlc3Rpb24gbnVtYmVyaW5nIHRoZW4gc2V0IHNob3dRdWVzdGlvbk51bWJlcnMgdG8gXCJvZmZcIi5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMubm9gIC0gYSBjYWxjdWxhdGVkIHF1ZXN0aW9uIG5vLCBiYXNlZCBvbiBxdWVzdGlvbiBgdmlzaWJsZUluZGV4YCwgc3VydmV5IGAucXVlc3Rpb25TdGFydEluZGV4YCBwcm9wZXJ0aWVzLiBZb3UgY2FuIGNoYW5nZSBpdC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBxdWVzdGlvbiBvYmplY3QuXG4gICAqIEBzZWUgc2hvd1F1ZXN0aW9uTnVtYmVyc1xuICAgKiBAc2VlIHF1ZXN0aW9uU3RhcnRJbmRleFxuICAgKi9cbiAgcHVibGljIG9uR2V0UXVlc3Rpb25ObzogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8U3VydmV5TW9kZWw+KCk7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBldmVudCB0byBjaGFuZ2UgdGhlIHByb2dyZXNzIHRleHQgaW4gY29kZS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMudGV4dGAgLSBhIHByb2dyZXNzIHRleHQsIHRoYXQgU3VydmV5SlMgd2lsbCByZW5kZXIgaW4gcHJvZ3Jlc3MgYmFyLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbkNvdW50YCAtIGEgbnVtYmVyIG9mIHF1ZXN0aW9ucyB0aGF0IGhhdmUgaW5wdXQocykuIFdlIGRvIG5vdCBjb3VudCBodG1sIG9yIGV4cHJlc3Npb24gcXVlc3Rpb25zXG4gICAqIDxici8+IGBvcHRpb25zLmFuc3dlcmVkUXVlc3Rpb25Db3VudGAgLSBhIG51bWJlciBvZiBxdWVzdGlvbnMgdGhhdCBoYXZlIGlucHV0KHMpIGFuZCBhbiB1c2VyIGhhcyBhbnN3ZXJlZC5cbiAgICogPGJyLz4gYG9wdGlvbnMucmVxdWlyZWRRdWVzdGlvbkNvdW50YCAtIGEgbnVtYmVyIG9mIHJlcXVpcmVkIHF1ZXN0aW9ucyB0aGF0IGhhdmUgaW5wdXQocykuIFdlIGRvIG5vdCBjb3VudCBodG1sIG9yIGV4cHJlc3Npb24gcXVlc3Rpb25zXG4gICAqIDxici8+IGBvcHRpb25zLnJlcXVpcmVkQW5zd2VyZWRRdWVzdGlvbkNvdW50YCAtIGEgbnVtYmVyIG9mIHJlcXVpcmVkIHF1ZXN0aW9ucyB0aGF0IGhhdmUgaW5wdXQocykgYW5kIGFuIHVzZXIgaGFzIGFuc3dlcmVkLlxuICAgKiAgQHNlZSBwcm9ncmVzc0JhclR5cGVcbiAgICovXG4gIHB1YmxpYyBvblByb2dyZXNzVGV4dDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8U3VydmV5TW9kZWw+KCk7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBldmVudCB0byBwcm9jZXNzIHRoZSBtYXJrZG93biB0ZXh0LlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5lbGVtZW50YCAtIFN1cnZleUpTIGVsZW1lbnQgKGEgcXVlc3Rpb24sIHBhbmVsLCBwYWdlLCBvciBzdXJ2ZXkpIHdoZXJlIHRoZSBzdHJpbmcgaXMgZ29pbmcgdG8gYmUgcmVuZGVyZWQuXG4gICAqIDxici8+IGBvcHRpb25zLm5hbWVgIC0gYSBwcm9wZXJ0eSBuYW1lIGlzIGdvaW5nIHRvIGJlIHJlbmRlcmVkLlxuICAgKiA8YnIvPiBgb3B0aW9ucy50ZXh0YCAtIGEgdGV4dCB0aGF0IGlzIGdvaW5nIHRvIGJlIHJlbmRlcmVkLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5odG1sYCAtIGFuIEhUTUwgY29udGVudC4gSXQgaXMgYG51bGxgIGJ5IGRlZmF1bHQuIFVzZSB0aGlzIHByb3BlcnR5IHRvIHNwZWNpZnkgdGhlIEhUTUwgY29udGVudCByZW5kZXJlZCBpbnN0ZWFkIG9mIGBvcHRpb25zLnRleHRgLlxuICAgKi9cbiAgcHVibGljIG9uVGV4dE1hcmtkb3duOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIHNwZWNpdHkgcmVuZGVyIGNvbXBvbmVudCBuYW1lIHVzZWQgZm9yIHRleHQgcmVuZGVyaW5nLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5lbGVtZW50YCAtIFN1cnZleUpTIGVsZW1lbnQgKGEgcXVlc3Rpb24sIHBhbmVsLCBwYWdlLCBvciBzdXJ2ZXkpIHdoZXJlIHRoZSBzdHJpbmcgaXMgZ29pbmcgdG8gYmUgcmVuZGVyZWQuXG4gICAqIDxici8+IGBvcHRpb25zLm5hbWVgIC0gYSBwcm9wZXJ0eSBuYW1lIGlzIGdvaW5nIHRvIGJlIHJlbmRlcmVkLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5yZW5kZXJBc2AgLSBhIGNvbXBvbmVudCBuYW1lIHVzZWQgZm9yIHRleHQgcmVuZGVyaW5nLlxuICAgKi9cbiAgcHVibGljIG9uVGV4dFJlbmRlckFzOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBmaXJlcyB3aGVuIGl0IGdldHMgcmVzcG9uc2UgZnJvbSB0aGUgW2FwaS5zdXJ2ZXlqcy5pb10oaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8pIHNlcnZpY2Ugb24gc2F2aW5nIHN1cnZleSByZXN1bHRzLiBVc2UgaXQgdG8gZmluZCBvdXQgaWYgdGhlIHJlc3VsdHMgaGF2ZSBiZWVuIHNhdmVkIHN1Y2Nlc3NmdWxseS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMuc3VjY2Vzc2AgLSBpdCBpcyBgdHJ1ZWAgaWYgdGhlIHJlc3VsdHMgaGFzIGJlZW4gc2VudCB0byB0aGUgc2VydmljZSBzdWNjZXNzZnVsbHkuXG4gICAqIDxici8+IGBvcHRpb25zLnJlc3BvbnNlYCAtIGEgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmljZS5cbiAgICovXG4gIHB1YmxpYyBvblNlbmRSZXN1bHQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuICAvKipcbiAgICogVXNlIGl0IHRvIGdldCByZXN1bHRzIGFmdGVyIGNhbGxpbmcgdGhlIGBnZXRSZXN1bHRgIG1ldGhvZC4gSXQgcmV0dXJucyBhIHNpbXBsZSBhbmFseXRpY3MgZnJvbSBbYXBpLnN1cnZleWpzLmlvXShodHRwczovL2FwaS5zdXJ2ZXlqcy5pbykgc2VydmljZS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMuc3VjY2Vzc2AgLSBpdCBpcyBgdHJ1ZWAgaWYgdGhlIHJlc3VsdHMgd2VyZSBnb3QgZnJvbSB0aGUgc2VydmljZSBzdWNjZXNzZnVsbHkuXG4gICAqIDxici8+IGBvcHRpb25zLmRhdGFgIC0gdGhlIG9iamVjdCBge0Fuc3dlcnNDb3VudCwgUXVlc3Rpb25SZXN1bHQgOiB7fSB9YC4gYEFuc3dlcnNDb3VudGAgaXMgdGhlIG51bWJlciBvZiBwb3N0ZWQgc3VydmV5IHJlc3VsdHMuIGBRdWVzdGlvblJlc3VsdGAgaXMgYW4gb2JqZWN0IHdpdGggYWxsIHBvc3NpYmxlIHVuaXF1ZSBhbnN3ZXJzIHRvIHRoZSBxdWVzdGlvbiBhbmQgbnVtYmVyIG9mIHRoZXNlIGFuc3dlcnMuXG4gICAqIDxici8+IGBvcHRpb25zLmRhdGFMaXN0YCAtIGFuIGFycmF5IG9mIG9iamVjdHMgYHtuYW1lLCB2YWx1ZX1gLCB3aGVyZSBgbmFtZWAgaXMgYSB1bmlxdWUgdmFsdWUvYW5zd2VyIHRvIHRoZSBxdWVzdGlvbiBhbmQgYHZhbHVlYCBpcyBhIG51bWJlci9jb3VudCBvZiBzdWNoIGFuc3dlcnMuXG4gICAqIDxici8+IGBvcHRpb25zLnJlc3BvbnNlYCAtIHRoZSBzZXJ2ZXIgcmVzcG9uc2UuXG4gICAqIEBzZWUgZ2V0UmVzdWx0XG4gICAqL1xuICBwdWJsaWMgb25HZXRSZXN1bHQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIG9uIHVwbG9hZGluZyB0aGUgZmlsZSBpbiBRdWVzdGlvbkZpbGUgd2hlbiBgc3RvcmVEYXRhQXNUZXh0YCBpcyBzZXQgdG8gYGZhbHNlYC4gVXNlIHRoaXMgZXZlbnQgdG8gY2hhbmdlIHRoZSB1cGxvYWRlZCBmaWxlIG5hbWUgb3IgdG8gcHJldmVudCBhIHBhcnRpY3VsYXIgZmlsZSBmcm9tIGJlaW5nIHVwbG9hZGVkLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSB0aGUgZmlsZSBxdWVzdGlvbiBpbnN0YW5jZS5cbiAgICogPGJyLz4gYG9wdGlvbnMubmFtZWAgLSB0aGUgcXVlc3Rpb24gbmFtZS5cbiAgICogPGJyLz4gYG9wdGlvbnMuZmlsZXNgIC0gdGhlIEphdmFzY3JpcHQgRmlsZSBvYmplY3RzIGFycmF5IHRvIHVwbG9hZC5cbiAgICogPGJyLz4gYG9wdGlvbnMuY2FsbGJhY2tgIC0gYSBjYWxsYmFjayBmdW5jdGlvbiB0byBnZXQgdGhlIGZpbGUgdXBsb2FkIHN0YXR1cyBhbmQgdGhlIHVwZGxvYWRlZCBmaWxlIGNvbnRlbnQuXG4gICAqIEBzZWUgdXBsb2FkRmlsZXNcbiAgICogQHNlZSBRdWVzdGlvbkZpbGVNb2RlbC5zdG9yZURhdGFBc1RleHRcbiAgICogQHNlZSBvbkRvd25sb2FkRmlsZVxuICAgKiBAc2VlIG9uQ2xlYXJGaWxlc1xuICAgKiBAc2VlIFtWaWV3IEV4YW1wbGVzXShodHRwczovL3d3dy5nb29nbGUuY29tL3NlYXJjaD9xPXNpdGUlM0FodHRwcyUzQSUyRiUyRnN1cnZleWpzLmlvJTJGRXhhbXBsZXMlMkYrJTIyb25VcGxvYWRGaWxlcyUyMilcbiAgICovXG4gIHB1YmxpYyBvblVwbG9hZEZpbGVzOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiBkb3dubG9hZGluZyBhIGZpbGUgaW4gUXVlc3Rpb25GaWxlLiBVc2UgdGhpcyBldmVudCB0byBwYXNzIHRoZSBmaWxlIHRvIGEgcHJldmlldy5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMubmFtZWAgLSB0aGUgcXVlc3Rpb24gbmFtZS5cbiAgICogPGJyLz4gYG9wdGlvbnMuY29udGVudGAgLSB0aGUgZmlsZSBjb250ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5maWxlVmFsdWVgIC0gc2luZ2xlIGZpbGUgcXVlc3Rpb24gdmFsdWUuXG4gICAqIDxici8+IGBvcHRpb25zLmNhbGxiYWNrYCAtIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZ2V0IHRoZSBmaWxlIGRvd25sb2FkaW5nIHN0YXR1cyBhbmQgdGhlIGRvd25sb2FkZWQgZmlsZSBjb250ZW50LlxuICAgKiBAc2VlIGRvd25sb2FkRmlsZVxuICAgKiBAc2VlIG9uQ2xlYXJGaWxlc1xuICAgKiBAc2VlIG9uVXBsb2FkRmlsZXNcbiAgICogQHNlZSBbVmlldyBFeGFtcGxlc10oaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2g/cT1zaXRlJTNBaHR0cHMlM0ElMkYlMkZzdXJ2ZXlqcy5pbyUyRkV4YW1wbGVzJTJGKyUyMm9uRG93bmxvYWRGaWxlJTIyKVxuICAgKi9cbiAgcHVibGljIG9uRG93bmxvYWRGaWxlOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgb24gY2xlYXJpbmcgdGhlIHZhbHVlIGluIGEgUXVlc3Rpb25GaWxlLiBVc2UgdGhpcyBldmVudCB0byByZW1vdmUgZmlsZXMgc3RvcmVkIG9uIHlvdXIgc2VydmVyLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgcXVlc3Rpb25gIC0gdGhlIHF1ZXN0aW9uIGluc3RhbmNlLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5uYW1lYCAtIHRoZSBxdWVzdGlvbiBuYW1lLlxuICAgKiA8YnIvPiBgb3B0aW9ucy52YWx1ZWAgLSB0aGUgcXVlc3Rpb24gdmFsdWUuXG4gICAqIDxici8+IGBvcHRpb25zLmZpbGVOYW1lYCAtIGEgcmVtb3ZlZCBmaWxlJ3MgbmFtZSwgc2V0IGl0IHRvIGBudWxsYCB0byBjbGVhciBhbGwgZmlsZXMuXG4gICAqIDxici8+IGBvcHRpb25zLmNhbGxiYWNrYCAtIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZ2V0IHRoZSBvcGVyYXRpb24gc3RhdHVzLlxuICAgKiBAc2VlIGNsZWFyRmlsZXNcbiAgICogQHNlZSBvbkRvd25sb2FkRmlsZVxuICAgKiBAc2VlIG9uVXBsb2FkRmlsZXNcbiAgICogQHNlZSBbVmlldyBFeGFtcGxlc10oaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2g/cT1zaXRlJTNBaHR0cHMlM0ElMkYlMkZzdXJ2ZXlqcy5pbyUyRkV4YW1wbGVzJTJGKyUyMm9uQ2xlYXJGaWxlcyUyMilcbiAgICovXG4gIHB1YmxpYyBvbkNsZWFyRmlsZXM6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGFmdGVyIGNob2ljZXMgZm9yIHJhZGlvZ3JvdXAsIGNoZWNrYm94LCBhbmQgZHJvcGRvd24gaGFzIGJlZW4gbG9hZGVkIGZyb20gYSBSRVNUZnVsIHNlcnZpY2UgYW5kIGJlZm9yZSB0aGV5IGFyZSBhc3NpZ25lZCB0byBhIHF1ZXN0aW9uLlxuICAgKiBZb3UgbWF5IGNoYW5nZSB0aGUgY2hvaWNlcywgYmVmb3JlIHRoZXkgYXJlIGFzc2lnbmVkIG9yIGRpc2FibGUvZW5hYmxlZCBtYWtlIHZpc2libGUvaW52aXNpYmxlIHF1ZXN0aW9uLCBiYXNlZCBvbiBsb2FkZWQgcmVzdWx0cy5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYHF1ZXN0aW9uYCAtIHRoZSBxdWVzdGlvbiB3aGVyZSBsb2FkZWQgY2hvaWNlcyBhcmUgZ29pbmcgdG8gYmUgYXNzaWduZWQuXG4gICAqIDxici8+IGBjaG9pY2VzYCAtIHRoZSBsb2FkZWQgY2hvaWNlcy4gWW91IGNhbiBjaGFuZ2UgdGhlIGxvYWRlZCBjaG9pY2VzIHRvIGJlZm9yZSB0aGV5IGFyZSBhc3NpZ25lZCB0byBxdWVzdGlvbi5cbiAgICogPGJyLz4gYHNlcnZlclJlc3VsdGAgLSBhIHJlc3VsdCB0aGF0IGNvbWVzIGZyb20gdGhlIHNlcnZlciBhcyBpdCBpcy5cbiAgICovXG4gIHB1YmxpYyBvbkxvYWRDaG9pY2VzRnJvbVNlcnZlcjogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGFmdGVyIHN1cnZleSBpcyBsb2FkZWQgZnJvbSBhcGkuc3VydmV5anMuaW8gc2VydmljZS5cbiAgICogWW91IGNhbiB1c2UgdGhpcyBldmVudCB0byBwZXJmb3JtIG1hbmlwdWxhdGlvbiB3aXRoIHRoZSBzdXJ2ZXkgbW9kZWwgYWZ0ZXIgaXQgd2FzIGxvYWRlZCBmcm9tIHRoZSB3ZWIgc2VydmljZS5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogQHNlZSBzdXJ2ZXlJZFxuICAgKiBAc2VlIGxvYWRTdXJ2ZXlGcm9tU2VydmljZVxuICAgKi9cbiAgcHVibGljIG9uTG9hZGVkU3VydmV5RnJvbVNlcnZpY2U6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiBwcm9jZXNzaW5nIHRoZSB0ZXh0IHdoZW4gaXQgZmluZHMgYSB0ZXh0IGluIGJyYWNrZXRzOiBge3NvbWV2YWx1ZX1gLiBCeSBkZWZhdWx0LCBpdCB1c2VzIHRoZSB2YWx1ZSBvZiBzdXJ2ZXkgcXVlc3Rpb24gdmFsdWVzIGFuZCB2YXJpYWJsZXMuXG4gICAqIEZvciBleGFtcGxlLCB5b3UgbWF5IHVzZSB0aGUgdGV4dCBwcm9jZXNzaW5nIGluIGxvYWRpbmcgY2hvaWNlcyBmcm9tIHRoZSB3ZWIuIElmIHlvdXIgYGNob2ljZXNCeVVybC51cmxgIGVxdWFscyB0byBcIlVybFRvU2VydmljZVRvR2V0QWxsQ2l0aWVzL3tjb3VudHJ5fS97c3RhdGV9XCIsXG4gICAqIHlvdSBtYXkgc2V0IG9uIHRoaXMgZXZlbnQgYG9wdGlvbnMudmFsdWVgIHRvIFwiYWxsXCIgb3IgZW1wdHkgc3RyaW5nIHdoZW4gdGhlIFwic3RhdGVcIiB2YWx1ZS9xdWVzdGlvbiBpcyBub24gc2VsZWN0ZWQgYnkgYSB1c2VyLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5uYW1lYCAtIHRoZSBuYW1lIG9mIHRoZSBwcm9jZXNzaW5nIHZhbHVlLCBmb3IgZXhhbXBsZSwgXCJzdGF0ZVwiIGluIG91ciBleGFtcGxlLlxuICAgKiA8YnIvPiBgb3B0aW9ucy52YWx1ZWAgLSB0aGUgdmFsdWUgb2YgdGhlIHByb2Nlc3NpbmcgdGV4dC5cbiAgICogPGJyLz4gYG9wdGlvbnMuaXNFeGlzdHNgIC0gYSBib29sZWFuIHZhbHVlLiBTZXQgaXQgdG8gYHRydWVgIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgdmFsdWUgYW5kIHNldCBpdCB0byBgZmFsc2VgIGlmIHlvdSBkb24ndC5cbiAgICovXG4gIHB1YmxpYyBvblByb2Nlc3NUZXh0VmFsdWU6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBiZWZvcmUgcmVuZGVyaW5nIGEgcXVlc3Rpb24uIFVzZSBpdCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBxdWVzdGlvbiBDU1MgY2xhc3Nlcy5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBxdWVzdGlvbiBmb3Igd2hpY2ggeW91IGNhbiBjaGFuZ2UgdGhlIENTUyBjbGFzc2VzLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jc3NDbGFzc2VzYCAtIGFuIG9iamVjdCB3aXRoIENTUyBjbGFzc2VzLiBGb3IgZXhhbXBsZSBge3Jvb3Q6IFwidGFibGVcIiwgYnV0dG9uOiBcImJ1dHRvblwifWAuIFlvdSBjYW4gY2hhbmdlIHRoZW0gdG8geW91ciBvd24gQ1NTIGNsYXNzZXMuXG4gICAqL1xuICBwdWJsaWMgb25VcGRhdGVRdWVzdGlvbkNzc0NsYXNzZXM6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBiZWZvcmUgcmVuZGVyaW5nIGEgcGFuZWwuIFVzZSBpdCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwYW5lbCBDU1MgY2xhc3Nlcy5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucGFuZWxgIC0gYSBwYW5lbCBmb3Igd2hpY2ggeW91IGNhbiBjaGFuZ2UgdGhlIENTUyBjbGFzc2VzLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jc3NDbGFzc2VzYCAtIGFuIG9iamVjdCB3aXRoIENTUyBjbGFzc2VzLiBGb3IgZXhhbXBsZSBge3RpdGxlOiBcInN2X3BfdGl0bGVcIiwgZGVzY3JpcHRpb246IFwic21hbGxcIn1gLiBZb3UgY2FuIGNoYW5nZSB0aGVtIHRvIHlvdXIgb3duIENTUyBjbGFzc2VzLlxuICAgKi9cbiAgcHVibGljIG9uVXBkYXRlUGFuZWxDc3NDbGFzc2VzOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgYmVmb3JlIHJlbmRlcmluZyBhIHBhZ2UuIFVzZSBpdCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwYWdlIENTUyBjbGFzc2VzLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5wYWdlYCAtIGEgcGFnZSBmb3Igd2hpY2ggeW91IGNhbiBjaGFuZ2UgdGhlIENTUyBjbGFzc2VzLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jc3NDbGFzc2VzYCAtIGFuIG9iamVjdCB3aXRoIENTUyBjbGFzc2VzLiBGb3IgZXhhbXBsZSBge3RpdGxlOiBcInN2X3BfdGl0bGVcIiwgZGVzY3JpcHRpb246IFwic21hbGxcIn1gLiBZb3UgY2FuIGNoYW5nZSB0aGVtIHRvIHlvdXIgb3duIENTUyBjbGFzc2VzLlxuICAgKi9cbiAgcHVibGljIG9uVXBkYXRlUGFnZUNzc0NsYXNzZXM6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBiZWZvcmUgcmVuZGVyaW5nIGEgY2hvaWNlIGl0ZW0gaW4gcmFkaW9ncm91cCwgY2hlY2tib3ggb3IgZHJvcGRvd24gcXVlc3Rpb25zLiBVc2UgaXQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgY2hvaWNlIGl0ZW0gY3NzLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBhIHF1ZXN0aW9uIHdoZXJlIGNob2ljZSBpdGVtIGlzIHJlbmRlcmVkLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5pdGVtYCAtIGEgY2hvaWNlIGl0ZW0gb2YgSXRlbVZhbHVlIHR5cGUuIFlvdSBjYW4gZ2V0IHZhbHVlIG9yIHRleHQgY2hvaWNlIHByb3BlcnRpZXMgYXMgb3B0aW9ucy5pdGVtLnZhbHVlIG9yIG9wdGlvbnMuY2hvaWNlLnRleHRcbiAgICogPGJyLz4gYG9wdGlvbnMuY3NzYCAtIGEgc3RyaW5nIHdpdGggY3NzIGNsYXNzZXMgZGl2aWRlZCBieSBzcGFjZS4gWW91IGNhbiBjaGFuZ2UgaXQuXG4gICAqL1xuICAgcHVibGljIG9uVXBkYXRlQ2hvaWNlSXRlbUNzczogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICBTdXJ2ZXlNb2RlbFxuID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCByaWdodCBhZnRlciBzdXJ2ZXkgaXMgcmVuZGVyZWQgaW4gRE9NLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5odG1sRWxlbWVudGAgLSBhIHJvb3QgSFRNTCBlbGVtZW50IGJvdW5kIHRvIHRoZSBzdXJ2ZXkgb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIG9uQWZ0ZXJSZW5kZXJTdXJ2ZXk6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCByaWdodCBhZnRlciBhIHBhZ2UgaXMgcmVuZGVyZWQgaW4gRE9NLiBVc2UgaXQgdG8gbW9kaWZ5IEhUTUwgZWxlbWVudHMuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLmh0bWxFbGVtZW50YCAtIGFuIEhUTUwgZWxlbWVudCBib3VuZCB0byB0aGUgc3VydmV5IGhlYWRlciBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgb25BZnRlclJlbmRlckhlYWRlcjogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIHJpZ2h0IGFmdGVyIGEgcGFnZSBpcyByZW5kZXJlZCBpbiBET00uIFVzZSBpdCB0byBtb2RpZnkgSFRNTCBlbGVtZW50cy5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucGFnZWAgLSBhIHBhZ2Ugb2JqZWN0IGZvciB3aGljaCB0aGUgZXZlbnQgaXMgZmlyZWQuIFR5cGljYWxseSB0aGUgY3VycmVudC9hY3RpdmUgcGFnZS5cbiAgICogPGJyLz4gYG9wdGlvbnMuaHRtbEVsZW1lbnRgIC0gYW4gSFRNTCBlbGVtZW50IGJvdW5kIHRvIHRoZSBwYWdlIG9iamVjdC5cbiAgICovXG4gIHB1YmxpYyBvbkFmdGVyUmVuZGVyUGFnZTogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIHJpZ2h0IGFmdGVyIGEgcXVlc3Rpb24gaXMgcmVuZGVyZWQgaW4gRE9NLiBVc2UgaXQgdG8gbW9kaWZ5IEhUTUwgZWxlbWVudHMuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIGEgcXVlc3Rpb24gb2JqZWN0IGZvciB3aGljaCB0aGUgZXZlbnQgaXMgZmlyZWQuXG4gICAqIDxici8+IGBvcHRpb25zLmh0bWxFbGVtZW50YCAtIGFuIEhUTUwgZWxlbWVudCBib3VuZCB0byB0aGUgcXVlc3Rpb24gb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIG9uQWZ0ZXJSZW5kZXJRdWVzdGlvbjogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIHJpZ2h0IGFmdGVyIGEgbm9uLWNvbXBvc2l0ZSBxdWVzdGlvbiAodGV4dCwgY29tbWVudCwgZHJvcGRvd24sIHJhZGlvZ3JvdXAsIGNoZWNrYm94KSBpcyByZW5kZXJlZCBpbiBET00uIFVzZSBpdCB0byBtb2RpZnkgSFRNTCBlbGVtZW50cy5cbiAgICogVGhpcyBldmVudCBpcyBub3QgZmlyZWQgZm9yIG1hdHJpY2VzLCBwYW5lbHMsIG11bHRpcGxlIHRleHQgYW5kIGltYWdlIHBpY2tlci5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBxdWVzdGlvbiBvYmplY3QgZm9yIHdoaWNoIHRoZSBldmVudCBpcyBmaXJlZC5cbiAgICogPGJyLz4gYG9wdGlvbnMuaHRtbEVsZW1lbnRgIC0gYW4gSFRNTCBlbGVtZW50IGJvdW5kIHRvIHRoZSBxdWVzdGlvbiBvYmplY3QuXG4gICAqL1xuICBwdWJsaWMgb25BZnRlclJlbmRlclF1ZXN0aW9uSW5wdXQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCByaWdodCBhZnRlciBhIHBhbmVsIGlzIHJlbmRlcmVkIGluIERPTS4gVXNlIGl0IHRvIG1vZGlmeSBIVE1MIGVsZW1lbnRzLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50XG4gICAqIDxici8+IGBvcHRpb25zLnBhbmVsYCAtIGEgcGFuZWwgb2JqZWN0IGZvciB3aGljaCB0aGUgZXZlbnQgaXMgZmlyZWRcbiAgICogPGJyLz4gYG9wdGlvbnMuaHRtbEVsZW1lbnRgIC0gYW4gSFRNTCBlbGVtZW50IGJvdW5kIHRvIHRoZSBwYW5lbCBvYmplY3RcbiAgICovXG4gIHB1YmxpYyBvbkFmdGVyUmVuZGVyUGFuZWw6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBvY2N1cnMgd2hlbiBhbiBlbGVtZW50IHdpdGhpbiBhIHF1ZXN0aW9uIGdldHMgZm9jdXMuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gQSBbc3VydmV5XShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeT9pZD1zdXJ2ZXltb2RlbCkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBBIFtxdWVzdGlvbl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnk/aWQ9UXVlc3Rpb24pIHdob3NlIGNoaWxkIGVsZW1lbnQgZ2V0cyBmb2N1cy5cbiAgICogQHNlZSBvbkZvY3VzSW5QYW5lbFxuICAgKi9cbiAgcHVibGljIG9uRm9jdXNJblF1ZXN0aW9uOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBvY2N1cnMgd2hlbiBhbiBlbGVtZW50IHdpdGhpbiBhIHBhbmVsIGdldHMgZm9jdXMuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gQSBbc3VydmV5XShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeT9pZD1zdXJ2ZXltb2RlbCkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5wYW5lbGAgLSBBIFtwYW5lbF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnk/aWQ9UGFuZWxNb2RlbEJhc2UpIHdob3NlIGNoaWxkIGVsZW1lbnQgZ2V0cyBmb2N1cy5cbiAgICogQHNlZSBvbkZvY3VzSW5RdWVzdGlvblxuICAgKi9cbiAgcHVibGljIG9uRm9jdXNJblBhbmVsOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxTdXJ2ZXlNb2RlbD4oKTtcblxuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIG9uIGFkZGluZyBhIG5ldyByb3cgaW4gTWF0cml4IER5bmFtaWMgcXVlc3Rpb24uXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnRcbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBtYXRyaXggcXVlc3Rpb24uXG4gICAqIDxici8+IGBvcHRpb25zLnJvd2AgLSBhIG5ldyBhZGRlZCByb3cuXG4gICAqIEBzZWUgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWxcbiAgICogQHNlZSBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbC52aXNpYmxlUm93c1xuICAgKi9cbiAgcHVibGljIG9uTWF0cml4Um93QWRkZWQ6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBiZWZvcmUgYWRkaW5nIGEgbmV3IHJvdyBpbiBNYXRyaXggRHluYW1pYyBxdWVzdGlvbi5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBhIG1hdHJpeCBxdWVzdGlvbi5cbiAgICogPGJyLz4gYG9wdGlvbnMuY2FuQWRkUm93YCAtIHNwZWNpZmllcyB3aGV0aGVyIGEgbmV3IHJvdyBjYW4gYmUgYWRkZWRcbiAgICogQHNlZSBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbFxuICAgKiBAc2VlIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsLnZpc2libGVSb3dzXG4gICAqL1xuICBwdWJsaWMgb25NYXRyaXhCZWZvcmVSb3dBZGRlZDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGJlZm9yZSByZW1vdmluZyBhIHJvdyBmcm9tIE1hdHJpeCBEeW5hbWljIHF1ZXN0aW9uLiBZb3UgY2FuIGRpc2FibGUgcmVtb3ZpbmcgYW5kIGNsZWFyIHRoZSBkYXRhIGluc3RlYWQuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnRcbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBtYXRyaXggcXVlc3Rpb24uXG4gICAqIDxici8+IGBvcHRpb25zLnJvd0luZGV4YCAtIGEgcm93IGluZGV4LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5yb3dgIC0gYSByb3cgb2JqZWN0LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5hbGxvd2AgLSBhIGJvb2xlYW4gcHJvcGVydHkuIFNldCBpdCB0byBgZmFsc2VgIHRvIGRpc2FibGUgdGhlIHJvdyByZW1vdmluZy5cbiAgICogQHNlZSBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbFxuICAgKiBAc2VlIG9uTWF0cml4Um93UmVtb3ZlZFxuICAgKiBAc2VlIG9uTWF0cml4QWxsb3dSZW1vdmVSb3dcbiAgICovXG4gIHB1YmxpYyBvbk1hdHJpeFJvd1JlbW92aW5nOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgb24gcmVtb3ZpbmcgYSByb3cgZnJvbSBNYXRyaXggRHluYW1pYyBxdWVzdGlvbi5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudFxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBhIG1hdHJpeCBxdWVzdGlvblxuICAgKiA8YnIvPiBgb3B0aW9ucy5yb3dJbmRleGAgLSBhIHJlbW92ZWQgcm93IGluZGV4XG4gICAqIDxici8+IGBvcHRpb25zLnJvd2AgLSBhIHJlbW92ZWQgcm93IG9iamVjdFxuICAgKiBAc2VlIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsXG4gICAqIEBzZWUgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWwudmlzaWJsZVJvd3NcbiAgICogQHNlZSBvbk1hdHJpeFJvd1JlbW92aW5nXG4gICAqIEBzZWUgb25NYXRyaXhBbGxvd1JlbW92ZVJvd1xuICAgKi9cbiAgcHVibGljIG9uTWF0cml4Um93UmVtb3ZlZDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGJlZm9yZSByZW5kZXJpbmcgXCJSZW1vdmVcIiBidXR0b24gZm9yIHJlbW92aW5nIGEgcm93IGZyb20gTWF0cml4IER5bmFtaWMgcXVlc3Rpb24uXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnRcbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBtYXRyaXggcXVlc3Rpb24uXG4gICAqIDxici8+IGBvcHRpb25zLnJvd0luZGV4YCAtIGEgcm93IGluZGV4LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5yb3dgIC0gYSByb3cgb2JqZWN0LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5hbGxvd2AgLSBhIGJvb2xlYW4gcHJvcGVydHkuIFNldCBpdCB0byBgZmFsc2VgIHRvIGRpc2FibGUgdGhlIHJvdyByZW1vdmluZy5cbiAgICogQHNlZSBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbFxuICAgKiBAc2VlIG9uTWF0cml4Um93UmVtb3ZpbmdcbiAgICogQHNlZSBvbk1hdHJpeFJvd1JlbW92ZWRcbiAgICovXG4gIHB1YmxpYyBvbk1hdHJpeEFsbG93UmVtb3ZlUm93OiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgYmVmb3JlIGNyZWF0aW5nIGNlbGwgcXVlc3Rpb24gaW4gdGhlIG1hdHJpeC4gWW91IGNhbiBjaGFuZ2UgdGhlIGNlbGwgcXVlc3Rpb24gdHlwZSBieSBzZXR0aW5nIGRpZmZlcmVudCBvcHRpb25zLmNlbGxUeXBlLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSB0aGUgbWF0cml4IHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jZWxsVHlwZWAgLSB0aGUgY2VsbCBxdWVzdGlvbiB0eXBlLiBZb3UgY2FuIGNoYW5nZSBpdC5cbiAgICogPGJyLz4gYG9wdGlvbnMucm93VmFsdWVgIC0gdGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IHJvdy4gVG8gYWNjZXNzIGEgcGFydGljdWxhciBjb2x1bW4ncyB2YWx1ZSB3aXRoaW4gdGhlIGN1cnJlbnQgcm93LCB1c2U6IGBvcHRpb25zLnJvd1ZhbHVlW1wiY29sdW1uVmFsdWVcIl1gLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jb2x1bW5gIC0gdGhlIG1hdHJpeCBjb2x1bW4gb2JqZWN0LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jb2x1bW5OYW1lYCAtIHRoZSBtYXRyaXggY29sdW1uIG5hbWUuXG4gICAqIDxici8+IGBvcHRpb25zLnJvd2AgLSB0aGUgbWF0cml4IHJvdyBvYmplY3QuXG4gICAqIEBzZWUgb25NYXRyaXhCZWZvcmVSb3dBZGRlZFxuICAgKiBAc2VlIG9uTWF0cml4Q2VsbENyZWF0ZWRcbiAgICogQHNlZSBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbFxuICAgKiBAc2VlIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbFxuICAgKi9cbiAgIHB1YmxpYyBvbk1hdHJpeENlbGxDcmVhdGluZzogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICBTdXJ2ZXlNb2RlbFxuID4oKTtcbiAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGZvciBldmVyeSBjZWxsIGNyZWF0ZWQgaW4gTWF0cml4IER5bmFtaWMgYW5kIE1hdHJpeCBEcm9wZG93biBxdWVzdGlvbnMuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIHRoZSBtYXRyaXggcXVlc3Rpb24uXG4gICAqIDxici8+IGBvcHRpb25zLmNlbGxgIC0gdGhlIG1hdHJpeCBjZWxsLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jZWxsUXVlc3Rpb25gIC0gdGhlIHF1ZXN0aW9uL2VkaXRvciBpbiB0aGUgY2VsbC4gWW91IG1heSBjdXN0b21pemUgaXQsIGNoYW5nZSBpdCdzIHByb3BlcnRpZXMsIGxpa2UgY2hvaWNlcyBvciB2aXNpYmxlLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5yb3dWYWx1ZWAgLSB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgcm93LiBUbyBhY2Nlc3MgYSBwYXJ0aWN1bGFyIGNvbHVtbidzIHZhbHVlIHdpdGhpbiB0aGUgY3VycmVudCByb3csIHVzZTogYG9wdGlvbnMucm93VmFsdWVbXCJjb2x1bW5WYWx1ZVwiXWAuXG4gICAqIDxici8+IGBvcHRpb25zLmNvbHVtbmAgLSB0aGUgbWF0cml4IGNvbHVtbiBvYmplY3QuXG4gICAqIDxici8+IGBvcHRpb25zLmNvbHVtbk5hbWVgIC0gdGhlIG1hdHJpeCBjb2x1bW4gbmFtZS5cbiAgICogPGJyLz4gYG9wdGlvbnMucm93YCAtIHRoZSBtYXRyaXggcm93IG9iamVjdC5cbiAgICogQHNlZSBvbk1hdHJpeEJlZm9yZVJvd0FkZGVkXG4gICAqIEBzZWUgb25NYXRyaXhDZWxsQ3JlYXRpbmdcbiAgICogQHNlZSBvbk1hdHJpeFJvd0FkZGVkXG4gICAqIEBzZWUgUXVlc3Rpb25NYXRyaXhEeW5hbWljTW9kZWxcbiAgICogQHNlZSBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxcbiAgICovXG4gIHB1YmxpYyBvbk1hdHJpeENlbGxDcmVhdGVkOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgZm9yIGV2ZXJ5IGNlbGwgYWZ0ZXIgaXMgaGFzIGJlZW4gcmVuZGVyZWQgaW4gRE9NLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSB0aGUgbWF0cml4IHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jZWxsYCAtIHRoZSBtYXRyaXggY2VsbC5cbiAgICogPGJyLz4gYG9wdGlvbnMuY2VsbFF1ZXN0aW9uYCAtIHRoZSBxdWVzdGlvbi9lZGl0b3IgaW4gdGhlIGNlbGwuXG4gICAqIDxici8+IGBvcHRpb25zLmh0bWxFbGVtZW50YCAtIGFuIEhUTUwgZWxlbWVudCBib3VuZCB0byB0aGUgYGNlbGxRdWVzdGlvbmAgb2JqZWN0LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jb2x1bW5gIC0gdGhlIG1hdHJpeCBjb2x1bW4gb2JqZWN0LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5yb3dgIC0gdGhlIG1hdHJpeCByb3cgb2JqZWN0LlxuICAgKiBAc2VlIG9uTWF0cml4Q2VsbENyZWF0ZWRcbiAgICogQHNlZSBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbFxuICAgKiBAc2VlIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbFxuICAgKi9cbiAgcHVibGljIG9uTWF0cml4QWZ0ZXJDZWxsUmVuZGVyOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgd2hlbiBjZWxsIHZhbHVlIGlzIGNoYW5nZWQgaW4gTWF0cml4IER5bmFtaWMgYW5kIE1hdHJpeCBEcm9wZG93biBxdWVzdGlvbnMuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIHRoZSBtYXRyaXggcXVlc3Rpb24uXG4gICAqIDxici8+IGBvcHRpb25zLmNvbHVtbk5hbWVgIC0gdGhlIG1hdHJpeCBjb2x1bW4gbmFtZS5cbiAgICogPGJyLz4gYG9wdGlvbnMudmFsdWVgIC0gYSBuZXcgdmFsdWUuXG4gICAqIDxici8+IGBvcHRpb25zLnJvd2AgLSB0aGUgbWF0cml4IHJvdyBvYmplY3QuXG4gICAqIDxici8+IGBvcHRpb25zLmdldENlbGxRdWVzdGlvbihjb2x1bW5OYW1lKWAgLSB0aGUgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBjZWxsIHF1ZXN0aW9uIGJ5IGNvbHVtbiBuYW1lLlxuICAgKiBAc2VlIG9uTWF0cml4Q2VsbFZhbHVlQ2hhbmdpbmdcbiAgICogQHNlZSBvbk1hdHJpeEJlZm9yZVJvd0FkZGVkXG4gICAqIEBzZWUgb25NYXRyaXhSb3dBZGRlZFxuICAgKiBAc2VlIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsXG4gICAqIEBzZWUgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsXG4gICAqL1xuICBwdWJsaWMgb25NYXRyaXhDZWxsVmFsdWVDaGFuZ2VkOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgb24gY2hhbmdpbmcgY2VsbCB2YWx1ZSBpbiBNYXRyaXggRHluYW1pYyBhbmQgTWF0cml4IERyb3Bkb3duIHF1ZXN0aW9ucy4gWW91IG1heSBjaGFuZ2UgdGhlIGBvcHRpb25zLnZhbHVlYCBwcm9wZXJ0eSB0byBjaGFuZ2UgYSBjZWxsIHZhbHVlLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSB0aGUgbWF0cml4IHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jb2x1bW5OYW1lYCAtIHRoZSBtYXRyaXggY29sdW1uIG5hbWUuXG4gICAqIDxici8+IGBvcHRpb25zLnZhbHVlYCAtIGEgbmV3IHZhbHVlLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5vbGRWYWx1ZWAgLSB0aGUgb2xkIHZhbHVlLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5yb3dgIC0gdGhlIG1hdHJpeCByb3cgb2JqZWN0LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5nZXRDZWxsUXVlc3Rpb24oY29sdW1uTmFtZSlgIC0gdGhlIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNlbGwgcXVlc3Rpb24gYnkgY29sdW1uIG5hbWUuXG4gICAqIEBzZWUgb25NYXRyaXhDZWxsVmFsdWVDaGFuZ2VkXG4gICAqIEBzZWUgb25NYXRyaXhCZWZvcmVSb3dBZGRlZFxuICAgKiBAc2VlIG9uTWF0cml4Um93QWRkZWRcbiAgICogQHNlZSBRdWVzdGlvbk1hdHJpeER5bmFtaWNNb2RlbFxuICAgKiBAc2VlIFF1ZXN0aW9uTWF0cml4RHJvcGRvd25Nb2RlbFxuICAgKi9cbiAgcHVibGljIG9uTWF0cml4Q2VsbFZhbHVlQ2hhbmdpbmc6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCB3aGVuIE1hdHJpeCBEeW5hbWljIGFuZCBNYXRyaXggRHJvcGRvd24gcXVlc3Rpb25zIHZhbGlkYXRlIHRoZSBjZWxsIHZhbHVlLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5lcnJvcmAgLSBhbiBlcnJvciBzdHJpbmcuIEl0IGlzIGVtcHR5IGJ5IGRlZmF1bHQuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIHRoZSBtYXRyaXggcXVlc3Rpb24uXG4gICAqIDxici8+IGBvcHRpb25zLmNvbHVtbk5hbWVgIC0gdGhlIG1hdHJpeCBjb2x1bW4gbmFtZS5cbiAgICogPGJyLz4gYG9wdGlvbnMudmFsdWVgIC0gYSBjZWxsIHZhbHVlLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5yb3dgIC0gdGhlIG1hdHJpeCByb3cgb2JqZWN0LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5nZXRDZWxsUXVlc3Rpb24oY29sdW1uTmFtZSlgIC0gdGhlIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgY2VsbCBxdWVzdGlvbiBieSBjb2x1bW4gbmFtZS5cbiAgICogQHNlZSBvbk1hdHJpeEJlZm9yZVJvd0FkZGVkXG4gICAqIEBzZWUgb25NYXRyaXhSb3dBZGRlZFxuICAgKiBAc2VlIFF1ZXN0aW9uTWF0cml4RHluYW1pY01vZGVsXG4gICAqIEBzZWUgUXVlc3Rpb25NYXRyaXhEcm9wZG93bk1vZGVsXG4gICAqL1xuICBwdWJsaWMgb25NYXRyaXhDZWxsVmFsaWRhdGU6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbiBhZGRpbmcgYSBuZXcgcGFuZWwgaW4gUGFuZWwgRHluYW1pYyBxdWVzdGlvbi5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gYSBwYW5lbCBxdWVzdGlvbi5cbiAgICogPGJyLz4gYG9wdGlvbnMucGFuZWxgIC0gYW4gYWRkZWQgcGFuZWwuXG4gICAqIEBzZWUgUXVlc3Rpb25QYW5lbER5bmFtaWNNb2RlbFxuICAgKiBAc2VlIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWwucGFuZWxzXG4gICAqL1xuICBwdWJsaWMgb25EeW5hbWljUGFuZWxBZGRlZDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIG9uIHJlbW92aW5nIGEgcGFuZWwgZnJvbSBQYW5lbCBEeW5hbWljIHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBhIHBhbmVsIHF1ZXN0aW9uLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5wYW5lbEluZGV4YCAtIGEgcmVtb3ZlZCBwYW5lbCBpbmRleC5cbiAgICogPGJyLz4gYG9wdGlvbnMucGFuZWxgIC0gYSByZW1vdmVkIHBhbmVsLlxuICAgKiBAc2VlIFF1ZXN0aW9uUGFuZWxEeW5hbWljTW9kZWxcbiAgICogQHNlZSBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsLnBhbmVsc1xuICAgKi9cbiAgcHVibGljIG9uRHluYW1pY1BhbmVsUmVtb3ZlZDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIGV2ZXJ5IHNlY29uZCBpZiB0aGUgbWV0aG9kIGBzdGFydFRpbWVyYCBoYXMgYmVlbiBjYWxsZWQuXG4gICAqIEBzZWUgc3RhcnRUaW1lclxuICAgKiBAc2VlIHRpbWVTcGVudFxuICAgKiBAc2VlIFBhZ2UudGltZVNwZW50XG4gICAqL1xuICBwdWJsaWMgb25UaW1lcjogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8U3VydmV5TW9kZWw+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgYmVmb3JlIGRpc3BsYXlpbmcgYSBuZXcgaW5mb3JtYXRpb24gaW4gdGhlIFRpbWVyIFBhbmVsLiBVc2UgaXQgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHRleHQuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnRleHRgIC0gdGhlIHRpbWVyIHBhbmVsIGluZm8gdGV4dC5cbiAgICovXG4gIHB1YmxpYyBvblRpbWVyUGFuZWxJbmZvVGV4dDogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVGhlIGV2ZW50IGlzIGZpcmVkIHdoZW4gaXRlbSB2YWx1ZSBpcyBjaGFuZ2VkIGluIFBhbmVsIER5bmFtaWMgcXVlc3Rpb24uXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIHRoZSBwYW5lbCBxdWVzdGlvbi5cbiAgICogPGJyLz4gYG9wdGlvbnMucGFuZWxgIC0gdGhlIGR5bmFtaWMgcGFuZWwgaXRlbS5cbiAgICogPGJyLz4gYG9wdGlvbnMubmFtZWAgLSB0aGUgaXRlbSBuYW1lLlxuICAgKiA8YnIvPiBgb3B0aW9ucy52YWx1ZWAgLSBhIG5ldyB2YWx1ZS5cbiAgICogPGJyLz4gYG9wdGlvbnMuaXRlbUluZGV4YCAtIHRoZSBwYW5lbCBpdGVtIGluZGV4LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5pdGVtVmFsdWVgIC0gdGhlIHBhbmVsIGl0ZW0gb2JqZWN0LlxuICAgKiBAc2VlIG9uRHluYW1pY1BhbmVsQWRkZWRcbiAgICogQHNlZSBRdWVzdGlvblBhbmVsRHluYW1pY01vZGVsXG4gICAqL1xuICBwdWJsaWMgb25EeW5hbWljUGFuZWxJdGVtVmFsdWVDaGFuZ2VkOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBldmVudCB0byBkZWZpbmUsIHdoZXRoZXIgYW4gYW5zd2VyIHRvIGEgcXVlc3Rpb24gaXMgY29ycmVjdCBvciBub3QuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gdGhlIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIGEgcXVlc3Rpb24gb24gd2hpY2ggeW91IGhhdmUgdG8gZGVjaWRlIGlmIHRoZSBhbnN3ZXIgaXMgY29ycmVjdCBvciBub3QuXG4gICAqIDxici8+IGBvcHRpb25zLnJlc3VsdGAgLSByZXR1cm5zIGB0cnVlYCwgaWYgYW4gYW5zd2VyIGlzIGNvcnJlY3QsIG9yIGBmYWxzZWAsIGlmIHRoZSBhbnN3ZXIgaXMgbm90IGNvcnJlY3QuIFVzZSBxdWVzdGlvbnMnIGB2YWx1ZWAgYW5kIGBjb3JyZWN0QW5zd2VyYCBwcm9wZXJ0aWVzIHRvIHJldHVybiB0aGUgY29ycmVjdCB2YWx1ZS5cbiAgICogPGJyLz4gYG9wdGlvbnMuY29ycmVjdEFuc3dlcnNgIC0geW91IG1heSBjaGFuZ2UgdGhlIGRlZmF1bHQgbnVtYmVyIG9mIGNvcnJlY3Qgb3IgaW5jb3JyZWN0IGFuc3dlcnMgaW4gdGhlIHF1ZXN0aW9uLCBmb3IgZXhhbXBsZSBmb3IgbWF0cml4LCB3aGVyZSBlYWNoIHJvdyBpcyBhIHF1aXogcXVlc3Rpb24uXG4gICAqIEBzZWUgUXVlc3Rpb24udmFsdWVcbiAgICogQHNlZSBRdWVzdGlvbi5jb3JyZWN0QW5zd2VyXG4gICAqL1xuICBwdWJsaWMgb25Jc0Fuc3dlckNvcnJlY3Q6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIGNvbnRyb2wgZHJhZyZkcm9wIG9wZXJhdGlvbnMgZHVyaW5nIGRlc2lnbiBtb2RlLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5hbGxvd2AgLSBzZXQgaXQgdG8gYGZhbHNlYCB0byBkaXNhYmxlIGRyYWdnaW5nLlxuICAgKiA8YnIvPiBgb3B0aW9ucy50YXJnZXRgIC0gYSB0YXJnZXQgZWxlbWVudCB0aGF0IGlzIGRyYWdnZWQuXG4gICAqIDxici8+IGBvcHRpb25zLnNvdXJjZWAgLSBhIHNvdXJjZSBlbGVtZW50LiBJdCBjYW4gYmUgYG51bGxgLCBpZiBpdCBpcyBhIG5ldyBlbGVtZW50LCBkcmFnZ2luZyBmcm9tIHRvb2xib3guXG4gICAqIDxici8+IGBvcHRpb25zLnBhcmVudGAgLSBhIHBhZ2Ugb3IgcGFuZWwgd2hlcmUgdGFyZ2V0IGVsZW1lbnQgaXMgZHJhZ2dpbmcuXG4gICAqIDxici8+IGBvcHRpb25zLmluc2VydEJlZm9yZWAgLSBhbiBlbGVtZW50IGJlZm9yZSB0aGUgdGFyZ2V0IGVsZW1lbnQgaXMgZHJhZ2dpbmcuIEl0IGNhbiBiZSBgbnVsbGAgaWYgcGFyZW50IGNvbnRhaW5lciAocGFnZSBvciBwYW5lbCkgaXMgZW1wdHkgb3IgZHJhZ2dpbmcgYW4gZWxlbWVudCBhZnRlciB0aGUgbGFzdCBlbGVtZW50IGluIGEgY29udGFpbmVyLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5pbnNlcnRBZnRlcmAgLSBhbiBlbGVtZW50IGFmdGVyIHRoZSB0YXJnZXQgZWxlbWVudCBpcyBkcmFnZ2luZy4gSXQgY2FuIGJlIGBudWxsYCBpZiBwYXJlbnQgY29udGFpbmVyIChwYWdlIG9yIHBhbmVsKSBpcyBlbXB0eSBvciBkcmFnZ2luZyBlbGVtZW50IHRvIHRoZSBmaXJzdCBwb3NpdGlvbiB3aXRoaW4gdGhlIHBhcmVudCBjb250YWluZXIuXG4gICAqIEBzZWUgc2V0RGVzaWduTW9kZVxuICAgKiBAc2VlIGlzRGVzaWduTW9kZVxuICAgKi9cbiAgcHVibGljIG9uRHJhZ0Ryb3BBbGxvdzogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8U3VydmV5TW9kZWw+KCk7XG4gIC8qKlxuICAgKiBVc2UgdGhpcyBldmVudCB0byBjb250cm9sIHNjcm9sbGluZyBlbGVtZW50IHRvIHRvcC4gWW91IGNhbiBjYW5jZWwgdGhlIGRlZmF1bHQgYmVoYXZpb3IgYnkgc2V0dGluZyBvcHRpb25zLmNhbmNlbCBwcm9wZXJ0eSB0byB0cnVlLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5lbGVtZW50YCAtIGFuIGVsZW1lbnQgdGhhdCBpcyBnb2luZyB0byBiZSBzY3JvbGxlZCBvbiB0b3AuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIGEgcXVlc3Rpb24gdGhhdCBpcyBnb2luZyB0byBiZSBzY3JvbGxlZCBvbiB0b3AuIEl0IGNhbiBiZSBudWxsIGlmIG9wdGlvbnMucGFnZSBpcyBub3QgbnVsbC5cbiAgICogPGJyLz4gYG9wdGlvbnMucGFnZWAgLSBhIHBhZ2UgdGhhdCBpcyBnb2luZyB0byBiZSBzY3JvbGxlZCBvbiB0b3AuIEl0IGNhbiBiZSBudWxsIGlmIG9wdGlvbnMucXVlc3Rpb24gaXMgbm90IG51bGwuXG4gICAqIDxici8+IGBvcHRpb25zLmVsZW1lbnRJZGAgLSB0aGUgdW5pcXVlIGVsZW1lbnQgRE9NIElkLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5jYW5jZWxgIC0gc2V0IHRoaXMgcHJvcGVydHkgdG8gdHJ1ZSB0byBjYW5jZWwgdGhlIGRlZmF1bHQgc2Nyb2xsaW5nLlxuICAgKi9cbiAgcHVibGljIG9uU2Nyb2xsaW5nRWxlbWVudFRvVG9wOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG5cbiAgcHVibGljIG9uTG9jYWxlQ2hhbmdlZEV2ZW50OiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG5cbiAgLyoqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIGNyZWF0ZS9jdXN0b21pemUgYWN0aW9ucyB0byBiZSBkaXNwbGF5ZWQgaW4gYSBxdWVzdGlvbidzIHRpdGxlLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIEEgW1N1cnZleV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnk/aWQ9U3VydmV5TW9kZWwpIG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMucXVlc3Rpb25gIC0gQSBbUXVlc3Rpb25dKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5P2lkPVF1ZXN0aW9uKSBvYmplY3QgZm9yIHdoaWNoIHRoZSBldmVudCBpcyBmaXJlZC5cbiAgICogPGJyLz4gYG9wdGlvbnMudGl0bGVBY3Rpb25zYCAtIEEgbGlzdCBvZiBhY3Rpb25zIChbSUFjdGlvbl0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnk/aWQ9SUFjdGlvbikgb2JqZWN0cykgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcm9jZXNzZWQgcXVlc3Rpb24uXG4gICAqIEBzZWUgSUFjdGlvblxuICAgKiBAc2VlIFF1ZXN0aW9uXG4gICAqL1xuICBwdWJsaWMgb25HZXRRdWVzdGlvblRpdGxlQWN0aW9uczogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVXNlIHRoaXMgZXZlbnQgdG8gY3JlYXRlL2N1c3RvbWl6ZSBhY3Rpb25zIHRvIGJlIGRpc3BsYXllZCBpbiBhIHBhbmVsJ3MgdGl0bGUuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gQSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5wYW5lbGAgLSBBIHBhbmVsIChbUGFuZWxNb2RlbF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnk/aWQ9cGFuZWxtb2RlbCkgb2JqZWN0KSBmb3Igd2hpY2ggdGhlIGV2ZW50IGlzIGZpcmVkLlxuICAgKiA8YnIvPiBgb3B0aW9ucy50aXRsZUFjdGlvbnNgIC0gQSBsaXN0IG9mIGFjdGlvbnMgKFtJQWN0aW9uXShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeT9pZD1JQWN0aW9uKSBvYmplY3RzKSBhc3NvY2lhdGVkIHdpdGggdGhlIHByb2Nlc3NlZCBwYW5lbC5cbiAgICogQHNlZSBJQWN0aW9uXG4gICAqIEBzZWUgUGFuZWxNb2RlbFxuICAgKi9cbiAgcHVibGljIG9uR2V0UGFuZWxUaXRsZUFjdGlvbnM6IEV2ZW50QmFzZTxTdXJ2ZXlNb2RlbD4gPSB0aGlzLmFkZEV2ZW50PFxuICAgIFN1cnZleU1vZGVsXG4gID4oKTtcbiAgLyoqXG4gICAqIFVzZSB0aGlzIGV2ZW50IHRvIGNyZWF0ZS9jdXN0b21pemUgYWN0aW9ucyB0byBiZSBkaXNwbGF5ZWQgaW4gYSBwYWdlJ3MgdGl0bGUuXG4gICAqIDxici8+IGBzZW5kZXJgIC0gQSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5wYWdlYCAtIEEgcGFnZSAoW1BhZ2VNb2RlbF0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9Eb2N1bWVudGF0aW9uL0xpYnJhcnk/aWQ9cGFnZW1vZGVsKSBvYmplY3QpIGZvciB3aGljaCB0aGUgZXZlbnQgaXMgZmlyZWQuXG4gICAqIDxici8+IGBvcHRpb25zLnRpdGxlQWN0aW9uc2AgLSBBIGxpc3Qgb2YgYWN0aW9ucyAoW0lBY3Rpb25dKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5P2lkPUlBY3Rpb24pIG9iamVjdHMpIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJvY2Vzc2VkIHBhZ2UuXG4gICAqIEBzZWUgSUFjdGlvblxuICAgKiBAc2VlIFBhZ2VNb2RlbFxuICAgKi9cbiAgcHVibGljIG9uR2V0UGFnZVRpdGxlQWN0aW9uczogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuICAvKipcbiAgICogVXNlIHRoaXMgZXZlbnQgdG8gY3JlYXRlL2N1c3RvbWl6ZSBhY3Rpb25zIHRvIGJlIGRpc3BsYXllZCBpbiBhIG1hdHJpeCBxdWVzdGlvbidzIHJvdy5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSBBIHN1cnZleSBvYmplY3QgdGhhdCBmaXJlcyB0aGUgZXZlbnQuXG4gICAqIDxici8+IGBvcHRpb25zLnF1ZXN0aW9uYCAtIEEgbWF0cml4IHF1ZXN0aW9uIChbUXVlc3Rpb25NYXRyaXhCYXNlTW9kZWxdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5P2lkPXF1ZXN0aW9ubWF0cml4YmFzZW1vZGVsKSBvYmplY3QpIGZvciB3aGljaCB0aGUgZXZlbnQgaXMgZmlyZWQuXG4gICAqIDxici8+IGBvcHRpb25zLnJvd2AgLSBBIG1hdHJpeCByb3cgZm9yIHdoaWNoIHRoZSBldmVudCBpcyBmaXJlZC5cbiAgICogPGJyLz4gYG9wdGlvbnMuYWN0aW9uc2AgLSBBIGxpc3Qgb2YgYWN0aW9ucyAoW0lBY3Rpb25dKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5P2lkPUlBY3Rpb24pIG9iamVjdHMpIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJvY2Vzc2VkIG1hdHJpeCBxdWVzdGlvbiBhbmQgcm93LlxuICAgKiBAc2VlIElBY3Rpb25cbiAgICogQHNlZSBRdWVzdGlvbk1hdHJpeERyb3Bkb3duTW9kZWxCYXNlXG4gICAqL1xuICBwdWJsaWMgb25HZXRNYXRyaXhSb3dBY3Rpb25zOiBFdmVudEJhc2U8U3VydmV5TW9kZWw+ID0gdGhpcy5hZGRFdmVudDxcbiAgICBTdXJ2ZXlNb2RlbFxuICA+KCk7XG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgdGhlIHN1cnZleSBlbGVtZW50IGNvbnRlbnQgd2FzIGNvbGxhcHNlZCBvciBleHBhbmRlZC5cbiAgICogPGJyLz4gYHNlbmRlcmAgLSB0aGUgc3VydmV5IG9iamVjdCB0aGF0IGZpcmVzIHRoZSBldmVudC5cbiAgICogPGJyLz4gYG9wdGlvbnMuZWxlbWVudGAgLSBTcGVjaWZpZXMgd2hpY2ggc3VydmV5IGVsZW1lbnQgY29udGVudCB3YXMgY29sbGFwc2VkIG9yIGV4cGFuZGVkLlxuICAgKiBAc2VlIG9uRWxlbWVudENvbnRlbnRWaXNpYmlsaXR5Q2hhbmdlZFxuICAgKi9cbiAgcHVibGljIG9uRWxlbWVudENvbnRlbnRWaXNpYmlsaXR5Q2hhbmdlZDogRXZlbnRCYXNlPFxuICAgIFN1cnZleU1vZGVsXG4gID4gPSB0aGlzLmFkZEV2ZW50PFN1cnZleU1vZGVsPigpO1xuXG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgaXMgZmlyZWQgYmVmb3JlIGV4cHJlc3Npb24gcXVlc3Rpb24gY29udmVydCBpdCdzIHZhbHVlIGludG8gZGlzcGxheSB2YWx1ZSBmb3IgcmVuZGVyaW5nLlxuICAgKiA8YnIvPiBgc2VuZGVyYCAtIHRoZSBzdXJ2ZXkgb2JqZWN0IHRoYXQgZmlyZXMgdGhlIGV2ZW50LlxuICAgKiA8YnIvPiBgb3B0aW9ucy5xdWVzdGlvbmAgLSBUaGUgZXhwcmVzc2lvbiBxdWVzdGlvbi5cbiAgICogPGJyLz4gYG9wdGlvbnMudmFsdWVgIC0gVGhlIHF1ZXN0aW9uIHZhbHVlLlxuICAgKiA8YnIvPiBgb3B0aW9ucy5kaXNwbGF5VmFsdWVgIC0gdGhlIGRpc3BsYXkgdmFsdWUgdGhhdCB5b3UgY2FuIGNoYW5nZSBiZWZvcmUgcmVuZGVyaW5nLlxuICAgKi9cbiAgcHVibGljIG9uR2V0RXhwcmVzc2lvbkRpc3BsYXlWYWx1ZTogRXZlbnRCYXNlPFN1cnZleU1vZGVsPiA9IHRoaXMuYWRkRXZlbnQ8XG4gICAgU3VydmV5TW9kZWxcbiAgPigpO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIGNvbnN0cnVjdG9yKGpzb25PYmo6IGFueSA9IG51bGwpIHtcbiAgICBzdXBlcigpO1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIFN1cnZleU1vZGVsLnN0eWxlc01hbmFnZXIgPSBuZXcgU3R5bGVzTWFuYWdlcigpO1xuICAgIH1cbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwibG9nb1wiLCB0aGlzLCBmYWxzZSk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImNvbXBsZXRlZEh0bWxcIiwgdGhpcyk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImNvbXBsZXRlZEJlZm9yZUh0bWxcIiwgdGhpcyk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImxvYWRpbmdIdG1sXCIsIHRoaXMpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJzdGFydFN1cnZleVRleHRcIiwgdGhpcywgZmFsc2UsIHRydWUpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJwYWdlUHJldlRleHRcIiwgdGhpcywgZmFsc2UsIHRydWUpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJwYWdlTmV4dFRleHRcIiwgdGhpcywgZmFsc2UsIHRydWUpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJjb21wbGV0ZVRleHRcIiwgdGhpcywgZmFsc2UsIHRydWUpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJwcmV2aWV3VGV4dFwiLCB0aGlzLCBmYWxzZSwgdHJ1ZSk7XG4gICAgdGhpcy5jcmVhdGVMb2NhbGl6YWJsZVN0cmluZyhcImVkaXRUZXh0XCIsIHRoaXMsIGZhbHNlLCB0cnVlKTtcbiAgICB0aGlzLmNyZWF0ZUxvY2FsaXphYmxlU3RyaW5nKFwicXVlc3Rpb25UaXRsZVRlbXBsYXRlXCIsIHRoaXMsIHRydWUpO1xuXG4gICAgdGhpcy50ZXh0UHJlUHJvY2Vzc29yID0gbmV3IFRleHRQcmVQcm9jZXNzb3IoKTtcbiAgICB0aGlzLnRleHRQcmVQcm9jZXNzb3Iub25Qcm9jZXNzID0gKHRleHRWYWx1ZTogVGV4dFByZVByb2Nlc3NvclZhbHVlKSA9PiB7XG4gICAgICB0aGlzLmdldFByb2Nlc3NlZFRleHRWYWx1ZSh0ZXh0VmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5jcmVhdGVOZXdBcnJheShcbiAgICAgIFwicGFnZXNcIixcbiAgICAgICh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZG9PblBhZ2VBZGRlZCh2YWx1ZSk7XG4gICAgICB9LFxuICAgICAgKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5kb09uUGFnZVJlbW92ZWQodmFsdWUpO1xuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5jcmVhdGVOZXdBcnJheShcInRyaWdnZXJzXCIsICh2YWx1ZTogYW55KSA9PiB7XG4gICAgICB2YWx1ZS5zZXRPd25lcih0aGlzKTtcbiAgICB9KTtcbiAgICB0aGlzLmNyZWF0ZU5ld0FycmF5KFwiY2FsY3VsYXRlZFZhbHVlc1wiLCAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgdmFsdWUuc2V0T3duZXIodGhpcyk7XG4gICAgfSk7XG4gICAgdGhpcy5jcmVhdGVOZXdBcnJheShcImNvbXBsZXRlZEh0bWxPbkNvbmRpdGlvblwiLCAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgdmFsdWUubG9jT3duZXIgPSB0aGlzO1xuICAgIH0pO1xuICAgIHRoaXMuY3JlYXRlTmV3QXJyYXkoXCJuYXZpZ2F0ZVRvVXJsT25Db25kaXRpb25cIiwgKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgIHZhbHVlLmxvY093bmVyID0gdGhpcztcbiAgICB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyRnVuY3Rpb25PblByb3BlcnR5VmFsdWVDaGFuZ2VkKFwiZmlyc3RQYWdlSXNTdGFydGVkXCIsICgpID0+IHtcbiAgICAgIHRoaXMub25GaXJzdFBhZ2VJc1N0YXJ0ZWRDaGFuZ2VkKCk7XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcIm1vZGVcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5vbk1vZGVDaGFuZ2VkKCk7XG4gICAgfSk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcInByb2dyZXNzQmFyVHlwZVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVByb2dyZXNzVGV4dCgpO1xuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXJGdW5jdGlvbk9uUHJvcGVydGllc1ZhbHVlQ2hhbmdlZChcbiAgICAgIFtcInF1ZXN0aW9uU3RhcnRJbmRleFwiLCBcInJlcXVpcmVkVGV4dFwiLCBcInF1ZXN0aW9uVGl0bGVQYXR0ZXJuXCJdLFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLnJlc2V0VmlzaWJsZUluZGV4ZXMoKTtcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMub25HZXRRdWVzdGlvbk5vLm9uQ2FsbGJhY2tzQ2hhbmdlZCA9ICgpID0+IHtcbiAgICAgIHRoaXMucmVzZXRWaXNpYmxlSW5kZXhlcygpO1xuICAgIH07XG4gICAgdGhpcy5vblByb2dyZXNzVGV4dC5vbkNhbGxiYWNrc0NoYW5nZWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVByb2dyZXNzVGV4dCgpO1xuICAgIH07XG4gICAgdGhpcy5vblRleHRNYXJrZG93bi5vbkNhbGxiYWNrc0NoYW5nZWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgfTtcbiAgICB0aGlzLm9uR2V0UXVlc3Rpb25UaXRsZS5vbkNhbGxiYWNrc0NoYW5nZWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLmxvY1N0cnNDaGFuZ2VkKCk7XG4gICAgfTtcbiAgICB0aGlzLm9uQmVmb3JlQ3JlYXRpbmcoKTtcbiAgICBpZiAoanNvbk9iaikge1xuICAgICAgaWYgKHR5cGVvZiBqc29uT2JqID09PSBcInN0cmluZ1wiIHx8IGpzb25PYmogaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgICAganNvbk9iaiA9IEpTT04ucGFyc2UoanNvbk9iaiBhcyBzdHJpbmcpO1xuICAgICAgfVxuICAgICAgaWYgKGpzb25PYmogJiYganNvbk9iai5jbGllbnRJZCkge1xuICAgICAgICB0aGlzLmNsaWVudElkID0ganNvbk9iai5jbGllbnRJZDtcbiAgICAgIH1cbiAgICAgIHRoaXMuZnJvbUpTT04oanNvbk9iaik7XG4gICAgICBpZiAodGhpcy5zdXJ2ZXlJZCkge1xuICAgICAgICB0aGlzLmxvYWRTdXJ2ZXlGcm9tU2VydmljZSh0aGlzLnN1cnZleUlkLCB0aGlzLmNsaWVudElkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5vbkNyZWF0aW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgZXJyb3JzIG9uIGxvYWRpbmcgc3VydmV5IEpTT04uIElmIHRoZSBsaXN0IGlzIGVtcHR5IGFmdGVyIGxvYWRpbmcgYSBKU09OLCB0aGVuIHRoZSBKU09OIGlzIGNvcnJlY3QgYW5kIGhhcyBubyBlcnJvcnMuXG4gICAqIEBzZWUgSnNvbkVycm9yXG4gICAqL1xuICBwdWJsaWMganNvbkVycm9yczogQXJyYXk8SnNvbkVycm9yPiA9IG51bGw7XG5cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJzdXJ2ZXlcIjtcbiAgfVxuICBwcm90ZWN0ZWQgb25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lOiBzdHJpbmcsIG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBpZiAobmFtZSA9PT0gXCJxdWVzdGlvbnNPblBhZ2VNb2RlXCIpIHtcbiAgICAgIHRoaXMub25RdWVzdGlvbnNPblBhZ2VNb2RlQ2hhbmdlZChvbGRWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsaXN0IG9mIGFsbCBwYWdlcyBpbiB0aGUgc3VydmV5LCBpbmNsdWRpbmcgaW52aXNpYmxlIHBhZ2VzLlxuICAgKiBAc2VlIFBhZ2VNb2RlbFxuICAgKiBAc2VlIHZpc2libGVQYWdlc1xuICAgKi9cbiAgcHVibGljIGdldCBwYWdlcygpOiBBcnJheTxQYWdlTW9kZWw+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFnZXNcIik7XG4gIH1cbiAgcHVibGljIGdldENzcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmNzcztcbiAgfVxuICBwcml2YXRlIGNzc1ZhbHVlOiBhbnkgPSBudWxsO1xuICBwdWJsaWMgZ2V0IGNzcygpOiBhbnkge1xuICAgIGlmICghdGhpcy5jc3NWYWx1ZSkge1xuICAgICAgdGhpcy5jc3NWYWx1ZSA9IHt9O1xuICAgICAgdGhpcy5jb3B5Q3NzQ2xhc3Nlcyh0aGlzLmNzc1ZhbHVlLCBzdXJ2ZXlDc3MuZ2V0Q3NzKCkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jc3NWYWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IGNzcyh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy51cGRhdGVFbGVtZW50Q3NzKGZhbHNlKTtcbiAgICB0aGlzLm1lcmdlVmFsdWVzKHZhbHVlLCB0aGlzLmNzcyk7XG4gIH1cbiAgcHVibGljIGdldCBjc3NUaXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNzcy50aXRsZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGNzc05hdmlnYXRpb25Db21wbGV0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXROYXZpZ2F0aW9uQ3NzKFxuICAgICAgdGhpcy5jc3MubmF2aWdhdGlvbkJ1dHRvbixcbiAgICAgIHRoaXMuY3NzLm5hdmlnYXRpb24uY29tcGxldGVcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgY3NzTmF2aWdhdGlvblByZXZpZXcoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TmF2aWdhdGlvbkNzcyhcbiAgICAgIHRoaXMuY3NzLm5hdmlnYXRpb25CdXR0b24sXG4gICAgICB0aGlzLmNzcy5uYXZpZ2F0aW9uLnByZXZpZXdcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgY3NzTmF2aWdhdGlvbkVkaXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TmF2aWdhdGlvbkNzcyhcbiAgICAgIHRoaXMuY3NzLm5hdmlnYXRpb25CdXR0b24sXG4gICAgICB0aGlzLmNzcy5uYXZpZ2F0aW9uLmVkaXRcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgY3NzTmF2aWdhdGlvblByZXYoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TmF2aWdhdGlvbkNzcyhcbiAgICAgIHRoaXMuY3NzLm5hdmlnYXRpb25CdXR0b24sXG4gICAgICB0aGlzLmNzcy5uYXZpZ2F0aW9uLnByZXZcbiAgICApO1xuICB9XG4gIHB1YmxpYyBnZXQgY3NzTmF2aWdhdGlvblN0YXJ0KCkge1xuICAgIHJldHVybiB0aGlzLmdldE5hdmlnYXRpb25Dc3MoXG4gICAgICB0aGlzLmNzcy5uYXZpZ2F0aW9uQnV0dG9uLFxuICAgICAgdGhpcy5jc3MubmF2aWdhdGlvbi5zdGFydFxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCBjc3NOYXZpZ2F0aW9uTmV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXROYXZpZ2F0aW9uQ3NzKFxuICAgICAgdGhpcy5jc3MubmF2aWdhdGlvbkJ1dHRvbixcbiAgICAgIHRoaXMuY3NzLm5hdmlnYXRpb24ubmV4dFxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCBjb21wbGV0ZWRDc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IENzc0NsYXNzQnVpbGRlcigpLmFwcGVuZCh0aGlzLmNzcy5ib2R5KVxuICAgICAgLmFwcGVuZCh0aGlzLmNzcy5jb21wbGV0ZWRQYWdlKS50b1N0cmluZygpO1xuICB9XG4gIHByaXZhdGUgZ2V0TmF2aWdhdGlvbkNzcyhtYWluOiBzdHJpbmcsIGJ0bjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBDc3NDbGFzc0J1aWxkZXIoKS5hcHBlbmQobWFpbilcbiAgICAgIC5hcHBlbmQoYnRuKS50b1N0cmluZygpO1xuICB9XG4gIHByaXZhdGUgbGF6eVJlbmRlcmluZ1ZhbHVlOiBib29sZWFuO1xuICAvKipcbiAgICogQnkgZGVmYXVsdCBhbGwgcm93cyBhcmUgcmVuZGVyZWQgbm8gbWF0dGVycyBpZiB0aGV5IGFyZSB2aXNpYmxlIG9yIG5vdC5cbiAgICogU2V0IGl0IHRydWUsIGFuZCBzdXJ2ZXkgbWFya3VwIHJvd3Mgd2lsbCBiZSByZW5kZXJlZCBvbmx5IGlmIHRoZXkgYXJlIHZpc2libGUgaW4gdmlld3BvcnQuXG4gICAqIFRoaXMgZmVhdHVyZSBpcyBleHBlcmltYW50YWwgYW5kIG1pZ2h0IGRvIG5vdCBzdXBwb3J0IGFsbCB0aGUgdXNlIGNhc2VzLlxuICAgKi9cbiAgcHVibGljIGdldCBsYXp5UmVuZGVyaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxhenlSZW5kZXJpbmdWYWx1ZSA9PT0gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IGxhenlSZW5kZXJpbmcodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5sYXp5UmVuZGVyaW5nVmFsdWUgPSB2YWw7XG4gIH1cbiAgcHVibGljIGdldCBpc0xhenlSZW5kZXJpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubGF6eVJlbmRlcmluZyB8fCBzZXR0aW5ncy5sYXp5Um93c1JlbmRlcmluZztcbiAgfVxuICBwcml2YXRlIHVwZGF0ZUxhenlSZW5kZXJpbmdSb3dzT25SZW1vdmluZ0VsZW1lbnRzKCkge1xuICAgIGlmICghdGhpcy5pc0xhenlSZW5kZXJpbmcpIHJldHVybjtcbiAgICB2YXIgcGFnZSA9IHRoaXMuY3VycmVudFBhZ2U7XG4gICAgaWYgKCEhcGFnZSkge1xuICAgICAgc2Nyb2xsRWxlbWVudEJ5Q2hpbGRJZChwYWdlLmlkKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIGxpc3Qgb2YgdHJpZ2dlcnMgaW4gdGhlIHN1cnZleS5cbiAgICogQHNlZSBTdXJ2ZXlUcmlnZ2VyXG4gICAqL1xuICBwdWJsaWMgZ2V0IHRyaWdnZXJzKCk6IEFycmF5PFN1cnZleVRyaWdnZXI+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwidHJpZ2dlcnNcIik7XG4gIH1cbiAgcHVibGljIHNldCB0cmlnZ2Vycyh2YWw6IEFycmF5PFN1cnZleVRyaWdnZXI+KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwidHJpZ2dlcnNcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIGEgbGlzdCBvZiBjYWxjdWxhdGVkIHZhbHVlcyBpbiB0aGUgc3VydmV5LlxuICAgKiBAc2VlIENhbGN1bGF0ZWRWYWx1ZVxuICAgKi9cbiAgcHVibGljIGdldCBjYWxjdWxhdGVkVmFsdWVzKCk6IEFycmF5PENhbGN1bGF0ZWRWYWx1ZT4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJjYWxjdWxhdGVkVmFsdWVzXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY2FsY3VsYXRlZFZhbHVlcyh2YWw6IEFycmF5PENhbGN1bGF0ZWRWYWx1ZT4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjYWxjdWxhdGVkVmFsdWVzXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhbiBpZGVudGlmaWVyIG9mIGEgc3VydmV5IG1vZGVsIGxvYWRlZCBmcm9tIHRoZSBbYXBpLnN1cnZleWpzLmlvXShodHRwczovL2FwaS5zdXJ2ZXlqcy5pbykgc2VydmljZS4gV2hlbiBzcGVjaWZpZWQsIHRoZSBzdXJ2ZXkgSlNPTiBpcyBhdXRvbWF0aWNhbGx5IGxvYWRlZCBmcm9tIFthcGkuc3VydmV5anMuaW9dKGh0dHBzOi8vYXBpLnN1cnZleWpzLmlvKSBzZXJ2aWNlLlxuICAgKiBAc2VlIGxvYWRTdXJ2ZXlGcm9tU2VydmljZVxuICAgKiBAc2VlIG9uTG9hZGVkU3VydmV5RnJvbVNlcnZpY2VcbiAgICovXG4gIHB1YmxpYyBnZXQgc3VydmV5SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic3VydmV5SWRcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBzdXJ2ZXlJZCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInN1cnZleUlkXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhbiBpZGVudGlmaWVyIG9mIGEgc3VydmV5IG1vZGVsIHNhdmVkIHRvIHRoZSBbYXBpLnN1cnZleWpzLmlvXShodHRwczovL2FwaS5zdXJ2ZXlqcy5pbykgc2VydmljZS4gV2hlbiBzcGVjaWZpZWQsIHRoZSBzdXJ2ZXkgZGF0YSBpcyBhdXRvbWF0aWNhbGx5IHNhdmVkIHRvIHRoZSBbYXBpLnN1cnZleWpzLmlvXShodHRwczovL2FwaS5zdXJ2ZXlqcy5pbykgc2VydmljZS5cbiAgICogQHNlZSBvbkNvbXBsZXRlXG4gICAqIEBzZWUgc3VydmV5U2hvd0RhdGFTYXZpbmdcbiAgICovXG4gIHB1YmxpYyBnZXQgc3VydmV5UG9zdElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInN1cnZleVBvc3RJZFwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHN1cnZleVBvc3RJZCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInN1cnZleVBvc3RJZFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdXNlcidzIGlkZW50aWZpZXIgKGUuZy4sIGUtbWFpbCBvciB1bmlxdWUgY3VzdG9tZXIgaWQpIGluIHlvdXIgd2ViIGFwcGxpY2F0aW9uLlxuICAgKiBJZiB5b3UgbG9hZCBzdXJ2ZXkgb3IgcG9zdCBzdXJ2ZXkgcmVzdWx0cyBmcm9tL3RvIFthcGkuc3VydmV5anMuaW9dKGh0dHBzOi8vYXBpLnN1cnZleWpzLmlvKSBzZXJ2aWNlLCB0aGVuIHRoZSBsaWJyYXJ5IGRvIG5vdCBhbGxvdyB1c2VycyB0byBydW4gdGhlIHNhbWUgc3VydmV5IHRoZSBzZWNvbmQgdGltZS5cbiAgICogT24gdGhlIHNlY29uZCBydW4sIHRoZSB1c2VyIHdpbGwgc2VlIHRoZSBzdXJ2ZXkgY29tcGxldGUgcGFnZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgY2xpZW50SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2xpZW50SWRcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBjbGllbnRJZCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNsaWVudElkXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIGNvb2tpZSBuYW1lIHVzZWQgdG8gc2F2ZSBpbmZvcm1hdGlvbiBhYm91dCBjb21wbGV0aW5nIHRoZSBzdXJ2ZXkuXG4gICAqIElmIHRoZSBwcm9wZXJ0eSBpcyBub3QgZW1wdHksIGJlZm9yZSBzdGFydGluZyB0aGUgc3VydmV5LCB0aGUgU3VydmV5IGxpYnJhcnkgY2hlY2tzIGlmIHRoZSBjb29raWUgd2l0aCB0aGlzIG5hbWUgZXhpc3RzLlxuICAgKiBJZiBpdCBpcyBgdHJ1ZWAsIHRoZSBzdXJ2ZXkgZ29lcyB0byBjb21wbGV0ZSBtb2RlIGFuZCBhIHVzZXIgc2VlcyB0aGUgc3VydmV5IGNvbXBsZXRlIHBhZ2UuIE9uIGNvbXBsZXRpbmcgdGhlIHN1cnZleSB0aGUgY29va2llIHdpdGggdGhpcyBuYW1lIGlzIGNyZWF0ZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNvb2tpZU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY29va2llTmFtZVwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvb2tpZU5hbWUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjb29raWVOYW1lXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB3aGV0aGVyIHRvIHNhdmUgc3VydmV5IHJlc3VsdHMgb24gY29tcGxldGluZyBldmVyeSBwYWdlLiBJZiB0aGUgcHJvcGVydHkgdmFsdWUgaXMgc2V0IHRvIGB0cnVlYCwgdGhlIGBvblBhcnRpYWxTZW5kYCBldmVudCBpcyBmaXJlZC5cbiAgICogQHNlZSBvblBhcnRpYWxTZW5kXG4gICAqIEBzZWUgY2xpZW50SWRcbiAgICovXG4gIHB1YmxpYyBnZXQgc2VuZFJlc3VsdE9uUGFnZU5leHQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNlbmRSZXN1bHRPblBhZ2VOZXh0XCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNlbmRSZXN1bHRPblBhZ2VOZXh0KHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNlbmRSZXN1bHRPblBhZ2VOZXh0XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB3aGV0aGVyIHRvIHNob3cgdGhlIHByb2dyZXNzIG9uIHNhdmluZy9zZW5kaW5nIGRhdGEgaW50byB0aGUgW2FwaS5zdXJ2ZXlqcy5pb10oaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8pIHNlcnZpY2UuXG4gICAqIEBzZWUgc3VydmV5UG9zdElkXG4gICAqL1xuICBwdWJsaWMgZ2V0IHN1cnZleVNob3dEYXRhU2F2aW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzdXJ2ZXlTaG93RGF0YVNhdmluZ1wiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBzdXJ2ZXlTaG93RGF0YVNhdmluZyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzdXJ2ZXlTaG93RGF0YVNhdmluZ1wiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgd2hldGhlciB0aGUgZmlyc3QgaW5wdXQgaXMgZm9jdXNlZCBvbiBzaG93aW5nIGEgbmV4dCBvciBhIHByZXZpb3VzIHBhZ2UuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGZvY3VzRmlyc3RRdWVzdGlvbkF1dG9tYXRpYygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZm9jdXNGaXJzdFF1ZXN0aW9uQXV0b21hdGljXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgZm9jdXNGaXJzdFF1ZXN0aW9uQXV0b21hdGljKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImZvY3VzRmlyc3RRdWVzdGlvbkF1dG9tYXRpY1wiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgd2hldGhlciB0aGUgZmlyc3QgaW5wdXQgaXMgZm9jdXNlZCBpZiB0aGUgY3VycmVudCBwYWdlIGhhcyBlcnJvcnMuXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGBmYWxzZWAgKHRoZSBkZWZhdWx0IHZhbHVlIGlzIGB0cnVlYCkgaWYgeW91IGRvIG5vdCB3YW50IHRvIGJyaW5nIHRoZSBmb2N1cyB0byB0aGUgZmlyc3QgcXVlc3Rpb24gdGhhdCBoYXMgZXJyb3Igb24gdGhlIHBhZ2UuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGZvY3VzT25GaXJzdEVycm9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJmb2N1c09uRmlyc3RFcnJvclwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGZvY3VzT25GaXJzdEVycm9yKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImZvY3VzT25GaXJzdEVycm9yXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgbmF2aWdhdGlvbiBidXR0b25zIHBvc2l0aW9uLlxuICAgKiBQb3NzaWJsZSB2YWx1ZXM6ICdib3R0b20nIChkZWZhdWx0KSwgJ3RvcCcsICdib3RoJyBhbmQgJ25vbmUnLiBTZXQgaXQgdG8gJ25vbmUnIHRvIGhpZGUgJ1ByZXYnLCAnTmV4dCcgYW5kICdDb21wbGV0ZScgYnV0dG9ucy5cbiAgICogSXQgbWFrZXMgc2Vuc2UgaWYgeW91IGFyZSBnb2luZyB0byBjcmVhdGUgYSBjdXN0b20gbmF2aWdhdGlvbiwgaGF2ZSBvbmx5IGEgc2luZ2xlIHBhZ2UsIG9yIHRoZSBgZ29OZXh0UGFnZUF1dG9tYXRpY2AgcHJvcGVydHkgaXMgc2V0IHRvIGB0cnVlYC5cbiAgICogQHNlZSBnb05leHRQYWdlQXV0b21hdGljXG4gICAqIEBzZWUgc2hvd1ByZXZCdXR0b25cbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd05hdmlnYXRpb25CdXR0b25zKCk6IHN0cmluZyB8IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dOYXZpZ2F0aW9uQnV0dG9uc1wiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dOYXZpZ2F0aW9uQnV0dG9ucyh2YWw6IHN0cmluZyB8IGFueSkge1xuICAgIGlmICh2YWwgPT09IHRydWUgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbCA9IFwiYm90dG9tXCI7XG4gICAgfVxuICAgIGlmICh2YWwgPT09IGZhbHNlKSB7XG4gICAgICB2YWwgPSBcIm5vbmVcIjtcbiAgICB9XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd05hdmlnYXRpb25CdXR0b25zXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB3aGV0aGVyIHRoZSBTdXJ2ZXkgZGlzcGxheXMgXCJQcmV2XCIgYnV0dG9uIGluIGl0cyBwYWdlcy4gU2V0IGl0IHRvIGBmYWxzZWAgdG8gcHJldmVudCBlbmQtdXNlcnMgZnJvbSBnb2luZyBiYWNrIHRvIHRoZWlyIGFuc3dlcnMuXG4gICAqIEBzZWUgc2hvd05hdmlnYXRpb25CdXR0b25zXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dQcmV2QnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93UHJldkJ1dHRvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dQcmV2QnV0dG9uKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dQcmV2QnV0dG9uXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB3aGV0aGVyIHRoZSBTdXJ2ZXkgZGlzcGxheXMgc3VydmV5IHRpdGxlIGluIGl0cyBwYWdlcy4gU2V0IGl0IHRvIGBmYWxzZWAgdG8gaGlkZSBhIHN1cnZleSB0aXRsZS5cbiAgICogQHNlZSB0aXRsZVxuICAgKi9cbiAgcHVibGljIGdldCBzaG93VGl0bGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dUaXRsZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNob3dUaXRsZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93VGl0bGVcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHdoZXRoZXIgdGhlIFN1cnZleSBkaXNwbGF5cyBwYWdlIHRpdGxlcy4gU2V0IGl0IHRvIGBmYWxzZWAgdG8gaGlkZSBwYWdlIHRpdGxlcy5cbiAgICogQHNlZSBQYWdlTW9kZWwudGl0bGVcbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd1BhZ2VUaXRsZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dQYWdlVGl0bGVzXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd1BhZ2VUaXRsZXModmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1BhZ2VUaXRsZXNcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogT24gZmluaXNoaW5nIHRoZSBzdXJ2ZXkgdGhlIGNvbXBsZXRlIHBhZ2UgaXMgc2hvd24uIFNldCB0aGUgcHJvcGVydHkgdG8gYGZhbHNlYCwgdG8gaGlkZSB0aGUgY29tcGxldGUgcGFnZS5cbiAgICogQHNlZSBkYXRhXG4gICAqIEBzZWUgb25Db21wbGV0ZVxuICAgKiBAc2VlIG5hdmlnYXRlVG9VcmxcbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd0NvbXBsZXRlZFBhZ2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dDb21wbGV0ZWRQYWdlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd0NvbXBsZXRlZFBhZ2UodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd0NvbXBsZXRlZFBhZ2VcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gYSB1cmwgeW91IHdhbnQgdG8gbmF2aWdhdGUgYWZ0ZXIgYSB1c2VyIGNvbXBsZXRpbmcgdGhlIHN1cnZleS5cbiAgICogQnkgZGVmYXVsdCBpdCB1c2VzIGFmdGVyIGNhbGxpbmcgb25Db21wbGV0ZSBldmVudC4gSW4gY2FzZSBjYWxsaW5nIG9wdGlvbnMuc2hvd0RhdGFTYXZpbmcgY2FsbGJhY2sgaW4gb25Db21wbGV0ZSBldmVudCwgbmF2aWdhdGVUb1VybCB3aWxsIGJlIHVzZWQgb24gY2FsbGluZyBvcHRpb25zLnNob3dEYXRhU2F2aW5nU3VjY2VzcyBjYWxsYmFjay5cbiAgICovXG4gIHB1YmxpYyBnZXQgbmF2aWdhdGVUb1VybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJuYXZpZ2F0ZVRvVXJsXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbmF2aWdhdGVUb1VybCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm5hdmlnYXRlVG9VcmxcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIGEgbGlzdCBvZiBVUkwgY29uZGl0aW9uIGl0ZW1zLiBJZiB0aGUgZXhwcmVzc2lvbiBvZiB0aGlzIGl0ZW0gcmV0dXJucyBgdHJ1ZWAsIHRoZW4gc3VydmV5IHdpbGwgbmF2aWdhdGUgdG8gdGhlIGl0ZW0gVVJMLlxuICAgKiBAc2VlIFVybENvbmRpdGlvbkl0ZW1cbiAgICogQHNlZSBuYXZpZ2F0ZVRvVXJsXG4gICAqL1xuICBwdWJsaWMgZ2V0IG5hdmlnYXRlVG9VcmxPbkNvbmRpdGlvbigpOiBBcnJheTxVcmxDb25kaXRpb25JdGVtPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm5hdmlnYXRlVG9VcmxPbkNvbmRpdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IG5hdmlnYXRlVG9VcmxPbkNvbmRpdGlvbih2YWw6IEFycmF5PFVybENvbmRpdGlvbkl0ZW0+KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibmF2aWdhdGVUb1VybE9uQ29uZGl0aW9uXCIsIHZhbCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TmF2aWdhdGVUb1VybCgpOiBzdHJpbmcge1xuICAgIHZhciBpdGVtID0gdGhpcy5nZXRFeHByZXNzaW9uSXRlbU9uUnVuQ29uZGl0aW9uKFxuICAgICAgdGhpcy5uYXZpZ2F0ZVRvVXJsT25Db25kaXRpb25cbiAgICApO1xuICAgIHZhciB1cmwgPSAhIWl0ZW0gPyAoPFVybENvbmRpdGlvbkl0ZW0+aXRlbSkudXJsIDogdGhpcy5uYXZpZ2F0ZVRvVXJsO1xuICAgIGlmICghIXVybCkge1xuICAgICAgdXJsID0gdGhpcy5wcm9jZXNzVGV4dCh1cmwsIHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIHByaXZhdGUgbmF2aWdhdGVUbygpIHtcbiAgICB2YXIgdXJsID0gdGhpcy5nZXROYXZpZ2F0ZVRvVXJsKCk7XG4gICAgdmFyIG9wdGlvbnMgPSB7IHVybDogdXJsIH07XG4gICAgdGhpcy5vbk5hdmlnYXRlVG9VcmwuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICBpZiAoIW9wdGlvbnMudXJsIHx8IHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIgfHwgIXdpbmRvdy5sb2NhdGlvbilcbiAgICAgIHJldHVybjtcbiAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IG9wdGlvbnMudXJsO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIHJlcXVpcmVkIHF1ZXN0aW9uIG1hcmsuIFRoZSByZXF1aXJlZCBxdWVzdGlvbiBtYXJrIGlzIGEgY2hhciBvciBzdHJpbmcgdGhhdCBpcyByZW5kZXJlZCBpbiB0aGUgcmVxdWlyZWQgcXVlc3Rpb25zJyB0aXRsZXMuXG4gICAqIEBzZWUgUXVlc3Rpb24udGl0bGVcbiAgICovXG4gIHB1YmxpYyBnZXQgcmVxdWlyZWRUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJlcXVpcmVkVGV4dFwiLCBcIipcIik7XG4gIH1cbiAgcHVibGljIHNldCByZXF1aXJlZFRleHQodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyZXF1aXJlZFRleHRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHdoZXRoZXIgdG8gaGlkZSBhbGwgcmVxdWlyZWQgZXJyb3JzLlxuICAgKi9cbiAgcHVibGljIGhpZGVSZXF1aXJlZEVycm9yczogYm9vbGVhbiA9IGZhbHNlO1xuICBiZWZvcmVTZXR0aW5nUXVlc3Rpb25FcnJvcnMoXG4gICAgcXVlc3Rpb246IElRdWVzdGlvbixcbiAgICBlcnJvcnM6IEFycmF5PFN1cnZleUVycm9yPlxuICApOiB2b2lkIHtcbiAgICB0aGlzLm1hYWtlUmVxdWlyZWRFcnJvcnNJbnZpc2liZ2xlKGVycm9ycyk7XG4gICAgdGhpcy5vblNldHRpbmdRdWVzdGlvbkVycm9ycy5maXJlKHRoaXMsIHtcbiAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgIGVycm9yczogZXJyb3JzLFxuICAgIH0pO1xuICB9XG4gIGJlZm9yZVNldHRpbmdQYW5lbEVycm9ycyhxdWVzdGlvbjogSVBhbmVsLCBlcnJvcnM6IEFycmF5PFN1cnZleUVycm9yPik6IHZvaWQge1xuICAgIHRoaXMubWFha2VSZXF1aXJlZEVycm9yc0ludmlzaWJnbGUoZXJyb3JzKTtcbiAgfVxuICBwcml2YXRlIG1hYWtlUmVxdWlyZWRFcnJvcnNJbnZpc2liZ2xlKGVycm9yczogQXJyYXk8U3VydmV5RXJyb3I+KSB7XG4gICAgaWYgKCF0aGlzLmhpZGVSZXF1aXJlZEVycm9ycykgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXJyb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZXJUeXBlID0gZXJyb3JzW2ldLmdldEVycm9yVHlwZSgpO1xuICAgICAgaWYgKGVyVHlwZSA9PSBcInJlcXVpcmVkXCIgfHwgZXJUeXBlID09IFwicmVxdWlyZW9uZWFuc3dlclwiKSB7XG4gICAgICAgIGVycm9yc1tpXS52aXNpYmxlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIGZpcnN0IHF1ZXN0aW9uIGluZGV4LiBUaGUgZmlyc3QgcXVlc3Rpb24gaW5kZXggaXMgJzEnIGJ5IGRlZmF1bHQuIFlvdSBtYXkgc3RhcnQgaXQgZnJvbSAnMTAwJyBvciBmcm9tICdBJywgYnkgc2V0dGluZyAnMTAwJyBvciAnQScgdG8gdGhpcyBwcm9wZXJ0eS5cbiAgICogWW91IGNhbiBzZXQgdGhlIHN0YXJ0IGluZGV4IHRvIFwiKDEpXCIgb3IgXCIjIEEpXCIgb3IgXCJhKVwiIHRvIHJlbmRlciBxdWVzdGlvbiBudW1iZXIgYXMgKDEpLCAjIEEpIGFuZCBhKSBhY2NvcmRpbmdseS5cbiAgICogQHNlZSBRdWVzdGlvbi50aXRsZVxuICAgKiBAc2VlIHJlcXVpcmVkVGV4dFxuICAgKi9cbiAgcHVibGljIGdldCBxdWVzdGlvblN0YXJ0SW5kZXgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicXVlc3Rpb25TdGFydEluZGV4XCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcXVlc3Rpb25TdGFydEluZGV4KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicXVlc3Rpb25TdGFydEluZGV4XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB3aGV0aGVyIHRoZSBcIk90aGVyc1wiIG9wdGlvbiB0ZXh0IGlzIHN0b3JlZCBhcyBxdWVzdGlvbiBjb21tZW50LlxuICAgKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBlbnRlcmVkIHRleHQgaW4gdGhlIFwiT3RoZXJzXCIgaW5wdXQgaW4gdGhlIGNoZWNrYm94L3JhZGlvZ3JvdXAvZHJvcGRvd24gaXMgc3RvcmVkIGFzIGBcInF1ZXN0aW9uIG5hbWUgXCIgKyBcIi1Db21tZW50XCJgLiBUaGUgdmFsdWUgaXRzZWxmIGlzIGBcInF1ZXN0aW9uIG5hbWVcIjogXCJvdGhlcnNcImAuXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGBmYWxzZWAsIHRvIHN0b3JlIHRoZSBlbnRlcmVkIHRleHQgZGlyZWN0bHkgaW4gdGhlIGBcInF1ZXN0aW9uIG5hbWVcImAga2V5LlxuICAgKiBAc2VlIGNvbW1lbnRQcmVmaXhcbiAgICovXG4gIHB1YmxpYyBnZXQgc3RvcmVPdGhlcnNBc0NvbW1lbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInN0b3JlT3RoZXJzQXNDb21tZW50XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc3RvcmVPdGhlcnNBc0NvbW1lbnQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic3RvcmVPdGhlcnNBc0NvbW1lbnRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBkZWZhdWx0IG1heGltdW0gbGVuZ3RoIGZvciBxdWVzdGlvbnMgbGlrZSB0ZXh0IGFuZCBjb21tZW50LCBpbmNsdWRpbmcgbWF0cml4IGNlbGwgcXVlc3Rpb25zLlxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgMGAsIHRoYXQgbWVhbnMgdGhhdCB0aGUgdGV4dCBhbmQgY29tbWVudCBoYXZlIHRoZSBzYW1lIG1heCBsZW5ndGggYXMgdGhlIHN0YW5kYXJkIEhUTUwgaW5wdXQgLSA1MjQyODggY2hhcmFjdGVyczogaHR0cHM6Ly93d3cudzNzY2hvb2xzLmNvbS90YWdzL2F0dF9pbnB1dF9tYXhsZW5ndGguYXNwLlxuICAgKiBAc2VlIG1heE90aGVyc0xlbmd0aFxuICAgKi9cbiAgcHVibGljIGdldCBtYXhUZXh0TGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1heFRleHRMZW5ndGhcIik7XG4gIH1cbiAgcHVibGljIHNldCBtYXhUZXh0TGVuZ3RoKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF4VGV4dExlbmd0aFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIGRlZmF1bHQgbWF4aW11bSBsZW5ndGggZm9yIHF1ZXN0aW9uIGNvbW1lbnRzIGFuZCBvdGhlcnNcbiAgICpcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgYDBgLCB0aGF0IG1lYW5zIHRoYXQgdGhlIHF1ZXN0aW9uIGNvbW1lbnRzIGhhdmUgdGhlIHNhbWUgbWF4IGxlbmd0aCBhcyB0aGUgc3RhbmRhcmQgSFRNTCBpbnB1dCAtIDUyNDI4OCBjaGFyYWN0ZXJzOiBodHRwczovL3d3dy53M3NjaG9vbHMuY29tL3RhZ3MvYXR0X2lucHV0X21heGxlbmd0aC5hc3AuXG4gICAqIEBzZWUgUXVlc3Rpb24uaGFzQ29tbWVudFxuICAgKiBAc2VlIFF1ZXN0aW9uLmhhc090aGVyXG4gICAqIEBzZWUgbWF4VGV4dExlbmd0aFxuICAgKi9cbiAgcHVibGljIGdldCBtYXhPdGhlcnNMZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4T3RoZXJzTGVuZ3RoXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4T3RoZXJzTGVuZ3RoKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF4T3RoZXJzTGVuZ3RoXCIsIHZhbCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBvciBzZXMgd2hldGhlciBhIHVzZXIgY2FuIG5hdmlnYXRlIHRoZSBuZXh0IHBhZ2UgYXV0b21hdGljYWxseSBhZnRlciBhbnN3ZXJpbmcgYWxsIHRoZSBxdWVzdGlvbnMgb24gYSBwYWdlIHdpdGhvdXQgcHJlc3NpbmcgdGhlIFwiTmV4dFwiIGJ1dHRvbi5cbiAgICogVGhlIGF2YWlsYWJsZSBvcHRpb25zOlxuICAgKlxuICAgKiAtIGB0cnVlYCAtIG5hdmlnYXRlIHRoZSBuZXh0IHBhZ2UgYW5kIHN1Ym1pdCBzdXJ2ZXkgZGF0YSBhdXRvbWF0aWNhbGx5LlxuICAgKiAtIGBhdXRvZ29uZXh0YCAtIG5hdmlnYXRlIHRoZSBuZXh0IHBhZ2UgYXV0b21hdGljYWxseSBidXQgZG8gbm90IHN1Ym1pdCBzdXJ2ZXkgZGF0YS5cbiAgICogLSBgZmFsc2VgIC0gZG8gbm90IG5hdmlnYXRlIHRoZSBuZXh0IHBhZ2UgYW5kIGRvIG5vdCBzdWJtaXQgc3VydmV5IGRhdGEgYXV0b21hdGljYWxseS5cbiAgICogQHNlZSBzaG93TmF2aWdhdGlvbkJ1dHRvbnNcbiAgICovXG4gIHB1YmxpYyBnZXQgZ29OZXh0UGFnZUF1dG9tYXRpYygpOiBib29sZWFuIHwgXCJhdXRvZ29uZXh0XCIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJnb05leHRQYWdlQXV0b21hdGljXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGdvTmV4dFBhZ2VBdXRvbWF0aWModmFsOiBib29sZWFuIHwgXCJhdXRvZ29uZXh0XCIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJnb05leHRQYWdlQXV0b21hdGljXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB3aGV0aGVyIGEgc3VydmV5IGlzIGF1dG9tYXRpY2FsbHkgY29tcGxldGVkIHdoZW4gYGdvTmV4dFBhZ2VBdXRvbWF0aWMgPSB0cnVlYC4gU2V0IGl0IHRvIGBmYWxzZWAgaWYgeW91IGRvIG5vdCB3YW50IHRvIHN1Ym1pdCBzdXJ2ZXkgYXV0b21hdGljYWxseSBvbiBjb21wbGV0aW5nIHRoZSBsYXN0IHN1cnZleSBwYWdlLlxuICAgKiBAc2VlIGdvTmV4dFBhZ2VBdXRvbWF0aWNcbiAgICovXG4gIHB1YmxpYyBnZXQgYWxsb3dDb21wbGV0ZVN1cnZleUF1dG9tYXRpYygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dDb21wbGV0ZVN1cnZleUF1dG9tYXRpY1wiLCB0cnVlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGFsbG93Q29tcGxldGVTdXJ2ZXlBdXRvbWF0aWModmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYWxsb3dDb21wbGV0ZVN1cnZleUF1dG9tYXRpY1wiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSB2YWx1ZSB0aGF0IHNwZWNpZmllcyBob3cgdGhlIHN1cnZleSB2YWxpZGF0ZXMgdGhlIHF1ZXN0aW9uIGFuc3dlcnMuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOlxuICAgKlxuICAgKiAtIGBvbk5leHRQYWdlYCAoZGVmYXVsdCkgLSBjaGVjayBlcnJvcnMgb24gbmF2aWdhdGluZyB0byB0aGUgbmV4dCBwYWdlIG9yIG9uIGNvbXBsZXRpbmcgdGhlIHN1cnZleS5cbiAgICogLSBgb25WYWx1ZUNoYW5nZWRgIC0gY2hlY2sgZXJyb3JzIG9uIGV2ZXJ5IHF1ZXN0aW9uIHZhbHVlIChpLmUuLCBhbnN3ZXIpIGNoYW5naW5nLlxuICAgKiAtIGBvblZhbHVlQ2hhbmdpbmdgIC0gY2hlY2sgZXJyb3JzIGJlZm9yZSBzZXR0aW5nIHZhbHVlIGludG8gc3VydmV5LiBJZiB0aGVyZSBpcyBhbiBlcnJvciwgdGhlbiBzdXJ2ZXkgZGF0YSBpcyBub3QgY2hhbmdlZCwgYnV0IHF1ZXN0aW9uIHZhbHVlIHdpbGwgYmUga2VlcGVkLlxuICAgKiAtIGBvbkNvbXBsZXRlYCAtIHRvIHZhbGlkYXRlIGFsbCB2aXNpYmxlIHF1ZXN0aW9ucyBvbiBjb21wbGV0ZSBidXR0b24gY2xpY2suIElmIHRoZXJlIGFyZSBlcnJvcnMgb24gcHJldmlvdXMgcGFnZXMsIHRoZW4gdGhlIHBhZ2Ugd2l0aCB0aGUgZmlyc3QgZXJyb3IgYmVjb21lcyB0aGUgY3VycmVudC5cbiAgICovXG4gIHB1YmxpYyBnZXQgY2hlY2tFcnJvcnNNb2RlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNoZWNrRXJyb3JzTW9kZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNoZWNrRXJyb3JzTW9kZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNoZWNrRXJyb3JzTW9kZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgdGV4dCBhcmVhIG9mIFtjb21tZW50XShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeT9pZD1xdWVzdGlvbmNvbW1lbnRtb2RlbCkgcXVlc3Rpb25zL2VsZW1lbnRzIGF1dG9tYXRpY2FsbHkgZXhwYW5kcyBpdHMgaGVpZ2h0IHRvIGF2b2lkIHRoZSB2ZXJ0aWNhbCBzY3JvbGxiYXIgYW5kIHRvIGRpc3BsYXkgdGhlIGVudGlyZSBtdWx0aS1saW5lIGNvbnRlbnRzIGVudGVyZWQgYnkgcmVzcG9uZGVudHMuXG4gICAqIERlZmF1bHQgdmFsdWUgaXMgZmFsc2UuXG4gICAqIEBzZWUgUXVlc3Rpb25Db21tZW50TW9kZWwuYXV0b0dyb3dcbiAgICovXG4gIHB1YmxpYyBnZXQgYXV0b0dyb3dDb21tZW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhdXRvR3Jvd0NvbW1lbnRcIik7XG4gIH1cbiAgcHVibGljIHNldCBhdXRvR3Jvd0NvbW1lbnQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiYXV0b0dyb3dDb21tZW50XCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIHZhbHVlIHRoYXQgc3BlY2lmaWVzIGhvdyB0aGUgc3VydmV5IHVwZGF0ZXMgaXRzIHF1ZXN0aW9ucycgdGV4dCB2YWx1ZXMuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOlxuICAgKlxuICAgKiAtIGBvbkJsdXJgIChkZWZhdWx0KSAtIHRoZSB2YWx1ZSBpcyB1cGRhdGVkIGFmdGVyIGFuIGlucHV0IGxvc2VzIHRoZSBmb2N1cy5cbiAgICogLSBgb25UeXBpbmdgIC0gdXBkYXRlIHRoZSB2YWx1ZSBvZiB0ZXh0IHF1ZXN0aW9ucywgXCJ0ZXh0XCIgYW5kIFwiY29tbWVudFwiLCBvbiBldmVyeSBrZXkgcHJlc3MuXG4gICAqXG4gICAqIE5vdGUsIHRoYXQgc2V0dGluZyB0byBcIm9uVHlwaW5nXCIgbWF5IGxlYWQgdG8gYSBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiwgaW4gY2FzZSB5b3UgaGF2ZSBtYW55IGV4cHJlc3Npb25zIGluIHRoZSBzdXJ2ZXkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHRleHRVcGRhdGVNb2RlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInRleHRVcGRhdGVNb2RlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgdGV4dFVwZGF0ZU1vZGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ0ZXh0VXBkYXRlTW9kZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSB2YWx1ZSB0aGF0IHNwZWNpZmllcyBob3cgdGhlIGludmlzaWJsZSBkYXRhIGlzIGluY2x1ZGVkIGluIHN1cnZleSBkYXRhLlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZTpcbiAgICpcbiAgICogLSBgbm9uZWAgLSBpbmNsdWRlIHRoZSBpbnZpc2libGUgdmFsdWVzIGludG8gdGhlIHN1cnZleSBkYXRhLlxuICAgKiAtIGBvbkhpZGRlbmAgLSBjbGVhciB0aGUgcXVlc3Rpb24gdmFsdWUgd2hlbiBpdCBiZWNvbWVzIGludmlzaWJsZS4gSWYgYSBxdWVzdGlvbiBoYXMgdmFsdWUgYW5kIGl0IHdhcyBpbnZpc2libGUgaW5pdGlhbGx5IHRoZW4gc3VydmV5IGNsZWFycyB0aGUgdmFsdWUgb24gY29tcGxldGluZy5cbiAgICogLSBgb25IaWRkZW5Db250YWluZXJgIC0gY2xlYXIgdGhlIHF1ZXN0aW9uIHZhbHVlIHdoZW4gaXQgb3IgaXRzIHBhcmVudCAocGFnZSBvciBwYW5lbCkgYmVjb21lcyBpbnZpc2libGUuIElmIGEgcXVlc3Rpb24gaGFzIHZhbHVlIGFuZCBpdCB3YXMgaW52aXNpYmxlIGluaXRpYWxseSB0aGVuIHN1cnZleSBjbGVhcnMgdGhlIHZhbHVlIG9uIGNvbXBsZXRpbmcuXG4gICAqIC0gYG9uQ29tcGxldGVgIChkZWZhdWx0KSAtIGNsZWFyIGludmlzaWJsZSBxdWVzdGlvbiB2YWx1ZXMgb24gc3VydmV5IGNvbXBsZXRlLiBJbiB0aGlzIGNhc2UsIHRoZSBpbnZpc2libGUgcXVlc3Rpb25zIHdpbGwgbm90IGJlIHN0b3JlZCBvbiB0aGUgc2VydmVyLlxuICAgKiBAc2VlIFF1ZXN0aW9uLnZpc2libGVcbiAgICogQHNlZSBvbkNvbXBsZXRlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNsZWFySW52aXNpYmxlVmFsdWVzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNsZWFySW52aXNpYmxlVmFsdWVzXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgY2xlYXJJbnZpc2libGVWYWx1ZXModmFsOiBhbnkpIHtcbiAgICBpZiAodmFsID09PSB0cnVlKSB2YWwgPSBcIm9uQ29tcGxldGVcIjtcbiAgICBpZiAodmFsID09PSBmYWxzZSkgdmFsID0gXCJub25lXCI7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiY2xlYXJJbnZpc2libGVWYWx1ZXNcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogQ2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHJlbW92ZSBhbGwgcXVlc3Rpb24gdmFsdWVzIGZyb20gdGhlIHN1cnZleSwgdGhhdCBlbmQtdXNlciB3aWxsIG5vdCBiZSBhYmxlIHRvIGVudGVyLlxuICAgKiBGb3IgZXhhbXBsZSB0aGUgdmFsdWUgdGhhdCBkb2Vzbid0IGV4aXN0cyBpbiBhIHJhZGlvZ3JvdXAvZHJvcGRvd24vY2hlY2tib3ggY2hvaWNlcyBvciBtYXRyaXggcm93cy9jb2x1bW5zLlxuICAgKiBQbGVhc2Ugbm90ZSwgdGhpcyBmdW5jdGlvbiBkb2Vzbid0IGNsZWFyIHZhbHVlcyBmb3IgaW52aXNpYmxlIHF1ZXN0aW9ucyBvciB2YWx1ZXMgdGhhdCBkb2Vzbid0IGFzc29jaWF0ZWQgd2l0aCBxdWVzdGlvbnMuXG4gICAqIEluIGZhY3QgdGhpcyBmdW5jdGlvbiBqdXN0IGNhbGwgY2xlYXJJbmNvcnJlY3RWYWx1ZXMgZnVuY3Rpb24gb2YgYWxsIHF1ZXN0aW9ucyBpbiB0aGUgc3VydmV5XG4gICAqIEBwYXJhbSByZW1vdmVOb25FeGlzaW5nUm9vdEtleXMgLSBzZXQgdGhpcyBwYXJhbWV0ZXIgdG8gdHJ1ZSB0byByZW1vdmUga2V5cyBmcm9tIHN1cnZleS5kYXRhIHRoYXQgZG9lc24ndCBoYXZlIGNvcnJlc3BvbmRlZCBxdWVzdGlvbnMgYW5kIGNhbGN1bGF0ZWQgdmFsdWVzXG4gICAqIEBzZWUgUXVlc3Rpb24uY2xlYXJJbmNvcnJlY3RWYWx1ZXNcbiAgICogQHNlZSBQYWdlLmNsZWFySW5jb3JyZWN0VmFsdWVzXG4gICAqIEBzZWUgUGFuZWwuY2xlYXJJbmNvcnJlY3RWYWx1ZXNcbiAgICovXG4gIHB1YmxpYyBjbGVhckluY29ycmVjdFZhbHVlcyhyZW1vdmVOb25FeGlzaW5nUm9vdEtleXM6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYWdlc1tpXS5jbGVhckluY29ycmVjdFZhbHVlcygpO1xuICAgIH1cbiAgICBpZiAoIXJlbW92ZU5vbkV4aXNpbmdSb290S2V5cykgcmV0dXJuO1xuICAgIHZhciBkYXRhID0gdGhpcy5kYXRhO1xuICAgIHZhciBoYXNDaGFuZ2VzID0gZmFsc2U7XG4gICAgZm9yICh2YXIga2V5IGluIGRhdGEpIHtcbiAgICAgIGlmICghIXRoaXMuZ2V0UXVlc3Rpb25CeVZhbHVlTmFtZShrZXkpKSBjb250aW51ZTtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc2NvcnJlY3RWYWx1ZVdpdGhQb3N0UHJlZml4KGtleSwgc2V0dGluZ3MuY29tbWVudFByZWZpeCkgfHxcbiAgICAgICAgdGhpcy5pc2NvcnJlY3RWYWx1ZVdpdGhQb3N0UHJlZml4KGtleSwgc2V0dGluZ3MubWF0cml4VG90YWxWYWx1ZVBvc3RGaXgpXG4gICAgICApXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgdmFyIGNhbGNWYWx1ZSA9IHRoaXMuZ2V0Q2FsY3VsYXRlZFZhbHVlQnlOYW1lKGtleSk7XG4gICAgICBpZiAoISFjYWxjVmFsdWUgJiYgY2FsY1ZhbHVlLmluY2x1ZGVJbnRvUmVzdWx0KSBjb250aW51ZTtcbiAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuICAgICAgZGVsZXRlIGRhdGFba2V5XTtcbiAgICB9XG4gICAgaWYgKGhhc0NoYW5nZXMpIHtcbiAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgaXNjb3JyZWN0VmFsdWVXaXRoUG9zdFByZWZpeChcbiAgICBrZXk6IHN0cmluZyxcbiAgICBwb3N0UHJlZml4OiBzdHJpbmdcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKGtleS5pbmRleE9mKHBvc3RQcmVmaXgpICE9PSBrZXkubGVuZ3RoIC0gcG9zdFByZWZpeC5sZW5ndGgpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICEhdGhpcy5nZXRRdWVzdGlvbkJ5VmFsdWVOYW1lKFxuICAgICAga2V5LnN1YnN0cigwLCBrZXkuaW5kZXhPZihwb3N0UHJlZml4KSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgc3VydmV5IGxvY2FsZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXQgaXMgZW1wdHksIHRoaXMgbWVhbnMgdGhlICdlbicgbG9jYWxlIGlzIHVzZWQuXG4gICAqIFlvdSBjYW4gc2V0IGl0IHRvICdkZScgLSBHZXJtYW4sICdmcicgLSBGcmVuY2ggYW5kIHNvIG9uLiBUaGUgbGlicmFyeSBoYXMgYnVpbHQtaW4gbG9jYWxpemF0aW9uIGZvciBzZXZlcmFsIGxhbmd1YWdlcy4gVGhlIGxpYnJhcnkgaGFzIGEgbXVsdGktbGFuZ3VhZ2Ugc3VwcG9ydCBhcyB3ZWxsLlxuICAgKi9cbiAgcHVibGljIGdldCBsb2NhbGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbGVWYWx1ZTtcbiAgfVxuICBwdWJsaWMgc2V0IGxvY2FsZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgc3VydmV5TG9jYWxpemF0aW9uLmN1cnJlbnRMb2NhbGUgPSB2YWx1ZTtcbiAgICB0aGlzLmxvY2FsZVZhbHVlID0gc3VydmV5TG9jYWxpemF0aW9uLmN1cnJlbnRMb2NhbGU7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibG9jYWxlXCIsIHRoaXMubG9jYWxlVmFsdWUpO1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgdGhpcy5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIHRoaXMubG9jYWxlQ2hhbmdlZCgpO1xuICAgIHRoaXMub25Mb2NhbGVDaGFuZ2VkRXZlbnQuZmlyZSh0aGlzLCB2YWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gYXJyYXkgb2YgbG9jYWxlcyB0aGF0IGFyZSB1c2VkIGluIHRoZSBzdXJ2ZXkncyB0cmFuc2xhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBnZXRVc2VkTG9jYWxlcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgbG9jcyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgdGhpcy5hZGRVc2VkTG9jYWxlcyhsb2NzKTtcbiAgICAvL1JlcGxhY2UgdGhlIGRlZmF1bHQgbG9jYWxlIHdpdGggdGhlIHJlYWwgb25lXG4gICAgdmFyIGluZGV4ID0gbG9jcy5pbmRleE9mKFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgdmFyIGRlZmF1bHRMb2MgPSBzdXJ2ZXlMb2NhbGl6YXRpb24uZGVmYXVsdExvY2FsZTtcbiAgICAgIC8vUmVtb3ZlIHRoZSBkZWZhdWx0TG9jXG4gICAgICB2YXIgZGVmSW5kZXggPSBsb2NzLmluZGV4T2YoZGVmYXVsdExvYyk7XG4gICAgICBpZiAoZGVmSW5kZXggPiAtMSkge1xuICAgICAgICBsb2NzLnNwbGljZShkZWZJbmRleCwgMSk7XG4gICAgICB9XG4gICAgICBpbmRleCA9IGxvY3MuaW5kZXhPZihcImRlZmF1bHRcIik7XG4gICAgICBsb2NzW2luZGV4XSA9IGRlZmF1bHRMb2M7XG4gICAgfVxuICAgIHJldHVybiBsb2NzO1xuICB9XG4gIHB1YmxpYyBsb2NhbGVDaGFuZ2VkKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYWdlc1tpXS5sb2NhbGVDaGFuZ2VkKCk7XG4gICAgfVxuICB9XG4gIC8vSUxvY2FsaXphYmxlT3duZXJcbiAgZ2V0TG9jYWxlKCkge1xuICAgIHJldHVybiB0aGlzLmxvY2FsZTtcbiAgfVxuICBwdWJsaWMgbG9jU3Ryc0NoYW5nZWQoKSB7XG4gICAgc3VwZXIubG9jU3Ryc0NoYW5nZWQoKTtcbiAgICAvL0RvIG5vdCBzZXQgY3VycmVudCBwYWdlIGlmIGl0IGlzIG5vdCBzZXQgeWV0LlxuICAgIC8vQXQgZmlyc3Qgd2UgZG8gbm90IG5lZWQgdGhpcywgYXQgc2Vjb25kIGl0IGNyZWF0ZXMgaXNzdWVzIHdpdGggVnVlIENMSSBwcm9qZWN0c1xuICAgIC8vTW9yZSBpbmZvcm1hdGlvbiBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vc3VydmV5anMvc3VydmV5LWxpYnJhcnkvaXNzdWVzLzI1OTlcbiAgICBpZiAoIXRoaXMuY3VycmVudFBhZ2VWYWx1ZSkgcmV0dXJuO1xuICAgIHRoaXMudXBkYXRlUHJvZ3Jlc3NUZXh0KCk7XG4gICAgdmFyIHBhZ2UgPSB0aGlzLmFjdGl2ZVBhZ2U7XG4gICAgaWYgKCEhcGFnZSkge1xuICAgICAgcGFnZS5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRNYXJrZG93bkh0bWwodGV4dDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFN1cnZleU1hcmtkb3duSHRtbCh0aGlzLCB0ZXh0LCBuYW1lKTtcbiAgfVxuICBwdWJsaWMgZ2V0UmVuZGVyZXIobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSZW5kZXJlckZvclN0cmluZyh0aGlzLCBuYW1lKTtcbiAgfVxuICBwdWJsaWMgZ2V0UmVuZGVyZXJDb250ZXh0KGxvY1N0cjogTG9jYWxpemFibGVTdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSZW5kZXJlckNvbnRleHRGb3JTdHJpbmcodGhpcywgbG9jU3RyKTtcbiAgfVxuICBwdWJsaWMgZ2V0UmVuZGVyZXJGb3JTdHJpbmcoZWxlbWVudDogQmFzZSwgbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCByZW5kZXJBcyA9IHRoaXMuZ2V0QnVpbHRJblJlbmRlcmVyRm9yU3RyaW5nKGVsZW1lbnQsIG5hbWUpO1xuICAgIHZhciBvcHRpb25zID0geyBlbGVtZW50OiBlbGVtZW50LCBuYW1lOiBuYW1lLCByZW5kZXJBczogcmVuZGVyQXMgfTtcbiAgICB0aGlzLm9uVGV4dFJlbmRlckFzLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMucmVuZGVyQXM7XG4gIH1cbiAgcHVibGljIGdldFJlbmRlcmVyQ29udGV4dEZvclN0cmluZyhlbGVtZW50OiBCYXNlLCBsb2NTdHI6IExvY2FsaXphYmxlU3RyaW5nKSB7XG4gICAgcmV0dXJuIGxvY1N0cjtcbiAgfVxuICBnZXRFeHByZXNzaW9uRGlzcGxheVZhbHVlKFxuICAgIHF1ZXN0aW9uOiBJUXVlc3Rpb24sXG4gICAgdmFsdWU6IGFueSxcbiAgICBkaXNwbGF5VmFsdWU6IHN0cmluZ1xuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBkaXNwbGF5VmFsdWU6IGRpc3BsYXlWYWx1ZSxcbiAgICB9O1xuICAgIHRoaXMub25HZXRFeHByZXNzaW9uRGlzcGxheVZhbHVlLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMuZGlzcGxheVZhbHVlO1xuICB9XG4gIHByaXZhdGUgZ2V0QnVpbHRJblJlbmRlcmVyRm9yU3RyaW5nKGVsZW1lbnQ6IEJhc2UsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKSByZXR1cm4gTG9jYWxpemFibGVTdHJpbmcuZWRpdGFibGVSZW5kZXJlcjtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHB1YmxpYyBnZXRQcm9jZXNzZWRUZXh0KHRleHQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnByb2Nlc3NUZXh0KHRleHQsIHRydWUpO1xuICB9XG4gIGdldExvY1N0cmluZyhzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKHN0cik7XG4gIH1cbiAgLy9JU3VydmV5RXJyb3JPd25lclxuICBnZXRFcnJvckN1c3RvbVRleHQodGV4dDogc3RyaW5nLCBlcnJvcjogU3VydmV5RXJyb3IpOiBzdHJpbmcge1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgdGV4dDogdGV4dCxcbiAgICAgIG5hbWU6IGVycm9yLmdldEVycm9yVHlwZSgpLFxuICAgICAgZXJyb3I6IGVycm9yLFxuICAgIH07XG4gICAgdGhpcy5vbkVycm9yQ3VzdG9tVGV4dC5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLnRleHQ7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRleHQgdGhhdCBpcyBkaXNwbGF5ZWQgd2hlbiB0aGVyZSBhcmUgbm8gYW55IHZpc2libGUgcGFnZXMgYW5kIHF1ZXN0aW9uYS5cbiAgICovXG4gIHB1YmxpYyBnZXQgZW1wdHlTdXJ2ZXlUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jU3RyaW5nKFwiZW1wdHlTdXJ2ZXlcIik7XG4gIH1cblxuICAvLyNyZWdpb24gVGl0bGUvSGVhZGVyIG9wdGlvbnNcbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIHN1cnZleSBsb2dvLlxuICAgKiBAc2VlIHRpdGxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGxvZ28oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJsb2dvXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbG9nbyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJsb2dvXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgbG9jTG9nbygpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJsb2dvXCIpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSBzdXJ2ZXkgbG9nbyB3aWR0aC5cbiAgICogQHNlZSBsb2dvXG4gICAqL1xuICBwdWJsaWMgZ2V0IGxvZ29XaWR0aCgpOiBhbnkge1xuICAgIHZhciB3aWR0aCA9IHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImxvZ29XaWR0aFwiKTtcbiAgICByZXR1cm4gZ2V0U2l6ZSh3aWR0aCk7XG4gIH1cbiAgcHVibGljIHNldCBsb2dvV2lkdGgodmFsdWU6IGFueSkge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImxvZ29XaWR0aFwiLCB2YWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIHN1cnZleSBsb2dvIGhlaWdodC5cbiAgICogQHNlZSBsb2dvXG4gICAqL1xuICBwdWJsaWMgZ2V0IGxvZ29IZWlnaHQoKTogYW55IHtcbiAgICB2YXIgaGVpZ2h0ID0gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibG9nb0hlaWdodFwiKTtcbiAgICByZXR1cm4gZ2V0U2l6ZShoZWlnaHQpO1xuICB9XG4gIHB1YmxpYyBzZXQgbG9nb0hlaWdodCh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibG9nb0hlaWdodFwiLCB2YWx1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIHN1cnZleSBsb2dvIHBvc2l0aW9uLlxuICAgKiBAc2VlIGxvZ29cbiAgICovXG4gIHB1YmxpYyBnZXQgbG9nb1Bvc2l0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImxvZ29Qb3NpdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGxvZ29Qb3NpdGlvbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibG9nb1Bvc2l0aW9uXCIsIHZhbHVlKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGhhc0xvZ28oKSB7XG4gICAgcmV0dXJuICEhdGhpcy5sb2dvICYmIHRoaXMubG9nb1Bvc2l0aW9uICE9PSBcIm5vbmVcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzTG9nb0JlZm9yZSgpIHtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5yZW5kZXJlZEhhc0xvZ28gJiZcbiAgICAgICh0aGlzLmxvZ29Qb3NpdGlvbiA9PT0gXCJsZWZ0XCIgfHwgdGhpcy5sb2dvUG9zaXRpb24gPT09IFwidG9wXCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzTG9nb0FmdGVyKCkge1xuICAgIGlmICh0aGlzLmlzRGVzaWduTW9kZSkgcmV0dXJuIHRoaXMucmVuZGVyZWRIYXNMb2dvO1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnJlbmRlcmVkSGFzTG9nbyAmJlxuICAgICAgKHRoaXMubG9nb1Bvc2l0aW9uID09PSBcInJpZ2h0XCIgfHwgdGhpcy5sb2dvUG9zaXRpb24gPT09IFwiYm90dG9tXCIpXG4gICAgKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGxvZ29DbGFzc05hbWVzKCk6IHN0cmluZyB7XG4gICAgY29uc3QgbG9nb0NsYXNzZXM6IHsgW2luZGV4OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgIGxlZnQ6IFwic3YtbG9nby0tbGVmdFwiLFxuICAgICAgcmlnaHQ6IFwic3YtbG9nby0tcmlnaHRcIixcbiAgICAgIHRvcDogXCJzdi1sb2dvLS10b3BcIixcbiAgICAgIGJvdHRvbTogXCJzdi1sb2dvLS1ib3R0b21cIixcbiAgICB9O1xuICAgIHJldHVybiBuZXcgQ3NzQ2xhc3NCdWlsZGVyKCkuYXBwZW5kKHRoaXMuY3NzLmxvZ28pXG4gICAgICAuYXBwZW5kKGxvZ29DbGFzc2VzW3RoaXMubG9nb1Bvc2l0aW9uXSkudG9TdHJpbmcoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHJlbmRlcmVkSGFzVGl0bGUoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKSByZXR1cm4gdGhpcy5pc1Byb3BlcnR5VmlzaWJsZShcInRpdGxlXCIpO1xuICAgIHJldHVybiAhdGhpcy5sb2NUaXRsZS5pc0VtcHR5ICYmIHRoaXMuc2hvd1RpdGxlO1xuICB9XG4gIHB1YmxpYyBnZXQgaGFzVGl0bGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyZWRIYXNUaXRsZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHJlbmRlcmVkSGFzTG9nbygpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUpIHJldHVybiB0aGlzLmlzUHJvcGVydHlWaXNpYmxlKFwibG9nb1wiKTtcbiAgICByZXR1cm4gdGhpcy5oYXNMb2dvO1xuICB9XG4gIHB1YmxpYyBnZXQgcmVuZGVyZWRIYXNIZWFkZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyZWRIYXNUaXRsZSB8fCB0aGlzLnJlbmRlcmVkSGFzTG9nbztcbiAgfVxuICAvKipcbiAgICogVGhlIGxvZ28gZml0IG1vZGUuXG4gICAqIEBzZWUgbG9nb1xuICAgKi9cbiAgcHVibGljIGdldCBsb2dvRml0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImxvZ29GaXRcIik7XG4gIH1cbiAgcHVibGljIHNldCBsb2dvRml0KHZhbDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibG9nb0ZpdFwiLCB2YWwpO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIHByaXZhdGUgX2lzTW9iaWxlID0gZmFsc2U7XG4gIHB1YmxpYyBzZXRJc01vYmlsZShuZXdWYWwgPSB0cnVlKSB7XG4gICAgdGhpcy5faXNNb2JpbGUgPSBuZXdWYWw7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaXNNb2JpbGUoKSB7XG4gICAgcmV0dXJuIGlzTW9iaWxlKCkgfHwgdGhpcy5faXNNb2JpbGU7XG4gIH1cbiAgcHJvdGVjdGVkIGlzTG9nb0ltYWdlQ2hvb3NlbigpIHtcbiAgICByZXR1cm4gdGhpcy5sb2NMb2dvLnJlbmRlcmVkSHRtbDtcbiAgfVxuICBwdWJsaWMgZ2V0IHRpdGxlTWF4V2lkdGgoKTogc3RyaW5nIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5pc01vYmlsZSAmJlxuICAgICAgIXRoaXMuaXNWYWx1ZUVtcHR5KHRoaXMuaXNMb2dvSW1hZ2VDaG9vc2VuKCkpICYmXG4gICAgICAhc2V0dGluZ3Muc3VwcG9ydENyZWF0b3JWMlxuICAgICkge1xuICAgICAgdmFyIGxvZ29XaWR0aCA9IHRoaXMubG9nb1dpZHRoO1xuICAgICAgaWYgKHRoaXMubG9nb1Bvc2l0aW9uID09PSBcImxlZnRcIiB8fCB0aGlzLmxvZ29Qb3NpdGlvbiA9PT0gXCJyaWdodFwiKSB7XG4gICAgICAgIHJldHVybiBcImNhbGMoMTAwJSAtIDVweCAtIDJlbSAtIFwiICsgbG9nb1dpZHRoICsgXCIpXCI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIEhUTUwgY29udGVudCBkaXNwbGF5ZWQgb24gdGhlIGNvbXBsZXRlIHBhZ2UuIFVzZSB0aGlzIHByb3BlcnR5IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBjb21wbGV0ZSBwYWdlIHRleHQuXG4gICAqIEBzZWUgc2hvd0NvbXBsZXRlZFBhZ2VcbiAgICogQHNlZSBjb21wbGV0ZWRIdG1sT25Db25kaXRpb25cbiAgICogQHNlZSBsb2NhbGVcbiAgICovXG4gIHB1YmxpYyBnZXQgY29tcGxldGVkSHRtbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImNvbXBsZXRlZEh0bWxcIik7XG4gIH1cbiAgcHVibGljIHNldCBjb21wbGV0ZWRIdG1sKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImNvbXBsZXRlZEh0bWxcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBsb2NDb21wbGV0ZWRIdG1sKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImNvbXBsZXRlZEh0bWxcIik7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIEhUTUwgY29uZGl0aW9uIGl0ZW1zLiBJZiB0aGUgZXhwcmVzc2lvbiBvZiB0aGlzIGl0ZW0gcmV0dXJucyBgdHJ1ZWAsIHRoZW4gYSBzdXJ2ZXkgd2lsbCB1c2UgdGhpcyBpdGVtIEhUTUwgaW5zdGVhZCBvZiBgY29tcGxldGVkSHRtbGAuXG4gICAqIEBzZWUgSHRtbENvbmRpdGlvbkl0ZW1cbiAgICogQHNlZSBjb21wbGV0ZUh0bWxcbiAgICovXG4gIHB1YmxpYyBnZXQgY29tcGxldGVkSHRtbE9uQ29uZGl0aW9uKCk6IEFycmF5PEh0bWxDb25kaXRpb25JdGVtPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImNvbXBsZXRlZEh0bWxPbkNvbmRpdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbXBsZXRlZEh0bWxPbkNvbmRpdGlvbih2YWw6IEFycmF5PEh0bWxDb25kaXRpb25JdGVtPikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImNvbXBsZXRlZEh0bWxPbkNvbmRpdGlvblwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIGEgZ2l2ZW4gZXhwcmVzc2lvbiBhbmQgcmV0dXJucyBhIHJlc3VsdCB2YWx1ZS5cbiAgICogQHBhcmFtIGV4cHJlc3Npb25cbiAgICovXG4gIHB1YmxpYyBydW5FeHByZXNzaW9uKGV4cHJlc3Npb246IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKCFleHByZXNzaW9uKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgdmFsdWVzID0gdGhpcy5nZXRGaWx0ZXJlZFZhbHVlcygpO1xuICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5nZXRGaWx0ZXJlZFByb3BlcnRpZXMoKTtcbiAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25SdW5uZXIoZXhwcmVzc2lvbikucnVuKHZhbHVlcywgcHJvcGVydGllcyk7XG4gIH1cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgYSBnaXZlbiBleHByZXNzaW9uIGFuZCByZXR1cm5zIGB0cnVlYCBvciBgZmFsc2VgLlxuICAgKiBAcGFyYW0gZXhwcmVzc2lvblxuICAgKi9cbiAgcHVibGljIHJ1bkNvbmRpdGlvbihleHByZXNzaW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIWV4cHJlc3Npb24pIHJldHVybiBmYWxzZTtcbiAgICB2YXIgdmFsdWVzID0gdGhpcy5nZXRGaWx0ZXJlZFZhbHVlcygpO1xuICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5nZXRGaWx0ZXJlZFByb3BlcnRpZXMoKTtcbiAgICByZXR1cm4gbmV3IENvbmRpdGlvblJ1bm5lcihleHByZXNzaW9uKS5ydW4odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgfVxuICAvKipcbiAgICogUnVuIGFsbCB0cmlnZ2VycyB0aGF0IHBlcmZvcm1zIG9uIHZhbHVlIGNoYW5nZWQgYW5kIG5vdCBvbiBtb3ZpbmcgdG8gdGhlIG5leHQgcGFnZS5cbiAgICovXG4gIHB1YmxpYyBydW5UcmlnZ2VycygpOiB2b2lkIHtcbiAgICB0aGlzLmNoZWNrVHJpZ2dlcnModGhpcy5nZXRGaWx0ZXJlZFZhbHVlcygpLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIGdldCByZW5kZXJlZENvbXBsZXRlZEh0bWwoKTogc3RyaW5nIHtcbiAgICB2YXIgaXRlbSA9IHRoaXMuZ2V0RXhwcmVzc2lvbkl0ZW1PblJ1bkNvbmRpdGlvbihcbiAgICAgIHRoaXMuY29tcGxldGVkSHRtbE9uQ29uZGl0aW9uXG4gICAgKTtcbiAgICByZXR1cm4gISFpdGVtID8gKDxIdG1sQ29uZGl0aW9uSXRlbT5pdGVtKS5odG1sIDogdGhpcy5jb21wbGV0ZWRIdG1sO1xuICB9XG4gIHByaXZhdGUgZ2V0RXhwcmVzc2lvbkl0ZW1PblJ1bkNvbmRpdGlvbihcbiAgICBpdGVtczogQXJyYXk8RXhwcmVzc2lvbkl0ZW0+XG4gICk6IEV4cHJlc3Npb25JdGVtIHtcbiAgICBpZiAoaXRlbXMubGVuZ3RoID09IDApIHJldHVybiBudWxsO1xuICAgIHZhciB2YWx1ZXMgPSB0aGlzLmdldEZpbHRlcmVkVmFsdWVzKCk7XG4gICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmdldEZpbHRlcmVkUHJvcGVydGllcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChpdGVtc1tpXS5ydW5Db25kaXRpb24odmFsdWVzLCBwcm9wZXJ0aWVzKSkge1xuICAgICAgICByZXR1cm4gaXRlbXNbaV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBIVE1MIGNvbnRlbnQgZGlzcGxheWVkIHRvIGFuIGVuZCB1c2VyIHRoYXQgaGFzIGFscmVhZHkgY29tcGxldGVkIHRoZSBzdXJ2ZXkuXG4gICAqIEBzZWUgY2xpZW50SWRcbiAgICogQHNlZSBsb2NhbGVcbiAgICovXG4gIHB1YmxpYyBnZXQgY29tcGxldGVkQmVmb3JlSHRtbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImNvbXBsZXRlZEJlZm9yZUh0bWxcIik7XG4gIH1cbiAgcHVibGljIHNldCBjb21wbGV0ZWRCZWZvcmVIdG1sKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImNvbXBsZXRlZEJlZm9yZUh0bWxcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBsb2NDb21wbGV0ZWRCZWZvcmVIdG1sKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImNvbXBsZXRlZEJlZm9yZUh0bWxcIik7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBIVE1MIHRoYXQgc2hvd3Mgb24gbG9hZGluZyBzdXJ2ZXkgSnNvbiBmcm9tIHRoZSBbYXBpLnN1cnZleWpzLmlvXShodHRwczovL2FwaS5zdXJ2ZXlqcy5pbykgc2VydmljZS5cbiAgICogQHNlZSBzdXJ2ZXlJZFxuICAgKiBAc2VlIGxvY2FsZVxuICAgKi9cbiAgcHVibGljIGdldCBsb2FkaW5nSHRtbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImxvYWRpbmdIdG1sXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbG9hZGluZ0h0bWwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwibG9hZGluZ0h0bWxcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBsb2NMb2FkaW5nSHRtbCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJsb2FkaW5nSHRtbFwiKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSAnU3RhcnQnIGJ1dHRvbiBjYXB0aW9uLlxuICAgKiBUaGUgJ1N0YXJ0JyBidXR0b24gaXMgc2hvd24gb24gdGhlIHN0YXJ0ZWQgcGFnZS4gU2V0IHRoZSBgZmlyc3RQYWdlSXNTdGFydGVkYCBwcm9wZXJ0eSB0byBgdHJ1ZWAsIHRvIGRpc3BsYXkgdGhlIHN0YXJ0ZWQgcGFnZS5cbiAgICogQHNlZSBmaXJzdFBhZ2VJc1N0YXJ0ZWRcbiAgICogQHNlZSBsb2NhbGVcbiAgICovXG4gIHB1YmxpYyBnZXQgc3RhcnRTdXJ2ZXlUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwic3RhcnRTdXJ2ZXlUZXh0XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc3RhcnRTdXJ2ZXlUZXh0KG5ld1ZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInN0YXJ0U3VydmV5VGV4dFwiLCBuZXdWYWx1ZSk7XG4gIH1cbiAgZ2V0IGxvY1N0YXJ0U3VydmV5VGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJzdGFydFN1cnZleVRleHRcIik7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgJ1ByZXYnIGJ1dHRvbiBjYXB0aW9uLlxuICAgKiBAc2VlIGxvY2FsZVxuICAgKi9cbiAgcHVibGljIGdldCBwYWdlUHJldlRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJwYWdlUHJldlRleHRcIik7XG4gIH1cbiAgcHVibGljIHNldCBwYWdlUHJldlRleHQobmV3VmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicGFnZVByZXZUZXh0XCIsIG5ld1ZhbHVlKTtcbiAgfVxuICBnZXQgbG9jUGFnZVByZXZUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInBhZ2VQcmV2VGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSAnTmV4dCcgYnV0dG9uIGNhcHRpb24uXG4gICAqIEBzZWUgbG9jYWxlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBhZ2VOZXh0VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInBhZ2VOZXh0VGV4dFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHBhZ2VOZXh0VGV4dChuZXdWYWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJwYWdlTmV4dFRleHRcIiwgbmV3VmFsdWUpO1xuICB9XG4gIGdldCBsb2NQYWdlTmV4dFRleHQoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwicGFnZU5leHRUZXh0XCIpO1xuICB9XG4gIC8qKlxuICAgKiAgR2V0cyBvciBzZXRzIHRoZSAnQ29tcGxldGUnIGJ1dHRvbiBjYXB0aW9uLlxuICAgKiBAc2VlIGxvY2FsZVxuICAgKi9cbiAgcHVibGljIGdldCBjb21wbGV0ZVRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJjb21wbGV0ZVRleHRcIik7XG4gIH1cbiAgcHVibGljIHNldCBjb21wbGV0ZVRleHQobmV3VmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiY29tcGxldGVUZXh0XCIsIG5ld1ZhbHVlKTtcbiAgfVxuICBnZXQgbG9jQ29tcGxldGVUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcImNvbXBsZXRlVGV4dFwiKTtcbiAgfVxuICAvKipcbiAgICogIEdldHMgb3Igc2V0cyB0aGUgJ1ByZXZpZXcnIGJ1dHRvbiBjYXB0aW9uLlxuICAgKiBAc2VlIGxvY2FsZVxuICAgKiBAc2VlIHNob3dQcmV2aWV3QmVmb3JlQ29tcGxldGVcbiAgICogQHNlZSBlZGl0VGV4dFxuICAgKiBAc2VlIHNob3dQcmV2aWV3XG4gICAqL1xuICBwdWJsaWMgZ2V0IHByZXZpZXdUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicHJldmlld1RleHRcIik7XG4gIH1cbiAgcHVibGljIHNldCBwcmV2aWV3VGV4dChuZXdWYWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRMb2NhbGl6YWJsZVN0cmluZ1RleHQoXCJwcmV2aWV3VGV4dFwiLCBuZXdWYWx1ZSk7XG4gIH1cbiAgZ2V0IGxvY1ByZXZpZXdUZXh0KCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NhbGl6YWJsZVN0cmluZyhcInByZXZpZXdUZXh0XCIpO1xuICB9XG4gIC8qKlxuICAgKiAgR2V0cyBvciBzZXRzIHRoZSAnRWRpdCcgYnV0dG9uIGNhcHRpb24uXG4gICAqIEBzZWUgbG9jYWxlXG4gICAqIEBzZWUgc2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZVxuICAgKiBAc2VlIHByZXZpZXdUZXh0XG4gICAqIEBzZWUgY2FuY2VsUHJldmlld1xuICAgKi9cbiAgcHVibGljIGdldCBlZGl0VGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nVGV4dChcImVkaXRUZXh0XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgZWRpdFRleHQobmV3VmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwiZWRpdFRleHRcIiwgbmV3VmFsdWUpO1xuICB9XG4gIGdldCBsb2NFZGl0VGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJlZGl0VGV4dFwiKTtcbiAgfVxuICBnZXRFbGVtZW50VGl0bGVUYWdOYW1lKGVsZW1lbnQ6IEJhc2UsIHRhZ05hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMub25HZXRUaXRsZVRhZ05hbWUuaXNFbXB0eSkgcmV0dXJuIHRhZ05hbWU7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHsgZWxlbWVudDogZWxlbWVudCwgdGFnTmFtZTogdGFnTmFtZSB9O1xuICAgIHRoaXMub25HZXRUaXRsZVRhZ05hbWUuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICByZXR1cm4gb3B0aW9ucy50YWdOYW1lO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhlIHBhdHRlcm4gZm9yIHF1ZXN0aW9uIHRpdGxlLiBEZWZhdWx0IGlzIFwibnVtVGl0bGVSZXF1aXJlXCIsIDEuIFdoYXQgaXMgeW91ciBuYW1lPyAqLFxuICAgKiBZb3UgY2FuIHNldCBpdCB0byBudW1SZXF1aXJlVGl0bGU6IDEuICogV2hhdCBpcyB5b3VyIG5hbWU/XG4gICAqIFlvdSBjYW4gc2V0IGl0IHRvIHJlcXVpcmVOdW1UaXRsZTogKiAxLiBXaGF0IGlzIHlvdXIgbmFtZT9cbiAgICogWW91IGNhbiBzZXQgaXQgdG8gbnVtVGl0bGUgKHJlbW92ZSByZXF1aXJlIHN5bWJvbCBjb21wbGV0ZWx5KTogMS4gV2hhdCBpcyB5b3VyIG5hbWU/XG4gICAqIEBzZWUgUXVlc3Rpb25Nb2RlbC50aXRsZVxuICAgKi9cbiAgcHVibGljIGdldCBxdWVzdGlvblRpdGxlUGF0dGVybigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvblRpdGxlUGF0dGVyblwiLCBcIm51bVRpdGxlUmVxdWlyZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHF1ZXN0aW9uVGl0bGVQYXR0ZXJuKHZhbDogc3RyaW5nKSB7XG4gICAgaWYgKFxuICAgICAgdmFsICE9PSBcIm51bVJlcXVpcmVUaXRsZVwiICYmXG4gICAgICB2YWwgIT09IFwicmVxdWlyZU51bVRpdGxlXCIgJiZcbiAgICAgIHZhbCAhPSBcIm51bVRpdGxlXCJcbiAgICApIHtcbiAgICAgIHZhbCA9IFwibnVtVGl0bGVSZXF1aXJlXCI7XG4gICAgfVxuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uVGl0bGVQYXR0ZXJuXCIsIHZhbCk7XG4gIH1cbiAgZ2V0UXVlc3Rpb25UaXRsZVBhdHRlcm5PcHRpb25zKCk6IEFycmF5PGFueT4ge1xuICAgIGNvbnN0IHJlcyA9IG5ldyBBcnJheTxhbnk+KCk7XG4gICAgY29uc3QgdGl0bGUgPSB0aGlzLmdldExvY1N0cmluZyhcInF1ZXN0aW9uVGl0bGVQYXR0ZXJuVGV4dFwiKTtcbiAgICBjb25zdCBudW0gPSAhIXRoaXMucXVlc3Rpb25TdGFydEluZGV4ID8gdGhpcy5xdWVzdGlvblN0YXJ0SW5kZXggOiBcIjEuXCI7XG4gICAgcmVzLnB1c2goe1xuICAgICAgdmFsdWU6IFwibnVtVGl0bGVSZXF1aXJlXCIsXG4gICAgICB0ZXh0OiBudW0gKyBcIiBcIiArIHRpdGxlICsgXCIgXCIgKyB0aGlzLnJlcXVpcmVkVGV4dFxuICAgIH0pO1xuICAgIHJlcy5wdXNoKHtcbiAgICAgIHZhbHVlOiBcIm51bVJlcXVpcmVUaXRsZVwiLFxuICAgICAgdGV4dDogbnVtICsgXCIgXCIgKyB0aGlzLnJlcXVpcmVkVGV4dCArIFwiIFwiICsgdGl0bGVcbiAgICB9KTtcbiAgICByZXMucHVzaCh7XG4gICAgICB2YWx1ZTogXCJyZXF1aXJlTnVtVGl0bGVcIixcbiAgICAgIHRleHQ6IHRoaXMucmVxdWlyZWRUZXh0ICsgXCIgXCIgKyBudW0gKyBcIiBcIiArIHRpdGxlXG4gICAgfSk7XG4gICAgcmVzLnB1c2goe1xuICAgICAgdmFsdWU6IFwibnVtVGl0bGVcIixcbiAgICAgIHRleHQ6IG51bSArIFwiIFwiICsgdGl0bGVcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSBxdWVzdGlvbiB0aXRsZSB0ZW1wbGF0ZS4gT2Jzb2xldGUsIHBsZWFzZSB1c2UgcXVlc3Rpb25UaXRsZVBhdHRlcm5cbiAgICogQHNlZSBRdWVzdGlvbk1vZGVsLnRpdGxlXG4gICAqIEBzZWUgcXVlc3Rpb25UaXRsZVBhdHRlcm5cbiAgICovXG4gIHB1YmxpYyBnZXQgcXVlc3Rpb25UaXRsZVRlbXBsYXRlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwicXVlc3Rpb25UaXRsZVRlbXBsYXRlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcXVlc3Rpb25UaXRsZVRlbXBsYXRlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldExvY2FsaXphYmxlU3RyaW5nVGV4dChcInF1ZXN0aW9uVGl0bGVUZW1wbGF0ZVwiLCB2YWx1ZSk7XG4gICAgdGhpcy5xdWVzdGlvblRpdGxlUGF0dGVybiA9IHRoaXMuZ2V0TmV3VGl0bGVQYXR0ZXJuKHZhbHVlKTtcbiAgICB0aGlzLnF1ZXN0aW9uU3RhcnRJbmRleCA9IHRoaXMuZ2V0TmV3UXVlc3Rpb25UaXRsZUVsZW1lbnQoXG4gICAgICB2YWx1ZSxcbiAgICAgIFwibm9cIixcbiAgICAgIHRoaXMucXVlc3Rpb25TdGFydEluZGV4LFxuICAgICAgXCIxXCJcbiAgICApO1xuICAgIHRoaXMucmVxdWlyZWRUZXh0ID0gdGhpcy5nZXROZXdRdWVzdGlvblRpdGxlRWxlbWVudChcbiAgICAgIHZhbHVlLFxuICAgICAgXCJyZXF1aXJlXCIsXG4gICAgICB0aGlzLnJlcXVpcmVkVGV4dCxcbiAgICAgIFwiKlwiXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGdldE5ld1RpdGxlUGF0dGVybih0ZW1wbGF0ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoISF0ZW1wbGF0ZSkge1xuICAgICAgdmFyIHN0cnMgPSBbXTtcbiAgICAgIHdoaWxlICh0ZW1wbGF0ZS5pbmRleE9mKFwie1wiKSA+IC0xKSB7XG4gICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUuc3Vic3RyKHRlbXBsYXRlLmluZGV4T2YoXCJ7XCIpICsgMSk7XG4gICAgICAgIHZhciBpbmQgPSB0ZW1wbGF0ZS5pbmRleE9mKFwifVwiKTtcbiAgICAgICAgaWYgKGluZCA8IDApIGJyZWFrO1xuICAgICAgICBzdHJzLnB1c2godGVtcGxhdGUuc3Vic3RyKDAsIGluZCkpO1xuICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnN1YnN0cihpbmQgKyAxKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHJzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgaWYgKHN0cnNbMF0gPT0gXCJyZXF1aXJlXCIpIHJldHVybiBcInJlcXVpcmVOdW1UaXRsZVwiO1xuICAgICAgICBpZiAoc3Ryc1sxXSA9PSBcInJlcXVpcmVcIiAmJiBzdHJzLmxlbmd0aCA9PSAzKSByZXR1cm4gXCJudW1SZXF1aXJlVGl0bGVcIjtcbiAgICAgICAgaWYgKHN0cnMuaW5kZXhPZihcInJlcXVpcmVcIikgPCAwKSByZXR1cm4gXCJudW1UaXRsZVwiO1xuICAgICAgfVxuICAgICAgaWYgKHN0cnMubGVuZ3RoID09IDEgJiYgc3Ryc1swXSA9PSBcInRpdGxlXCIpIHtcbiAgICAgICAgcmV0dXJuIFwibnVtVGl0bGVcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFwibnVtVGl0bGVSZXF1aXJlXCI7XG4gIH1cbiAgcHJpdmF0ZSBnZXROZXdRdWVzdGlvblRpdGxlRWxlbWVudChcbiAgICB0ZW1wbGF0ZTogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjdXJyZW50VmFsdWU6IHN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6IHN0cmluZ1xuICApOiBzdHJpbmcge1xuICAgIG5hbWUgPSBcIntcIiArIG5hbWUgKyBcIn1cIjtcbiAgICBpZiAoIXRlbXBsYXRlIHx8IHRlbXBsYXRlLmluZGV4T2YobmFtZSkgPCAwKSByZXR1cm4gY3VycmVudFZhbHVlO1xuICAgIHZhciBpbmQgPSB0ZW1wbGF0ZS5pbmRleE9mKG5hbWUpO1xuICAgIHZhciBwcmVmaXggPSBcIlwiO1xuICAgIHZhciBwb3N0Zml4ID0gXCJcIjtcbiAgICB2YXIgaSA9IGluZCAtIDE7XG4gICAgZm9yICg7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBpZiAodGVtcGxhdGVbaV0gPT0gXCJ9XCIpIGJyZWFrO1xuICAgIH1cbiAgICBpZiAoaSA8IGluZCAtIDEpIHtcbiAgICAgIHByZWZpeCA9IHRlbXBsYXRlLnN1YnN0cihpICsgMSwgaW5kIC0gaSAtIDEpO1xuICAgIH1cbiAgICBpbmQgKz0gbmFtZS5sZW5ndGg7XG4gICAgaSA9IGluZDtcbiAgICBmb3IgKDsgaSA8IHRlbXBsYXRlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGVtcGxhdGVbaV0gPT0gXCJ7XCIpIGJyZWFrO1xuICAgIH1cbiAgICBpZiAoaSA+IGluZCkge1xuICAgICAgcG9zdGZpeCA9IHRlbXBsYXRlLnN1YnN0cihpbmQsIGkgLSBpbmQpO1xuICAgIH1cbiAgICBpID0gMDtcbiAgICB3aGlsZSAoaSA8IHByZWZpeC5sZW5ndGggJiYgcHJlZml4LmNoYXJDb2RlQXQoaSkgPCAzMykgaSsrO1xuICAgIHByZWZpeCA9IHByZWZpeC5zdWJzdHIoaSk7XG4gICAgaSA9IHBvc3RmaXgubGVuZ3RoIC0gMTtcbiAgICB3aGlsZSAoaSA+PSAwICYmIHBvc3RmaXguY2hhckNvZGVBdChpKSA8IDMzKSBpLS07XG4gICAgcG9zdGZpeCA9IHBvc3RmaXguc3Vic3RyKDAsIGkgKyAxKTtcbiAgICBpZiAoIXByZWZpeCAmJiAhcG9zdGZpeCkgcmV0dXJuIGN1cnJlbnRWYWx1ZTtcbiAgICB2YXIgdmFsdWUgPSAhIWN1cnJlbnRWYWx1ZSA/IGN1cnJlbnRWYWx1ZSA6IGRlZmF1bHRWYWx1ZTtcbiAgICByZXR1cm4gcHJlZml4ICsgdmFsdWUgKyBwb3N0Zml4O1xuICB9XG4gIGdldCBsb2NRdWVzdGlvblRpdGxlVGVtcGxhdGUoKTogTG9jYWxpemFibGVTdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldExvY2FsaXphYmxlU3RyaW5nKFwicXVlc3Rpb25UaXRsZVRlbXBsYXRlXCIpO1xuICB9XG4gIGdldFVwZGF0ZWRRdWVzdGlvblRpdGxlKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIHRpdGxlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLm9uR2V0UXVlc3Rpb25UaXRsZS5pc0VtcHR5KSByZXR1cm4gdGl0bGU7XG4gICAgdmFyIG9wdGlvbnMgPSB7IHF1ZXN0aW9uOiBxdWVzdGlvbiwgdGl0bGU6IHRpdGxlIH07XG4gICAgdGhpcy5vbkdldFF1ZXN0aW9uVGl0bGUuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICByZXR1cm4gb3B0aW9ucy50aXRsZTtcbiAgfVxuICBnZXRVcGRhdGVkUXVlc3Rpb25ObyhxdWVzdGlvbjogSVF1ZXN0aW9uLCBubzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5vbkdldFF1ZXN0aW9uTm8uaXNFbXB0eSkgcmV0dXJuIG5vO1xuICAgIHZhciBvcHRpb25zID0geyBxdWVzdGlvbjogcXVlc3Rpb24sIG5vOiBubyB9O1xuICAgIHRoaXMub25HZXRRdWVzdGlvbk5vLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMubm87XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB3aGV0aGVyIHRoZSBzdXJ2ZXkgZGlzcGxheXMgcGFnZSBudW1iZXJzIG9uIHBhZ2VzIHRpdGxlcy5cbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd1BhZ2VOdW1iZXJzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93UGFnZU51bWJlcnNcIiwgZmFsc2UpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd1BhZ2VOdW1iZXJzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlID09PSB0aGlzLnNob3dQYWdlTnVtYmVycykgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dQYWdlTnVtYmVyc1wiLCB2YWx1ZSk7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYSB2YWx1ZSB0aGF0IHNwZWNpZmllcyBob3cgdGhlIHF1ZXN0aW9uIG51bWJlcnMgYXJlIGRpc3BsYXllZC5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGU6XG4gICAqXG4gICAqIC0gYG9uYCAtIGRpc3BsYXkgcXVlc3Rpb24gbnVtYmVyc1xuICAgKiAtIGBvbnBhZ2VgIC0gZGlzcGxheSBxdWVzdGlvbiBudW1iZXJzLCBzdGFydCBudW1iZXJpbmcgb24gZXZlcnkgcGFnZVxuICAgKiAtIGBvZmZgIC0gdHVybiBvZmYgdGhlIG51bWJlcmluZyBmb3IgcXVlc3Rpb25zIHRpdGxlc1xuICAgKi9cbiAgcHVibGljIGdldCBzaG93UXVlc3Rpb25OdW1iZXJzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dRdWVzdGlvbk51bWJlcnNcIik7XG4gIH1cbiAgcHVibGljIHNldCBzaG93UXVlc3Rpb25OdW1iZXJzKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsdWUgPSB2YWx1ZSA9PT0gXCJvbnBhZ2VcIiA/IFwib25QYWdlXCIgOiB2YWx1ZTtcbiAgICBpZiAodmFsdWUgPT09IHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVycykgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dRdWVzdGlvbk51bWJlcnNcIiwgdmFsdWUpO1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSBzdXJ2ZXkgcHJvZ3Jlc3MgYmFyIHBvc2l0aW9uLlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZTpcbiAgICpcbiAgICogLSBgb2ZmYCAoZGVmYXVsdCkgLSBkb24ndCBzaG93IHByb2dyZXNzIGJhclxuICAgKiAtIGB0b3BgIC0gc2hvdyBwcm9ncmVzcyBiYXIgaW4gdGhlIHRvcFxuICAgKiAtIGBib3R0b21gIC0gc2hvdyBwcm9ncmVzcyBiYXIgaW4gdGhlIGJvdHRvbVxuICAgKiAtIGBib3RoYCAtIHNob3cgcHJvZ3Jlc3MgYmFyIGluIGJvdGggc2lkZXM6IHRvcCBhbmQgYm90dG9tLlxuICAgKi9cbiAgcHVibGljIGdldCBzaG93UHJvZ3Jlc3NCYXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1Byb2dyZXNzQmFyXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd1Byb2dyZXNzQmFyKG5ld1ZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93UHJvZ3Jlc3NCYXJcIiwgbmV3VmFsdWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgdHlwZSBvZiBpbmZvIGluIHRoZSBwcm9ncmVzcyBiYXIuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOlxuICAgKlxuICAgKiAtIGBwYWdlc2AgKGRlZmF1bHQpLFxuICAgKiAtIGBxdWVzdGlvbnNgLFxuICAgKiAtIGByZXF1aXJlZFF1ZXN0aW9uc2AsXG4gICAqIC0gYGNvcnJlY3RRdWVzdGlvbnNgLFxuICAgKiAtIGBidXR0b25zYFxuICAgKi9cbiAgcHVibGljIGdldCBwcm9ncmVzc0JhclR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicHJvZ3Jlc3NCYXJUeXBlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcHJvZ3Jlc3NCYXJUeXBlKG5ld1ZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAobmV3VmFsdWUgPT09IFwiY29ycmVjdHF1ZXN0aW9uXCIpIG5ld1ZhbHVlID0gXCJjb3JyZWN0UXVlc3Rpb25cIjtcbiAgICBpZiAobmV3VmFsdWUgPT09IFwicmVxdWlyZWRxdWVzdGlvblwiKSBuZXdWYWx1ZSA9IFwicmVxdWlyZWRRdWVzdGlvblwiO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInByb2dyZXNzQmFyVHlwZVwiLCBuZXdWYWx1ZSk7XG4gIH1cbiAgcHVibGljIGdldCBpc1Nob3dQcm9ncmVzc0Jhck9uVG9wKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5jYW5TaG93UHJvcmVzQmFyKCkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5zaG93UHJvZ3Jlc3NCYXIgPT09IFwidG9wXCIgfHwgdGhpcy5zaG93UHJvZ3Jlc3NCYXIgPT09IFwiYm90aFwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNTaG93UHJvZ3Jlc3NCYXJPbkJvdHRvbSgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY2FuU2hvd1Byb3Jlc0JhcigpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuc2hvd1Byb2dyZXNzQmFyID09PSBcImJvdHRvbVwiIHx8IHRoaXMuc2hvd1Byb2dyZXNzQmFyID09PSBcImJvdGhcIjtcbiAgfVxuICBwcml2YXRlIGNhblNob3dQcm9yZXNCYXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICF0aGlzLmlzU2hvd2luZ1ByZXZpZXcgfHxcbiAgICAgIHRoaXMuc2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZSAhPSBcInNob3dBbGxRdWVzdGlvbnNcIlxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRleHQvSFRNTCB0aGF0IGlzIHJlbmRlcmVkIGFzIGEgc3VydmV5IHRpdGxlLlxuICAgKi9cbiAgcHVibGljIGdldCBwcm9jZXNzZWRUaXRsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5sb2NUaXRsZS5yZW5kZXJlZEh0bWw7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgcXVlc3Rpb24gdGl0bGUgbG9jYXRpb24uXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOlxuICAgKlxuICAgKiAtIGBib3R0b21gIC0gc2hvdyBhIHF1ZXN0aW9uIHRpdGxlIHRvIGJvdHRvbVxuICAgKiAtIGBsZWZ0YCAtIHNob3cgYSBxdWVzdGlvbiB0aXRsZSB0byBsZWZ0XG4gICAqIC0gYHRvcGAgLSBzaG93IGEgcXVlc3Rpb24gdGl0bGUgdG8gdG9wLlxuICAgKlxuICAgKiA+IFNvbWUgcXVlc3Rpb25zLCBmb3IgZXhhbXBsZSBtYXRyaXhlcywgZG8gbm90IHN1cHBvcnQgJ2xlZnQnIHZhbHVlLiBUaGUgdGl0bGUgZm9yIHRoZW0gd2lsbCBiZSBkaXNwbGF5ZWQgdG8gdGhlIHRvcC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcXVlc3Rpb25UaXRsZUxvY2F0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uVGl0bGVMb2NhdGlvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHF1ZXN0aW9uVGl0bGVMb2NhdGlvbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicXVlc3Rpb25UaXRsZUxvY2F0aW9uXCIsIHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICAgIGlmICghdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikge1xuICAgICAgdGhpcy51cGRhdGVFbGVtZW50Q3NzKHRydWUpO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlRWxlbWVudENzcyhyZU5ldz86IGJvb2xlYW4pIHtcbiAgICB2YXIgcGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBwYWdlc1tpXS51cGRhdGVFbGVtZW50Q3NzKHJlTmV3KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgZXJyb3IgbWVzc2FnZSBwb3NpdGlvbi5cbiAgICpcbiAgICogVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGU6XG4gICAqXG4gICAqIC0gYHRvcGAgLSB0byBzaG93IHF1ZXN0aW9uIGVycm9yKHMpIG92ZXIgdGhlIHF1ZXN0aW9uLFxuICAgKiAtIGBib3R0b21gIC0gdG8gc2hvdyBxdWVzdGlvbiBlcnJvcihzKSB1bmRlciB0aGUgcXVlc3Rpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHF1ZXN0aW9uRXJyb3JMb2NhdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvbkVycm9yTG9jYXRpb25cIik7XG4gIH1cbiAgcHVibGljIHNldCBxdWVzdGlvbkVycm9yTG9jYXRpb24odmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uRXJyb3JMb2NhdGlvblwiLCB2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSBxdWVzdGlvbiBkZXNjcmlwdGlvbiBwb3NpdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYHVuZGVyVGl0bGVgLlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZTpcbiAgICpcbiAgICogLSBgdW5kZXJUaXRsZWAgLSBzaG93IHF1ZXN0aW9uIGRlc2NyaXB0aW9uIHVuZGVyIHRoZSBxdWVzdGlvbiB0aXRsZSxcbiAgICogLSBgdW5kZXJJbnB1dGAgLSBzaG93IHF1ZXN0aW9uIGRlc2NyaXB0aW9uIHVuZGVyIHRoZSBxdWVzdGlvbiBpbnB1dCBpbnN0ZWFkIG9mIHF1ZXN0aW9uIHRpdGxlLlxuICAgKi9cbiAgcHVibGljIGdldCBxdWVzdGlvbkRlc2NyaXB0aW9uTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicXVlc3Rpb25EZXNjcmlwdGlvbkxvY2F0aW9uXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcXVlc3Rpb25EZXNjcmlwdGlvbkxvY2F0aW9uKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvbkRlc2NyaXB0aW9uTG9jYXRpb25cIiwgdmFsdWUpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIHN1cnZleSBlZGl0IG1vZGUuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOlxuICAgKlxuICAgKiAtIGBlZGl0YCAoZGVmYXVsdCkgLSBtYWtlIGEgc3VydmV5IGVkaXRhYmxlLFxuICAgKiAtIGBkaXNwbGF5YCAtIG1ha2UgYSBzdXJ2ZXkgcmVhZC1vbmx5LlxuICAgKi9cbiAgcHVibGljIGdldCBtb2RlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1vZGVcIik7XG4gIH1cbiAgcHVibGljIHNldCBtb2RlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHZhbHVlID09IHRoaXMubW9kZSkgcmV0dXJuO1xuICAgIGlmICh2YWx1ZSAhPSBcImVkaXRcIiAmJiB2YWx1ZSAhPSBcImRpc3BsYXlcIikgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1vZGVcIiwgdmFsdWUpO1xuICB9XG4gIHByaXZhdGUgb25Nb2RlQ2hhbmdlZCgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwYWdlID0gdGhpcy5wYWdlc1tpXTtcbiAgICAgIHBhZ2Uuc2V0UHJvcGVydHlWYWx1ZShcImlzUmVhZE9ubHlcIiwgcGFnZS5pc1JlYWRPbmx5KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhbiBvYmplY3QgdGhhdCBzdG9yZXMgdGhlIHN1cnZleSByZXN1bHRzL2RhdGEuIFlvdSBjYW4gc2V0IGl0IGRpcmVjdGx5IGFzIGB7ICdxdWVzdGlvbiBuYW1lJzogcXVlc3Rpb25WYWx1ZSwgLi4uIH1gXG4gICAqXG4gICAqID4gSWYgeW91IHNldCB0aGUgYGRhdGFgIHByb3BlcnR5IGFmdGVyIGNyZWF0aW5nIHRoZSBzdXJ2ZXksIHlvdSBtYXkgbmVlZCB0byBzZXQgdGhlIGBjdXJyZW50UGFnZU5vYCB0byBgMGAsIGlmIHlvdSBhcmUgdXNpbmcgYHZpc2libGVJZmAgcHJvcGVydGllcyBmb3IgcXVlc3Rpb25zL3BhZ2VzL3BhbmVscyB0byBlbnN1cmUgdGhhdCB5b3UgYXJlIHN0YXJ0aW5nIGZyb20gdGhlIGZpcnN0IHBhZ2UuXG4gICAqIEBzZWUgc2V0VmFsdWVcbiAgICogQHNlZSBnZXRWYWx1ZVxuICAgKiBAc2VlIG1lcmdlRGF0YVxuICAgKiBAc2VlIGN1cnJlbnRQYWdlTm9cbiAgICovXG4gIHB1YmxpYyBnZXQgZGF0YSgpOiBhbnkge1xuICAgIHZhciByZXN1bHQ6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIHZhciBrZXlzID0gdGhpcy5nZXRWYWx1ZXNLZXlzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgIHZhciBkYXRhVmFsdWUgPSB0aGlzLmdldERhdGFWYWx1ZUNvcmUodGhpcy52YWx1ZXNIYXNoLCBrZXkpO1xuICAgICAgaWYgKGRhdGFWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gZGF0YVZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNldENhbGN1YXRlZFZhbHVlc0ludG9SZXN1bHQocmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHB1YmxpYyBzZXQgZGF0YShkYXRhOiBhbnkpIHtcbiAgICB0aGlzLnZhbHVlc0hhc2ggPSB7fTtcbiAgICB0aGlzLnNldERhdGFDb3JlKGRhdGEpO1xuICB9XG4gIC8qKlxuICAgKiBNZXJnZSB0aGUgdmFsdWVzIGludG8gc3VydmV5LmRhdGEuIEl0IHdvcmtzIGFzIHN1cnZleS5kYXRhLCBleGNlcHQgaXQgZG9lc24ndCBjbGVhbiB0aGUgZXhpc3RpbmcgZGF0YSwgYnV0IG92ZXJyaWRlcyB0aGVtLlxuICAgKiBAcGFyYW0gZGF0YSBkYXRhIHRvIG1lcmdlLiBJdCBzaG91bGQgYmUgYW4gb2JqZWN0IHtrZXlWYWx1ZTogVmFsdWUsIC4uLn1cbiAgICogQHNlZSBkYXRhXG4gICAqIEBzZWUgc2V0VmFsdWVcbiAgICovXG4gIHB1YmxpYyBtZXJnZURhdGEoZGF0YTogYW55KSB7XG4gICAgaWYgKCFkYXRhKSByZXR1cm47XG4gICAgdGhpcy5zZXREYXRhQ29yZShkYXRhKTtcbiAgfVxuICBwdWJsaWMgc2V0RGF0YUNvcmUoZGF0YTogYW55KSB7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGZvciAodmFyIGtleSBpbiBkYXRhKSB7XG4gICAgICAgIHRoaXMuc2V0RGF0YVZhbHVlQ29yZSh0aGlzLnZhbHVlc0hhc2gsIGtleSwgZGF0YVtrZXldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy51cGRhdGVBbGxRdWVzdGlvbnNWYWx1ZSgpO1xuICAgIHRoaXMubm90aWZ5QWxsUXVlc3Rpb25zT25WYWx1ZUNoYW5nZWQoKTtcbiAgICB0aGlzLm5vdGlmeUVsZW1lbnRzT25BbnlWYWx1ZU9yVmFyaWFibGVDaGFuZ2VkKFwiXCIpO1xuICAgIHRoaXMucnVuQ29uZGl0aW9ucygpO1xuICB9XG4gIHByaXZhdGUgb25FZGl0aW5nT2JqUHJvcGVydHlDaGFuZ2VkOiAoc2VuZGVyOiBCYXNlLCBvcHRpb25zOiBhbnkpID0+IHZvaWQ7XG4gIHB1YmxpYyBnZXQgZWRpdGluZ09iaigpOiBCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0aW5nT2JqVmFsdWU7XG4gIH1cbiAgcHVibGljIHNldCBlZGl0aW5nT2JqKHZhbDogQmFzZSkge1xuICAgIGlmICh0aGlzLmVkaXRpbmdPYmogPT0gdmFsKSByZXR1cm47XG4gICAgaWYgKCEhdGhpcy5lZGl0aW5nT2JqKSB7XG4gICAgICB0aGlzLmVkaXRpbmdPYmoub25Qcm9wZXJ0eUNoYW5nZWQucmVtb3ZlKFxuICAgICAgICB0aGlzLm9uRWRpdGluZ09ialByb3BlcnR5Q2hhbmdlZFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5lZGl0aW5nT2JqVmFsdWUgPSB2YWw7XG4gICAgaWYgKHRoaXMuaXNEaXNwb3NlZCkgcmV0dXJuO1xuICAgIGlmICghdmFsKSB7XG4gICAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRBbGxRdWVzdGlvbnMoKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHF1ZXN0aW9uc1tpXS51bmJpbmRWYWx1ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoISF0aGlzLmVkaXRpbmdPYmopIHtcbiAgICAgIHRoaXMuc2V0RGF0YUNvcmUoe30pO1xuICAgICAgdGhpcy5vbkVkaXRpbmdPYmpQcm9wZXJ0eUNoYW5nZWQgPSAoc2VuZGVyOiBCYXNlLCBvcHRpb25zOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKCFTZXJpYWxpemVyLmhhc09yaWdpbmFsUHJvcGVydHkodGhpcy5lZGl0aW5nT2JqLCBvcHRpb25zLm5hbWUpKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy51cGRhdGVPblNldFZhbHVlKG9wdGlvbnMubmFtZSwgKDxhbnk+dGhpcy5lZGl0aW5nT2JqKVtvcHRpb25zLm5hbWVdLCBvcHRpb25zLm9sZFZhbHVlKTtcbiAgICAgIH07XG4gICAgICB0aGlzLmVkaXRpbmdPYmoub25Qcm9wZXJ0eUNoYW5nZWQuYWRkKHRoaXMub25FZGl0aW5nT2JqUHJvcGVydHlDaGFuZ2VkKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCBpc0VkaXRpbmdTdXJ2ZXlFbGVtZW50KCkge1xuICAgIHJldHVybiAhIXRoaXMuZWRpdGluZ09iajtcbiAgfVxuICBwcml2YXRlIHNldENhbGN1YXRlZFZhbHVlc0ludG9SZXN1bHQocmVzdWx0OiBhbnkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2FsY3VsYXRlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNhbFZhbHVlID0gdGhpcy5jYWxjdWxhdGVkVmFsdWVzW2ldO1xuICAgICAgaWYgKFxuICAgICAgICBjYWxWYWx1ZS5pbmNsdWRlSW50b1Jlc3VsdCAmJlxuICAgICAgICAhIWNhbFZhbHVlLm5hbWUgJiZcbiAgICAgICAgdGhpcy5nZXRWYXJpYWJsZShjYWxWYWx1ZS5uYW1lKSAhPT0gdW5kZWZpbmVkXG4gICAgICApIHtcbiAgICAgICAgcmVzdWx0W2NhbFZhbHVlLm5hbWVdID0gdGhpcy5nZXRWYXJpYWJsZShjYWxWYWx1ZS5uYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZ2V0QWxsVmFsdWVzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBzdXJ2ZXkgcmVzdWx0IGRhdGEgYXMgYW4gYXJyYXkgb2YgcGxhaW4gb2JqZWN0czogd2l0aCBxdWVzdGlvbiBgdGl0bGVgLCBgbmFtZWAsIGB2YWx1ZWAsIGFuZCBgZGlzcGxheVZhbHVlYC5cbiAgICpcbiAgICogRm9yIGNvbXBsZXggcXVlc3Rpb25zIChsaWtlIG1hdHJpeCwgZXRjLikgYGlzTm9kZWAgZmxhZyBpcyBzZXQgdG8gYHRydWVgIGFuZCBkYXRhIGNvbnRhaW5zIGFycmF5IG9mIG5lc3RlZCBvYmplY3RzIChyb3dzKS5cbiAgICpcbiAgICogU2V0IGBvcHRpb25zLmluY2x1ZGVFbXB0eWAgdG8gYGZhbHNlYCBpZiB5b3Ugd2FudCB0byBza2lwIGVtcHR5IGFuc3dlcnMuXG4gICAqL1xuICBwdWJsaWMgZ2V0UGxhaW5EYXRhKFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGluY2x1ZGVFbXB0eT86IGJvb2xlYW4sXG4gICAgICBpbmNsdWRlUXVlc3Rpb25UeXBlcz86IGJvb2xlYW4sXG4gICAgICBjYWxjdWxhdGlvbnM/OiBBcnJheTx7XG4gICAgICAgIHByb3BlcnR5TmFtZTogc3RyaW5nLFxuICAgICAgfT4sXG4gICAgfSA9IHtcbiAgICAgIGluY2x1ZGVFbXB0eTogdHJ1ZSxcbiAgICAgIGluY2x1ZGVRdWVzdGlvblR5cGVzOiBmYWxzZSxcbiAgICB9XG4gICkge1xuICAgIHZhciByZXN1bHQ6IEFycmF5PGFueT4gPSBbXTtcbiAgICB0aGlzLmdldEFsbFF1ZXN0aW9ucygpLmZvckVhY2goKHF1ZXN0aW9uKSA9PiB7XG4gICAgICB2YXIgcmVzdWx0SXRlbSA9ICg8UXVlc3Rpb24+cXVlc3Rpb24pLmdldFBsYWluRGF0YShvcHRpb25zKTtcbiAgICAgIGlmICghIXJlc3VsdEl0ZW0pIHtcbiAgICAgICAgcmVzdWx0LnB1c2gocmVzdWx0SXRlbSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBnZXRGaWx0ZXJlZFZhbHVlcygpOiBhbnkge1xuICAgIHZhciB2YWx1ZXM6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnZhcmlhYmxlc0hhc2gpIHZhbHVlc1trZXldID0gdGhpcy52YXJpYWJsZXNIYXNoW2tleV07XG4gICAgdGhpcy5hZGRDYWxjdWxhdGVkVmFsdWVzSW50b0ZpbHRlcmVkVmFsdWVzKHZhbHVlcyk7XG4gICAgdmFyIGtleXMgPSB0aGlzLmdldFZhbHVlc0tleXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgdmFsdWVzW2tleV0gPSB0aGlzLmdldERhdGFWYWx1ZUNvcmUodGhpcy52YWx1ZXNIYXNoLCBrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG4gIHByaXZhdGUgYWRkQ2FsY3VsYXRlZFZhbHVlc0ludG9GaWx0ZXJlZFZhbHVlcyh2YWx1ZXM6IHtcbiAgICBbaW5kZXg6IHN0cmluZ106IGFueSxcbiAgfSkge1xuICAgIHZhciBjYWNsVmFsdWVzID0gdGhpcy5jYWxjdWxhdGVkVmFsdWVzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2FjbFZhbHVlcy5sZW5ndGg7IGkrKylcbiAgICAgIHZhbHVlc1tjYWNsVmFsdWVzW2ldLm5hbWVdID0gY2FjbFZhbHVlc1tpXS52YWx1ZTtcbiAgfVxuICBnZXRGaWx0ZXJlZFByb3BlcnRpZXMoKTogYW55IHtcbiAgICByZXR1cm4geyBzdXJ2ZXk6IHRoaXMgfTtcbiAgfVxuICBwcml2YXRlIGdldFZhbHVlc0tleXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgaWYgKCF0aGlzLmVkaXRpbmdPYmopIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnZhbHVlc0hhc2gpO1xuICAgIHZhciBwcm9wcyA9IFNlcmlhbGl6ZXIuZ2V0UHJvcGVydGllc0J5T2JqKHRoaXMuZWRpdGluZ09iaik7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlcy5wdXNoKHByb3BzW2ldLm5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBnZXREYXRhVmFsdWVDb3JlKHZhbHVlc0hhc2g6IGFueSwga2V5OiBzdHJpbmcpIHtcbiAgICBpZiAoISF0aGlzLmVkaXRpbmdPYmopXG4gICAgICByZXR1cm4gU2VyaWFsaXplci5nZXRPYmpQcm9wZXJ0eVZhbHVlKHRoaXMuZWRpdGluZ09iaiwga2V5KTtcbiAgICByZXR1cm4gdmFsdWVzSGFzaFtrZXldO1xuICB9XG4gIHB1YmxpYyBzZXREYXRhVmFsdWVDb3JlKHZhbHVlc0hhc2g6IGFueSwga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICBpZiAoISF0aGlzLmVkaXRpbmdPYmopIHtcbiAgICAgIFNlcmlhbGl6ZXIuc2V0T2JqUHJvcGVydHlWYWx1ZSh0aGlzLmVkaXRpbmdPYmosIGtleSwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZXNIYXNoW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGRlbGV0ZURhdGFWYWx1ZUNvcmUodmFsdWVzSGFzaDogYW55LCBrZXk6IHN0cmluZykge1xuICAgIGlmICghIXRoaXMuZWRpdGluZ09iaikge1xuICAgICAgKDxhbnk+dGhpcy5lZGl0aW5nT2JqKVtrZXldID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHZhbHVlc0hhc2hba2V5XTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIGNvbW1lbnRzIGZyb20gdGhlIGRhdGEuXG4gICAqIEBzZWUgZGF0YVxuICAgKi9cbiAgcHVibGljIGdldCBjb21tZW50cygpOiBhbnkge1xuICAgIHZhciByZXN1bHQ6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIHZhciBrZXlzID0gdGhpcy5nZXRWYWx1ZXNLZXlzKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmIChrZXkuaW5kZXhPZih0aGlzLmNvbW1lbnRQcmVmaXgpID4gMCkge1xuICAgICAgICByZXN1bHRba2V5XSA9IHRoaXMuZ2V0RGF0YVZhbHVlQ29yZSh0aGlzLnZhbHVlc0hhc2gsIGtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsaXN0IG9mIHZpc2libGUgcGFnZXMuIElmIGFsbCBwYWdlcyBhcmUgdmlzaWJsZSwgdGhlbiB0aGlzIHByb3BlcnR5IHJldHVybnMgdGhlIHNhbWUgbGlzdCBhcyB0aGUgYHBhZ2VzYCBwcm9wZXJ0eS5cbiAgICogQHNlZSBwYWdlc1xuICAgKiBAc2VlIFBhZ2VNb2RlbC52aXNpYmxlXG4gICAqIEBzZWUgUGFnZU1vZGVsLnZpc2libGVJZlxuICAgKi9cbiAgcHVibGljIGdldCB2aXNpYmxlUGFnZXMoKTogQXJyYXk8UGFnZU1vZGVsPiB7XG4gICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKSByZXR1cm4gdGhpcy5wYWdlcztcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PFBhZ2VNb2RlbD4oKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmlzUGFnZUluVmlzaWJsZUxpc3QodGhpcy5wYWdlc1tpXSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2godGhpcy5wYWdlc1tpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHJpdmF0ZSBpc1BhZ2VJblZpc2libGVMaXN0KHBhZ2U6IFBhZ2VNb2RlbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRGVzaWduTW9kZSB8fCBwYWdlLmlzVmlzaWJsZSAmJiAhcGFnZS5pc1N0YXJ0ZWQ7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBzdXJ2ZXkgY29udGFpbnMgbm8gcGFnZXMuIFRoZSBzdXJ2ZXkgaXMgZW1wdHkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGFnZXMubGVuZ3RoID09IDA7XG4gIH1cbiAgLyoqXG4gICAqIERlcHJlY2F0ZWQuIFVzZSB0aGUgYHBhZ2VDb3VudGAgcHJvcGVydHkgaW5zdGVhZC5cbiAgICovXG4gIGdldCBQYWdlQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlQ291bnQ7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHN1cnZleSBwYWdlIGNvdW50LlxuICAgKiBAc2VlIHZpc2libGVQYWdlQ291bnRcbiAgICogQHNlZSBwYWdlc1xuICAgKi9cbiAgcHVibGljIGdldCBwYWdlQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlcy5sZW5ndGg7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSBudW1iZXIgb2YgdmlzaWJsZSBwYWdlcyB3aXRoaW4gdGhlIHN1cnZleS5cbiAgICogQHNlZSBwYWdlQ291bnRcbiAgICogQHNlZSB2aXNpYmxlUGFnZXNcbiAgICovXG4gIHB1YmxpYyBnZXQgdmlzaWJsZVBhZ2VDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnZpc2libGVQYWdlcy5sZW5ndGg7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHN0YXJ0ZWQgcGFnZS4gVGhpcyBwcm9wZXJ0eSB3b3JrcyBpZiB0aGUgYGZpcnN0UGFnZUlzU3RhcnRlZGAgcHJvcGVydHkgaXMgc2V0IHRvIGB0cnVlYC5cbiAgICogQHNlZSBmaXJzdFBhZ2VJc1N0YXJ0ZWRcbiAgICovXG4gIHB1YmxpYyBnZXQgc3RhcnRlZFBhZ2UoKTogUGFnZU1vZGVsIHtcbiAgICB2YXIgcGFnZSA9XG4gICAgICB0aGlzLmZpcnN0UGFnZUlzU3RhcnRlZCAmJiB0aGlzLnBhZ2VzLmxlbmd0aCA+IDAgPyB0aGlzLnBhZ2VzWzBdIDogbnVsbDtcbiAgICBpZiAoISFwYWdlKSB7XG4gICAgICBwYWdlLm9uRmlyc3RSZW5kZXJpbmcoKTtcbiAgICAgIHBhZ2Uuc2V0V2FzU2hvd24odHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiBwYWdlO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGhlIGN1cnJlbnQgc3VydmV5IHBhZ2UuIElmIGEgc3VydmV5IGlzIHJlbmRlcmVkLCB0aGVuIHRoaXMgcHJvcGVydHkgcmV0dXJucyBhIHBhZ2UgdGhhdCBhIHVzZXIgY2FuIHNlZS9lZGl0LlxuICAgKi9cbiAgcHVibGljIGdldCBjdXJyZW50UGFnZSgpOiBhbnkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlVmFsdWUgIT0gbnVsbCkge1xuICAgICAgaWYgKCF0aGlzLmlzUGFnZUluVmlzaWJsZUxpc3QodGhpcy5jdXJyZW50UGFnZVZhbHVlKSB8fCB0aGlzLnBhZ2VzLmluZGV4T2YodGhpcy5jdXJyZW50UGFnZVZhbHVlKSA8IDApIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICF0aGlzLm9uQ29udGFpbnNQYWdlQ2FsbGJhY2sgfHxcbiAgICAgICAgICAhdGhpcy5vbkNvbnRhaW5zUGFnZUNhbGxiYWNrKHRoaXMuY3VycmVudFBhZ2VWYWx1ZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2VWYWx1ZSA9PSBudWxsICYmICEhdGhpcy5maXJzdFZpc2libGVQYWdlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5maXJzdFZpc2libGVQYWdlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jdXJyZW50UGFnZVZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXQgY3VycmVudFBhZ2UodmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgdmFyIG5ld1BhZ2UgPSB0aGlzLmdldFBhZ2VCeU9iamVjdCh2YWx1ZSk7XG4gICAgaWYgKCEhdmFsdWUgJiYgIW5ld1BhZ2UpIHJldHVybjtcbiAgICB2YXIgdlBhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XG4gICAgaWYgKG5ld1BhZ2UgIT0gbnVsbCAmJiB2UGFnZXMuaW5kZXhPZihuZXdQYWdlKSA8IDApIHJldHVybjtcbiAgICBpZiAobmV3UGFnZSA9PSB0aGlzLmN1cnJlbnRQYWdlVmFsdWUpIHJldHVybjtcbiAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLmN1cnJlbnRQYWdlVmFsdWU7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRQYWdlQ2hhbmdpbmcobmV3UGFnZSwgb2xkVmFsdWUpKSByZXR1cm47XG4gICAgdGhpcy5jdXJyZW50UGFnZVZhbHVlID0gbmV3UGFnZTtcbiAgICBpZiAoISFuZXdQYWdlKSB7XG4gICAgICBuZXdQYWdlLm9uRmlyc3RSZW5kZXJpbmcoKTtcbiAgICAgIG5ld1BhZ2UudXBkYXRlQ3VzdG9tV2lkZ2V0cygpO1xuICAgICAgbmV3UGFnZS5zZXRXYXNTaG93bih0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIHRoaXMuY3VycmVudFBhZ2VDaGFuZ2VkKG5ld1BhZ2UsIG9sZFZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudFBhZ2UsIHVubGVzcyB0aGUgc3RhcnRlZCBwYWdlIGlzIHNob3dpbmcuIEluIHRoaXMgY2FzZSByZXR1cm5zIHRoZSBzdGFydGVkIHBhZ2UuXG4gICAqIEBzZWUgY3VycmVudFBhZ2VcbiAgICogQHNlZSBmaXJzdFBhZ2VJc1N0YXJ0ZWRcbiAgICogQHNlZSBzdGFydGVkUGFnZVxuICAgKi9cbiAgcHVibGljIGdldCBhY3RpdmVQYWdlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuaXNTdGFydGVkU3RhdGUgJiYgdGhpcy5zdGFydGVkUGFnZSAmJiAhdGhpcy5pc0Rlc2lnbk1vZGVcbiAgICAgID8gdGhpcy5zdGFydGVkUGFnZVxuICAgICAgOiB0aGlzLmN1cnJlbnRQYWdlO1xuICB9XG4gIHByaXZhdGUgZ2V0UGFnZUJ5T2JqZWN0KHZhbHVlOiBhbnkpOiBQYWdlTW9kZWwge1xuICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xuICAgIGlmICh2YWx1ZS5nZXRUeXBlICYmIHZhbHVlLmdldFR5cGUoKSA9PSBcInBhZ2VcIikgcmV0dXJuIHZhbHVlO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcpXG4gICAgICByZXR1cm4gdGhpcy5nZXRQYWdlQnlOYW1lKFN0cmluZyh2YWx1ZSkpO1xuICAgIGlmICghaXNOYU4odmFsdWUpKSB7XG4gICAgICB2YXIgaW5kZXggPSBOdW1iZXIodmFsdWUpO1xuICAgICAgdmFyIHZQYWdlcyA9IHRoaXMudmlzaWJsZVBhZ2VzO1xuICAgICAgaWYgKHZhbHVlIDwgMCB8fCB2YWx1ZSA+PSB2UGFnZXMubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiB2UGFnZXNbaW5kZXhdO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSB6ZXJvLWJhc2VkIGluZGV4IG9mIHRoZSBjdXJyZW50IHBhZ2UgaW4gdGhlIHZpc2libGUgcGFnZXMgYXJyYXkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGN1cnJlbnRQYWdlTm8oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlUGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGN1cnJlbnRQYWdlTm8odmFsdWU6IG51bWJlcikge1xuICAgIHZhciB2UGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcbiAgICBpZiAodmFsdWUgPCAwIHx8IHZhbHVlID49IHZQYWdlcy5sZW5ndGgpIHJldHVybjtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gdlBhZ2VzW3ZhbHVlXTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRoZSBxdWVzdGlvbiBkaXNwbGF5IG9yZGVyLiBVc2UgdGhpcyBwcm9wZXJ0eSB0byByYW5kb21pemUgcXVlc3Rpb25zLiBZb3UgY2FuIHJhbmRvbWl6ZSBxdWVzdGlvbnMgb24gYSBzcGVjaWZpYyBwYWdlLlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZTpcbiAgICpcbiAgICogLSBgcmFuZG9tYCAtIHJhbmRvbWl6ZSBxdWVzdGlvbnNcbiAgICogLSBgaW5pdGlhbGAgLSBrZWVwIHF1ZXN0aW9ucyBpbiB0aGUgc2FtZSBvcmRlciwgYXMgaW4gYSBzdXJ2ZXkgbW9kZWwuXG4gICAqIEBzZWUgU3VydmV5UGFnZS5xdWVzdGlvbnNPcmRlclxuICAgKi9cbiAgcHVibGljIGdldCBxdWVzdGlvbnNPcmRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicXVlc3Rpb25zT3JkZXJcIik7XG4gIH1cbiAgcHVibGljIHNldCBxdWVzdGlvbnNPcmRlcih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInF1ZXN0aW9uc09yZGVyXCIsIHZhbCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgaW5wdXQgZm9jdXMgdG8gdGhlIGZpcnN0IHF1ZXN0aW9uIHdpdGggdGhlIGlucHV0IGZpZWxkLlxuICAgKi9cbiAgcHVibGljIGZvY3VzRmlyc3RRdWVzdGlvbigpIHtcbiAgICBpZiAodGhpcy5pc0ZvY3VzaW5nUXVlc3Rpb24pIHJldHVybjtcbiAgICB2YXIgcGFnZSA9IHRoaXMuYWN0aXZlUGFnZTtcbiAgICBpZiAocGFnZSkge1xuICAgICAgcGFnZS5zY3JvbGxUb1RvcCgpO1xuICAgICAgcGFnZS5mb2N1c0ZpcnN0UXVlc3Rpb24oKTtcbiAgICB9XG4gIH1cbiAgc2Nyb2xsVG9Ub3BPblBhZ2VDaGFuZ2UoKSB7XG4gICAgdmFyIHBhZ2UgPSB0aGlzLmFjdGl2ZVBhZ2U7XG4gICAgaWYgKCFwYWdlKSByZXR1cm47XG4gICAgcGFnZS5zY3JvbGxUb1RvcCgpO1xuICAgIGlmICh0aGlzLmZvY3VzRmlyc3RRdWVzdGlvbkF1dG9tYXRpYyAmJiAhdGhpcy5pc0ZvY3VzaW5nUXVlc3Rpb24pIHtcbiAgICAgIHBhZ2UuZm9jdXNGaXJzdFF1ZXN0aW9uKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHN1cnZleSBzdGF0ZTpcbiAgICpcbiAgICogLSBgbG9hZGluZ2AgLSB0aGUgc3VydmV5IGlzIGJlaW5nIGxvYWRlZCBmcm9tIEpTT04sXG4gICAqIC0gYGVtcHR5YCAtIHRoZXJlIGlzIG5vdGhpbmcgdG8gZGlzcGxheSBpbiB0aGUgY3VycmVudCBzdXJ2ZXksXG4gICAqIC0gYHN0YXJ0aW5nYCAtIHRoZSBzdXJ2ZXkncyBzdGFydCBwYWdlIGlzIGRpc3BsYXllZCxcbiAgICogLSBgcnVubmluZ2AgLSBhIHJlc3BvbmRlbnQgaXMgYW5zd2VyaW5nIHN1cnZleSBxdWVzdGlvbnMgcmlnaHQgbm93LFxuICAgKiAtIGBwcmV2aWV3YCAtIGEgcmVzcG9uZGVudCBpcyBwcmV2aWV3aW5nIGFuc3dlcmVkIHF1ZXN0aW9ucyBiZWZvcmUgc3VibWl0dGluZyB0aGUgc3VydmV5IChzZWUgW2V4YW1wbGVdKGh0dHBzOi8vc3VydmV5anMuaW8vRXhhbXBsZXMvTGlicmFyeT9pZD1zdXJ2ZXktc2hvd3ByZXZpZXcpKSxcbiAgICogLSBgY29tcGxldGVkYCAtIGEgcmVzcG9uZGVudCBoYXMgY29tcGxldGVkIHRoZSBzdXJ2ZXkgYW5kIHN1Ym1pdHRlZCB0aGUgcmVzdWx0cy5cbiAgICpcbiAgICogRGV0YWlsczogW1ByZXZpZXcgU3RhdGVdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5I3N0YXRlcylcbiAgICovXG4gIHB1YmxpYyBnZXQgc3RhdGUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmcpIHJldHVybiBcImxvYWRpbmdcIjtcbiAgICBpZiAodGhpcy5pc0NvbXBsZXRlZCkgcmV0dXJuIFwiY29tcGxldGVkXCI7XG4gICAgaWYgKHRoaXMuaXNDb21wbGV0ZWRCZWZvcmUpIHJldHVybiBcImNvbXBsZXRlZGJlZm9yZVwiO1xuICAgIGlmIChcbiAgICAgICF0aGlzLmlzRGVzaWduTW9kZSAmJlxuICAgICAgdGhpcy5pc0VkaXRNb2RlICYmXG4gICAgICB0aGlzLmlzU3RhcnRlZFN0YXRlICYmXG4gICAgICB0aGlzLnN0YXJ0ZWRQYWdlXG4gICAgKVxuICAgICAgcmV0dXJuIFwic3RhcnRpbmdcIjtcbiAgICBpZiAodGhpcy5pc1Nob3dpbmdQcmV2aWV3KSByZXR1cm4gdGhpcy5jdXJyZW50UGFnZSA/IFwicHJldmlld1wiIDogXCJlbXB0eVwiO1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRQYWdlID8gXCJydW5uaW5nXCIgOiBcImVtcHR5XCI7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaXNDb21wbGV0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzQ29tcGxldGVkXCIsIGZhbHNlKTtcbiAgfVxuICBwcml2YXRlIHNldCBpc0NvbXBsZXRlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc0NvbXBsZXRlZFwiLCB2YWwpO1xuICB9XG4gIHByaXZhdGUgZ2V0IGlzU2hvd2luZ1ByZXZpZXcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzU2hvd2luZ1ByZXZpZXdcIiwgZmFsc2UpO1xuICB9XG4gIHByaXZhdGUgc2V0IGlzU2hvd2luZ1ByZXZpZXcodmFsOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuaXNTaG93aW5nUHJldmlldyA9PSB2YWwpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc1Nob3dpbmdQcmV2aWV3XCIsIHZhbCk7XG4gICAgdGhpcy5vblNob3dpbmdQcmV2aWV3Q2hhbmdlZCgpO1xuICB9XG4gIHByaXZhdGUgZ2V0IGlzU3RhcnRlZFN0YXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc1N0YXJ0ZWRTdGF0ZVwiLCBmYWxzZSk7XG4gIH1cbiAgcHJpdmF0ZSBzZXQgaXNTdGFydGVkU3RhdGUodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNTdGFydGVkU3RhdGVcIiwgdmFsKTtcbiAgfVxuICBwcml2YXRlIGdldCBpc0NvbXBsZXRlZEJlZm9yZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiaXNDb21wbGV0ZWRCZWZvcmVcIiwgZmFsc2UpO1xuICB9XG4gIHByaXZhdGUgc2V0IGlzQ29tcGxldGVkQmVmb3JlKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzQ29tcGxldGVkQmVmb3JlXCIsIHZhbCk7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgaXNMb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc0xvYWRpbmdcIiwgZmFsc2UpO1xuICB9XG4gIHByaXZhdGUgc2V0IGlzTG9hZGluZyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc0xvYWRpbmdcIiwgdmFsKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29tcGxldGVkU3RhdGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb21wbGV0ZWRTdGF0ZVZhbHVlO1xuICB9XG4gIGdldCBjb21wbGV0ZWRTdGF0ZVRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb21wbGV0ZWRTdGF0ZVRleHRWYWx1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgc2V0Q29tcGxldGVkU3RhdGUodmFsdWU6IHN0cmluZywgdGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5jb21wbGV0ZWRTdGF0ZVZhbHVlID0gdmFsdWU7XG4gICAgaWYgKCF0ZXh0KSB7XG4gICAgICBpZiAodmFsdWUgPT0gXCJzYXZpbmdcIikgdGV4dCA9IHRoaXMuZ2V0TG9jU3RyaW5nKFwic2F2aW5nRGF0YVwiKTtcbiAgICAgIGlmICh2YWx1ZSA9PSBcImVycm9yXCIpIHRleHQgPSB0aGlzLmdldExvY1N0cmluZyhcInNhdmluZ0RhdGFFcnJvclwiKTtcbiAgICAgIGlmICh2YWx1ZSA9PSBcInN1Y2Nlc3NcIikgdGV4dCA9IHRoaXMuZ2V0TG9jU3RyaW5nKFwic2F2aW5nRGF0YVN1Y2Nlc3NcIik7XG4gICAgfVxuICAgIHRoaXMuY29tcGxldGVkU3RhdGVUZXh0VmFsdWUgPSB0ZXh0O1xuICB9XG4gIC8qKlxuICAgKiBDbGVhcnMgdGhlIHN1cnZleSBkYXRhIGFuZCBzdGF0ZS4gSWYgdGhlIHN1cnZleSBoYXMgYSBgY29tcGxldGVkYCBzdGF0ZSwgaXQgd2lsbCBnZXQgYSBgcnVubmluZ2Agc3RhdGUuXG4gICAqIEBwYXJhbSBjbGVhckRhdGEgY2xlYXIgdGhlIGRhdGFcbiAgICogQHBhcmFtIGdvdG9GaXJzdFBhZ2UgbWFrZSB0aGUgZmlyc3QgcGFnZSBhcyBhIGN1cnJlbnQgcGFnZS5cbiAgICogQHNlZSBkYXRhXG4gICAqIEBzZWUgc3RhdGVcbiAgICogQHNlZSBjdXJyZW50UGFnZVxuICAgKi9cbiAgcHVibGljIGNsZWFyKGNsZWFyRGF0YTogYm9vbGVhbiA9IHRydWUsIGdvdG9GaXJzdFBhZ2U6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgaWYgKGNsZWFyRGF0YSkge1xuICAgICAgdGhpcy5kYXRhID0gbnVsbDtcbiAgICAgIHRoaXMudmFyaWFibGVzSGFzaCA9IHt9O1xuICAgIH1cbiAgICB0aGlzLnRpbWVTcGVudCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhZ2VzW2ldLnRpbWVTcGVudCA9IDA7XG4gICAgICB0aGlzLnBhZ2VzW2ldLnNldFdhc1Nob3duKGZhbHNlKTtcbiAgICAgIHRoaXMucGFnZXNbaV0ucGFzc2VkID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuaXNDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzQ29tcGxldGVkQmVmb3JlID0gZmFsc2U7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmlzU3RhcnRlZFN0YXRlID0gdGhpcy5maXJzdFBhZ2VJc1N0YXJ0ZWQ7XG4gICAgaWYgKGdvdG9GaXJzdFBhZ2UgJiYgdGhpcy52aXNpYmxlUGFnZUNvdW50ID4gMCkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMudmlzaWJsZVBhZ2VzWzBdO1xuICAgIH1cbiAgICBpZiAoY2xlYXJEYXRhKSB7XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlc1dpdGhEZWZhdWx0cygpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgbWVyZ2VWYWx1ZXMoc3JjOiBhbnksIGRlc3Q6IGFueSkge1xuICAgIGlmICghZGVzdCB8fCAhc3JjKSByZXR1cm47XG4gICAgaWYgKHR5cGVvZiBkZXN0ICE9PSBcIm9iamVjdFwiKSByZXR1cm47XG4gICAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgICAgdmFyIHZhbHVlID0gc3JjW2tleV07XG4gICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGlmICghZGVzdFtrZXldKSBkZXN0W2tleV0gPSB7fTtcbiAgICAgICAgdGhpcy5tZXJnZVZhbHVlcyh2YWx1ZSwgZGVzdFtrZXldKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlc3Rba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIHVwZGF0ZVZhbHVlc1dpdGhEZWZhdWx0cygpIHtcbiAgICBpZiAodGhpcy5pc0Rlc2lnbk1vZGUgfHwgdGhpcy5pc0xvYWRpbmcpIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLnBhZ2VzW2ldLnF1ZXN0aW9ucztcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcXVlc3Rpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHF1ZXN0aW9uc1tqXS51cGRhdGVWYWx1ZVdpdGhEZWZhdWx0cygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgdXBkYXRlQ3VzdG9tV2lkZ2V0cyhwYWdlOiBQYWdlTW9kZWwpIHtcbiAgICBpZiAoIXBhZ2UpIHJldHVybjtcbiAgICBwYWdlLnVwZGF0ZUN1c3RvbVdpZGdldHMoKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3VycmVudFBhZ2VDaGFuZ2luZyhuZXdWYWx1ZTogUGFnZU1vZGVsLCBvbGRWYWx1ZTogUGFnZU1vZGVsKSB7XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICBvbGRDdXJyZW50UGFnZTogb2xkVmFsdWUsXG4gICAgICBuZXdDdXJyZW50UGFnZTogbmV3VmFsdWUsXG4gICAgICBhbGxvd0NoYW5naW5nOiB0cnVlLFxuICAgICAgaXNOZXh0UGFnZTogdGhpcy5pc05leHRQYWdlKG5ld1ZhbHVlLCBvbGRWYWx1ZSksXG4gICAgICBpc1ByZXZQYWdlOiB0aGlzLmlzUHJldlBhZ2UobmV3VmFsdWUsIG9sZFZhbHVlKSxcbiAgICB9O1xuICAgIHRoaXMub25DdXJyZW50UGFnZUNoYW5naW5nLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMuYWxsb3dDaGFuZ2luZztcbiAgfVxuICBwcm90ZWN0ZWQgY3VycmVudFBhZ2VDaGFuZ2VkKG5ld1ZhbHVlOiBQYWdlTW9kZWwsIG9sZFZhbHVlOiBQYWdlTW9kZWwpIHtcbiAgICBjb25zdCBpc05leHRQYWdlOiBib29sZWFuID0gdGhpcy5pc05leHRQYWdlKG5ld1ZhbHVlLCBvbGRWYWx1ZSk7XG4gICAgaWYgKGlzTmV4dFBhZ2UpIHtcbiAgICAgIG9sZFZhbHVlLnBhc3NlZCA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMub25DdXJyZW50UGFnZUNoYW5nZWQuZmlyZSh0aGlzLCB7XG4gICAgICBvbGRDdXJyZW50UGFnZTogb2xkVmFsdWUsXG4gICAgICBuZXdDdXJyZW50UGFnZTogbmV3VmFsdWUsXG4gICAgICBpc05leHRQYWdlOiBpc05leHRQYWdlLFxuICAgICAgaXNQcmV2UGFnZTogdGhpcy5pc1ByZXZQYWdlKG5ld1ZhbHVlLCBvbGRWYWx1ZSksXG4gICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSBpc05leHRQYWdlKG5ld1ZhbHVlOiBQYWdlTW9kZWwsIG9sZFZhbHVlOiBQYWdlTW9kZWwpOiBib29sZWFuIHtcbiAgICBpZiAoIW5ld1ZhbHVlIHx8ICFvbGRWYWx1ZSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBuZXdWYWx1ZS52aXNpYmxlSW5kZXggPT0gb2xkVmFsdWUudmlzaWJsZUluZGV4ICsgMTtcbiAgfVxuICBwcml2YXRlIGlzUHJldlBhZ2UobmV3VmFsdWU6IFBhZ2VNb2RlbCwgb2xkVmFsdWU6IFBhZ2VNb2RlbCk6IGJvb2xlYW4ge1xuICAgIGlmICghbmV3VmFsdWUgfHwgIW9sZFZhbHVlKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIG5ld1ZhbHVlLnZpc2libGVJbmRleCArIDEgPT0gb2xkVmFsdWUudmlzaWJsZUluZGV4O1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwcm9ncmVzcyB0aGF0IGEgdXNlciBtYWRlIHdoaWxlIGdvaW5nIHRocm91Z2ggdGhlIHN1cnZleS5cbiAgICogSXQgZGVwZW5kcyBmcm9tIHByb2dyZXNzQmFyVHlwZSBwcm9wZXJ0eVxuICAgKiBAc2VlIHByb2dyZXNzQmFyVHlwZVxuICAgKiBAc2VlIHByb2dyZXNzVmFsdWVcbiAgICovXG4gIHB1YmxpYyBnZXRQcm9ncmVzcygpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlID09IG51bGwpIHJldHVybiAwO1xuICAgIGlmICh0aGlzLnByb2dyZXNzQmFyVHlwZSAhPT0gXCJwYWdlc1wiKSB7XG4gICAgICB2YXIgaW5mbyA9IHRoaXMuZ2V0UHJvZ3Jlc3NJbmZvKCk7XG4gICAgICBpZiAodGhpcy5wcm9ncmVzc0JhclR5cGUgPT09IFwicmVxdWlyZWRRdWVzdGlvbnNcIikge1xuICAgICAgICByZXR1cm4gaW5mby5yZXF1aXJlZFF1ZXN0aW9uQ291bnQgPiAxXG4gICAgICAgICAgPyBNYXRoLmNlaWwoXG4gICAgICAgICAgICAoaW5mby5yZXF1aXJlZEFuc3dlcmVkUXVlc3Rpb25Db3VudCAqIDEwMCkgL1xuICAgICAgICAgICAgaW5mby5yZXF1aXJlZFF1ZXN0aW9uQ291bnRcbiAgICAgICAgICApXG4gICAgICAgICAgOiAxMDA7XG4gICAgICB9XG4gICAgICByZXR1cm4gaW5mby5xdWVzdGlvbkNvdW50ID4gMVxuICAgICAgICA/IE1hdGguY2VpbCgoaW5mby5hbnN3ZXJlZFF1ZXN0aW9uQ291bnQgKiAxMDApIC8gaW5mby5xdWVzdGlvbkNvdW50KVxuICAgICAgICA6IDEwMDtcbiAgICB9XG4gICAgY29uc3QgdmlzUGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcbiAgICB2YXIgaW5kZXggPSB2aXNQYWdlcy5pbmRleE9mKHRoaXMuY3VycmVudFBhZ2UpICsgMTtcbiAgICByZXR1cm4gTWF0aC5jZWlsKChpbmRleCAqIDEwMCkgLyB2aXNQYWdlcy5sZW5ndGgpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwcm9ncmVzcyB0aGF0IGEgdXNlciBtYWRlIHdoaWxlIGdvaW5nIHRocm91Z2ggdGhlIHN1cnZleS5cbiAgICogSXQgZGVwZW5kcyBmcm9tIHByb2dyZXNzQmFyVHlwZSBwcm9wZXJ0eVxuICAgKiBAc2VlIHByb2dyZXNzQmFyVHlwZVxuICAgKi9cbiAgcHVibGljIGdldCBwcm9ncmVzc1ZhbHVlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInByb2dyZXNzVmFsdWVcIiwgMCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG5hdmlnYXRpb24gYnV0dG9ucyAoaS5lLiwgJ1ByZXYnLCAnTmV4dCcsIG9yICdDb21wbGV0ZScgYW5kICdQcmV2aWV3JykgcG9zaXRpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKSByZXR1cm4gXCJub25lXCI7XG4gICAgdmFyIHBhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlO1xuICAgIGlmICghcGFnZSkgcmV0dXJuIFwibm9uZVwiO1xuICAgIGlmIChwYWdlLm5hdmlnYXRpb25CdXR0b25zVmlzaWJpbGl0eSA9PT0gXCJzaG93XCIpIHtcbiAgICAgIHJldHVybiBcImJvdHRvbVwiO1xuICAgIH1cbiAgICBpZiAocGFnZS5uYXZpZ2F0aW9uQnV0dG9uc1Zpc2liaWxpdHkgPT09IFwiaGlkZVwiKSB7XG4gICAgICByZXR1cm4gXCJub25lXCI7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNob3dOYXZpZ2F0aW9uQnV0dG9ucztcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBuYXZpZ2F0aW9uIGJ1dHRvbnMgKGkuZS4sICdQcmV2JywgJ05leHQnLCBvciAnQ29tcGxldGUnIGFuZCAnUHJldmlldycpIGFyZSBzaG93cyBvbiB0b3AuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nT25Ub3AoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXNOYXZpZ2F0aW9uQnV0dG9uc1Nob3dpbmdPbihcInRvcFwiKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBuYXZpZ2F0aW9uIGJ1dHRvbnMgKGkuZS4sICdQcmV2JywgJ05leHQnLCBvciAnQ29tcGxldGUnIGFuZCAnUHJldmlldycpIGFyZSBzaG93cyBvbiBib3R0b20uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nT25Cb3R0b20oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXNOYXZpZ2F0aW9uQnV0dG9uc1Nob3dpbmdPbihcImJvdHRvbVwiKTtcbiAgfVxuICBwcml2YXRlIGdldElzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nT24oYnV0dG9uUG9zaXRpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHZhciByZXMgPSB0aGlzLmlzTmF2aWdhdGlvbkJ1dHRvbnNTaG93aW5nO1xuICAgIHJldHVybiByZXMgPT0gXCJib3RoXCIgfHwgcmVzID09IGJ1dHRvblBvc2l0aW9uO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgc3VydmV5IGlzIGluIGVkaXQgbW9kZS5cbiAgICogQHNlZSBtb2RlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzRWRpdE1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PSBcImVkaXRcIjtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzQ29tcGxldGVCdXR0b25WaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlzTGFzdCA9IHRoaXMuaXNMYXN0UGFnZTtcbiAgICBjb25zdCBjYW5FZGl0ID0gdGhpcy5pc0VkaXRNb2RlO1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBzaG93UHJldmlldyA9IHRoaXMuaXNTaG93UHJldmlld0JlZm9yZUNvbXBsZXRlO1xuICAgIHJldHVybiBjYW5FZGl0ICYmIChzdGF0ZSA9PT0gXCJydW5uaW5nXCIgJiYgaXNMYXN0ICYmICFzaG93UHJldmlldyB8fCBzdGF0ZSA9PT0gXCJwcmV2aWV3XCIpO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNQcmV2aWV3QnV0dG9uVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5pc0VkaXRNb2RlICYmXG4gICAgICB0aGlzLmlzU2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZSAmJlxuICAgICAgdGhpcy5zdGF0ZSA9PSBcInJ1bm5pbmdcIlxuICAgICk7XG4gIH1cbiAgcHVibGljIGdldCBpc0NhbmNlbFByZXZpZXdCdXR0b25WaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmlzRWRpdE1vZGUgJiZcbiAgICAgIHRoaXMuaXNTaG93UHJldmlld0JlZm9yZUNvbXBsZXRlICYmXG4gICAgICB0aGlzLnN0YXRlID09IFwicHJldmlld1wiXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHN1cnZleSBpcyBpbiBkaXNwbGF5IG1vZGUgb3IgaW4gcHJldmlldyBtb2RlLlxuICAgKiBAc2VlIG1vZGVcbiAgICogQHNlZSBzaG93UHJldmlld0JlZm9yZUNvbXBsZXRlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzRGlzcGxheU1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PSBcImRpc3BsYXlcIiB8fCB0aGlzLnN0YXRlID09IFwicHJldmlld1wiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNVcGRhdGVWYWx1ZVRleHRPblR5cGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0VXBkYXRlTW9kZSA9PSBcIm9uVHlwaW5nXCI7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBzdXJ2ZXkgaXMgaW4gZGVzaWduIG1vZGUuIEl0IGlzIHVzZWQgYnkgU3VydmV5SlMgRWRpdG9yLlxuICAgKiBAc2VlIHNldERlc2lnbk1vZGVcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNEZXNpZ25Nb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0Rlc2lnbk1vZGU7XG4gIH1cbiAgcHJpdmF0ZSBfaXNEZXNpZ25Nb2RlOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzdXJ2ZXkgaW50byBkZXNpZ24gbW9kZS5cbiAgICogQHBhcmFtIHZhbHVlIHVzZSB0cnVlIHRvIHNldCB0aGUgc3VydmV5IGludG8gdGhlIGRlc2lnbiBtb2RlLlxuICAgKi9cbiAgcHVibGljIHNldERlc2lnbk1vZGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9pc0Rlc2lnbk1vZGUgPSB2YWx1ZTtcbiAgICB0aGlzLm9uUXVlc3Rpb25zT25QYWdlTW9kZUNoYW5nZWQoXCJzdGFuZGFyZFwiKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHdoZXRoZXIgdG8gc2hvdyBhbGwgZWxlbWVudHMgaW4gdGhlIHN1cnZleSwgcmVnYXJkbGVzcyB0aGVpciB2aXNpYmlsaXR5LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxuICAgKi9cbiAgcHVibGljIGdldCBzaG93SW52aXNpYmxlRWxlbWVudHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNob3dJbnZpc2libGVFbGVtZW50c1wiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBzaG93SW52aXNpYmxlRWxlbWVudHModmFsOiBib29sZWFuKSB7XG4gICAgdmFyIHZpc1BhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwic2hvd0ludmlzaWJsZUVsZW1lbnRzXCIsIHZhbCk7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICB0aGlzLnJ1bkNvbmRpdGlvbnMoKTtcbiAgICB0aGlzLnVwZGF0ZUFsbEVsZW1lbnRzVmlzaWJpbGl0eSh2aXNQYWdlcyk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVBbGxFbGVtZW50c1Zpc2liaWxpdHkodmlzUGFnZXM6IEFycmF5PFBhZ2VNb2RlbD4pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwYWdlID0gdGhpcy5wYWdlc1tpXTtcbiAgICAgIHBhZ2UudXBkYXRlRWxlbWVudFZpc2liaWxpdHkoKTtcbiAgICAgIGlmICh2aXNQYWdlcy5pbmRleE9mKHBhZ2UpID4gLTEgIT0gcGFnZS5pc1Zpc2libGUpIHtcbiAgICAgICAgdGhpcy5vblBhZ2VWaXNpYmxlQ2hhbmdlZC5maXJlKHRoaXMsIHtcbiAgICAgICAgICBwYWdlOiBwYWdlLFxuICAgICAgICAgIHZpc2libGU6IHBhZ2UuaXNWaXNpYmxlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCBhcmVJbnZpc2libGVFbGVtZW50c1Nob3dpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNEZXNpZ25Nb2RlIHx8IHRoaXMuc2hvd0ludmlzaWJsZUVsZW1lbnRzO1xuICB9XG4gIHB1YmxpYyBnZXQgYXJlRW1wdHlFbGVtZW50c0hpZGRlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5pc1Nob3dpbmdQcmV2aWV3ICYmXG4gICAgICB0aGlzLnNob3dQcmV2aWV3QmVmb3JlQ29tcGxldGUgPT0gXCJzaG93QW5zd2VyZWRRdWVzdGlvbnNcIlxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgLCBpZiBhIHVzZXIgaGFzIGFscmVhZHkgY29tcGxldGVkIHRoZSBzdXJ2ZXkgaW4gdGhpcyBicm93c2VyIGFuZCB0aGVyZSBpcyBhIGNvb2tpZSBhYm91dCBpdC4gU3VydmV5IGdvZXMgdG8gYGNvbXBsZXRlZGAgc3RhdGUgaWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYHRydWVgLlxuICAgKiBAc2VlIGNvb2tpZU5hbWVcbiAgICogQHNlZSBzZXRDb29raWVcbiAgICogQHNlZSBkZWxldGVDb29raWVcbiAgICogQHNlZSBzdGF0ZVxuICAgKi9cbiAgcHVibGljIGdldCBoYXNDb29raWUoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmNvb2tpZU5hbWUgfHwgdHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWU7XG4gICAgcmV0dXJuIGNvb2tpZXMgJiYgY29va2llcy5pbmRleE9mKHRoaXMuY29va2llTmFtZSArIFwiPXRydWVcIikgPiAtMTtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoZSBjb29raWUgd2l0aCBgY29va2llTmFtZWAgaW4gdXNlcidzIGJyb3dzZXIuIEl0IGlzIGRvbmUgYXV0b21hdGljYWxseSBvbiBzdXJ2ZXkgY29tcGxldGUgaWYgdGhlIGBjb29raWVOYW1lYCBwcm9wZXJ0eSB2YWx1ZSBpcyBub3QgZW1wdHkuXG4gICAqIEBzZWUgY29va2llTmFtZVxuICAgKiBAc2VlIGhhc0Nvb2tpZVxuICAgKiBAc2VlIGRlbGV0ZUNvb2tpZVxuICAgKi9cbiAgcHVibGljIHNldENvb2tpZSgpIHtcbiAgICBpZiAoIXRoaXMuY29va2llTmFtZSB8fCB0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcbiAgICBkb2N1bWVudC5jb29raWUgPVxuICAgICAgdGhpcy5jb29raWVOYW1lICsgXCI9dHJ1ZTsgZXhwaXJlcz1GcmksIDMxIERlYyA5OTk5IDA6MDowIEdNVFwiO1xuICB9XG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBjb29raWUgd2l0aCBgY29va2llTmFtZWAgZnJvbSB0aGUgYnJvd3Nlci5cbiAgICogQHNlZSBjb29raWVOYW1lXG4gICAqIEBzZWUgaGFzQ29va2llXG4gICAqIEBzZWUgc2V0Q29va2llXG4gICAqL1xuICBwdWJsaWMgZGVsZXRlQ29va2llKCkge1xuICAgIGlmICghdGhpcy5jb29raWVOYW1lKSByZXR1cm47XG4gICAgZG9jdW1lbnQuY29va2llID0gdGhpcy5jb29raWVOYW1lICsgXCI9O1wiO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgd2hldGhlciB0aGUgc3VydmV5IG11c3QgaWdub3JlIHZhbGlkYXRpb24gbGlrZSByZXF1aXJlZCBxdWVzdGlvbnMgYW5kIG90aGVycywgb24gYG5leHRQYWdlYCBhbmQgYGNvbXBsZXRlTGFzdFBhZ2VgIGZ1bmN0aW9uIGNhbGxzLiBUaGUgZGVmYXVsdCBpcyBgZmFsc2VgLlxuICAgKiBAc2VlIG5leHRQYWdlXG4gICAqIEBzZWUgY29tcGxldGVMYXN0UGFnZVxuICAgKiBAc2VlIG1vZGVcbiAgICovXG4gIHB1YmxpYyBpZ25vcmVWYWxpZGF0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKlxuICAgKiBOYXZpZ2F0ZXMgdXNlciB0byB0aGUgbmV4dCBwYWdlLlxuICAgKlxuICAgKiBSZXR1cm5zIGBmYWxzZWAgaW4gdGhlIGZvbGxvd2luZyBjYXNlczpcbiAgICpcbiAgICogLSBpZiB0aGUgY3VycmVudCBwYWdlIGlzIHRoZSBsYXN0IHBhZ2UuXG4gICAqIC0gaWYgdGhlIGN1cnJlbnQgcGFnZSBjb250YWlucyBlcnJvcnMgKGZvciBleGFtcGxlLCBhIHJlcXVpcmVkIHF1ZXN0aW9uIGlzIGVtcHR5KS5cbiAgICogQHNlZSBpc0N1cnJlbnRQYWdlSGFzRXJyb3JzXG4gICAqIEBzZWUgcHJldlBhZ2VcbiAgICogQHNlZSBjb21wbGV0ZUxhc3RQYWdlXG4gICAqL1xuICBwdWJsaWMgbmV4dFBhZ2UoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNMYXN0UGFnZSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmRvQ3VycmVudFBhZ2VDb21wbGV0ZShmYWxzZSk7XG4gIH1cbiAgcHJpdmF0ZSBoYXNFcnJvcnNPbk5hdmlnYXRlKGRvQ29tcGxldGU6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5pZ25vcmVWYWxpZGF0aW9uIHx8ICF0aGlzLmlzRWRpdE1vZGUpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgZnVuYyA9IChoYXNFcnJvcnM6IGJvb2xlYW4pID0+IHtcbiAgICAgIGlmICghaGFzRXJyb3JzKSB7XG4gICAgICAgIHRoaXMuZG9DdXJyZW50UGFnZUNvbXBsZXRlQ29yZShkb0NvbXBsZXRlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmICh0aGlzLmNoZWNrRXJyb3JzTW9kZSA9PT0gXCJvbkNvbXBsZXRlXCIpIHtcbiAgICAgIGlmICghdGhpcy5pc0xhc3RQYWdlKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gdGhpcy5oYXNFcnJvcnModHJ1ZSwgdHJ1ZSwgZnVuYykgIT09IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5oYXNDdXJyZW50UGFnZUVycm9ycyhmdW5jKSAhPT0gZmFsc2U7XG4gIH1cbiAgcHJpdmF0ZSBhc3luY1ZhbGlkYXRpb25RdWVzaXRvbnM6IEFycmF5PFF1ZXN0aW9uPjtcbiAgcHJpdmF0ZSBjaGVja0ZvckFzeW5jUXVlc3Rpb25WYWxpZGF0aW9uKFxuICAgIHF1ZXN0aW9uczogQXJyYXk8UXVlc3Rpb24+LFxuICAgIGZ1bmM6IChoYXNFcnJvcnM6IGJvb2xlYW4pID0+IHZvaWRcbiAgKTogYm9vbGVhbiB7XG4gICAgdGhpcy5jbGVhckFzeW5jVmFsaWRhdGlvblF1ZXNpdG9ucygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocXVlc3Rpb25zW2ldLmlzUnVubmluZ1ZhbGlkYXRvcnMpIHtcbiAgICAgICAgbGV0IHEgPSBxdWVzdGlvbnNbaV07XG4gICAgICAgIHEub25Db21wbGV0ZWRBc3luY1ZhbGlkYXRvcnMgPSAoaGFzRXJyb3JzOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgdGhpcy5vbkNvbXBsZXRlZEFzeW5jUXVlc3Rpb25WYWxpZGF0b3JzKHEsIGZ1bmMsIGhhc0Vycm9ycyk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuYXN5bmNWYWxpZGF0aW9uUXVlc2l0b25zLnB1c2gocXVlc3Rpb25zW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYXN5bmNWYWxpZGF0aW9uUXVlc2l0b25zLmxlbmd0aCA+IDA7XG4gIH1cbiAgcHJpdmF0ZSBjbGVhckFzeW5jVmFsaWRhdGlvblF1ZXNpdG9ucygpIHtcbiAgICBpZiAoISF0aGlzLmFzeW5jVmFsaWRhdGlvblF1ZXNpdG9ucykge1xuICAgICAgdmFyIGFzeW5RdWVzdGlvbnMgPSB0aGlzLmFzeW5jVmFsaWRhdGlvblF1ZXNpdG9ucztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXN5blF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBhc3luUXVlc3Rpb25zW2ldLm9uQ29tcGxldGVkQXN5bmNWYWxpZGF0b3JzID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hc3luY1ZhbGlkYXRpb25RdWVzaXRvbnMgPSBbXTtcbiAgfVxuICBwcml2YXRlIG9uQ29tcGxldGVkQXN5bmNRdWVzdGlvblZhbGlkYXRvcnMoXG4gICAgcXVlc3Rpb246IFF1ZXN0aW9uLFxuICAgIGZ1bmM6IChoYXNFcnJvcnM6IGJvb2xlYW4pID0+IHZvaWQsXG4gICAgaGFzRXJyb3JzOiBib29sZWFuXG4gICkge1xuICAgIGlmIChoYXNFcnJvcnMpIHtcbiAgICAgIHRoaXMuY2xlYXJBc3luY1ZhbGlkYXRpb25RdWVzaXRvbnMoKTtcbiAgICAgIGZ1bmModHJ1ZSk7XG4gICAgICBpZiAodGhpcy5mb2N1c09uRmlyc3RFcnJvciAmJiAhIXF1ZXN0aW9uICYmICEhcXVlc3Rpb24ucGFnZSAmJiBxdWVzdGlvbi5wYWdlID09PSB0aGlzLmN1cnJlbnRQYWdlKSB7XG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uczogQXJyYXk8UXVlc3Rpb24+ID0gdGhpcy5jdXJyZW50UGFnZS5xdWVzdGlvbnM7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHF1ZXN0aW9uc1tpXSAhPT0gcXVlc3Rpb24gJiYgcXVlc3Rpb25zW2ldLmVycm9ycy5sZW5ndGggPiAwKSByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcXVlc3Rpb24uZm9jdXModHJ1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBhc3luUXVlc3Rpb25zID0gdGhpcy5hc3luY1ZhbGlkYXRpb25RdWVzaXRvbnM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhc3luUXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYXN5blF1ZXN0aW9uc1tpXS5pc1J1bm5pbmdWYWxpZGF0b3JzKSByZXR1cm47XG4gICAgfVxuICAgIGZ1bmMoZmFsc2UpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCwgaWYgdGhlIGN1cnJlbnQgcGFnZSBjb250YWlucyBlcnJvcnMsIGZvciBleGFtcGxlLCB0aGUgcmVxdWlyZWQgcXVlc3Rpb24gaXMgZW1wdHkgb3IgYSBxdWVzdGlvbiB2YWxpZGF0aW9uIGlzIGZhaWxlZC5cbiAgICogQHNlZSBuZXh0UGFnZVxuICAgKi9cbiAgcHVibGljIGdldCBpc0N1cnJlbnRQYWdlSGFzRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNoZWNrSXNDdXJyZW50UGFnZUhhc0Vycm9ycygpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCwgaWYgdGhlIGN1cnJlbnQgcGFnZSBjb250YWlucyBhbnkgZXJyb3IuIElmIHRoZXJlIGlzIGFuIGFzeW5jIGZ1bmN0aW9uIGluIGFuIGV4cHJlc3Npb24sIHRoZW4gdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGB1bmRlZmluZWRgIHZhbHVlLlxuICAgKiBJbiB0aGlzIGNhc2UsIHlvdSBzaG91bGQgdXNlIGBvbkFzeW5jVmFsaWRhdGlvbmAgcGFyYW1ldGVyLCB3aGljaCBpcyBhIGNhbGxiYWNrIGZ1bmN0aW9uOiAoaGFzRXJyb3JzOiBib29sZWFuKSA9PiB2b2lkXG4gICAqIEBwYXJhbSBvbkFzeW5jVmFsaWRhdGlvbiB1c2UgdGhpcyBwYXJhbWV0ZXIgaWYgeW91IHVzZSBhc3luYyBmdW5jdGlvbnMgaW4geW91ciBleHByZXNzaW9ucy4gVGhpcyBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aXRoIGhhc0Vycm9ycyB2YWx1ZSBlcXVhbHMgdG8gYHRydWVgIG9yIGBmYWxzZWAuXG4gICAqIEBzZWUgaGFzUGFnZUVycm9yc1xuICAgKiBAc2VlIGhhc0Vycm9yc1xuICAgKiBAc2VlIGN1cnJlbnRQYWdlXG4gICAqL1xuICBwdWJsaWMgaGFzQ3VycmVudFBhZ2VFcnJvcnMoXG4gICAgb25Bc3luY1ZhbGlkYXRpb24/OiAoaGFzRXJyb3JzOiBib29sZWFuKSA9PiB2b2lkXG4gICk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc1BhZ2VFcnJvcnModW5kZWZpbmVkLCBvbkFzeW5jVmFsaWRhdGlvbik7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgLCBpZiBhIHBhZ2UgY29udGFpbnMgYW4gZXJyb3IuIElmIHRoZXJlIGlzIGFuIGFzeW5jIGZ1bmN0aW9uIGluIGFuIGV4cHJlc3Npb24sIHRoZW4gdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGB1bmRlZmluZWRgIHZhbHVlLlxuICAgKiBJbiB0aGlzIGNhc2UsIHlvdSBzaG91bGQgdXNlIHRoZSBzZWNvbmQgYG9uQXN5bmNWYWxpZGF0aW9uYCBwYXJhbWV0ZXIsICB3aGljaCBpcyBhIGNhbGxiYWNrIGZ1bmN0aW9uOiAoaGFzRXJyb3JzOiBib29sZWFuKSA9PiB2b2lkXG4gICAqIEBwYXJhbSBwYWdlIHRoZSBwYWdlIHRoYXQgeW91IHdhbnQgdG8gdmFsaWRhdGUuIElmIHRoZSBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkIHRoZW4gdGhlIGBhY3RpdmVQYWdlYCBpcyB1c2luZ1xuICAgKiBAcGFyYW0gb25Bc3luY1ZhbGlkYXRpb24gdXNlIHRoaXMgcGFyYW1ldGVyIGlmIHlvdSB1c2UgYXN5bmMgZnVuY3Rpb25zIGluIHlvdXIgZXhwcmVzc2lvbnMuIFRoaXMgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2l0aCBoYXNFcnJvcnMgdmFsdWUgZXF1YWxzIHRvIGB0cnVlYCBvciBgZmFsc2VgLlxuICAgKiBAc2VlIGhhc0N1cnJlbnRQYWdlRXJyb3JzXG4gICAqIEBzZWUgaGFzRXJyb3JzXG4gICAqIEBzZWUgYWN0aXZlUGFnZVxuICAgKiBAc2VlIGN1cnJlbnRQYWdlXG4gICAqL1xuICBwdWJsaWMgaGFzUGFnZUVycm9ycyhcbiAgICBwYWdlPzogUGFnZU1vZGVsLFxuICAgIG9uQXN5bmNWYWxpZGF0aW9uPzogKGhhc0Vycm9yczogYm9vbGVhbikgPT4gdm9pZFxuICApOiBib29sZWFuIHtcbiAgICBpZiAoIXBhZ2UpIHtcbiAgICAgIHBhZ2UgPSB0aGlzLmFjdGl2ZVBhZ2U7XG4gICAgfVxuICAgIGlmICghcGFnZSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0aGlzLmNoZWNrSXNQYWdlSGFzRXJyb3JzKHBhZ2UpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoIW9uQXN5bmNWYWxpZGF0aW9uKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tGb3JBc3luY1F1ZXN0aW9uVmFsaWRhdGlvbihcbiAgICAgIHBhZ2UucXVlc3Rpb25zLFxuICAgICAgKGhhc0Vycm9yczogYm9vbGVhbikgPT4gb25Bc3luY1ZhbGlkYXRpb24oaGFzRXJyb3JzKVxuICAgIClcbiAgICAgID8gdW5kZWZpbmVkXG4gICAgICA6IGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCwgaWYgYW55IG9mIHRoZSBzdXJ2ZXkgcGFnZXMgY29udGFpbnMgZXJyb3JzLiBJZiB0aGVyZSBpcyBhbiBhc3luYyBmdW5jdGlvbiBpbiBhbiBleHByZXNzaW9uLCB0aGVuIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiBgdW5kZWZpbmVkYCB2YWx1ZS5cbiAgICogSW4gdGhpcyBjYXNlLCB5b3Ugc2hvdWxkIHVzZSAgdGhlIHRoaXJkIGBvbkFzeW5jVmFsaWRhdGlvbmAgcGFyYW1ldGVyLCB3aGljaCBpcyBhIGNhbGxiYWNrIGZ1bmN0aW9uOiAoaGFzRXJyb3JzOiBib29sZWFuKSA9PiB2b2lkXG4gICAqIEBwYXJhbSBmaXJlQ2FsbGJhY2sgc2V0IGl0IHRvIGB0cnVlYCwgdG8gc2hvdyBlcnJvcnMgaW4gVUkuXG4gICAqIEBwYXJhbSBmb2N1c09uRmlyc3RFcnJvciBzZXQgaXQgdG8gYHRydWVgIHRvIGZvY3VzIG9uIHRoZSBmaXJzdCBxdWVzdGlvbiB0aGF0IGRvZXNuJ3QgcGFzcyB0aGUgdmFsaWRhdGlvbiBhbmQgbWFrZSB0aGUgcGFnZSwgd2hlcmUgdGhlIHF1ZXN0aW9uIGlzIGxvY2F0ZWQsIHRoZSBjdXJyZW50LlxuICAgKiBAcGFyYW0gb25Bc3luY1ZhbGlkYXRpb24gdXNlIHRoaXMgcGFyYW1ldGVyIGlmIHlvdSB1c2UgYXN5bmMgZnVuY3Rpb25zIGluIHlvdXIgZXhwcmVzc2lvbnMuIFRoaXMgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2l0aCBoYXNFcnJvcnMgdmFsdWUgZXF1YWxzIHRvIGB0cnVlYCBvciBgZmFsc2VgLlxuICAgKiBAc2VlIGhhc0N1cnJlbnRQYWdlRXJyb3JzXG4gICAqIEBzZWUgaGFzUGFnZUVycm9yc1xuICAgKi9cbiAgcHVibGljIGhhc0Vycm9ycyhcbiAgICBmaXJlQ2FsbGJhY2s6IGJvb2xlYW4gPSB0cnVlLFxuICAgIGZvY3VzT25GaXJzdEVycm9yOiBib29sZWFuID0gZmFsc2UsXG4gICAgb25Bc3luY1ZhbGlkYXRpb24/OiAoaGFzRXJyb3JzOiBib29sZWFuKSA9PiB2b2lkXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICghIW9uQXN5bmNWYWxpZGF0aW9uKSB7XG4gICAgICBmaXJlQ2FsbGJhY2sgPSB0cnVlO1xuICAgIH1cbiAgICB2YXIgdmlzUGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcbiAgICB2YXIgZmlyc3RFcnJvclBhZ2UgPSBudWxsO1xuICAgIHZhciByZXMgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpc1BhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodmlzUGFnZXNbaV0uaGFzRXJyb3JzKGZpcmVDYWxsYmFjaywgZmFsc2UpKSB7XG4gICAgICAgIGlmICghZmlyc3RFcnJvclBhZ2UpIGZpcnN0RXJyb3JQYWdlID0gdmlzUGFnZXNbaV07XG4gICAgICAgIHJlcyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChmb2N1c09uRmlyc3RFcnJvciAmJiAhIWZpcnN0RXJyb3JQYWdlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gZmlyc3RFcnJvclBhZ2U7XG4gICAgICB2YXIgcXVlc3Rpb25zID0gZmlyc3RFcnJvclBhZ2UucXVlc3Rpb25zO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHF1ZXN0aW9uc1tpXS5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHF1ZXN0aW9uc1tpXS5mb2N1cyh0cnVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAocmVzIHx8ICFvbkFzeW5jVmFsaWRhdGlvbikgcmV0dXJuIHJlcztcbiAgICByZXR1cm4gdGhpcy5jaGVja0ZvckFzeW5jUXVlc3Rpb25WYWxpZGF0aW9uKFxuICAgICAgdGhpcy5nZXRBbGxRdWVzdGlvbnMoKSxcbiAgICAgIChoYXNFcnJvcnM6IGJvb2xlYW4pID0+IG9uQXN5bmNWYWxpZGF0aW9uKGhhc0Vycm9ycylcbiAgICApXG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgc3VydmV5IGVsZW1lbnRzIChwYWdlcywgcGFuZWxzLCBhbmQgcXVlc3Rpb25zKSBoYXZlIHVuaXF1ZSBxdWVzdGlvbiBuYW1lcy5cbiAgICogWW91IGNhbiBjaGVjayBmb3IgdW5pcXVlIG5hbWVzIGZvciBpbmRpdmlkdWFsIHBhZ2UgYW5kIHBhbmVsIChhbmQgYWxsIHRoZWlyIGVsZW1lbnRzKSBvciBhIHF1ZXN0aW9uLlxuICAgKiBJZiB0aGUgcGFyYW1ldGVyIGlzIG5vdCBzcGVjaWZpZWQsIHRoZW4gYSBzdXJ2ZXkgY2hlY2tzIHRoYXQgYWxsIGl0cyBlbGVtZW50cyBoYXZlIHVuaXF1ZSBuYW1lcy5cbiAgICogQHBhcmFtIGVsZW1lbnQgcGFnZSwgcGFuZWwgb3IgcXVlc3Rpb24sIGl0IGlzIGBudWxsYCBieSBkZWZhdWx0LCB0aGF0IG1lYW5zIGFsbCBzdXJ2ZXkgZWxlbWVudHMgd2lsbCBiZSBjaGVja2VkXG4gICAqL1xuICBwdWJsaWMgZW5zdXJlVW5pcXVlTmFtZXMoZWxlbWVudDogSVN1cnZleUVsZW1lbnQgPSBudWxsKSB7XG4gICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlVW5pcXVlTmFtZSh0aGlzLnBhZ2VzW2ldKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbnN1cmVVbmlxdWVOYW1lKGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGVuc3VyZVVuaXF1ZU5hbWUoZWxlbWVudDogSVN1cnZleUVsZW1lbnQpIHtcbiAgICBpZiAoZWxlbWVudC5pc1BhZ2UpIHtcbiAgICAgIHRoaXMuZW5zdXJlVW5pcXVlUGFnZU5hbWUoZWxlbWVudCk7XG4gICAgfVxuICAgIGlmIChlbGVtZW50LmlzUGFuZWwpIHtcbiAgICAgIHRoaXMuZW5zdXJlVW5pcXVlUGFuZWxOYW1lKGVsZW1lbnQpO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudC5pc1BhZ2UgfHwgZWxlbWVudC5pc1BhbmVsKSB7XG4gICAgICB2YXIgZWxlbWVudHMgPSAoPElQYW5lbD5lbGVtZW50KS5lbGVtZW50cztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy5lbnN1cmVVbmlxdWVOYW1lcyhlbGVtZW50c1tpXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW5zdXJlVW5pcXVlUXVlc3Rpb25OYW1lKGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGVuc3VyZVVuaXF1ZVBhZ2VOYW1lKGVsZW1lbnQ6IElTdXJ2ZXlFbGVtZW50KSB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlVW5pcXVlRWxlbWVudE5hbWUoXG4gICAgICBlbGVtZW50LFxuICAgICAgKG5hbWU6IHN0cmluZyk6IElTdXJ2ZXlFbGVtZW50ID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFnZUJ5TmFtZShuYW1lKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHByaXZhdGUgZW5zdXJlVW5pcXVlUGFuZWxOYW1lKGVsZW1lbnQ6IElTdXJ2ZXlFbGVtZW50KSB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlVW5pcXVlRWxlbWVudE5hbWUoXG4gICAgICBlbGVtZW50LFxuICAgICAgKG5hbWU6IHN0cmluZyk6IElTdXJ2ZXlFbGVtZW50ID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFuZWxCeU5hbWUobmFtZSk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGVuc3VyZVVuaXF1ZVF1ZXN0aW9uTmFtZShlbGVtZW50OiBJU3VydmV5RWxlbWVudCkge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZVVuaXF1ZUVsZW1lbnROYW1lKFxuICAgICAgZWxlbWVudCxcbiAgICAgIChuYW1lOiBzdHJpbmcpOiBJU3VydmV5RWxlbWVudCA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFF1ZXN0aW9uQnlOYW1lKG5hbWUpO1xuICAgICAgfVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBlbnN1cmVVbmlxdWVFbGVtZW50TmFtZShcbiAgICBlbGVtZW50OiBJU3VydmV5RWxlbWVudCxcbiAgICBnZXRFbGVtZW50QnlOYW1lOiAobmFtZTogc3RyaW5nKSA9PiBJU3VydmV5RWxlbWVudFxuICApIHtcbiAgICB2YXIgZXhpc3RpbmdFbGVtZW50ID0gZ2V0RWxlbWVudEJ5TmFtZShlbGVtZW50Lm5hbWUpO1xuICAgIGlmICghZXhpc3RpbmdFbGVtZW50IHx8IGV4aXN0aW5nRWxlbWVudCA9PSBlbGVtZW50KSByZXR1cm47XG4gICAgdmFyIG5ld05hbWUgPSB0aGlzLmdldE5ld05hbWUoZWxlbWVudC5uYW1lKTtcbiAgICB3aGlsZSAoISFnZXRFbGVtZW50QnlOYW1lKG5ld05hbWUpKSB7XG4gICAgICB2YXIgbmV3TmFtZSA9IHRoaXMuZ2V0TmV3TmFtZShlbGVtZW50Lm5hbWUpO1xuICAgIH1cbiAgICBlbGVtZW50Lm5hbWUgPSBuZXdOYW1lO1xuICB9XG4gIHByaXZhdGUgZ2V0TmV3TmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHZhciBwb3MgPSBuYW1lLmxlbmd0aDtcbiAgICB3aGlsZSAocG9zID4gMCAmJiBuYW1lW3BvcyAtIDFdID49IFwiMFwiICYmIG5hbWVbcG9zIC0gMV0gPD0gXCI5XCIpIHtcbiAgICAgIHBvcy0tO1xuICAgIH1cbiAgICB2YXIgYmFzZSA9IG5hbWUuc3Vic3RyKDAsIHBvcyk7XG4gICAgdmFyIG51bSA9IDA7XG4gICAgaWYgKHBvcyA8IG5hbWUubGVuZ3RoKSB7XG4gICAgICBudW0gPSBwYXJzZUludChuYW1lLnN1YnN0cihwb3MpKTtcbiAgICB9XG4gICAgbnVtKys7XG4gICAgcmV0dXJuIGJhc2UgKyBudW07XG4gIH1cbiAgcHJpdmF0ZSBjaGVja0lzQ3VycmVudFBhZ2VIYXNFcnJvcnMoXG4gICAgaXNGb2N1c2VPbkZpcnN0RXJyb3I6IGJvb2xlYW4gPSB1bmRlZmluZWRcbiAgKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tJc1BhZ2VIYXNFcnJvcnModGhpcy5hY3RpdmVQYWdlLCBpc0ZvY3VzZU9uRmlyc3RFcnJvcik7XG4gIH1cbiAgcHJpdmF0ZSBjaGVja0lzUGFnZUhhc0Vycm9ycyhcbiAgICBwYWdlOiBQYWdlTW9kZWwsXG4gICAgaXNGb2N1c2VPbkZpcnN0RXJyb3I6IGJvb2xlYW4gPSB1bmRlZmluZWRcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKGlzRm9jdXNlT25GaXJzdEVycm9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlzRm9jdXNlT25GaXJzdEVycm9yID0gdGhpcy5mb2N1c09uRmlyc3RFcnJvcjtcbiAgICB9XG4gICAgaWYgKCFwYWdlKSByZXR1cm4gdHJ1ZTtcbiAgICB2YXIgcmVzID0gcGFnZS5oYXNFcnJvcnModHJ1ZSwgaXNGb2N1c2VPbkZpcnN0RXJyb3IpO1xuICAgIHRoaXMuZmlyZVZhbGlkYXRlZEVycm9yc09uUGFnZShwYWdlKTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgZmlyZVZhbGlkYXRlZEVycm9yc09uUGFnZShwYWdlOiBQYWdlTW9kZWwpIHtcbiAgICBpZiAodGhpcy5vblZhbGlkYXRlZEVycm9yc09uQ3VycmVudFBhZ2UuaXNFbXB0eSB8fCAhcGFnZSkgcmV0dXJuO1xuICAgIHZhciBxdWVzdGlvbnNPblBhZ2UgPSBwYWdlLnF1ZXN0aW9ucztcbiAgICB2YXIgcXVlc3Rpb25zID0gbmV3IEFycmF5PFF1ZXN0aW9uPigpO1xuICAgIHZhciBlcnJvcnMgPSBuZXcgQXJyYXk8U3VydmV5RXJyb3I+KCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnNPblBhZ2UubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxID0gcXVlc3Rpb25zT25QYWdlW2ldO1xuICAgICAgaWYgKHEuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcXVlc3Rpb25zLnB1c2gocSk7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcS5lcnJvcnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBlcnJvcnMucHVzaChxLmVycm9yc1tqXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5vblZhbGlkYXRlZEVycm9yc09uQ3VycmVudFBhZ2UuZmlyZSh0aGlzLCB7XG4gICAgICBxdWVzdGlvbnM6IHF1ZXN0aW9ucyxcbiAgICAgIGVycm9yczogZXJyb3JzLFxuICAgICAgcGFnZTogcGFnZSxcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogTmF2aWdhdGVzIHVzZXIgdG8gYSBwcmV2aW91cyBwYWdlLiBJZiB0aGUgY3VycmVudCBwYWdlIGlzIHRoZSBmaXJzdCBwYWdlLCBgcHJldlBhZ2VgIHJldHVybnMgYGZhbHNlYC4gYHByZXZQYWdlYCBkb2VzIG5vdCBwZXJmb3JtIGFueSBjaGVja3MsIHJlcXVpcmVkIHF1ZXN0aW9ucyBjYW4gYmUgZW1wdHkuXG4gICAqIEBzZWUgaXNGaXJzdFBhZ2VcbiAgICovXG4gIHB1YmxpYyBwcmV2UGFnZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5pc0ZpcnN0UGFnZSB8fCB0aGlzLmlzU3RhcnRlZFN0YXRlKSByZXR1cm4gZmFsc2U7XG4gICAgdGhpcy5yZXNldE5hdmlnYXRpb25CdXR0b24oKTtcbiAgICB2YXIgdlBhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XG4gICAgdmFyIGluZGV4ID0gdlBhZ2VzLmluZGV4T2YodGhpcy5jdXJyZW50UGFnZSk7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHZQYWdlc1tpbmRleCAtIDFdO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBDb21wbGV0ZXMgdGhlIHN1cnZleSwgaWYgdGhlIGN1cnJlbnQgcGFnZSBpcyB0aGUgbGFzdCBvbmUuIEl0IHJldHVybnMgYGZhbHNlYCBpZiB0aGUgbGFzdCBwYWdlIGhhcyBlcnJvcnMuXG4gICAqIElmIHRoZSBsYXN0IHBhZ2UgaGFzIG5vIGVycm9ycywgYGNvbXBsZXRlTGFzdFBhZ2VgIGNhbGxzIGBkb0NvbXBsZXRlYCBhbmQgcmV0dXJucyBgdHJ1ZWAuXG4gICAqIEBzZWUgaXNDdXJyZW50UGFnZUhhc0Vycm9yc1xuICAgKiBAc2VlIG5leHRQYWdlXG4gICAqIEBzZWUgZG9Db21wbGV0ZVxuICAgKi9cbiAgcHVibGljIGNvbXBsZXRlTGFzdFBhZ2UoKTogYm9vbGVhbiB7XG4gICAgdmFyIHJlcyA9IHRoaXMuZG9DdXJyZW50UGFnZUNvbXBsZXRlKHRydWUpO1xuICAgIGlmIChyZXMpIHtcbiAgICAgIHRoaXMuY2FuY2VsUHJldmlldygpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgaXNOYXZpZ2F0aW9uQnV0dG9uUHJlc3NlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgbmF2aWdhdGlvbk1vdXNlRG93bigpOiBib29sZWFuIHtcbiAgICB0aGlzLmlzTmF2aWdhdGlvbkJ1dHRvblByZXNzZWQgPSB0cnVlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHByaXZhdGUgcmVzZXROYXZpZ2F0aW9uQnV0dG9uKCkge1xuICAgIHRoaXMuaXNOYXZpZ2F0aW9uQnV0dG9uUHJlc3NlZCA9IGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBTaG93cyBwcmV2aWV3IGZvciB0aGUgc3VydmV5LiBTd2l0Y2hlcyB0aGUgc3VydmV5IHRvIHRoZSBcInByZXZpZXdcIiBzdGF0ZS5cbiAgICpcbiAgICogRGV0YWlsczogW1ByZXZpZXcgU3RhdGVdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5I3N0YXRlcy1wcmV2aWV3KVxuICAgKiBAc2VlIHNob3dQcmV2aWV3QmVmb3JlQ29tcGxldGVcbiAgICogQHNlZSBjYW5jZWxQcmV2aWV3XG4gICAqIEBzZWUgc3RhdGVcbiAgICogQHNlZSBwcmV2aWV3VGV4dFxuICAgKiBAc2VlIGVkaXRUZXh0XG4gICAqL1xuICBwdWJsaWMgc2hvd1ByZXZpZXcoKTogYm9vbGVhbiB7XG4gICAgdGhpcy5yZXNldE5hdmlnYXRpb25CdXR0b24oKTtcbiAgICBpZiAodGhpcy5oYXNFcnJvcnNPbk5hdmlnYXRlKHRydWUpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRoaXMuZG9TZXJ2ZXJWYWxpZGF0aW9uKHRydWUsIHRydWUpKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIG9wdGlvbnMgPSB7IGFsbG93U2hvd1ByZXZpZXc6IHRydWUgfTtcbiAgICB0aGlzLm9uU2hvd2luZ1ByZXZpZXcuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICB0aGlzLmlzU2hvd2luZ1ByZXZpZXcgPSBvcHRpb25zLmFsbG93U2hvd1ByZXZpZXc7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIENhbmNlbHMgcHJldmlldyBhbmQgc3dpdGNoZXMgYmFjayB0byB0aGUgXCJydW5uaW5nXCIgc3RhdGUuXG4gICAqXG4gICAqIERldGFpbHM6IFtQcmV2aWV3IFN0YXRlXShodHRwczovL3N1cnZleWpzLmlvL0RvY3VtZW50YXRpb24vTGlicmFyeSNzdGF0ZXMtcHJldmlldylcbiAgICogQHBhcmFtIGN1clBhZ2UgLSBBIG5ldyBjdXJyZW50IHBhZ2UuIElmIHRoZSBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkIHRoZW4gdGhlIGxhc3QgcGFnZSBiZWNvbWVzIHRoZSBjdXJyZW50LlxuICAgKiBAc2VlIHNob3dQcmV2aWV3QmVmb3JlQ29tcGxldGVcbiAgICogQHNlZSBzaG93UHJldmlld1xuICAgKiBAc2VlIHN0YXRlXG4gICAqL1xuICBwdWJsaWMgY2FuY2VsUHJldmlldyhjdXJQYWdlOiBhbnkgPSBudWxsKSB7XG4gICAgaWYgKCF0aGlzLmlzU2hvd2luZ1ByZXZpZXcpIHJldHVybjtcbiAgICB0aGlzLmlzU2hvd2luZ1ByZXZpZXcgPSBmYWxzZTtcbiAgICBpZiAoSGVscGVycy5pc1ZhbHVlRW1wdHkoY3VyUGFnZSkgJiYgdGhpcy52aXNpYmxlUGFnZUNvdW50ID4gMCkge1xuICAgICAgY3VyUGFnZSA9IHRoaXMudmlzaWJsZVBhZ2VDb3VudCAtIDE7XG4gICAgfVxuICAgIGlmIChjdXJQYWdlICE9PSBudWxsKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gY3VyUGFnZTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGNhbmNlbFByZXZpZXdCeVBhZ2UocGFuZWw6IElQYW5lbCk6IGFueSB7XG4gICAgdGhpcy5jYW5jZWxQcmV2aWV3KCg8YW55PnBhbmVsKVtcIm9yaWdpbmFsUGFnZVwiXSk7XG4gIH1cbiAgcHJvdGVjdGVkIGRvQ3VycmVudFBhZ2VDb21wbGV0ZShkb0NvbXBsZXRlOiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNWYWxpZGF0aW5nT25TZXJ2ZXIpIHJldHVybiBmYWxzZTtcbiAgICB0aGlzLnJlc2V0TmF2aWdhdGlvbkJ1dHRvbigpO1xuICAgIGlmICh0aGlzLmhhc0Vycm9yc09uTmF2aWdhdGUoZG9Db21wbGV0ZSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5kb0N1cnJlbnRQYWdlQ29tcGxldGVDb3JlKGRvQ29tcGxldGUpO1xuICB9XG4gIHByaXZhdGUgZG9DdXJyZW50UGFnZUNvbXBsZXRlQ29yZShkb0NvbXBsZXRlOiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuZG9TZXJ2ZXJWYWxpZGF0aW9uKGRvQ29tcGxldGUpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGRvQ29tcGxldGUpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UucGFzc2VkID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLmRvQ29tcGxldGUoKTtcbiAgICB9XG4gICAgdGhpcy5kb05leHRQYWdlKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIE9ic29sZXRlLiBVc2UgdGhlIGBxdWVzdGlvbnNPblBhZ2VNb2RlYCBwcm9wZXJ0eSBpbnN0ZWFkLlxuICAgKiBAc2VlIHF1ZXN0aW9uc09uUGFnZU1vZGVcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNTaW5nbGVQYWdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uc09uUGFnZU1vZGUgPT0gXCJzaW5nbGVQYWdlXCI7XG4gIH1cbiAgcHVibGljIHNldCBpc1NpbmdsZVBhZ2UodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5xdWVzdGlvbnNPblBhZ2VNb2RlID0gdmFsID8gXCJzaW5nbGVQYWdlXCIgOiBcInN0YW5kYXJkXCI7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIHZhbHVlIHRoYXQgc3BlY2lmaWVzIGhvdyB0aGUgc3VydmV5IGNvbWJpbmVzIHF1ZXN0aW9ucywgcGFuZWxzLCBhbmQgcGFnZXMuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOlxuICAgKlxuICAgKiAtIGBzaW5nbGVQYWdlYCAtIGNvbWJpbmUgYWxsIHN1cnZleSBwYWdlcyBpbiBhIHNpbmdsZSBwYWdlLiBQYWdlcyB3aWxsIGJlIGNvbnZlcnRlZCB0byBwYW5lbHMuXG4gICAqIC0gYHF1ZXN0aW9uUGVyUGFnZWAgLSBzaG93IG9uZSBxdWVzdGlvbiBwZXIgcGFnZS4gU3VydmV5IHdpbGwgY3JlYXRlIGEgc2VwYXJhdGUgcGFnZSBmb3IgZXZlcnkgcXVlc3Rpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHF1ZXN0aW9uc09uUGFnZU1vZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicXVlc3Rpb25zT25QYWdlTW9kZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHF1ZXN0aW9uc09uUGFnZU1vZGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJxdWVzdGlvbnNPblBhZ2VNb2RlXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB3aGV0aGVyIHRoZSBmaXJzdCBzdXJ2ZXkgcGFnZSBpcyBhIHN0YXJ0IHBhZ2UuIFNldCB0aGlzIHByb3BlcnR5IHRvIGB0cnVlYCwgdG8gbWFrZSB0aGUgZmlyc3QgcGFnZSBhIHN0YXJ0aW5nIHBhZ2UuXG4gICAqIEFuIGVuZCB1c2VyIGNhbm5vdCBuYXZpZ2F0ZSB0byB0aGUgc3RhcnQgcGFnZSBhbmQgdGhlIHN0YXJ0IHBhZ2UgZG9lcyBub3QgYWZmZWN0IGEgc3VydmV5IHByb2dyZXNzLlxuICAgKi9cbiAgcHVibGljIGdldCBmaXJzdFBhZ2VJc1N0YXJ0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImZpcnN0UGFnZUlzU3RhcnRlZFwiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBmaXJzdFBhZ2VJc1N0YXJ0ZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiZmlyc3RQYWdlSXNTdGFydGVkXCIsIHZhbCk7XG4gIH1cbiAgaXNQYWdlU3RhcnRlZChwYWdlOiBJUGFnZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmZpcnN0UGFnZUlzU3RhcnRlZCAmJiB0aGlzLnBhZ2VzLmxlbmd0aCA+IDAgJiYgdGhpcy5wYWdlc1swXSA9PT0gcGFnZVxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIFwic2hvd0FsbFF1ZXN0aW9uc1wiIG9yIFwic2hvd0Fuc3dlcmVkUXVlc3Rpb25zXCIgdG8gYWxsb3cgcmVzcG9uZGVudHMgdG8gcHJldmlldyBhbnN3ZXJzIGJlZm9yZSBzdWJtaXR0aW5nIHRoZSBzdXJ2ZXkgcmVzdWx0cy5cbiAgICpcbiAgICogRGV0YWlsczogW1ByZXZpZXcgU3RhdGVdKGh0dHBzOi8vc3VydmV5anMuaW8vRG9jdW1lbnRhdGlvbi9MaWJyYXJ5I3N0YXRlcy1wcmV2aWV3KVxuICAgKiBFeGFtcGxlOiBbU2hvdyBQcmV2aWV3IEJlZm9yZSBDb21wbGV0ZV0oaHR0cHM6Ly9zdXJ2ZXlqcy5pby9FeGFtcGxlcy9MaWJyYXJ5P2lkPXN1cnZleS1zaG93cHJldmlldylcbiAgICogQHNlZSBzaG93UHJldmlld1xuICAgKiBAc2VlIGNhbmNlbFByZXZpZXdcbiAgICogQHNlZSBzdGF0ZVxuICAgKiBAc2VlIHByZXZpZXdUZXh0XG4gICAqIEBzZWUgZWRpdFRleHRcbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93UHJldmlld0JlZm9yZUNvbXBsZXRlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dQcmV2aWV3QmVmb3JlQ29tcGxldGVcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzU2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZSgpOiBib29sZWFuIHtcbiAgICB2YXIgcHJldmlldyA9IHRoaXMuc2hvd1ByZXZpZXdCZWZvcmVDb21wbGV0ZTtcbiAgICByZXR1cm4gcHJldmlldyA9PSBcInNob3dBbGxRdWVzdGlvbnNcIiB8fCBwcmV2aWV3ID09IFwic2hvd0Fuc3dlcmVkUXVlc3Rpb25zXCI7XG4gIH1cbiAgcHJvdGVjdGVkIG9uRmlyc3RQYWdlSXNTdGFydGVkQ2hhbmdlZCgpIHtcbiAgICBpZiAodGhpcy5wYWdlcy5sZW5ndGggPT0gMCkgcmV0dXJuO1xuICAgIHRoaXMuaXNTdGFydGVkU3RhdGUgPSB0aGlzLmZpcnN0UGFnZUlzU3RhcnRlZDtcbiAgICB0aGlzLnBhZ2VWaXNpYmlsaXR5Q2hhbmdlZCh0aGlzLnBhZ2VzWzBdLCAhdGhpcy5maXJzdFBhZ2VJc1N0YXJ0ZWQpO1xuICB9XG4gIHByaXZhdGUgcnVubmluZ1BhZ2VzOiBhbnk7XG4gIHByaXZhdGUgb25TaG93aW5nUHJldmlld0NoYW5nZWQoKSB7XG4gICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaXNTaG93aW5nUHJldmlldykge1xuICAgICAgdGhpcy5ydW5uaW5nUGFnZXMgPSB0aGlzLnBhZ2VzLnNsaWNlKDAsIHRoaXMucGFnZXMubGVuZ3RoKTtcbiAgICAgIHRoaXMuc2V0dXBQYWdlc0ZvclBhZ2VNb2Rlcyh0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMucnVubmluZ1BhZ2VzKSB7XG4gICAgICAgIHRoaXMucmVzdG9yZU9yaWdpb25hbFBhZ2VzKHRoaXMucnVubmluZ1BhZ2VzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucnVubmluZ1BhZ2VzID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLnJ1bkNvbmRpdGlvbnMoKTtcbiAgICB0aGlzLnVwZGF0ZUFsbEVsZW1lbnRzVmlzaWJpbGl0eSh0aGlzLnBhZ2VzKTtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gICAgdGhpcy5jdXJyZW50UGFnZU5vID0gMDtcbiAgfVxuICBwcml2YXRlIG9yaWdpb25hbFBhZ2VzOiBhbnk7XG4gIHByb3RlY3RlZCBvblF1ZXN0aW9uc09uUGFnZU1vZGVDaGFuZ2VkKG9sZFZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5pc1Nob3dpbmdQcmV2aWV3KSByZXR1cm47XG4gICAgaWYgKHRoaXMucXVlc3Rpb25zT25QYWdlTW9kZSA9PSBcInN0YW5kYXJkXCIgfHwgdGhpcy5pc0Rlc2lnbk1vZGUpIHtcbiAgICAgIGlmICh0aGlzLm9yaWdpb25hbFBhZ2VzKSB7XG4gICAgICAgIHRoaXMucmVzdG9yZU9yaWdpb25hbFBhZ2VzKHRoaXMub3JpZ2lvbmFsUGFnZXMpO1xuICAgICAgfVxuICAgICAgdGhpcy5vcmlnaW9uYWxQYWdlcyA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFvbGRWYWx1ZSB8fCBvbGRWYWx1ZSA9PSBcInN0YW5kYXJkXCIpIHtcbiAgICAgICAgdGhpcy5vcmlnaW9uYWxQYWdlcyA9IHRoaXMucGFnZXMuc2xpY2UoMCwgdGhpcy5wYWdlcy5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXR1cFBhZ2VzRm9yUGFnZU1vZGVzKHRoaXMuaXNTaW5nbGVQYWdlKTtcbiAgICB9XG4gICAgdGhpcy5ydW5Db25kaXRpb25zKCk7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xuICB9XG4gIHByaXZhdGUgcmVzdG9yZU9yaWdpb25hbFBhZ2VzKG9yaWdpbmFsUGFnZXM6IEFycmF5PFBhZ2VNb2RlbD4pIHtcbiAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzQ2xlYXIoKTtcbiAgICB0aGlzLnBhZ2VzLnNwbGljZSgwLCB0aGlzLnBhZ2VzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcmlnaW5hbFBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhZ2VzLnB1c2gob3JpZ2luYWxQYWdlc1tpXSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgc2V0dXBQYWdlc0ZvclBhZ2VNb2Rlcyhpc1NpbmdsZVBhZ2U6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzQ2xlYXIoKTtcbiAgICB2YXIgc3RhcnRJbmRleCA9IHRoaXMuZmlyc3RQYWdlSXNTdGFydGVkID8gMSA6IDA7XG4gICAgc3VwZXIuc3RhcnRMb2FkaW5nRnJvbUpzb24oKTtcbiAgICB2YXIgbmV3UGFnZXMgPSB0aGlzLmNyZWF0ZVBhZ2VzRm9yUXVlc3Rpb25PblBhZ2VNb2RlKFxuICAgICAgaXNTaW5nbGVQYWdlLFxuICAgICAgc3RhcnRJbmRleFxuICAgICk7XG4gICAgdmFyIGRlbGV0ZWRMZW4gPSB0aGlzLnBhZ2VzLmxlbmd0aCAtIHN0YXJ0SW5kZXg7XG4gICAgdGhpcy5wYWdlcy5zcGxpY2Uoc3RhcnRJbmRleCwgZGVsZXRlZExlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdQYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYWdlcy5wdXNoKG5ld1BhZ2VzW2ldKTtcbiAgICB9XG4gICAgc3VwZXIuZW5kTG9hZGluZ0Zyb21Kc29uKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdQYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbmV3UGFnZXNbaV0uc2V0U3VydmV5SW1wbCh0aGlzLCB0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5kb0VsZW1lbnRzT25Mb2FkKCk7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVQYWdlc0ZvclF1ZXN0aW9uT25QYWdlTW9kZShcbiAgICBpc1NpbmdsZVBhZ2U6IGJvb2xlYW4sXG4gICAgc3RhcnRJbmRleDogbnVtYmVyXG4gICk6IEFycmF5PFBhZ2VNb2RlbD4ge1xuICAgIGlmIChpc1NpbmdsZVBhZ2UpIHtcbiAgICAgIHJldHVybiBbdGhpcy5jcmVhdGVTaW5nbGVQYWdlKHN0YXJ0SW5kZXgpXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlUGFnZXNGb3JFdmVyeVF1ZXN0aW9uKHN0YXJ0SW5kZXgpO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlU2luZ2xlUGFnZShzdGFydEluZGV4OiBudW1iZXIpOiBQYWdlTW9kZWwge1xuICAgIHZhciBzaW5nbGUgPSB0aGlzLmNyZWF0ZU5ld1BhZ2UoXCJhbGxcIik7XG4gICAgc2luZ2xlLnNldFN1cnZleUltcGwodGhpcyk7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXg7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcGFnZSA9IHRoaXMucGFnZXNbaV07XG4gICAgICB2YXIgcGFuZWwgPSBTZXJpYWxpemVyLmNyZWF0ZUNsYXNzKFwicGFuZWxcIik7XG4gICAgICBwYW5lbC5vcmlnaW5hbFBhZ2UgPSBwYWdlO1xuICAgICAgc2luZ2xlLmFkZFBhbmVsKHBhbmVsKTtcbiAgICAgIHZhciBqc29uID0gbmV3IEpzb25PYmplY3QoKS50b0pzb25PYmplY3QocGFnZSk7XG4gICAgICBuZXcgSnNvbk9iamVjdCgpLnRvT2JqZWN0KGpzb24sIHBhbmVsKTtcbiAgICAgIGlmICghdGhpcy5zaG93UGFnZVRpdGxlcykge1xuICAgICAgICBwYW5lbC50aXRsZSA9IFwiXCI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzaW5nbGU7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVQYWdlc0ZvckV2ZXJ5UXVlc3Rpb24oc3RhcnRJbmRleDogbnVtYmVyKTogQXJyYXk8UGFnZU1vZGVsPiB7XG4gICAgdmFyIHJlczogQXJyYXk8UGFnZU1vZGVsPiA9IFtdO1xuICAgIGZvciAodmFyIGkgPSBzdGFydEluZGV4OyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG9yaWdpbmFsUGFnZSA9IHRoaXMucGFnZXNbaV07XG4gICAgICAvLyBJbml0aWFsaXplIHJhbmRvbWl6YXRpb25cbiAgICAgIG9yaWdpbmFsUGFnZS5zZXRXYXNTaG93bih0cnVlKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgb3JpZ2luYWxQYWdlLmVsZW1lbnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBvcmlnaW5hbEVsZW1lbnQgPSBvcmlnaW5hbFBhZ2UuZWxlbWVudHNbal07XG4gICAgICAgIHZhciBlbGVtZW50ID0gU2VyaWFsaXplci5jcmVhdGVDbGFzcyhvcmlnaW5hbEVsZW1lbnQuZ2V0VHlwZSgpKTtcbiAgICAgICAgaWYgKCFlbGVtZW50KSBjb250aW51ZTtcbiAgICAgICAgdmFyIGpzb25PYmogPSBuZXcgSnNvbk9iamVjdCgpO1xuICAgICAgICAvL0Rlc2VyaWFsaXplIHBhZ2UgcHJvcGVydGllcyBvbmx5LCBleGNsdWRpbmcgZWxlbWVudHNcbiAgICAgICAganNvbk9iai5saWdodFNlcmlhbGl6aW5nID0gdHJ1ZTtcbiAgICAgICAgdmFyIHBhZ2VKc29uID0ganNvbk9iai50b0pzb25PYmplY3Qob3JpZ2luYWxQYWdlKTtcblxuICAgICAgICB2YXIgcGFnZSA9IDxQYWdlTW9kZWw+U2VyaWFsaXplci5jcmVhdGVDbGFzcyhvcmlnaW5hbFBhZ2UuZ2V0VHlwZSgpKTtcbiAgICAgICAgcGFnZS5mcm9tSlNPTihwYWdlSnNvbik7XG4gICAgICAgIHBhZ2UubmFtZSA9IFwicGFnZVwiICsgKHJlcy5sZW5ndGggKyAxKTtcbiAgICAgICAgcGFnZS5zZXRTdXJ2ZXlJbXBsKHRoaXMpO1xuICAgICAgICByZXMucHVzaChwYWdlKTtcbiAgICAgICAgdmFyIGpzb24gPSBuZXcgSnNvbk9iamVjdCgpLnRvSnNvbk9iamVjdChvcmlnaW5hbEVsZW1lbnQpO1xuICAgICAgICBuZXcgSnNvbk9iamVjdCgpLnRvT2JqZWN0KGpzb24sIGVsZW1lbnQpO1xuICAgICAgICBwYWdlLmFkZEVsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcGFnZS5xdWVzdGlvbnMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzQWRkZWQocGFnZS5xdWVzdGlvbnNba10pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgd2hldGhlciB0aGUgY3VycmVudCBwYWdlIGlzIHRoZSBmaXJzdCBvbmUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzRmlyc3RQYWdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc0ZpcnN0UGFnZVwiKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyB3aGV0aGVyIHRoZSBjdXJyZW50IHBhZ2UgaXMgdGhlIGxhc3Qgb25lLlxuICAgKi9cbiAgcHVibGljIGdldCBpc0xhc3RQYWdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc0xhc3RQYWdlXCIpO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNTaG93UHJldkJ1dHRvbigpOiBib29sZWFuIHtcbiAgICBjb25zdCBpc0ZpcnN0ID0gdGhpcy5pc0ZpcnN0UGFnZTtcbiAgICBjb25zdCBzaG93QnRuID0gdGhpcy5zaG93UHJldkJ1dHRvbjtcbiAgICBjb25zdCBpc1J1biA9IHRoaXMuc3RhdGUgPT09IFwicnVubmluZ1wiO1xuICAgIGlmIChpc0ZpcnN0IHx8ICFzaG93QnRuIHx8ICFpc1J1bikgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBwYWdlID0gdGhpcy52aXNpYmxlUGFnZXNbdGhpcy5jdXJyZW50UGFnZU5vIC0gMV07XG4gICAgcmV0dXJuIHRoaXMuZ2V0UGFnZU1heFRpbWVUb0ZpbmlzaChwYWdlKSA8PSAwO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNTaG93TmV4dEJ1dHRvbigpOiBib29sZWFuIHtcbiAgICBjb25zdCBpc0xhc3QgPSB0aGlzLmlzTGFzdFBhZ2U7XG4gICAgY29uc3QgaXNSdW4gPSB0aGlzLnN0YXRlID09PSBcInJ1bm5pbmdcIjtcbiAgICByZXR1cm4gIWlzTGFzdCAmJiBpc1J1bjtcbiAgfVxuICBwcml2YXRlIGdldCBmaXJzdFZpc2libGVQYWdlKCk6IFBhZ2VNb2RlbCB7XG4gICAgY29uc3QgcGFnZXMgPSB0aGlzLnBhZ2VzO1xuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBwYWdlcy5sZW5ndGg7IGkgKyspIHtcbiAgICAgIGlmKHRoaXMuaXNQYWdlSW5WaXNpYmxlTGlzdChwYWdlc1tpXSkpIHJldHVybiBwYWdlc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgbGFzdFZpc2libGVQYWdlKCk6IFBhZ2VNb2RlbCB7XG4gICAgY29uc3QgcGFnZXMgPSB0aGlzLnBhZ2VzO1xuICAgIGZvcihsZXQgaSA9IHBhZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaSAtLSkge1xuICAgICAgaWYodGhpcy5pc1BhZ2VJblZpc2libGVMaXN0KHBhZ2VzW2ldKSkgcmV0dXJuIHBhZ2VzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcml2YXRlIHVwZGF0ZUlzRmlyc3RMYXN0UGFnZVN0YXRlKCkge1xuICAgIGNvbnN0IGN1clBhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlVmFsdWU7XG4gICAgaWYoIWN1clBhZ2UpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc0ZpcnN0UGFnZVwiLCBjdXJQYWdlID09PSB0aGlzLmZpcnN0VmlzaWJsZVBhZ2UpO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzTGFzdFBhZ2VcIiwgY3VyUGFnZSA9PT0gdGhpcy5sYXN0VmlzaWJsZVBhZ2UpO1xuICB9XG4gIC8qKlxuICAgKiBDb21wbGV0ZXMgdGhlIHN1cnZleS5cbiAgICpcbiAgICogQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgdGFza3M6XG4gICAqXG4gICAqIC0gd3JpdGVzIGNvb2tpZSBpZiB0aGUgYGNvb2tpZU5hbWVgIHByb3BlcnR5IGlzIG5vdCBlbXB0eVxuICAgKiAtIHNldHMgdGhlIHN1cnZleSBpbnRvIGBjb21wbGV0ZWRgIHN0YXRlXG4gICAqIC0gZmlyZXMgdGhlIGBvbkNvbXBsZXRlYCBldmVudFxuICAgKiAtIGNhbGxzIGBzZW5kUmVzdWx0YCBmdW5jdGlvbi5cbiAgICpcbiAgICogQ2FsbGluZyB0aGUgYGRvQ29tcGxldGVgIGZ1bmN0aW9uIGRvZXMgbm90IHBlcmZvcm0gYW55IHZhbGlkYXRpb24sIHVubGlrZSB0aGUgYGNvbXBsZXRlTGFzdFBhZ2VgIGZ1bmN0aW9uLlxuICAgKiBUaGUgZnVuY3Rpb24gY2FuIHJldHVybiBmYWxzZSwgaWYgeW91IHNldCBvcHRpb25zLmFsbG93Q29tcGxldGUgdG8gZmFsc2UgaW4gb25Db21wbGV0aW5nIGV2ZW50LiBPdGhlcndpc2UgaXQgcmV0dXJucyB0cnVlLlxuICAgKiBJdCBjYWxscyBgbmF2aWdhdGVUb1VybGAgYWZ0ZXIgY2FsbGluZyBgb25Db21wbGV0ZWAgZXZlbnQuXG4gICAqIEluIGNhc2UgY2FsbGluZyBgb3B0aW9ucy5zaG93RGF0YVNhdmluZ2AgY2FsbGJhY2sgaW4gdGhlIGBvbkNvbXBsZXRlYCBldmVudCwgYG5hdmlnYXRlVG9VcmxgIGlzIHVzZWQgb24gY2FsbGluZyBgb3B0aW9ucy5zaG93RGF0YVNhdmluZ1N1Y2Nlc3NgIGNhbGxiYWNrLlxuICAgKiBAc2VlIGNvbXBsZXRlTGFzdFBhZ2VcbiAgICogQHNlZSBvbkNvbXBsZXRpbmdcbiAgICogQHNlZSBjb29raWVOYW1lXG4gICAqIEBzZWUgc3RhdGVcbiAgICogQHNlZSBvbkNvbXBsZXRlXG4gICAqIEBzZWUgc3VydmV5UG9zdElkXG4gICAqIEBzZWUgY29tcGxldGVMYXN0UGFnZVxuICAgKiBAc2VlIG5hdmlnYXRlVG9VcmxcbiAgICogQHNlZSBuYXZpZ2F0ZVRvVXJsT25Db25kaXRpb25cbiAgICovXG4gIHB1YmxpYyBkb0NvbXBsZXRlKGlzQ29tcGxldGVPblRyaWdnZXI6IGJvb2xlYW4gPSBmYWxzZSk6IGJvb2xlYW4ge1xuICAgIHZhciBvbkNvbXBsZXRpbmdPcHRpb25zID0ge1xuICAgICAgYWxsb3dDb21wbGV0ZTogdHJ1ZSxcbiAgICAgIGlzQ29tcGxldGVPblRyaWdnZXI6IGlzQ29tcGxldGVPblRyaWdnZXIsXG4gICAgfTtcbiAgICB0aGlzLm9uQ29tcGxldGluZy5maXJlKHRoaXMsIG9uQ29tcGxldGluZ09wdGlvbnMpO1xuICAgIGlmICghb25Db21wbGV0aW5nT3B0aW9ucy5hbGxvd0NvbXBsZXRlKSB7XG4gICAgICB0aGlzLmlzQ29tcGxldGVkID0gZmFsc2U7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGxldCBwcmV2aW91c0Nvb2tpZSA9IHRoaXMuaGFzQ29va2llO1xuICAgIHRoaXMuc3RvcFRpbWVyKCk7XG4gICAgdGhpcy5zZXRDb21wbGV0ZWQoKTtcbiAgICB0aGlzLmNsZWFyVW51c2VkVmFsdWVzKCk7XG4gICAgdGhpcy5zZXRDb29raWUoKTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIHNhdmluZ0RhdGFTdGFydGVkID0gZmFsc2U7XG4gICAgdmFyIG9uQ29tcGxldGVPcHRpb25zID0ge1xuICAgICAgaXNDb21wbGV0ZU9uVHJpZ2dlcjogaXNDb21wbGV0ZU9uVHJpZ2dlcixcbiAgICAgIHNob3dEYXRhU2F2aW5nOiBmdW5jdGlvbiAodGV4dDogc3RyaW5nKSB7XG4gICAgICAgIHNhdmluZ0RhdGFTdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgc2VsZi5zZXRDb21wbGV0ZWRTdGF0ZShcInNhdmluZ1wiLCB0ZXh0KTtcbiAgICAgIH0sXG4gICAgICBzaG93RGF0YVNhdmluZ0Vycm9yOiBmdW5jdGlvbiAodGV4dDogc3RyaW5nKSB7XG4gICAgICAgIHNlbGYuc2V0Q29tcGxldGVkU3RhdGUoXCJlcnJvclwiLCB0ZXh0KTtcbiAgICAgIH0sXG4gICAgICBzaG93RGF0YVNhdmluZ1N1Y2Nlc3M6IGZ1bmN0aW9uICh0ZXh0OiBzdHJpbmcpIHtcbiAgICAgICAgc2VsZi5zZXRDb21wbGV0ZWRTdGF0ZShcInN1Y2Nlc3NcIiwgdGV4dCk7XG4gICAgICAgIHNlbGYubmF2aWdhdGVUbygpO1xuICAgICAgfSxcbiAgICAgIHNob3dEYXRhU2F2aW5nQ2xlYXI6IGZ1bmN0aW9uICh0ZXh0OiBzdHJpbmcpIHtcbiAgICAgICAgc2VsZi5zZXRDb21wbGV0ZWRTdGF0ZShcIlwiLCBcIlwiKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLm9uQ29tcGxldGUuZmlyZSh0aGlzLCBvbkNvbXBsZXRlT3B0aW9ucyk7XG4gICAgaWYgKCFwcmV2aW91c0Nvb2tpZSAmJiB0aGlzLnN1cnZleVBvc3RJZCkge1xuICAgICAgdGhpcy5zZW5kUmVzdWx0KCk7XG4gICAgfVxuICAgIGlmICghc2F2aW5nRGF0YVN0YXJ0ZWQpIHtcbiAgICAgIHRoaXMubmF2aWdhdGVUbygpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogU3RhcnRzIHRoZSBzdXJ2ZXkuIENoYW5nZXMgdGhlIHN1cnZleSBtb2RlIGZyb20gXCJzdGFydGluZ1wiIHRvIFwicnVubmluZ1wiLiBDYWxsIHRoaXMgZnVuY3Rpb24gaWYgeW91ciBzdXJ2ZXkgaGFzIGEgc3RhcnQgcGFnZSwgb3RoZXJ3aXNlIHRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nLlxuICAgKiBAc2VlIGZpcnN0UGFnZUlzU3RhcnRlZFxuICAgKi9cbiAgcHVibGljIHN0YXJ0KCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5maXJzdFBhZ2VJc1N0YXJ0ZWQpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodGhpcy5jaGVja0lzUGFnZUhhc0Vycm9ycyh0aGlzLnN0YXJ0ZWRQYWdlLCB0cnVlKSkgcmV0dXJuIGZhbHNlO1xuICAgIHRoaXMuaXNTdGFydGVkU3RhdGUgPSBmYWxzZTtcbiAgICB0aGlzLnN0YXJ0VGltZXJGcm9tVUkoKTtcbiAgICB0aGlzLm9uU3RhcnRlZC5maXJlKHRoaXMsIHt9KTtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gICAgaWYgKCEhdGhpcy5jdXJyZW50UGFnZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZS5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogR2V0cyB3aGV0aGVyIHRoZSBxdWVzdGlvbiB2YWx1ZXMgb24gdGhlIGN1cnJlbnQgcGFnZSBhcmUgdmFsaWRhdGluZyBvbiB0aGUgc2VydmVyIGF0IHRoZSBjdXJyZW50IG1vbWVudC5cbiAgICogQHNlZSBvblNlcnZlclZhbGlkYXRlUXVlc3Rpb25zXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzVmFsaWRhdGluZ09uU2VydmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc1ZhbGlkYXRpbmdPblNlcnZlclwiLCBmYWxzZSk7XG4gIH1cbiAgcHJpdmF0ZSBzZXRJc1ZhbGlkYXRpbmdPblNlcnZlcih2YWw6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsID09IHRoaXMuaXNWYWxpZGF0aW5nT25TZXJ2ZXIpIHJldHVybjtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJpc1ZhbGlkYXRpbmdPblNlcnZlclwiLCB2YWwpO1xuICAgIHRoaXMub25Jc1ZhbGlkYXRpbmdPblNlcnZlckNoYW5nZWQoKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25Jc1ZhbGlkYXRpbmdPblNlcnZlckNoYW5nZWQoKSB7IH1cbiAgcHJvdGVjdGVkIGRvU2VydmVyVmFsaWRhdGlvbihcbiAgICBkb0NvbXBsZXRlOiBib29sZWFuLFxuICAgIGlzUHJldmlldzogYm9vbGVhbiA9IGZhbHNlXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmIChcbiAgICAgICF0aGlzLm9uU2VydmVyVmFsaWRhdGVRdWVzdGlvbnMgfHxcbiAgICAgIHRoaXMub25TZXJ2ZXJWYWxpZGF0ZVF1ZXN0aW9ucy5pc0VtcHR5XG4gICAgKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghZG9Db21wbGV0ZSAmJiB0aGlzLmNoZWNrRXJyb3JzTW9kZSA9PT0gXCJvbkNvbXBsZXRlXCIpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICBkYXRhOiA8eyBbaW5kZXg6IHN0cmluZ106IGFueSB9Pnt9LFxuICAgICAgZXJyb3JzOiB7fSxcbiAgICAgIHN1cnZleTogdGhpcyxcbiAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNlbGYuY29tcGxldGVTZXJ2ZXJWYWxpZGF0aW9uKG9wdGlvbnMsIGlzUHJldmlldyk7XG4gICAgICB9LFxuICAgIH07XG4gICAgaWYgKGRvQ29tcGxldGUgJiYgdGhpcy5jaGVja0Vycm9yc01vZGUgPT09IFwib25Db21wbGV0ZVwiKSB7XG4gICAgICBvcHRpb25zLmRhdGEgPSB0aGlzLmRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmFjdGl2ZVBhZ2UucXVlc3Rpb25zO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gcXVlc3Rpb25zW2ldO1xuICAgICAgICBpZiAoIXF1ZXN0aW9uLnZpc2libGUpIGNvbnRpbnVlO1xuICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmdldFZhbHVlKHF1ZXN0aW9uLmdldFZhbHVlTmFtZSgpKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eSh2YWx1ZSkpXG4gICAgICAgICAgb3B0aW9ucy5kYXRhW3F1ZXN0aW9uLmdldFZhbHVlTmFtZSgpXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNldElzVmFsaWRhdGluZ09uU2VydmVyKHRydWUpO1xuXG4gICAgaWYgKHR5cGVvZiB0aGlzLm9uU2VydmVyVmFsaWRhdGVRdWVzdGlvbnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5vblNlcnZlclZhbGlkYXRlUXVlc3Rpb25zKHRoaXMsIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9uU2VydmVyVmFsaWRhdGVRdWVzdGlvbnMuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwcml2YXRlIGNvbXBsZXRlU2VydmVyVmFsaWRhdGlvbihvcHRpb25zOiBhbnksIGlzUHJldmlldzogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0SXNWYWxpZGF0aW5nT25TZXJ2ZXIoZmFsc2UpO1xuICAgIGlmICghb3B0aW9ucyAmJiAhb3B0aW9ucy5zdXJ2ZXkpIHJldHVybjtcbiAgICB2YXIgc2VsZiA9IG9wdGlvbnMuc3VydmV5O1xuICAgIHZhciBoYXNFcnJvcnMgPSBmYWxzZTtcbiAgICBpZiAob3B0aW9ucy5lcnJvcnMpIHtcbiAgICAgIHZhciBoYXNUb0ZvY3VzID0gdGhpcy5mb2N1c09uRmlyc3RFcnJvcjtcbiAgICAgIGZvciAodmFyIG5hbWUgaW4gb3B0aW9ucy5lcnJvcnMpIHtcbiAgICAgICAgdmFyIHF1ZXN0aW9uID0gc2VsZi5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcbiAgICAgICAgaWYgKHF1ZXN0aW9uICYmIHF1ZXN0aW9uW1wiZXJyb3JzXCJdKSB7XG4gICAgICAgICAgaGFzRXJyb3JzID0gdHJ1ZTtcbiAgICAgICAgICBxdWVzdGlvbi5hZGRFcnJvcihuZXcgQ3VzdG9tRXJyb3Iob3B0aW9ucy5lcnJvcnNbbmFtZV0sIHRoaXMpKTtcbiAgICAgICAgICBpZiAoaGFzVG9Gb2N1cykge1xuICAgICAgICAgICAgaGFzVG9Gb2N1cyA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKCEhcXVlc3Rpb24ucGFnZSkge1xuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcXVlc3Rpb24ucGFnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHF1ZXN0aW9uLmZvY3VzKHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5maXJlVmFsaWRhdGVkRXJyb3JzT25QYWdlKHRoaXMuY3VycmVudFBhZ2UpO1xuICAgIH1cbiAgICBpZiAoIWhhc0Vycm9ycykge1xuICAgICAgaWYgKGlzUHJldmlldykge1xuICAgICAgICB0aGlzLmlzU2hvd2luZ1ByZXZpZXcgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHNlbGYuaXNMYXN0UGFnZSkgc2VsZi5kb0NvbXBsZXRlKCk7XG4gICAgICAgIGVsc2Ugc2VsZi5kb05leHRQYWdlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBkb05leHRQYWdlKCkge1xuICAgIHZhciBjdXJQYWdlID0gdGhpcy5jdXJyZW50UGFnZTtcbiAgICB0aGlzLmNoZWNrT25QYWdlVHJpZ2dlcnMoKTtcbiAgICBpZiAoIXRoaXMuaXNDb21wbGV0ZWQpIHtcbiAgICAgIGlmICh0aGlzLnNlbmRSZXN1bHRPblBhZ2VOZXh0KSB7XG4gICAgICAgIHRoaXMuc2VuZFJlc3VsdCh0aGlzLnN1cnZleVBvc3RJZCwgdGhpcy5jbGllbnRJZCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoY3VyUGFnZSA9PT0gdGhpcy5jdXJyZW50UGFnZSkge1xuICAgICAgICB2YXIgdlBhZ2VzID0gdGhpcy52aXNpYmxlUGFnZXM7XG4gICAgICAgIHZhciBpbmRleCA9IHZQYWdlcy5pbmRleE9mKHRoaXMuY3VycmVudFBhZ2UpO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdlBhZ2VzW2luZGV4ICsgMV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZG9Db21wbGV0ZSh0cnVlKTtcbiAgICB9XG4gIH1cbiAgcHVibGljIHNldENvbXBsZXRlZCgpIHtcbiAgICB0aGlzLmlzQ29tcGxldGVkID0gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgSFRNTCBjb250ZW50IGZvciB0aGUgY29tcGxldGUgcGFnZS5cbiAgICogQHNlZSBjb21wbGV0ZWRIdG1sXG4gICAqL1xuICBwdWJsaWMgZ2V0IHByb2Nlc3NlZENvbXBsZXRlZEh0bWwoKTogc3RyaW5nIHtcbiAgICB2YXIgaHRtbCA9IHRoaXMucmVuZGVyZWRDb21wbGV0ZWRIdG1sO1xuICAgIGlmIChodG1sKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzSHRtbChodG1sKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiPGgzPlwiICsgdGhpcy5nZXRMb2NTdHJpbmcoXCJjb21wbGV0aW5nU3VydmV5XCIpICsgXCI8L2gzPlwiO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBIVE1MIGNvbnRlbnQsIHRoYXQgaXMgc2hvd24gdG8gYSB1c2VyIHRoYXQgaGFkIGNvbXBsZXRlZCB0aGUgc3VydmV5IGJlZm9yZS5cbiAgICogQHNlZSBjb21wbGV0ZWRIdG1sXG4gICAqIEBzZWUgY29va2llTmFtZVxuICAgKi9cbiAgcHVibGljIGdldCBwcm9jZXNzZWRDb21wbGV0ZWRCZWZvcmVIdG1sKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuY29tcGxldGVkQmVmb3JlSHRtbCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0h0bWwodGhpcy5jb21wbGV0ZWRCZWZvcmVIdG1sKTtcbiAgICB9XG4gICAgcmV0dXJuIFwiPGgzPlwiICsgdGhpcy5nZXRMb2NTdHJpbmcoXCJjb21wbGV0aW5nU3VydmV5QmVmb3JlXCIpICsgXCI8L2gzPlwiO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBIVE1MIGNvbnRlbnQsIHRoYXQgaXMgc2hvd3Mgd2hlbiBhIHN1cnZleSBsb2FkcyB0aGUgc3VydmV5IEpTT04uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHByb2Nlc3NlZExvYWRpbmdIdG1sKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMubG9hZGluZ0h0bWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NIdG1sKHRoaXMubG9hZGluZ0h0bWwpO1xuICAgIH1cbiAgICByZXR1cm4gXCI8aDM+XCIgKyB0aGlzLmdldExvY1N0cmluZyhcImxvYWRpbmdTdXJ2ZXlcIikgKyBcIjwvaDM+XCI7XG4gIH1cbiAgcHVibGljIGdldFByb2dyZXNzSW5mbygpOiBJUHJvZ3Jlc3NJbmZvIHtcbiAgICB2YXIgcGFnZXMgPSB0aGlzLmlzRGVzaWduTW9kZSA/IHRoaXMucGFnZXMgOiB0aGlzLnZpc2libGVQYWdlcztcbiAgICByZXR1cm4gU3VydmV5RWxlbWVudC5nZXRQcm9ncmVzc0luZm9CeUVsZW1lbnRzKHBhZ2VzLCBmYWxzZSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRleHQgZm9yIHRoZSBjdXJyZW50IHByb2dyZXNzLlxuICAgKi9cbiAgcHVibGljIGdldCBwcm9ncmVzc1RleHQoKTogc3RyaW5nIHtcbiAgICB2YXIgcmVzID0gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicHJvZ3Jlc3NUZXh0XCIsIFwiXCIpO1xuICAgIGlmICghcmVzKSB7XG4gICAgICB0aGlzLnVwZGF0ZVByb2dyZXNzVGV4dCgpO1xuICAgICAgcmVzID0gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwicHJvZ3Jlc3NUZXh0XCIsIFwiXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgaXNDYWxjdWxhdGluZ1Byb2dyZXNzVGV4dCA9IGZhbHNlO1xuICBwdWJsaWMgdXBkYXRlUHJvZ3Jlc3NUZXh0KG9uVmFsdWVDaGFuZ2VkOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAodGhpcy5pc0NhbGN1bGF0aW5nUHJvZ3Jlc3NUZXh0KSByZXR1cm47XG4gICAgaWYgKFxuICAgICAgb25WYWx1ZUNoYW5nZWQgJiZcbiAgICAgIHRoaXMucHJvZ3Jlc3NCYXJUeXBlID09IFwicGFnZXNcIiAmJlxuICAgICAgdGhpcy5vblByb2dyZXNzVGV4dC5pc0VtcHR5XG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuaXNDYWxjdWxhdGluZ1Byb2dyZXNzVGV4dCA9IHRydWU7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwicHJvZ3Jlc3NUZXh0XCIsIHRoaXMuZ2V0UHJvZ3Jlc3NUZXh0KCkpO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInByb2dyZXNzVmFsdWVcIiwgdGhpcy5nZXRQcm9ncmVzcygpKTtcbiAgICB0aGlzLmlzQ2FsY3VsYXRpbmdQcm9ncmVzc1RleHQgPSBmYWxzZTtcbiAgfVxuICBwdWJsaWMgZ2V0UHJvZ3Jlc3NUZXh0KCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmlzRGVzaWduTW9kZSAmJiB0aGlzLmN1cnJlbnRQYWdlID09IG51bGwpIHJldHVybiBcIlwiO1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgcXVlc3Rpb25Db3VudDogMCxcbiAgICAgIGFuc3dlcmVkUXVlc3Rpb25Db3VudDogMCxcbiAgICAgIHJlcXVpcmVkUXVlc3Rpb25Db3VudDogMCxcbiAgICAgIHJlcXVpcmVkQW5zd2VyZWRRdWVzdGlvbkNvdW50OiAwLFxuICAgICAgdGV4dDogXCJcIixcbiAgICB9O1xuICAgIHZhciB0eXBlID0gdGhpcy5wcm9ncmVzc0JhclR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoXG4gICAgICB0eXBlID09PSBcInF1ZXN0aW9uc1wiIHx8XG4gICAgICB0eXBlID09PSBcInJlcXVpcmVkcXVlc3Rpb25zXCIgfHxcbiAgICAgIHR5cGUgPT09IFwiY29ycmVjdHF1ZXN0aW9uc1wiIHx8XG4gICAgICAhdGhpcy5vblByb2dyZXNzVGV4dC5pc0VtcHR5XG4gICAgKSB7XG4gICAgICB2YXIgaW5mbyA9IHRoaXMuZ2V0UHJvZ3Jlc3NJbmZvKCk7XG4gICAgICBvcHRpb25zLnF1ZXN0aW9uQ291bnQgPSBpbmZvLnF1ZXN0aW9uQ291bnQ7XG4gICAgICBvcHRpb25zLmFuc3dlcmVkUXVlc3Rpb25Db3VudCA9IGluZm8uYW5zd2VyZWRRdWVzdGlvbkNvdW50O1xuICAgICAgb3B0aW9ucy5yZXF1aXJlZFF1ZXN0aW9uQ291bnQgPSBpbmZvLnJlcXVpcmVkUXVlc3Rpb25Db3VudDtcbiAgICAgIG9wdGlvbnMucmVxdWlyZWRBbnN3ZXJlZFF1ZXN0aW9uQ291bnQgPVxuICAgICAgICBpbmZvLnJlcXVpcmVkQW5zd2VyZWRRdWVzdGlvbkNvdW50O1xuICAgIH1cblxuICAgIG9wdGlvbnMudGV4dCA9IHRoaXMuZ2V0UHJvZ3Jlc3NUZXh0Q29yZShvcHRpb25zKTtcbiAgICB0aGlzLm9uUHJvZ3Jlc3NUZXh0LmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMudGV4dDtcbiAgfVxuICBwcml2YXRlIGdldFByb2dyZXNzVGV4dENvcmUoaW5mbzogSVByb2dyZXNzSW5mbyk6IHN0cmluZyB7XG4gICAgdmFyIHR5cGUgPSB0aGlzLnByb2dyZXNzQmFyVHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICh0eXBlID09PSBcInF1ZXN0aW9uc1wiKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMb2NTdHJpbmcoXCJxdWVzdGlvbnNQcm9ncmVzc1RleHRcIilbXCJmb3JtYXRcIl0oXG4gICAgICAgIGluZm8uYW5zd2VyZWRRdWVzdGlvbkNvdW50LFxuICAgICAgICBpbmZvLnF1ZXN0aW9uQ291bnRcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0eXBlID09PSBcInJlcXVpcmVkcXVlc3Rpb25zXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExvY1N0cmluZyhcInF1ZXN0aW9uc1Byb2dyZXNzVGV4dFwiKVtcImZvcm1hdFwiXShcbiAgICAgICAgaW5mby5yZXF1aXJlZEFuc3dlcmVkUXVlc3Rpb25Db3VudCxcbiAgICAgICAgaW5mby5yZXF1aXJlZFF1ZXN0aW9uQ291bnRcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0eXBlID09PSBcImNvcnJlY3RxdWVzdGlvbnNcIikge1xuICAgICAgdmFyIGNvcnJlY3RBbnN3ZXJzQ291bnQgPSB0aGlzLmdldENvcnJlY3RlZEFuc3dlckNvdW50KCk7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMb2NTdHJpbmcoXCJxdWVzdGlvbnNQcm9ncmVzc1RleHRcIilbXCJmb3JtYXRcIl0oXG4gICAgICAgIGNvcnJlY3RBbnN3ZXJzQ291bnQsXG4gICAgICAgIGluZm8ucXVlc3Rpb25Db3VudFxuICAgICAgKTtcbiAgICB9XG4gICAgdmFyIHZQYWdlcyA9IHRoaXMuaXNEZXNpZ25Nb2RlID8gdGhpcy5wYWdlcyA6IHRoaXMudmlzaWJsZVBhZ2VzO1xuICAgIHZhciBpbmRleCA9IHZQYWdlcy5pbmRleE9mKHRoaXMuY3VycmVudFBhZ2UpICsgMTtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2NTdHJpbmcoXCJwcm9ncmVzc1RleHRcIilbXCJmb3JtYXRcIl0oaW5kZXgsIHZQYWdlcy5sZW5ndGgpO1xuICB9XG4gIHByb3RlY3RlZCBhZnRlclJlbmRlclN1cnZleShodG1sRWxlbWVudDogYW55KSB7XG4gICAgdGhpcy5vbkFmdGVyUmVuZGVyU3VydmV5LmZpcmUodGhpcywge1xuICAgICAgc3VydmV5OiB0aGlzLFxuICAgICAgaHRtbEVsZW1lbnQ6IGh0bWxFbGVtZW50LFxuICAgIH0pO1xuICB9XG4gIHVwZGF0ZVF1ZXN0aW9uQ3NzQ2xhc3NlcyhxdWVzdGlvbjogSVF1ZXN0aW9uLCBjc3NDbGFzc2VzOiBhbnkpIHtcbiAgICB0aGlzLm9uVXBkYXRlUXVlc3Rpb25Dc3NDbGFzc2VzLmZpcmUodGhpcywge1xuICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgY3NzQ2xhc3NlczogY3NzQ2xhc3NlcyxcbiAgICB9KTtcbiAgfVxuICB1cGRhdGVQYW5lbENzc0NsYXNzZXMocGFuZWw6IElQYW5lbCwgY3NzQ2xhc3NlczogYW55KSB7XG4gICAgdGhpcy5vblVwZGF0ZVBhbmVsQ3NzQ2xhc3Nlcy5maXJlKHRoaXMsIHtcbiAgICAgIHBhbmVsOiBwYW5lbCxcbiAgICAgIGNzc0NsYXNzZXM6IGNzc0NsYXNzZXMsXG4gICAgfSk7XG4gIH1cbiAgdXBkYXRlUGFnZUNzc0NsYXNzZXMocGFnZTogSVBhZ2UsIGNzc0NsYXNzZXM6IGFueSkge1xuICAgIHRoaXMub25VcGRhdGVQYWdlQ3NzQ2xhc3Nlcy5maXJlKHRoaXMsIHtcbiAgICAgIHBhZ2U6IHBhZ2UsXG4gICAgICBjc3NDbGFzc2VzOiBjc3NDbGFzc2VzLFxuICAgIH0pO1xuICB9XG4gIHVwZGF0ZUNob2ljZUl0ZW1Dc3MocXVlc3Rpb246IElRdWVzdGlvbiwgb3B0aW9uczogYW55KTogdm9pZCB7XG4gICAgb3B0aW9ucy5xdWVzdGlvbiA9IHF1ZXN0aW9uO1xuICAgIHRoaXMub25VcGRhdGVDaG9pY2VJdGVtQ3NzLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gIH1cbiAgYWZ0ZXJSZW5kZXJQYWdlKGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIGlmICh0aGlzLm9uQWZ0ZXJSZW5kZXJQYWdlLmlzRW1wdHkpIHJldHVybjtcbiAgICB0aGlzLm9uQWZ0ZXJSZW5kZXJQYWdlLmZpcmUodGhpcywge1xuICAgICAgcGFnZTogdGhpcy5hY3RpdmVQYWdlLFxuICAgICAgaHRtbEVsZW1lbnQ6IGh0bWxFbGVtZW50LFxuICAgIH0pO1xuICB9XG4gIGFmdGVyUmVuZGVySGVhZGVyKGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIGlmICh0aGlzLm9uQWZ0ZXJSZW5kZXJIZWFkZXIuaXNFbXB0eSkgcmV0dXJuO1xuICAgIHRoaXMub25BZnRlclJlbmRlckhlYWRlci5maXJlKHRoaXMsIHtcbiAgICAgIGh0bWxFbGVtZW50OiBodG1sRWxlbWVudCxcbiAgICB9KTtcbiAgfVxuICBhZnRlclJlbmRlclF1ZXN0aW9uKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIGh0bWxFbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIHRoaXMub25BZnRlclJlbmRlclF1ZXN0aW9uLmZpcmUodGhpcywge1xuICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgaHRtbEVsZW1lbnQ6IGh0bWxFbGVtZW50LFxuICAgIH0pO1xuICB9XG4gIGFmdGVyUmVuZGVyUXVlc3Rpb25JbnB1dChxdWVzdGlvbjogSVF1ZXN0aW9uLCBodG1sRWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICBpZiAodGhpcy5vbkFmdGVyUmVuZGVyUXVlc3Rpb25JbnB1dC5pc0VtcHR5KSByZXR1cm47XG4gICAgbGV0IGlkID0gKDxRdWVzdGlvbj5xdWVzdGlvbikuaW5wdXRJZDtcbiAgICBpZiAoISFpZCAmJiBodG1sRWxlbWVudC5pZCAhPT0gaWQgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBsZXQgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgICBpZiAoISFlbCkge1xuICAgICAgICBodG1sRWxlbWVudCA9IGVsO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9uQWZ0ZXJSZW5kZXJRdWVzdGlvbklucHV0LmZpcmUodGhpcywge1xuICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgaHRtbEVsZW1lbnQ6IGh0bWxFbGVtZW50LFxuICAgIH0pO1xuICB9XG4gIGFmdGVyUmVuZGVyUGFuZWwocGFuZWw6IElFbGVtZW50LCBodG1sRWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICB0aGlzLm9uQWZ0ZXJSZW5kZXJQYW5lbC5maXJlKHRoaXMsIHtcbiAgICAgIHBhbmVsOiBwYW5lbCxcbiAgICAgIGh0bWxFbGVtZW50OiBodG1sRWxlbWVudCxcbiAgICB9KTtcbiAgfVxuICB3aGVuUXVlc3Rpb25Gb2N1c0luKHF1ZXN0aW9uOiBJUXVlc3Rpb24pIHtcbiAgICB0aGlzLm9uRm9jdXNJblF1ZXN0aW9uLmZpcmUodGhpcywge1xuICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uXG4gICAgfSk7XG4gIH1cbiAgd2hlblBhbmVsRm9jdXNJbihwYW5lbDogSVBhbmVsKSB7XG4gICAgdGhpcy5vbkZvY3VzSW5QYW5lbC5maXJlKHRoaXMsIHtcbiAgICAgIHBhbmVsOiBwYW5lbFxuICAgIH0pO1xuICB9XG5cbiAgbWF0cml4QmVmb3JlUm93QWRkZWQob3B0aW9uczogYW55KSB7XG4gICAgdGhpcy5vbk1hdHJpeEJlZm9yZVJvd0FkZGVkLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gIH1cbiAgbWF0cml4Um93QWRkZWQocXVlc3Rpb246IElRdWVzdGlvbiwgcm93OiBhbnkpIHtcbiAgICB0aGlzLm9uTWF0cml4Um93QWRkZWQuZmlyZSh0aGlzLCB7IHF1ZXN0aW9uOiBxdWVzdGlvbiwgcm93OiByb3cgfSk7XG4gIH1cbiAgZ2V0UXVlc3Rpb25CeVZhbHVlTmFtZUZyb21BcnJheShcbiAgICB2YWx1ZU5hbWU6IHN0cmluZyxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgaW5kZXg6IG51bWJlclxuICApOiBJUXVlc3Rpb24ge1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldFF1ZXN0aW9uc0J5VmFsdWVOYW1lKHZhbHVlTmFtZSk7XG4gICAgaWYgKCFxdWVzdGlvbnMpIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHJlcyA9IHF1ZXN0aW9uc1tpXS5nZXRRdWVzdGlvbkZyb21BcnJheShuYW1lLCBpbmRleCk7XG4gICAgICBpZiAoISFyZXMpIHJldHVybiByZXM7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIG1hdHJpeFJvd1JlbW92ZWQocXVlc3Rpb246IElRdWVzdGlvbiwgcm93SW5kZXg6IG51bWJlciwgcm93OiBhbnkpIHtcbiAgICB0aGlzLm9uTWF0cml4Um93UmVtb3ZlZC5maXJlKHRoaXMsIHtcbiAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgIHJvd0luZGV4OiByb3dJbmRleCxcbiAgICAgIHJvdzogcm93LFxuICAgIH0pO1xuICB9XG4gIG1hdHJpeFJvd1JlbW92aW5nKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIHJvd0luZGV4OiBudW1iZXIsIHJvdzogYW55KTogYm9vbGVhbiB7XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICByb3dJbmRleDogcm93SW5kZXgsXG4gICAgICByb3c6IHJvdyxcbiAgICAgIGFsbG93OiB0cnVlLFxuICAgIH07XG4gICAgdGhpcy5vbk1hdHJpeFJvd1JlbW92aW5nLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMuYWxsb3c7XG4gIH1cbiAgbWF0cml4QWxsb3dSZW1vdmVSb3coXG4gICAgcXVlc3Rpb246IElRdWVzdGlvbixcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIHJvdzogYW55XG4gICk6IGJvb2xlYW4ge1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgcm93SW5kZXg6IHJvd0luZGV4LFxuICAgICAgcm93OiByb3csXG4gICAgICBhbGxvdzogdHJ1ZSxcbiAgICB9O1xuICAgIHRoaXMub25NYXRyaXhBbGxvd1JlbW92ZVJvdy5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLmFsbG93O1xuICB9XG4gIG1hdHJpeENlbGxDcmVhdGluZyhxdWVzdGlvbjogSVF1ZXN0aW9uLCBvcHRpb25zOiBhbnkpIHtcbiAgICBvcHRpb25zLnF1ZXN0aW9uID0gcXVlc3Rpb247XG4gICAgdGhpcy5vbk1hdHJpeENlbGxDcmVhdGluZy5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICB9XG4gIG1hdHJpeENlbGxDcmVhdGVkKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIG9wdGlvbnM6IGFueSkge1xuICAgIG9wdGlvbnMucXVlc3Rpb24gPSBxdWVzdGlvbjtcbiAgICB0aGlzLm9uTWF0cml4Q2VsbENyZWF0ZWQuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgfVxuICBtYXRyaXhBZnRlckNlbGxSZW5kZXIocXVlc3Rpb246IElRdWVzdGlvbiwgb3B0aW9uczogYW55KSB7XG4gICAgb3B0aW9ucy5xdWVzdGlvbiA9IHF1ZXN0aW9uO1xuICAgIHRoaXMub25NYXRyaXhBZnRlckNlbGxSZW5kZXIuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgfVxuICBtYXRyaXhDZWxsVmFsdWVDaGFuZ2VkKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIG9wdGlvbnM6IGFueSkge1xuICAgIG9wdGlvbnMucXVlc3Rpb24gPSBxdWVzdGlvbjtcbiAgICB0aGlzLm9uTWF0cml4Q2VsbFZhbHVlQ2hhbmdlZC5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICB9XG4gIG1hdHJpeENlbGxWYWx1ZUNoYW5naW5nKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIG9wdGlvbnM6IGFueSkge1xuICAgIG9wdGlvbnMucXVlc3Rpb24gPSBxdWVzdGlvbjtcbiAgICB0aGlzLm9uTWF0cml4Q2VsbFZhbHVlQ2hhbmdpbmcuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgfVxuICBnZXQgaXNWYWxpZGF0ZU9uVmFsdWVDaGFuZ2luZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jaGVja0Vycm9yc01vZGUgPT09IFwib25WYWx1ZUNoYW5naW5nXCI7XG4gIH1cbiAgbWF0cml4Q2VsbFZhbGlkYXRlKHF1ZXN0aW9uOiBJUXVlc3Rpb24sIG9wdGlvbnM6IGFueSk6IFN1cnZleUVycm9yIHtcbiAgICBvcHRpb25zLnF1ZXN0aW9uID0gcXVlc3Rpb247XG4gICAgdGhpcy5vbk1hdHJpeENlbGxWYWxpZGF0ZS5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLmVycm9yID8gbmV3IEN1c3RvbUVycm9yKG9wdGlvbnMuZXJyb3IsIHRoaXMpIDogbnVsbDtcbiAgfVxuICBkeW5hbWljUGFuZWxBZGRlZChxdWVzdGlvbjogSVF1ZXN0aW9uKSB7XG4gICAgaWYgKHRoaXMub25EeW5hbWljUGFuZWxBZGRlZC5pc0VtcHR5KSByZXR1cm47XG4gICAgdmFyIHBhbmVscyA9ICg8YW55PnF1ZXN0aW9uKS5wYW5lbHM7XG4gICAgdmFyIHBhbmVsID0gcGFuZWxzW3BhbmVscy5sZW5ndGggLSAxXTtcbiAgICB0aGlzLm9uRHluYW1pY1BhbmVsQWRkZWQuZmlyZSh0aGlzLCB7IHF1ZXN0aW9uOiBxdWVzdGlvbiwgcGFuZWw6IHBhbmVsIH0pO1xuICB9XG4gIGR5bmFtaWNQYW5lbFJlbW92ZWQocXVlc3Rpb246IElRdWVzdGlvbiwgcGFuZWxJbmRleDogbnVtYmVyLCBwYW5lbDogSVBhbmVsKSB7XG4gICAgdmFyIHF1ZXN0aW9ucyA9ICEhcGFuZWwgPyAoPFBhbmVsTW9kZWxCYXNlPnBhbmVsKS5xdWVzdGlvbnMgOiBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgcXVlc3Rpb25zW2ldLmNsZWFyT25EZWxldGluZ0NvbnRhaW5lcigpO1xuICAgIH1cbiAgICB0aGlzLm9uRHluYW1pY1BhbmVsUmVtb3ZlZC5maXJlKHRoaXMsIHtcbiAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgIHBhbmVsSW5kZXg6IHBhbmVsSW5kZXgsXG4gICAgICBwYW5lbDogcGFuZWwsXG4gICAgfSk7XG4gIH1cbiAgZHluYW1pY1BhbmVsSXRlbVZhbHVlQ2hhbmdlZChxdWVzdGlvbjogSVF1ZXN0aW9uLCBvcHRpb25zOiBhbnkpIHtcbiAgICBvcHRpb25zLnF1ZXN0aW9uID0gcXVlc3Rpb247XG4gICAgdGhpcy5vbkR5bmFtaWNQYW5lbEl0ZW1WYWx1ZUNoYW5nZWQuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgfVxuICBkcmFnQW5kRHJvcEFsbG93KG9wdGlvbnM6IGFueSk6IGJvb2xlYW4ge1xuICAgIG9wdGlvbnMuYWxsb3cgPSB0cnVlO1xuICAgIHRoaXMub25EcmFnRHJvcEFsbG93LmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMuYWxsb3c7XG4gIH1cbiAgZWxlbWVudENvbnRlbnRWaXNpYmlsaXR5Q2hhbmdlZChlbGVtZW50OiBJU3VydmV5RWxlbWVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlVmFsdWUpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2VWYWx1ZS5lbnN1cmVSb3dzVmlzaWJpbGl0eSgpO1xuICAgIH1cbiAgICB0aGlzLm9uRWxlbWVudENvbnRlbnRWaXNpYmlsaXR5Q2hhbmdlZC5maXJlKHRoaXMsIHsgZWxlbWVudCB9KTtcbiAgfVxuXG4gIGdldFVwZGF0ZWRFbGVtZW50VGl0bGVBY3Rpb25zKFxuICAgIGVsZW1lbnQ6IElTdXJ2ZXlFbGVtZW50LFxuICAgIHRpdGxlQWN0aW9uczogQXJyYXk8SUFjdGlvbj5cbiAgKTogQXJyYXk8SUFjdGlvbj4ge1xuICAgIGlmIChlbGVtZW50LmlzUGFnZSlcbiAgICAgIHJldHVybiB0aGlzLmdldFVwZGF0ZWRQYWdlVGl0bGVBY3Rpb25zKGVsZW1lbnQsIHRpdGxlQWN0aW9ucyk7XG4gICAgaWYgKGVsZW1lbnQuaXNQYW5lbClcbiAgICAgIHJldHVybiB0aGlzLmdldFVwZGF0ZWRQYW5lbFRpdGxlQWN0aW9ucyhlbGVtZW50LCB0aXRsZUFjdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLmdldFVwZGF0ZWRRdWVzdGlvblRpdGxlQWN0aW9ucyhlbGVtZW50LCB0aXRsZUFjdGlvbnMpO1xuICB9XG4gIHByaXZhdGUgZ2V0VXBkYXRlZFF1ZXN0aW9uVGl0bGVBY3Rpb25zKFxuICAgIHF1ZXN0aW9uOiBJU3VydmV5RWxlbWVudCxcbiAgICB0aXRsZUFjdGlvbnM6IEFycmF5PElBY3Rpb24+XG4gICkge1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgdGl0bGVBY3Rpb25zOiB0aXRsZUFjdGlvbnMsXG4gICAgfTtcbiAgICB0aGlzLm9uR2V0UXVlc3Rpb25UaXRsZUFjdGlvbnMuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICByZXR1cm4gb3B0aW9ucy50aXRsZUFjdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIGdldFVwZGF0ZWRQYW5lbFRpdGxlQWN0aW9ucyhcbiAgICBwYW5lbDogSVN1cnZleUVsZW1lbnQsXG4gICAgdGl0bGVBY3Rpb25zOiBBcnJheTxJQWN0aW9uPlxuICApIHtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIHBhbmVsOiBwYW5lbCxcbiAgICAgIHRpdGxlQWN0aW9uczogdGl0bGVBY3Rpb25zLFxuICAgIH07XG4gICAgdGhpcy5vbkdldFBhbmVsVGl0bGVBY3Rpb25zLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMudGl0bGVBY3Rpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRVcGRhdGVkUGFnZVRpdGxlQWN0aW9ucyhcbiAgICBwYWdlOiBJU3VydmV5RWxlbWVudCxcbiAgICB0aXRsZUFjdGlvbnM6IEFycmF5PElBY3Rpb24+XG4gICkge1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgcGFnZTogcGFnZSxcbiAgICAgIHRpdGxlQWN0aW9uczogdGl0bGVBY3Rpb25zLFxuICAgIH07XG4gICAgdGhpcy5vbkdldFBhZ2VUaXRsZUFjdGlvbnMuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICByZXR1cm4gb3B0aW9ucy50aXRsZUFjdGlvbnM7XG4gIH1cblxuICBnZXRVcGRhdGVkTWF0cml4Um93QWN0aW9ucyhcbiAgICBxdWVzdGlvbjogSVF1ZXN0aW9uLFxuICAgIHJvdzogYW55LFxuICAgIGFjdGlvbnM6IEFycmF5PElBY3Rpb24+XG4gICkge1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgYWN0aW9uczogYWN0aW9ucyxcbiAgICAgIHJvdzogcm93LFxuICAgIH07XG4gICAgdGhpcy5vbkdldE1hdHJpeFJvd0FjdGlvbnMuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICByZXR1cm4gb3B0aW9ucy5hY3Rpb25zO1xuICB9XG5cbiAgc2Nyb2xsRWxlbWVudFRvVG9wKFxuICAgIGVsZW1lbnQ6IElTdXJ2ZXlFbGVtZW50LFxuICAgIHF1ZXN0aW9uOiBJUXVlc3Rpb24sXG4gICAgcGFnZTogSVBhZ2UsXG4gICAgaWQ6IHN0cmluZ1xuICApOiBhbnkge1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgIHBhZ2U6IHBhZ2UsXG4gICAgICBlbGVtZW50SWQ6IGlkLFxuICAgICAgY2FuY2VsOiBmYWxzZSxcbiAgICB9O1xuICAgIHRoaXMub25TY3JvbGxpbmdFbGVtZW50VG9Ub3AuZmlyZSh0aGlzLCBvcHRpb25zKTtcbiAgICBpZiAoIW9wdGlvbnMuY2FuY2VsKSB7XG4gICAgICBTdXJ2ZXlFbGVtZW50LlNjcm9sbEVsZW1lbnRUb1RvcChvcHRpb25zLmVsZW1lbnRJZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwbG9hZHMgYSBmaWxlIHRvIHNlcnZlci5cbiAgICogQHBhcmFtIHF1ZXN0aW9uIGEgZmlsZSBxdWVzdGlvbiBvYmplY3RcbiAgICogQHBhcmFtIG5hbWUgYSBxdWVzdGlvbiBuYW1lXG4gICAqIEBwYXJhbSBmaWxlcyBmaWxlcyB0byB1cGxvYWRcbiAgICogQHBhcmFtIHVwbG9hZGluZ0NhbGxiYWNrIGEgY2FsbCBiYWNrIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3RhdHVzIG9uIHVwbG9hZGluZyB0aGUgZmlsZXNcbiAgICovXG4gIHB1YmxpYyB1cGxvYWRGaWxlcyhcbiAgICBxdWVzdGlvbjogSVF1ZXN0aW9uLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBmaWxlczogRmlsZVtdLFxuICAgIHVwbG9hZGluZ0NhbGxiYWNrOiAoc3RhdHVzOiBzdHJpbmcsIGRhdGE6IGFueSkgPT4gYW55XG4gICkge1xuICAgIGlmICh0aGlzLm9uVXBsb2FkRmlsZXMuaXNFbXB0eSkge1xuICAgICAgdXBsb2FkaW5nQ2FsbGJhY2soXCJlcnJvclwiLCBmaWxlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub25VcGxvYWRGaWxlcy5maXJlKHRoaXMsIHtcbiAgICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICBmaWxlczogZmlsZXMgfHwgW10sXG4gICAgICAgIGNhbGxiYWNrOiB1cGxvYWRpbmdDYWxsYmFjayxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdXJ2ZXlQb3N0SWQpIHtcbiAgICAgIHRoaXMudXBsb2FkRmlsZXNDb3JlKG5hbWUsIGZpbGVzLCB1cGxvYWRpbmdDYWxsYmFjayk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBEb3dubG9hZHMgYSBmaWxlIGZyb20gc2VydmVyXG4gICAqIEBwYXJhbSBuYW1lIGEgcXVlc3Rpb24gbmFtZVxuICAgKiBAcGFyYW0gZmlsZVZhbHVlIGEgc2luZ2xlIGZpbGUgcXVlc3Rpb24gdmFsdWVcbiAgICogQHBhcmFtIGNhbGxiYWNrIGEgY2FsbCBiYWNrIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3RhdHVzIG9uIGRvd25sb2FkaW5nIHRoZSBmaWxlIGFuZCB0aGUgZG93bmxvYWRlZCBmaWxlIGNvbnRlbnRcbiAgICovXG4gIHB1YmxpYyBkb3dubG9hZEZpbGUoXG4gICAgcXVlc3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgZmlsZVZhbHVlOiBhbnksXG4gICAgY2FsbGJhY2s6IChzdGF0dXM6IHN0cmluZywgZGF0YTogYW55KSA9PiBhbnlcbiAgKSB7XG4gICAgaWYgKHRoaXMub25Eb3dubG9hZEZpbGUuaXNFbXB0eSkge1xuICAgICAgISFjYWxsYmFjayAmJiBjYWxsYmFjayhcInN1Y2Nlc3NcIiwgZmlsZVZhbHVlLmNvbnRlbnQgfHwgZmlsZVZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5vbkRvd25sb2FkRmlsZS5maXJlKHRoaXMsIHtcbiAgICAgIG5hbWU6IHF1ZXN0aW9uTmFtZSxcbiAgICAgIGNvbnRlbnQ6IGZpbGVWYWx1ZS5jb250ZW50IHx8IGZpbGVWYWx1ZSxcbiAgICAgIGZpbGVWYWx1ZTogZmlsZVZhbHVlLFxuICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBDbGVhcnMgZmlsZXMgZnJvbSBzZXJ2ZXIuXG4gICAqIEBwYXJhbSBxdWVzdGlvbiBxdWVzdGlvblxuICAgKiBAcGFyYW0gbmFtZSBxdWVzdGlvbiBuYW1lXG4gICAqIEBwYXJhbSB2YWx1ZSBmaWxlIHF1ZXN0aW9uIHZhbHVlXG4gICAqIEBwYXJhbSBjYWxsYmFjayBjYWxsIGJhY2sgZnVuY3Rpb24gdG8gZ2V0IHRoZSBzdGF0dXMgb2YgdGhlIGNsZWFyaW5nIG9wZXJhdGlvblxuICAgKi9cbiAgcHVibGljIGNsZWFyRmlsZXMoXG4gICAgcXVlc3Rpb246IElRdWVzdGlvbixcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgdmFsdWU6IGFueSxcbiAgICBmaWxlTmFtZTogc3RyaW5nLFxuICAgIGNhbGxiYWNrOiAoc3RhdHVzOiBzdHJpbmcsIGRhdGE6IGFueSkgPT4gYW55XG4gICkge1xuICAgIGlmICh0aGlzLm9uQ2xlYXJGaWxlcy5pc0VtcHR5KSB7XG4gICAgICAhIWNhbGxiYWNrICYmIGNhbGxiYWNrKFwic3VjY2Vzc1wiLCB2YWx1ZSk7XG4gICAgfVxuICAgIHRoaXMub25DbGVhckZpbGVzLmZpcmUodGhpcywge1xuICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGZpbGVOYW1lOiBmaWxlTmFtZSxcbiAgICAgIGNhbGxiYWNrOiBjYWxsYmFjayxcbiAgICB9KTtcbiAgfVxuICB1cGRhdGVDaG9pY2VzRnJvbVNlcnZlcihcbiAgICBxdWVzdGlvbjogSVF1ZXN0aW9uLFxuICAgIGNob2ljZXM6IEFycmF5PEl0ZW1WYWx1ZT4sXG4gICAgc2VydmVyUmVzdWx0OiBhbnlcbiAgKTogQXJyYXk8SXRlbVZhbHVlPiB7XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICBjaG9pY2VzOiBjaG9pY2VzLFxuICAgICAgc2VydmVyUmVzdWx0OiBzZXJ2ZXJSZXN1bHQsXG4gICAgfTtcbiAgICB0aGlzLm9uTG9hZENob2ljZXNGcm9tU2VydmVyLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG9wdGlvbnMuY2hvaWNlcztcbiAgfVxuICBsb2FkZWRDaG9pY2VzRnJvbVNlcnZlcihxdWVzdGlvbjogSVF1ZXN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5sb2NTdHJzQ2hhbmdlZCgpO1xuICB9XG4gIHByb3RlY3RlZCBjcmVhdGVTdXJ2ZXlTZXJ2aWNlKCk6IGR4U3VydmV5U2VydmljZSB7XG4gICAgcmV0dXJuIG5ldyBkeFN1cnZleVNlcnZpY2UoKTtcbiAgfVxuICBwcm90ZWN0ZWQgdXBsb2FkRmlsZXNDb3JlKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBmaWxlczogRmlsZVtdLFxuICAgIHVwbG9hZGluZ0NhbGxiYWNrOiAoc3RhdHVzOiBzdHJpbmcsIGRhdGE6IGFueSkgPT4gYW55XG4gICkge1xuICAgIHZhciByZXNwb25zZXM6IEFycmF5PGFueT4gPSBbXTtcbiAgICBmaWxlcy5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgICBpZiAodXBsb2FkaW5nQ2FsbGJhY2spIHVwbG9hZGluZ0NhbGxiYWNrKFwidXBsb2FkaW5nXCIsIGZpbGUpO1xuICAgICAgdGhpcy5jcmVhdGVTdXJ2ZXlTZXJ2aWNlKCkuc2VuZEZpbGUoXG4gICAgICAgIHRoaXMuc3VydmV5UG9zdElkLFxuICAgICAgICBmaWxlLFxuICAgICAgICAoc3VjY2VzczogYm9vbGVhbiwgcmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgICByZXNwb25zZXMucHVzaCh7IGNvbnRlbnQ6IHJlc3BvbnNlLCBmaWxlOiBmaWxlIH0pO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlcy5sZW5ndGggPT09IGZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICBpZiAodXBsb2FkaW5nQ2FsbGJhY2spIHVwbG9hZGluZ0NhbGxiYWNrKFwic3VjY2Vzc1wiLCByZXNwb25zZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodXBsb2FkaW5nQ2FsbGJhY2spXG4gICAgICAgICAgICAgIHVwbG9hZGluZ0NhbGxiYWNrKFwiZXJyb3JcIiwge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlOiByZXNwb25zZSxcbiAgICAgICAgICAgICAgICBmaWxlOiBmaWxlLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG4gIH1cbiAgZ2V0UGFnZShpbmRleDogbnVtYmVyKTogUGFnZU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlc1tpbmRleF07XG4gIH1cbiAgLyoqXG4gICAqIEFkZHMgYW4gZXhpc3RpbmcgcGFnZSB0byB0aGUgc3VydmV5LlxuICAgKiBAcGFyYW0gcGFnZSBhIG5ld2x5IGFkZGVkIHBhZ2VcbiAgICogQHBhcmFtIGluZGV4IC0gYSBwYWdlIGluZGV4IHRvIHdoZXJlIGluc2VydCBhIHBhZ2UuIEl0IGlzIC0xIGJ5IGRlZmF1bHQgYW5kIHRoZSBwYWdlIHdpbGwgYmUgYWRkZWQgaW50byB0aGUgZW5kLlxuICAgKiBAc2VlIGFkZE5ld1BhZ2VcbiAgICovXG4gIHB1YmxpYyBhZGRQYWdlKHBhZ2U6IFBhZ2VNb2RlbCwgaW5kZXg6IG51bWJlciA9IC0xKSB7XG4gICAgaWYgKHBhZ2UgPT0gbnVsbCkgcmV0dXJuO1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5wYWdlcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMucGFnZXMucHVzaChwYWdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYWdlcy5zcGxpY2UoaW5kZXgsIDAsIHBhZ2UpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBwYWdlIGFuZCBhZGRzIGl0IHRvIGEgc3VydmV5LiBHZW5lcmF0ZXMgYSBuZXcgbmFtZSBpZiB0aGUgYG5hbWVgIHBhcmFtZXRlciBpcyBub3Qgc3BlY2lmaWVkLlxuICAgKiBAcGFyYW0gbmFtZSBhIHBhZ2UgbmFtZVxuICAgKiBAcGFyYW0gaW5kZXggLSBhIHBhZ2UgaW5kZXggdG8gd2hlcmUgaW5zZXJ0IGEgbmV3IHBhZ2UuIEl0IGlzIC0xIGJ5IGRlZmF1bHQgYW5kIHRoZSBwYWdlIHdpbGwgYmUgYWRkZWQgaW50byB0aGUgZW5kLlxuICAgKiBAc2VlIGFkZFBhZ2VcbiAgICovXG4gIHB1YmxpYyBhZGROZXdQYWdlKG5hbWU6IHN0cmluZyA9IG51bGwsIGluZGV4OiBudW1iZXIgPSAtMSkge1xuICAgIHZhciBwYWdlID0gdGhpcy5jcmVhdGVOZXdQYWdlKG5hbWUpO1xuICAgIHRoaXMuYWRkUGFnZShwYWdlLCBpbmRleCk7XG4gICAgcmV0dXJuIHBhZ2U7XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBwYWdlIGZyb20gYSBzdXJ2ZXkuXG4gICAqIEBwYXJhbSBwYWdlXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlUGFnZShwYWdlOiBQYWdlTW9kZWwpIHtcbiAgICB2YXIgaW5kZXggPSB0aGlzLnBhZ2VzLmluZGV4T2YocGFnZSk7XG4gICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuO1xuICAgIHRoaXMucGFnZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZVZhbHVlID09IHBhZ2UpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzLmxlbmd0aCA+IDAgPyB0aGlzLnBhZ2VzWzBdIDogbnVsbDtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSBxdWVzdGlvbiBieSBpdHMgbmFtZS5cbiAgICogQHBhcmFtIG5hbWUgYSBxdWVzdGlvbiBuYW1lXG4gICAqIEBwYXJhbSBjYXNlSW5zZW5zaXRpdmVcbiAgICogQHNlZSBnZXRRdWVzdGlvbkJ5VmFsdWVOYW1lXG4gICAqL1xuICBwdWJsaWMgZ2V0UXVlc3Rpb25CeU5hbWUoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGNhc2VJbnNlbnNpdGl2ZTogYm9vbGVhbiA9IGZhbHNlXG4gICk6IFF1ZXN0aW9uIHtcbiAgICBpZiAoIW5hbWUpIHJldHVybiBudWxsO1xuICAgIGlmIChjYXNlSW5zZW5zaXRpdmUpIHtcbiAgICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuICAgIHZhciBoYXNoOiBIYXNoVGFibGU8YW55PiA9ICEhY2FzZUluc2Vuc2l0aXZlXG4gICAgICA/IHRoaXMucXVlc3Rpb25IYXNoZXMubmFtZXNJbnNlbnNpdGl2ZVxuICAgICAgOiB0aGlzLnF1ZXN0aW9uSGFzaGVzLm5hbWVzO1xuICAgIHZhciByZXMgPSBoYXNoW25hbWVdO1xuICAgIGlmICghcmVzKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gcmVzWzBdO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcXVlc3Rpb24gYnkgaXRzIHZhbHVlIG5hbWVcbiAgICogQHBhcmFtIHZhbHVlTmFtZSBhIHF1ZXN0aW9uIG5hbWVcbiAgICogQHBhcmFtIGNhc2VJbnNlbnNpdGl2ZVxuICAgKiBAc2VlIGdldFF1ZXN0aW9uQnlOYW1lXG4gICAqIEBzZWUgZ2V0UXVlc3Rpb25zQnlWYWx1ZU5hbWVcbiAgICogQHNlZSBRdWVzdGlvbi52YWx1ZU5hbWVcbiAgICovXG4gIHB1YmxpYyBnZXRRdWVzdGlvbkJ5VmFsdWVOYW1lKFxuICAgIHZhbHVlTmFtZTogc3RyaW5nLFxuICAgIGNhc2VJbnNlbnNpdGl2ZTogYm9vbGVhbiA9IGZhbHNlXG4gICk6IElRdWVzdGlvbiB7XG4gICAgdmFyIHJlcyA9IHRoaXMuZ2V0UXVlc3Rpb25zQnlWYWx1ZU5hbWUodmFsdWVOYW1lLCBjYXNlSW5zZW5zaXRpdmUpO1xuICAgIHJldHVybiAhIXJlcyA/IHJlc1swXSA6IG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIHF1ZXN0aW9ucyBieSB0aGVpciB2YWx1ZU5hbWUuIG5hbWUgcHJvcGVydHkgaXMgdXNlZCBpZiB2YWx1ZU5hbWUgcHJvcGVydHkgaXMgZW1wdHkuXG4gICAqIEBwYXJhbSB2YWx1ZU5hbWUgYSBxdWVzdGlvbiBuYW1lXG4gICAqIEBwYXJhbSBjYXNlSW5zZW5zaXRpdmVcbiAgICogQHNlZSBnZXRRdWVzdGlvbkJ5TmFtZVxuICAgKiBAc2VlIGdldFF1ZXN0aW9uQnlWYWx1ZU5hbWVcbiAgICogQHNlZSBRdWVzdGlvbi52YWx1ZU5hbWVcbiAgICovXG4gIHB1YmxpYyBnZXRRdWVzdGlvbnNCeVZhbHVlTmFtZShcbiAgICB2YWx1ZU5hbWU6IHN0cmluZyxcbiAgICBjYXNlSW5zZW5zaXRpdmU6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBBcnJheTxRdWVzdGlvbj4ge1xuICAgIHZhciBoYXNoOiBIYXNoVGFibGU8YW55PiA9ICEhY2FzZUluc2Vuc2l0aXZlXG4gICAgICA/IHRoaXMucXVlc3Rpb25IYXNoZXMudmFsdWVOYW1lc0luc2Vuc2l0aXZlXG4gICAgICA6IHRoaXMucXVlc3Rpb25IYXNoZXMudmFsdWVOYW1lcztcbiAgICB2YXIgcmVzID0gaGFzaFt2YWx1ZU5hbWVdO1xuICAgIGlmICghcmVzKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHB1YmxpYyBnZXRDYWxjdWxhdGVkVmFsdWVCeU5hbWUobmFtZTogc3RyaW5nKTogQ2FsY3VsYXRlZFZhbHVlIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2FsY3VsYXRlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKG5hbWUgPT0gdGhpcy5jYWxjdWxhdGVkVmFsdWVzW2ldLm5hbWUpXG4gICAgICAgIHJldHVybiB0aGlzLmNhbGN1bGF0ZWRWYWx1ZXNbaV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIGEgbGlzdCBvZiBxdWVzdGlvbnMgYnkgdGhlaXIgbmFtZXMuXG4gICAqIEBwYXJhbSBuYW1lcyBhbiBhcnJheSBvZiBxdWVzdGlvbiBuYW1lc1xuICAgKiBAcGFyYW0gY2FzZUluc2Vuc2l0aXZlXG4gICAqL1xuICBwdWJsaWMgZ2V0UXVlc3Rpb25zQnlOYW1lcyhcbiAgICBuYW1lczogc3RyaW5nW10sXG4gICAgY2FzZUluc2Vuc2l0aXZlOiBib29sZWFuID0gZmFsc2VcbiAgKTogSVF1ZXN0aW9uW10ge1xuICAgIHZhciByZXN1bHQ6IElRdWVzdGlvbltdID0gW107XG4gICAgaWYgKCFuYW1lcykgcmV0dXJuIHJlc3VsdDtcbiAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghbmFtZXNbaV0pIGNvbnRpbnVlO1xuICAgICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lc1tpXSwgY2FzZUluc2Vuc2l0aXZlKTtcbiAgICAgIGlmIChxdWVzdGlvbikgcmVzdWx0LnB1c2gocXVlc3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcGFnZSBvbiB3aGljaCBhbiBlbGVtZW50IChxdWVzdGlvbiBvciBwYW5lbCkgaXMgcGxhY2VkLlxuICAgKiBAcGFyYW0gZWxlbWVudCBRdWVzdGlvbiBvciBQYW5lbFxuICAgKi9cbiAgcHVibGljIGdldFBhZ2VCeUVsZW1lbnQoZWxlbWVudDogSUVsZW1lbnQpOiBQYWdlTW9kZWwge1xuICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcGFnZSA9IHRoaXMucGFnZXNbaV07XG4gICAgICBpZiAocGFnZS5jb250YWluc0VsZW1lbnQoZWxlbWVudCkpIHJldHVybiBwYWdlO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHBhZ2Ugb24gd2hpY2ggYSBxdWVzdGlvbiBpcyBsb2NhdGVkLlxuICAgKiBAcGFyYW0gcXVlc3Rpb25cbiAgICovXG4gIHB1YmxpYyBnZXRQYWdlQnlRdWVzdGlvbihxdWVzdGlvbjogSVF1ZXN0aW9uKTogUGFnZU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQYWdlQnlFbGVtZW50KHF1ZXN0aW9uKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHBhZ2UgYnkgaXQncyBuYW1lLlxuICAgKiBAcGFyYW0gbmFtZVxuICAgKi9cbiAgcHVibGljIGdldFBhZ2VCeU5hbWUobmFtZTogc3RyaW5nKTogUGFnZU1vZGVsIHtcbiAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMucGFnZXNbaV0ubmFtZSA9PSBuYW1lKSByZXR1cm4gdGhpcy5wYWdlc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSBsaXN0IG9mIHBhZ2VzIGJ5IHRoZWlyIG5hbWVzLlxuICAgKiBAcGFyYW0gbmFtZXMgYSBsaXN0IG9mIHBhZ2UgbmFtZXNcbiAgICovXG4gIHB1YmxpYyBnZXRQYWdlc0J5TmFtZXMobmFtZXM6IHN0cmluZ1tdKTogUGFnZU1vZGVsW10ge1xuICAgIHZhciByZXN1bHQ6IFBhZ2VNb2RlbFtdID0gW107XG4gICAgaWYgKCFuYW1lcykgcmV0dXJuIHJlc3VsdDtcbiAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghbmFtZXNbaV0pIGNvbnRpbnVlO1xuICAgICAgdmFyIHBhZ2UgPSB0aGlzLmdldFBhZ2VCeU5hbWUobmFtZXNbaV0pO1xuICAgICAgaWYgKHBhZ2UpIHJlc3VsdC5wdXNoKHBhZ2UpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBhbGwgcXVlc3Rpb25zIGluIGEgc3VydmV5LlxuICAgKiBAcGFyYW0gdmlzaWJsZU9ubHkgc2V0IGl0IGB0cnVlYCwgaWYgeW91IHdhbnQgdG8gZ2V0IG9ubHkgdmlzaWJsZSBxdWVzdGlvbnNcbiAgICovXG4gIHB1YmxpYyBnZXRBbGxRdWVzdGlvbnMoXG4gICAgdmlzaWJsZU9ubHk6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBpbmNsdWRpbmdEZXNpZ25UaW1lOiBib29sZWFuID0gZmFsc2VcbiAgKTogQXJyYXk8UXVlc3Rpb24+IHtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PFF1ZXN0aW9uPigpO1xuICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhZ2VzW2ldLmFkZFF1ZXN0aW9uc1RvTGlzdChcbiAgICAgICAgcmVzdWx0LFxuICAgICAgICB2aXNpYmxlT25seSxcbiAgICAgICAgaW5jbHVkaW5nRGVzaWduVGltZVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBxdWl6IHF1ZXN0aW9ucy4gQWxsIHZpc2libGUgcXVlc3Rpb25zIHRoYXQgaGFzIGlucHV0KHMpIHdpZGdldHMuXG4gICAqIEBzZWUgZ2V0UXVpelF1ZXN0aW9uQ291bnRcbiAgICovXG4gIHB1YmxpYyBnZXRRdWl6UXVlc3Rpb25zKCk6IEFycmF5PElRdWVzdGlvbj4ge1xuICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXk8SVF1ZXN0aW9uPigpO1xuICAgIHZhciBzdGFydEluZGV4ID0gdGhpcy5maXJzdFBhZ2VJc1N0YXJ0ZWQgPyAxIDogMDtcbiAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghdGhpcy5wYWdlc1tpXS5pc1Zpc2libGUpIGNvbnRpbnVlO1xuICAgICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMucGFnZXNbaV0ucXVlc3Rpb25zO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBxdWVzdGlvbnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIHEgPSBxdWVzdGlvbnNbal07XG4gICAgICAgIGlmIChxLnF1aXpRdWVzdGlvbkNvdW50ID4gMCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSBwYW5lbCBieSBpdHMgbmFtZS5cbiAgICogQHBhcmFtIG5hbWUgYSBwYW5lbCBuYW1lXG4gICAqIEBwYXJhbSBjYXNlSW5zZW5zaXRpdmVcbiAgICogQHNlZSBnZXRRdWVzdGlvbkJ5TmFtZVxuICAgKi9cbiAgcHVibGljIGdldFBhbmVsQnlOYW1lKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjYXNlSW5zZW5zaXRpdmU6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBJUGFuZWwge1xuICAgIHZhciBwYW5lbHMgPSB0aGlzLmdldEFsbFBhbmVscygpO1xuICAgIGlmIChjYXNlSW5zZW5zaXRpdmUpIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHBhbmVsTmFtZSA9IHBhbmVsc1tpXS5uYW1lO1xuICAgICAgaWYgKGNhc2VJbnNlbnNpdGl2ZSkgcGFuZWxOYW1lID0gcGFuZWxOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAocGFuZWxOYW1lID09IG5hbWUpIHJldHVybiBwYW5lbHNbaV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBhbGwgc3VydmV5J3MgcGFuZWxzLlxuICAgKi9cbiAgcHVibGljIGdldEFsbFBhbmVscyhcbiAgICB2aXNpYmxlT25seTogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGluY2x1ZGluZ0Rlc2lnblRpbWU6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBBcnJheTxJUGFuZWw+IHtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5PElQYW5lbD4oKTtcbiAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYWdlc1tpXS5hZGRQYW5lbHNJbnRvTGlzdChyZXN1bHQsIHZpc2libGVPbmx5LCBpbmNsdWRpbmdEZXNpZ25UaW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlcyBhbmQgcmV0dXJucyBhIG5ldyBwYWdlLCBidXQgZG8gbm90IGFkZCBpdCBpbnRvIHRoZSBzdXJ2ZXkuXG4gICAqIFlvdSBjYW4gdXNlIGFkZFBhZ2UocGFnZSkgZnVuY3Rpb24gdG8gYWRkIGl0IGludG8gc3VydmV5IGxhdGVyLlxuICAgKiBAc2VlIGFkZFBhZ2VcbiAgICogQHNlZSBhZGROZXdQYWdlXG4gICAqL1xuICBwdWJsaWMgY3JlYXRlTmV3UGFnZShuYW1lOiBzdHJpbmcpOiBQYWdlTW9kZWwge1xuICAgIHJldHVybiBuZXcgUGFnZU1vZGVsKG5hbWUpO1xuICB9XG4gIHByb3RlY3RlZCBxdWVzdGlvbk9uVmFsdWVDaGFuZ2luZyh2YWx1ZU5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSk6IGFueSB7XG4gICAgaWYgKHRoaXMub25WYWx1ZUNoYW5naW5nLmlzRW1wdHkpIHJldHVybiBuZXdWYWx1ZTtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIG5hbWU6IHZhbHVlTmFtZSxcbiAgICAgIHF1ZXN0aW9uOiB0aGlzLmdldFF1ZXN0aW9uQnlWYWx1ZU5hbWUodmFsdWVOYW1lKSxcbiAgICAgIHZhbHVlOiB0aGlzLmdldFVuYmluZFZhbHVlKG5ld1ZhbHVlKSxcbiAgICAgIG9sZFZhbHVlOiB0aGlzLmdldFZhbHVlKHZhbHVlTmFtZSksXG4gICAgfTtcbiAgICB0aGlzLm9uVmFsdWVDaGFuZ2luZy5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLnZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCB1cGRhdGVRdWVzdGlvblZhbHVlKHZhbHVlTmFtZTogc3RyaW5nLCBuZXdWYWx1ZTogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24pIHJldHVybjtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRRdWVzdGlvbnNCeVZhbHVlTmFtZSh2YWx1ZU5hbWUpO1xuICAgIGlmICghIXF1ZXN0aW9ucykge1xuICAgICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcVZhbHVlID0gcXVlc3Rpb25zW2ldLnZhbHVlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKHFWYWx1ZSA9PT0gbmV3VmFsdWUgJiYgQXJyYXkuaXNBcnJheShxVmFsdWUpICYmICEhdGhpcy5lZGl0aW5nT2JqKSB8fFxuICAgICAgICAgICF0aGlzLmlzVHdvVmFsdWVFcXVhbHMocVZhbHVlLCBuZXdWYWx1ZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgcXVlc3Rpb25zW2ldLnVwZGF0ZVZhbHVlRnJvbVN1cnZleShuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBjaGVja1F1ZXN0aW9uRXJyb3JPblZhbHVlQ2hhbmdlZChxdWVzdGlvbjogUXVlc3Rpb24pIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5pc05hdmlnYXRpb25CdXR0b25QcmVzc2VkICYmXG4gICAgICAodGhpcy5jaGVja0Vycm9yc01vZGUgPT09IFwib25WYWx1ZUNoYW5nZWRcIiB8fFxuICAgICAgICBxdWVzdGlvbi5nZXRBbGxFcnJvcnMoKS5sZW5ndGggPiAwKVxuICAgICkge1xuICAgICAgdGhpcy5jaGVja1F1ZXN0aW9uRXJyb3JPblZhbHVlQ2hhbmdlZENvcmUocXVlc3Rpb24pO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGNoZWNrUXVlc3Rpb25FcnJvck9uVmFsdWVDaGFuZ2VkQ29yZShxdWVzdGlvbjogUXVlc3Rpb24pOiBib29sZWFuIHtcbiAgICB2YXIgb2xkRXJyb3JDb3VudCA9IHF1ZXN0aW9uLmdldEFsbEVycm9ycygpLmxlbmd0aDtcbiAgICB2YXIgcmVzID0gcXVlc3Rpb24uaGFzRXJyb3JzKHRydWUsIHtcbiAgICAgIGlzT25WYWx1ZUNoYW5nZWQ6ICF0aGlzLmlzVmFsaWRhdGVPblZhbHVlQ2hhbmdpbmcsXG4gICAgfSk7XG4gICAgaWYgKFxuICAgICAgISFxdWVzdGlvbi5wYWdlICYmXG4gICAgICAob2xkRXJyb3JDb3VudCA+IDAgfHwgcXVlc3Rpb24uZ2V0QWxsRXJyb3JzKCkubGVuZ3RoID4gMClcbiAgICApIHtcbiAgICAgIHRoaXMuZmlyZVZhbGlkYXRlZEVycm9yc09uUGFnZSg8UGFnZU1vZGVsPnF1ZXN0aW9uLnBhZ2UpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgY2hlY2tFcnJvcnNPblZhbHVlQ2hhbmdpbmcoXG4gICAgdmFsdWVOYW1lOiBzdHJpbmcsXG4gICAgbmV3VmFsdWU6IGFueVxuICApOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuIGZhbHNlO1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldFF1ZXN0aW9uc0J5VmFsdWVOYW1lKHZhbHVlTmFtZSk7XG4gICAgaWYgKCFxdWVzdGlvbnMpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgcmVzID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHEgPSBxdWVzdGlvbnNbaV07XG4gICAgICBpZiAoIXRoaXMuaXNUd29WYWx1ZUVxdWFscyhxLnZhbHVlRm9yU3VydmV5LCBuZXdWYWx1ZSkpIHtcbiAgICAgICAgcS52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY2hlY2tRdWVzdGlvbkVycm9yT25WYWx1ZUNoYW5nZWRDb3JlKHEpKSByZXMgPSB0cnVlO1xuICAgICAgcmVzID0gcmVzIHx8IHEuZXJyb3JzLmxlbmd0aCA+IDA7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgcHJvdGVjdGVkIG5vdGlmeVF1ZXN0aW9uT25WYWx1ZUNoYW5nZWQodmFsdWVOYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuO1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldFF1ZXN0aW9uc0J5VmFsdWVOYW1lKHZhbHVlTmFtZSk7XG4gICAgaWYgKCEhcXVlc3Rpb25zKSB7XG4gICAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBxdWVzdGlvbiA9IHF1ZXN0aW9uc1tpXTtcbiAgICAgICAgdGhpcy5jaGVja1F1ZXN0aW9uRXJyb3JPblZhbHVlQ2hhbmdlZChxdWVzdGlvbik7XG4gICAgICAgIHF1ZXN0aW9uLm9uU3VydmV5VmFsdWVDaGFuZ2VkKG5ld1ZhbHVlKTtcbiAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlZC5maXJlKHRoaXMsIHtcbiAgICAgICAgICBuYW1lOiB2YWx1ZU5hbWUsXG4gICAgICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgICAgIHZhbHVlOiBuZXdWYWx1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub25WYWx1ZUNoYW5nZWQuZmlyZSh0aGlzLCB7XG4gICAgICAgIG5hbWU6IHZhbHVlTmFtZSxcbiAgICAgICAgcXVlc3Rpb246IG51bGwsXG4gICAgICAgIHZhbHVlOiBuZXdWYWx1ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc0Rpc3Bvc2VkKSByZXR1cm47XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhZ2VzW2ldLmNoZWNrQmluZGluZ3ModmFsdWVOYW1lLCBuZXdWYWx1ZSk7XG4gICAgfVxuICAgIHRoaXMubm90aWZ5RWxlbWVudHNPbkFueVZhbHVlT3JWYXJpYWJsZUNoYW5nZWQodmFsdWVOYW1lKTtcbiAgfVxuICBwcml2YXRlIG5vdGlmeUVsZW1lbnRzT25BbnlWYWx1ZU9yVmFyaWFibGVDaGFuZ2VkKG5hbWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmlzRW5kTG9hZGluZ0Zyb21Kc29uID09PSBcInByb2Nlc3NpbmdcIikgcmV0dXJuO1xuICAgIGlmICh0aGlzLmlzUnVubmluZ0NvbmRpdGlvbnMpIHtcbiAgICAgIHRoaXMuY29uZGl0aW9uTm90aWZ5RWxlbWVudHNPbkFueVZhbHVlT3JWYXJpYWJsZUNoYW5nZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMucGFnZXNbaV0ub25BbnlWYWx1ZUNoYW5nZWQobmFtZSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc0VuZExvYWRpbmdGcm9tSnNvbikge1xuICAgICAgdGhpcy5sb2NTdHJzQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHVwZGF0ZUFsbFF1ZXN0aW9uc1ZhbHVlKCkge1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldEFsbFF1ZXN0aW9ucygpO1xuICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxID0gPFF1ZXN0aW9uPnF1ZXN0aW9uc1tpXTtcbiAgICAgIHZhciB2YWxOYW1lID0gcS5nZXRWYWx1ZU5hbWUoKTtcbiAgICAgIHEudXBkYXRlVmFsdWVGcm9tU3VydmV5KHRoaXMuZ2V0VmFsdWUodmFsTmFtZSkpO1xuICAgICAgaWYgKHEucmVxdWlyZVVwZGF0ZUNvbW1lbnRWYWx1ZSkge1xuICAgICAgICBxLnVwZGF0ZUNvbW1lbnRGcm9tU3VydmV5KHRoaXMuZ2V0Q29tbWVudCh2YWxOYW1lKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgbm90aWZ5QWxsUXVlc3Rpb25zT25WYWx1ZUNoYW5nZWQoKSB7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0QWxsUXVlc3Rpb25zKCk7XG4gICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgcXVlc3Rpb25zW2ldLm9uU3VydmV5VmFsdWVDaGFuZ2VkKFxuICAgICAgICB0aGlzLmdldFZhbHVlKHF1ZXN0aW9uc1tpXS5nZXRWYWx1ZU5hbWUoKSlcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgY2hlY2tPblBhZ2VUcmlnZ2VycygpIHtcbiAgICB2YXIgcXVlc3Rpb25zID0gdGhpcy5nZXRDdXJyZW50UGFnZVF1ZXN0aW9ucyh0cnVlKTtcbiAgICB2YXIgdmFsdWVzOiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHF1ZXN0aW9uID0gcXVlc3Rpb25zW2ldO1xuICAgICAgdmFyIG5hbWUgPSBxdWVzdGlvbi5nZXRWYWx1ZU5hbWUoKTtcbiAgICAgIHZhbHVlc1tuYW1lXSA9IHRoaXMuZ2V0VmFsdWUobmFtZSk7XG4gICAgfVxuICAgIHRoaXMuYWRkQ2FsY3VsYXRlZFZhbHVlc0ludG9GaWx0ZXJlZFZhbHVlcyh2YWx1ZXMpO1xuICAgIHRoaXMuY2hlY2tUcmlnZ2Vycyh2YWx1ZXMsIHRydWUpO1xuICB9XG4gIHByaXZhdGUgZ2V0Q3VycmVudFBhZ2VRdWVzdGlvbnMoXG4gICAgaW5jbHVkZUludnNpYmxlOiBib29sZWFuID0gZmFsc2VcbiAgKTogQXJyYXk8UXVlc3Rpb24+IHtcbiAgICB2YXIgcmVzdWx0OiBBcnJheTxRdWVzdGlvbj4gPSBbXTtcbiAgICB2YXIgcGFnZSA9IHRoaXMuY3VycmVudFBhZ2U7XG4gICAgaWYgKCFwYWdlKSByZXR1cm4gcmVzdWx0O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFnZS5xdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBxdWVzdGlvbiA9IHBhZ2UucXVlc3Rpb25zW2ldO1xuICAgICAgaWYgKCghaW5jbHVkZUludnNpYmxlICYmICFxdWVzdGlvbi52aXNpYmxlKSB8fCAhcXVlc3Rpb24ubmFtZSkgY29udGludWU7XG4gICAgICByZXN1bHQucHVzaChxdWVzdGlvbik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcHJpdmF0ZSBpc1RyaWdnZXJJc1J1bm5pbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSB0cmlnZ2VyVmFsdWVzOiBhbnkgPSBudWxsO1xuICBwcml2YXRlIHRyaWdnZXJLZXlzOiBhbnkgPSBudWxsO1xuICBwcml2YXRlIGNoZWNrVHJpZ2dlcnMoa2V5OiBhbnksIGlzT25OZXh0UGFnZTogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLmlzQ29tcGxldGVkIHx8IHRoaXMudHJpZ2dlcnMubGVuZ3RoID09IDAgfHwgdGhpcy5pc0Rpc3BsYXlNb2RlKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaXNUcmlnZ2VySXNSdW5uaW5nKSB7XG4gICAgICB0aGlzLnRyaWdnZXJWYWx1ZXMgPSB0aGlzLmdldEZpbHRlcmVkVmFsdWVzKCk7XG4gICAgICBmb3IgKHZhciBrIGluIGtleSkge1xuICAgICAgICB0aGlzLnRyaWdnZXJLZXlzW2tdID0ga2V5W2tdO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmlzVHJpZ2dlcklzUnVubmluZyA9IHRydWU7XG4gICAgdGhpcy50cmlnZ2VyS2V5cyA9IGtleTtcbiAgICB0aGlzLnRyaWdnZXJWYWx1ZXMgPSB0aGlzLmdldEZpbHRlcmVkVmFsdWVzKCk7XG4gICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLmdldEZpbHRlcmVkUHJvcGVydGllcygpO1xuICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCB0aGlzLnRyaWdnZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdHJpZ2dlciA9IHRoaXMudHJpZ2dlcnNbaV07XG4gICAgICBpZiAodHJpZ2dlci5pc09uTmV4dFBhZ2UgPT0gaXNPbk5leHRQYWdlKSB7XG4gICAgICAgIHRyaWdnZXIuY2hlY2tFeHByZXNzaW9uKFxuICAgICAgICAgIHRoaXMudHJpZ2dlcktleXMsXG4gICAgICAgICAgdGhpcy50cmlnZ2VyVmFsdWVzLFxuICAgICAgICAgIHByb3BlcnRpZXNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5pc1RyaWdnZXJJc1J1bm5pbmcgPSBmYWxzZTtcbiAgfVxuICBwcml2YXRlIGRvRWxlbWVudHNPbkxvYWQoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhZ2VzW2ldLm9uU3VydmV5TG9hZCgpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGNvbmRpdGlvblZhbHVlczogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSBnZXQgaXNSdW5uaW5nQ29uZGl0aW9ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmNvbmRpdGlvblZhbHVlcztcbiAgfVxuICBwcml2YXRlIGlzVmFsdWVDaGFuZ2VkT25SdW5uaW5nQ29uZGl0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgY29uZGl0aW9uUnVubmVyQ291bnRlcjogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBjb25kaXRpb25VcGRhdGVWaXNpYmxlSW5kZXhlczogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGNvbmRpdGlvbk5vdGlmeUVsZW1lbnRzT25BbnlWYWx1ZU9yVmFyaWFibGVDaGFuZ2VkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgcnVuQ29uZGl0aW9ucygpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzQ29tcGxldGVkIHx8XG4gICAgICB0aGlzLmlzRW5kTG9hZGluZ0Zyb21Kc29uID09PSBcInByb2Nlc3NpbmdcIiB8fFxuICAgICAgdGhpcy5pc1J1bm5pbmdDb25kaXRpb25zXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuY29uZGl0aW9uVmFsdWVzID0gdGhpcy5nZXRGaWx0ZXJlZFZhbHVlcygpO1xuICAgIHZhciBwcm9wZXJ0aWVzID0gdGhpcy5nZXRGaWx0ZXJlZFByb3BlcnRpZXMoKTtcbiAgICB2YXIgb2xkQ3VycmVudFBhZ2VJbmRleCA9IHRoaXMucGFnZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRQYWdlVmFsdWUpO1xuICAgIHRoaXMucnVuQ29uZGl0aW9uc0NvcmUocHJvcGVydGllcyk7XG4gICAgdGhpcy5jaGVja0lmTmV3UGFnZXNCZWNvbWVWaXNpYmxlKG9sZEN1cnJlbnRQYWdlSW5kZXgpO1xuICAgIHRoaXMuY29uZGl0aW9uVmFsdWVzID0gbnVsbDtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlzVmFsdWVDaGFuZ2VkT25SdW5uaW5nQ29uZGl0aW9uICYmXG4gICAgICB0aGlzLmNvbmRpdGlvblJ1bm5lckNvdW50ZXIgPFxuICAgICAgc2V0dGluZ3MubWF4aW11bUNvbmRpdGlvblJ1bkNvdW50T25WYWx1ZUNoYW5nZWRcbiAgICApIHtcbiAgICAgIHRoaXMuaXNWYWx1ZUNoYW5nZWRPblJ1bm5pbmdDb25kaXRpb24gPSBmYWxzZTtcbiAgICAgIHRoaXMuY29uZGl0aW9uUnVubmVyQ291bnRlcisrO1xuICAgICAgdGhpcy5ydW5Db25kaXRpb25zKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNWYWx1ZUNoYW5nZWRPblJ1bm5pbmdDb25kaXRpb24gPSBmYWxzZTtcbiAgICAgIHRoaXMuY29uZGl0aW9uUnVubmVyQ291bnRlciA9IDA7XG4gICAgICBpZiAodGhpcy5jb25kaXRpb25VcGRhdGVWaXNpYmxlSW5kZXhlcykge1xuICAgICAgICB0aGlzLmNvbmRpdGlvblVwZGF0ZVZpc2libGVJbmRleGVzID0gZmFsc2U7XG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbmRpdGlvbk5vdGlmeUVsZW1lbnRzT25BbnlWYWx1ZU9yVmFyaWFibGVDaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMuY29uZGl0aW9uTm90aWZ5RWxlbWVudHNPbkFueVZhbHVlT3JWYXJpYWJsZUNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ub3RpZnlFbGVtZW50c09uQW55VmFsdWVPclZhcmlhYmxlQ2hhbmdlZChcIlwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBydW5Db25kaXRpb25PblZhbHVlQ2hhbmdlZChuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodGhpcy5pc1J1bm5pbmdDb25kaXRpb25zKSB7XG4gICAgICB0aGlzLmNvbmRpdGlvblZhbHVlc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgdGhpcy5pc1ZhbHVlQ2hhbmdlZE9uUnVubmluZ0NvbmRpdGlvbiA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucnVuQ29uZGl0aW9ucygpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHJ1bkNvbmRpdGlvbnNDb3JlKHByb3BlcnRpZXM6IGFueSkge1xuICAgIHZhciBwYWdlcyA9IHRoaXMucGFnZXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNhbGN1bGF0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuY2FsY3VsYXRlZFZhbHVlc1tpXS5yZXNldENhbGN1bGF0aW9uKCk7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jYWxjdWxhdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmNhbGN1bGF0ZWRWYWx1ZXNbaV0uZG9DYWxjdWxhdGlvbihcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVkVmFsdWVzLFxuICAgICAgICB0aGlzLmNvbmRpdGlvblZhbHVlcyxcbiAgICAgICAgcHJvcGVydGllc1xuICAgICAgKTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgcGFnZXNbaV0ucnVuQ29uZGl0aW9uKHRoaXMuY29uZGl0aW9uVmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBjaGVja0lmTmV3UGFnZXNCZWNvbWVWaXNpYmxlKG9sZEN1cnJlbnRQYWdlSW5kZXg6IG51bWJlcikge1xuICAgIHZhciBuZXdDdXJyZW50UGFnZUluZGV4ID0gdGhpcy5wYWdlcy5pbmRleE9mKHRoaXMuY3VycmVudFBhZ2VWYWx1ZSk7XG4gICAgaWYgKG5ld0N1cnJlbnRQYWdlSW5kZXggPD0gb2xkQ3VycmVudFBhZ2VJbmRleCArIDEpIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gb2xkQ3VycmVudFBhZ2VJbmRleCArIDE7IGkgPCBuZXdDdXJyZW50UGFnZUluZGV4OyBpKyspIHtcbiAgICAgIGlmICh0aGlzLnBhZ2VzW2ldLmlzVmlzaWJsZSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlc1tpXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBTZW5kcyBhIHN1cnZleSByZXN1bHQgdG8gdGhlIFthcGkuc3VydmV5anMuaW9dKGh0dHBzOi8vYXBpLnN1cnZleWpzLmlvKSBzZXJ2aWNlLlxuICAgKiBAcGFyYW0gcG9zdElkIFthcGkuc3VydmV5anMuaW9dKGh0dHBzOi8vYXBpLnN1cnZleWpzLmlvKSBzZXJ2aWNlIHBvc3RJZFxuICAgKiBAcGFyYW0gY2xpZW50SWQgVHlwaWNhbGx5IGEgY3VzdG9tZXIgZS1tYWlsIG9yIGFuIGlkZW50aWZpZXJcbiAgICogQHBhcmFtIGlzUGFydGlhbENvbXBsZXRlZCBTZXQgaXQgdG8gYHRydWVgIGlmIHRoZSBzdXJ2ZXkgaXMgbm90IGNvbXBsZXRlZCB5ZXQgYW5kIHRoZSByZXN1bHRzIGFyZSBpbnRlcm1lZGlhdGVcbiAgICogQHNlZSBzdXJ2ZXlQb3N0SWRcbiAgICogQHNlZSBjbGllbnRJZFxuICAgKi9cbiAgcHVibGljIHNlbmRSZXN1bHQoXG4gICAgcG9zdElkOiBzdHJpbmcgPSBudWxsLFxuICAgIGNsaWVudElkOiBzdHJpbmcgPSBudWxsLFxuICAgIGlzUGFydGlhbENvbXBsZXRlZDogYm9vbGVhbiA9IGZhbHNlXG4gICkge1xuICAgIGlmICghdGhpcy5pc0VkaXRNb2RlKSByZXR1cm47XG4gICAgaWYgKGlzUGFydGlhbENvbXBsZXRlZCAmJiB0aGlzLm9uUGFydGlhbFNlbmQpIHtcbiAgICAgIHRoaXMub25QYXJ0aWFsU2VuZC5maXJlKHRoaXMsIG51bGwpO1xuICAgIH1cblxuICAgIGlmICghcG9zdElkICYmIHRoaXMuc3VydmV5UG9zdElkKSB7XG4gICAgICBwb3N0SWQgPSB0aGlzLnN1cnZleVBvc3RJZDtcbiAgICB9XG4gICAgaWYgKCFwb3N0SWQpIHJldHVybjtcbiAgICBpZiAoY2xpZW50SWQpIHtcbiAgICAgIHRoaXMuY2xpZW50SWQgPSBjbGllbnRJZDtcbiAgICB9XG4gICAgaWYgKGlzUGFydGlhbENvbXBsZXRlZCAmJiAhdGhpcy5jbGllbnRJZCkgcmV0dXJuO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBpZiAodGhpcy5zdXJ2ZXlTaG93RGF0YVNhdmluZykge1xuICAgICAgdGhpcy5zZXRDb21wbGV0ZWRTdGF0ZShcInNhdmluZ1wiLCBcIlwiKTtcbiAgICB9XG4gICAgdGhpcy5jcmVhdGVTdXJ2ZXlTZXJ2aWNlKCkuc2VuZFJlc3VsdChcbiAgICAgIHBvc3RJZCxcbiAgICAgIHRoaXMuZGF0YSxcbiAgICAgIGZ1bmN0aW9uIChzdWNjZXNzOiBib29sZWFuLCByZXNwb25zZTogYW55LCByZXF1ZXN0OiBhbnkpIHtcbiAgICAgICAgaWYgKHNlbGYuc3VydmV5U2hvd0RhdGFTYXZpbmcpIHtcbiAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgc2VsZi5zZXRDb21wbGV0ZWRTdGF0ZShcInN1Y2Nlc3NcIiwgXCJcIik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlbGYuc2V0Q29tcGxldGVkU3RhdGUoXCJlcnJvclwiLCByZXNwb25zZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNlbGYub25TZW5kUmVzdWx0LmZpcmUoc2VsZiwge1xuICAgICAgICAgIHN1Y2Nlc3M6IHN1Y2Nlc3MsXG4gICAgICAgICAgcmVzcG9uc2U6IHJlc3BvbnNlLFxuICAgICAgICAgIHJlcXVlc3Q6IHJlcXVlc3QsXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIHRoaXMuY2xpZW50SWQsXG4gICAgICBpc1BhcnRpYWxDb21wbGV0ZWRcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBDYWxscyB0aGUgW2FwaS5zdXJ2ZXlqcy5pb10oaHR0cHM6Ly9hcGkuc3VydmV5anMuaW8pIHNlcnZpY2UgYW5kLCBvbiBjYWxsYmFjaywgZmlyZXMgdGhlIGBvbkdldFJlc3VsdGAgZXZlbnQgd2l0aCBhbGwgYW5zd2VycyB0aGF0IHlvdXIgdXNlcnMgbWFkZSBmb3IgYSBxdWVzdGlvbi5cbiAgICogQHBhcmFtIHJlc3VsdElkIFthcGkuc3VydmV5anMuaW9dKGh0dHBzOi8vYXBpLnN1cnZleWpzLmlvKSBzZXJ2aWNlIHJlc3VsdElkXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBxdWVzdGlvbiBuYW1lXG4gICAqIEBzZWUgb25HZXRSZXN1bHRcbiAgICovXG4gIHB1YmxpYyBnZXRSZXN1bHQocmVzdWx0SWQ6IHN0cmluZywgbmFtZTogc3RyaW5nKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuY3JlYXRlU3VydmV5U2VydmljZSgpLmdldFJlc3VsdChyZXN1bHRJZCwgbmFtZSwgZnVuY3Rpb24gKFxuICAgICAgc3VjY2VzczogYm9vbGVhbixcbiAgICAgIGRhdGE6IGFueSxcbiAgICAgIGRhdGFMaXN0OiBhbnlbXSxcbiAgICAgIHJlc3BvbnNlOiBhbnlcbiAgICApIHtcbiAgICAgIHNlbGYub25HZXRSZXN1bHQuZmlyZShzZWxmLCB7XG4gICAgICAgIHN1Y2Nlc3M6IHN1Y2Nlc3MsXG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGRhdGFMaXN0OiBkYXRhTGlzdCxcbiAgICAgICAgcmVzcG9uc2U6IHJlc3BvbnNlLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBzdXJ2ZXkgSlNPTiBmcm9tIHRoZSBbYXBpLnN1cnZleWpzLmlvXShodHRwczovL2FwaS5zdXJ2ZXlqcy5pbykgc2VydmljZS5cbiAgICogSWYgYGNsaWVudElkYCBpcyBub3QgYG51bGxgIGFuZCBhIHVzZXIgaGFkIGNvbXBsZXRlZCBhIHN1cnZleSBiZWZvcmUsIHRoZSBzdXJ2ZXkgc3dpdGNoZXMgdG8gYGNvbXBsZXRlZGJlZm9yZWAgc3RhdGUuXG4gICAqIEBwYXJhbSBzdXJ2ZXlJZCBbYXBpLnN1cnZleWpzLmlvXShodHRwczovL2FwaS5zdXJ2ZXlqcy5pbykgc2VydmljZSBzdXJ2ZXlJZFxuICAgKiBAcGFyYW0gY2xpZW50SWQgdXNlcnMnIGluZGVudGlmaWVyLCBmb3IgZXhhbXBsZSBhbiBlLW1haWwgb3IgYSB1bmlxdWUgY3VzdG9tZXIgaWQgaW4geW91ciB3ZWIgYXBwbGljYXRpb24uXG4gICAqIEBzZWUgc3RhdGVcbiAgICogQHNlZSBvbkxvYWRlZFN1cnZleUZyb21TZXJ2aWNlXG4gICAqL1xuICBwdWJsaWMgbG9hZFN1cnZleUZyb21TZXJ2aWNlKFxuICAgIHN1cnZleUlkOiBzdHJpbmcgPSBudWxsLFxuICAgIGNsaWVuZElkOiBzdHJpbmcgPSBudWxsXG4gICkge1xuICAgIGlmIChzdXJ2ZXlJZCkge1xuICAgICAgdGhpcy5zdXJ2ZXlJZCA9IHN1cnZleUlkO1xuICAgIH1cbiAgICBpZiAoY2xpZW5kSWQpIHtcbiAgICAgIHRoaXMuY2xpZW50SWQgPSBjbGllbmRJZDtcbiAgICB9XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLm9uTG9hZGluZ1N1cnZleUZyb21TZXJ2aWNlKCk7XG4gICAgaWYgKGNsaWVuZElkKSB7XG4gICAgICB0aGlzLmNyZWF0ZVN1cnZleVNlcnZpY2UoKS5nZXRTdXJ2ZXlKc29uQW5kSXNDb21wbGV0ZWQoXG4gICAgICAgIHRoaXMuc3VydmV5SWQsXG4gICAgICAgIHRoaXMuY2xpZW50SWQsXG4gICAgICAgIGZ1bmN0aW9uIChcbiAgICAgICAgICBzdWNjZXNzOiBib29sZWFuLFxuICAgICAgICAgIGpzb246IHN0cmluZyxcbiAgICAgICAgICBpc0NvbXBsZXRlZDogc3RyaW5nLFxuICAgICAgICAgIHJlc3BvbnNlOiBhbnlcbiAgICAgICAgKSB7XG4gICAgICAgICAgc2VsZi5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgc2VsZi5pc0NvbXBsZXRlZEJlZm9yZSA9IGlzQ29tcGxldGVkID09IFwiY29tcGxldGVkXCI7XG4gICAgICAgICAgICBzZWxmLmxvYWRTdXJ2ZXlGcm9tU2VydmljZUpzb24oanNvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNyZWF0ZVN1cnZleVNlcnZpY2UoKS5sb2FkU3VydmV5KHRoaXMuc3VydmV5SWQsIGZ1bmN0aW9uIChcbiAgICAgICAgc3VjY2VzczogYm9vbGVhbixcbiAgICAgICAgcmVzdWx0OiBzdHJpbmcsXG4gICAgICAgIHJlc3BvbnNlOiBhbnlcbiAgICAgICkge1xuICAgICAgICBzZWxmLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIHNlbGYubG9hZFN1cnZleUZyb21TZXJ2aWNlSnNvbihyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBsb2FkU3VydmV5RnJvbVNlcnZpY2VKc29uKGpzb246IGFueSkge1xuICAgIGlmICghanNvbikgcmV0dXJuO1xuICAgIHRoaXMuZnJvbUpTT04oanNvbik7XG4gICAgdGhpcy5ub3RpZnlBbGxRdWVzdGlvbnNPblZhbHVlQ2hhbmdlZCgpO1xuICAgIHRoaXMub25Mb2FkU3VydmV5RnJvbVNlcnZpY2UoKTtcbiAgICB0aGlzLm9uTG9hZGVkU3VydmV5RnJvbVNlcnZpY2UuZmlyZSh0aGlzLCB7fSk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uTG9hZGluZ1N1cnZleUZyb21TZXJ2aWNlKCkgeyB9XG4gIHByb3RlY3RlZCBvbkxvYWRTdXJ2ZXlGcm9tU2VydmljZSgpIHsgfVxuICBwcml2YXRlIHJlc2V0VmlzaWJsZUluZGV4ZXMoKSB7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0QWxsUXVlc3Rpb25zKHRydWUpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBxdWVzdGlvbnNbaV0uc2V0VmlzaWJsZUluZGV4KC0xKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xuICB9XG4gIHByaXZhdGUgdXBkYXRlVmlzaWJsZUluZGV4ZXMoKSB7XG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nRnJvbUpzb24gfHwgISF0aGlzLmlzRW5kTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgaWYgKFxuICAgICAgdGhpcy5pc1J1bm5pbmdDb25kaXRpb25zICYmXG4gICAgICB0aGlzLm9uVmlzaWJsZUNoYW5nZWQuaXNFbXB0eSAmJlxuICAgICAgdGhpcy5vblBhZ2VWaXNpYmxlQ2hhbmdlZC5pc0VtcHR5XG4gICAgKSB7XG4gICAgICAvL1J1biB1cGRhdGUgdmlzaWJsZSBpbmRleCBvbmx5IG9uZSB0aW1lIG9uIGZpbmlzaGluZyBydW5uaW5nIGNvbmRpdGlvbnNcbiAgICAgIHRoaXMuY29uZGl0aW9uVXBkYXRlVmlzaWJsZUluZGV4ZXMgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVBhZ2VWaXNpYmxlSW5kZXhlcyh0aGlzLnNob3dQYWdlTnVtYmVycyk7XG4gICAgaWYgKHRoaXMuc2hvd1F1ZXN0aW9uTnVtYmVycyA9PSBcIm9uUGFnZVwiKSB7XG4gICAgICB2YXIgdmlzUGFnZXMgPSB0aGlzLnZpc2libGVQYWdlcztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlzUGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmlzUGFnZXNbaV0uc2V0VmlzaWJsZUluZGV4KDApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgaW5kZXggPSB0aGlzLnNob3dRdWVzdGlvbk51bWJlcnMgPT0gXCJvblwiID8gMCA6IC0xO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGluZGV4ICs9IHRoaXMucGFnZXNbaV0uc2V0VmlzaWJsZUluZGV4KGluZGV4KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy51cGRhdGVQcm9ncmVzc1RleHQodHJ1ZSk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVQYWdlVmlzaWJsZUluZGV4ZXMoc2hvd0luZGV4OiBib29sZWFuKSB7XG4gICAgdGhpcy51cGRhdGVJc0ZpcnN0TGFzdFBhZ2VTdGF0ZSgpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXNQYWdlVmlzaWJsZSA9IHRoaXMucGFnZXNbaV0uaXNWaXNpYmxlO1xuICAgICAgdGhpcy5wYWdlc1tpXS52aXNpYmxlSW5kZXggPSBpc1BhZ2VWaXNpYmxlID8gaW5kZXgrKyA6IC0xO1xuICAgICAgdGhpcy5wYWdlc1tpXS5udW0gPVxuICAgICAgICBzaG93SW5kZXggJiYgaXNQYWdlVmlzaWJsZSA/IHRoaXMucGFnZXNbaV0udmlzaWJsZUluZGV4ICsgMSA6IC0xO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZnJvbUpTT04oanNvbjogYW55KSB7XG4gICAgaWYgKCFqc29uKSByZXR1cm47XG4gICAgdGhpcy5xdWVzdGlvbkhhc2hlc0NsZWFyKCk7XG4gICAgdGhpcy5qc29uRXJyb3JzID0gbnVsbDtcbiAgICB2YXIganNvbkNvbnZlcnRlciA9IG5ldyBKc29uT2JqZWN0KCk7XG4gICAganNvbkNvbnZlcnRlci50b09iamVjdChqc29uLCB0aGlzKTtcbiAgICBpZiAoanNvbkNvbnZlcnRlci5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5qc29uRXJyb3JzID0ganNvbkNvbnZlcnRlci5lcnJvcnM7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBzZXRKc29uT2JqZWN0KGpzb25PYmo6IGFueSkge1xuICAgIHRoaXMuZnJvbUpTT04oanNvbk9iaik7XG4gIH1cbiAgcHJpdmF0ZSBpc0VuZExvYWRpbmdGcm9tSnNvbjogc3RyaW5nID0gbnVsbDtcbiAgZW5kTG9hZGluZ0Zyb21Kc29uKCkge1xuICAgIHRoaXMuaXNFbmRMb2FkaW5nRnJvbUpzb24gPSBcInByb2Nlc3NpbmdcIjtcbiAgICB0aGlzLmlzU3RhcnRlZFN0YXRlID0gdGhpcy5maXJzdFBhZ2VJc1N0YXJ0ZWQ7XG4gICAgdGhpcy5vblF1ZXN0aW9uc09uUGFnZU1vZGVDaGFuZ2VkKFwic3RhbmRhcmRcIik7XG4gICAgc3VwZXIuZW5kTG9hZGluZ0Zyb21Kc29uKCk7XG4gICAgaWYgKHRoaXMuaGFzQ29va2llKSB7XG4gICAgICB0aGlzLmRvQ29tcGxldGUoKTtcbiAgICB9XG4gICAgdGhpcy5kb0VsZW1lbnRzT25Mb2FkKCk7XG4gICAgdGhpcy5pc0VuZExvYWRpbmdGcm9tSnNvbiA9IFwiY29uZGl0aW9uc1wiO1xuICAgIHRoaXMucnVuQ29uZGl0aW9ucygpO1xuICAgIHRoaXMubm90aWZ5RWxlbWVudHNPbkFueVZhbHVlT3JWYXJpYWJsZUNoYW5nZWQoXCJcIik7XG4gICAgdGhpcy5pc0VuZExvYWRpbmdGcm9tSnNvbiA9IG51bGw7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xuICB9XG4gIHByb3RlY3RlZCBvbkJlZm9yZUNyZWF0aW5nKCkgeyB9XG4gIHByb3RlY3RlZCBvbkNyZWF0aW5nKCkgeyB9XG4gIHByaXZhdGUgZ2V0UHJvY2Vzc2VkVGV4dFZhbHVlKHRleHRWYWx1ZTogVGV4dFByZVByb2Nlc3NvclZhbHVlKTogdm9pZCB7XG4gICAgdGhpcy5nZXRQcm9jZXNzZWRUZXh0VmFsdWVDb3JlKHRleHRWYWx1ZSk7XG4gICAgaWYgKCF0aGlzLm9uUHJvY2Vzc1RleHRWYWx1ZS5pc0VtcHR5KSB7XG4gICAgICB2YXIgd2FzRW1wdHkgPSB0aGlzLmlzVmFsdWVFbXB0eSh0ZXh0VmFsdWUudmFsdWUpO1xuICAgICAgdGhpcy5vblByb2Nlc3NUZXh0VmFsdWUuZmlyZSh0aGlzLCB0ZXh0VmFsdWUpO1xuICAgICAgdGV4dFZhbHVlLmlzRXhpc3RzID1cbiAgICAgICAgdGV4dFZhbHVlLmlzRXhpc3RzIHx8ICh3YXNFbXB0eSAmJiAhdGhpcy5pc1ZhbHVlRW1wdHkodGV4dFZhbHVlLnZhbHVlKSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0UHJvY2Vzc2VkVGV4dFZhbHVlQ29yZSh0ZXh0VmFsdWU6IFRleHRQcmVQcm9jZXNzb3JWYWx1ZSk6IHZvaWQge1xuICAgIHZhciBuYW1lID0gdGV4dFZhbHVlLm5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICBpZiAoW1wibm9cIiwgXCJyZXF1aXJlXCIsIFwidGl0bGVcIl0uaW5kZXhPZihuYW1lKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG5hbWUgPT09IFwicGFnZW5vXCIpIHtcbiAgICAgIHRleHRWYWx1ZS5pc0V4aXN0cyA9IHRydWU7XG4gICAgICB2YXIgcGFnZSA9IHRoaXMuY3VycmVudFBhZ2U7XG4gICAgICB0ZXh0VmFsdWUudmFsdWUgPSBwYWdlICE9IG51bGwgPyB0aGlzLnZpc2libGVQYWdlcy5pbmRleE9mKHBhZ2UpICsgMSA6IDA7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChuYW1lID09PSBcInBhZ2Vjb3VudFwiKSB7XG4gICAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgPSB0cnVlO1xuICAgICAgdGV4dFZhbHVlLnZhbHVlID0gdGhpcy52aXNpYmxlUGFnZUNvdW50O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobmFtZSA9PT0gXCJsb2NhbGVcIikge1xuICAgICAgdGV4dFZhbHVlLmlzRXhpc3RzID0gdHJ1ZTtcbiAgICAgIHRleHRWYWx1ZS52YWx1ZSA9ICEhdGhpcy5sb2NhbGVcbiAgICAgICAgPyB0aGlzLmxvY2FsZVxuICAgICAgICA6IHN1cnZleUxvY2FsaXphdGlvbi5kZWZhdWx0TG9jYWxlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobmFtZSA9PT0gXCJjb3JyZWN0ZWRhbnN3ZXJzXCIgfHwgbmFtZSA9PT0gXCJjb3JyZWN0ZWRhbnN3ZXJjb3VudFwiKSB7XG4gICAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgPSB0cnVlO1xuICAgICAgdGV4dFZhbHVlLnZhbHVlID0gdGhpcy5nZXRDb3JyZWN0ZWRBbnN3ZXJDb3VudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobmFtZSA9PT0gXCJpbmNvcnJlY3RlZGFuc3dlcnNcIiB8fCBuYW1lID09PSBcImluY29ycmVjdGVkYW5zd2VyY291bnRcIikge1xuICAgICAgdGV4dFZhbHVlLmlzRXhpc3RzID0gdHJ1ZTtcbiAgICAgIHRleHRWYWx1ZS52YWx1ZSA9IHRoaXMuZ2V0SW5Db3JyZWN0ZWRBbnN3ZXJDb3VudCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobmFtZSA9PT0gXCJxdWVzdGlvbmNvdW50XCIpIHtcbiAgICAgIHRleHRWYWx1ZS5pc0V4aXN0cyA9IHRydWU7XG4gICAgICB0ZXh0VmFsdWUudmFsdWUgPSB0aGlzLmdldFF1aXpRdWVzdGlvbkNvdW50KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB2YXJpYWJsZSA9IHRoaXMuZ2V0VmFyaWFibGUobmFtZSk7XG4gICAgaWYgKHZhcmlhYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRleHRWYWx1ZS5pc0V4aXN0cyA9IHRydWU7XG4gICAgICB0ZXh0VmFsdWUudmFsdWUgPSB2YXJpYWJsZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRGaXJzdE5hbWUobmFtZSk7XG4gICAgaWYgKHF1ZXN0aW9uKSB7XG4gICAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgPSB0cnVlO1xuICAgICAgdmFyIGZpcnN0TmFtZSA9IHF1ZXN0aW9uLmdldFZhbHVlTmFtZSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBuYW1lID0gZmlyc3ROYW1lICsgbmFtZS5zdWJzdHIoZmlyc3ROYW1lLmxlbmd0aCk7XG4gICAgICBuYW1lID0gbmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgdmFyIHZhbHVlczogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgICB2YWx1ZXNbZmlyc3ROYW1lXSA9IHRleHRWYWx1ZS5yZXR1cm5EaXNwbGF5VmFsdWVcbiAgICAgICAgPyBxdWVzdGlvbi5nZXREaXNwbGF5VmFsdWUoZmFsc2UsIHVuZGVmaW5lZClcbiAgICAgICAgOiBxdWVzdGlvbi52YWx1ZTtcbiAgICAgIHRleHRWYWx1ZS52YWx1ZSA9IG5ldyBQcm9jZXNzVmFsdWUoKS5nZXRWYWx1ZShuYW1lLCB2YWx1ZXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdmFsdWUgPSB0aGlzLmdldFZhbHVlKHRleHRWYWx1ZS5uYW1lKTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGV4dFZhbHVlLmlzRXhpc3RzID0gdHJ1ZTtcbiAgICAgIHRleHRWYWx1ZS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldEZpcnN0TmFtZShuYW1lOiBzdHJpbmcpOiBJUXVlc3Rpb24ge1xuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIHF1ZXN0aW9uO1xuICAgIGRvIHtcbiAgICAgIHF1ZXN0aW9uID0gdGhpcy5nZXRRdWVzdGlvbkJ5VmFsdWVOYW1lKG5hbWUsIHRydWUpO1xuICAgICAgbmFtZSA9IHRoaXMucmVkdWNlRmlyc3ROYW1lKG5hbWUpO1xuICAgIH0gd2hpbGUgKCFxdWVzdGlvbiAmJiAhIW5hbWUpO1xuICAgIHJldHVybiBxdWVzdGlvbjtcbiAgfVxuICBwcml2YXRlIHJlZHVjZUZpcnN0TmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHZhciBwb3MxID0gbmFtZS5sYXN0SW5kZXhPZihcIi5cIik7XG4gICAgdmFyIHBvczIgPSBuYW1lLmxhc3RJbmRleE9mKFwiW1wiKTtcbiAgICBpZiAocG9zMSA8IDAgJiYgcG9zMiA8IDApIHJldHVybiBcIlwiO1xuICAgIHZhciBwb3MgPSBNYXRoLm1heChwb3MxLCBwb3MyKTtcbiAgICByZXR1cm4gbmFtZS5zdWJzdHIoMCwgcG9zKTtcbiAgfVxuICBwcml2YXRlIGNsZWFyVW51c2VkVmFsdWVzKCkge1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldEFsbFF1ZXN0aW9ucygpO1xuICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHF1ZXN0aW9uc1tpXS5jbGVhclVudXNlZFZhbHVlcygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jbGVhckludmlzaWJsZVZhbHVlcyAhPSBcIm5vbmVcIikge1xuICAgICAgdGhpcy5jbGVhckludmlzaWJsZVF1ZXN0aW9uVmFsdWVzKCk7XG4gICAgfVxuICB9XG4gIGhhc1Zpc2libGVRdWVzdGlvbkJ5VmFsdWVOYW1lKHZhbHVlTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0UXVlc3Rpb25zQnlWYWx1ZU5hbWUodmFsdWVOYW1lKTtcbiAgICBpZiAoIXF1ZXN0aW9ucykgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAodmFyIGk6IG51bWJlciA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChxdWVzdGlvbnNbaV0uaXNWaXNpYmxlKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHF1ZXN0aW9uQ291bnRCeVZhbHVlTmFtZSh2YWx1ZU5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0UXVlc3Rpb25zQnlWYWx1ZU5hbWUodmFsdWVOYW1lKTtcbiAgICByZXR1cm4gISFxdWVzdGlvbnMgPyBxdWVzdGlvbnMubGVuZ3RoIDogMDtcbiAgfVxuICBwcml2YXRlIGNsZWFySW52aXNpYmxlUXVlc3Rpb25WYWx1ZXMoKSB7XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0QWxsUXVlc3Rpb25zKCk7XG4gICAgZm9yICh2YXIgaTogbnVtYmVyID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgcXVlc3Rpb25zW2ldLmNsZWFyVmFsdWVJZkludmlzaWJsZSgpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHZhcmlhYmxlIHZhbHVlLiBWYXJpYWJsZSwgdW5saWtlIHZhbHVlcywgYXJlIG5vdCBzdG9yZWQgaW4gdGhlIHN1cnZleSByZXN1bHRzLlxuICAgKiBAcGFyYW0gbmFtZSBBIHZhcmlhYmxlIG5hbWVcbiAgICogQHNlZSBTZXRWYXJpYWJsZVxuICAgKi9cbiAgcHVibGljIGdldFZhcmlhYmxlKG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKCFuYW1lKSByZXR1cm4gbnVsbDtcbiAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhciByZXMgPSB0aGlzLnZhcmlhYmxlc0hhc2hbbmFtZV07XG4gICAgaWYgKCF0aGlzLmlzVmFsdWVFbXB0eShyZXMpKSByZXR1cm4gcmVzO1xuICAgIGlmIChuYW1lLmluZGV4T2YoXCIuXCIpID4gLTEgfHwgbmFtZS5pbmRleE9mKFwiW1wiKSA+IC0xKSB7XG4gICAgICBpZiAobmV3IFByb2Nlc3NWYWx1ZSgpLmhhc1ZhbHVlKG5hbWUsIHRoaXMudmFyaWFibGVzSGFzaCkpXG4gICAgICAgIHJldHVybiBuZXcgUHJvY2Vzc1ZhbHVlKCkuZ2V0VmFsdWUobmFtZSwgdGhpcy52YXJpYWJsZXNIYXNoKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICAvKipcbiAgICogU2V0cyBhIHZhcmlhYmxlIHZhbHVlLiBWYXJpYWJsZSwgdW5saWtlIHZhbHVlcywgYXJlIG5vdCBzdG9yZWQgaW4gdGhlIHN1cnZleSByZXN1bHRzLlxuICAgKiBAcGFyYW0gbmFtZSBBIHZhcmlhYmxlIG5hbWVcbiAgICogQHBhcmFtIG5ld1ZhbHVlIEEgdmFyaWFibGUgbmV3IHZhbHVlXG4gICAqIEBzZWUgR2V0VmFyaWFibGVcbiAgICovXG4gIHB1YmxpYyBzZXRWYXJpYWJsZShuYW1lOiBzdHJpbmcsIG5ld1ZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcbiAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMudmFyaWFibGVzSGFzaFtuYW1lXSA9IG5ld1ZhbHVlO1xuICAgIHRoaXMubm90aWZ5RWxlbWVudHNPbkFueVZhbHVlT3JWYXJpYWJsZUNoYW5nZWQobmFtZSk7XG4gICAgdGhpcy5ydW5Db25kaXRpb25PblZhbHVlQ2hhbmdlZChuYW1lLCBuZXdWYWx1ZSk7XG4gICAgdGhpcy5vblZhcmlhYmxlQ2hhbmdlZC5maXJlKHRoaXMsIHsgbmFtZTogbmFtZSwgdmFsdWU6IG5ld1ZhbHVlIH0pO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCB2YXJpYWJsZXMgaW4gdGhlIHN1cnZleS4gVXNlIHNldFZhcmlhYmxlIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyB2YXJpYWJsZS5cbiAgICogQHNlZSBnZXRWYXJpYWJsZVxuICAgKiBAc2VlIHNldFZhcmlhYmxlXG4gICAqL1xuICBwdWJsaWMgZ2V0VmFyaWFibGVOYW1lcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMudmFyaWFibGVzSGFzaCkge1xuICAgICAgcmVzLnB1c2goa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICAvL0lTdXJ2ZXkgZGF0YVxuICBwcm90ZWN0ZWQgZ2V0VW5iaW5kVmFsdWUodmFsdWU6IGFueSk6IGFueSB7XG4gICAgaWYgKCEhdGhpcy5lZGl0aW5nT2JqKSByZXR1cm4gdmFsdWU7XG4gICAgcmV0dXJuIEhlbHBlcnMuZ2V0VW5iaW5kVmFsdWUodmFsdWUpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcXVlc3Rpb24gdmFsdWUgKGFuc3dlcikgYnkgYSBxdWVzdGlvbidzIG5hbWUuXG4gICAqIEBwYXJhbSBuYW1lIEEgcXVlc3Rpb24gbmFtZVxuICAgKiBAc2VlIGRhdGFcbiAgICogQHNlZSBzZXRWYWx1ZVxuICAgKi9cbiAgcHVibGljIGdldFZhbHVlKG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKCFuYW1lIHx8IG5hbWUubGVuZ3RoID09IDApIHJldHVybiBudWxsO1xuICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0RGF0YVZhbHVlQ29yZSh0aGlzLnZhbHVlc0hhc2gsIG5hbWUpO1xuICAgIHJldHVybiB0aGlzLmdldFVuYmluZFZhbHVlKHZhbHVlKTtcbiAgfVxuICAvKipcbiAgICogU2V0cyBhIHF1ZXN0aW9uIHZhbHVlIChhbnN3ZXIpLiBJdCBydW5zIGFsbCB0cmlnZ2VycyBhbmQgY29uZGl0aW9ucyAoYHZpc2libGVJZmAgcHJvcGVydGllcykuXG4gICAqXG4gICAqIEdvZXMgdG8gdGhlIG5leHQgcGFnZSBpZiBgZ29OZXh0UGFnZUF1dG9tYXRpY2AgaXMgYHRydWVgIGFuZCBhbGwgcXVlc3Rpb25zIG9uIHRoZSBjdXJyZW50IHBhZ2UgYXJlIGFuc3dlcmVkIGNvcnJlY3RseS5cbiAgICogQHBhcmFtIG5hbWUgQSBxdWVzdGlvbiBuYW1lXG4gICAqIEBwYXJhbSBuZXdWYWx1ZSBBIG5ldyBxdWVzdGlvbiB2YWx1ZVxuICAgKiBAc2VlIGRhdGFcbiAgICogQHNlZSBnZXRWYWx1ZVxuICAgKiBAc2VlIFBhZ2VNb2RlbC52aXNpYmxlSWZcbiAgICogQHNlZSBRdWVzdGlvbi52aXNpYmxlSWZcbiAgICogQHNlZSBnb05leHRQYWdlQXV0b21hdGljXG4gICAqL1xuICBwdWJsaWMgc2V0VmFsdWUoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG5ld1F1ZXN0aW9uVmFsdWU6IGFueSxcbiAgICBsb2NOb3RpZmljYXRpb246IGFueSA9IGZhbHNlLFxuICAgIGFsbG93Tm90aWZ5VmFsdWVDaGFuZ2VkOiBib29sZWFuID0gdHJ1ZVxuICApIHtcbiAgICB2YXIgbmV3VmFsdWUgPSBuZXdRdWVzdGlvblZhbHVlO1xuICAgIGlmIChhbGxvd05vdGlmeVZhbHVlQ2hhbmdlZCkge1xuICAgICAgbmV3VmFsdWUgPSB0aGlzLnF1ZXN0aW9uT25WYWx1ZUNoYW5naW5nKG5hbWUsIG5ld1F1ZXN0aW9uVmFsdWUpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLmlzVmFsaWRhdGVPblZhbHVlQ2hhbmdpbmcgJiZcbiAgICAgIHRoaXMuY2hlY2tFcnJvcnNPblZhbHVlQ2hhbmdpbmcobmFtZSwgbmV3VmFsdWUpXG4gICAgKVxuICAgICAgcmV0dXJuO1xuICAgIGlmIChcbiAgICAgICF0aGlzLmVkaXRpbmdPYmogJiZcbiAgICAgIHRoaXMuaXNWYWx1ZUVxdWFsKG5hbWUsIG5ld1ZhbHVlKSAmJlxuICAgICAgdGhpcy5pc1R3b1ZhbHVlRXF1YWxzKG5ld1ZhbHVlLCBuZXdRdWVzdGlvblZhbHVlKVxuICAgIClcbiAgICAgIHJldHVybjtcbiAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLmdldFZhbHVlKG5hbWUpO1xuICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eShuZXdWYWx1ZSkpIHtcbiAgICAgIHRoaXMuZGVsZXRlRGF0YVZhbHVlQ29yZSh0aGlzLnZhbHVlc0hhc2gsIG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdWYWx1ZSA9IHRoaXMuZ2V0VW5iaW5kVmFsdWUobmV3VmFsdWUpO1xuICAgICAgdGhpcy5zZXREYXRhVmFsdWVDb3JlKHRoaXMudmFsdWVzSGFzaCwgbmFtZSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZU9uU2V0VmFsdWUoXG4gICAgICBuYW1lLFxuICAgICAgbmV3VmFsdWUsXG4gICAgICBvbGRWYWx1ZSxcbiAgICAgIGxvY05vdGlmaWNhdGlvbixcbiAgICAgIGFsbG93Tm90aWZ5VmFsdWVDaGFuZ2VkXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIHVwZGF0ZU9uU2V0VmFsdWUoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG5ld1ZhbHVlOiBhbnksXG4gICAgb2xkVmFsdWU6IGFueSxcbiAgICBsb2NOb3RpZmljYXRpb246IGFueSA9IGZhbHNlLFxuICAgIGFsbG93Tm90aWZ5VmFsdWVDaGFuZ2VkOiBib29sZWFuID0gdHJ1ZVxuICApIHtcbiAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9uVmFsdWUobmFtZSwgbmV3VmFsdWUpO1xuICAgIGlmIChsb2NOb3RpZmljYXRpb24gPT09IHRydWUgfHwgdGhpcy5pc0Rpc3Bvc2VkKSByZXR1cm47XG4gICAgdmFyIHRyaWdnZXJLZXlzOiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICB0cmlnZ2VyS2V5c1tuYW1lXSA9IHsgbmV3VmFsdWU6IG5ld1ZhbHVlLCBvbGRWYWx1ZTogb2xkVmFsdWUgfTtcbiAgICB0aGlzLnJ1bkNvbmRpdGlvbk9uVmFsdWVDaGFuZ2VkKG5hbWUsIG5ld1ZhbHVlKTtcbiAgICB0aGlzLmNoZWNrVHJpZ2dlcnModHJpZ2dlcktleXMsIGZhbHNlKTtcbiAgICBpZiAoYWxsb3dOb3RpZnlWYWx1ZUNoYW5nZWQpXG4gICAgICB0aGlzLm5vdGlmeVF1ZXN0aW9uT25WYWx1ZUNoYW5nZWQobmFtZSwgbmV3VmFsdWUpO1xuICAgIGlmIChsb2NOb3RpZmljYXRpb24gIT09IFwidGV4dFwiKSB7XG4gICAgICB0aGlzLnRyeUdvTmV4dFBhZ2VBdXRvbWF0aWMobmFtZSk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlUHJvZ3Jlc3NUZXh0KHRydWUpO1xuICB9XG4gIHByaXZhdGUgaXNWYWx1ZUVxdWFsKG5hbWU6IHN0cmluZywgbmV3VmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmIChuZXdWYWx1ZSA9PT0gXCJcIiB8fCBuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSBuZXdWYWx1ZSA9IG51bGw7XG4gICAgdmFyIG9sZFZhbHVlID0gdGhpcy5nZXRWYWx1ZShuYW1lKTtcbiAgICBpZiAob2xkVmFsdWUgPT09IFwiXCIgfHwgb2xkVmFsdWUgPT09IHVuZGVmaW5lZCkgb2xkVmFsdWUgPSBudWxsO1xuICAgIGlmIChuZXdWYWx1ZSA9PT0gbnVsbCB8fCBvbGRWYWx1ZSA9PT0gbnVsbCkgcmV0dXJuIG5ld1ZhbHVlID09PSBvbGRWYWx1ZTtcbiAgICByZXR1cm4gdGhpcy5pc1R3b1ZhbHVlRXF1YWxzKG5ld1ZhbHVlLCBvbGRWYWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGRvT25QYWdlQWRkZWQocGFnZTogUGFnZU1vZGVsKSB7XG4gICAgcGFnZS5zZXRTdXJ2ZXlJbXBsKHRoaXMpO1xuICAgIGlmICghcGFnZS5uYW1lKSBwYWdlLm5hbWUgPSB0aGlzLmdlbmVyYXRlTmV3TmFtZSh0aGlzLnBhZ2VzLCBcInBhZ2VcIik7XG4gICAgdGhpcy5xdWVzdGlvbkhhc2hlc1BhbmVsQWRkZWQocGFnZSk7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xuICAgIGlmICghdGhpcy5pc0xvYWRpbmdGcm9tSnNvbikge1xuICAgICAgdGhpcy51cGRhdGVQcm9ncmVzc1RleHQoKTtcbiAgICB9XG4gICAgdmFyIG9wdGlvbnMgPSB7IHBhZ2U6IHBhZ2UgfTtcbiAgICB0aGlzLm9uUGFnZUFkZGVkLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gIH1cbiAgcHJvdGVjdGVkIGRvT25QYWdlUmVtb3ZlZChwYWdlOiBQYWdlTW9kZWwpIHtcbiAgICBwYWdlLnNldFN1cnZleUltcGwobnVsbCk7XG4gICAgaWYocGFnZSA9PT0gdGhpcy5jdXJyZW50UGFnZVZhbHVlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlVmFsdWUgPSB0aGlzLmN1cnJlbnRQYWdlO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gICAgdGhpcy51cGRhdGVQcm9ncmVzc1RleHQoKTtcbiAgICB0aGlzLnVwZGF0ZUxhenlSZW5kZXJpbmdSb3dzT25SZW1vdmluZ0VsZW1lbnRzKCk7XG4gIH1cbiAgcHJpdmF0ZSBnZW5lcmF0ZU5ld05hbWUoZWxlbWVudHM6IEFycmF5PGFueT4sIGJhc2VOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHZhciBrZXlzOiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSBrZXlzW2VsZW1lbnRzW2ldW1wibmFtZVwiXV0gPSB0cnVlO1xuICAgIHZhciBpbmRleCA9IDE7XG4gICAgd2hpbGUgKGtleXNbYmFzZU5hbWUgKyBpbmRleF0pIGluZGV4Kys7XG4gICAgcmV0dXJuIGJhc2VOYW1lICsgaW5kZXg7XG4gIH1cbiAgcHJvdGVjdGVkIHRyeUdvTmV4dFBhZ2VBdXRvbWF0aWMobmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKFxuICAgICAgISF0aGlzLmlzRW5kTG9hZGluZ0Zyb21Kc29uIHx8XG4gICAgICAhdGhpcy5nb05leHRQYWdlQXV0b21hdGljIHx8XG4gICAgICAhdGhpcy5jdXJyZW50UGFnZVxuICAgIClcbiAgICAgIHJldHVybjtcbiAgICB2YXIgcXVlc3Rpb24gPSA8UXVlc3Rpb24+dGhpcy5nZXRRdWVzdGlvbkJ5VmFsdWVOYW1lKG5hbWUpO1xuICAgIGlmIChcbiAgICAgICFxdWVzdGlvbiB8fFxuICAgICAgKCEhcXVlc3Rpb24gJiZcbiAgICAgICAgKCFxdWVzdGlvbi52aXNpYmxlIHx8ICFxdWVzdGlvbi5zdXBwb3J0R29OZXh0UGFnZUF1dG9tYXRpYygpKSlcbiAgICApXG4gICAgICByZXR1cm47XG4gICAgaWYgKHF1ZXN0aW9uLmhhc0Vycm9ycyhmYWxzZSkgJiYgIXF1ZXN0aW9uLnN1cHBvcnRHb05leHRQYWdlRXJyb3IoKSkgcmV0dXJuO1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldEN1cnJlbnRQYWdlUXVlc3Rpb25zKCk7XG4gICAgaWYgKHF1ZXN0aW9ucy5pbmRleE9mKHF1ZXN0aW9uKSA8IDApIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHF1ZXN0aW9uc1tpXS5oYXNJbnB1dCAmJiBxdWVzdGlvbnNbaV0uaXNFbXB0eSgpKSByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5jaGVja0lzQ3VycmVudFBhZ2VIYXNFcnJvcnMoZmFsc2UpKSB7XG4gICAgICBpZiAoIXRoaXMuaXNMYXN0UGFnZSkge1xuICAgICAgICB0aGlzLm5leHRQYWdlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5nb05leHRQYWdlQXV0b21hdGljID09PSB0cnVlICYmXG4gICAgICAgICAgdGhpcy5hbGxvd0NvbXBsZXRlU3VydmV5QXV0b21hdGljXG4gICAgICAgICkge1xuICAgICAgICAgIGlmKHRoaXMuaXNTaG93UHJldmlld0JlZm9yZUNvbXBsZXRlKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dQcmV2aWV3KCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29tcGxldGVMYXN0UGFnZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY29tbWVudCB2YWx1ZS5cbiAgICogQHBhcmFtIG5hbWUgQSBjb21tZW50J3MgbmFtZS5cbiAgICogQHNlZSBzZXRDb21tZW50XG4gICAqL1xuICBwdWJsaWMgZ2V0Q29tbWVudChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJlcyA9IHRoaXMuZ2V0VmFsdWUobmFtZSArIHRoaXMuY29tbWVudFByZWZpeCk7XG4gICAgcmV0dXJuIHJlcyB8fCBcIlwiO1xuICB9XG4gIC8qKlxuICAgKiBTZXRzIGEgY29tbWVudCB2YWx1ZS5cbiAgICogQHBhcmFtIG5hbWUgQSBjb21tZW50IG5hbWUuXG4gICAqIEBwYXJhbSBuZXdWYWx1ZSBBIG5ldyBjb21tZW50IHZhbHVlLlxuICAgKiBAc2VlIGdldENvbW1lbnRcbiAgICovXG4gIHB1YmxpYyBzZXRDb21tZW50KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBuZXdWYWx1ZTogc3RyaW5nLFxuICAgIGxvY05vdGlmaWNhdGlvbjogYW55ID0gZmFsc2VcbiAgKSB7XG4gICAgaWYgKCFuZXdWYWx1ZSkgbmV3VmFsdWUgPSBcIlwiO1xuICAgIGlmICh0aGlzLmlzVHdvVmFsdWVFcXVhbHMobmV3VmFsdWUsIHRoaXMuZ2V0Q29tbWVudChuYW1lKSkpIHJldHVybjtcbiAgICB2YXIgY29tbWVudE5hbWUgPSBuYW1lICsgdGhpcy5jb21tZW50UHJlZml4O1xuICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eShuZXdWYWx1ZSkpIHtcbiAgICAgIHRoaXMuZGVsZXRlRGF0YVZhbHVlQ29yZSh0aGlzLnZhbHVlc0hhc2gsIGNvbW1lbnROYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXREYXRhVmFsdWVDb3JlKHRoaXMudmFsdWVzSGFzaCwgY29tbWVudE5hbWUsIG5ld1ZhbHVlKTtcbiAgICB9XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHRoaXMuZ2V0UXVlc3Rpb25zQnlWYWx1ZU5hbWUobmFtZSk7XG4gICAgaWYgKCEhcXVlc3Rpb25zKSB7XG4gICAgICBmb3IgKHZhciBpOiBudW1iZXIgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHF1ZXN0aW9uc1tpXS51cGRhdGVDb21tZW50RnJvbVN1cnZleShuZXdWYWx1ZSk7XG4gICAgICAgIHRoaXMuY2hlY2tRdWVzdGlvbkVycm9yT25WYWx1ZUNoYW5nZWQocXVlc3Rpb25zW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGxvY05vdGlmaWNhdGlvbiAhPT0gXCJ0ZXh0XCIpIHtcbiAgICAgIHRoaXMudHJ5R29OZXh0UGFnZUF1dG9tYXRpYyhuYW1lKTtcbiAgICB9XG4gICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRRdWVzdGlvbkJ5TmFtZShuYW1lKTtcbiAgICBpZiAocXVlc3Rpb24pIHtcbiAgICAgIHRoaXMub25WYWx1ZUNoYW5nZWQuZmlyZSh0aGlzLCB7XG4gICAgICAgIG5hbWU6IGNvbW1lbnROYW1lLFxuICAgICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICAgIHZhbHVlOiBuZXdWYWx1ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmVtb3ZlcyBhIHZhbHVlIGZyb20gdGhlIHN1cnZleSByZXN1bHRzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgdmFsdWUuIFR5cGljYWxseSBpdCBpcyBhIHF1ZXN0aW9uIG5hbWUuXG4gICAqL1xuICBwdWJsaWMgY2xlYXJWYWx1ZShuYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFZhbHVlKG5hbWUsIG51bGwpO1xuICAgIHRoaXMuc2V0Q29tbWVudChuYW1lLCBudWxsKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHdoZXRoZXIgdG8gY2xlYXIgdmFsdWUgb24gZGlzYWJsZSBpdGVtcyBpbiBjaGVja2JveCwgZHJvcGRvd24gYW5kIHJhZGlvZ3JvdXAgcXVlc3Rpb25zLlxuICAgKiBCeSBkZWZhdWx0LCB2YWx1ZXMgYXJlIG5vdCBjbGVhcmVkIG9uIGRpc2FibGVkIHRoZSBjb3JyZXNwb25kZWQgaXRlbXMuIFRoaXMgcHJvcGVydHkgaXMgbm90IHBlcnNpc3RlZCBpbiBzdXJ2ZXkgSlNPTiBhbmQgeW91IGhhdmUgdG8gc2V0IGl0IGluIGNvZGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNsZWFyVmFsdWVPbkRpc2FibGVJdGVtcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiY2xlYXJWYWx1ZU9uRGlzYWJsZUl0ZW1zXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNsZWFyVmFsdWVPbkRpc2FibGVJdGVtcyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJjbGVhclZhbHVlT25EaXNhYmxlSXRlbXNcIiwgdmFsKTtcbiAgfVxuICBnZXQgaXNDbGVhclZhbHVlT25IaWRkZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY2xlYXJJbnZpc2libGVWYWx1ZXMgPT0gXCJvbkhpZGRlblwiIHx8XG4gICAgICB0aGlzLmlzQ2xlYXJWYWx1ZU9uSGlkZGVuQ29udGFpbmVyXG4gICAgKTtcbiAgfVxuICBnZXQgaXNDbGVhclZhbHVlT25IaWRkZW5Db250YWluZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY2xlYXJJbnZpc2libGVWYWx1ZXMgPT0gXCJvbkhpZGRlbkNvbnRhaW5lclwiICYmXG4gICAgICAhdGhpcy5pc1Nob3dpbmdQcmV2aWV3ICYmXG4gICAgICAhdGhpcy5ydW5uaW5nUGFnZXNcbiAgICApO1xuICB9XG4gIHF1ZXN0aW9uVmlzaWJpbGl0eUNoYW5nZWQocXVlc3Rpb246IElRdWVzdGlvbiwgbmV3VmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gICAgdGhpcy5vblZpc2libGVDaGFuZ2VkLmZpcmUodGhpcywge1xuICAgICAgcXVlc3Rpb246IHF1ZXN0aW9uLFxuICAgICAgbmFtZTogcXVlc3Rpb24ubmFtZSxcbiAgICAgIHZpc2libGU6IG5ld1ZhbHVlLFxuICAgIH0pO1xuICB9XG4gIHBhZ2VWaXNpYmlsaXR5Q2hhbmdlZChwYWdlOiBJUGFnZSwgbmV3VmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdGcm9tSnNvbikgcmV0dXJuO1xuICAgIGlmIChuZXdWYWx1ZSAmJiAhdGhpcy5jdXJyZW50UGFnZVZhbHVlIHx8IHBhZ2UgPT09IHRoaXMuY3VycmVudFBhZ2VWYWx1ZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZVZhbHVlID0gdGhpcy5jdXJyZW50UGFnZTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xuICAgIHRoaXMub25QYWdlVmlzaWJsZUNoYW5nZWQuZmlyZSh0aGlzLCB7XG4gICAgICBwYWdlOiBwYWdlLFxuICAgICAgdmlzaWJsZTogbmV3VmFsdWUsXG4gICAgfSk7XG4gIH1cbiAgcGFuZWxWaXNpYmlsaXR5Q2hhbmdlZChwYW5lbDogSVBhbmVsLCBuZXdWYWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMudXBkYXRlVmlzaWJsZUluZGV4ZXMoKTtcbiAgICB0aGlzLm9uUGFuZWxWaXNpYmxlQ2hhbmdlZC5maXJlKHRoaXMsIHtcbiAgICAgIHBhbmVsOiBwYW5lbCxcbiAgICAgIHZpc2libGU6IG5ld1ZhbHVlLFxuICAgIH0pO1xuICB9XG4gIHF1ZXN0aW9uQ3JlYXRlZChxdWVzdGlvbjogSVF1ZXN0aW9uKTogYW55IHtcbiAgICB0aGlzLm9uUXVlc3Rpb25DcmVhdGVkLmZpcmUodGhpcywgeyBxdWVzdGlvbjogcXVlc3Rpb24gfSk7XG4gIH1cbiAgcXVlc3Rpb25BZGRlZChcbiAgICBxdWVzdGlvbjogSVF1ZXN0aW9uLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgcGFyZW50UGFuZWw6IGFueSxcbiAgICByb290UGFuZWw6IGFueVxuICApIHtcbiAgICBpZiAoIXF1ZXN0aW9uLm5hbWUpIHtcbiAgICAgIHF1ZXN0aW9uLm5hbWUgPSB0aGlzLmdlbmVyYXRlTmV3TmFtZShcbiAgICAgICAgdGhpcy5nZXRBbGxRdWVzdGlvbnMoZmFsc2UsIHRydWUpLFxuICAgICAgICBcInF1ZXN0aW9uXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghISg8UXVlc3Rpb24+cXVlc3Rpb24pLnBhZ2UpIHtcbiAgICAgIHRoaXMucXVlc3Rpb25IYXNoZXNBZGRlZCg8UXVlc3Rpb24+cXVlc3Rpb24pO1xuICAgIH1cbiAgICBpZighdGhpcy5jdXJyZW50UGFnZVZhbHVlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlVmFsdWUgPSB0aGlzLmN1cnJlbnRQYWdlO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gICAgdGhpcy5vblF1ZXN0aW9uQWRkZWQuZmlyZSh0aGlzLCB7XG4gICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICBuYW1lOiBxdWVzdGlvbi5uYW1lLFxuICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgcGFyZW50UGFuZWw6IHBhcmVudFBhbmVsLFxuICAgICAgcm9vdFBhbmVsOiByb290UGFuZWwsXG4gICAgfSk7XG4gIH1cbiAgcXVlc3Rpb25SZW1vdmVkKHF1ZXN0aW9uOiBJUXVlc3Rpb24pIHtcbiAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzUmVtb3ZlZChcbiAgICAgIDxRdWVzdGlvbj5xdWVzdGlvbixcbiAgICAgIHF1ZXN0aW9uLm5hbWUsXG4gICAgICBxdWVzdGlvbi5nZXRWYWx1ZU5hbWUoKVxuICAgICk7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xuICAgIHRoaXMub25RdWVzdGlvblJlbW92ZWQuZmlyZSh0aGlzLCB7XG4gICAgICBxdWVzdGlvbjogcXVlc3Rpb24sXG4gICAgICBuYW1lOiBxdWVzdGlvbi5uYW1lLFxuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlTGF6eVJlbmRlcmluZ1Jvd3NPblJlbW92aW5nRWxlbWVudHMoKTtcbiAgfVxuICBxdWVzdGlvblJlbmFtZWQoXG4gICAgcXVlc3Rpb246IElRdWVzdGlvbixcbiAgICBvbGROYW1lOiBzdHJpbmcsXG4gICAgb2xkVmFsdWVOYW1lOiBzdHJpbmdcbiAgKTogYW55IHtcbiAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzUmVtb3ZlZCg8UXVlc3Rpb24+cXVlc3Rpb24sIG9sZE5hbWUsIG9sZFZhbHVlTmFtZSk7XG4gICAgdGhpcy5xdWVzdGlvbkhhc2hlc0FkZGVkKDxRdWVzdGlvbj5xdWVzdGlvbik7XG4gIH1cbiAgcHJpdmF0ZSBxdWVzdGlvbkhhc2hlcyA9IHtcbiAgICBuYW1lczoge30sXG4gICAgbmFtZXNJbnNlbnNpdGl2ZToge30sXG4gICAgdmFsdWVOYW1lczoge30sXG4gICAgdmFsdWVOYW1lc0luc2Vuc2l0aXZlOiB7fSxcbiAgfTtcbiAgcHJpdmF0ZSBxdWVzdGlvbkhhc2hlc0NsZWFyKCkge1xuICAgIHRoaXMucXVlc3Rpb25IYXNoZXMubmFtZXMgPSB7fTtcbiAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzLm5hbWVzSW5zZW5zaXRpdmUgPSB7fTtcbiAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzLnZhbHVlTmFtZXMgPSB7fTtcbiAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzLnZhbHVlTmFtZXNJbnNlbnNpdGl2ZSA9IHt9O1xuICB9XG4gIHByaXZhdGUgcXVlc3Rpb25IYXNoZXNQYW5lbEFkZGVkKHBhbmVsOiBQYW5lbE1vZGVsQmFzZSkge1xuICAgIGlmICh0aGlzLmlzTG9hZGluZ0Zyb21Kc29uKSByZXR1cm47XG4gICAgdmFyIHF1ZXN0aW9ucyA9IHBhbmVsLnF1ZXN0aW9ucztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5xdWVzdGlvbkhhc2hlc0FkZGVkKHF1ZXN0aW9uc1tpXSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgcXVlc3Rpb25IYXNoZXNBZGRlZChxdWVzdGlvbjogUXVlc3Rpb24pIHtcbiAgICB0aGlzLnF1ZXN0aW9uSGFzaEFkZGVkQ29yZShcbiAgICAgIHRoaXMucXVlc3Rpb25IYXNoZXMubmFtZXMsXG4gICAgICBxdWVzdGlvbixcbiAgICAgIHF1ZXN0aW9uLm5hbWVcbiAgICApO1xuICAgIHRoaXMucXVlc3Rpb25IYXNoQWRkZWRDb3JlKFxuICAgICAgdGhpcy5xdWVzdGlvbkhhc2hlcy5uYW1lc0luc2Vuc2l0aXZlLFxuICAgICAgcXVlc3Rpb24sXG4gICAgICBxdWVzdGlvbi5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICApO1xuICAgIHRoaXMucXVlc3Rpb25IYXNoQWRkZWRDb3JlKFxuICAgICAgdGhpcy5xdWVzdGlvbkhhc2hlcy52YWx1ZU5hbWVzLFxuICAgICAgcXVlc3Rpb24sXG4gICAgICBxdWVzdGlvbi5nZXRWYWx1ZU5hbWUoKVxuICAgICk7XG4gICAgdGhpcy5xdWVzdGlvbkhhc2hBZGRlZENvcmUoXG4gICAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzLnZhbHVlTmFtZXNJbnNlbnNpdGl2ZSxcbiAgICAgIHF1ZXN0aW9uLFxuICAgICAgcXVlc3Rpb24uZ2V0VmFsdWVOYW1lKCkudG9Mb3dlckNhc2UoKVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBxdWVzdGlvbkhhc2hlc1JlbW92ZWQoXG4gICAgcXVlc3Rpb246IFF1ZXN0aW9uLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZU5hbWU6IHN0cmluZ1xuICApIHtcbiAgICBpZiAoISFuYW1lKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uSGFzaFJlbW92ZWRDb3JlKHRoaXMucXVlc3Rpb25IYXNoZXMubmFtZXMsIHF1ZXN0aW9uLCBuYW1lKTtcbiAgICAgIHRoaXMucXVlc3Rpb25IYXNoUmVtb3ZlZENvcmUoXG4gICAgICAgIHRoaXMucXVlc3Rpb25IYXNoZXMubmFtZXNJbnNlbnNpdGl2ZSxcbiAgICAgICAgcXVlc3Rpb24sXG4gICAgICAgIG5hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCEhdmFsdWVOYW1lKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uSGFzaFJlbW92ZWRDb3JlKFxuICAgICAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzLnZhbHVlTmFtZXMsXG4gICAgICAgIHF1ZXN0aW9uLFxuICAgICAgICB2YWx1ZU5hbWVcbiAgICAgICk7XG4gICAgICB0aGlzLnF1ZXN0aW9uSGFzaFJlbW92ZWRDb3JlKFxuICAgICAgICB0aGlzLnF1ZXN0aW9uSGFzaGVzLnZhbHVlTmFtZXNJbnNlbnNpdGl2ZSxcbiAgICAgICAgcXVlc3Rpb24sXG4gICAgICAgIHZhbHVlTmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHF1ZXN0aW9uSGFzaEFkZGVkQ29yZShoYXNoOiBhbnksIHF1ZXN0aW9uOiBRdWVzdGlvbiwgbmFtZTogc3RyaW5nKSB7XG4gICAgdmFyIHJlcyA9IGhhc2hbbmFtZV07XG4gICAgaWYgKCEhcmVzKSB7XG4gICAgICB2YXIgcmVzID0gaGFzaFtuYW1lXTtcbiAgICAgIGlmIChyZXMuaW5kZXhPZihxdWVzdGlvbikgPCAwKSB7XG4gICAgICAgIHJlcy5wdXNoKHF1ZXN0aW9uKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaGFzaFtuYW1lXSA9IFtxdWVzdGlvbl07XG4gICAgfVxuICB9XG4gIHByaXZhdGUgcXVlc3Rpb25IYXNoUmVtb3ZlZENvcmUoaGFzaDogYW55LCBxdWVzdGlvbjogUXVlc3Rpb24sIG5hbWU6IHN0cmluZykge1xuICAgIHZhciByZXMgPSBoYXNoW25hbWVdO1xuICAgIGlmICghcmVzKSByZXR1cm47XG4gICAgdmFyIGluZGV4ID0gcmVzLmluZGV4T2YocXVlc3Rpb24pO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICByZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gICAgaWYgKHJlcy5sZW5ndGggPT0gMCkge1xuICAgICAgZGVsZXRlIGhhc2hbbmFtZV07XG4gICAgfVxuICB9XG4gIHBhbmVsQWRkZWQocGFuZWw6IElFbGVtZW50LCBpbmRleDogbnVtYmVyLCBwYXJlbnRQYW5lbDogYW55LCByb290UGFuZWw6IGFueSkge1xuICAgIGlmICghcGFuZWwubmFtZSkge1xuICAgICAgcGFuZWwubmFtZSA9IHRoaXMuZ2VuZXJhdGVOZXdOYW1lKFxuICAgICAgICB0aGlzLmdldEFsbFBhbmVscyhmYWxzZSwgdHJ1ZSksXG4gICAgICAgIFwicGFuZWxcIlxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5xdWVzdGlvbkhhc2hlc1BhbmVsQWRkZWQoPFBhbmVsTW9kZWxCYXNlPig8YW55PnBhbmVsKSk7XG4gICAgdGhpcy51cGRhdGVWaXNpYmxlSW5kZXhlcygpO1xuICAgIHRoaXMub25QYW5lbEFkZGVkLmZpcmUodGhpcywge1xuICAgICAgcGFuZWw6IHBhbmVsLFxuICAgICAgbmFtZTogcGFuZWwubmFtZSxcbiAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgIHBhcmVudFBhbmVsOiBwYXJlbnRQYW5lbCxcbiAgICAgIHJvb3RQYW5lbDogcm9vdFBhbmVsLFxuICAgIH0pO1xuICB9XG4gIHBhbmVsUmVtb3ZlZChwYW5lbDogSUVsZW1lbnQpIHtcbiAgICB0aGlzLnVwZGF0ZVZpc2libGVJbmRleGVzKCk7XG4gICAgdGhpcy5vblBhbmVsUmVtb3ZlZC5maXJlKHRoaXMsIHsgcGFuZWw6IHBhbmVsLCBuYW1lOiBwYW5lbC5uYW1lIH0pO1xuICAgIHRoaXMudXBkYXRlTGF6eVJlbmRlcmluZ1Jvd3NPblJlbW92aW5nRWxlbWVudHMoKTtcbiAgfVxuICB2YWxpZGF0ZVF1ZXN0aW9uKHF1ZXN0aW9uOiBJUXVlc3Rpb24pOiBTdXJ2ZXlFcnJvciB7XG4gICAgaWYgKHRoaXMub25WYWxpZGF0ZVF1ZXN0aW9uLmlzRW1wdHkpIHJldHVybiBudWxsO1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgbmFtZTogcXVlc3Rpb24ubmFtZSxcbiAgICAgIHF1ZXN0aW9uOiBxdWVzdGlvbixcbiAgICAgIHZhbHVlOiBxdWVzdGlvbi52YWx1ZSxcbiAgICAgIGVycm9yOiA8YW55Pm51bGwsXG4gICAgfTtcbiAgICB0aGlzLm9uVmFsaWRhdGVRdWVzdGlvbi5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLmVycm9yID8gbmV3IEN1c3RvbUVycm9yKG9wdGlvbnMuZXJyb3IsIHRoaXMpIDogbnVsbDtcbiAgfVxuICB2YWxpZGF0ZVBhbmVsKHBhbmVsOiBJUGFuZWwpOiBTdXJ2ZXlFcnJvciB7XG4gICAgaWYgKHRoaXMub25WYWxpZGF0ZVBhbmVsLmlzRW1wdHkpIHJldHVybiBudWxsO1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgbmFtZTogcGFuZWwubmFtZSxcbiAgICAgIHBhbmVsOiBwYW5lbCxcbiAgICAgIGVycm9yOiA8YW55Pm51bGwsXG4gICAgfTtcbiAgICB0aGlzLm9uVmFsaWRhdGVQYW5lbC5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLmVycm9yID8gbmV3IEN1c3RvbUVycm9yKG9wdGlvbnMuZXJyb3IsIHRoaXMpIDogbnVsbDtcbiAgfVxuICBwcm9jZXNzSHRtbChodG1sOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHZhciBvcHRpb25zID0geyBodG1sOiBodG1sIH07XG4gICAgdGhpcy5vblByb2Nlc3NIdG1sLmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc1RleHQob3B0aW9ucy5odG1sLCB0cnVlKTtcbiAgfVxuICBwcm9jZXNzVGV4dCh0ZXh0OiBzdHJpbmcsIHJldHVybkRpc3BsYXlWYWx1ZTogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc1RleHRFeCh0ZXh0LCByZXR1cm5EaXNwbGF5VmFsdWUsIGZhbHNlKS50ZXh0O1xuICB9XG4gIHByb2Nlc3NUZXh0RXgoXG4gICAgdGV4dDogc3RyaW5nLFxuICAgIHJldHVybkRpc3BsYXlWYWx1ZTogYm9vbGVhbixcbiAgICBkb0VuY29kaW5nOiBib29sZWFuXG4gICk6IGFueSB7XG4gICAgdmFyIHJlcyA9IHtcbiAgICAgIHRleHQ6IHRoaXMucHJvY2Vzc1RleHRDb3JlKHRleHQsIHJldHVybkRpc3BsYXlWYWx1ZSwgZG9FbmNvZGluZyksXG4gICAgICBoYXNBbGxWYWx1ZXNPbkxhc3RSdW46IHRydWUsXG4gICAgfTtcbiAgICByZXMuaGFzQWxsVmFsdWVzT25MYXN0UnVuID0gdGhpcy50ZXh0UHJlUHJvY2Vzc29yLmhhc0FsbFZhbHVlc09uTGFzdFJ1bjtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIHByaXZhdGUgcHJvY2Vzc1RleHRDb3JlKFxuICAgIHRleHQ6IHN0cmluZyxcbiAgICByZXR1cm5EaXNwbGF5VmFsdWU6IGJvb2xlYW4sXG4gICAgZG9FbmNvZGluZzogYm9vbGVhbiA9IGZhbHNlXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuaXNEZXNpZ25Nb2RlKSByZXR1cm4gdGV4dDtcbiAgICByZXR1cm4gdGhpcy50ZXh0UHJlUHJvY2Vzc29yLnByb2Nlc3ModGV4dCwgcmV0dXJuRGlzcGxheVZhbHVlLCBkb0VuY29kaW5nKTtcbiAgfVxuICBnZXRTdXJ2ZXlNYXJrZG93bkh0bWwoZWxlbWVudDogQmFzZSwgdGV4dDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgIHRleHQ6IHRleHQsXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgaHRtbDogPGFueT5udWxsLFxuICAgIH07XG4gICAgdGhpcy5vblRleHRNYXJrZG93bi5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHJldHVybiBvcHRpb25zLmh0bWw7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gYW1vdW50IG9mIGNvcnJlY3RlZCBxdWl6IGFuc3dlcnMuXG4gICAqL1xuICBwdWJsaWMgZ2V0Q29ycmVjdGVkQW5zd2VyQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDb3JyZWN0ZWRBbnN3ZXJDb3VudENvcmUodHJ1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgcXVpeiBxdWVzdGlvbiBudW1iZXIuIEl0IG1heSBiZSBkaWZmZXJlbnQgZnJvbSBgZ2V0UXVpelF1ZXN0aW9ucy5sZW5ndGhgIGJlY2F1c2Ugc29tZSB3aWRnZXRzIGxpa2UgbWF0cml4IG1heSBoYXZlIHNldmVyYWwgcXVlc3Rpb25zLlxuICAgKiBAc2VlIGdldFF1aXpRdWVzdGlvbnNcbiAgICovXG4gIHB1YmxpYyBnZXRRdWl6UXVlc3Rpb25Db3VudCgpOiBudW1iZXIge1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldFF1aXpRdWVzdGlvbnMoKTtcbiAgICB2YXIgcmVzID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzICs9ICg8UXVlc3Rpb24+cXVlc3Rpb25zW2ldKS5xdWl6UXVlc3Rpb25Db3VudDtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhbiBhbW91bnQgb2YgaW5jb3JyZWN0IHF1aXogYW5zd2Vycy5cbiAgICovXG4gIHB1YmxpYyBnZXRJbkNvcnJlY3RlZEFuc3dlckNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q29ycmVjdGVkQW5zd2VyQ291bnRDb3JlKGZhbHNlKTtcbiAgfVxuICBwcml2YXRlIGdldENvcnJlY3RlZEFuc3dlckNvdW50Q29yZShpc0NvcnJlY3Q6IGJvb2xlYW4pOiBudW1iZXIge1xuICAgIHZhciBxdWVzdGlvbnMgPSB0aGlzLmdldFF1aXpRdWVzdGlvbnMoKTtcbiAgICB2YXIgY291bnRlciA9IDA7XG4gICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICBxdWVzdGlvbjogPElRdWVzdGlvbj5udWxsLFxuICAgICAgcmVzdWx0OiBmYWxzZSxcbiAgICAgIGNvcnJlY3RBbnN3ZXJzOiAwLFxuICAgICAgaW5jb3JyZWN0QW5zd2VyczogMCxcbiAgICB9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcSA9IDxRdWVzdGlvbj5xdWVzdGlvbnNbaV07XG4gICAgICB2YXIgcXVpelF1ZXN0aW9uQ291bnQgPSBxLnF1aXpRdWVzdGlvbkNvdW50O1xuICAgICAgb3B0aW9ucy5xdWVzdGlvbiA9IHE7XG4gICAgICBvcHRpb25zLmNvcnJlY3RBbnN3ZXJzID0gcS5jb3JyZWN0QW5zd2VyQ291bnQ7XG4gICAgICBvcHRpb25zLmluY29ycmVjdEFuc3dlcnMgPSBxdWl6UXVlc3Rpb25Db3VudCAtIG9wdGlvbnMuY29ycmVjdEFuc3dlcnM7XG4gICAgICBvcHRpb25zLnJlc3VsdCA9IG9wdGlvbnMucXVlc3Rpb24uaXNBbnN3ZXJDb3JyZWN0KCk7XG4gICAgICB0aGlzLm9uSXNBbnN3ZXJDb3JyZWN0LmZpcmUodGhpcywgb3B0aW9ucyk7XG4gICAgICBpZiAoaXNDb3JyZWN0KSB7XG4gICAgICAgIGlmIChvcHRpb25zLnJlc3VsdCB8fCBvcHRpb25zLmNvcnJlY3RBbnN3ZXJzIDwgcXVpelF1ZXN0aW9uQ291bnQpIHtcbiAgICAgICAgICB2YXIgYWRkQ291bnQgPSBvcHRpb25zLmNvcnJlY3RBbnN3ZXJzO1xuICAgICAgICAgIGlmIChhZGRDb3VudCA9PSAwICYmIG9wdGlvbnMucmVzdWx0KSBhZGRDb3VudCA9IDE7XG4gICAgICAgICAgY291bnRlciArPSBhZGRDb3VudDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLnJlc3VsdCB8fCBvcHRpb25zLmluY29ycmVjdEFuc3dlcnMgPCBxdWl6UXVlc3Rpb25Db3VudCkge1xuICAgICAgICAgIGNvdW50ZXIgKz0gb3B0aW9ucy5pbmNvcnJlY3RBbnN3ZXJzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb3VudGVyO1xuICB9XG4gIGdldENvcnJlY3RlZEFuc3dlcnMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDb3JyZWN0ZWRBbnN3ZXJDb3VudCgpO1xuICB9XG4gIGdldEluQ29ycmVjdGVkQW5zd2VycygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldEluQ29ycmVjdGVkQW5zd2VyQ291bnQoKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIGEgdGltZXIgcGFuZWwgcG9zaXRpb24uIFRoZSB0aW1lciBwYW5lbCBkaXNwbGF5cyBpbmZvcm1hdGlvbiBhYm91dCBob3cgbXVjaCB0aW1lIGFuIGVuZCB1c2VyIHNwZW5kcyBvbiBhIHN1cnZleS9wYWdlLlxuICAgKlxuICAgKiBUaGUgYXZhaWxhYmxlIG9wdGlvbnM6XG4gICAqIC0gYHRvcGAgLSBkaXNwbGF5IHRpbWVyIHBhbmVsIGluIHRoZSB0b3AuXG4gICAqIC0gYGJvdHRvbWAgLSBkaXNwbGF5IHRpbWVyIHBhbmVsIGluIHRoZSBib3R0b20uXG4gICAqIC0gYG5vbmVgIC0gZG8gbm90IGRpc3BsYXkgYSB0aW1lciBwYW5lbC5cbiAgICpcbiAgICogSWYgdGhlIHZhbHVlIGlzIG5vdCBlcXVhbCB0byAnbm9uZScsIHRoZSBzdXJ2ZXkgY2FsbHMgdGhlIGBzdGFydFRpbWVyKClgIG1ldGhvZCBvbiBzdXJ2ZXkgcmVuZGVyaW5nLlxuICAgKiBAc2VlIHNob3dUaW1lclBhbmVsTW9kZVxuICAgKiBAc2VlIHN0YXJ0VGltZXJcbiAgICogQHNlZSBzdG9wVGltZXJcbiAgICovXG4gIHB1YmxpYyBnZXQgc2hvd1RpbWVyUGFuZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2hvd1RpbWVyUGFuZWxcIik7XG4gIH1cbiAgcHVibGljIHNldCBzaG93VGltZXJQYW5lbCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNob3dUaW1lclBhbmVsXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBpc1RpbWVyUGFuZWxTaG93aW5nT25Ub3AoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNUaW1lclN0YXJ0ZWQgJiYgdGhpcy5zaG93VGltZXJQYW5lbCA9PSBcInRvcFwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNUaW1lclBhbmVsU2hvd2luZ09uQm90dG9tKCkge1xuICAgIHJldHVybiB0aGlzLmlzVGltZXJTdGFydGVkICYmIHRoaXMuc2hvd1RpbWVyUGFuZWwgPT0gXCJib3R0b21cIjtcbiAgfVxuICAvKipcbiAgICogR2V0cyBvciBzZXQgYSB2YWx1ZSB0aGF0IHNwZWNpZmllcyB3aGV0aGVyIHRoZSB0aW1lciBkaXNwbGF5cyBpbmZvcm1hdGlvbiBmb3IgdGhlIHBhZ2Ugb3IgZm9yIHRoZSBlbnRpcmUgc3VydmV5LlxuICAgKlxuICAgKiBUaGUgYXZhaWxhYmxlIG9wdGlvbnM6XG4gICAqXG4gICAqIC0gYHBhZ2VgIC0gc2hvdyB0aW1lciBpbmZvcm1hdGlvbiBmb3IgcGFnZVxuICAgKiAtIGBzdXJ2ZXlgIC0gc2hvdyB0aW1lciBpbmZvcm1hdGlvbiBmb3Igc3VydmV5XG4gICAqXG4gICAqIFVzZSB0aGUgYG9uVGltZXJQYW5lbEluZm9UZXh0YCBldmVudCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgdGV4dC5cbiAgICogQHNlZSBzaG93VGltZXJQYW5lbFxuICAgKiBAc2VlIG9uVGltZXJQYW5lbEluZm9UZXh0XG4gICAqL1xuICBwdWJsaWMgZ2V0IHNob3dUaW1lclBhbmVsTW9kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzaG93VGltZXJQYW5lbE1vZGVcIik7XG4gIH1cbiAgcHVibGljIHNldCBzaG93VGltZXJQYW5lbE1vZGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzaG93VGltZXJQYW5lbE1vZGVcIiwgdmFsKTtcbiAgfVxuXG4gIC8qKlxuICAgICogR2V0cyBvciBzZXRzIGEgdmFsdWUgdGhhdCBzcGVjaWZpZXMgaG93IHRoZSBzdXJ2ZXkgd2lkdGggaXMgY2FsY3VsYXRlZC5cbiAgICAqXG4gICAgKiBUaGUgYXZhaWxhYmxlIG9wdGlvbnM6XG4gICAgKlxuICAgICogLSBgc3RhdGljYCAtIEEgc3VydmV5IGhhcyBhIGZpeGVkIHdpZHRoIHRoYXQgbW9zdGx5IGRlcGVuZHMgdXBvbiB0aGUgYXBwbGllZCB0aGVtZS4gUmVzaXppbmcgYSBicm93c2VyIHdpbmRvdyBkb2VzIG5vdCBhZmZlY3QgdGhlIHN1cnZleSB3aWR0aC5cbiAgICAqIC0gYHJlc3BvbnNpdmVgIC0gQSBzdXJ2ZXkgdGFrZXMgYWxsIGF2YWlsYWJsZSBob3Jpem9udGFsIHNwYWNlLiBBIHN1cnZleSBzdHJldGNoZXMgb3Igc2hyaW5rcyBob3Jpem9uYWxseSBhY2NvcmRpbmcgdG8gdGhlIHNjcmVlbiBzaXplLlxuICAgICogLSBgYXV0b2AgLSBEZXBlbmRzIG9uIHRoZSBxdWVzdGlvbiB0eXBlIGFuZCBjb3JyZXNwb25kcyB0byB0aGUgc3RhdGljIG9yIHJlc3BvbnNpdmUgbW9kZS5cbiAgKi9cbiAgLy8gYGN1c3RvbS9wcmVjaXNlYCAtIFRoZSBzdXJ2ZXkgd2lkdGggaXMgc3BlY2lmaWVkIGJ5IHRoZSB3aWR0aCBwcm9wZXJ0eS4gLy8gaW4tZnV0dXJlXG4gIHB1YmxpYyBnZXQgd2lkdGhNb2RlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIndpZHRoTW9kZVwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHdpZHRoTW9kZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIndpZHRoTW9kZVwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBjYWxjdWxhdGVXaWR0aE1vZGUoKSB7XG4gICAgaWYodGhpcy53aWR0aE1vZGUgPT0gXCJhdXRvXCIpIHtcbiAgICAgIGxldCBpc1Jlc3BvbnNpdmUgPSBmYWxzZTtcbiAgICAgIHRoaXMucGFnZXMuZm9yRWFjaCgocGFnZSk9PntcbiAgICAgICAgaWYocGFnZS5uZWVkUmVzcG9uc2l2ZVdpZHRoKCkpXG4gICAgICAgICAgaXNSZXNwb25zaXZlID0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGlzUmVzcG9uc2l2ZT9cInJlc3BvbnNpdmVcIjpcInN0YXRpY1wiO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy53aWR0aE1vZGU7XG4gIH1cbiAgcHVibGljIGdldCB0aW1lckluZm9UZXh0KCk6IHN0cmluZyB7XG4gICAgdmFyIG9wdGlvbnMgPSB7IHRleHQ6IHRoaXMuZ2V0VGltZXJJbmZvVGV4dCgpIH07XG4gICAgdGhpcy5vblRpbWVyUGFuZWxJbmZvVGV4dC5maXJlKHRoaXMsIG9wdGlvbnMpO1xuICAgIHZhciBsb2MgPSBuZXcgTG9jYWxpemFibGVTdHJpbmcodGhpcywgdHJ1ZSk7XG4gICAgbG9jLnRleHQgPSBvcHRpb25zLnRleHQ7XG4gICAgcmV0dXJuIGxvYy50ZXh0T3JIdG1sO1xuICB9XG4gIHByaXZhdGUgZ2V0VGltZXJJbmZvVGV4dCgpIHtcbiAgICB2YXIgcGFnZSA9IHRoaXMuY3VycmVudFBhZ2U7XG4gICAgaWYgKCFwYWdlKSByZXR1cm4gXCJcIjtcbiAgICB2YXIgcGFnZVNwZW50ID0gdGhpcy5nZXREaXNwbGF5VGltZShwYWdlLnRpbWVTcGVudCk7XG4gICAgdmFyIHN1cnZleVNwZW50ID0gdGhpcy5nZXREaXNwbGF5VGltZSh0aGlzLnRpbWVTcGVudCk7XG4gICAgdmFyIHBhZ2VMaW1pdFNlYyA9IHRoaXMuZ2V0UGFnZU1heFRpbWVUb0ZpbmlzaChwYWdlKTtcbiAgICB2YXIgcGFnZUxpbWl0ID0gdGhpcy5nZXREaXNwbGF5VGltZShwYWdlTGltaXRTZWMpO1xuICAgIHZhciBzdXJ2ZXlMaW1pdCA9IHRoaXMuZ2V0RGlzcGxheVRpbWUodGhpcy5tYXhUaW1lVG9GaW5pc2gpO1xuICAgIGlmICh0aGlzLnNob3dUaW1lclBhbmVsTW9kZSA9PSBcInBhZ2VcIilcbiAgICAgIHJldHVybiB0aGlzLmdldFRpbWVySW5mb1BhZ2VUZXh0KHBhZ2UsIHBhZ2VTcGVudCwgcGFnZUxpbWl0KTtcbiAgICBpZiAodGhpcy5zaG93VGltZXJQYW5lbE1vZGUgPT0gXCJzdXJ2ZXlcIilcbiAgICAgIHJldHVybiB0aGlzLmdldFRpbWVySW5mb1N1cnZleVRleHQoc3VydmV5U3BlbnQsIHN1cnZleUxpbWl0KTtcbiAgICBpZiAodGhpcy5zaG93VGltZXJQYW5lbE1vZGUgPT0gXCJhbGxcIikge1xuICAgICAgaWYgKHBhZ2VMaW1pdFNlYyA8PSAwICYmIHRoaXMubWF4VGltZVRvRmluaXNoIDw9IDApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9jU3RyaW5nKFwidGltZXJTcGVudEFsbFwiKVtcImZvcm1hdFwiXShcbiAgICAgICAgICBwYWdlU3BlbnQsXG4gICAgICAgICAgc3VydmV5U3BlbnRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChwYWdlTGltaXRTZWMgPiAwICYmIHRoaXMubWF4VGltZVRvRmluaXNoID4gMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRMb2NTdHJpbmcoXCJ0aW1lckxpbWl0QWxsXCIpW1wiZm9ybWF0XCJdKFxuICAgICAgICAgIHBhZ2VTcGVudCxcbiAgICAgICAgICBwYWdlTGltaXQsXG4gICAgICAgICAgc3VydmV5U3BlbnQsXG4gICAgICAgICAgc3VydmV5TGltaXRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGxldCBwYWdlVGV4dCA9IHRoaXMuZ2V0VGltZXJJbmZvUGFnZVRleHQocGFnZSwgcGFnZVNwZW50LCBwYWdlTGltaXQpO1xuICAgICAgbGV0IHN1cnZleVRleHQgPSB0aGlzLmdldFRpbWVySW5mb1N1cnZleVRleHQoc3VydmV5U3BlbnQsIHN1cnZleUxpbWl0KTtcbiAgICAgIHJldHVybiBwYWdlVGV4dCArIFwiIFwiICsgc3VydmV5VGV4dDtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbiAgcHJpdmF0ZSBnZXRUaW1lckluZm9QYWdlVGV4dChcbiAgICBwYWdlOiBQYWdlTW9kZWwsXG4gICAgcGFnZVNwZW50OiBzdHJpbmcsXG4gICAgcGFnZUxpbWl0OiBzdHJpbmdcbiAgKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQYWdlTWF4VGltZVRvRmluaXNoKHBhZ2UpID4gMFxuICAgICAgPyB0aGlzLmdldExvY1N0cmluZyhcInRpbWVyTGltaXRQYWdlXCIpW1wiZm9ybWF0XCJdKHBhZ2VTcGVudCwgcGFnZUxpbWl0KVxuICAgICAgOiB0aGlzLmdldExvY1N0cmluZyhcInRpbWVyU3BlbnRQYWdlXCIpW1wiZm9ybWF0XCJdKHBhZ2VTcGVudCwgcGFnZUxpbWl0KTtcbiAgfVxuICBwcml2YXRlIGdldFRpbWVySW5mb1N1cnZleVRleHQoXG4gICAgc3VydmV5U3BlbnQ6IHN0cmluZyxcbiAgICBzdXJ2ZXlMaW1pdDogc3RyaW5nXG4gICk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubWF4VGltZVRvRmluaXNoID4gMFxuICAgICAgPyB0aGlzLmdldExvY1N0cmluZyhcInRpbWVyTGltaXRTdXJ2ZXlcIilbXCJmb3JtYXRcIl0oXG4gICAgICAgIHN1cnZleVNwZW50LFxuICAgICAgICBzdXJ2ZXlMaW1pdFxuICAgICAgKVxuICAgICAgOiB0aGlzLmdldExvY1N0cmluZyhcInRpbWVyU3BlbnRTdXJ2ZXlcIilbXCJmb3JtYXRcIl0oXG4gICAgICAgIHN1cnZleVNwZW50LFxuICAgICAgICBzdXJ2ZXlMaW1pdFxuICAgICAgKTtcbiAgfVxuICBwcml2YXRlIGdldERpc3BsYXlUaW1lKHZhbDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBtaW46IG51bWJlciA9IE1hdGguZmxvb3IodmFsIC8gNjApO1xuICAgIGNvbnN0IHNlYzogbnVtYmVyID0gdmFsICUgNjA7XG4gICAgbGV0IHJlczogc3RyaW5nID0gXCJcIjtcbiAgICBpZiAobWluID4gMCkge1xuICAgICAgcmVzICs9IG1pbiArIFwiIFwiICsgdGhpcy5nZXRMb2NTdHJpbmcoXCJ0aW1lck1pblwiKTtcbiAgICB9XG4gICAgaWYgKHJlcyAmJiBzZWMgPT0gMCkgcmV0dXJuIHJlcztcbiAgICBpZiAocmVzKSByZXMgKz0gXCIgXCI7XG4gICAgcmV0dXJuIHJlcyArIHNlYyArIFwiIFwiICsgdGhpcy5nZXRMb2NTdHJpbmcoXCJ0aW1lclNlY1wiKTtcbiAgfVxuICBwcml2YXRlIHRpbWVyRnVuYzogYW55ID0gbnVsbDtcbiAgLyoqXG4gICAqIFN0YXJ0cyBhIHRpbWVyIHRoYXQgd2lsbCBjYWxjdWxhdGUgaG93IG11Y2ggdGltZSBlbmQtdXNlciBzcGVuZHMgb24gdGhlIHN1cnZleSBvciBvbiBwYWdlcy5cbiAgICogQHNlZSBzdG9wVGltZXJcbiAgICogQHNlZSB0aW1lU3BlbnRcbiAgICovXG4gIHB1YmxpYyBzdGFydFRpbWVyKCkge1xuICAgIGlmICh0aGlzLmlzVGltZXJTdGFydGVkIHx8IHRoaXMuaXNEZXNpZ25Nb2RlKSByZXR1cm47XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMudGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5kb1RpbWVyKCk7XG4gICAgfTtcbiAgICB0aGlzLmlzVGltZXJTdGFydGVkID0gdHJ1ZTtcbiAgICBTdXJ2ZXlUaW1lci5pbnN0YW5jZS5zdGFydCh0aGlzLnRpbWVyRnVuYyk7XG4gIH1cbiAgc3RhcnRUaW1lckZyb21VSSgpIHtcbiAgICBpZiAodGhpcy5zaG93VGltZXJQYW5lbCAhPSBcIm5vbmVcIiAmJiB0aGlzLnN0YXRlID09PSBcInJ1bm5pbmdcIikge1xuICAgICAgdGhpcy5zdGFydFRpbWVyKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBTdG9wcyB0aGUgdGltZXIuXG4gICAqIEBzZWUgc3RhcnRUaW1lclxuICAgKiBAc2VlIHRpbWVTcGVudFxuICAgKi9cbiAgcHVibGljIHN0b3BUaW1lcigpIHtcbiAgICBpZiAoIXRoaXMuaXNUaW1lclN0YXJ0ZWQpIHJldHVybjtcbiAgICB0aGlzLmlzVGltZXJTdGFydGVkID0gZmFsc2U7XG4gICAgU3VydmV5VGltZXIuaW5zdGFuY2Uuc3RvcCh0aGlzLnRpbWVyRnVuYyk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRpbWUgaW4gc2Vjb25kcyBhbiBlbmQgdXNlciBzcGVuZHMgb24gdGhlIHN1cnZleVxuICAgKiBAc2VlIHN0YXJ0VGltZXJcbiAgICogQHNlZSBQYWdlTW9kZWwudGltZVNwZW50XG4gICAqL1xuICBwdWJsaWMgdGltZVNwZW50ID0gMDtcbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgbWF4aW11bSB0aW1lIGluIHNlY29uZHMgdGhhdCBlbmQgdXNlciBoYXMgdG8gY29tcGxldGUgYSBzdXJ2ZXkuIElmIHRoZSB2YWx1ZSBpcyAwIG9yIGxlc3MsIGFuIGVuZCB1c2VyIGhhcyBubyB0aW1lIGxpbWl0IHRvIGZpbmlzaCBhIHN1cnZleS5cbiAgICogQHNlZSBzdGFydFRpbWVyXG4gICAqIEBzZWUgbWF4VGltZVRvRmluaXNoUGFnZVxuICAgKi9cbiAgcHVibGljIGdldCBtYXhUaW1lVG9GaW5pc2goKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWF4VGltZVRvRmluaXNoXCIsIDApO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4VGltZVRvRmluaXNoKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF4VGltZVRvRmluaXNoXCIsIHZhbCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgbWF4aW11bSB0aW1lIGluIHNlY29uZHMgdGhhdCBlbmQgdXNlciBoYXMgdG8gY29tcGxldGUgYSBwYWdlIGluIHRoZSBzdXJ2ZXkuIElmIHRoZSB2YWx1ZSBpcyAwIG9yIGxlc3MsIGFuIGVuZCB1c2VyIGhhcyBubyB0aW1lIGxpbWl0LlxuICAgKlxuICAgKiBZb3UgbWF5IG92ZXJyaWRlIHRoaXMgdmFsdWUgZm9yIGV2ZXJ5IHBhZ2UuXG4gICAqIEBzZWUgc3RhcnRUaW1lclxuICAgKiBAc2VlIG1heFRpbWVUb0ZpbmlzaFxuICAgKiBAc2VlIFBhZ2VNb2RlbC5tYXhUaW1lVG9GaW5pc2hcbiAgICovXG4gIHB1YmxpYyBnZXQgbWF4VGltZVRvRmluaXNoUGFnZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhUaW1lVG9GaW5pc2hQYWdlXCIsIDApO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4VGltZVRvRmluaXNoUGFnZSh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heFRpbWVUb0ZpbmlzaFBhZ2VcIiwgdmFsKTtcbiAgfVxuICBwcml2YXRlIGdldFBhZ2VNYXhUaW1lVG9GaW5pc2gocGFnZTogUGFnZU1vZGVsKSB7XG4gICAgaWYgKCFwYWdlIHx8IHBhZ2UubWF4VGltZVRvRmluaXNoIDwgMCkgcmV0dXJuIDA7XG4gICAgcmV0dXJuIHBhZ2UubWF4VGltZVRvRmluaXNoID4gMFxuICAgICAgPyBwYWdlLm1heFRpbWVUb0ZpbmlzaFxuICAgICAgOiB0aGlzLm1heFRpbWVUb0ZpbmlzaFBhZ2U7XG4gIH1cbiAgcHJvdGVjdGVkIGRvVGltZXIoKSB7XG4gICAgdmFyIHBhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlO1xuICAgIGlmIChwYWdlKSB7XG4gICAgICBwYWdlLnRpbWVTcGVudCA9IHBhZ2UudGltZVNwZW50ICsgMTtcbiAgICB9XG4gICAgdGhpcy50aW1lU3BlbnQgPSB0aGlzLnRpbWVTcGVudCArIDE7XG4gICAgdGhpcy5vblRpbWVyLmZpcmUodGhpcywge30pO1xuICAgIGlmICh0aGlzLm1heFRpbWVUb0ZpbmlzaCA+IDAgJiYgdGhpcy5tYXhUaW1lVG9GaW5pc2ggPT0gdGhpcy50aW1lU3BlbnQpIHtcbiAgICAgIHRoaXMuY29tcGxldGVMYXN0UGFnZSgpO1xuICAgIH1cbiAgICBpZiAocGFnZSkge1xuICAgICAgdmFyIHBhZ2VMaW1pdCA9IHRoaXMuZ2V0UGFnZU1heFRpbWVUb0ZpbmlzaChwYWdlKTtcbiAgICAgIGlmIChwYWdlTGltaXQgPiAwICYmIHBhZ2VMaW1pdCA9PSBwYWdlLnRpbWVTcGVudCkge1xuICAgICAgICBpZiAodGhpcy5pc0xhc3RQYWdlKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZUxhc3RQYWdlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5uZXh0UGFnZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgaW5TdXJ2ZXkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy9JU3VydmV5SW1wbGVtZW50b3JcbiAgZ2V0U3VydmV5RGF0YSgpOiBJU3VydmV5RGF0YSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZ2V0U3VydmV5KCk6IElTdXJ2ZXkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGdldFRleHRQcm9jZXNzb3IoKTogSVRleHRQcm9jZXNzb3Ige1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIC8vSVN1cnZleVRyaWdnZXJPd25lclxuICBnZXRPYmplY3RzKHBhZ2VzOiBzdHJpbmdbXSwgcXVlc3Rpb25zOiBzdHJpbmdbXSk6IGFueVtdIHtcbiAgICB2YXIgcmVzdWx0OiBhbnlbXSA9IFtdO1xuICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHJlc3VsdCwgdGhpcy5nZXRQYWdlc0J5TmFtZXMocGFnZXMpKTtcbiAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShyZXN1bHQsIHRoaXMuZ2V0UXVlc3Rpb25zQnlOYW1lcyhxdWVzdGlvbnMpKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHNldFRyaWdnZXJWYWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIGlzVmFyaWFibGU6IGJvb2xlYW4pIHtcbiAgICBpZiAoIW5hbWUpIHJldHVybjtcbiAgICBpZiAoaXNWYXJpYWJsZSkge1xuICAgICAgdGhpcy5zZXRWYXJpYWJsZShuYW1lLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSk7XG4gICAgICBpZiAoISFxdWVzdGlvbikge1xuICAgICAgICBxdWVzdGlvbi52YWx1ZSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHByb2Nlc3NvciA9IG5ldyBQcm9jZXNzVmFsdWUoKTtcbiAgICAgICAgdmFyIGZpcnN0TmFtZSA9IHByb2Nlc3Nvci5nZXRGaXJzdE5hbWUobmFtZSk7XG4gICAgICAgIGlmIChmaXJzdE5hbWUgPT0gbmFtZSkge1xuICAgICAgICAgIHRoaXMuc2V0VmFsdWUobmFtZSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghdGhpcy5nZXRRdWVzdGlvbkJ5TmFtZShmaXJzdE5hbWUpKSByZXR1cm47XG4gICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmdldFVuYmluZFZhbHVlKHRoaXMuZ2V0RmlsdGVyZWRWYWx1ZXMoKSk7XG4gICAgICAgICAgcHJvY2Vzc29yLnNldFZhbHVlKGRhdGEsIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICB0aGlzLnNldFZhbHVlKGZpcnN0TmFtZSwgZGF0YVtmaXJzdE5hbWVdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb3B5VHJpZ2dlclZhbHVlKG5hbWU6IHN0cmluZywgZnJvbU5hbWU6IHN0cmluZykge1xuICAgIGlmICghbmFtZSB8fCAhZnJvbU5hbWUpIHJldHVybjtcbiAgICB2YXIgcHJvY2Vzc29yID0gbmV3IFByb2Nlc3NWYWx1ZSgpO1xuICAgIHZhciB2YWx1ZSA9IHByb2Nlc3Nvci5nZXRWYWx1ZShmcm9tTmFtZSwgdGhpcy5nZXRGaWx0ZXJlZFZhbHVlcygpKTtcbiAgICB0aGlzLnNldFRyaWdnZXJWYWx1ZShuYW1lLCB2YWx1ZSwgZmFsc2UpO1xuICB9XG4gIHByaXZhdGUgaXNGb2N1c2luZ1F1ZXN0aW9uOiBib29sZWFuO1xuICBmb2N1c1F1ZXN0aW9uKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHZhciBxdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25CeU5hbWUobmFtZSwgdHJ1ZSk7XG4gICAgaWYgKCFxdWVzdGlvbiB8fCAhcXVlc3Rpb24uaXNWaXNpYmxlIHx8ICFxdWVzdGlvbi5wYWdlKSByZXR1cm4gZmFsc2U7XG4gICAgdGhpcy5pc0ZvY3VzaW5nUXVlc3Rpb24gPSB0cnVlO1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSA8UGFnZU1vZGVsPnF1ZXN0aW9uLnBhZ2U7XG4gICAgcXVlc3Rpb24uZm9jdXMoKTtcbiAgICB0aGlzLmlzRm9jdXNpbmdRdWVzdGlvbiA9IGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHB1YmxpYyBnZXRFbGVtZW50V3JhcHBlckNvbXBvbmVudE5hbWUoZWxlbWVudDogYW55LCByZWFzb24/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChyZWFzb24gPT09IFwibG9nby1pbWFnZVwiKSB7XG4gICAgICByZXR1cm4gXCJzdi1sb2dvLWltYWdlXCI7XG4gICAgfVxuICAgIHJldHVybiBTdXJ2ZXlNb2RlbC5UZW1wbGF0ZVJlbmRlcmVyQ29tcG9uZW50TmFtZTtcbiAgfVxuICBwdWJsaWMgZ2V0Um93V3JhcHBlckNvbXBvbmVudE5hbWUocm93OiBRdWVzdGlvblJvd01vZGVsKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU3VydmV5TW9kZWwuVGVtcGxhdGVSZW5kZXJlckNvbXBvbmVudE5hbWU7XG4gIH1cbiAgcHVibGljIGdldEVsZW1lbnRXcmFwcGVyQ29tcG9uZW50RGF0YShlbGVtZW50OiBhbnksIHJlYXNvbj86IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cbiAgcHVibGljIGdldFJvd1dyYXBwZXJDb21wb25lbnREYXRhKHJvdzogUXVlc3Rpb25Sb3dNb2RlbCk6IGFueSB7XG4gICAgcmV0dXJuIHJvdztcbiAgfVxuICBwdWJsaWMgZ2V0SXRlbVZhbHVlV3JhcHBlckNvbXBvbmVudE5hbWUoXG4gICAgaXRlbTogSXRlbVZhbHVlLFxuICAgIHF1ZXN0aW9uOiBRdWVzdGlvblNlbGVjdEJhc2VcbiAgKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU3VydmV5TW9kZWwuVGVtcGxhdGVSZW5kZXJlckNvbXBvbmVudE5hbWU7XG4gIH1cbiAgcHVibGljIGdldEl0ZW1WYWx1ZVdyYXBwZXJDb21wb25lbnREYXRhKFxuICAgIGl0ZW06IEl0ZW1WYWx1ZSxcbiAgICBxdWVzdGlvbjogUXVlc3Rpb25TZWxlY3RCYXNlXG4gICk6IGFueSB7XG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cbiAgcHVibGljIGdldE1hdHJpeENlbGxUZW1wbGF0ZURhdGEoY2VsbDogYW55KSB7XG4gICAgcmV0dXJuIGNlbGwucXVlc3Rpb247XG4gIH1cbiAgcHVibGljIHNlYXJjaFRleHQodGV4dDogc3RyaW5nKTogQXJyYXk8SUZpbmRFbGVtZW50PiB7XG4gICAgaWYgKCEhdGV4dCkgdGV4dCA9IHRleHQudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgcmVzOiBBcnJheTxJRmluZEVsZW1lbnQ+ID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLnBhZ2VzW2ldLnNlYXJjaFRleHQodGV4dCwgcmVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgc2tlbGV0b25Db21wb25lbnROYW1lID0gXCJzdi1za2VsZXRvblwiO1xuICBwdWJsaWMgZ2V0U2tlbGV0b25Db21wb25lbnROYW1lKGVsZW1lbnQ6IElTdXJ2ZXlFbGVtZW50KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5za2VsZXRvbkNvbXBvbmVudE5hbWU7XG4gIH1cbiAgLyoqXG4gICAqIFVzZSB0aGlzIG1ldGhvZCB0byBkaXNwb3NlIHN1cnZleSBtb2RlbCBwcm9wZXJseS5cbiAgICovXG4gIHB1YmxpYyBkaXNwb3NlKCkge1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSBudWxsO1xuICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgICB0aGlzLmVkaXRpbmdPYmogPSBudWxsO1xuICAgIGlmICghdGhpcy5wYWdlcykgcmV0dXJuO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYWdlc1tpXS5kaXNwb3NlKCk7XG4gICAgfVxuICAgIHRoaXMucGFnZXMuc3BsaWNlKDAsIHRoaXMucGFnZXMubGVuZ3RoKTtcbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFwic3VydmV5XCIsIFtcbiAge1xuICAgIG5hbWU6IFwibG9jYWxlXCIsXG4gICAgY2hvaWNlczogKCkgPT4ge1xuICAgICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvbi5nZXRMb2NhbGVzKHRydWUpO1xuICAgIH0sXG4gICAgb25HZXRWYWx1ZTogKG9iajogYW55KTogYW55ID0+IHtcbiAgICAgIHJldHVybiBvYmoubG9jYWxlID09IHN1cnZleUxvY2FsaXphdGlvbi5kZWZhdWx0TG9jYWxlID8gbnVsbCA6IG9iai5sb2NhbGU7XG4gICAgfSxcbiAgfSxcbiAgeyBuYW1lOiBcInRpdGxlXCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NUaXRsZVwiLCBkZXBlbmRzT246IFwibG9jYWxlXCIgfSxcbiAge1xuICAgIG5hbWU6IFwiZGVzY3JpcHRpb246dGV4dFwiLFxuICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NEZXNjcmlwdGlvblwiLFxuICAgIGRlcGVuZHNPbjogXCJsb2NhbGVcIixcbiAgfSxcbiAgeyBuYW1lOiBcImxvZ29cIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0xvZ29cIiB9LFxuICB7IG5hbWU6IFwibG9nb1dpZHRoXCIsIGRlZmF1bHQ6IFwiMzAwcHhcIiwgbWluVmFsdWU6IDAgfSxcbiAgeyBuYW1lOiBcImxvZ29IZWlnaHRcIiwgZGVmYXVsdDogXCIyMDBweFwiLCBtaW5WYWx1ZTogMCB9LFxuICB7XG4gICAgbmFtZTogXCJsb2dvRml0XCIsXG4gICAgZGVmYXVsdDogXCJjb250YWluXCIsXG4gICAgY2hvaWNlczogW1wibm9uZVwiLCBcImNvbnRhaW5cIiwgXCJjb3ZlclwiLCBcImZpbGxcIl0sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcImxvZ29Qb3NpdGlvblwiLFxuICAgIGRlZmF1bHQ6IFwibGVmdFwiLFxuICAgIGNob2ljZXM6IFtcIm5vbmVcIiwgXCJsZWZ0XCIsIFwicmlnaHRcIiwgXCJ0b3BcIiwgXCJib3R0b21cIl0sXG4gIH0sXG4gIHsgbmFtZTogXCJmb2N1c0ZpcnN0UXVlc3Rpb25BdXRvbWF0aWM6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gIHsgbmFtZTogXCJmb2N1c09uRmlyc3RFcnJvcjpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgeyBuYW1lOiBcImNvbXBsZXRlZEh0bWw6aHRtbFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jQ29tcGxldGVkSHRtbFwiIH0sXG4gIHtcbiAgICBuYW1lOiBcImNvbXBsZXRlZEJlZm9yZUh0bWw6aHRtbFwiLFxuICAgIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NDb21wbGV0ZWRCZWZvcmVIdG1sXCIsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcImNvbXBsZXRlZEh0bWxPbkNvbmRpdGlvbjpodG1sY29uZGl0aW9uc1wiLFxuICAgIGNsYXNzTmFtZTogXCJodG1sY29uZGl0aW9uaXRlbVwiLFxuICB9LFxuICB7IG5hbWU6IFwibG9hZGluZ0h0bWw6aHRtbFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jTG9hZGluZ0h0bWxcIiB9LFxuICB7IG5hbWU6IFwicGFnZXM6c3VydmV5cGFnZXNcIiwgY2xhc3NOYW1lOiBcInBhZ2VcIiB9LFxuICB7XG4gICAgbmFtZTogXCJxdWVzdGlvbnNcIixcbiAgICBhbHRlcm5hdGl2ZU5hbWU6IFwiZWxlbWVudHNcIixcbiAgICBiYXNlQ2xhc3NOYW1lOiBcInF1ZXN0aW9uXCIsXG4gICAgdmlzaWJsZTogZmFsc2UsXG4gICAgaXNMaWdodFNlcmlhbGl6YWJsZTogZmFsc2UsXG4gICAgb25HZXRWYWx1ZTogZnVuY3Rpb24gKG9iajogYW55KTogYW55IHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgb25TZXRWYWx1ZTogZnVuY3Rpb24gKG9iajogYW55LCB2YWx1ZTogYW55LCBqc29uQ29udmVydGVyOiBhbnkpIHtcbiAgICAgIG9iai5wYWdlcy5zcGxpY2UoMCwgb2JqLnBhZ2VzLmxlbmd0aCk7XG4gICAgICB2YXIgcGFnZSA9IG9iai5hZGROZXdQYWdlKFwiXCIpO1xuICAgICAganNvbkNvbnZlcnRlci50b09iamVjdCh7IHF1ZXN0aW9uczogdmFsdWUgfSwgcGFnZSk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwidHJpZ2dlcnM6dHJpZ2dlcnNcIixcbiAgICBiYXNlQ2xhc3NOYW1lOiBcInN1cnZleXRyaWdnZXJcIixcbiAgICBjbGFzc05hbWVQYXJ0OiBcInRyaWdnZXJcIixcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwiY2FsY3VsYXRlZFZhbHVlczpjYWxjdWxhdGVkdmFsdWVzXCIsXG4gICAgY2xhc3NOYW1lOiBcImNhbGN1bGF0ZWR2YWx1ZVwiLFxuICB9LFxuICB7IG5hbWU6IFwic3VydmV5SWRcIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgeyBuYW1lOiBcInN1cnZleVBvc3RJZFwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICB7IG5hbWU6IFwic3VydmV5U2hvd0RhdGFTYXZpbmc6Ym9vbGVhblwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICBcImNvb2tpZU5hbWVcIixcbiAgXCJzZW5kUmVzdWx0T25QYWdlTmV4dDpib29sZWFuXCIsXG4gIHtcbiAgICBuYW1lOiBcInNob3dOYXZpZ2F0aW9uQnV0dG9uc1wiLFxuICAgIGRlZmF1bHQ6IFwiYm90dG9tXCIsXG4gICAgY2hvaWNlczogW1wibm9uZVwiLCBcInRvcFwiLCBcImJvdHRvbVwiLCBcImJvdGhcIl0sXG4gIH0sXG4gIHsgbmFtZTogXCJzaG93UHJldkJ1dHRvbjpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgeyBuYW1lOiBcInNob3dUaXRsZTpib29sZWFuXCIsIGRlZmF1bHQ6IHRydWUgfSxcbiAgeyBuYW1lOiBcInNob3dQYWdlVGl0bGVzOmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICB7IG5hbWU6IFwic2hvd0NvbXBsZXRlZFBhZ2U6Ym9vbGVhblwiLCBkZWZhdWx0OiB0cnVlIH0sXG4gIFwibmF2aWdhdGVUb1VybFwiLFxuICB7XG4gICAgbmFtZTogXCJuYXZpZ2F0ZVRvVXJsT25Db25kaXRpb246dXJsY29uZGl0aW9uc1wiLFxuICAgIGNsYXNzTmFtZTogXCJ1cmxjb25kaXRpb25pdGVtXCIsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcInF1ZXN0aW9uc09yZGVyXCIsXG4gICAgZGVmYXVsdDogXCJpbml0aWFsXCIsXG4gICAgY2hvaWNlczogW1wiaW5pdGlhbFwiLCBcInJhbmRvbVwiXSxcbiAgfSxcbiAgXCJzaG93UGFnZU51bWJlcnM6Ym9vbGVhblwiLFxuICB7XG4gICAgbmFtZTogXCJzaG93UXVlc3Rpb25OdW1iZXJzXCIsXG4gICAgZGVmYXVsdDogXCJvblwiLFxuICAgIGNob2ljZXM6IFtcIm9uXCIsIFwib25QYWdlXCIsIFwib2ZmXCJdLFxuICB9LFxuICB7XG4gICAgbmFtZTogXCJxdWVzdGlvblRpdGxlTG9jYXRpb25cIixcbiAgICBkZWZhdWx0OiBcInRvcFwiLFxuICAgIGNob2ljZXM6IFtcInRvcFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIl0sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcInF1ZXN0aW9uRGVzY3JpcHRpb25Mb2NhdGlvblwiLFxuICAgIGRlZmF1bHQ6IFwidW5kZXJUaXRsZVwiLFxuICAgIGNob2ljZXM6IFtcInVuZGVySW5wdXRcIiwgXCJ1bmRlclRpdGxlXCJdLFxuICB9LFxuICB7IG5hbWU6IFwicXVlc3Rpb25FcnJvckxvY2F0aW9uXCIsIGRlZmF1bHQ6IFwidG9wXCIsIGNob2ljZXM6IFtcInRvcFwiLCBcImJvdHRvbVwiXSB9LFxuICB7XG4gICAgbmFtZTogXCJzaG93UHJvZ3Jlc3NCYXJcIixcbiAgICBkZWZhdWx0OiBcIm9mZlwiLFxuICAgIGNob2ljZXM6IFtcIm9mZlwiLCBcInRvcFwiLCBcImJvdHRvbVwiLCBcImJvdGhcIl0sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcInByb2dyZXNzQmFyVHlwZVwiLFxuICAgIGRlZmF1bHQ6IFwicGFnZXNcIixcbiAgICBjaG9pY2VzOiBbXG4gICAgICBcInBhZ2VzXCIsXG4gICAgICBcInF1ZXN0aW9uc1wiLFxuICAgICAgXCJyZXF1aXJlZFF1ZXN0aW9uc1wiLFxuICAgICAgXCJjb3JyZWN0UXVlc3Rpb25zXCIsXG4gICAgICBcImJ1dHRvbnNcIixcbiAgICBdLFxuICB9LFxuICB7IG5hbWU6IFwibW9kZVwiLCBkZWZhdWx0OiBcImVkaXRcIiwgY2hvaWNlczogW1wiZWRpdFwiLCBcImRpc3BsYXlcIl0gfSxcbiAgeyBuYW1lOiBcInN0b3JlT3RoZXJzQXNDb21tZW50OmJvb2xlYW5cIiwgZGVmYXVsdDogdHJ1ZSB9LFxuICB7IG5hbWU6IFwibWF4VGV4dExlbmd0aDpudW1iZXJcIiwgZGVmYXVsdDogMCwgbWluVmFsdWU6IDAgfSxcbiAgeyBuYW1lOiBcIm1heE90aGVyc0xlbmd0aDpudW1iZXJcIiwgZGVmYXVsdDogMCwgbWluVmFsdWU6IDAgfSxcbiAgXCJnb05leHRQYWdlQXV0b21hdGljOmJvb2xlYW5cIixcbiAge1xuICAgIG5hbWU6IFwiY2xlYXJJbnZpc2libGVWYWx1ZXNcIixcbiAgICBkZWZhdWx0OiBcIm9uQ29tcGxldGVcIixcbiAgICBjaG9pY2VzOiBbXCJub25lXCIsIFwib25Db21wbGV0ZVwiLCBcIm9uSGlkZGVuXCIsIFwib25IaWRkZW5Db250YWluZXJcIl0sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcImNoZWNrRXJyb3JzTW9kZVwiLFxuICAgIGRlZmF1bHQ6IFwib25OZXh0UGFnZVwiLFxuICAgIGNob2ljZXM6IFtcIm9uTmV4dFBhZ2VcIiwgXCJvblZhbHVlQ2hhbmdlZFwiLCBcIm9uVmFsdWVDaGFuZ2luZ1wiLCBcIm9uQ29tcGxldGVcIl0sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcInRleHRVcGRhdGVNb2RlXCIsXG4gICAgZGVmYXVsdDogXCJvbkJsdXJcIixcbiAgICBjaG9pY2VzOiBbXCJvbkJsdXJcIiwgXCJvblR5cGluZ1wiXSxcbiAgfSxcbiAgeyBuYW1lOiBcImF1dG9Hcm93Q29tbWVudDpib29sZWFuXCIsIGRlZmF1bHQ6IGZhbHNlIH0sXG4gIHsgbmFtZTogXCJzdGFydFN1cnZleVRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1N0YXJ0U3VydmV5VGV4dFwiIH0sXG4gIHsgbmFtZTogXCJwYWdlUHJldlRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1BhZ2VQcmV2VGV4dFwiIH0sXG4gIHsgbmFtZTogXCJwYWdlTmV4dFRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY1BhZ2VOZXh0VGV4dFwiIH0sXG4gIHsgbmFtZTogXCJjb21wbGV0ZVRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0NvbXBsZXRlVGV4dFwiIH0sXG4gIHsgbmFtZTogXCJwcmV2aWV3VGV4dFwiLCBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUHJldmlld1RleHRcIiB9LFxuICB7IG5hbWU6IFwiZWRpdFRleHRcIiwgc2VyaWFsaXphdGlvblByb3BlcnR5OiBcImxvY0VkaXRUZXh0XCIgfSxcbiAgeyBuYW1lOiBcInJlcXVpcmVkVGV4dFwiLCBkZWZhdWx0OiBcIipcIiB9LFxuICB7XG4gICAgbmFtZTogXCJxdWVzdGlvblN0YXJ0SW5kZXhcIixcbiAgICBkZXBlbmRzT246IFtcInNob3dRdWVzdGlvbk51bWJlcnNcIl0sXG4gICAgdmlzaWJsZUlmOiBmdW5jdGlvbiAoc3VydmV5OiBhbnkpIHtcbiAgICAgIHJldHVybiAhc3VydmV5IHx8IHN1cnZleS5zaG93UXVlc3Rpb25OdW1iZXJzICE9PSBcIm9mZlwiO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcInF1ZXN0aW9uVGl0bGVQYXR0ZXJuXCIsXG4gICAgZGVmYXVsdDogXCJudW1UaXRsZVJlcXVpcmVcIixcbiAgICBkZXBlbmRzT246IFtcInF1ZXN0aW9uU3RhcnRJbmRleFwiLCBcInJlcXVpcmVkVGV4dFwiXSxcbiAgICBjaG9pY2VzOiAob2JqOiBhbnkpID0+IHtcbiAgICAgIGlmICghb2JqKSByZXR1cm4gW107XG4gICAgICByZXR1cm4gb2JqLmdldFF1ZXN0aW9uVGl0bGVQYXR0ZXJuT3B0aW9ucygpO1xuICAgIH0sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcInF1ZXN0aW9uVGl0bGVUZW1wbGF0ZVwiLFxuICAgIHZpc2libGU6IGZhbHNlLFxuICAgIGlzU2VyaWFsaXphYmxlOiBmYWxzZSxcbiAgICBzZXJpYWxpemF0aW9uUHJvcGVydHk6IFwibG9jUXVlc3Rpb25UaXRsZVRlbXBsYXRlXCIsXG4gIH0sXG4gIHsgbmFtZTogXCJmaXJzdFBhZ2VJc1N0YXJ0ZWQ6Ym9vbGVhblwiLCBkZWZhdWx0OiBmYWxzZSB9LFxuICB7XG4gICAgbmFtZTogXCJpc1NpbmdsZVBhZ2U6Ym9vbGVhblwiLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgIHZpc2libGU6IGZhbHNlLFxuICAgIGlzU2VyaWFsaXphYmxlOiBmYWxzZSxcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwicXVlc3Rpb25zT25QYWdlTW9kZVwiLFxuICAgIGRlZmF1bHQ6IFwic3RhbmRhcmRcIixcbiAgICBjaG9pY2VzOiBbXCJzaW5nbGVQYWdlXCIsIFwic3RhbmRhcmRcIiwgXCJxdWVzdGlvblBlclBhZ2VcIl0sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcInNob3dQcmV2aWV3QmVmb3JlQ29tcGxldGVcIixcbiAgICBkZWZhdWx0OiBcIm5vUHJldmlld1wiLFxuICAgIGNob2ljZXM6IFtcIm5vUHJldmlld1wiLCBcInNob3dBbGxRdWVzdGlvbnNcIiwgXCJzaG93QW5zd2VyZWRRdWVzdGlvbnNcIl0sXG4gIH0sXG4gIHsgbmFtZTogXCJtYXhUaW1lVG9GaW5pc2g6bnVtYmVyXCIsIGRlZmF1bHQ6IDAsIG1pblZhbHVlOiAwIH0sXG4gIHsgbmFtZTogXCJtYXhUaW1lVG9GaW5pc2hQYWdlOm51bWJlclwiLCBkZWZhdWx0OiAwLCBtaW5WYWx1ZTogMCB9LFxuICB7XG4gICAgbmFtZTogXCJzaG93VGltZXJQYW5lbFwiLFxuICAgIGRlZmF1bHQ6IFwibm9uZVwiLFxuICAgIGNob2ljZXM6IFtcIm5vbmVcIiwgXCJ0b3BcIiwgXCJib3R0b21cIl0sXG4gIH0sXG4gIHtcbiAgICBuYW1lOiBcInNob3dUaW1lclBhbmVsTW9kZVwiLFxuICAgIGRlZmF1bHQ6IFwiYWxsXCIsXG4gICAgY2hvaWNlczogW1wiYWxsXCIsIFwicGFnZVwiLCBcInN1cnZleVwiXSxcbiAgfSxcbiAge1xuICAgIG5hbWU6IFwid2lkdGhNb2RlXCIsXG4gICAgZGVmYXVsdDogXCJhdXRvXCIsXG4gICAgY2hvaWNlczogW1wiYXV0b1wiLCBcInN0YXRpY1wiLCBcInJlc3BvbnNpdmVcIl0sXG4gIH1cbl0pO1xuIiwiaW1wb3J0IHsgQ3NzQ2xhc3NCdWlsZGVyIH0gZnJvbSBcIi4vdXRpbHMvY3NzQ2xhc3NCdWlsZGVyXCI7XG5cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlQcm9ncmVzc01vZGVsIHtcbiAgcHVibGljIHN0YXRpYyBnZXRQcm9ncmVzc1RleHRJbkJhckNzcyhjc3M6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBDc3NDbGFzc0J1aWxkZXIoKVxuICAgICAgLmFwcGVuZChjc3MucHJvZ3Jlc3NUZXh0KVxuICAgICAgLmFwcGVuZChjc3MucHJvZ3Jlc3NUZXh0SW5CYXIpXG4gICAgICAudG9TdHJpbmcoKTtcbiAgfVxuICBwdWJsaWMgc3RhdGljIGdldFByb2dyZXNzVGV4dFVuZGVyQmFyQ3NzKGNzczogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IENzc0NsYXNzQnVpbGRlcigpXG4gICAgICAuYXBwZW5kKGNzcy5wcm9ncmVzc1RleHQpXG4gICAgICAuYXBwZW5kKGNzcy5wcm9ncmVzc1RleHRVbmRlckJhcilcbiAgICAgIC50b1N0cmluZygpO1xuICB9XG59IiwiaW1wb3J0IHsgU3VydmV5TW9kZWwgfSBmcm9tIFwiLi9zdXJ2ZXlcIjtcbmltcG9ydCB7IENzc0NsYXNzQnVpbGRlciB9IGZyb20gXCIuL3V0aWxzL2Nzc0NsYXNzQnVpbGRlclwiO1xuXG5leHBvcnQgY2xhc3MgU3VydmV5UHJvZ3Jlc3NCdXR0b25zTW9kZWwge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN1cnZleTogU3VydmV5TW9kZWwpIHtcbiAgfVxuICBwdWJsaWMgaXNMaXN0RWxlbWVudENsaWNrYWJsZShpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnN1cnZleS5vblNlcnZlclZhbGlkYXRlUXVlc3Rpb25zIHx8XG4gICAgICB0aGlzLnN1cnZleS5vblNlcnZlclZhbGlkYXRlUXVlc3Rpb25zLmlzRW1wdHkgfHxcbiAgICAgIHRoaXMuc3VydmV5LmNoZWNrRXJyb3JzTW9kZSA9PT0gXCJvbkNvbXBsZXRlXCIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gaW5kZXggPD0gdGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2VObyArIDE7XG4gIH1cbiAgcHVibGljIGdldExpc3RFbGVtZW50Q3NzKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmIChpbmRleCA+PSB0aGlzLnN1cnZleS52aXNpYmxlUGFnZXMubGVuZ3RoKSByZXR1cm47XG4gICAgcmV0dXJuIG5ldyBDc3NDbGFzc0J1aWxkZXIoKVxuICAgICAgLmFwcGVuZCh0aGlzLnN1cnZleS5jc3MucHJvZ3Jlc3NCdXR0b25zTGlzdEVsZW1lbnRQYXNzZWQsIHRoaXMuc3VydmV5LnZpc2libGVQYWdlc1tpbmRleF0ucGFzc2VkKVxuICAgICAgLmFwcGVuZCh0aGlzLnN1cnZleS5jc3MucHJvZ3Jlc3NCdXR0b25zTGlzdEVsZW1lbnRDdXJyZW50LCB0aGlzLnN1cnZleS5jdXJyZW50UGFnZU5vID09PSBpbmRleClcbiAgICAgIC5hcHBlbmQodGhpcy5zdXJ2ZXkuY3NzLnByb2dyZXNzQnV0dG9uc0xpc3RFbGVtZW50Tm9uQ2xpY2thYmxlLCAhdGhpcy5pc0xpc3RFbGVtZW50Q2xpY2thYmxlKGluZGV4KSlcbiAgICAgIC50b1N0cmluZygpO1xuICB9XG4gIHB1YmxpYyBnZXRTY3JvbGxCdXR0b25Dc3MoaGFzU2Nyb2xsZXI6IGJvb2xlYW4sIGlzTGVmdFNjcm9sbDogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBDc3NDbGFzc0J1aWxkZXIoKVxuICAgICAgLmFwcGVuZCh0aGlzLnN1cnZleS5jc3MucHJvZ3Jlc3NCdXR0b25zSW1hZ2VCdXR0b25MZWZ0LCBpc0xlZnRTY3JvbGwpXG4gICAgICAuYXBwZW5kKHRoaXMuc3VydmV5LmNzcy5wcm9ncmVzc0J1dHRvbnNJbWFnZUJ1dHRvblJpZ2h0LCAhaXNMZWZ0U2Nyb2xsKVxuICAgICAgLmFwcGVuZCh0aGlzLnN1cnZleS5jc3MucHJvZ3Jlc3NCdXR0b25zSW1hZ2VCdXR0b25IaWRkZW4sICFoYXNTY3JvbGxlcilcbiAgICAgIC50b1N0cmluZygpO1xuICB9XG4gIHB1YmxpYyBjbGlja0xpc3RFbGVtZW50KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdXJ2ZXkuaXNEZXNpZ25Nb2RlKSByZXR1cm47XG4gICAgaWYgKGluZGV4IDwgdGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2VObykge1xuICAgICAgdGhpcy5zdXJ2ZXkuY3VycmVudFBhZ2VObyA9IGluZGV4O1xuICAgIH1cbiAgICBlbHNlIGlmIChpbmRleCA+IHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlTm8pIHtcbiAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IHRoaXMuc3VydmV5LmN1cnJlbnRQYWdlTm87IGkgPCBpbmRleDsgaSsrKSB7XG4gICAgICAgIGlmICghdGhpcy5zdXJ2ZXkubmV4dFBhZ2UoKSkgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBlbmdsaXNoU3RyaW5ncyB9IGZyb20gXCIuL2xvY2FsaXphdGlvbi9lbmdsaXNoXCI7XG5cbmV4cG9ydCB2YXIgc3VydmV5TG9jYWxpemF0aW9uID0ge1xuICBjdXJyZW50TG9jYWxlVmFsdWU6IFwiXCIsXG4gIGRlZmF1bHRMb2NhbGVWYWx1ZTogXCJlblwiLFxuICBsb2NhbGVzOiA8eyBbaW5kZXg6IHN0cmluZ106IGFueSB9Pnt9LFxuICBsb2NhbGVOYW1lczogPHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfT57fSxcbiAgc3VwcG9ydGVkTG9jYWxlczogPEFycmF5PGFueT4+W10sXG4gIGdldCBjdXJyZW50TG9jYWxlKCkge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRMb2NhbGVWYWx1ZSA9PT0gdGhpcy5kZWZhdWx0TG9jYWxlVmFsdWVcbiAgICAgID8gXCJcIlxuICAgICAgOiB0aGlzLmN1cnJlbnRMb2NhbGVWYWx1ZTtcbiAgfSxcbiAgc2V0IGN1cnJlbnRMb2NhbGUodmFsOiBzdHJpbmcpIHtcbiAgICBpZiAodmFsID09PSBcImN6XCIpIHZhbCA9IFwiY3NcIjtcbiAgICB0aGlzLmN1cnJlbnRMb2NhbGVWYWx1ZSA9IHZhbDtcbiAgfSxcbiAgZ2V0IGRlZmF1bHRMb2NhbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdExvY2FsZVZhbHVlO1xuICB9LFxuICBzZXQgZGVmYXVsdExvY2FsZSh2YWw6IHN0cmluZykge1xuICAgIGlmICh2YWwgPT09IFwiY3pcIikgdmFsID0gXCJjc1wiO1xuICAgIHRoaXMuZGVmYXVsdExvY2FsZVZhbHVlID0gdmFsO1xuICB9LFxuICBnZXRMb2NhbGVTdHJpbmdzKGxvYzogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbGVzW2xvY107XG4gIH0sXG4gIGdldEN1cnJlbnRTdHJpbmdzKCk6IGFueSB7XG4gICAgdmFyIGxvYyA9IHRoaXMuY3VycmVudExvY2FsZVxuICAgICAgPyB0aGlzLmxvY2FsZXNbdGhpcy5jdXJyZW50TG9jYWxlXVxuICAgICAgOiB0aGlzLmxvY2FsZXNbdGhpcy5kZWZhdWx0TG9jYWxlXTtcbiAgICBpZiAoIWxvYykgbG9jID0gdGhpcy5sb2NhbGVzW3RoaXMuZGVmYXVsdExvY2FsZV07XG4gICAgcmV0dXJuIGxvYztcbiAgfSxcbiAgZ2V0U3RyaW5nOiBmdW5jdGlvbiAoc3RyTmFtZTogc3RyaW5nKSB7XG4gICAgdmFyIGxvYyA9IHRoaXMuZ2V0Q3VycmVudFN0cmluZ3MoKTtcbiAgICBpZiAoIWxvY1tzdHJOYW1lXSkgbG9jID0gdGhpcy5sb2NhbGVzW3RoaXMuZGVmYXVsdExvY2FsZV07XG4gICAgdmFyIHJlc3VsdCA9IGxvY1tzdHJOYW1lXTtcbiAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMubG9jYWxlc1tcImVuXCJdW3N0ck5hbWVdO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LFxuICBnZXRMb2NhbGVzOiBmdW5jdGlvbiAocmVtb3ZlRGVmYXVsdExvYzogYm9vbGVhbiA9IGZhbHNlKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHJlcy5wdXNoKFwiXCIpO1xuICAgIHZhciBsb2NzID0gdGhpcy5sb2NhbGVzO1xuICAgIGlmICh0aGlzLnN1cHBvcnRlZExvY2FsZXMgJiYgdGhpcy5zdXBwb3J0ZWRMb2NhbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxvY3MgPSB7fTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zdXBwb3J0ZWRMb2NhbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxvY3NbdGhpcy5zdXBwb3J0ZWRMb2NhbGVzW2ldXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIGtleSBpbiBsb2NzKSB7XG4gICAgICBpZiAocmVtb3ZlRGVmYXVsdExvYyAmJiBrZXkgPT0gdGhpcy5kZWZhdWx0TG9jYWxlKSBjb250aW51ZTtcbiAgICAgIHJlcy5wdXNoKGtleSk7XG4gICAgfVxuICAgIHZhciBsb2NOYW1lID0gKGxvYzogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgIGlmICghbG9jKSByZXR1cm4gXCJcIjtcbiAgICAgIHZhciByZXMgPSAoPGFueT5zdXJ2ZXlMb2NhbGl6YXRpb24pLmxvY2FsZU5hbWVzW2xvY107XG4gICAgICBpZiAoIXJlcykgcmVzID0gbG9jO1xuICAgICAgcmV0dXJuIHJlcy50b0xvd2VyQ2FzZSgpO1xuICAgIH07XG4gICAgcmVzLnNvcnQoKGEsIGIpOiBudW1iZXIgPT4ge1xuICAgICAgdmFyIHN0cjEgPSBsb2NOYW1lKGEpO1xuICAgICAgdmFyIHN0cjIgPSBsb2NOYW1lKGIpO1xuICAgICAgaWYgKHN0cjEgPT09IHN0cjIpIHJldHVybiAwO1xuICAgICAgcmV0dXJuIHN0cjEgPCBzdHIyID8gLTEgOiAxO1xuICAgIH0pO1xuICAgIHJldHVybiByZXM7XG4gIH0sXG59O1xuXG5leHBvcnQgdmFyIHN1cnZleVN0cmluZ3MgPSBlbmdsaXNoU3RyaW5ncztcbig8YW55PnN1cnZleUxvY2FsaXphdGlvbikubG9jYWxlc1tcImVuXCJdID0gZW5nbGlzaFN0cmluZ3M7XG4oPGFueT5zdXJ2ZXlMb2NhbGl6YXRpb24pLmxvY2FsZU5hbWVzW1wiZW5cIl0gPSBcImVuZ2xpc2hcIjtcbiIsImltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBTdXJ2ZXlNb2RlbCB9IGZyb20gXCIuL3N1cnZleVwiO1xuaW1wb3J0IHsgTG9jYWxpemFibGVTdHJpbmcgfSBmcm9tIFwiLi9sb2NhbGl6YWJsZXN0cmluZ1wiO1xuXG4vKipcbiAqIEEgTW9kZWwgZm9yIGEgc3VydmV5IHJ1bm5pbmcgaW4gdGhlIFdpbmRvdy5cbiAqL1xuZXhwb3J0IGNsYXNzIFN1cnZleVdpbmRvd01vZGVsIGV4dGVuZHMgQmFzZSB7XG4gIHB1YmxpYyBzdGF0aWMgc3VydmV5RWxlbWVudE5hbWUgPSBcIndpbmRvd1N1cnZleUpTXCI7XG4gIHN1cnZleVZhbHVlOiBTdXJ2ZXlNb2RlbDtcbiAgd2luZG93RWxlbWVudDogSFRNTERpdkVsZW1lbnQ7XG5cbiAgdGVtcGxhdGVWYWx1ZTogc3RyaW5nO1xuICBleHBhbmRlZENoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgc2hvd2luZ0NoYW5nZWRDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgY2xvc2VXaW5kb3dPbkNvbXBsZXRlQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoanNvbk9iajogYW55LCBpbml0aWFsTW9kZWw6IFN1cnZleU1vZGVsID0gbnVsbCkge1xuICAgIHN1cGVyKCk7XG4gICAgaWYgKGluaXRpYWxNb2RlbCkge1xuICAgICAgdGhpcy5zdXJ2ZXlWYWx1ZSA9IGluaXRpYWxNb2RlbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdXJ2ZXlWYWx1ZSA9IHRoaXMuY3JlYXRlU3VydmV5KGpzb25PYmopO1xuICAgIH1cbiAgICB0aGlzLnN1cnZleVZhbHVlLnNob3dUaXRsZSA9IGZhbHNlO1xuICAgIGlmIChcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgZG9jdW1lbnQpIHtcbiAgICAgIHRoaXMud2luZG93RWxlbWVudCA9IDxIVE1MRGl2RWxlbWVudD5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIH1cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5zdXJ2ZXkub25Db21wbGV0ZS5hZGQoZnVuY3Rpb24gKHN1cnZleSwgb3B0aW9ucykge1xuICAgICAgc2VsZi5vblN1cnZleUNvbXBsZXRlKCk7XG4gICAgfSk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJ3aW5kb3dcIjtcbiAgfVxuICAvKipcbiAgICogQSBzdXJ2ZXkgb2JqZWN0LlxuICAgKiBAc2VlIFN1cnZleU1vZGVsXG4gICAqL1xuICBwdWJsaWMgZ2V0IHN1cnZleSgpOiBTdXJ2ZXlNb2RlbCB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5VmFsdWU7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGlzIHZhbHVlIHRvIG5lZ2F0aXZlIHZhbHVlLCBmb3IgZXhhbXBsZSAtMSwgdG8gYXZvaWQgY2xvc2luZyB0aGUgd2luZG93IG9uIGNvbXBsZXRpbmcgdGhlIHN1cnZleS4gTGVhdmUgaXQgZXF1YWxzIHRvIDAgKGRlZmF1bHQgdmFsdWUpIHRvIGNsb3NlIHRoZSB3aW5kb3cgaW1tZWRpYXRlbHksIG9yIHNldCBpdCB0byAzLCA1LCAxMCwgLi4uIHRvIGNsb3NlIHRoZSB3aW5kb3cgaW4gMywgNSwgMTAgc2Vjb25kcy5cbiAgICovXG4gIHB1YmxpYyBjbG9zZU9uQ29tcGxldGVUaW1lb3V0OiBudW1iZXIgPSAwO1xuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB3aW5kb3cgaXMgY3VycmVudGx5IHNob3dpbmcuIFNldCBpdCB0byB0cnVlIHRvIHNob3cgdGhlIHdpbmRvdyBhbmQgZmFsc2UgdG8gaGlkZSBpdC5cbiAgICogQHNlZSBzaG93XG4gICAqIEBzZWUgaGlkZVxuICAgKi9cbiAgcHVibGljIGdldCBpc1Nob3dpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImlzU2hvd2luZ1wiLCBmYWxzZSk7XG4gIH1cbiAgcHVibGljIHNldCBpc1Nob3dpbmcodmFsOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuaXNTaG93aW5nID09IHZhbCkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImlzU2hvd2luZ1wiLCB2YWwpO1xuICAgIGlmICh0aGlzLnNob3dpbmdDaGFuZ2VkQ2FsbGJhY2spIHRoaXMuc2hvd2luZ0NoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIC8qKlxuICAgKiBTaG93IHRoZSB3aW5kb3dcbiAgICogQHNlZSBoaWRlXG4gICAqIEBzZWUgaXNTaG93aW5nXG4gICAqL1xuICBwdWJsaWMgc2hvdygpIHtcbiAgICB0aGlzLmlzU2hvd2luZyA9IHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIEhpZGUgdGhlIHdpbmRvd1xuICAgKiBAc2VlIHNob3dcbiAgICogQHNlZSBpc1Nob3dpbmdcbiAgICovXG4gIHB1YmxpYyBoaWRlKCkge1xuICAgIHRoaXMuaXNTaG93aW5nID0gZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgd2luZG93IGlzIGV4cGFuZGVkLiBTZXQgaXQgdG8gdHJ1ZSB0byBleHBhbmQgdGhlIHdpbmRvdyBvciBmYWxzZSB0byBjb2xsYXBzZSBpdC5cbiAgICogQHNlZSBleHBhbmRcbiAgICogQHNlZSBjb2xsYXBzZVxuICAgKi9cbiAgcHVibGljIGdldCBpc0V4cGFuZGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc0V4cGFuZGVkXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlzRXhwYW5kZWQodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNFeHBhbmRlZFwiLCB2YWwpO1xuICAgIGlmICghdGhpcy5pc0xvYWRpbmdGcm9tSnNvbiAmJiB0aGlzLmV4cGFuZGVkQ2hhbmdlZENhbGxiYWNrKVxuICAgICAgdGhpcy5leHBhbmRlZENoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgd2luZG93IGFuZCBzdXJ2ZXkgdGl0bGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VydmV5LnRpdGxlO1xuICB9XG4gIHB1YmxpYyBzZXQgdGl0bGUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc3VydmV5LnRpdGxlID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGxvY1RpdGxlKCk6IExvY2FsaXphYmxlU3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zdXJ2ZXkubG9jVGl0bGU7XG4gIH1cbiAgLyoqXG4gICAqIEV4cGFuZCB0aGUgd2luZG93IHRvIHNob3cgdGhlIHN1cnZleS5cbiAgICovXG4gIHB1YmxpYyBleHBhbmQoKSB7XG4gICAgdGhpcy5leHBhbmRjb2xsYXBzZSh0cnVlKTtcbiAgfVxuICAvKipcbiAgICogQ29sbGFwc2UgdGhlIHdpbmRvdyBhbmQgc2hvdyBzdXJ2ZXkgdGl0bGUgb25seS5cbiAgICovXG4gIHB1YmxpYyBjb2xsYXBzZSgpIHtcbiAgICB0aGlzLmV4cGFuZGNvbGxhcHNlKGZhbHNlKTtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlU3VydmV5KGpzb25PYmo6IGFueSk6IFN1cnZleU1vZGVsIHtcbiAgICByZXR1cm4gbmV3IFN1cnZleU1vZGVsKGpzb25PYmopO1xuICB9XG4gIHByb3RlY3RlZCBleHBhbmRjb2xsYXBzZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuaXNFeHBhbmRlZCA9IHZhbHVlO1xuICB9XG4gIHByb3RlY3RlZCBvblN1cnZleUNvbXBsZXRlKCkge1xuICAgIGlmICh0aGlzLmNsb3NlT25Db21wbGV0ZVRpbWVvdXQgPCAwKSByZXR1cm47XG4gICAgaWYgKHRoaXMuY2xvc2VPbkNvbXBsZXRlVGltZW91dCA9PSAwKSB7XG4gICAgICB0aGlzLmNsb3NlV2luZG93T25Db21wbGV0ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICB2YXIgdGltZXJJZDogYW55ID0gbnVsbDtcbiAgICAgIHZhciBmdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLmNsb3NlV2luZG93T25Db21wbGV0ZSgpO1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHRpbWVySWQpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdGltZXJJZCA9XG4gICAgICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgICA/IHdpbmRvdy5zZXRJbnRlcnZhbChmdW5jLCB0aGlzLmNsb3NlT25Db21wbGV0ZVRpbWVvdXQgKiAxMDAwKVxuICAgICAgICAgIDogMDtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGNsb3NlV2luZG93T25Db21wbGV0ZSgpIHtcbiAgICBpZiAoISF0aGlzLmNsb3NlV2luZG93T25Db21wbGV0ZUNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmNsb3NlV2luZG93T25Db21wbGV0ZUNhbGxiYWNrKCk7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBFdmVudCB9IGZyb20gXCIuL2Jhc2VcIjtcblxuZXhwb3J0IHZhciBzdXJ2ZXlUaW1lckZ1bmN0aW9ucyA9IHtcbiAgc2V0VGltZW91dDogZnVuY3Rpb24gKGZ1bmM6ICgpID0+IGFueSk6IG51bWJlciB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiAwO1xuICAgIHJldHVybiB3aW5kb3cuc2V0VGltZW91dChmdW5jLCAxMDAwKTtcbiAgfSxcbiAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbiAodGltZXJJZDogbnVtYmVyKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcbiAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICB9LFxufTtcblxuZXhwb3J0IGNsYXNzIFN1cnZleVRpbWVyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2VWYWx1ZTogU3VydmV5VGltZXIgPSBudWxsO1xuICBwdWJsaWMgc3RhdGljIGdldCBpbnN0YW5jZSgpIHtcbiAgICBpZiAoIVN1cnZleVRpbWVyLmluc3RhbmNlVmFsdWUpIHtcbiAgICAgIFN1cnZleVRpbWVyLmluc3RhbmNlVmFsdWUgPSBuZXcgU3VydmV5VGltZXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIFN1cnZleVRpbWVyLmluc3RhbmNlVmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBsaXN0ZW5lckNvdW50ZXIgPSAwO1xuICBwcml2YXRlIHRpbWVySWQgPSAtMTtcbiAgcHVibGljIG9uVGltZXI6IEV2ZW50PCgpID0+IGFueSwgYW55PiA9IG5ldyBFdmVudDwoKSA9PiBhbnksIGFueT4oKTtcbiAgcHVibGljIHN0YXJ0KGZ1bmM6ICgpID0+IGFueSA9IG51bGwpIHtcbiAgICBpZiAoZnVuYykge1xuICAgICAgdGhpcy5vblRpbWVyLmFkZChmdW5jKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGltZXJJZCA8IDApIHtcbiAgICAgIHRoaXMudGltZXJJZCA9IHN1cnZleVRpbWVyRnVuY3Rpb25zLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmRvVGltZXIoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmxpc3RlbmVyQ291bnRlcisrO1xuICB9XG4gIHB1YmxpYyBzdG9wKGZ1bmM6ICgpID0+IGFueSA9IG51bGwpIHtcbiAgICBpZiAoZnVuYykge1xuICAgICAgdGhpcy5vblRpbWVyLnJlbW92ZShmdW5jKTtcbiAgICB9XG4gICAgdGhpcy5saXN0ZW5lckNvdW50ZXItLTtcbiAgICBpZiAodGhpcy5saXN0ZW5lckNvdW50ZXIgPT0gMCAmJiB0aGlzLnRpbWVySWQgPiAtMSkge1xuICAgICAgc3VydmV5VGltZXJGdW5jdGlvbnMuY2xlYXJUaW1lb3V0KHRoaXMudGltZXJJZCk7XG4gICAgICB0aGlzLnRpbWVySWQgPSAtMTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGRvVGltZXIoKSB7XG4gICAgaWYodGhpcy5vblRpbWVyLmlzRW1wdHkgfHwgdGhpcy5saXN0ZW5lckNvdW50ZXIgPT0gMCkge1xuICAgICAgdGhpcy50aW1lcklkID0gLTE7XG4gICAgfVxuICAgIGlmICh0aGlzLnRpbWVySWQgPCAwKSByZXR1cm47XG4gICAgY29uc3QgcHJldkl0ZW0gPSB0aGlzLnRpbWVySWQ7XG4gICAgdGhpcy5vblRpbWVyLmZpcmUodGhpcywge30pO1xuICAgIC8vV2UgaGF2ZSB0byBjaGVjayB0aGF0IHdlIGhhdmUgdGhlIHNhbWUgdGltZXJJZFxuICAgIC8vSXQgY291bGQgYmUgY2hhbmdlZCBkdXJpbmcgZXZlbnRzIGV4ZWN1dGlvbiBhbmQgaXQgd2lsbCBsZWFkIHRvIGRvdWJsZSB0aW1lciBldmVudHNcbiAgICBpZihwcmV2SXRlbSAhPT0gdGhpcy50aW1lcklkKSByZXR1cm47XG4gICAgdGhpcy50aW1lcklkID0gc3VydmV5VGltZXJGdW5jdGlvbnMuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmRvVGltZXIoKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vcXVlc3Rpb25cIjtcbmltcG9ydCB7IFBhbmVsTW9kZWwgfSBmcm9tIFwiLi9wYW5lbFwiO1xuaW1wb3J0IHsgSVN1cnZleSwgSVRleHRQcm9jZXNzb3IgfSBmcm9tIFwiLi9iYXNlLWludGVyZmFjZXNcIjtcbmltcG9ydCB7IFByb2Nlc3NWYWx1ZSB9IGZyb20gXCIuL2NvbmRpdGlvblByb2Nlc3NWYWx1ZVwiO1xuXG5leHBvcnQgY2xhc3MgVGV4dFByZVByb2Nlc3Nvckl0ZW0ge1xuICBwdWJsaWMgc3RhcnQ6IG51bWJlcjtcbiAgcHVibGljIGVuZDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgVGV4dFByZVByb2Nlc3NvclZhbHVlIHtcbiAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZywgcHVibGljIHJldHVybkRpc3BsYXlWYWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuaXNFeGlzdHMgPSBmYWxzZTtcbiAgICB0aGlzLmNhblByb2Nlc3MgPSB0cnVlO1xuICB9XG4gIHB1YmxpYyB2YWx1ZTogYW55O1xuICBwdWJsaWMgaXNFeGlzdHM6IGJvb2xlYW47XG4gIHB1YmxpYyBjYW5Qcm9jZXNzOiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgVGV4dFByZVByb2Nlc3NvciB7XG4gIHByaXZhdGUgaGFzQWxsVmFsdWVzT25MYXN0UnVuVmFsdWU6IGJvb2xlYW47XG4gIHB1YmxpYyBvblByb2Nlc3M6ICh0ZXh0VmFsdWU6IFRleHRQcmVQcm9jZXNzb3JWYWx1ZSkgPT4gdm9pZDtcbiAgY29uc3RydWN0b3IoKSB7fVxuICBwdWJsaWMgcHJvY2VzcyhcbiAgICB0ZXh0OiBzdHJpbmcsXG4gICAgcmV0dXJuRGlzcGxheVZhbHVlOiBib29sZWFuID0gZmFsc2UsXG4gICAgZG9FbmNvZGluZzogYm9vbGVhbiA9IGZhbHNlXG4gICk6IHN0cmluZyB7XG4gICAgdGhpcy5oYXNBbGxWYWx1ZXNPbkxhc3RSdW5WYWx1ZSA9IHRydWU7XG4gICAgaWYgKCF0ZXh0KSByZXR1cm4gdGV4dDtcbiAgICBpZiAoIXRoaXMub25Qcm9jZXNzKSByZXR1cm4gdGV4dDtcbiAgICB2YXIgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKHRleHQpO1xuICAgIGZvciAodmFyIGkgPSBpdGVtcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgIHZhciBuYW1lID0gdGhpcy5nZXROYW1lKHRleHQuc3Vic3RyaW5nKGl0ZW0uc3RhcnQgKyAxLCBpdGVtLmVuZCkpO1xuICAgICAgaWYgKCFuYW1lKSBjb250aW51ZTtcbiAgICAgIHZhciB0ZXh0VmFsdWUgPSBuZXcgVGV4dFByZVByb2Nlc3NvclZhbHVlKG5hbWUsIHJldHVybkRpc3BsYXlWYWx1ZSk7XG4gICAgICB0aGlzLm9uUHJvY2Vzcyh0ZXh0VmFsdWUpO1xuICAgICAgaWYgKCF0ZXh0VmFsdWUuaXNFeGlzdHMpIHtcbiAgICAgICAgaWYgKHRleHRWYWx1ZS5jYW5Qcm9jZXNzKSB7XG4gICAgICAgICAgdGhpcy5oYXNBbGxWYWx1ZXNPbkxhc3RSdW5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKEhlbHBlcnMuaXNWYWx1ZUVtcHR5KHRleHRWYWx1ZS52YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5oYXNBbGxWYWx1ZXNPbkxhc3RSdW5WYWx1ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdmFyIHJlcGxhY2VkVmFsdWUgPSAhSGVscGVycy5pc1ZhbHVlRW1wdHkodGV4dFZhbHVlLnZhbHVlKVxuICAgICAgICA/IHRleHRWYWx1ZS52YWx1ZVxuICAgICAgICA6IFwiXCI7XG4gICAgICBpZiAoZG9FbmNvZGluZykge1xuICAgICAgICByZXBsYWNlZFZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHJlcGxhY2VkVmFsdWUpO1xuICAgICAgfVxuICAgICAgdGV4dCA9XG4gICAgICAgIHRleHQuc3Vic3RyKDAsIGl0ZW0uc3RhcnQpICsgcmVwbGFjZWRWYWx1ZSArIHRleHQuc3Vic3RyKGl0ZW0uZW5kICsgMSk7XG4gICAgfVxuICAgIHJldHVybiB0ZXh0O1xuICB9XG4gIHB1YmxpYyBwcm9jZXNzVmFsdWUoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHJldHVybkRpc3BsYXlWYWx1ZTogYm9vbGVhblxuICApOiBUZXh0UHJlUHJvY2Vzc29yVmFsdWUge1xuICAgIHZhciB0ZXh0VmFsdWUgPSBuZXcgVGV4dFByZVByb2Nlc3NvclZhbHVlKG5hbWUsIHJldHVybkRpc3BsYXlWYWx1ZSk7XG4gICAgaWYgKCEhdGhpcy5vblByb2Nlc3MpIHtcbiAgICAgIHRoaXMub25Qcm9jZXNzKHRleHRWYWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB0ZXh0VmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCBoYXNBbGxWYWx1ZXNPbkxhc3RSdW4oKSB7XG4gICAgcmV0dXJuICEhdGhpcy5oYXNBbGxWYWx1ZXNPbkxhc3RSdW5WYWx1ZTtcbiAgfVxuICBwcml2YXRlIGdldEl0ZW1zKHRleHQ6IHN0cmluZyk6IEFycmF5PFRleHRQcmVQcm9jZXNzb3JJdGVtPiB7XG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgdmFyIGxlbmd0aCA9IHRleHQubGVuZ3RoO1xuICAgIHZhciBzdGFydCA9IC0xO1xuICAgIHZhciBjaCA9IFwiXCI7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgY2ggPSB0ZXh0W2ldO1xuICAgICAgaWYgKGNoID09IFwie1wiKSBzdGFydCA9IGk7XG4gICAgICBpZiAoY2ggPT0gXCJ9XCIpIHtcbiAgICAgICAgaWYgKHN0YXJ0ID4gLTEpIHtcbiAgICAgICAgICB2YXIgaXRlbSA9IG5ldyBUZXh0UHJlUHJvY2Vzc29ySXRlbSgpO1xuICAgICAgICAgIGl0ZW0uc3RhcnQgPSBzdGFydDtcbiAgICAgICAgICBpdGVtLmVuZCA9IGk7XG4gICAgICAgICAgaXRlbXMucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBzdGFydCA9IC0xO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cbiAgcHJpdmF0ZSBnZXROYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFuYW1lKSByZXR1cm47XG4gICAgcmV0dXJuIG5hbWUudHJpbSgpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBRdWVzdGlvblRleHRQcm9jZXNzb3IgaW1wbGVtZW50cyBJVGV4dFByb2Nlc3NvciB7XG4gIHByaXZhdGUgdGV4dFByZVByb2Nlc3NvcjogVGV4dFByZVByb2Nlc3NvcjtcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHZhcmlhYmxlTmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy50ZXh0UHJlUHJvY2Vzc29yID0gbmV3IFRleHRQcmVQcm9jZXNzb3IoKTtcbiAgICB0aGlzLnRleHRQcmVQcm9jZXNzb3Iub25Qcm9jZXNzID0gKHRleHRWYWx1ZTogVGV4dFByZVByb2Nlc3NvclZhbHVlKSA9PiB7XG4gICAgICB0aGlzLmdldFByb2Nlc3NlZFRleHRWYWx1ZSh0ZXh0VmFsdWUpO1xuICAgIH07XG4gIH1cbiAgcHVibGljIHByb2Nlc3NWYWx1ZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcmV0dXJuRGlzcGxheVZhbHVlOiBib29sZWFuXG4gICk6IFRleHRQcmVQcm9jZXNzb3JWYWx1ZSB7XG4gICAgcmV0dXJuIHRoaXMudGV4dFByZVByb2Nlc3Nvci5wcm9jZXNzVmFsdWUobmFtZSwgcmV0dXJuRGlzcGxheVZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHN1cnZleSgpOiBJU3VydmV5IHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IHBhbmVsKCk6IFBhbmVsTW9kZWwge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBnZXRWYWx1ZXMoKTogYW55IHtcbiAgICByZXR1cm4gISF0aGlzLnBhbmVsID8gdGhpcy5wYW5lbC5nZXRWYWx1ZSgpIDogbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0UXVlc3Rpb25CeU5hbWUobmFtZTogc3RyaW5nKTogUXVlc3Rpb24ge1xuICAgIHJldHVybiAhIXRoaXMucGFuZWxcbiAgICAgID8gPFF1ZXN0aW9uPnRoaXMucGFuZWwuZ2V0UXVlc3Rpb25CeVZhbHVlTmFtZShuYW1lKVxuICAgICAgOiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBvbkN1c3RvbVByb2Nlc3NUZXh0KHRleHRWYWx1ZTogVGV4dFByZVByb2Nlc3NvclZhbHVlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vSVRleHRQcm9jZXNzb3JcbiAgcHJpdmF0ZSBnZXRQcm9jZXNzZWRUZXh0VmFsdWUodGV4dFZhbHVlOiBUZXh0UHJlUHJvY2Vzc29yVmFsdWUpIHtcbiAgICBpZiAoIXRleHRWYWx1ZSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLm9uQ3VzdG9tUHJvY2Vzc1RleHQodGV4dFZhbHVlKSkgcmV0dXJuO1xuICAgIHZhciBmaXJzdE5hbWUgPSBuZXcgUHJvY2Vzc1ZhbHVlKCkuZ2V0Rmlyc3ROYW1lKHRleHRWYWx1ZS5uYW1lKTtcbiAgICB0ZXh0VmFsdWUuaXNFeGlzdHMgPSBmaXJzdE5hbWUgPT0gdGhpcy52YXJpYWJsZU5hbWU7XG4gICAgdGV4dFZhbHVlLmNhblByb2Nlc3MgPSB0ZXh0VmFsdWUuaXNFeGlzdHM7XG4gICAgaWYgKCF0ZXh0VmFsdWUuY2FuUHJvY2VzcykgcmV0dXJuO1xuICAgIC8vbmFtZSBzaG91bGQgc3RhcnQgd2l0aCB0aGUgdmFyaWFibGUgbmFtZVxuICAgIHRleHRWYWx1ZS5uYW1lID0gdGV4dFZhbHVlLm5hbWUucmVwbGFjZSh0aGlzLnZhcmlhYmxlTmFtZSArIFwiLlwiLCBcIlwiKTtcbiAgICB2YXIgZmlyc3ROYW1lID0gbmV3IFByb2Nlc3NWYWx1ZSgpLmdldEZpcnN0TmFtZSh0ZXh0VmFsdWUubmFtZSk7XG4gICAgdmFyIHF1ZXN0aW9uID0gdGhpcy5nZXRRdWVzdGlvbkJ5TmFtZShmaXJzdE5hbWUpO1xuICAgIHZhciB2YWx1ZXMgPSB7fTtcbiAgICBpZiAocXVlc3Rpb24pIHtcbiAgICAgICg8YW55PnZhbHVlcylbZmlyc3ROYW1lXSA9IHRleHRWYWx1ZS5yZXR1cm5EaXNwbGF5VmFsdWVcbiAgICAgICAgPyBxdWVzdGlvbi5kaXNwbGF5VmFsdWVcbiAgICAgICAgOiBxdWVzdGlvbi52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGFsbFZhbHVlcyA9ICEhdGhpcy5wYW5lbCA/IHRoaXMuZ2V0VmFsdWVzKCkgOiBudWxsO1xuICAgICAgaWYgKGFsbFZhbHVlcykge1xuICAgICAgICAoPGFueT52YWx1ZXMpW2ZpcnN0TmFtZV0gPSBhbGxWYWx1ZXNbZmlyc3ROYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGV4dFZhbHVlLnZhbHVlID0gbmV3IFByb2Nlc3NWYWx1ZSgpLmdldFZhbHVlKHRleHRWYWx1ZS5uYW1lLCB2YWx1ZXMpO1xuICB9XG4gIHByb2Nlc3NUZXh0KHRleHQ6IHN0cmluZywgcmV0dXJuRGlzcGxheVZhbHVlOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICB0ZXh0ID0gdGhpcy50ZXh0UHJlUHJvY2Vzc29yLnByb2Nlc3ModGV4dCwgcmV0dXJuRGlzcGxheVZhbHVlKTtcbiAgICB2YXIgc3VydmV5ID0gdGhpcy5zdXJ2ZXk7XG4gICAgcmV0dXJuIHN1cnZleSA/IHN1cnZleS5wcm9jZXNzVGV4dCh0ZXh0LCByZXR1cm5EaXNwbGF5VmFsdWUpIDogdGV4dDtcbiAgfVxuICBwcm9jZXNzVGV4dEV4KHRleHQ6IHN0cmluZywgcmV0dXJuRGlzcGxheVZhbHVlOiBib29sZWFuKTogYW55IHtcbiAgICB0ZXh0ID0gdGhpcy5wcm9jZXNzVGV4dCh0ZXh0LCByZXR1cm5EaXNwbGF5VmFsdWUpO1xuICAgIHZhciBoYXNBbGxWYWx1ZXNPbkxhc3RSdW4gPSB0aGlzLnRleHRQcmVQcm9jZXNzb3IuaGFzQWxsVmFsdWVzT25MYXN0UnVuO1xuICAgIHZhciByZXMgPSB7IGhhc0FsbFZhbHVlc09uTGFzdFJ1bjogdHJ1ZSwgdGV4dDogdGV4dCB9O1xuICAgIGlmICh0aGlzLnN1cnZleSkge1xuICAgICAgcmVzID0gdGhpcy5zdXJ2ZXkucHJvY2Vzc1RleHRFeCh0ZXh0LCByZXR1cm5EaXNwbGF5VmFsdWUsIGZhbHNlKTtcbiAgICB9XG4gICAgcmVzLmhhc0FsbFZhbHVlc09uTGFzdFJ1biA9XG4gICAgICByZXMuaGFzQWxsVmFsdWVzT25MYXN0UnVuICYmIGhhc0FsbFZhbHVlc09uTGFzdFJ1bjtcbiAgICByZXR1cm4gcmVzO1xuICB9XG59XG4iLCJpbXBvcnQgeyBIYXNoVGFibGUsIEhlbHBlcnMgfSBmcm9tIFwiLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZVwiO1xuaW1wb3J0IHsgSVN1cnZleSB9IGZyb20gXCIuL2Jhc2UtaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgU2VyaWFsaXplciB9IGZyb20gXCIuL2pzb25vYmplY3RcIjtcbmltcG9ydCB7IENvbmRpdGlvblJ1bm5lciwgRXhwcmVzc2lvblJ1bm5lciB9IGZyb20gXCIuL2NvbmRpdGlvbnNcIjtcbmltcG9ydCB7IE9wZXJhbmRNYWtlciB9IGZyb20gXCIuL2V4cHJlc3Npb25zL2V4cHJlc3Npb25zXCI7XG5pbXBvcnQgeyBQcm9jZXNzVmFsdWUgfSBmcm9tIFwiLi9jb25kaXRpb25Qcm9jZXNzVmFsdWVcIjtcbmltcG9ydCB7IHNldHRpbmdzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcblxuLyoqXG4gKiBBIGJhc2UgY2xhc3MgZm9yIGFsbCB0cmlnZ2Vycy5cbiAqIEEgdHJpZ2dlciBjYWxscyBhIG1ldGhvZCB3aGVuIHRoZSBleHByZXNzaW9uIGNoYW5nZSB0aGUgcmVzdWx0OiBmcm9tIGZhbHNlIHRvIHRydWUgb3IgZnJvbSB0cnVlIHRvIGZhbHNlLlxuICogUGxlYXNlIG5vdGUsIGl0IHJ1bnMgb25seSBvbmUgY2hhbmdpbmcgdGhlIGV4cHJlc3Npb24gcmVzdWx0LlxuICovXG5leHBvcnQgY2xhc3MgVHJpZ2dlciBleHRlbmRzIEJhc2Uge1xuICBzdGF0aWMgb3BlcmF0b3JzVmFsdWU6IEhhc2hUYWJsZTxGdW5jdGlvbj4gPSBudWxsO1xuICBzdGF0aWMgZ2V0IG9wZXJhdG9ycygpIHtcbiAgICBpZiAoVHJpZ2dlci5vcGVyYXRvcnNWYWx1ZSAhPSBudWxsKSByZXR1cm4gVHJpZ2dlci5vcGVyYXRvcnNWYWx1ZTtcbiAgICBUcmlnZ2VyLm9wZXJhdG9yc1ZhbHVlID0ge1xuICAgICAgZW1wdHk6IGZ1bmN0aW9uKHZhbHVlOiBhbnksIGV4cGVjdGVkVmFsdWU6IGFueSkge1xuICAgICAgICByZXR1cm4gIXZhbHVlO1xuICAgICAgfSxcbiAgICAgIG5vdGVtcHR5OiBmdW5jdGlvbih2YWx1ZTogYW55LCBleHBlY3RlZFZhbHVlOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuICEhdmFsdWU7XG4gICAgICB9LFxuICAgICAgZXF1YWw6IGZ1bmN0aW9uKHZhbHVlOiBhbnksIGV4cGVjdGVkVmFsdWU6IGFueSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgPT0gZXhwZWN0ZWRWYWx1ZTtcbiAgICAgIH0sXG4gICAgICBub3RlcXVhbDogZnVuY3Rpb24odmFsdWU6IGFueSwgZXhwZWN0ZWRWYWx1ZTogYW55KSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSAhPSBleHBlY3RlZFZhbHVlO1xuICAgICAgfSxcbiAgICAgIGNvbnRhaW5zOiBmdW5jdGlvbih2YWx1ZTogYW55LCBleHBlY3RlZFZhbHVlOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlICYmIHZhbHVlW1wiaW5kZXhPZlwiXSAmJiB2YWx1ZS5pbmRleE9mKGV4cGVjdGVkVmFsdWUpID4gLTE7XG4gICAgICB9LFxuICAgICAgbm90Y29udGFpbnM6IGZ1bmN0aW9uKHZhbHVlOiBhbnksIGV4cGVjdGVkVmFsdWU6IGFueSkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICF2YWx1ZSB8fCAhdmFsdWVbXCJpbmRleE9mXCJdIHx8IHZhbHVlLmluZGV4T2YoZXhwZWN0ZWRWYWx1ZSkgPT0gLTFcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBncmVhdGVyOiBmdW5jdGlvbih2YWx1ZTogYW55LCBleHBlY3RlZFZhbHVlOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID4gZXhwZWN0ZWRWYWx1ZTtcbiAgICAgIH0sXG4gICAgICBsZXNzOiBmdW5jdGlvbih2YWx1ZTogYW55LCBleHBlY3RlZFZhbHVlOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlIDwgZXhwZWN0ZWRWYWx1ZTtcbiAgICAgIH0sXG4gICAgICBncmVhdGVyb3JlcXVhbDogZnVuY3Rpb24odmFsdWU6IGFueSwgZXhwZWN0ZWRWYWx1ZTogYW55KSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA+PSBleHBlY3RlZFZhbHVlO1xuICAgICAgfSxcbiAgICAgIGxlc3NvcmVxdWFsOiBmdW5jdGlvbih2YWx1ZTogYW55LCBleHBlY3RlZFZhbHVlOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlIDw9IGV4cGVjdGVkVmFsdWU7XG4gICAgICB9LFxuICAgIH07XG4gICAgcmV0dXJuIFRyaWdnZXIub3BlcmF0b3JzVmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBjb25kaXRpb25SdW5uZXI6IENvbmRpdGlvblJ1bm5lcjtcbiAgcHJpdmF0ZSB1c2VkTmFtZXM6IEFycmF5PHN0cmluZz47XG4gIHByaXZhdGUgaGFzRnVuY3Rpb246IGJvb2xlYW47XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy51c2VkTmFtZXMgPSBbXTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0aWVzVmFsdWVDaGFuZ2VkKFxuICAgICAgW1wib3BlcmF0b3JcIiwgXCJ2YWx1ZVwiLCBcIm5hbWVcIl0sXG4gICAgICBmdW5jdGlvbigpIHtcbiAgICAgICAgc2VsZi5vbGRQcm9wZXJ0aWVzQ2hhbmdlZCgpO1xuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5yZWdpc3RlckZ1bmN0aW9uT25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChcImV4cHJlc3Npb25cIiwgZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLm9uRXhwcmVzc2lvbkNoYW5nZWQoKTtcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInRyaWdnZXJiYXNlXCI7XG4gIH1cbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgdmFyIHJlcyA9IHRoaXMuZ2V0VHlwZSgpLnJlcGxhY2UoXCJ0cmlnZ2VyXCIsIFwiXCIpO1xuICAgIHZhciBleHAgPSAhIXRoaXMuZXhwcmVzc2lvbiA/IHRoaXMuZXhwcmVzc2lvbiA6IHRoaXMuYnVpbGRFeHByZXNzaW9uKCk7XG4gICAgaWYgKGV4cCkge1xuICAgICAgcmVzICs9IFwiLCBcIiArIGV4cDtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwdWJsaWMgZ2V0IG9wZXJhdG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm9wZXJhdG9yXCIsIFwiZXF1YWxcIik7XG4gIH1cbiAgcHVibGljIHNldCBvcGVyYXRvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuICAgIHZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIVRyaWdnZXIub3BlcmF0b3JzW3ZhbHVlXSkgcmV0dXJuO1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm9wZXJhdG9yXCIsIHZhbHVlKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInZhbHVlXCIsIG51bGwpO1xuICB9XG4gIHB1YmxpYyBzZXQgdmFsdWUodmFsOiBhbnkpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJ2YWx1ZVwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJuYW1lXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbmFtZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm5hbWVcIiwgdmFsKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZXhwcmVzc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJleHByZXNzaW9uXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgZXhwcmVzc2lvbih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImV4cHJlc3Npb25cIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgY2hlY2tFeHByZXNzaW9uKFxuICAgIGtleXM6IGFueSxcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+ID0gbnVsbFxuICApIHtcbiAgICBpZiAoIXRoaXMuaXNDaGVja1JlcXVpcmVkKGtleXMpKSByZXR1cm47XG4gICAgaWYgKCEhdGhpcy5jb25kaXRpb25SdW5uZXIpIHtcbiAgICAgIHRoaXMucGVyZm9ybSh2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgY2hlY2sodmFsdWU6IGFueSkge1xuICAgIHZhciB0cmlnZ2VyUmVzdWx0ID0gVHJpZ2dlci5vcGVyYXRvcnNbdGhpcy5vcGVyYXRvcl0odmFsdWUsIHRoaXMudmFsdWUpO1xuICAgIGlmICh0cmlnZ2VyUmVzdWx0KSB7XG4gICAgICB0aGlzLm9uU3VjY2Vzcyh7fSwgbnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub25GYWlsdXJlKCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgcGVyZm9ybSh2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIHRoaXMuY29uZGl0aW9uUnVubmVyLm9uUnVuQ29tcGxldGUgPSAocmVzOiBib29sZWFuKSA9PiB7XG4gICAgICB0aGlzLnRyaWdnZXJSZXN1bHQocmVzLCB2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIH07XG4gICAgdGhpcy5jb25kaXRpb25SdW5uZXIucnVuKHZhbHVlcywgcHJvcGVydGllcyk7XG4gIH1cbiAgcHJpdmF0ZSB0cmlnZ2VyUmVzdWx0KFxuICAgIHJlczogYm9vbGVhbixcbiAgICB2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LFxuICAgIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+XG4gICkge1xuICAgIGlmIChyZXMpIHtcbiAgICAgIHRoaXMub25TdWNjZXNzKHZhbHVlcywgcHJvcGVydGllcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub25GYWlsdXJlKCk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBvblN1Y2Nlc3ModmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHt9XG4gIHByb3RlY3RlZCBvbkZhaWx1cmUoKSB7fVxuICBlbmRMb2FkaW5nRnJvbUpzb24oKSB7XG4gICAgc3VwZXIuZW5kTG9hZGluZ0Zyb21Kc29uKCk7XG4gICAgdGhpcy5vbGRQcm9wZXJ0aWVzQ2hhbmdlZCgpO1xuICB9XG4gIHByaXZhdGUgb2xkUHJvcGVydGllc0NoYW5nZWQoKSB7XG4gICAgdGhpcy5vbkV4cHJlc3Npb25DaGFuZ2VkKCk7XG4gIH1cbiAgcHJpdmF0ZSBvbkV4cHJlc3Npb25DaGFuZ2VkKCkge1xuICAgIHRoaXMudXNlZE5hbWVzID0gW107XG4gICAgdGhpcy5oYXNGdW5jdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuY29uZGl0aW9uUnVubmVyID0gbnVsbDtcbiAgfVxuICBwdWJsaWMgYnVpbGRFeHByZXNzaW9uKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLm5hbWUpIHJldHVybiBcIlwiO1xuICAgIGlmICh0aGlzLmlzVmFsdWVFbXB0eSh0aGlzLnZhbHVlKSAmJiB0aGlzLmlzUmVxdWlyZVZhbHVlKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gKFxuICAgICAgXCJ7XCIgK1xuICAgICAgdGhpcy5uYW1lICtcbiAgICAgIFwifSBcIiArXG4gICAgICB0aGlzLm9wZXJhdG9yICtcbiAgICAgIFwiIFwiICtcbiAgICAgIE9wZXJhbmRNYWtlci50b09wZXJhbmRTdHJpbmcodGhpcy52YWx1ZSlcbiAgICApO1xuICB9XG4gIHByaXZhdGUgaXNDaGVja1JlcXVpcmVkKGtleXM6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICgha2V5cykgcmV0dXJuIGZhbHNlO1xuICAgIHRoaXMuYnVpbGRVc2VkTmFtZXMoKTtcbiAgICBpZiAodGhpcy5oYXNGdW5jdGlvbiA9PT0gdHJ1ZSkgcmV0dXJuIHRydWU7XG4gICAgdmFyIHByb2Nlc3NWYWx1ZSA9IG5ldyBQcm9jZXNzVmFsdWUoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudXNlZE5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbmFtZSA9IHRoaXMudXNlZE5hbWVzW2ldO1xuICAgICAgaWYgKGtleXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHJldHVybiB0cnVlO1xuICAgICAgdmFyIGZpcnN0TmFtZSA9IHByb2Nlc3NWYWx1ZS5nZXRGaXJzdE5hbWUobmFtZSk7XG4gICAgICBpZiAoIWtleXMuaGFzT3duUHJvcGVydHkoZmlyc3ROYW1lKSkgY29udGludWU7XG4gICAgICBpZiAobmFtZSA9PSBmaXJzdE5hbWUpIHJldHVybiB0cnVlO1xuICAgICAgdmFyIGtleVZhbHVlID0ga2V5c1tmaXJzdE5hbWVdO1xuICAgICAgaWYgKGtleVZhbHVlID09IHVuZGVmaW5lZCkgY29udGludWU7XG4gICAgICBpZiAoXG4gICAgICAgICFrZXlWYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIm9sZFZhbHVlXCIpIHx8XG4gICAgICAgICFrZXlWYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIm5ld1ZhbHVlXCIpXG4gICAgICApXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgdmFyIHY6IGFueSA9IHt9O1xuICAgICAgdltmaXJzdE5hbWVdID0ga2V5VmFsdWVbXCJvbGRWYWx1ZVwiXTtcbiAgICAgIHZhciBvbGRWYWx1ZSA9IHByb2Nlc3NWYWx1ZS5nZXRWYWx1ZShuYW1lLCB2KTtcbiAgICAgIHZbZmlyc3ROYW1lXSA9IGtleVZhbHVlW1wibmV3VmFsdWVcIl07XG4gICAgICB2YXIgbmV3VmFsdWUgPSBwcm9jZXNzVmFsdWUuZ2V0VmFsdWUobmFtZSwgdik7XG4gICAgICByZXR1cm4gIXRoaXMuaXNUd29WYWx1ZUVxdWFscyhvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJpdmF0ZSBidWlsZFVzZWROYW1lcygpIHtcbiAgICBpZiAoISF0aGlzLmNvbmRpdGlvblJ1bm5lcikgcmV0dXJuO1xuICAgIHZhciBleHByZXNzaW9uID0gdGhpcy5leHByZXNzaW9uO1xuICAgIGlmICghZXhwcmVzc2lvbikge1xuICAgICAgZXhwcmVzc2lvbiA9IHRoaXMuYnVpbGRFeHByZXNzaW9uKCk7XG4gICAgfVxuICAgIGlmICghZXhwcmVzc2lvbikgcmV0dXJuO1xuICAgIHRoaXMuY29uZGl0aW9uUnVubmVyID0gbmV3IENvbmRpdGlvblJ1bm5lcihleHByZXNzaW9uKTtcbiAgICB0aGlzLmhhc0Z1bmN0aW9uID0gdGhpcy5jb25kaXRpb25SdW5uZXIuaGFzRnVuY3Rpb24oKTtcbiAgICB0aGlzLnVzZWROYW1lcyA9IHRoaXMuY29uZGl0aW9uUnVubmVyLmdldFZhcmlhYmxlcygpO1xuICB9XG4gIHByaXZhdGUgZ2V0IGlzUmVxdWlyZVZhbHVlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm9wZXJhdG9yICE9PSBcImVtcHR5XCIgJiYgdGhpcy5vcGVyYXRvciAhPSBcIm5vdGVtcHR5XCI7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU3VydmV5VHJpZ2dlck93bmVyIHtcbiAgZ2V0T2JqZWN0cyhwYWdlczogc3RyaW5nW10sIHF1ZXN0aW9uczogc3RyaW5nW10pOiBhbnlbXTtcbiAgc2V0Q29tcGxldGVkKCk6IGFueTtcbiAgc2V0VHJpZ2dlclZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSwgaXNWYXJpYWJsZTogYm9vbGVhbik6IGFueTtcbiAgY29weVRyaWdnZXJWYWx1ZShuYW1lOiBzdHJpbmcsIGZyb21OYW1lOiBzdHJpbmcpOiBhbnk7XG4gIGZvY3VzUXVlc3Rpb24obmFtZTogc3RyaW5nKTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBJdCBleHRlbmRzIHRoZSBUcmlnZ2VyIGJhc2UgY2xhc3MgYW5kIGFkZCBwcm9wZXJ0aWVzIHJlcXVpcmVkIGZvciBTdXJ2ZXlKUyBjbGFzc2VzLlxuICovXG5leHBvcnQgY2xhc3MgU3VydmV5VHJpZ2dlciBleHRlbmRzIFRyaWdnZXIge1xuICBwcm90ZWN0ZWQgb3duZXJWYWx1ZTogSVN1cnZleVRyaWdnZXJPd25lciA9IG51bGw7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbiAgcHVibGljIGdldCBvd25lcigpOiBJU3VydmV5VHJpZ2dlck93bmVyIHtcbiAgICByZXR1cm4gdGhpcy5vd25lclZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXRPd25lcihvd25lcjogSVN1cnZleVRyaWdnZXJPd25lcikge1xuICAgIHRoaXMub3duZXJWYWx1ZSA9IG93bmVyO1xuICB9XG4gIHB1YmxpYyBnZXRTdXJ2ZXkobGl2ZTogYm9vbGVhbiA9IGZhbHNlKTogSVN1cnZleSB7XG4gICAgcmV0dXJuICEhdGhpcy5vd25lciAmJiAhISg8YW55PnRoaXMub3duZXIpW1wiZ2V0U3VydmV5XCJdXG4gICAgICA/ICg8YW55PnRoaXMub3duZXIpLmdldFN1cnZleSgpXG4gICAgICA6IG51bGw7XG4gIH1cbiAgcHVibGljIGdldCBpc09uTmV4dFBhZ2UoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4vKipcbiAqIElmIGV4cHJlc3Npb24gcmV0dXJucyB0cnVlLCBpdCBtYWtlcyBxdWVzdGlvbnMvcGFnZXMgdmlzaWJsZS5cbiAqIE9odGVyd2lzZSBpdCBtYWtlcyB0aGVtIGludmlzaWJsZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFN1cnZleVRyaWdnZXJWaXNpYmxlIGV4dGVuZHMgU3VydmV5VHJpZ2dlciB7XG4gIHB1YmxpYyBwYWdlczogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIHF1ZXN0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInZpc2libGV0cmlnZ2VyXCI7XG4gIH1cbiAgcHJvdGVjdGVkIG9uU3VjY2Vzcyh2YWx1ZXM6IEhhc2hUYWJsZTxhbnk+LCBwcm9wZXJ0aWVzOiBIYXNoVGFibGU8YW55Pikge1xuICAgIHRoaXMub25UcmlnZ2VyKHRoaXMub25JdGVtU3VjY2Vzcyk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uRmFpbHVyZSgpIHtcbiAgICB0aGlzLm9uVHJpZ2dlcih0aGlzLm9uSXRlbUZhaWx1cmUpO1xuICB9XG4gIHByaXZhdGUgb25UcmlnZ2VyKGZ1bmM6IEZ1bmN0aW9uKSB7XG4gICAgaWYgKCF0aGlzLm93bmVyKSByZXR1cm47XG4gICAgdmFyIG9iamVjdHMgPSB0aGlzLm93bmVyLmdldE9iamVjdHModGhpcy5wYWdlcywgdGhpcy5xdWVzdGlvbnMpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqZWN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgZnVuYyhvYmplY3RzW2ldKTtcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIG9uSXRlbVN1Y2Nlc3MoaXRlbTogYW55KSB7XG4gICAgaXRlbS52aXNpYmxlID0gdHJ1ZTtcbiAgfVxuICBwcm90ZWN0ZWQgb25JdGVtRmFpbHVyZShpdGVtOiBhbnkpIHtcbiAgICBpdGVtLnZpc2libGUgPSBmYWxzZTtcbiAgfVxufVxuLyoqXG4gKiBJZiBleHByZXNzaW9uIHJldHVybnMgdHJ1ZSwgaXQgY29tcGxldGVzIHRoZSBzdXJ2ZXkuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlUcmlnZ2VyQ29tcGxldGUgZXh0ZW5kcyBTdXJ2ZXlUcmlnZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcImNvbXBsZXRldHJpZ2dlclwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNPbk5leHRQYWdlKCkge1xuICAgIHJldHVybiAhc2V0dGluZ3MuZXhlY3V0ZUNvbXBsZXRlVHJpZ2dlck9uVmFsdWVDaGFuZ2VkO1xuICB9XG4gIHByb3RlY3RlZCBvblN1Y2Nlc3ModmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHtcbiAgICBpZiAodGhpcy5vd25lcikgdGhpcy5vd25lci5zZXRDb21wbGV0ZWQoKTtcbiAgfVxufVxuLyoqXG4gKiBJZiBleHByZXNzaW9uIHJldHVybnMgdHJ1ZSwgdGhlIHZhbHVlIGZyb20gcHJvcGVydHkgKipzZXRWYWx1ZSoqIHdpbGwgYmUgc2V0IHRvICoqc2V0VG9OYW1lKipcbiAqL1xuZXhwb3J0IGNsYXNzIFN1cnZleVRyaWdnZXJTZXRWYWx1ZSBleHRlbmRzIFN1cnZleVRyaWdnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwic2V0dmFsdWV0cmlnZ2VyXCI7XG4gIH1cbiAgcHJvdGVjdGVkIG9uUHJvcGVydHlWYWx1ZUNoYW5nZWQobmFtZTogc3RyaW5nLCBvbGRWYWx1ZTogYW55LCBuZXdWYWx1ZTogYW55KSB7XG4gICAgc3VwZXIub25Qcm9wZXJ0eVZhbHVlQ2hhbmdlZChuYW1lLCBvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgIGlmIChuYW1lICE9PSBcInNldFRvTmFtZVwiKSByZXR1cm47XG4gICAgdmFyIHN1cnZleSA9IHRoaXMuZ2V0U3VydmV5KCk7XG4gICAgaWYgKHN1cnZleSAmJiAhc3VydmV5LmlzTG9hZGluZ0Zyb21Kc29uICYmIHN1cnZleS5pc0Rlc2lnbk1vZGUpIHtcbiAgICAgIHRoaXMuc2V0VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgc2V0VG9OYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNldFRvTmFtZVwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNldFRvTmFtZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNldFRvTmFtZVwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgc2V0VmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwic2V0VmFsdWVcIik7XG4gIH1cbiAgcHVibGljIHNldCBzZXRWYWx1ZSh2YWw6IGFueSkge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNldFZhbHVlXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBpc1ZhcmlhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJpc1ZhcmlhYmxlXCIsIGZhbHNlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlzVmFyaWFibGUodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwiaXNWYXJpYWJsZVwiLCB2YWwpO1xuICB9XG4gIHByb3RlY3RlZCBvblN1Y2Nlc3ModmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHtcbiAgICBpZiAoIXRoaXMuc2V0VG9OYW1lIHx8ICF0aGlzLm93bmVyKSByZXR1cm47XG4gICAgdGhpcy5vd25lci5zZXRUcmlnZ2VyVmFsdWUodGhpcy5zZXRUb05hbWUsIHRoaXMuc2V0VmFsdWUsIHRoaXMuaXNWYXJpYWJsZSk7XG4gIH1cbn1cbi8qKlxuICogSWYgZXhwcmVzc2lvbiByZXR1cm5zIHRydWUsIHRoZSBzdXJ2ZXkgZ28gdG8gcXVlc3Rpb24gKipnb3RvTmFtZSoqIGFuZCBmb2N1cyBpdC5cbiAqL1xuZXhwb3J0IGNsYXNzIFN1cnZleVRyaWdnZXJTa2lwIGV4dGVuZHMgU3VydmV5VHJpZ2dlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJza2lwdHJpZ2dlclwiO1xuICB9XG4gIHB1YmxpYyBnZXQgZ290b05hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZ290b05hbWVcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBnb3RvTmFtZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImdvdG9OYW1lXCIsIHZhbCk7XG4gIH1cbiAgcHVibGljIGdldCBpc09uTmV4dFBhZ2UoKSB7XG4gICAgcmV0dXJuICFzZXR0aW5ncy5leGVjdXRlU2tpcFRyaWdnZXJPblZhbHVlQ2hhbmdlZDtcbiAgfVxuICBwcm90ZWN0ZWQgb25TdWNjZXNzKHZhbHVlczogSGFzaFRhYmxlPGFueT4sIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+KSB7XG4gICAgaWYgKCF0aGlzLmdvdG9OYW1lIHx8ICF0aGlzLm93bmVyKSByZXR1cm47XG4gICAgdGhpcy5vd25lci5mb2N1c1F1ZXN0aW9uKHRoaXMuZ290b05hbWUpO1xuICB9XG59XG4vKipcbiAqIElmIGV4cHJlc3Npb24gcmV0dXJucyB0cnVlLCB0aGUgKipydW5FeHByZXNzaW9uKiogd2lsbCBiZSBydW4uIElmICoqc2V0VG9OYW1lKiogcHJvcGVydHkgaXMgbm90IGVtcHR5IHRoZW4gdGhlIHJlc3VsdCBvZiAqKnJ1bkV4cHJlc3Npb24qKiB3aWxsIGJlIHNldCB0byBpdC5cbiAqL1xuZXhwb3J0IGNsYXNzIFN1cnZleVRyaWdnZXJSdW5FeHByZXNzaW9uIGV4dGVuZHMgU3VydmV5VHJpZ2dlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJydW5leHByZXNzaW9udHJpZ2dlclwiO1xuICB9XG4gIHB1YmxpYyBnZXQgc2V0VG9OYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInNldFRvTmFtZVwiLCBcIlwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNldFRvTmFtZSh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInNldFRvTmFtZVwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXQgcnVuRXhwcmVzc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJydW5FeHByZXNzaW9uXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcnVuRXhwcmVzc2lvbih2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcInJ1bkV4cHJlc3Npb25cIiwgdmFsKTtcbiAgfVxuICBwcm90ZWN0ZWQgb25TdWNjZXNzKHZhbHVlczogSGFzaFRhYmxlPGFueT4sIHByb3BlcnRpZXM6IEhhc2hUYWJsZTxhbnk+KSB7XG4gICAgaWYgKCF0aGlzLm93bmVyIHx8ICF0aGlzLnJ1bkV4cHJlc3Npb24pIHJldHVybjtcbiAgICB2YXIgZXhwcmVzc2lvbiA9IG5ldyBFeHByZXNzaW9uUnVubmVyKHRoaXMucnVuRXhwcmVzc2lvbik7XG4gICAgaWYgKGV4cHJlc3Npb24uY2FuUnVuKSB7XG4gICAgICBleHByZXNzaW9uLm9uUnVuQ29tcGxldGUgPSAocmVzKSA9PiB7XG4gICAgICAgIHRoaXMub25Db21wbGV0ZVJ1bkV4cHJlc3Npb24ocmVzKTtcbiAgICAgIH07XG4gICAgICBleHByZXNzaW9uLnJ1bih2YWx1ZXMsIHByb3BlcnRpZXMpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIG9uQ29tcGxldGVSdW5FeHByZXNzaW9uKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBpZiAoISF0aGlzLnNldFRvTmFtZSAmJiBuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLm93bmVyLnNldFRyaWdnZXJWYWx1ZSh0aGlzLnNldFRvTmFtZSwgbmV3VmFsdWUsIGZhbHNlKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBJZiBleHByZXNzaW9uIHJldHVybnMgdHJ1ZSwgdGhlIHZhbHVlIGZyb20gcXVlc3Rpb24gKipmcm9tTmFtZSoqIHdpbGwgYmUgc2V0IGludG8gKipzZXRUb05hbWUqKi5cbiAqL1xuZXhwb3J0IGNsYXNzIFN1cnZleVRyaWdnZXJDb3B5VmFsdWUgZXh0ZW5kcyBTdXJ2ZXlUcmlnZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IHNldFRvTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJzZXRUb05hbWVcIiwgXCJcIik7XG4gIH1cbiAgcHVibGljIHNldCBzZXRUb05hbWUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJzZXRUb05hbWVcIiwgdmFsKTtcbiAgfVxuICBwdWJsaWMgZ2V0IGZyb21OYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcImZyb21OYW1lXCIsIFwiXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgZnJvbU5hbWUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJmcm9tTmFtZVwiLCB2YWwpO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiY29weXZhbHVldHJpZ2dlclwiO1xuICB9XG4gIHByb3RlY3RlZCBvblN1Y2Nlc3ModmFsdWVzOiBIYXNoVGFibGU8YW55PiwgcHJvcGVydGllczogSGFzaFRhYmxlPGFueT4pIHtcbiAgICBpZiAoIXRoaXMuc2V0VG9OYW1lIHx8ICF0aGlzLm93bmVyKSByZXR1cm47XG4gICAgdGhpcy5vd25lci5jb3B5VHJpZ2dlclZhbHVlKHRoaXMuc2V0VG9OYW1lLCB0aGlzLmZyb21OYW1lKTtcbiAgfVxufVxuXG5TZXJpYWxpemVyLmFkZENsYXNzKFwidHJpZ2dlclwiLCBbXG4gIHsgbmFtZTogXCJvcGVyYXRvclwiLCBkZWZhdWx0OiBcImVxdWFsXCIsIHZpc2libGU6IGZhbHNlIH0sXG4gIHsgbmFtZTogXCJ2YWx1ZVwiLCB2aXNpYmxlOiBmYWxzZSB9LFxuICBcImV4cHJlc3Npb246Y29uZGl0aW9uXCIsXG5dKTtcblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwic3VydmV5dHJpZ2dlclwiLFxuICBbeyBuYW1lOiBcIm5hbWVcIiwgdmlzaWJsZTogZmFsc2UgfV0sXG4gIG51bGwsXG4gIFwidHJpZ2dlclwiXG4pO1xuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJ2aXNpYmxldHJpZ2dlclwiLFxuICBbXCJwYWdlczpwYWdlc1wiLCBcInF1ZXN0aW9uczpxdWVzdGlvbnNcIl0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgU3VydmV5VHJpZ2dlclZpc2libGUoKTtcbiAgfSxcbiAgXCJzdXJ2ZXl0cmlnZ2VyXCJcbik7XG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImNvbXBsZXRldHJpZ2dlclwiLFxuICBbXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBTdXJ2ZXlUcmlnZ2VyQ29tcGxldGUoKTtcbiAgfSxcbiAgXCJzdXJ2ZXl0cmlnZ2VyXCJcbik7XG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcInNldHZhbHVldHJpZ2dlclwiLFxuICBbXG4gICAgeyBuYW1lOiBcIiFzZXRUb05hbWU6cXVlc3Rpb252YWx1ZVwiIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJzZXRWYWx1ZTp0cmlnZ2VydmFsdWVcIixcbiAgICAgIGRlcGVuZHNPbjogXCJzZXRUb05hbWVcIixcbiAgICAgIHZpc2libGVJZjogZnVuY3Rpb24ob2JqOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuICEhb2JqICYmICEhb2JqW1wic2V0VG9OYW1lXCJdO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHsgbmFtZTogXCJpc1ZhcmlhYmxlOmJvb2xlYW5cIiwgdmlzaWJsZTogZmFsc2UgfSxcbiAgXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBTdXJ2ZXlUcmlnZ2VyU2V0VmFsdWUoKTtcbiAgfSxcbiAgXCJzdXJ2ZXl0cmlnZ2VyXCJcbik7XG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImNvcHl2YWx1ZXRyaWdnZXJcIixcbiAgW3sgbmFtZTogXCIhZnJvbU5hbWU6cXVlc3Rpb252YWx1ZVwiIH0sIHsgbmFtZTogXCIhc2V0VG9OYW1lOnF1ZXN0aW9udmFsdWVcIiB9XSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBTdXJ2ZXlUcmlnZ2VyQ29weVZhbHVlKCk7XG4gIH0sXG4gIFwic3VydmV5dHJpZ2dlclwiXG4pO1xuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJza2lwdHJpZ2dlclwiLFxuICBbeyBuYW1lOiBcIiFnb3RvTmFtZTpxdWVzdGlvblwiIH1dLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFN1cnZleVRyaWdnZXJTa2lwKCk7XG4gIH0sXG4gIFwic3VydmV5dHJpZ2dlclwiXG4pO1xuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJydW5leHByZXNzaW9udHJpZ2dlclwiLFxuICBbeyBuYW1lOiBcInNldFRvTmFtZTpxdWVzdGlvbnZhbHVlXCIgfSwgXCJydW5FeHByZXNzaW9uOmV4cHJlc3Npb25cIl0sXG4gIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgU3VydmV5VHJpZ2dlclJ1bkV4cHJlc3Npb24oKTtcbiAgfSxcbiAgXCJzdXJ2ZXl0cmlnZ2VyXCJcbik7XG4iLCJleHBvcnQgY2xhc3MgQ3NzQ2xhc3NCdWlsZGVyIHtcbiAgICBwcml2YXRlIGNsYXNzZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICBwdWJsaWMgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLnRvU3RyaW5nKCkgPT09IFwiXCI7XG4gICAgfVxuICAgIHB1YmxpYyBhcHBlbmQodmFsdWU6IHN0cmluZywgY29uZGl0aW9uOiBib29sZWFuID0gdHJ1ZSk6IENzc0NsYXNzQnVpbGRlciB7XG4gICAgICBpZiAoISF2YWx1ZSAmJiBjb25kaXRpb24pIHRoaXMuY2xhc3Nlcy5wdXNoKHZhbHVlKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLmNsYXNzZXMuam9pbihcIiBcIik7XG4gICAgfVxufSIsImxldCBfaXNNb2JpbGUgPSBmYWxzZTtcbmxldCB2ZW5kb3IgPSBudWxsO1xuXG5pZiAoXG4gIHR5cGVvZiBuYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICBuYXZpZ2F0b3IgJiZcbiAgd2luZG93XG4pIHtcbiAgdmVuZG9yID0gbmF2aWdhdG9yLnVzZXJBZ2VudCB8fCBuYXZpZ2F0b3IudmVuZG9yIHx8ICg8YW55PndpbmRvdykub3BlcmE7XG59XG5cbihmdW5jdGlvbiAoYTogYW55KSB7XG4gIGlmICghYSkgcmV0dXJuO1xuICBpZiAoXG4gICAgLyhhbmRyb2lkfGJiXFxkK3xtZWVnbykuK21vYmlsZXxhdmFudGdvfGJhZGFcXC98YmxhY2tiZXJyeXxibGF6ZXJ8Y29tcGFsfGVsYWluZXxmZW5uZWN8aGlwdG9wfGllbW9iaWxlfGlwKGhvbmV8b2QpfGlyaXN8a2luZGxlfGxnZSB8bWFlbW98bWlkcHxtbXB8bW9iaWxlLitmaXJlZm94fG5ldGZyb250fG9wZXJhIG0ob2J8aW4paXxwYWxtKCBvcyk/fHBob25lfHAoaXhpfHJlKVxcL3xwbHVja2VyfHBvY2tldHxwc3B8c2VyaWVzKDR8NikwfHN5bWJpYW58dHJlb3x1cFxcLihicm93c2VyfGxpbmspfHZvZGFmb25lfHdhcHx3aW5kb3dzIGNlfHhkYXx4aWluby9pLnRlc3QoXG4gICAgICBhXG4gICAgKSB8fFxuICAgIC8xMjA3fDYzMTB8NjU5MHwzZ3NvfDR0aHB8NTBbMS02XWl8Nzcwc3w4MDJzfGEgd2F8YWJhY3xhYyhlcnxvb3xzXFwtKXxhaShrb3xybil8YWwoYXZ8Y2F8Y28pfGFtb2l8YW4oZXh8bnl8eXcpfGFwdHV8YXIoY2h8Z28pfGFzKHRlfHVzKXxhdHR3fGF1KGRpfFxcLW18ciB8cyApfGF2YW58YmUoY2t8bGx8bnEpfGJpKGxifHJkKXxibChhY3xheil8YnIoZXx2KXd8YnVtYnxid1xcLShufHUpfGM1NVxcL3xjYXBpfGNjd2F8Y2RtXFwtfGNlbGx8Y2h0bXxjbGRjfGNtZFxcLXxjbyhtcHxuZCl8Y3Jhd3xkYShpdHxsbHxuZyl8ZGJ0ZXxkY1xcLXN8ZGV2aXxkaWNhfGRtb2J8ZG8oY3xwKW98ZHMoMTJ8XFwtZCl8ZWwoNDl8YWkpfGVtKGwyfHVsKXxlcihpY3xrMCl8ZXNsOHxleihbNC03XTB8b3N8d2F8emUpfGZldGN8Zmx5KFxcLXxfKXxnMSB1fGc1NjB8Z2VuZXxnZlxcLTV8Z1xcLW1vfGdvKFxcLnd8b2QpfGdyKGFkfHVuKXxoYWllfGhjaXR8aGRcXC0obXxwfHQpfGhlaVxcLXxoaShwdHx0YSl8aHAoIGl8aXApfGhzXFwtY3xodChjKFxcLXwgfF98YXxnfHB8c3x0KXx0cCl8aHUoYXd8dGMpfGlcXC0oMjB8Z298bWEpfGkyMzB8aWFjKCB8XFwtfFxcLyl8aWJyb3xpZGVhfGlnMDF8aWtvbXxpbTFrfGlubm98aXBhcXxpcmlzfGphKHR8dilhfGpicm98amVtdXxqaWdzfGtkZGl8a2VqaXxrZ3QoIHxcXC8pfGtsb258a3B0IHxrd2NcXC18a3lvKGN8ayl8bGUobm98eGkpfGxnKCBnfFxcLyhrfGx8dSl8NTB8NTR8XFwtW2Etd10pfGxpYnd8bHlueHxtMVxcLXd8bTNnYXxtNTBcXC98bWEodGV8dWl8eG8pfG1jKDAxfDIxfGNhKXxtXFwtY3J8bWUocmN8cmkpfG1pKG84fG9hfHRzKXxtbWVmfG1vKDAxfDAyfGJpfGRlfGRvfHQoXFwtfCB8b3x2KXx6eil8bXQoNTB8cDF8diApfG13YnB8bXl3YXxuMTBbMC0yXXxuMjBbMi0zXXxuMzAoMHwyKXxuNTAoMHwyfDUpfG43KDAoMHwxKXwxMCl8bmUoKGN8bSlcXC18b258dGZ8d2Z8d2d8d3QpfG5vayg2fGkpfG56cGh8bzJpbXxvcCh0aXx3dil8b3Jhbnxvd2cxfHA4MDB8cGFuKGF8ZHx0KXxwZHhnfHBnKDEzfFxcLShbMS04XXxjKSl8cGhpbHxwaXJlfHBsKGF5fHVjKXxwblxcLTJ8cG8oY2t8cnR8c2UpfHByb3h8cHNpb3xwdFxcLWd8cWFcXC1hfHFjKDA3fDEyfDIxfDMyfDYwfFxcLVsyLTddfGlcXC0pfHF0ZWt8cjM4MHxyNjAwfHJha3N8cmltOXxybyh2ZXx6byl8czU1XFwvfHNhKGdlfG1hfG1tfG1zfG55fHZhKXxzYygwMXxoXFwtfG9vfHBcXC0pfHNka1xcL3xzZShjKFxcLXwwfDEpfDQ3fG1jfG5kfHJpKXxzZ2hcXC18c2hhcnxzaWUoXFwtfG0pfHNrXFwtMHxzbCg0NXxpZCl8c20oYWx8YXJ8YjN8aXR8dDUpfHNvKGZ0fG55KXxzcCgwMXxoXFwtfHZcXC18diApfHN5KDAxfG1iKXx0MigxOHw1MCl8dDYoMDB8MTB8MTgpfHRhKGd0fGxrKXx0Y2xcXC18dGRnXFwtfHRlbChpfG0pfHRpbVxcLXx0XFwtbW98dG8ocGx8c2gpfHRzKDcwfG1cXC18bTN8bTUpfHR4XFwtOXx1cChcXC5ifGcxfHNpKXx1dHN0fHY0MDB8djc1MHx2ZXJpfHZpKHJnfHRlKXx2ayg0MHw1WzAtM118XFwtdil8dm00MHx2b2RhfHZ1bGN8dngoNTJ8NTN8NjB8NjF8NzB8ODB8ODF8ODN8ODV8OTgpfHczYyhcXC18ICl8d2ViY3x3aGl0fHdpKGcgfG5jfG53KXx3bWxifHdvbnV8eDcwMHx5YXNcXC18eW91cnx6ZXRvfHp0ZVxcLS9pLnRlc3QoXG4gICAgICBhLnN1YnN0cigwLCA0KVxuICAgIClcbiAgKVxuICAgIF9pc01vYmlsZSA9IHRydWU7XG59KSh2ZW5kb3IpO1xuXG5leHBvcnQgY29uc3QgSXNNb2JpbGUgPSBfaXNNb2JpbGU7XG4iLCJleHBvcnQgdHlwZSBWZXJ0aWNhbFBvc2l0aW9uID0gXCJ0b3BcIiB8IFwiYm90dG9tXCIgfCBcIm1pZGRsZVwiO1xuZXhwb3J0IHR5cGUgSG9yaXpvbnRhbFBvc2l0aW9uID0gXCJsZWZ0XCIgfCBcInJpZ2h0XCIgfCBcImNlbnRlclwiO1xuZXhwb3J0IGludGVyZmFjZSBJUG9zaXRpb24ge1xuICBsZWZ0PzogbnVtYmVyIHwgc3RyaW5nO1xuICB0b3A/OiBudW1iZXIgfCBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU51bWJlclBvc2l0aW9uIGV4dGVuZHMgSVBvc2l0aW9uIHtcbiAgbGVmdD86IG51bWJlcjtcbiAgdG9wPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTaXplIHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBQb3B1cFV0aWxzIHtcbiAgcHVibGljIHN0YXRpYyBjYWxjdWxhdGVQb3NpdGlvbihcbiAgICB0YXJnZXRSZWN0OiBDbGllbnRSZWN0LFxuICAgIGhlaWdodDogbnVtYmVyLFxuICAgIHdpZHRoOiBudW1iZXIsXG4gICAgdmVydGljYWxQb3NpdGlvbjogVmVydGljYWxQb3NpdGlvbixcbiAgICBob3Jpem9udGFsUG9zaXRpb246IEhvcml6b250YWxQb3NpdGlvbixcbiAgICBzaG93UG9pbnRlcjogYm9vbGVhblxuICApOiBJTnVtYmVyUG9zaXRpb24ge1xuICAgIGlmIChob3Jpem9udGFsUG9zaXRpb24gPT0gXCJjZW50ZXJcIilcbiAgICAgIHZhciBsZWZ0ID0gKHRhcmdldFJlY3QubGVmdCArIHRhcmdldFJlY3QucmlnaHQgLSB3aWR0aCkgLyAyO1xuICAgIGVsc2UgaWYgKGhvcml6b250YWxQb3NpdGlvbiA9PSBcImxlZnRcIikgbGVmdCA9IHRhcmdldFJlY3QubGVmdCAtIHdpZHRoO1xuICAgIGVsc2UgbGVmdCA9IHRhcmdldFJlY3QucmlnaHQ7XG5cbiAgICBpZiAodmVydGljYWxQb3NpdGlvbiA9PSBcIm1pZGRsZVwiKVxuICAgICAgdmFyIHRvcCA9ICh0YXJnZXRSZWN0LnRvcCArIHRhcmdldFJlY3QuYm90dG9tIC0gaGVpZ2h0KSAvIDI7XG4gICAgZWxzZSBpZiAodmVydGljYWxQb3NpdGlvbiA9PSBcInRvcFwiKSB0b3AgPSB0YXJnZXRSZWN0LnRvcCAtIGhlaWdodDtcbiAgICBlbHNlIHRvcCA9IHRhcmdldFJlY3QuYm90dG9tO1xuXG4gICAgaWYgKHNob3dQb2ludGVyKSB7XG4gICAgICBpZiAoaG9yaXpvbnRhbFBvc2l0aW9uICE9IFwiY2VudGVyXCIgJiYgdmVydGljYWxQb3NpdGlvbiAhPSBcIm1pZGRsZVwiKSB7XG4gICAgICAgIGlmICh2ZXJ0aWNhbFBvc2l0aW9uID09IFwidG9wXCIpIHtcbiAgICAgICAgICB0b3AgPSB0b3AgKyB0YXJnZXRSZWN0LmhlaWdodDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0b3AgPSB0b3AgLSB0YXJnZXRSZWN0LmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IGxlZnQ6IE1hdGgucm91bmQobGVmdCksIHRvcDogTWF0aC5yb3VuZCh0b3ApIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHVwZGF0ZVZlcnRpY2FsRGltZW5zaW9ucyhcbiAgICB0b3A6IG51bWJlcixcbiAgICBoZWlnaHQ6IG51bWJlcixcbiAgICB3aW5kb3dIZWlnaHQ6IG51bWJlclxuICApIHtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGlmICh0b3AgPCAwKSB7XG4gICAgICByZXN1bHQgPSB7IGhlaWdodDogaGVpZ2h0ICsgdG9wLCB0b3A6IDAgfTtcbiAgICB9IGVsc2UgaWYgKGhlaWdodCArIHRvcCA+IHdpbmRvd0hlaWdodCkge1xuICAgICAgbGV0IG5ld0hlaWdodCA9IE1hdGgubWluKGhlaWdodCwgd2luZG93SGVpZ2h0IC0gdG9wKTtcbiAgICAgIHJlc3VsdCA9IHsgaGVpZ2h0OiBuZXdIZWlnaHQsIHRvcDogdG9wIH07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHVwZGF0ZVZlcnRpY2FsUG9zaXRpb24oXG4gICAgdGFyZ2V0UmVjdDogQ2xpZW50UmVjdCxcbiAgICBoZWlnaHQ6IG51bWJlcixcbiAgICB2ZXJ0aWNhbFBvc2l0aW9uOiBWZXJ0aWNhbFBvc2l0aW9uLFxuICAgIHNob3dQb2ludGVyOiBib29sZWFuLFxuICAgIHdpbmRvd0hlaWdodDogbnVtYmVyXG4gICk6IFZlcnRpY2FsUG9zaXRpb24ge1xuICAgIGxldCBkZWx0YVRvcCA9XG4gICAgICBoZWlnaHQgLSAodGFyZ2V0UmVjdC50b3AgKyAoc2hvd1BvaW50ZXIgPyB0YXJnZXRSZWN0LmhlaWdodCA6IDApKTtcbiAgICBsZXQgZGVsdGFCb3R0b20gPVxuICAgICAgaGVpZ2h0ICtcbiAgICAgIHRhcmdldFJlY3QuYm90dG9tIC1cbiAgICAgIChzaG93UG9pbnRlciA/IHRhcmdldFJlY3QuaGVpZ2h0IDogMCkgLVxuICAgICAgd2luZG93SGVpZ2h0O1xuICAgIGlmIChkZWx0YVRvcCA+IDAgJiYgZGVsdGFCb3R0b20gPD0gMCAmJiB2ZXJ0aWNhbFBvc2l0aW9uID09IFwidG9wXCIpIHtcbiAgICAgIHZlcnRpY2FsUG9zaXRpb24gPSBcImJvdHRvbVwiO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBkZWx0YUJvdHRvbSA+IDAgJiZcbiAgICAgIGRlbHRhVG9wIDw9IDAgJiZcbiAgICAgIHZlcnRpY2FsUG9zaXRpb24gPT0gXCJib3R0b21cIlxuICAgICkge1xuICAgICAgdmVydGljYWxQb3NpdGlvbiA9IFwidG9wXCI7XG4gICAgfSBlbHNlIGlmIChkZWx0YUJvdHRvbSA+IDAgJiYgZGVsdGFUb3AgPiAwKSB7XG4gICAgICB2ZXJ0aWNhbFBvc2l0aW9uID0gZGVsdGFUb3AgPCBkZWx0YUJvdHRvbSA/IFwidG9wXCIgOiBcImJvdHRvbVwiO1xuICAgIH1cbiAgICByZXR1cm4gdmVydGljYWxQb3NpdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY2FsY3VsYXRlUG9wdXBEaXJlY3Rpb24oXG4gICAgdmVydGljYWxQb3NpdGlvbjogVmVydGljYWxQb3NpdGlvbixcbiAgICBob3Jpem9udGFsUG9zaXRpb246IEhvcml6b250YWxQb3NpdGlvblxuICApIHtcbiAgICB2YXIgcG9wdXBEaXJlY3Rpb246IHN0cmluZztcbiAgICBpZiAoaG9yaXpvbnRhbFBvc2l0aW9uID09IFwiY2VudGVyXCIgJiYgdmVydGljYWxQb3NpdGlvbiAhPSBcIm1pZGRsZVwiKSB7XG4gICAgICBwb3B1cERpcmVjdGlvbiA9IHZlcnRpY2FsUG9zaXRpb247XG4gICAgfSBlbHNlIGlmIChob3Jpem9udGFsUG9zaXRpb24gIT0gXCJjZW50ZXJcIikge1xuICAgICAgcG9wdXBEaXJlY3Rpb24gPSBob3Jpem9udGFsUG9zaXRpb247XG4gICAgfVxuICAgIHJldHVybiBwb3B1cERpcmVjdGlvbjtcbiAgfVxuXG4gIC8vY2FsbGVkIHdoZW4gc2hvd1BvaW50ZXIgIGlzIHRydWVcbiAgcHVibGljIHN0YXRpYyBjYWxjdWxhdGVQb2ludGVyVGFyZ2V0KFxuICAgIHRhcmdldFJlY3Q6IENsaWVudFJlY3QsXG4gICAgdG9wOiBudW1iZXIsXG4gICAgbGVmdDogbnVtYmVyLFxuICAgIHZlcnRpY2FsUG9zaXRpb246IFZlcnRpY2FsUG9zaXRpb24sXG4gICAgaG9yaXpvbnRhbFBvc2l0aW9uOiBIb3Jpem9udGFsUG9zaXRpb25cbiAgKSB7XG4gICAgdmFyIHRhcmdldFBvczogSU51bWJlclBvc2l0aW9uID0ge307XG4gICAgaWYgKGhvcml6b250YWxQb3NpdGlvbiAhPSBcImNlbnRlclwiKSB7XG4gICAgICB0YXJnZXRQb3MudG9wID0gdGFyZ2V0UmVjdC50b3AgKyB0YXJnZXRSZWN0LmhlaWdodCAvIDI7XG4gICAgICB0YXJnZXRQb3MubGVmdCA9IHRhcmdldFJlY3RbaG9yaXpvbnRhbFBvc2l0aW9uXTtcbiAgICB9IGVsc2UgaWYgKHZlcnRpY2FsUG9zaXRpb24gIT0gXCJtaWRkbGVcIikge1xuICAgICAgdGFyZ2V0UG9zLnRvcCA9IHRhcmdldFJlY3RbdmVydGljYWxQb3NpdGlvbl07XG4gICAgICB0YXJnZXRQb3MubGVmdCA9IHRhcmdldFJlY3QubGVmdCArIHRhcmdldFJlY3Qud2lkdGggLyAyO1xuICAgIH1cbiAgICB0YXJnZXRQb3MubGVmdCA9IE1hdGgucm91bmQodGFyZ2V0UG9zLmxlZnQgLSBsZWZ0KTtcbiAgICB0YXJnZXRQb3MudG9wID0gTWF0aC5yb3VuZCh0YXJnZXRQb3MudG9wIC0gdG9wKTtcbiAgICByZXR1cm4gdGFyZ2V0UG9zO1xuICB9XG59XG4iLCJpbXBvcnQgeyBBZGFwdGl2ZUFjdGlvbkNvbnRhaW5lciB9IGZyb20gXCIuLi9hY3Rpb25zL2FkYXB0aXZlLWNvbnRhaW5lclwiO1xuXG5pbnRlcmZhY2UgSURpbWVuc2lvbnMge1xuICBzY3JvbGw6IG51bWJlcjtcbiAgb2Zmc2V0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBSZXNwb25zaXZpdHlNYW5hZ2VyIHtcbiAgcHJpdmF0ZSByZXNpemVPYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXIgPSB1bmRlZmluZWQ7XG4gIHByaXZhdGUgaXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgbWluRGltZW5zaW9uQ29uc3QgPSA1NjtcbiAgcHJpdmF0ZSBzZXBhcmF0b3JTaXplID0gMTc7XG5cbiAgcHVibGljIGdldENvbXB1dGVkU3R5bGU6IChcbiAgICBlbHQ6IEVsZW1lbnRcbiAgKSA9PiBDU1NTdHlsZURlY2xhcmF0aW9uID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUuYmluZCh3aW5kb3cpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBjb250YWluZXI6IEhUTUxEaXZFbGVtZW50LFxuICAgIHByaXZhdGUgbW9kZWw6IEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyLFxuICAgIHByaXZhdGUgaXRlbXNTZWxlY3Rvcjogc3RyaW5nLFxuICAgIHByaXZhdGUgZG90c0l0ZW1TaXplOiBudW1iZXIgPSA0OFxuICApIHtcbiAgICB0aGlzLm1vZGVsLnVwZGF0ZUNhbGxiYWNrID0gKGlzUmVzZXRJbml0aWFsaXplZDogYm9vbGVhbikgPT4ge1xuICAgICAgaWYoaXNSZXNldEluaXRpYWxpemVkKVxuICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgIGVsc2VcbiAgICAgICAgdGhpcy5wcm9jZXNzKCk7XG4gICAgfTtcbiAgICBpZiAodHlwZW9mIFJlc2l6ZU9ic2VydmVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKChfKSA9PiB0aGlzLnByb2Nlc3MoKSk7XG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5jb250YWluZXIucGFyZW50RWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldERpbWVuc2lvbnMoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBJRGltZW5zaW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjcm9sbDogZWxlbWVudC5zY3JvbGxXaWR0aCxcbiAgICAgIG9mZnNldDogZWxlbWVudC5vZmZzZXRXaWR0aCxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEF2YWlsYWJsZVNwYWNlKCk6IG51bWJlciB7XG4gICAgY29uc3Qgc3R5bGU6IENTU1N0eWxlRGVjbGFyYXRpb24gPSB0aGlzLmdldENvbXB1dGVkU3R5bGUodGhpcy5jb250YWluZXIpO1xuICAgIGxldCBzcGFjZSA9IHRoaXMuY29udGFpbmVyLm9mZnNldFdpZHRoO1xuICAgIGlmIChzdHlsZS5ib3hTaXppbmcgPT09IFwiYm9yZGVyLWJveFwiKSB7XG4gICAgICBzcGFjZSAtPSBwYXJzZUZsb2F0KHN0eWxlLnBhZGRpbmdMZWZ0KSArIHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ1JpZ2h0KTtcbiAgICB9XG4gICAgcmV0dXJuIHNwYWNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhbGNJdGVtU2l6ZShpdGVtOiBIVE1MRGl2RWxlbWVudCk6IG51bWJlciB7XG4gICAgcmV0dXJuIGl0ZW0ub2Zmc2V0V2lkdGg7XG4gIH1cblxuICBwcml2YXRlIGNhbGNJdGVtc1NpemVzKCkge1xuICAgIGNvbnN0IGFjdGlvbnMgPSB0aGlzLm1vZGVsLmFjdGlvbnM7XG4gICAgdGhpcy5jb250YWluZXJcbiAgICAgIC5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuaXRlbXNTZWxlY3RvcilcbiAgICAgIC5mb3JFYWNoKChpdGVtOiBIVE1MRGl2RWxlbWVudCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBsZXQgY3VycmVudEFjdGlvbiA9IGFjdGlvbnNbaW5kZXhdO1xuICAgICAgICBjdXJyZW50QWN0aW9uLm1heERpbWVuc2lvbiA9IHRoaXMuY2FsY0l0ZW1TaXplKGl0ZW0pO1xuICAgICAgICBjdXJyZW50QWN0aW9uLm1pbkRpbWVuc2lvbiA9IGN1cnJlbnRBY3Rpb24uY2FuU2hyaW5rXG4gICAgICAgICAgPyB0aGlzLm1pbkRpbWVuc2lvbkNvbnN0ICtcbiAgICAgICAgICAgIChjdXJyZW50QWN0aW9uLm5lZWRTZXBhcmF0b3IgPyB0aGlzLnNlcGFyYXRvclNpemUgOiAwKVxuICAgICAgICAgIDogY3VycmVudEFjdGlvbi5tYXhEaW1lbnNpb247XG4gICAgICB9KTtcbiAgfVxuICBwcml2YXRlIGdldCBpc0NvbnRhaW5lclZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKFxuICAgICAgdGhpcy5jb250YWluZXIub2Zmc2V0V2lkdGggfHxcbiAgICAgIHRoaXMuY29udGFpbmVyLm9mZnNldEhlaWdodCB8fFxuICAgICAgdGhpcy5jb250YWluZXIuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGhcbiAgICApO1xuICB9XG4gIHByaXZhdGUgcHJvY2VzcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0NvbnRhaW5lclZpc2libGUpIHtcbiAgICAgIGlmICghdGhpcy5pc0luaXRpYWxpemVkKSB7XG4gICAgICAgIHRoaXMubW9kZWwuYWN0aW9ucy5mb3JFYWNoKChhY3Rpb24pID0+IChhY3Rpb24ubW9kZSA9IFwibGFyZ2VcIikpO1xuICAgICAgICB0aGlzLmNhbGNJdGVtc1NpemVzKCk7XG4gICAgICAgIHRoaXMuaXNJbml0aWFsaXplZCA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLm1vZGVsLmZpdCh0aGlzLmdldEF2YWlsYWJsZVNwYWNlKCksIHRoaXMuZG90c0l0ZW1TaXplKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGVsLnVwZGF0ZUNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgIGlmICghIXRoaXMucmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVmVydGljYWxSZXNwb25zaXZpdHlNYW5hZ2VyIGV4dGVuZHMgUmVzcG9uc2l2aXR5TWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIGNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQsXG4gICAgbW9kZWw6IEFkYXB0aXZlQWN0aW9uQ29udGFpbmVyLFxuICAgIGl0ZW1zU2VsZWN0b3I6IHN0cmluZyxcbiAgICBkb3RzSXRlbVNpemU/OiBudW1iZXJcbiAgKSB7XG4gICAgc3VwZXIoY29udGFpbmVyLCBtb2RlbCwgaXRlbXNTZWxlY3RvciwgZG90c0l0ZW1TaXplKTtcbiAgICB0aGlzLm1pbkRpbWVuc2lvbkNvbnN0ID0gNDA7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RGltZW5zaW9ucygpOiBJRGltZW5zaW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjcm9sbDogdGhpcy5jb250YWluZXIuc2Nyb2xsSGVpZ2h0LFxuICAgICAgb2Zmc2V0OiB0aGlzLmNvbnRhaW5lci5vZmZzZXRIZWlnaHQsXG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRBdmFpbGFibGVTcGFjZSgpOiBudW1iZXIge1xuICAgIGNvbnN0IHN0eWxlOiBDU1NTdHlsZURlY2xhcmF0aW9uID0gdGhpcy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuY29udGFpbmVyKTtcbiAgICBsZXQgc3BhY2U6IG51bWJlciA9IHRoaXMuY29udGFpbmVyLm9mZnNldEhlaWdodDtcbiAgICBpZiAoc3R5bGUuYm94U2l6aW5nID09PSBcImJvcmRlci1ib3hcIikge1xuICAgICAgc3BhY2UgLT0gcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nVG9wKSArIHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ0JvdHRvbSk7XG4gICAgfVxuICAgIHJldHVybiBzcGFjZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjYWxjSXRlbVNpemUoaXRlbTogSFRNTERpdkVsZW1lbnQpOiBudW1iZXIge1xuICAgIHJldHVybiBpdGVtLm9mZnNldEhlaWdodDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgc2V0dGluZ3MgfSBmcm9tIFwiLi8uLi9zZXR0aW5nc1wiO1xuZnVuY3Rpb24gY29tcGFyZVZlcnNpb25zKGE6IGFueSwgYjogYW55KSB7XG4gIGNvbnN0IHJlZ0V4U3RyaXAwOiBSZWdFeHAgPSAvKFxcLjArKSskLztcbiAgY29uc3Qgc2VnbWVudHNBOiBzdHJpbmdbXSA9IGEucmVwbGFjZShyZWdFeFN0cmlwMCwgXCJcIikuc3BsaXQoXCIuXCIpO1xuICBjb25zdCBzZWdtZW50c0I6IHN0cmluZ1tdID0gYi5yZXBsYWNlKHJlZ0V4U3RyaXAwLCBcIlwiKS5zcGxpdChcIi5cIik7XG4gIGNvbnN0IGxlbjogbnVtYmVyID0gTWF0aC5taW4oc2VnbWVudHNBLmxlbmd0aCwgc2VnbWVudHNCLmxlbmd0aCk7XG4gIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGNvbnN0IGRpZmY6IG51bWJlciA9XG4gICAgICBwYXJzZUludChzZWdtZW50c0FbaV0sIDEwKSAtIHBhcnNlSW50KHNlZ21lbnRzQltpXSwgMTApO1xuICAgIGlmIChkaWZmKSB7XG4gICAgICByZXR1cm4gZGlmZjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNlZ21lbnRzQS5sZW5ndGggLSBzZWdtZW50c0IubGVuZ3RoO1xufVxuZnVuY3Rpb24gY29uZmlybUFjdGlvbihtZXNzYWdlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKCEhc2V0dGluZ3MgJiYgISFzZXR0aW5ncy5jb25maXJtQWN0aW9uRnVuYylcbiAgICByZXR1cm4gc2V0dGluZ3MuY29uZmlybUFjdGlvbkZ1bmMobWVzc2FnZSk7XG4gIHJldHVybiBjb25maXJtKG1lc3NhZ2UpO1xufVxuZnVuY3Rpb24gZGV0ZWN0SUVCcm93c2VyKCkge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGZhbHNlO1xuICBjb25zdCB1YTogc3RyaW5nID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XG4gIGNvbnN0IG9sZEllOiBudW1iZXIgPSB1YS5pbmRleE9mKFwiTVNJRSBcIik7XG4gIGNvbnN0IGVsZXZlbkllOiBudW1iZXIgPSB1YS5pbmRleE9mKFwiVHJpZGVudC9cIik7XG4gIHJldHVybiBvbGRJZSA+IC0xIHx8IGVsZXZlbkllID4gLTE7XG59XG5mdW5jdGlvbiBkZXRlY3RJRU9yRWRnZSgpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiAoPGFueT5kZXRlY3RJRU9yRWRnZSkuaXNJRU9yRWRnZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGNvbnN0IHVhOiBzdHJpbmcgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgICBjb25zdCBtc2llOiBudW1iZXIgPSB1YS5pbmRleE9mKFwiTVNJRSBcIik7XG4gICAgY29uc3QgdHJpZGVudDogbnVtYmVyID0gdWEuaW5kZXhPZihcIlRyaWRlbnQvXCIpO1xuICAgIGNvbnN0IGVkZ2U6IG51bWJlciA9IHVhLmluZGV4T2YoXCJFZGdlL1wiKTtcbiAgICAoPGFueT5kZXRlY3RJRU9yRWRnZSkuaXNJRU9yRWRnZSA9IGVkZ2UgPiAwIHx8IHRyaWRlbnQgPiAwIHx8IG1zaWUgPiAwO1xuICB9XG4gIHJldHVybiAoPGFueT5kZXRlY3RJRU9yRWRnZSkuaXNJRU9yRWRnZTtcbn1cbmZ1bmN0aW9uIGxvYWRGaWxlRnJvbUJhc2U2NChiNjREYXRhOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBieXRlU3RyaW5nOiBzdHJpbmcgPSBhdG9iKGI2NERhdGEuc3BsaXQoXCIsXCIpWzFdKTtcblxuICAgIC8vIHNlcGFyYXRlIG91dCB0aGUgbWltZSBjb21wb25lbnRcbiAgICBjb25zdCBtaW1lU3RyaW5nOiBzdHJpbmcgPSBiNjREYXRhXG4gICAgICAuc3BsaXQoXCIsXCIpWzBdXG4gICAgICAuc3BsaXQoXCI6XCIpWzFdXG4gICAgICAuc3BsaXQoXCI7XCIpWzBdO1xuXG4gICAgLy8gd3JpdGUgdGhlIGJ5dGVzIG9mIHRoZSBzdHJpbmcgdG8gYW4gQXJyYXlCdWZmZXJcbiAgICBjb25zdCBhYjogQXJyYXlCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoYnl0ZVN0cmluZy5sZW5ndGgpO1xuICAgIGNvbnN0IGlhOiBVaW50OEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYWIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZVN0cmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgaWFbaV0gPSBieXRlU3RyaW5nLmNoYXJDb2RlQXQoaSk7XG4gICAgfVxuICAgIC8vIHdyaXRlIHRoZSBBcnJheUJ1ZmZlciB0byBhIGJsb2IsIGFuZCB5b3UncmUgZG9uZVxuICAgIGNvbnN0IGJiOiBCbG9iID0gbmV3IEJsb2IoW2FiXSwgeyB0eXBlOiBtaW1lU3RyaW5nIH0pO1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgIHdpbmRvdy5uYXZpZ2F0b3IgJiZcbiAgICAgICg8YW55PndpbmRvdy5uYXZpZ2F0b3IpW1wibXNTYXZlQmxvYlwiXVxuICAgICkge1xuICAgICAgKDxhbnk+d2luZG93Lm5hdmlnYXRvcilbXCJtc1NhdmVPck9wZW5CbG9iXCJdKGJiLCBmaWxlTmFtZSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHsgfVxufVxuZnVuY3Rpb24gaXNNb2JpbGUoKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm9yaWVudGF0aW9uICE9PSBcInVuZGVmaW5lZFwiXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzRWxlbWVudFZpc2libGUoXG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICB0aHJlc2hvbGQ6IG51bWJlciA9IDBcbik6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGVsZW1lbnRSZWN0OiBET01SZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3Qgdmlld0hlaWdodDogbnVtYmVyID0gTWF0aC5tYXgoXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCxcbiAgICB3aW5kb3cuaW5uZXJIZWlnaHRcbiAgKTtcbiAgY29uc3QgdG9wV2luOiBudW1iZXIgPSAtdGhyZXNob2xkO1xuICBjb25zdCBib3R0b21XaW46IG51bWJlciA9IHZpZXdIZWlnaHQgKyB0aHJlc2hvbGQ7XG4gIGNvbnN0IHRvcEVsOiBudW1iZXIgPSBlbGVtZW50UmVjdC50b3A7XG4gIGNvbnN0IGJvdHRvbUVsOiBudW1iZXIgPSBlbGVtZW50UmVjdC5ib3R0b207XG5cbiAgY29uc3QgbWF4VG9wOiBudW1iZXIgPSBNYXRoLm1heCh0b3BXaW4sIHRvcEVsKTtcbiAgY29uc3QgbWluQm90dG9tOiBudW1iZXIgPSBNYXRoLm1pbihib3R0b21XaW4sIGJvdHRvbUVsKTtcbiAgcmV0dXJuIG1heFRvcCA8PSBtaW5Cb3R0b207XG59XG5cbmZ1bmN0aW9uIGZpbmRTY3JvbGxhYmxlUGFyZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnQge1xuICBpZiAoIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICB9XG4gIGlmIChcbiAgICBlbGVtZW50LnNjcm9sbEhlaWdodCA+IGVsZW1lbnQuY2xpZW50SGVpZ2h0ICYmXG4gICAgKGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkub3ZlcmZsb3dZID09PSBcInNjcm9sbFwiIHx8XG4gICAgICBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLm92ZXJmbG93WSA9PT0gXCJhdXRvXCIpXG4gICkge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgaWYgKFxuICAgIGVsZW1lbnQuc2Nyb2xsV2lkdGggPiBlbGVtZW50LmNsaWVudFdpZHRoICYmXG4gICAgKGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkub3ZlcmZsb3dYID09PSBcInNjcm9sbFwiIHx8XG4gICAgICBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLm92ZXJmbG93WCA9PT0gXCJhdXRvXCIpXG4gICkge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgcmV0dXJuIGZpbmRTY3JvbGxhYmxlUGFyZW50KGVsZW1lbnQucGFyZW50RWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIHNjcm9sbEVsZW1lbnRCeUNoaWxkSWQoaWQ6IHN0cmluZykge1xuICBpZiAoIWRvY3VtZW50KSByZXR1cm47XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICBpZiAoIWVsKSByZXR1cm47XG4gIGNvbnN0IHNjcm9sbGFibGVFbCA9IGZpbmRTY3JvbGxhYmxlUGFyZW50KGVsKTtcbiAgaWYgKCEhc2Nyb2xsYWJsZUVsKSB7XG4gICAgc2Nyb2xsYWJsZUVsLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwic2Nyb2xsXCIpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRJY29uTmFtZUZyb21Qcm94eShpY29uTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFpY29uTmFtZSkgcmV0dXJuIGljb25OYW1lO1xuICB2YXIgcHJveHlOYW1lID0gKDxhbnk+c2V0dGluZ3MuY3VzdG9tSWNvbnMpW2ljb25OYW1lXTtcbiAgcmV0dXJuICEhcHJveHlOYW1lID8gcHJveHlOYW1lIDogaWNvbk5hbWU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN2ZyhcbiAgc2l6ZTogbnVtYmVyLFxuICB3aWR0aDogbnVtYmVyLFxuICBoZWlnaHQ6IG51bWJlcixcbiAgaWNvbk5hbWU6IHN0cmluZyxcbiAgc3ZnRWxlbTogYW55XG4pIHtcbiAgc3ZnRWxlbS5zdHlsZS53aWR0aCA9IChzaXplIHx8IHdpZHRoIHx8IDE2KSArIFwicHhcIjtcbiAgc3ZnRWxlbS5zdHlsZS5oZWlnaHQgPSAoc2l6ZSB8fCBoZWlnaHQgfHwgMTYpICsgXCJweFwiO1xuICBjb25zdCBub2RlOiBhbnkgPSBzdmdFbGVtLmNoaWxkTm9kZXNbMF07XG4gIGNvbnN0IHJlYWxJY29uTmFtZSA9IGdldEljb25OYW1lRnJvbVByb3h5KGljb25OYW1lKTtcbiAgbm9kZS5zZXRBdHRyaWJ1dGVOUyhcbiAgICBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgICBcInhsaW5rOmhyZWZcIixcbiAgICBcIiNcIiArIHJlYWxJY29uTmFtZVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW53cmFwPFQ+KHZhbHVlOiBUIHwgKCgpID0+IFQpKTogVCB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKDwoKSA9PiBUPnZhbHVlKSgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTaXplKHZhbHVlOiBhbnkpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiBcIlwiICsgdmFsdWUgKyBcInB4XCI7XG4gIH1cbiAgaWYgKCEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBsYXN0U3ltYm9sOiBzdHJpbmcgPSB2YWx1ZVt2YWx1ZS5sZW5ndGggLSAxXTtcbiAgICBpZiAoKGxhc3RTeW1ib2wgPj0gXCIwXCIgJiYgbGFzdFN5bWJvbCA8PSBcIjlcIikgfHwgbGFzdFN5bWJvbCA9PSBcIi5cIikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbnVtOiBudW1iZXIgPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIFwiXCIgKyBudW0gKyBcInB4XCI7XG4gICAgICB9IGNhdGNoIHsgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGRvS2V5MkNsaWNrVXAoZXZ0OiBLZXlib2FyZEV2ZW50LCBvcHRpb25zID0geyBwcm9jZXNzRXNjOiB0cnVlIH0pOiB2b2lkIHtcbiAgaWYgKCEhZXZ0LnRhcmdldCAmJiAoPGFueT5ldnQudGFyZ2V0KVtcImNvbnRlbnRFZGl0YWJsZVwiXSA9PT0gXCJ0cnVlXCIpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZWxlbWVudDogYW55ID0gZXZ0LnRhcmdldDtcbiAgaWYgKCFlbGVtZW50KSByZXR1cm47XG4gIGNvbnN0IGNoYXI6IG51bWJlciA9IGV2dC53aGljaCB8fCBldnQua2V5Q29kZTtcbiAgaWYgKGNoYXIgPT09IDEzIHx8IGNoYXIgPT09IDMyKSB7XG4gICAgaWYgKGVsZW1lbnQuY2xpY2spIGVsZW1lbnQuY2xpY2soKTtcbiAgfSBlbHNlIGlmIChvcHRpb25zLnByb2Nlc3NFc2MgJiYgY2hhciA9PT0gMjcpIHtcbiAgICBpZiAoZWxlbWVudC5ibHVyKSBlbGVtZW50LmJsdXIoKTtcbiAgfVxufVxuZnVuY3Rpb24gZG9LZXkyQ2xpY2tEb3duKGV2dDogS2V5Ym9hcmRFdmVudCwgb3B0aW9ucyA9IHsgcHJvY2Vzc0VzYzogdHJ1ZSB9KTogdm9pZCB7XG4gIGlmICghIWV2dC50YXJnZXQgJiYgKDxhbnk+ZXZ0LnRhcmdldClbXCJjb250ZW50RWRpdGFibGVcIl0gPT09IFwidHJ1ZVwiKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBjaGFyID0gZXZ0LndoaWNoIHx8IGV2dC5rZXlDb2RlO1xuICBjb25zdCBzdXBwb3J0ZWRDb2RlcyA9IFsxMywgMzJdO1xuICBpZiAob3B0aW9ucy5wcm9jZXNzRXNjKSB7XG4gICAgc3VwcG9ydGVkQ29kZXMucHVzaCgyNyk7XG4gIH1cbiAgaWYgKHN1cHBvcnRlZENvZGVzLmluZGV4T2YoY2hhcikgIT09IC0xKSB7XG4gICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGluY3JlYXNlSGVpZ2h0QnlDb250ZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBnZXRDb21wdXRlZFN0eWxlPzogKGVsdDogRWxlbWVudCkgPT4gYW55KSB7XG4gIGlmICghZWxlbWVudCkgcmV0dXJuO1xuICBpZiAoIWdldENvbXB1dGVkU3R5bGUpIGdldENvbXB1dGVkU3R5bGUgPSAoZWx0OiBFbGVtZW50KSA9PiB7IHJldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbHQpOyB9O1xuXG4gIGNvbnN0IHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBcImF1dG9cIjtcbiAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSAoZWxlbWVudC5zY3JvbGxIZWlnaHQgKyBwYXJzZUZsb2F0KHN0eWxlLmJvcmRlclRvcFdpZHRoKSArIHBhcnNlRmxvYXQoc3R5bGUuYm9yZGVyQm90dG9tV2lkdGgpKSArIFwicHhcIjtcbn1cbmZ1bmN0aW9uIGdldE9yaWdpbmFsRXZlbnQoZXZlbnQ6IGFueSkge1xuICByZXR1cm4gZXZlbnQub3JpZ2luYWxFdmVudCB8fCBldmVudDtcbn1cbmZ1bmN0aW9uIHByZXZlbnREZWZhdWx0cyhldmVudDogYW55KSB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xufVxuXG5leHBvcnQge1xuICBjb21wYXJlVmVyc2lvbnMsXG4gIGNvbmZpcm1BY3Rpb24sXG4gIGRldGVjdElFT3JFZGdlLFxuICBkZXRlY3RJRUJyb3dzZXIsXG4gIGxvYWRGaWxlRnJvbUJhc2U2NCxcbiAgaXNNb2JpbGUsXG4gIGlzRWxlbWVudFZpc2libGUsXG4gIGZpbmRTY3JvbGxhYmxlUGFyZW50LFxuICBzY3JvbGxFbGVtZW50QnlDaGlsZElkLFxuICBjcmVhdGVTdmcsXG4gIGRvS2V5MkNsaWNrVXAsXG4gIGRvS2V5MkNsaWNrRG93bixcbiAgZ2V0SWNvbk5hbWVGcm9tUHJveHksXG4gIGluY3JlYXNlSGVpZ2h0QnlDb250ZW50LFxuICBnZXRPcmlnaW5hbEV2ZW50LFxuICBwcmV2ZW50RGVmYXVsdHNcbn07XG4iLCJpbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZVwiO1xuaW1wb3J0IHsgSVN1cnZleUVycm9yT3duZXIsIElTdXJ2ZXkgfSBmcm9tIFwiLi9iYXNlLWludGVyZmFjZXNcIjtcbmltcG9ydCB7IFN1cnZleUVycm9yIH0gZnJvbSBcIi4vc3VydmV5LWVycm9yXCI7XG5pbXBvcnQgeyBDdXN0b21FcnJvciwgUmVxdXJlTnVtZXJpY0Vycm9yIH0gZnJvbSBcIi4vZXJyb3JcIjtcbmltcG9ydCB7IHN1cnZleUxvY2FsaXphdGlvbiB9IGZyb20gXCIuL3N1cnZleVN0cmluZ3NcIjtcbmltcG9ydCB7IElMb2NhbGl6YWJsZU93bmVyLCBMb2NhbGl6YWJsZVN0cmluZyB9IGZyb20gXCIuL2xvY2FsaXphYmxlc3RyaW5nXCI7XG5pbXBvcnQgeyBTZXJpYWxpemVyIH0gZnJvbSBcIi4vanNvbm9iamVjdFwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uUnVubmVyIH0gZnJvbSBcIi4vY29uZGl0aW9uc1wiO1xuaW1wb3J0IHsgSGVscGVycyB9IGZyb20gXCIuL2hlbHBlcnNcIjtcblxuZXhwb3J0IGNsYXNzIFZhbGlkYXRvclJlc3VsdCB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB2YWx1ZTogYW55LCBwdWJsaWMgZXJyb3I6IFN1cnZleUVycm9yID0gbnVsbCkge31cbn1cbi8qKlxuICogQmFzZSBTdXJ2ZXlKUyB2YWxpZGF0b3IgY2xhc3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdXJ2ZXlWYWxpZGF0b3IgZXh0ZW5kcyBCYXNlIHtcbiAgcHVibGljIGVycm9yT3duZXI6IElTdXJ2ZXlFcnJvck93bmVyO1xuICBwdWJsaWMgb25Bc3luY0NvbXBsZXRlZDogKHJlc3VsdDogVmFsaWRhdG9yUmVzdWx0KSA9PiB2b2lkO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY3JlYXRlTG9jYWxpemFibGVTdHJpbmcoXCJ0ZXh0XCIsIHRoaXMsIHRydWUpO1xuICB9XG4gIHB1YmxpYyBnZXRTdXJ2ZXkobGl2ZTogYm9vbGVhbiA9IGZhbHNlKTogSVN1cnZleSB7XG4gICAgcmV0dXJuICEhdGhpcy5lcnJvck93bmVyICYmICEhKDxhbnk+dGhpcy5lcnJvck93bmVyKVtcImdldFN1cnZleVwiXVxuICAgICAgPyAoPGFueT50aGlzLmVycm9yT3duZXIpLmdldFN1cnZleSgpXG4gICAgICA6IG51bGw7XG4gIH1cbiAgcHVibGljIGdldCB0ZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwidGV4dFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRleHQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0TG9jYWxpemFibGVTdHJpbmdUZXh0KFwidGV4dFwiLCB2YWx1ZSk7XG4gIH1cbiAgcHVibGljIGdldCBpc1ZhbGlkYXRlQWxsVmFsdWVzKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBnZXQgbG9jVGV4dCgpOiBMb2NhbGl6YWJsZVN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9jYWxpemFibGVTdHJpbmcoXCJ0ZXh0XCIpO1xuICB9XG4gIHByb3RlY3RlZCBnZXRFcnJvclRleHQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy50ZXh0KSByZXR1cm4gdGhpcy50ZXh0O1xuICAgIHJldHVybiB0aGlzLmdldERlZmF1bHRFcnJvclRleHQobmFtZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRFcnJvclRleHQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICBwdWJsaWMgdmFsaWRhdGUoXG4gICAgdmFsdWU6IGFueSxcbiAgICBuYW1lOiBzdHJpbmcgPSBudWxsLFxuICAgIHZhbHVlczogYW55ID0gbnVsbCxcbiAgICBwcm9wZXJ0aWVzOiBhbnkgPSBudWxsXG4gICk6IFZhbGlkYXRvclJlc3VsdCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHVibGljIGdldCBpc1J1bm5pbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNBc3luYygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgZ2V0TG9jYWxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICEhdGhpcy5lcnJvck93bmVyID8gdGhpcy5lcnJvck93bmVyLmdldExvY2FsZSgpIDogXCJcIjtcbiAgfVxuICBnZXRNYXJrZG93bkh0bWwodGV4dDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMuZXJyb3JPd25lclxuICAgICAgPyB0aGlzLmVycm9yT3duZXIuZ2V0TWFya2Rvd25IdG1sKHRleHQsIG5hbWUpXG4gICAgICA6IG51bGw7XG4gIH1cbiAgZ2V0UmVuZGVyZXIobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gISF0aGlzLmVycm9yT3duZXIgPyB0aGlzLmVycm9yT3duZXIuZ2V0UmVuZGVyZXIobmFtZSkgOiBudWxsO1xuICB9XG4gIGdldFJlbmRlcmVyQ29udGV4dChsb2NTdHI6IExvY2FsaXphYmxlU3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gISF0aGlzLmVycm9yT3duZXIgPyB0aGlzLmVycm9yT3duZXIuZ2V0UmVuZGVyZXJDb250ZXh0KGxvY1N0cikgOiBsb2NTdHI7XG4gIH1cbiAgZ2V0UHJvY2Vzc2VkVGV4dCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAhIXRoaXMuZXJyb3JPd25lciA/IHRoaXMuZXJyb3JPd25lci5nZXRQcm9jZXNzZWRUZXh0KHRleHQpIDogdGV4dDtcbiAgfVxuICBwcm90ZWN0ZWQgY3JlYXRlQ3VzdG9tRXJyb3IobmFtZTogc3RyaW5nKTogU3VydmV5RXJyb3Ige1xuICAgIHJldHVybiBuZXcgQ3VzdG9tRXJyb3IodGhpcy5nZXRFcnJvclRleHQobmFtZSksIHRoaXMuZXJyb3JPd25lcik7XG4gIH1cbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgdmFyIHJlcyA9IHRoaXMuZ2V0VHlwZSgpLnJlcGxhY2UoXCJ2YWxpZGF0b3JcIiwgXCJcIik7XG4gICAgaWYgKCEhdGhpcy50ZXh0KSB7XG4gICAgICByZXMgKz0gXCIsIFwiICsgdGhpcy50ZXh0O1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG59XG5leHBvcnQgaW50ZXJmYWNlIElWYWxpZGF0b3JPd25lciB7XG4gIGdldFZhbGlkYXRvcnMoKTogQXJyYXk8U3VydmV5VmFsaWRhdG9yPjtcbiAgdmFsaWRhdGVkVmFsdWU6IGFueTtcbiAgZ2V0VmFsaWRhdG9yVGl0bGUoKTogc3RyaW5nO1xuICBnZXREYXRhRmlsdGVyZWRWYWx1ZXMoKTogYW55O1xuICBnZXREYXRhRmlsdGVyZWRQcm9wZXJ0aWVzKCk6IGFueTtcbn1cbmV4cG9ydCBjbGFzcyBWYWxpZGF0b3JSdW5uZXIge1xuICBwcml2YXRlIGFzeW5jVmFsaWRhdG9yczogQXJyYXk8U3VydmV5VmFsaWRhdG9yPjtcbiAgcHVibGljIG9uQXN5bmNDb21wbGV0ZWQ6IChlcnJvcnM6IEFycmF5PFN1cnZleUVycm9yPikgPT4gdm9pZDtcbiAgcHVibGljIHJ1bihvd25lcjogSVZhbGlkYXRvck93bmVyKTogQXJyYXk8U3VydmV5RXJyb3I+IHtcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIHZhbHVlcyA9IG51bGw7XG4gICAgdmFyIHByb3BlcnRpZXMgPSBudWxsO1xuICAgIHRoaXMucHJlcGFyZUFzeW5jVmFsaWRhdG9ycygpO1xuICAgIHZhciBhc3luY1Jlc3VsdHM6IEFycmF5PFN1cnZleUVycm9yPiA9IFtdO1xuICAgIHZhciB2YWxpZGF0b3JzID0gb3duZXIuZ2V0VmFsaWRhdG9ycygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsaWRhdG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbGlkYXRvciA9IHZhbGlkYXRvcnNbaV07XG4gICAgICBpZiAoIXZhbHVlcyAmJiB2YWxpZGF0b3IuaXNWYWxpZGF0ZUFsbFZhbHVlcykge1xuICAgICAgICB2YWx1ZXMgPSBvd25lci5nZXREYXRhRmlsdGVyZWRWYWx1ZXMoKTtcbiAgICAgICAgcHJvcGVydGllcyA9IG93bmVyLmdldERhdGFGaWx0ZXJlZFByb3BlcnRpZXMoKTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWxpZGF0b3IuaXNBc3luYykge1xuICAgICAgICB0aGlzLmFzeW5jVmFsaWRhdG9ycy5wdXNoKHZhbGlkYXRvcik7XG4gICAgICAgIHZhbGlkYXRvci5vbkFzeW5jQ29tcGxldGVkID0gKHJlc3VsdDogVmFsaWRhdG9yUmVzdWx0KSA9PiB7XG4gICAgICAgICAgaWYgKCEhcmVzdWx0ICYmICEhcmVzdWx0LmVycm9yKSBhc3luY1Jlc3VsdHMucHVzaChyZXN1bHQuZXJyb3IpO1xuICAgICAgICAgIGlmICghdGhpcy5vbkFzeW5jQ29tcGxldGVkKSByZXR1cm47XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmFzeW5jVmFsaWRhdG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXN5bmNWYWxpZGF0b3JzW2ldLmlzUnVubmluZykgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm9uQXN5bmNDb21wbGV0ZWQoYXN5bmNSZXN1bHRzKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFsaWRhdG9ycyA9IG93bmVyLmdldFZhbGlkYXRvcnMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbGlkYXRvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWxpZGF0b3IgPSB2YWxpZGF0b3JzW2ldO1xuXG4gICAgICB2YXIgdmFsaWRhdG9yUmVzdWx0ID0gdmFsaWRhdG9yLnZhbGlkYXRlKFxuICAgICAgICBvd25lci52YWxpZGF0ZWRWYWx1ZSxcbiAgICAgICAgb3duZXIuZ2V0VmFsaWRhdG9yVGl0bGUoKSxcbiAgICAgICAgdmFsdWVzLFxuICAgICAgICBwcm9wZXJ0aWVzXG4gICAgICApO1xuICAgICAgaWYgKCEhdmFsaWRhdG9yUmVzdWx0ICYmICEhdmFsaWRhdG9yUmVzdWx0LmVycm9yKSB7XG4gICAgICAgIHJlcy5wdXNoKHZhbGlkYXRvclJlc3VsdC5lcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmFzeW5jVmFsaWRhdG9ycy5sZW5ndGggPT0gMCAmJiAhIXRoaXMub25Bc3luY0NvbXBsZXRlZClcbiAgICAgIHRoaXMub25Bc3luY0NvbXBsZXRlZChbXSk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBwcml2YXRlIHByZXBhcmVBc3luY1ZhbGlkYXRvcnMoKSB7XG4gICAgaWYgKCEhdGhpcy5hc3luY1ZhbGlkYXRvcnMpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hc3luY1ZhbGlkYXRvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy5hc3luY1ZhbGlkYXRvcnNbaV0ub25Bc3luY0NvbXBsZXRlZCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYXN5bmNWYWxpZGF0b3JzID0gW107XG4gIH1cbn1cbi8qKlxuICogVmFsaWRhdGUgbnVtZXJpYyB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBOdW1lcmljVmFsaWRhdG9yIGV4dGVuZHMgU3VydmV5VmFsaWRhdG9yIHtcbiAgY29uc3RydWN0b3IobWluVmFsdWU6IG51bWJlciA9IG51bGwsIG1heFZhbHVlOiBudW1iZXIgPSBudWxsKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm1pblZhbHVlID0gbWluVmFsdWU7XG4gICAgdGhpcy5tYXhWYWx1ZSA9IG1heFZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwibnVtZXJpY3ZhbGlkYXRvclwiO1xuICB9XG4gIHB1YmxpYyB2YWxpZGF0ZShcbiAgICB2YWx1ZTogYW55LFxuICAgIG5hbWU6IHN0cmluZyA9IG51bGwsXG4gICAgdmFsdWVzOiBhbnkgPSBudWxsLFxuICAgIHByb3BlcnRpZXM6IGFueSA9IG51bGxcbiAgKTogVmFsaWRhdG9yUmVzdWx0IHtcbiAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkodmFsdWUpKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoIUhlbHBlcnMuaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICByZXR1cm4gbmV3IFZhbGlkYXRvclJlc3VsdChcbiAgICAgICAgbnVsbCxcbiAgICAgICAgbmV3IFJlcXVyZU51bWVyaWNFcnJvcihudWxsLCB0aGlzLmVycm9yT3duZXIpXG4gICAgICApO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gbmV3IFZhbGlkYXRvclJlc3VsdChwYXJzZUZsb2F0KHZhbHVlKSk7XG4gICAgaWYgKHRoaXMubWluVmFsdWUgIT09IG51bGwgJiYgdGhpcy5taW5WYWx1ZSA+IHJlc3VsdC52YWx1ZSkge1xuICAgICAgcmVzdWx0LmVycm9yID0gdGhpcy5jcmVhdGVDdXN0b21FcnJvcihuYW1lKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGlmICh0aGlzLm1heFZhbHVlICE9PSBudWxsICYmIHRoaXMubWF4VmFsdWUgPCByZXN1bHQudmFsdWUpIHtcbiAgICAgIHJlc3VsdC5lcnJvciA9IHRoaXMuY3JlYXRlQ3VzdG9tRXJyb3IobmFtZSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiID8gbnVsbCA6IHJlc3VsdDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdEVycm9yVGV4dChuYW1lOiBzdHJpbmcpIHtcbiAgICB2YXIgdk5hbWUgPSBuYW1lID8gbmFtZSA6IHN1cnZleUxvY2FsaXphdGlvbi5nZXRTdHJpbmcoXCJ2YWx1ZVwiKTtcbiAgICBpZiAodGhpcy5taW5WYWx1ZSAhPT0gbnVsbCAmJiB0aGlzLm1heFZhbHVlICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uXG4gICAgICAgIC5nZXRTdHJpbmcoXCJudW1lcmljTWluTWF4XCIpXG4gICAgICAgIFtcImZvcm1hdFwiXSh2TmFtZSwgdGhpcy5taW5WYWx1ZSwgdGhpcy5tYXhWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLm1pblZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb25cbiAgICAgICAgICAuZ2V0U3RyaW5nKFwibnVtZXJpY01pblwiKVxuICAgICAgICAgIFtcImZvcm1hdFwiXSh2TmFtZSwgdGhpcy5taW5WYWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uXG4gICAgICAgIC5nZXRTdHJpbmcoXCJudW1lcmljTWF4XCIpXG4gICAgICAgIFtcImZvcm1hdFwiXSh2TmFtZSwgdGhpcy5tYXhWYWx1ZSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBUaGUgbWluVmFsdWUgcHJvcGVydHkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1pblZhbHVlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1pblZhbHVlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWluVmFsdWUodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtaW5WYWx1ZVwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbWF4VmFsdWUgcHJvcGVydHkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1heFZhbHVlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1heFZhbHVlXCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4VmFsdWUodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtYXhWYWx1ZVwiLCB2YWwpO1xuICB9XG59XG4vKipcbiAqIFZhbGlkYXRlIHRleHQgdmFsdWVzLlxuICovXG5leHBvcnQgY2xhc3MgVGV4dFZhbGlkYXRvciBleHRlbmRzIFN1cnZleVZhbGlkYXRvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG1pbkxlbmd0aDogbnVtYmVyID0gMCxcbiAgICBtYXhMZW5ndGg6IG51bWJlciA9IDAsXG4gICAgYWxsb3dEaWdpdHMgPSB0cnVlXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5taW5MZW5ndGggPSBtaW5MZW5ndGg7XG4gICAgdGhpcy5tYXhMZW5ndGggPSBtYXhMZW5ndGg7XG4gICAgdGhpcy5hbGxvd0RpZ2l0cyA9IGFsbG93RGlnaXRzO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwidGV4dHZhbGlkYXRvclwiO1xuICB9XG4gIHB1YmxpYyB2YWxpZGF0ZShcbiAgICB2YWx1ZTogYW55LFxuICAgIG5hbWU6IHN0cmluZyA9IG51bGwsXG4gICAgdmFsdWVzOiBhbnkgPSBudWxsLFxuICAgIHByb3BlcnRpZXM6IGFueSA9IG51bGxcbiAgKTogVmFsaWRhdG9yUmVzdWx0IHtcbiAgICBpZiAodGhpcy5pc1ZhbHVlRW1wdHkodmFsdWUpKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoIXRoaXMuYWxsb3dEaWdpdHMpIHtcbiAgICAgIHZhciByZWcgPSAvXltBLVphLXpcXHNdKiQvO1xuICAgICAgaWYgKCFyZWcudGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JSZXN1bHQobnVsbCwgdGhpcy5jcmVhdGVDdXN0b21FcnJvcihuYW1lKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLm1pbkxlbmd0aCA+IDAgJiYgdmFsdWUubGVuZ3RoIDwgdGhpcy5taW5MZW5ndGgpIHtcbiAgICAgIHJldHVybiBuZXcgVmFsaWRhdG9yUmVzdWx0KG51bGwsIHRoaXMuY3JlYXRlQ3VzdG9tRXJyb3IobmFtZSkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5tYXhMZW5ndGggPiAwICYmIHZhbHVlLmxlbmd0aCA+IHRoaXMubWF4TGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3IFZhbGlkYXRvclJlc3VsdChudWxsLCB0aGlzLmNyZWF0ZUN1c3RvbUVycm9yKG5hbWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRFcnJvclRleHQobmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMubWluTGVuZ3RoID4gMCAmJiB0aGlzLm1heExlbmd0aCA+IDApXG4gICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uXG4gICAgICAgIC5nZXRTdHJpbmcoXCJ0ZXh0TWluTWF4TGVuZ3RoXCIpXG4gICAgICAgIFtcImZvcm1hdFwiXSh0aGlzLm1pbkxlbmd0aCwgdGhpcy5tYXhMZW5ndGgpO1xuICAgIGlmICh0aGlzLm1pbkxlbmd0aCA+IDApXG4gICAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uXG4gICAgICAgIC5nZXRTdHJpbmcoXCJ0ZXh0TWluTGVuZ3RoXCIpXG4gICAgICAgIFtcImZvcm1hdFwiXSh0aGlzLm1pbkxlbmd0aCk7XG4gICAgcmV0dXJuIHN1cnZleUxvY2FsaXphdGlvblxuICAgICAgLmdldFN0cmluZyhcInRleHRNYXhMZW5ndGhcIilcbiAgICAgIFtcImZvcm1hdFwiXSh0aGlzLm1heExlbmd0aCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSBtaW5MZW5ndGggcHJvcGVydHkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1pbkxlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtaW5MZW5ndGhcIik7XG4gIH1cbiAgcHVibGljIHNldCBtaW5MZW5ndGgodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJtaW5MZW5ndGhcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIG1heExlbmd0aCBwcm9wZXJ0eS5cbiAgICovXG4gIHB1YmxpYyBnZXQgbWF4TGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcIm1heExlbmd0aFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1heExlbmd0aCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcIm1heExlbmd0aFwiLCB2YWwpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgYWxsb3dEaWdpdHMgcHJvcGVydHkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFsbG93RGlnaXRzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJhbGxvd0RpZ2l0c1wiLCB0cnVlKTtcbiAgfVxuICBwdWJsaWMgc2V0IGFsbG93RGlnaXRzKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0UHJvcGVydHlWYWx1ZShcImFsbG93RGlnaXRzXCIsIHZhbCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFuc3dlckNvdW50VmFsaWRhdG9yIGV4dGVuZHMgU3VydmV5VmFsaWRhdG9yIHtcbiAgY29uc3RydWN0b3IobWluQ291bnQ6IG51bWJlciA9IG51bGwsIG1heENvdW50OiBudW1iZXIgPSBudWxsKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm1pbkNvdW50ID0gbWluQ291bnQ7XG4gICAgdGhpcy5tYXhDb3VudCA9IG1heENvdW50O1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiYW5zd2VyY291bnR2YWxpZGF0b3JcIjtcbiAgfVxuICBwdWJsaWMgdmFsaWRhdGUoXG4gICAgdmFsdWU6IGFueSxcbiAgICBuYW1lOiBzdHJpbmcgPSBudWxsLFxuICAgIHZhbHVlczogYW55ID0gbnVsbCxcbiAgICBwcm9wZXJ0aWVzOiBhbnkgPSBudWxsXG4gICk6IFZhbGlkYXRvclJlc3VsdCB7XG4gICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUuY29uc3RydWN0b3IgIT0gQXJyYXkpIHJldHVybiBudWxsO1xuICAgIHZhciBjb3VudCA9IHZhbHVlLmxlbmd0aDtcbiAgICBpZiAoY291bnQgPT0gMCkgcmV0dXJuIG51bGw7XG4gICAgaWYgKHRoaXMubWluQ291bnQgJiYgY291bnQgPCB0aGlzLm1pbkNvdW50KSB7XG4gICAgICByZXR1cm4gbmV3IFZhbGlkYXRvclJlc3VsdChcbiAgICAgICAgbnVsbCxcbiAgICAgICAgdGhpcy5jcmVhdGVDdXN0b21FcnJvcihcbiAgICAgICAgICBzdXJ2ZXlMb2NhbGl6YXRpb25cbiAgICAgICAgICAgIC5nZXRTdHJpbmcoXCJtaW5TZWxlY3RFcnJvclwiKVxuICAgICAgICAgICAgW1wiZm9ybWF0XCJdKHRoaXMubWluQ291bnQpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aGlzLm1heENvdW50ICYmIGNvdW50ID4gdGhpcy5tYXhDb3VudCkge1xuICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JSZXN1bHQoXG4gICAgICAgIG51bGwsXG4gICAgICAgIHRoaXMuY3JlYXRlQ3VzdG9tRXJyb3IoXG4gICAgICAgICAgc3VydmV5TG9jYWxpemF0aW9uXG4gICAgICAgICAgICAuZ2V0U3RyaW5nKFwibWF4U2VsZWN0RXJyb3JcIilcbiAgICAgICAgICAgIFtcImZvcm1hdFwiXSh0aGlzLm1heENvdW50KVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdEVycm9yVGV4dChuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmFtZTtcbiAgfVxuICAvKipcbiAgICogVGhlIG1pbkNvdW50IHByb3BlcnR5LlxuICAgKi9cbiAgcHVibGljIGdldCBtaW5Db3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtaW5Db3VudFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1pbkNvdW50KHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWluQ291bnRcIiwgdmFsKTtcbiAgfVxuICAvKipcbiAgICogVGhlIG1heENvdW50IHByb3BlcnR5LlxuICAgKi9cbiAgcHVibGljIGdldCBtYXhDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWUoXCJtYXhDb3VudFwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1heENvdW50KHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlKFwibWF4Q291bnRcIiwgdmFsKTtcbiAgfVxufVxuLyoqXG4gKiBVc2UgaXQgdG8gdmFsaWRhdGUgdGhlIHRleHQgYnkgcmVndWxhciBleHByZXNzaW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIFJlZ2V4VmFsaWRhdG9yIGV4dGVuZHMgU3VydmV5VmFsaWRhdG9yIHtcbiAgY29uc3RydWN0b3IocmVnZXg6IHN0cmluZyA9IG51bGwpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMucmVnZXggPSByZWdleDtcbiAgfVxuICBwdWJsaWMgZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcInJlZ2V4dmFsaWRhdG9yXCI7XG4gIH1cbiAgcHVibGljIHZhbGlkYXRlKFxuICAgIHZhbHVlOiBhbnksXG4gICAgbmFtZTogc3RyaW5nID0gbnVsbCxcbiAgICB2YWx1ZXM6IGFueSA9IG51bGwsXG4gICAgcHJvcGVydGllczogYW55ID0gbnVsbFxuICApOiBWYWxpZGF0b3JSZXN1bHQge1xuICAgIGlmICghdGhpcy5yZWdleCB8fCB0aGlzLmlzVmFsdWVFbXB0eSh2YWx1ZSkpIHJldHVybiBudWxsO1xuICAgIHZhciByZSA9IG5ldyBSZWdFeHAodGhpcy5yZWdleCk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciByZXMgPSB0aGlzLmhhc0Vycm9yKHJlLCB2YWx1ZVtpXSwgbmFtZSk7XG4gICAgICAgIGlmIChyZXMpIHJldHVybiByZXM7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhhc0Vycm9yKHJlLCB2YWx1ZSwgbmFtZSk7XG4gIH1cbiAgcHJpdmF0ZSBoYXNFcnJvcihyZTogUmVnRXhwLCB2YWx1ZTogYW55LCBuYW1lOiBzdHJpbmcpOiBWYWxpZGF0b3JSZXN1bHQge1xuICAgIGlmIChyZS50ZXN0KHZhbHVlKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JSZXN1bHQodmFsdWUsIHRoaXMuY3JlYXRlQ3VzdG9tRXJyb3IobmFtZSkpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgcmVnZXggcHJvcGVydHkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJlZ2V4KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZShcInJlZ2V4XCIpO1xuICB9XG4gIHB1YmxpYyBzZXQgcmVnZXgodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJyZWdleFwiLCB2YWwpO1xuICB9XG59XG4vKipcbiAqIFZhbGlkYXRlIGUtbWFpbCBhZGRyZXNzIGluIHRoZSB0ZXh0IGlucHV0XG4gKi9cbmV4cG9ydCBjbGFzcyBFbWFpbFZhbGlkYXRvciBleHRlbmRzIFN1cnZleVZhbGlkYXRvciB7XG4gIHByaXZhdGUgcmUgPSAvXigoW148PigpXFxbXFxdXFwuLDs6XFxzQFxcXCJdKyhcXC5bXjw+KClcXFtcXF1cXC4sOzpcXHNAXFxcIl0rKSopfChcXFwiLitcXFwiKSlAKChbXjw+KCk9W1xcXVxcLiw7Olxcc0BcXFwiXStcXC4pK1tePD4oKT1bXFxdXFwuLDs6XFxzQFxcXCJdezIsfSkkL2k7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbiAgcHVibGljIGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCJlbWFpbHZhbGlkYXRvclwiO1xuICB9XG4gIHB1YmxpYyB2YWxpZGF0ZShcbiAgICB2YWx1ZTogYW55LFxuICAgIG5hbWU6IHN0cmluZyA9IG51bGwsXG4gICAgdmFsdWVzOiBhbnkgPSBudWxsLFxuICAgIHByb3BlcnRpZXM6IGFueSA9IG51bGxcbiAgKTogVmFsaWRhdG9yUmVzdWx0IHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcbiAgICBpZiAodGhpcy5yZS50ZXN0KHZhbHVlKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JSZXN1bHQodmFsdWUsIHRoaXMuY3JlYXRlQ3VzdG9tRXJyb3IobmFtZSkpO1xuICB9XG4gIHByb3RlY3RlZCBnZXREZWZhdWx0RXJyb3JUZXh0KG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBzdXJ2ZXlMb2NhbGl6YXRpb24uZ2V0U3RyaW5nKFwiaW52YWxpZEVtYWlsXCIpO1xuICB9XG59XG5cbi8qKlxuICogU2hvdyBlcnJvciBpZiBleHByZXNzaW9uIHJldHVybnMgZmFsc2VcbiAqL1xuZXhwb3J0IGNsYXNzIEV4cHJlc3Npb25WYWxpZGF0b3IgZXh0ZW5kcyBTdXJ2ZXlWYWxpZGF0b3Ige1xuICBwcml2YXRlIGNvbmRpdGlvblJ1bm5lcjogQ29uZGl0aW9uUnVubmVyID0gbnVsbDtcbiAgcHJpdmF0ZSBpc1J1bm5pbmdWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBjb25zdHJ1Y3RvcihleHByZXNzaW9uOiBzdHJpbmcgPSBudWxsKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICB9XG4gIHB1YmxpYyBnZXRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiZXhwcmVzc2lvbnZhbGlkYXRvclwiO1xuICB9XG4gIHB1YmxpYyBnZXQgaXNWYWxpZGF0ZUFsbFZhbHVlcygpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlzQXN5bmMoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmVuc3VyZUNvbmRpdGlvblJ1bm5lcigpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uUnVubmVyLmlzQXN5bmM7XG4gIH1cbiAgcHVibGljIGdldCBpc1J1bm5pbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNSdW5uaW5nVmFsdWU7XG4gIH1cbiAgcHVibGljIHZhbGlkYXRlKFxuICAgIHZhbHVlOiBhbnksXG4gICAgbmFtZTogc3RyaW5nID0gbnVsbCxcbiAgICB2YWx1ZXM6IGFueSA9IG51bGwsXG4gICAgcHJvcGVydGllczogYW55ID0gbnVsbFxuICApOiBWYWxpZGF0b3JSZXN1bHQge1xuICAgIGlmICghdGhpcy5lbnN1cmVDb25kaXRpb25SdW5uZXIoKSkgcmV0dXJuIG51bGw7XG4gICAgdGhpcy5jb25kaXRpb25SdW5uZXIub25SdW5Db21wbGV0ZSA9IChyZXMpID0+IHtcbiAgICAgIHRoaXMuaXNSdW5uaW5nVmFsdWUgPSBmYWxzZTtcbiAgICAgIGlmICghIXRoaXMub25Bc3luY0NvbXBsZXRlZCkge1xuICAgICAgICB0aGlzLm9uQXN5bmNDb21wbGV0ZWQodGhpcy5nZW5lcmF0ZUVycm9yKHJlcywgdmFsdWUsIG5hbWUpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuaXNSdW5uaW5nVmFsdWUgPSB0cnVlO1xuICAgIHZhciByZXMgPSB0aGlzLmNvbmRpdGlvblJ1bm5lci5ydW4odmFsdWVzLCBwcm9wZXJ0aWVzKTtcbiAgICBpZiAodGhpcy5jb25kaXRpb25SdW5uZXIuaXNBc3luYykgcmV0dXJuIG51bGw7XG4gICAgdGhpcy5pc1J1bm5pbmdWYWx1ZSA9IGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmdlbmVyYXRlRXJyb3IocmVzLCB2YWx1ZSwgbmFtZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGdlbmVyYXRlRXJyb3IocmVzOiBib29sZWFuLCB2YWx1ZTogYW55LCBuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIXJlcykge1xuICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JSZXN1bHQodmFsdWUsIHRoaXMuY3JlYXRlQ3VzdG9tRXJyb3IobmFtZSkpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0RGVmYXVsdEVycm9yVGV4dChuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gc3VydmV5TG9jYWxpemF0aW9uXG4gICAgICAuZ2V0U3RyaW5nKFwiaW52YWxpZEV4cHJlc3Npb25cIilcbiAgICAgIFtcImZvcm1hdFwiXSh0aGlzLmV4cHJlc3Npb24pO1xuICB9XG4gIHByb3RlY3RlZCBlbnN1cmVDb25kaXRpb25SdW5uZXIoKTogYm9vbGVhbiB7XG4gICAgaWYgKCEhdGhpcy5jb25kaXRpb25SdW5uZXIpIHtcbiAgICAgIHRoaXMuY29uZGl0aW9uUnVubmVyLmV4cHJlc3Npb24gPSB0aGlzLmV4cHJlc3Npb247XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmV4cHJlc3Npb24pIHJldHVybiBmYWxzZTtcbiAgICB0aGlzLmNvbmRpdGlvblJ1bm5lciA9IG5ldyBDb25kaXRpb25SdW5uZXIodGhpcy5leHByZXNzaW9uKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogVGhlIGV4cHJlc3Npb24gcHJvcGVydHkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGV4cHJlc3Npb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlKFwiZXhwcmVzc2lvblwiKTtcbiAgfVxuICBwdWJsaWMgc2V0IGV4cHJlc3Npb24odmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldFByb3BlcnR5VmFsdWUoXCJleHByZXNzaW9uXCIsIHZhbCk7XG4gIH1cbn1cblxuU2VyaWFsaXplci5hZGRDbGFzcyhcInN1cnZleXZhbGlkYXRvclwiLCBbXG4gIHsgbmFtZTogXCJ0ZXh0XCIsIHNlcmlhbGl6YXRpb25Qcm9wZXJ0eTogXCJsb2NUZXh0XCIgfSxcbl0pO1xuU2VyaWFsaXplci5hZGRDbGFzcyhcbiAgXCJudW1lcmljdmFsaWRhdG9yXCIsXG4gIFtcIm1pblZhbHVlOm51bWJlclwiLCBcIm1heFZhbHVlOm51bWJlclwiXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBOdW1lcmljVmFsaWRhdG9yKCk7XG4gIH0sXG4gIFwic3VydmV5dmFsaWRhdG9yXCJcbik7XG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcInRleHR2YWxpZGF0b3JcIixcbiAgW1wibWluTGVuZ3RoOm51bWJlclwiLCBcIm1heExlbmd0aDpudW1iZXJcIiwgXCJhbGxvd0RpZ2l0czpib29sZWFuXCJdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFRleHRWYWxpZGF0b3IoKTtcbiAgfSxcbiAgXCJzdXJ2ZXl2YWxpZGF0b3JcIlxuKTtcblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiYW5zd2VyY291bnR2YWxpZGF0b3JcIixcbiAgW1wibWluQ291bnQ6bnVtYmVyXCIsIFwibWF4Q291bnQ6bnVtYmVyXCJdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IEFuc3dlckNvdW50VmFsaWRhdG9yKCk7XG4gIH0sXG4gIFwic3VydmV5dmFsaWRhdG9yXCJcbik7XG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcInJlZ2V4dmFsaWRhdG9yXCIsXG4gIFtcInJlZ2V4XCJdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFJlZ2V4VmFsaWRhdG9yKCk7XG4gIH0sXG4gIFwic3VydmV5dmFsaWRhdG9yXCJcbik7XG5TZXJpYWxpemVyLmFkZENsYXNzKFxuICBcImVtYWlsdmFsaWRhdG9yXCIsXG4gIFtdLFxuICBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IEVtYWlsVmFsaWRhdG9yKCk7XG4gIH0sXG4gIFwic3VydmV5dmFsaWRhdG9yXCJcbik7XG5cblNlcmlhbGl6ZXIuYWRkQ2xhc3MoXG4gIFwiZXhwcmVzc2lvbnZhbGlkYXRvclwiLFxuICBbXCJleHByZXNzaW9uOmNvbmRpdGlvblwiXSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uVmFsaWRhdG9yKCk7XG4gIH0sXG4gIFwic3VydmV5dmFsaWRhdG9yXCJcbik7XG4iLCJpbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwic3VydmV5LWNvcmVcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvcCwgV2F0Y2ggfSBmcm9tIFwidnVlLXByb3BlcnR5LWRlY29yYXRvclwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgQmFzZVZ1ZSBleHRlbmRzIFZ1ZSB7XG4gIHByb3RlY3RlZCBnZXRNb2RlbCgpOiBCYXNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwcml2YXRlIHNldElzUmVuZGVyaW5nKHZhbDogYm9vbGVhbikge1xuICAgIHZhciBtb2RlbCA9IHRoaXMuZ2V0TW9kZWwoKTtcbiAgICBpZiAoISFtb2RlbCkge1xuICAgICAgKDxhbnk+bW9kZWwpLmlzUmVuZGVyaW5nID0gdmFsO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGdldElzUmVuZGVyaW5nKCk6IGJvb2xlYW4ge1xuICAgIHZhciBtb2RlbCA9IHRoaXMuZ2V0TW9kZWwoKTtcbiAgICByZXR1cm4gISFtb2RlbCAmJiAhISg8YW55Pm1vZGVsKS5pc1JlbmRlcmluZztcbiAgfVxuICBwcm90ZWN0ZWQgb25Nb3VudGVkKCkgeyB9XG4gIHByb3RlY3RlZCBvblVwZGF0ZWQoKSB7IH1cbiAgcHJvdGVjdGVkIG9uRGVzdHJveWVkKCkgeyB9XG4gIHByb3RlY3RlZCBvbkNyZWF0ZWQoKSB7XG4gICAgdmFyIG1vZGVsID0gdGhpcy5nZXRNb2RlbCgpO1xuICAgIGlmICghbW9kZWwpIHJldHVybjtcbiAgICBtb2RlbC5pdGVyYXRlUHJvcGVydGllc0hhc2goKHByb3BlcnRpZXNIYXNoOiBhbnksIG5hbWU6IGFueSkgPT4ge1xuICAgICAgKDxhbnk+VnVlLnV0aWwpLmRlZmluZVJlYWN0aXZlKHByb3BlcnRpZXNIYXNoLCBuYW1lLCBwcm9wZXJ0aWVzSGFzaFtuYW1lXSk7XG4gICAgfSk7XG4gICAgbW9kZWwuZ2V0UHJvcGVydHlWYWx1ZUNvcmVIYW5kbGVyID0gKHByb3BlcnRpZXNIYXNoOiBhbnksIG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCFwcm9wZXJ0aWVzSGFzaC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICAoPGFueT5WdWUudXRpbCkuZGVmaW5lUmVhY3RpdmUocHJvcGVydGllc0hhc2gsIG5hbWUsIHByb3BlcnRpZXNIYXNoW25hbWVdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcm9wZXJ0aWVzSGFzaFtuYW1lXTtcbiAgICB9O1xuICAgIG1vZGVsLnNldFByb3BlcnR5VmFsdWVDb3JlSGFuZGxlciA9IChcbiAgICAgIHByb3BlcnRpZXNIYXNoOiBhbnksXG4gICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICB2YWw6IGFueVxuICAgICkgPT4ge1xuICAgICAgaWYgKCFwcm9wZXJ0aWVzSGFzaC5oYXNPd25Qcm9wZXJ0eShuYW1lKSB8fCAhdGhpcy5nZXRJc1JlbmRlcmluZygpKVxuICAgICAgICBWdWUuc2V0KHByb3BlcnRpZXNIYXNoLCBuYW1lLCB2YWwpO1xuICAgICAgZWxzZSBwcm9wZXJ0aWVzSGFzaFtuYW1lXSA9IHZhbDtcbiAgICB9O1xuICB9XG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5vbkNyZWF0ZWQoKTtcbiAgfVxuICBiZWZvcmVNb3VudCgpIHtcbiAgICB0aGlzLnNldElzUmVuZGVyaW5nKHRydWUpO1xuICB9XG4gIGJlZm9yZVVwZGF0ZSgpIHtcbiAgICB0aGlzLnNldElzUmVuZGVyaW5nKHRydWUpO1xuICB9XG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5zZXRJc1JlbmRlcmluZyhmYWxzZSk7XG4gICAgdGhpcy5vbk1vdW50ZWQoKTtcbiAgfVxuICB1cGRhdGVkKCkge1xuICAgIHRoaXMuc2V0SXNSZW5kZXJpbmcoZmFsc2UpO1xuICAgIHRoaXMub25VcGRhdGVkKCk7XG4gIH1cbiAgZGVzdHJveWVkKCkge1xuICAgIHRoaXMub25EZXN0cm95ZWQoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCYXNlVnVlO1xuIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9ib29sZWFuLWNoZWNrYm94LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01Y2NkMzQwYSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9ib29sZWFuLWNoZWNrYm94LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vYm9vbGVhbi1jaGVja2JveC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNWNjZDM0MGEnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNWNjZDM0MGEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNWNjZDM0MGEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2Jvb2xlYW4tY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVjY2QzNDBhJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzVjY2QzNDBhJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2Jvb2xlYW4tY2hlY2tib3gudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ib29sZWFuLWNoZWNrYm94LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ib29sZWFuLWNoZWNrYm94LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ib29sZWFuLWNoZWNrYm94LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01Y2NkMzQwYSZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vYm9vbGVhbi1zd2l0Y2gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTcwZTRhZWJiJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2Jvb2xlYW4tc3dpdGNoLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vYm9vbGVhbi1zd2l0Y2gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzcwZTRhZWJiJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzcwZTRhZWJiJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzcwZTRhZWJiJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9ib29sZWFuLXN3aXRjaC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzBlNGFlYmImXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNzBlNGFlYmInLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvYm9vbGVhbi1zd2l0Y2gudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ib29sZWFuLXN3aXRjaC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYm9vbGVhbi1zd2l0Y2gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2Jvb2xlYW4tc3dpdGNoLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03MGU0YWViYiZcIiIsImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBRdWVzdGlvbkJvb2xlYW5Nb2RlbCwgQ3NzQ2xhc3NCdWlsZGVyIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBRdWVzdGlvblZ1ZSB9IGZyb20gXCIuL3F1ZXN0aW9uXCI7XG5cbkBDb21wb25lbnRcbmV4cG9ydCBjbGFzcyBCb29sZWFuIGV4dGVuZHMgUXVlc3Rpb25WdWU8UXVlc3Rpb25Cb29sZWFuTW9kZWw+IHtcbiAgcHVibGljIG9uU3dpdGNoQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucXVlc3Rpb24ub25Td2l0Y2hDbGlja01vZGVsKGV2ZW50KTtcbiAgfVxuICBwdWJsaWMgb25MYWJlbENsaWNrKGV2ZW50OiBhbnksIHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5xdWVzdGlvbi5vbkxhYmVsQ2xpY2soZXZlbnQsIHZhbHVlKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9idXR0b25ncm91cC52dWU/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/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzEzYmYyMTAmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2FjdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmZlNTQ2MzImXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vYWN0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vYWN0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcyZmU1NDYzMicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcyZmU1NDYzMicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcyZmU1NDYzMicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vYWN0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yZmU1NDYzMiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcyZmU1NDYzMicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21wb25lbnRzL2FjdGlvbi1iYXIvYWN0aW9uLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYWN0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9hY3Rpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FjdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmZlNTQ2MzImXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2xpc3QtaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGZmZmNkZjgmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vbGlzdC1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vbGlzdC1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc0ZmZmY2RmOCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc0ZmZmY2RmOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc0ZmZmY2RmOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vbGlzdC1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ZmZmY2RmOCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc0ZmZmY2RmOCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21wb25lbnRzL2xpc3QvbGlzdC1pdGVtLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbGlzdC1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9saXN0LWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2xpc3QtaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGZmZmNkZjgmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2xpc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWNjMTdhMDEwJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2xpc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9saXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCdjYzE3YTAxMCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCdjYzE3YTAxMCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCdjYzE3YTAxMCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vbGlzdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Y2MxN2EwMTAmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignY2MxN2EwMTAnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY29tcG9uZW50cy9saXN0L2xpc3QudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9saXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9saXN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9saXN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jYzE3YTAxMCZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vZGV0YWlsLWJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWI0ZTY5YjYmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vZGV0YWlsLWJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2RldGFpbC1idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzViNGU2OWI2JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzViNGU2OWI2JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzViNGU2OWI2JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9kZXRhaWwtYnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01YjRlNjliNiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc1YjRlNjliNicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RldGFpbC1idXR0b24vZGV0YWlsLWJ1dHRvbi52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2RldGFpbC1idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2RldGFpbC1idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2RldGFpbC1idXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTViNGU2OWI2JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9kcmFnLWRyb3AtaWNvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGY1NWQyOTgmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vZHJhZy1kcm9wLWljb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9kcmFnLWRyb3AtaWNvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNGY1NWQyOTgnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNGY1NWQyOTgnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNGY1NWQyOTgnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2RyYWctZHJvcC1pY29uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ZjU1ZDI5OCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc0ZjU1ZDI5OCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21wb25lbnRzL21hdHJpeC1hY3Rpb25zL2RyYWctZHJvcC1pY29uL2RyYWctZHJvcC1pY29uLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZHJhZy1kcm9wLWljb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2RyYWctZHJvcC1pY29uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9kcmFnLWRyb3AtaWNvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGY1NWQyOTgmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3JlbW92ZS1idXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWM4YTdhYTYwJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3JlbW92ZS1idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9yZW1vdmUtYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCdjOGE3YWE2MCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCdjOGE3YWE2MCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCdjOGE3YWE2MCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vcmVtb3ZlLWJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YzhhN2FhNjAmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignYzhhN2FhNjAnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY29tcG9uZW50cy9tYXRyaXgtYWN0aW9ucy9yZW1vdmUtYnV0dG9uL3JlbW92ZS1idXR0b24udnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZW1vdmUtYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZW1vdmUtYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9yZW1vdmUtYnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jOGE3YWE2MCZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vcG9wdXAtY29udGFpbmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jMThkZmQ3NCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9wb3B1cC1jb250YWluZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9wb3B1cC1jb250YWluZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJ2MxOGRmZDc0JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJ2MxOGRmZDc0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJ2MxOGRmZDc0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9wb3B1cC1jb250YWluZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWMxOGRmZDc0JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJ2MxOGRmZDc0Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAtY29udGFpbmVyLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcG9wdXAtY29udGFpbmVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wb3B1cC1jb250YWluZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BvcHVwLWNvbnRhaW5lci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YzE4ZGZkNzQmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3BvcHVwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1lZjExMjY1YyZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9wb3B1cC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3BvcHVwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCdlZjExMjY1YycpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCdlZjExMjY1YycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCdlZjExMjY1YycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vcG9wdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWVmMTEyNjVjJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJ2VmMTEyNjVjJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2NvbXBvbmVudHMvcG9wdXAvcG9wdXAudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wb3B1cC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcG9wdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BvcHVwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1lZjExMjY1YyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vc2tlbGV0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTViZDQ4MGQ0JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3NrZWxldG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vc2tlbGV0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzViZDQ4MGQ0JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzViZDQ4MGQ0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzViZDQ4MGQ0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9za2VsZXRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWJkNDgwZDQmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNWJkNDgwZDQnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY29tcG9uZW50cy9za2VsZXRvbi52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3NrZWxldG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9za2VsZXRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc2tlbGV0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTViZDQ4MGQ0JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9zdmctaWNvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Njg0Nzc2ZjgmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vc3ZnLWljb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9zdmctaWNvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNjg0Nzc2ZjgnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNjg0Nzc2ZjgnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNjg0Nzc2ZjgnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3N2Zy1pY29uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02ODQ3NzZmOCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc2ODQ3NzZmOCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21wb25lbnRzL3N2Zy1pY29uL3N2Zy1pY29uLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc3ZnLWljb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3N2Zy1pY29uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zdmctaWNvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Njg0Nzc2ZjgmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2RlZmF1bHQtdGl0bGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdhYWE5NmM0JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2RlZmF1bHQtdGl0bGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9kZWZhdWx0LXRpdGxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc3YWFhOTZjNCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc3YWFhOTZjNCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc3YWFhOTZjNCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vZGVmYXVsdC10aXRsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2FhYTk2YzQmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignN2FhYTk2YzQnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY29tcG9uZW50cy90aXRsZS9kZWZhdWx0LXRpdGxlLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZGVmYXVsdC10aXRsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZGVmYXVsdC10aXRsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZGVmYXVsdC10aXRsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2FhYTk2YzQmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3RpdGxlLWFjdGlvbnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWM5Mzg1NTRjJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3RpdGxlLWFjdGlvbnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi90aXRsZS1hY3Rpb25zLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCdjOTM4NTU0YycpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCdjOTM4NTU0YycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCdjOTM4NTU0YycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vdGl0bGUtYWN0aW9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YzkzODU1NGMmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignYzkzODU1NGMnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY29tcG9uZW50cy90aXRsZS90aXRsZS1hY3Rpb25zLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGl0bGUtYWN0aW9ucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGl0bGUtYWN0aW9ucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGl0bGUtYWN0aW9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YzkzODU1NGMmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3RpdGxlLWNvbnRlbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI0YzBhMmQ2JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3RpdGxlLWNvbnRlbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi90aXRsZS1jb250ZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcyNGMwYTJkNicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcyNGMwYTJkNicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcyNGMwYTJkNicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vdGl0bGUtY29udGVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjRjMGEyZDYmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMjRjMGEyZDYnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY29tcG9uZW50cy90aXRsZS90aXRsZS1jb250ZW50LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGl0bGUtY29udGVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGl0bGUtY29udGVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGl0bGUtY29udGVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjRjMGEyZDYmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL3RpdGxlLWVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY0MWQ5M2Q5JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3RpdGxlLWVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi90aXRsZS1lbGVtZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc2NDFkOTNkOScpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc2NDFkOTNkOScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc2NDFkOTNkOScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vdGl0bGUtZWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjQxZDkzZDkmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNjQxZDkzZDknLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY29tcG9uZW50cy90aXRsZS90aXRsZS1lbGVtZW50LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGl0bGUtZWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGl0bGUtZWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vdGl0bGUtZWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjQxZDkzZDkmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2NvbXBvc2l0ZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWE5ZTIxOTYmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vY29tcG9zaXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9zaXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcxYTllMjE5NicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcxYTllMjE5NicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcxYTllMjE5NicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vY29tcG9zaXRlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xYTllMjE5NiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcxYTllMjE5NicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9jb21wb3NpdGUudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jb21wb3NpdGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2NvbXBvc2l0ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vY29tcG9zaXRlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xYTllMjE5NiZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vY3VzdG9tLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kNGFhZTA5YSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9jdXN0b20udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9jdXN0b20udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJ2Q0YWFlMDlhJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJ2Q0YWFlMDlhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJ2Q0YWFlMDlhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9jdXN0b20udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQ0YWFlMDlhJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJ2Q0YWFlMDlhJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2N1c3RvbS52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2N1c3RvbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vY3VzdG9tLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jdXN0b20udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQ0YWFlMDlhJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9jdXN0b213aWRnZXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFlNjFhN2I3JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2N1c3RvbXdpZGdldC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2N1c3RvbXdpZGdldC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMWU2MWE3YjcnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMWU2MWE3YjcnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMWU2MWE3YjcnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2N1c3RvbXdpZGdldC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWU2MWE3YjcmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMWU2MWE3YjcnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvY3VzdG9td2lkZ2V0LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vY3VzdG9td2lkZ2V0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jdXN0b213aWRnZXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2N1c3RvbXdpZGdldC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWU2MWE3YjcmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02YjMyMTVkMyZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9kcm9wZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc2YjMyMTVkMycpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc2YjMyMTVkMycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc2YjMyMTVkMycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZiMzIxNWQzJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzZiMzIxNWQzJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2Ryb3Bkb3duLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2Ryb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9kcm9wZG93bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NmIzMjE1ZDMmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2VsZW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTk3MzQ3MmFjJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2VsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9lbGVtZW50LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc5NzM0NzJhYycpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc5NzM0NzJhYycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc5NzM0NzJhYycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vZWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OTczNDcyYWMmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignOTczNDcyYWMnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvZWxlbWVudC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2VsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2VsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2VsZW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTk3MzQ3MmFjJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9lbGVtZW50aGVhZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yN2FkYzUzNyZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9lbGVtZW50aGVhZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vZWxlbWVudGhlYWRlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMjdhZGM1MzcnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMjdhZGM1MzcnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMjdhZGM1MzcnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2VsZW1lbnRoZWFkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI3YWRjNTM3JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzI3YWRjNTM3Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2VsZW1lbnRoZWFkZXIudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9lbGVtZW50aGVhZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9lbGVtZW50aGVhZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9lbGVtZW50aGVhZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yN2FkYzUzNyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vZW1wdHkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA1MDUyYzBhJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2VtcHR5LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vZW1wdHkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzA1MDUyYzBhJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzA1MDUyYzBhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzA1MDUyYzBhJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9lbXB0eS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDUwNTJjMGEmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMDUwNTJjMGEnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvZW1wdHkudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9lbXB0eS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZW1wdHkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2VtcHR5LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNTA1MmMwYSZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vZXJyb3JzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01NjgyZTZhZCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9lcnJvcnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9lcnJvcnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzU2ODJlNmFkJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzU2ODJlNmFkJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzU2ODJlNmFkJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9lcnJvcnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTU2ODJlNmFkJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzU2ODJlNmFkJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2Vycm9ycy52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2Vycm9ycy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZXJyb3JzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9lcnJvcnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTU2ODJlNmFkJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9leHByZXNzaW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xZDIwODY1YSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9leHByZXNzaW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vZXhwcmVzc2lvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMWQyMDg2NWEnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMWQyMDg2NWEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMWQyMDg2NWEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2V4cHJlc3Npb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFkMjA4NjVhJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzFkMjA4NjVhJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2V4cHJlc3Npb24udnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9leHByZXNzaW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9leHByZXNzaW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9leHByZXNzaW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xZDIwODY1YSZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vZmlsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjBmNzAyODQmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vZmlsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2ZpbGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzIwZjcwMjg0JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzIwZjcwMjg0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzIwZjcwMjg0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9maWxlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yMGY3MDI4NCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcyMGY3MDI4NCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9maWxlLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZmlsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZmlsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZmlsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjBmNzAyODQmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2Zsb3dwYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OTZhZTFhNzgmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vZmxvd3BhbmVsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vZmxvd3BhbmVsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc5NmFlMWE3OCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc5NmFlMWE3OCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc5NmFlMWE3OCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vZmxvd3BhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05NmFlMWE3OCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc5NmFlMWE3OCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9mbG93cGFuZWwudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9mbG93cGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2Zsb3dwYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZmxvd3BhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05NmFlMWE3OCZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vZmxvd3BhbmVsZWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OWQ5OTJjMzAmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vZmxvd3BhbmVsZWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2Zsb3dwYW5lbGVsZW1lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzlkOTkyYzMwJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzlkOTkyYzMwJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzlkOTkyYzMwJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9mbG93cGFuZWxlbGVtZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05ZDk5MmMzMCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc5ZDk5MmMzMCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9mbG93cGFuZWxlbGVtZW50LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZmxvd3BhbmVsZWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZmxvd3BhbmVsZWxlbWVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vZmxvd3BhbmVsZWxlbWVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OWQ5OTJjMzAmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2hlYWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjljZmY4Y2YmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vaGVhZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vaGVhZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc2OWNmZjhjZicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc2OWNmZjhjZicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc2OWNmZjhjZicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vaGVhZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02OWNmZjhjZiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc2OWNmZjhjZicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9oZWFkZXIudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9oZWFkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2hlYWRlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaGVhZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02OWNmZjhjZiZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vaHRtbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDc0MmUxNmQmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vaHRtbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2h0bWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzA3NDJlMTZkJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzA3NDJlMTZkJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzA3NDJlMTZkJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9odG1sLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNzQyZTE2ZCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcwNzQyZTE2ZCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9odG1sLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaHRtbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaHRtbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaHRtbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDc0MmUxNmQmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2ltYWdlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xZGM4ZDcwOSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9pbWFnZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2ltYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcxZGM4ZDcwOScpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcxZGM4ZDcwOScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcxZGM4ZDcwOScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vaW1hZ2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFkYzhkNzA5JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzFkYzhkNzA5Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2ltYWdlLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaW1hZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2ltYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9pbWFnZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWRjOGQ3MDkmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2ltYWdlcGlja2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xNTNmZTA1MiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9pbWFnZXBpY2tlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2ltYWdlcGlja2VyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcxNTNmZTA1MicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcxNTNmZTA1MicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcxNTNmZTA1MicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vaW1hZ2VwaWNrZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTE1M2ZlMDUyJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzE1M2ZlMDUyJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL2ltYWdlcGlja2VyLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vaW1hZ2VwaWNrZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2ltYWdlcGlja2VyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9pbWFnZXBpY2tlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MTUzZmUwNTImXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL21hdHJpeC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2ZhMmY0MDMmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vbWF0cml4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vbWF0cml4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc3ZmEyZjQwMycpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc3ZmEyZjQwMycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc3ZmEyZjQwMycsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vbWF0cml4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03ZmEyZjQwMyZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc3ZmEyZjQwMycsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9tYXRyaXgudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9tYXRyaXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL21hdHJpeC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbWF0cml4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03ZmEyZjQwMyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vbWF0cml4Y2VsbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9M2NhNTRlZTUmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vbWF0cml4Y2VsbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL21hdHJpeGNlbGwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzNjYTU0ZWU1JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzNjYTU0ZWU1JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzNjYTU0ZWU1JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9tYXRyaXhjZWxsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zY2E1NGVlNSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCczY2E1NGVlNScsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9tYXRyaXhjZWxsLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbWF0cml4Y2VsbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbWF0cml4Y2VsbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbWF0cml4Y2VsbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9M2NhNTRlZTUmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL21hdHJpeGRyb3Bkb3duLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wYjRkYTZkOCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9tYXRyaXhkcm9wZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL21hdHJpeGRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCcwYjRkYTZkOCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCcwYjRkYTZkOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCcwYjRkYTZkOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vbWF0cml4ZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBiNGRhNmQ4JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzBiNGRhNmQ4Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL21hdHJpeGRyb3Bkb3duLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbWF0cml4ZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL21hdHJpeGRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9tYXRyaXhkcm9wZG93bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGI0ZGE2ZDgmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL21hdHJpeGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTlhMGI4OGU4JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL21hdHJpeGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9tYXRyaXhkeW5hbWljLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc5YTBiODhlOCcpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc5YTBiODhlOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc5YTBiODhlOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vbWF0cml4ZHluYW1pYy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OWEwYjg4ZTgmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignOWEwYjg4ZTgnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvbWF0cml4ZHluYW1pYy52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL21hdHJpeGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL21hdHJpeGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL21hdHJpeGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTlhMGI4OGU4JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9tYXRyaXh0YWJsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZmExOTdlNGEmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vbWF0cml4dGFibGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9tYXRyaXh0YWJsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnZmExOTdlNGEnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnZmExOTdlNGEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnZmExOTdlNGEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL21hdHJpeHRhYmxlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1mYTE5N2U0YSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCdmYTE5N2U0YScsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9tYXRyaXh0YWJsZS52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL21hdHJpeHRhYmxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9tYXRyaXh0YWJsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbWF0cml4dGFibGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWZhMTk3ZTRhJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9tdWx0aXBsZXRleHQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTkzZmU0YzAyJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL211bHRpcGxldGV4dC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL211bHRpcGxldGV4dC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnOTNmZTRjMDInKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnOTNmZTRjMDInLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnOTNmZTRjMDInLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL211bHRpcGxldGV4dC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OTNmZTRjMDImXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignOTNmZTRjMDInLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvbXVsdGlwbGV0ZXh0LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbXVsdGlwbGV0ZXh0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9tdWx0aXBsZXRleHQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL211bHRpcGxldGV4dC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9OTNmZTRjMDImXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL25hdmlnYXRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTc1ZWFkZmQ2JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL25hdmlnYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9uYXZpZ2F0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvdnN0cy93b3JrLzEvcy9zdXJ2ZXktbGlicmFyeS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCc3NWVhZGZkNicpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc3NWVhZGZkNicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc3NWVhZGZkNicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vbmF2aWdhdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzVlYWRmZDYmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignNzVlYWRmZDYnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvbmF2aWdhdGlvbi52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25hdmlnYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25hdmlnYXRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25hdmlnYXRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTc1ZWFkZmQ2JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9vdGhlckNob2ljZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmVkNzc2ZmYmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vb3RoZXJDaG9pY2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9vdGhlckNob2ljZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMmVkNzc2ZmYnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMmVkNzc2ZmYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMmVkNzc2ZmYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL290aGVyQ2hvaWNlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yZWQ3NzZmZiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcyZWQ3NzZmZicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9vdGhlckNob2ljZS52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL290aGVyQ2hvaWNlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9vdGhlckNob2ljZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vb3RoZXJDaG9pY2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJlZDc3NmZmJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9wYWdlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ZTk2MmE1MSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9wYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vcGFnZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNGU5NjJhNTEnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNGU5NjJhNTEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNGU5NjJhNTEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3BhZ2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRlOTYyYTUxJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzRlOTYyYTUxJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3BhZ2UudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWdlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ZTk2MmE1MSZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vcGFuZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBjNzg4OTljJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3BhbmVsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vcGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzBjNzg4OTljJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzBjNzg4OTljJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzBjNzg4OTljJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9wYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGM3ODg5OWMmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMGM3ODg5OWMnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvcGFuZWwudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wYzc4ODk5YyZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vcGFuZWxkeW5hbWljLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05ZGRhNWQwNiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9wYW5lbGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9wYW5lbGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzlkZGE1ZDA2JykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzlkZGE1ZDA2JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzlkZGE1ZDA2JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9wYW5lbGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTlkZGE1ZDA2JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzlkZGE1ZDA2Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3BhbmVsZHluYW1pYy52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhbmVsZHluYW1pYy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFuZWxkeW5hbWljLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYW5lbGR5bmFtaWMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTlkZGE1ZDA2JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9wYW5lbGR5bmFtaWNwcm9ncmVzcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzQyYmZmYWMmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vcGFuZWxkeW5hbWljcHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9wYW5lbGR5bmFtaWNwcm9ncmVzcy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNzQyYmZmYWMnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNzQyYmZmYWMnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNzQyYmZmYWMnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3BhbmVsZHluYW1pY3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03NDJiZmZhYyZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc3NDJiZmZhYycsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9wYW5lbGR5bmFtaWNwcm9ncmVzcy52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhbmVsZHluYW1pY3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYW5lbGR5bmFtaWNwcm9ncmVzcy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFuZWxkeW5hbWljcHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTc0MmJmZmFjJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9wYW5lbGR5bmFtaWNwcm9ncmVzc1YyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zM2NlNDA0NiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9wYW5lbGR5bmFtaWNwcm9ncmVzc1YyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vcGFuZWxkeW5hbWljcHJvZ3Jlc3NWMi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMzNjZTQwNDYnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMzNjZTQwNDYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMzNjZTQwNDYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3BhbmVsZHluYW1pY3Byb2dyZXNzVjIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTMzY2U0MDQ2JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzMzY2U0MDQ2Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3BhbmVsZHluYW1pY3Byb2dyZXNzVjIudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYW5lbGR5bmFtaWNwcm9ncmVzc1YyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYW5lbGR5bmFtaWNwcm9ncmVzc1YyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYW5lbGR5bmFtaWNwcm9ncmVzc1YyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zM2NlNDA0NiZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vcGFuZWxkeW5hbWljcmVtb3ZlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kYjZiMmY3ZSZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9wYW5lbGR5bmFtaWNyZW1vdmUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9wYW5lbGR5bmFtaWNyZW1vdmUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJ2RiNmIyZjdlJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJ2RiNmIyZjdlJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJ2RiNmIyZjdlJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9wYW5lbGR5bmFtaWNyZW1vdmUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWRiNmIyZjdlJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJ2RiNmIyZjdlJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3BhbmVsZHluYW1pY3JlbW92ZS52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhbmVsZHluYW1pY3JlbW92ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFuZWxkeW5hbWljcmVtb3ZlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYW5lbGR5bmFtaWNyZW1vdmUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWRiNmIyZjdlJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9wcm9ncmVzcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjdlMzI1ZWYmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vcHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9wcm9ncmVzcy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMjdlMzI1ZWYnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMjdlMzI1ZWYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMjdlMzI1ZWYnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yN2UzMjVlZiZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcyN2UzMjVlZicsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL3Z1ZS9wcm9ncmVzcy52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wcm9ncmVzcy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI3ZTMyNWVmJlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9wcm9ncmVzc0J1dHRvbnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJhZTdkZTQyJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL3Byb2dyZXNzQnV0dG9ucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL3Byb2dyZXNzQnV0dG9ucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMmFlN2RlNDInKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMmFlN2RlNDInLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMmFlN2RlNDInLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3Byb2dyZXNzQnV0dG9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmFlN2RlNDImXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMmFlN2RlNDInLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy92dWUvcHJvZ3Jlc3NCdXR0b25zLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHJvZ3Jlc3NCdXR0b25zLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wcm9ncmVzc0J1dHRvbnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3Byb2dyZXNzQnV0dG9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmFlN2RlNDImXCIiLCJpbXBvcnQgeyBCYXNlIH0gZnJvbSBcInN1cnZleS1jb3JlXCI7XG5pbXBvcnQgeyBRdWVzdGlvbiB9IGZyb20gXCJzdXJ2ZXktY29yZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9wLCBXYXRjaCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBCYXNlVnVlIH0gZnJvbSBcIi4vYmFzZVwiO1xuXG5AQ29tcG9uZW50XG5leHBvcnQgY2xhc3MgUXVlc3Rpb25WdWU8VCBleHRlbmRzIFF1ZXN0aW9uPiBleHRlbmRzIEJhc2VWdWUge1xuICBwdWJsaWMgaW5uZXJWYWx1ZTogYW55ID0gbnVsbDtcblxuICBAUHJvcCgpIHF1ZXN0aW9uOiBUO1xuICAvLyBjc3MgcHJvcCBuZWVkIG9ubHkgZm9yIHBhbmVsLiBXaGVuIHBhbmVsIHdpbGwgaGF2ZSBjc3NDbGFzc2VzIHByb3BlcnR5IHRoaXMgcHJvcCB3aWxsIG5lZWQgdG8gcmVtb3ZlXG4gIEBQcm9wKCkgY3NzOiBhbnk7XG5cbiAgQFdhdGNoKFwicXVlc3Rpb25cIilcbiAgY2hhbmdlUXVlc3Rpb24obmV3X3ZhbDogVCwgb2xkX3ZhbDogVCkge1xuICAgIHRoaXMuaW5uZXJWYWx1ZSA9IG51bGw7XG4gIH1cbiAgcHJvdGVjdGVkIGdldE1vZGVsKCk6IEJhc2Uge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uO1xuICB9XG4gIHByb3RlY3RlZCBvbk1vdW50ZWQoKSB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb24pIHtcbiAgICAgIHRoaXMucXVlc3Rpb24uYWZ0ZXJSZW5kZXJRdWVzdGlvbkVsZW1lbnQodGhpcy4kZWwgYXMgSFRNTEVsZW1lbnQpO1xuICAgIH1cbiAgfVxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uLmJlZm9yZURlc3Ryb3lRdWVzdGlvbkVsZW1lbnQodGhpcy4kZWwgYXMgSFRNTEVsZW1lbnQpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBRdWVzdGlvblZ1ZTtcbiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vcmFkaW9ncm91cC52dWU/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/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3ZzdHMvd29yay8xL3Mvc3VydmV5LWxpYnJhcnkvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMGQyYWJlMjEnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMGQyYWJlMjEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMGQyYWJlMjEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL3RpbWVycGFuZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBkMmFiZTIxJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzBkMmFiZTIxJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3RpbWVycGFuZWwudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi90aW1lcnBhbmVsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi90aW1lcnBhbmVsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi90aW1lcnBhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wZDJhYmUyMSZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vd2luZG93LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02MmY1ODhiMiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi93aW5kb3cudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi93aW5kb3cudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPXRzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS92c3RzL3dvcmsvMS9zL3N1cnZleS1saWJyYXJ5L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzYyZjU4OGIyJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzYyZjU4OGIyJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzYyZjU4OGIyJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi93aW5kb3cudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTYyZjU4OGIyJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzYyZjU4OGIyJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvdnVlL3dpbmRvdy52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy90cy1sb2FkZXIvaW5kZXguanM/P3JlZi0tMCEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3dpbmRvdy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3RzLWxvYWRlci9pbmRleC5qcz8/cmVmLS0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vd2luZG93LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz10cyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi93aW5kb3cudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTYyZjU4OGIyJlwiIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3Z1ZV9fOyJdLCJzb3VyY2VSb290IjoiIn0=","/*!\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}));","var $ = require('../internals/export');\nvar isArray = require('../internals/is-array');\n\n// `Array.isArray` method\n// https://tc39.es/ecma262/#sec-array.isarray\n$({ target: 'Array', stat: true }, {\n isArray: isArray\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","// a string of all valid unicode whitespaces\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar whitespaces = require('../internals/whitespaces');\n\nvar replace = uncurryThis(''.replace);\nvar whitespace = '[' + whitespaces + ']';\nvar ltrim = RegExp('^' + whitespace + whitespace + '*');\nvar rtrim = RegExp(whitespace + whitespace + '*$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n return function ($this) {\n var string = toString(requireObjectCoercible($this));\n if (TYPE & 1) string = replace(string, ltrim, '');\n if (TYPE & 2) string = replace(string, rtrim, '');\n return string;\n };\n};\n\nmodule.exports = {\n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.es/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n","/**!\n * Sortable 1.14.0\n * @author\tRubaXa \n * @author\towenm \n * @license MIT\n */\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\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 _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) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar version = \"1.14.0\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !! /*@__PURE__*/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, includeDragEl) {\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 && (includeDragEl || 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 = _objectSpread2({}, 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](_objectSpread2({\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](_objectSpread2({\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 = _objectSpread2(_objectSpread2({}, 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 _excluded = [\"evt\"];\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, _excluded);\n\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({\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(_objectSpread2({\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 var threshold = sortable[expando].options.emptyInsertThreshold;\n if (!threshold || lastChild(sortable)) return;\n var rect = getRect(sortable),\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n\n if (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, _objectSpread2({\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 = parentEl !== rootEl) // 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 // Insert to end of list\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n } // if there is a last element, it is the target\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 (elLastChild && _ghostIsFirst(evt, vertical, this)) {\n // Insert to start of list\n var firstChild = getChild(el, 0, options, true);\n\n if (firstChild === dragEl) {\n return completed(false);\n }\n\n target = firstChild;\n targetRect = getRect(target);\n\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {\n capture();\n el.insertBefore(dragEl, firstChild);\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 _ghostIsFirst(evt, vertical, sortable) {\n var rect = getRect(getChild(sortable.el, 0, sortable.options, true));\n var spacer = 10;\n return vertical ? evt.clientX < rect.left - spacer || evt.clientY < rect.top && evt.clientX < rect.right : evt.clientY < rect.top - spacer || evt.clientY < rect.bottom && evt.clientX < rect.left;\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 = _objectSpread2(_objectSpread2({}, 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 forceAutoScrollFallback: false,\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 || this.options.forceAutoScrollFallback || 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 folding = false; // Do not \"unfold\" after around dragEl if reverted\n\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 /**\n * Selects the provided multi-drag item\n * @param {HTMLElement} el The element to be selected\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 /**\n * Deselects the provided multi-drag item\n * @param {HTMLElement} el The element to be deselected\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/**\n * Insert multi-drag clones\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\n * @param {HTMLElement} rootEl\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","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"research\"},[_c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col-md-12\"},[(_vm.loading)?_c('div',{staticClass:\"loading-wrap\"},[_vm._m(0)]):_vm._e(),_c('div',{staticClass:\"research-left\"},[_c('survey',{attrs:{\"survey\":_vm.survey}})],1)])])])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"lds-ellipsis\"},[_c('div'),_c('div'),_c('div'),_c('div')])}]\n\nexport { render, staticRenderFns }","\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_view.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_view.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./survey_view.vue?vue&type=template&id=48caf156&scoped=true&\"\nimport script from \"./survey_view.vue?vue&type=script&lang=js&\"\nexport * from \"./survey_view.vue?vue&type=script&lang=js&\"\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 \"48caf156\",\n null\n \n)\n\nexport default component.exports","var global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar trim = require('../internals/string-trim').trim;\nvar whitespaces = require('../internals/whitespaces');\n\nvar $parseInt = global.parseInt;\nvar Symbol = global.Symbol;\nvar ITERATOR = Symbol && Symbol.iterator;\nvar hex = /^[+-]?0x/i;\nvar exec = uncurryThis(hex.exec);\nvar FORCED = $parseInt(whitespaces + '08') !== 8 || $parseInt(whitespaces + '0x16') !== 22\n // MS Edge 18- broken with boxed symbols\n || (ITERATOR && !fails(function () { $parseInt(Object(ITERATOR)); }));\n\n// `parseInt` method\n// https://tc39.es/ecma262/#sec-parseint-string-radix\nmodule.exports = FORCED ? function parseInt(string, radix) {\n var S = trim(toString(string));\n return $parseInt(S, (radix >>> 0) || (exec(hex, S) ? 16 : 10));\n} : $parseInt;\n","'use strict';\n/* eslint-disable es/no-array-prototype-indexof -- required for testing */\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar $IndexOf = require('../internals/array-includes').indexOf;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar un$IndexOf = uncurryThis([].indexOf);\n\nvar NEGATIVE_ZERO = !!un$IndexOf && 1 / un$IndexOf([1], 1, -0) < 0;\nvar STRICT_METHOD = arrayMethodIsStrict('indexOf');\n\n// `Array.prototype.indexOf` method\n// https://tc39.es/ecma262/#sec-array.prototype.indexof\n$({ target: 'Array', proto: true, forced: NEGATIVE_ZERO || !STRICT_METHOD }, {\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n var fromIndex = arguments.length > 1 ? arguments[1] : undefined;\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? un$IndexOf(this, searchElement, fromIndex) || 0\n : $IndexOf(this, searchElement, fromIndex);\n }\n});\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"research\"},[_c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col-md-12\"},[(_vm.loading)?_c('div',{staticClass:\"loading-wrap\"},[_vm._m(0)]):_vm._e(),(_vm.user != null)?_c('div',{staticClass:\"research-left\"},[(_vm.survey !== null)?_c('survey',{attrs:{\"survey\":_vm.survey}}):_vm._e()],1):_c('div',{staticClass:\"research-left\",staticStyle:{\"text-align\":\"center\",\"padding\":\"80px 10px\",\"display\":\"block\"}},[_c('i',{staticClass:\"ivu-icon ivu-icon-md-alert\",staticStyle:{\"font-size\":\"36px\",\"color\":\"#217BF4\"}}),_c('div',{staticStyle:{\"margin\":\"20px 0\"}},[_vm._v(\"Нэвтэрч орсны дараа судалгаа бөглөх боломжтой !!!\")]),_c('Button',{staticClass:\"btn-color-primary\",on:{\"click\":function($event){return _vm.gotoLogin()}}},[_vm._v(\"    Нэвтрэх    \")])],1)])])])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"lds-ellipsis\"},[_c('div'),_c('div'),_c('div'),_c('div')])}]\n\nexport { render, staticRenderFns }","\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!./form_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!./form_survey.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./form_survey.vue?vue&type=template&id=026956c3&scoped=true&\"\nimport script from \"./form_survey.vue?vue&type=script&lang=js&\"\nexport * from \"./form_survey.vue?vue&type=script&lang=js&\"\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 \"026956c3\",\n null\n \n)\n\nexport default component.exports","var $ = require('../internals/export');\nvar $parseInt = require('../internals/number-parse-int');\n\n// `parseInt` method\n// https://tc39.es/ecma262/#sec-parseint-string-radix\n$({ global: true, forced: parseInt != $parseInt }, {\n parseInt: $parseInt\n});\n","/*! nouislider - 14.7.0 - 4/6/2021 */\n(function(factory) {\n if (typeof define === \"function\" && define.amd) {\n define([], factory);\n } else if (typeof exports === \"object\") {\n module.exports = factory();\n } else {\n window.noUiSlider = factory();\n }\n})(function() {\n \"use strict\";\n var VERSION = \"14.7.0\";\n //region Helper Methods\n function isValidFormatter(entry) {\n return typeof entry === \"object\" && typeof entry.to === \"function\" && typeof entry.from === \"function\";\n }\n function removeElement(el) {\n el.parentElement.removeChild(el);\n }\n function isSet(value) {\n return value !== null && value !== undefined;\n }\n // Bindable version\n function preventDefault(e) {\n e.preventDefault();\n }\n // Removes duplicates from an array.\n function unique(array) {\n return array.filter(function (a) {\n return !this[a] ? (this[a] = true) : false;\n }, {});\n }\n // Round a value to the closest 'to'.\n function closest(value, to) {\n return Math.round(value / to) * to;\n }\n // Current position of an element relative to the document.\n function offset(elem, orientation) {\n var rect = elem.getBoundingClientRect();\n var doc = elem.ownerDocument;\n var docElem = doc.documentElement;\n var pageOffset = getPageOffset(doc);\n // getBoundingClientRect contains left scroll in Chrome on Android.\n // I haven't found a feature detection that proves this. Worst case\n // scenario on mis-match: the 'tap' feature on horizontal sliders breaks.\n if (/webkit.*Chrome.*Mobile/i.test(navigator.userAgent)) {\n pageOffset.x = 0;\n }\n return orientation ? rect.top + pageOffset.y - docElem.clientTop : rect.left + pageOffset.x - docElem.clientLeft;\n }\n // Checks whether a value is numerical.\n function isNumeric(a) {\n return typeof a === \"number\" && !isNaN(a) && isFinite(a);\n }\n // Sets a class and removes it after [duration] ms.\n function addClassFor(element, className, duration) {\n if (duration > 0) {\n addClass(element, className);\n setTimeout(function () {\n removeClass(element, className);\n }, duration);\n }\n }\n // Limits a value to 0 - 100\n function limit(a) {\n return Math.max(Math.min(a, 100), 0);\n }\n // Wraps a variable as an array, if it isn't one yet.\n // Note that an input array is returned by reference!\n function asArray(a) {\n return Array.isArray(a) ? a : [a];\n }\n // Counts decimals\n function countDecimals(numStr) {\n numStr = String(numStr);\n var pieces = numStr.split(\".\");\n return pieces.length > 1 ? pieces[1].length : 0;\n }\n // http://youmightnotneedjquery.com/#add_class\n function addClass(el, className) {\n if (el.classList && !/\\s/.test(className)) {\n el.classList.add(className);\n }\n else {\n el.className += \" \" + className;\n }\n }\n // http://youmightnotneedjquery.com/#remove_class\n function removeClass(el, className) {\n if (el.classList && !/\\s/.test(className)) {\n el.classList.remove(className);\n }\n else {\n el.className = el.className.replace(new RegExp(\"(^|\\\\b)\" + className.split(\" \").join(\"|\") + \"(\\\\b|$)\", \"gi\"), \" \");\n }\n }\n // https://plainjs.com/javascript/attributes/adding-removing-and-testing-for-classes-9/\n function hasClass(el, className) {\n return el.classList ? el.classList.contains(className) : new RegExp(\"\\\\b\" + className + \"\\\\b\").test(el.className);\n }\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollY#Notes\n function getPageOffset(doc) {\n var supportPageOffset = window.pageXOffset !== undefined;\n var isCSS1Compat = (doc.compatMode || \"\") === \"CSS1Compat\";\n var x = supportPageOffset\n ? window.pageXOffset\n : isCSS1Compat\n ? doc.documentElement.scrollLeft\n : doc.body.scrollLeft;\n var y = supportPageOffset ? window.pageYOffset : isCSS1Compat ? doc.documentElement.scrollTop : doc.body.scrollTop;\n return {\n x: x,\n y: y\n };\n }\n // we provide a function to compute constants instead\n // of accessing window.* as soon as the module needs it\n // so that we do not compute anything if not needed\n function getActions() {\n // Determine the events to bind. IE11 implements pointerEvents without\n // a prefix, which breaks compatibility with the IE10 implementation.\n return window.navigator.pointerEnabled\n ? {\n start: \"pointerdown\",\n move: \"pointermove\",\n end: \"pointerup\"\n }\n : window.navigator.msPointerEnabled\n ? {\n start: \"MSPointerDown\",\n move: \"MSPointerMove\",\n end: \"MSPointerUp\"\n }\n : {\n start: \"mousedown touchstart\",\n move: \"mousemove touchmove\",\n end: \"mouseup touchend\"\n };\n }\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // Issue #785\n function getSupportsPassive() {\n var supportsPassive = false;\n /* eslint-disable */\n try {\n var opts = Object.defineProperty({}, \"passive\", {\n get: function () {\n supportsPassive = true;\n }\n });\n window.addEventListener(\"test\", null, opts);\n }\n catch (e) { }\n /* eslint-enable */\n return supportsPassive;\n }\n function getSupportsTouchActionNone() {\n return window.CSS && CSS.supports && CSS.supports(\"touch-action\", \"none\");\n }\n //endregion\n //region Range Calculation\n // Determine the size of a sub-range in relation to a full range.\n function subRangeRatio(pa, pb) {\n return 100 / (pb - pa);\n }\n // (percentage) How many percent is this value of this range?\n function fromPercentage(range, value, startRange) {\n return (value * 100) / (range[startRange + 1] - range[startRange]);\n }\n // (percentage) Where is this value on this range?\n function toPercentage(range, value) {\n return fromPercentage(range, range[0] < 0 ? value + Math.abs(range[0]) : value - range[0], 0);\n }\n // (value) How much is this percentage on this range?\n function isPercentage(range, value) {\n return (value * (range[1] - range[0])) / 100 + range[0];\n }\n function getJ(value, arr) {\n var j = 1;\n while (value >= arr[j]) {\n j += 1;\n }\n return j;\n }\n // (percentage) Input a value, find where, on a scale of 0-100, it applies.\n function toStepping(xVal, xPct, value) {\n if (value >= xVal.slice(-1)[0]) {\n return 100;\n }\n var j = getJ(value, xVal);\n var va = xVal[j - 1];\n var vb = xVal[j];\n var pa = xPct[j - 1];\n var pb = xPct[j];\n return pa + toPercentage([va, vb], value) / subRangeRatio(pa, pb);\n }\n // (value) Input a percentage, find where it is on the specified range.\n function fromStepping(xVal, xPct, value) {\n // There is no range group that fits 100\n if (value >= 100) {\n return xVal.slice(-1)[0];\n }\n var j = getJ(value, xPct);\n var va = xVal[j - 1];\n var vb = xVal[j];\n var pa = xPct[j - 1];\n var pb = xPct[j];\n return isPercentage([va, vb], (value - pa) * subRangeRatio(pa, pb));\n }\n // (percentage) Get the step that applies at a certain value.\n function getStep(xPct, xSteps, snap, value) {\n if (value === 100) {\n return value;\n }\n var j = getJ(value, xPct);\n var a = xPct[j - 1];\n var b = xPct[j];\n // If 'snap' is set, steps are used as fixed points on the slider.\n if (snap) {\n // Find the closest position, a or b.\n if (value - a > (b - a) / 2) {\n return b;\n }\n return a;\n }\n if (!xSteps[j - 1]) {\n return value;\n }\n return xPct[j - 1] + closest(value - xPct[j - 1], xSteps[j - 1]);\n }\n function handleEntryPoint(index, value, that) {\n var percentage;\n // Wrap numerical input in an array.\n if (typeof value === \"number\") {\n value = [value];\n }\n // Reject any invalid input, by testing whether value is an array.\n if (!Array.isArray(value)) {\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'range' contains invalid value.\");\n }\n // Covert min/max syntax to 0 and 100.\n if (index === \"min\") {\n percentage = 0;\n }\n else if (index === \"max\") {\n percentage = 100;\n }\n else {\n percentage = parseFloat(index);\n }\n // Check for correct input.\n if (!isNumeric(percentage) || !isNumeric(value[0])) {\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'range' value isn't numeric.\");\n }\n // Store values.\n that.xPct.push(percentage);\n that.xVal.push(value[0]);\n // NaN will evaluate to false too, but to keep\n // logging clear, set step explicitly. Make sure\n // not to override the 'step' setting with false.\n if (!percentage) {\n if (!isNaN(value[1])) {\n that.xSteps[0] = value[1];\n }\n }\n else {\n that.xSteps.push(isNaN(value[1]) ? false : value[1]);\n }\n that.xHighestCompleteStep.push(0);\n }\n function handleStepPoint(i, n, that) {\n // Ignore 'false' stepping.\n if (!n) {\n return;\n }\n // Step over zero-length ranges (#948);\n if (that.xVal[i] === that.xVal[i + 1]) {\n that.xSteps[i] = that.xHighestCompleteStep[i] = that.xVal[i];\n return;\n }\n // Factor to range ratio\n that.xSteps[i] =\n fromPercentage([that.xVal[i], that.xVal[i + 1]], n, 0) / subRangeRatio(that.xPct[i], that.xPct[i + 1]);\n var totalSteps = (that.xVal[i + 1] - that.xVal[i]) / that.xNumSteps[i];\n var highestStep = Math.ceil(Number(totalSteps.toFixed(3)) - 1);\n var step = that.xVal[i] + that.xNumSteps[i] * highestStep;\n that.xHighestCompleteStep[i] = step;\n }\n //endregion\n //region Spectrum\n function Spectrum(entry, snap, singleStep) {\n this.xPct = [];\n this.xVal = [];\n this.xSteps = [singleStep || false];\n this.xNumSteps = [false];\n this.xHighestCompleteStep = [];\n this.snap = snap;\n var index;\n var ordered = []; // [0, 'min'], [1, '50%'], [2, 'max']\n // Map the object keys to an array.\n for (index in entry) {\n if (entry.hasOwnProperty(index)) {\n ordered.push([entry[index], index]);\n }\n }\n // Sort all entries by value (numeric sort).\n if (ordered.length && typeof ordered[0][0] === \"object\") {\n ordered.sort(function (a, b) {\n return a[0][0] - b[0][0];\n });\n }\n else {\n ordered.sort(function (a, b) {\n return a[0] - b[0];\n });\n }\n // Convert all entries to subranges.\n for (index = 0; index < ordered.length; index++) {\n handleEntryPoint(ordered[index][1], ordered[index][0], this);\n }\n // Store the actual step values.\n // xSteps is sorted in the same order as xPct and xVal.\n this.xNumSteps = this.xSteps.slice(0);\n // Convert all numeric steps to the percentage of the subrange they represent.\n for (index = 0; index < this.xNumSteps.length; index++) {\n handleStepPoint(index, this.xNumSteps[index], this);\n }\n }\n Spectrum.prototype.getDistance = function (value) {\n var index;\n var distances = [];\n for (index = 0; index < this.xNumSteps.length - 1; index++) {\n // last \"range\" can't contain step size as it is purely an endpoint.\n var step = this.xNumSteps[index];\n if (step && (value / step) % 1 !== 0) {\n throw new Error(\"noUiSlider (\" +\n VERSION +\n \"): 'limit', 'margin' and 'padding' of \" +\n this.xPct[index] +\n \"% range must be divisible by step.\");\n }\n // Calculate percentual distance in current range of limit, margin or padding\n distances[index] = fromPercentage(this.xVal, value, index);\n }\n return distances;\n };\n // Calculate the percentual distance over the whole scale of ranges.\n // direction: 0 = backwards / 1 = forwards\n Spectrum.prototype.getAbsoluteDistance = function (value, distances, direction) {\n var xPct_index = 0;\n // Calculate range where to start calculation\n if (value < this.xPct[this.xPct.length - 1]) {\n while (value > this.xPct[xPct_index + 1]) {\n xPct_index++;\n }\n }\n else if (value === this.xPct[this.xPct.length - 1]) {\n xPct_index = this.xPct.length - 2;\n }\n // If looking backwards and the value is exactly at a range separator then look one range further\n if (!direction && value === this.xPct[xPct_index + 1]) {\n xPct_index++;\n }\n var start_factor;\n var rest_factor = 1;\n var rest_rel_distance = distances[xPct_index];\n var range_pct = 0;\n var rel_range_distance = 0;\n var abs_distance_counter = 0;\n var range_counter = 0;\n // Calculate what part of the start range the value is\n if (direction) {\n start_factor = (value - this.xPct[xPct_index]) / (this.xPct[xPct_index + 1] - this.xPct[xPct_index]);\n }\n else {\n start_factor = (this.xPct[xPct_index + 1] - value) / (this.xPct[xPct_index + 1] - this.xPct[xPct_index]);\n }\n // Do until the complete distance across ranges is calculated\n while (rest_rel_distance > 0) {\n // Calculate the percentage of total range\n range_pct = this.xPct[xPct_index + 1 + range_counter] - this.xPct[xPct_index + range_counter];\n // Detect if the margin, padding or limit is larger then the current range and calculate\n if (distances[xPct_index + range_counter] * rest_factor + 100 - start_factor * 100 > 100) {\n // If larger then take the percentual distance of the whole range\n rel_range_distance = range_pct * start_factor;\n // Rest factor of relative percentual distance still to be calculated\n rest_factor = (rest_rel_distance - 100 * start_factor) / distances[xPct_index + range_counter];\n // Set start factor to 1 as for next range it does not apply.\n start_factor = 1;\n }\n else {\n // If smaller or equal then take the percentual distance of the calculate percentual part of that range\n rel_range_distance = ((distances[xPct_index + range_counter] * range_pct) / 100) * rest_factor;\n // No rest left as the rest fits in current range\n rest_factor = 0;\n }\n if (direction) {\n abs_distance_counter = abs_distance_counter - rel_range_distance;\n // Limit range to first range when distance becomes outside of minimum range\n if (this.xPct.length + range_counter >= 1) {\n range_counter--;\n }\n }\n else {\n abs_distance_counter = abs_distance_counter + rel_range_distance;\n // Limit range to last range when distance becomes outside of maximum range\n if (this.xPct.length - range_counter >= 1) {\n range_counter++;\n }\n }\n // Rest of relative percentual distance still to be calculated\n rest_rel_distance = distances[xPct_index + range_counter] * rest_factor;\n }\n return value + abs_distance_counter;\n };\n Spectrum.prototype.toStepping = function (value) {\n value = toStepping(this.xVal, this.xPct, value);\n return value;\n };\n Spectrum.prototype.fromStepping = function (value) {\n return fromStepping(this.xVal, this.xPct, value);\n };\n Spectrum.prototype.getStep = function (value) {\n value = getStep(this.xPct, this.xSteps, this.snap, value);\n return value;\n };\n Spectrum.prototype.getDefaultStep = function (value, isDown, size) {\n var j = getJ(value, this.xPct);\n // When at the top or stepping down, look at the previous sub-range\n if (value === 100 || (isDown && value === this.xPct[j - 1])) {\n j = Math.max(j - 1, 1);\n }\n return (this.xVal[j] - this.xVal[j - 1]) / size;\n };\n Spectrum.prototype.getNearbySteps = function (value) {\n var j = getJ(value, this.xPct);\n return {\n stepBefore: {\n startValue: this.xVal[j - 2],\n step: this.xNumSteps[j - 2],\n highestStep: this.xHighestCompleteStep[j - 2]\n },\n thisStep: {\n startValue: this.xVal[j - 1],\n step: this.xNumSteps[j - 1],\n highestStep: this.xHighestCompleteStep[j - 1]\n },\n stepAfter: {\n startValue: this.xVal[j],\n step: this.xNumSteps[j],\n highestStep: this.xHighestCompleteStep[j]\n }\n };\n };\n Spectrum.prototype.countStepDecimals = function () {\n var stepDecimals = this.xNumSteps.map(countDecimals);\n return Math.max.apply(null, stepDecimals);\n };\n // Outside testing\n Spectrum.prototype.convert = function (value) {\n return this.getStep(this.toStepping(value));\n };\n //endregion\n //region Options\n /*\tEvery input option is tested and parsed. This'll prevent\n endless validation in internal methods. These tests are\n structured with an item for every option available. An\n option can be marked as required by setting the 'r' flag.\n The testing function is provided with three arguments:\n - The provided value for the option;\n - A reference to the options object;\n - The name for the option;\n \n The testing function returns false when an error is detected,\n or true when everything is OK. It can also modify the option\n object, to make sure all values can be correctly looped elsewhere. */\n //region Defaults\n var defaultFormatter = {\n to: function (value) {\n return value !== undefined && value.toFixed(2);\n },\n from: Number\n };\n var cssClasses = {\n target: \"target\",\n base: \"base\",\n origin: \"origin\",\n handle: \"handle\",\n handleLower: \"handle-lower\",\n handleUpper: \"handle-upper\",\n touchArea: \"touch-area\",\n horizontal: \"horizontal\",\n vertical: \"vertical\",\n background: \"background\",\n connect: \"connect\",\n connects: \"connects\",\n ltr: \"ltr\",\n rtl: \"rtl\",\n textDirectionLtr: \"txt-dir-ltr\",\n textDirectionRtl: \"txt-dir-rtl\",\n draggable: \"draggable\",\n drag: \"state-drag\",\n tap: \"state-tap\",\n active: \"active\",\n tooltip: \"tooltip\",\n pips: \"pips\",\n pipsHorizontal: \"pips-horizontal\",\n pipsVertical: \"pips-vertical\",\n marker: \"marker\",\n markerHorizontal: \"marker-horizontal\",\n markerVertical: \"marker-vertical\",\n markerNormal: \"marker-normal\",\n markerLarge: \"marker-large\",\n markerSub: \"marker-sub\",\n value: \"value\",\n valueHorizontal: \"value-horizontal\",\n valueVertical: \"value-vertical\",\n valueNormal: \"value-normal\",\n valueLarge: \"value-large\",\n valueSub: \"value-sub\"\n };\n // Namespaces of internal event listeners\n var INTERNAL_EVENT_NS = {\n tooltips: \".__tooltips\",\n aria: \".__aria\"\n };\n //endregion\n function validateFormat(entry) {\n // Any object with a to and from method is supported.\n if (isValidFormatter(entry)) {\n return true;\n }\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'format' requires 'to' and 'from' methods.\");\n }\n function testStep(parsed, entry) {\n if (!isNumeric(entry)) {\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'step' is not numeric.\");\n }\n // The step option can still be used to set stepping\n // for linear sliders. Overwritten if set in 'range'.\n parsed.singleStep = entry;\n }\n function testKeyboardPageMultiplier(parsed, entry) {\n if (!isNumeric(entry)) {\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'keyboardPageMultiplier' is not numeric.\");\n }\n parsed.keyboardPageMultiplier = entry;\n }\n function testKeyboardDefaultStep(parsed, entry) {\n if (!isNumeric(entry)) {\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'keyboardDefaultStep' is not numeric.\");\n }\n parsed.keyboardDefaultStep = entry;\n }\n function testRange(parsed, entry) {\n // Filter incorrect input.\n if (typeof entry !== \"object\" || Array.isArray(entry)) {\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'range' is not an object.\");\n }\n // Catch missing start or end.\n if (entry.min === undefined || entry.max === undefined) {\n throw new Error(\"noUiSlider (\" + VERSION + \"): Missing 'min' or 'max' in 'range'.\");\n }\n // Catch equal start or end.\n if (entry.min === entry.max) {\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'range' 'min' and 'max' cannot be equal.\");\n }\n parsed.spectrum = new Spectrum(entry, parsed.snap, parsed.singleStep);\n }\n function testStart(parsed, entry) {\n entry = asArray(entry);\n // Validate input. Values aren't tested, as the public .val method\n // will always provide a valid location.\n if (!Array.isArray(entry) || !entry.length) {\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'start' option is incorrect.\");\n }\n // Store the number of handles.\n parsed.handles = entry.length;\n // When the slider is initialized, the .val method will\n // be called with the start options.\n parsed.start = entry;\n }\n function testSnap(parsed, entry) {\n // Enforce 100% stepping within subranges.\n parsed.snap = entry;\n if (typeof entry !== \"boolean\") {\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'snap' option must be a boolean.\");\n }\n }\n function testAnimate(parsed, entry) {\n // Enforce 100% stepping within subranges.\n parsed.animate = entry;\n if (typeof entry !== \"boolean\") {\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'animate' option must be a boolean.\");\n }\n }\n function testAnimationDuration(parsed, entry) {\n parsed.animationDuration = entry;\n if (typeof entry !== \"number\") {\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'animationDuration' option must be a number.\");\n }\n }\n function testConnect(parsed, entry) {\n var connect = [false];\n var i;\n // Map legacy options\n if (entry === \"lower\") {\n entry = [true, false];\n }\n else if (entry === \"upper\") {\n entry = [false, true];\n }\n // Handle boolean options\n if (entry === true || entry === false) {\n for (i = 1; i < parsed.handles; i++) {\n connect.push(entry);\n }\n connect.push(false);\n }\n // Reject invalid input\n else if (!Array.isArray(entry) || !entry.length || entry.length !== parsed.handles + 1) {\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'connect' option doesn't match handle count.\");\n }\n else {\n connect = entry;\n }\n parsed.connect = connect;\n }\n function testOrientation(parsed, entry) {\n // Set orientation to an a numerical value for easy\n // array selection.\n switch (entry) {\n case \"horizontal\":\n parsed.ort = 0;\n break;\n case \"vertical\":\n parsed.ort = 1;\n break;\n default:\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'orientation' option is invalid.\");\n }\n }\n function testMargin(parsed, entry) {\n if (!isNumeric(entry)) {\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'margin' option must be numeric.\");\n }\n // Issue #582\n if (entry === 0) {\n return;\n }\n parsed.margin = parsed.spectrum.getDistance(entry);\n }\n function testLimit(parsed, entry) {\n if (!isNumeric(entry)) {\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'limit' option must be numeric.\");\n }\n parsed.limit = parsed.spectrum.getDistance(entry);\n if (!parsed.limit || parsed.handles < 2) {\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'limit' option is only supported on linear sliders with 2 or more handles.\");\n }\n }\n function testPadding(parsed, entry) {\n var index;\n if (!isNumeric(entry) && !Array.isArray(entry)) {\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'padding' option must be numeric or array of exactly 2 numbers.\");\n }\n if (Array.isArray(entry) && !(entry.length === 2 || isNumeric(entry[0]) || isNumeric(entry[1]))) {\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'padding' option must be numeric or array of exactly 2 numbers.\");\n }\n if (entry === 0) {\n return;\n }\n if (!Array.isArray(entry)) {\n entry = [entry, entry];\n }\n // 'getDistance' returns false for invalid values.\n parsed.padding = [parsed.spectrum.getDistance(entry[0]), parsed.spectrum.getDistance(entry[1])];\n for (index = 0; index < parsed.spectrum.xNumSteps.length - 1; index++) {\n // last \"range\" can't contain step size as it is purely an endpoint.\n if (parsed.padding[0][index] < 0 || parsed.padding[1][index] < 0) {\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'padding' option must be a positive number(s).\");\n }\n }\n var totalPadding = entry[0] + entry[1];\n var firstValue = parsed.spectrum.xVal[0];\n var lastValue = parsed.spectrum.xVal[parsed.spectrum.xVal.length - 1];\n if (totalPadding / (lastValue - firstValue) > 1) {\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'padding' option must not exceed 100% of the range.\");\n }\n }\n function testDirection(parsed, entry) {\n // Set direction as a numerical value for easy parsing.\n // Invert connection for RTL sliders, so that the proper\n // handles get the connect/background classes.\n switch (entry) {\n case \"ltr\":\n parsed.dir = 0;\n break;\n case \"rtl\":\n parsed.dir = 1;\n break;\n default:\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'direction' option was not recognized.\");\n }\n }\n function testBehaviour(parsed, entry) {\n // Make sure the input is a string.\n if (typeof entry !== \"string\") {\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'behaviour' must be a string containing options.\");\n }\n // Check if the string contains any keywords.\n // None are required.\n var tap = entry.indexOf(\"tap\") >= 0;\n var drag = entry.indexOf(\"drag\") >= 0;\n var fixed = entry.indexOf(\"fixed\") >= 0;\n var snap = entry.indexOf(\"snap\") >= 0;\n var hover = entry.indexOf(\"hover\") >= 0;\n var unconstrained = entry.indexOf(\"unconstrained\") >= 0;\n if (fixed) {\n if (parsed.handles !== 2) {\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'fixed' behaviour must be used with 2 handles\");\n }\n // Use margin to enforce fixed state\n testMargin(parsed, parsed.start[1] - parsed.start[0]);\n }\n if (unconstrained && (parsed.margin || parsed.limit)) {\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'unconstrained' behaviour cannot be used with margin or limit\");\n }\n parsed.events = {\n tap: tap || snap,\n drag: drag,\n fixed: fixed,\n snap: snap,\n hover: hover,\n unconstrained: unconstrained\n };\n }\n function testTooltips(parsed, entry) {\n if (entry === false) {\n return;\n }\n if (entry === true) {\n parsed.tooltips = [];\n for (var i = 0; i < parsed.handles; i++) {\n parsed.tooltips.push(true);\n }\n }\n else {\n parsed.tooltips = asArray(entry);\n if (parsed.tooltips.length !== parsed.handles) {\n throw new Error(\"noUiSlider (\" + VERSION + \"): must pass a formatter for all handles.\");\n }\n parsed.tooltips.forEach(function (formatter) {\n if (typeof formatter !== \"boolean\" &&\n (typeof formatter !== \"object\" || typeof formatter.to !== \"function\")) {\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'tooltips' must be passed a formatter or 'false'.\");\n }\n });\n }\n }\n function testAriaFormat(parsed, entry) {\n parsed.ariaFormat = entry;\n validateFormat(entry);\n }\n function testFormat(parsed, entry) {\n parsed.format = entry;\n validateFormat(entry);\n }\n function testKeyboardSupport(parsed, entry) {\n parsed.keyboardSupport = entry;\n if (typeof entry !== \"boolean\") {\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'keyboardSupport' option must be a boolean.\");\n }\n }\n function testDocumentElement(parsed, entry) {\n // This is an advanced option. Passed values are used without validation.\n parsed.documentElement = entry;\n }\n function testCssPrefix(parsed, entry) {\n if (typeof entry !== \"string\" && entry !== false) {\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'cssPrefix' must be a string or `false`.\");\n }\n parsed.cssPrefix = entry;\n }\n function testCssClasses(parsed, entry) {\n if (typeof entry !== \"object\") {\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'cssClasses' must be an object.\");\n }\n if (typeof parsed.cssPrefix === \"string\") {\n parsed.cssClasses = {};\n for (var key in entry) {\n if (!entry.hasOwnProperty(key)) {\n continue;\n }\n parsed.cssClasses[key] = parsed.cssPrefix + entry[key];\n }\n }\n else {\n parsed.cssClasses = entry;\n }\n }\n // Test all developer settings and parse to assumption-safe values.\n function testOptions(options) {\n // To prove a fix for #537, freeze options here.\n // If the object is modified, an error will be thrown.\n // Object.freeze(options);\n var parsed = {\n margin: 0,\n limit: 0,\n padding: 0,\n animate: true,\n animationDuration: 300,\n ariaFormat: defaultFormatter,\n format: defaultFormatter\n };\n // Tests are executed in the order they are presented here.\n var tests = {\n step: { r: false, t: testStep },\n keyboardPageMultiplier: { r: false, t: testKeyboardPageMultiplier },\n keyboardDefaultStep: { r: false, t: testKeyboardDefaultStep },\n start: { r: true, t: testStart },\n connect: { r: true, t: testConnect },\n direction: { r: true, t: testDirection },\n snap: { r: false, t: testSnap },\n animate: { r: false, t: testAnimate },\n animationDuration: { r: false, t: testAnimationDuration },\n range: { r: true, t: testRange },\n orientation: { r: false, t: testOrientation },\n margin: { r: false, t: testMargin },\n limit: { r: false, t: testLimit },\n padding: { r: false, t: testPadding },\n behaviour: { r: true, t: testBehaviour },\n ariaFormat: { r: false, t: testAriaFormat },\n format: { r: false, t: testFormat },\n tooltips: { r: false, t: testTooltips },\n keyboardSupport: { r: true, t: testKeyboardSupport },\n documentElement: { r: false, t: testDocumentElement },\n cssPrefix: { r: true, t: testCssPrefix },\n cssClasses: { r: true, t: testCssClasses }\n };\n var defaults = {\n connect: false,\n direction: \"ltr\",\n behaviour: \"tap\",\n orientation: \"horizontal\",\n keyboardSupport: true,\n cssPrefix: \"noUi-\",\n cssClasses: cssClasses,\n keyboardPageMultiplier: 5,\n keyboardDefaultStep: 10\n };\n // AriaFormat defaults to regular format, if any.\n if (options.format && !options.ariaFormat) {\n options.ariaFormat = options.format;\n }\n // Run all options through a testing mechanism to ensure correct\n // input. It should be noted that options might get modified to\n // be handled properly. E.g. wrapping integers in arrays.\n Object.keys(tests).forEach(function (name) {\n // If the option isn't set, but it is required, throw an error.\n if (!isSet(options[name]) && defaults[name] === undefined) {\n if (tests[name].r) {\n throw new Error(\"noUiSlider (\" + VERSION + \"): '\" + name + \"' is required.\");\n }\n return true;\n }\n tests[name].t(parsed, !isSet(options[name]) ? defaults[name] : options[name]);\n });\n // Forward pips options\n parsed.pips = options.pips;\n // All recent browsers accept unprefixed transform.\n // We need -ms- for IE9 and -webkit- for older Android;\n // Assume use of -webkit- if unprefixed and -ms- are not supported.\n // https://caniuse.com/#feat=transforms2d\n var d = document.createElement(\"div\");\n var msPrefix = d.style.msTransform !== undefined;\n var noPrefix = d.style.transform !== undefined;\n parsed.transformRule = noPrefix ? \"transform\" : msPrefix ? \"msTransform\" : \"webkitTransform\";\n // Pips don't move, so we can place them using left/top.\n var styles = [[\"left\", \"top\"], [\"right\", \"bottom\"]];\n parsed.style = styles[parsed.dir][parsed.ort];\n return parsed;\n }\n //endregion\n function scope(target, options, originalOptions) {\n var actions = getActions();\n var supportsTouchActionNone = getSupportsTouchActionNone();\n var supportsPassive = supportsTouchActionNone && getSupportsPassive();\n // All variables local to 'scope' are prefixed with 'scope_'\n // Slider DOM Nodes\n var scope_Target = target;\n var scope_Base;\n var scope_Handles;\n var scope_Connects;\n var scope_Pips;\n var scope_Tooltips;\n // Slider state values\n var scope_Spectrum = options.spectrum;\n var scope_Values = [];\n var scope_Locations = [];\n var scope_HandleNumbers = [];\n var scope_ActiveHandlesCount = 0;\n var scope_Events = {};\n // Exposed API\n var scope_Self;\n // Document Nodes\n var scope_Document = target.ownerDocument;\n var scope_DocumentElement = options.documentElement || scope_Document.documentElement;\n var scope_Body = scope_Document.body;\n // Pips constants\n var PIPS_NONE = -1;\n var PIPS_NO_VALUE = 0;\n var PIPS_LARGE_VALUE = 1;\n var PIPS_SMALL_VALUE = 2;\n // For horizontal sliders in standard ltr documents,\n // make .noUi-origin overflow to the left so the document doesn't scroll.\n var scope_DirOffset = scope_Document.dir === \"rtl\" || options.ort === 1 ? 0 : 100;\n // Creates a node, adds it to target, returns the new node.\n function addNodeTo(addTarget, className) {\n var div = scope_Document.createElement(\"div\");\n if (className) {\n addClass(div, className);\n }\n addTarget.appendChild(div);\n return div;\n }\n // Append a origin to the base\n function addOrigin(base, handleNumber) {\n var origin = addNodeTo(base, options.cssClasses.origin);\n var handle = addNodeTo(origin, options.cssClasses.handle);\n addNodeTo(handle, options.cssClasses.touchArea);\n handle.setAttribute(\"data-handle\", handleNumber);\n if (options.keyboardSupport) {\n // https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex\n // 0 = focusable and reachable\n handle.setAttribute(\"tabindex\", \"0\");\n handle.addEventListener(\"keydown\", function (event) {\n return eventKeydown(event, handleNumber);\n });\n }\n handle.setAttribute(\"role\", \"slider\");\n handle.setAttribute(\"aria-orientation\", options.ort ? \"vertical\" : \"horizontal\");\n if (handleNumber === 0) {\n addClass(handle, options.cssClasses.handleLower);\n }\n else if (handleNumber === options.handles - 1) {\n addClass(handle, options.cssClasses.handleUpper);\n }\n return origin;\n }\n // Insert nodes for connect elements\n function addConnect(base, add) {\n if (!add) {\n return false;\n }\n return addNodeTo(base, options.cssClasses.connect);\n }\n // Add handles to the slider base.\n function addElements(connectOptions, base) {\n var connectBase = addNodeTo(base, options.cssClasses.connects);\n scope_Handles = [];\n scope_Connects = [];\n scope_Connects.push(addConnect(connectBase, connectOptions[0]));\n // [::::O====O====O====]\n // connectOptions = [0, 1, 1, 1]\n for (var i = 0; i < options.handles; i++) {\n // Keep a list of all added handles.\n scope_Handles.push(addOrigin(base, i));\n scope_HandleNumbers[i] = i;\n scope_Connects.push(addConnect(connectBase, connectOptions[i + 1]));\n }\n }\n // Initialize a single slider.\n function addSlider(addTarget) {\n // Apply classes and data to the target.\n addClass(addTarget, options.cssClasses.target);\n if (options.dir === 0) {\n addClass(addTarget, options.cssClasses.ltr);\n }\n else {\n addClass(addTarget, options.cssClasses.rtl);\n }\n if (options.ort === 0) {\n addClass(addTarget, options.cssClasses.horizontal);\n }\n else {\n addClass(addTarget, options.cssClasses.vertical);\n }\n var textDirection = getComputedStyle(addTarget).direction;\n if (textDirection === \"rtl\") {\n addClass(addTarget, options.cssClasses.textDirectionRtl);\n }\n else {\n addClass(addTarget, options.cssClasses.textDirectionLtr);\n }\n return addNodeTo(addTarget, options.cssClasses.base);\n }\n function addTooltip(handle, handleNumber) {\n if (!options.tooltips[handleNumber]) {\n return false;\n }\n return addNodeTo(handle.firstChild, options.cssClasses.tooltip);\n }\n function isSliderDisabled() {\n return scope_Target.hasAttribute(\"disabled\");\n }\n // Disable the slider dragging if any handle is disabled\n function isHandleDisabled(handleNumber) {\n var handleOrigin = scope_Handles[handleNumber];\n return handleOrigin.hasAttribute(\"disabled\");\n }\n function removeTooltips() {\n if (scope_Tooltips) {\n removeEvent(\"update\" + INTERNAL_EVENT_NS.tooltips);\n scope_Tooltips.forEach(function (tooltip) {\n if (tooltip) {\n removeElement(tooltip);\n }\n });\n scope_Tooltips = null;\n }\n }\n // The tooltips option is a shorthand for using the 'update' event.\n function tooltips() {\n removeTooltips();\n // Tooltips are added with options.tooltips in original order.\n scope_Tooltips = scope_Handles.map(addTooltip);\n bindEvent(\"update\" + INTERNAL_EVENT_NS.tooltips, function (values, handleNumber, unencoded) {\n if (!scope_Tooltips[handleNumber]) {\n return;\n }\n var formattedValue = values[handleNumber];\n if (options.tooltips[handleNumber] !== true) {\n formattedValue = options.tooltips[handleNumber].to(unencoded[handleNumber]);\n }\n scope_Tooltips[handleNumber].innerHTML = formattedValue;\n });\n }\n function aria() {\n removeEvent(\"update\" + INTERNAL_EVENT_NS.aria);\n bindEvent(\"update\" + INTERNAL_EVENT_NS.aria, function (values, handleNumber, unencoded, tap, positions) {\n // Update Aria Values for all handles, as a change in one changes min and max values for the next.\n scope_HandleNumbers.forEach(function (index) {\n var handle = scope_Handles[index];\n var min = checkHandlePosition(scope_Locations, index, 0, true, true, true);\n var max = checkHandlePosition(scope_Locations, index, 100, true, true, true);\n var now = positions[index];\n // Formatted value for display\n var text = options.ariaFormat.to(unencoded[index]);\n // Map to slider range values\n min = scope_Spectrum.fromStepping(min).toFixed(1);\n max = scope_Spectrum.fromStepping(max).toFixed(1);\n now = scope_Spectrum.fromStepping(now).toFixed(1);\n handle.children[0].setAttribute(\"aria-valuemin\", min);\n handle.children[0].setAttribute(\"aria-valuemax\", max);\n handle.children[0].setAttribute(\"aria-valuenow\", now);\n handle.children[0].setAttribute(\"aria-valuetext\", text);\n });\n });\n }\n function getGroup(mode, values, stepped) {\n // Use the range.\n if (mode === \"range\" || mode === \"steps\") {\n return scope_Spectrum.xVal;\n }\n if (mode === \"count\") {\n if (values < 2) {\n throw new Error(\"noUiSlider (\" + VERSION + \"): 'values' (>= 2) required for mode 'count'.\");\n }\n // Divide 0 - 100 in 'count' parts.\n var interval = values - 1;\n var spread = 100 / interval;\n values = [];\n // List these parts and have them handled as 'positions'.\n while (interval--) {\n values[interval] = interval * spread;\n }\n values.push(100);\n mode = \"positions\";\n }\n if (mode === \"positions\") {\n // Map all percentages to on-range values.\n return values.map(function (value) {\n return scope_Spectrum.fromStepping(stepped ? scope_Spectrum.getStep(value) : value);\n });\n }\n if (mode === \"values\") {\n // If the value must be stepped, it needs to be converted to a percentage first.\n if (stepped) {\n return values.map(function (value) {\n // Convert to percentage, apply step, return to value.\n return scope_Spectrum.fromStepping(scope_Spectrum.getStep(scope_Spectrum.toStepping(value)));\n });\n }\n // Otherwise, we can simply use the values.\n return values;\n }\n }\n function generateSpread(density, mode, group) {\n function safeIncrement(value, increment) {\n // Avoid floating point variance by dropping the smallest decimal places.\n return (value + increment).toFixed(7) / 1;\n }\n var indexes = {};\n var firstInRange = scope_Spectrum.xVal[0];\n var lastInRange = scope_Spectrum.xVal[scope_Spectrum.xVal.length - 1];\n var ignoreFirst = false;\n var ignoreLast = false;\n var prevPct = 0;\n // Create a copy of the group, sort it and filter away all duplicates.\n group = unique(group.slice().sort(function (a, b) {\n return a - b;\n }));\n // Make sure the range starts with the first element.\n if (group[0] !== firstInRange) {\n group.unshift(firstInRange);\n ignoreFirst = true;\n }\n // Likewise for the last one.\n if (group[group.length - 1] !== lastInRange) {\n group.push(lastInRange);\n ignoreLast = true;\n }\n group.forEach(function (current, index) {\n // Get the current step and the lower + upper positions.\n var step;\n var i;\n var q;\n var low = current;\n var high = group[index + 1];\n var newPct;\n var pctDifference;\n var pctPos;\n var type;\n var steps;\n var realSteps;\n var stepSize;\n var isSteps = mode === \"steps\";\n // When using 'steps' mode, use the provided steps.\n // Otherwise, we'll step on to the next subrange.\n if (isSteps) {\n step = scope_Spectrum.xNumSteps[index];\n }\n // Default to a 'full' step.\n if (!step) {\n step = high - low;\n }\n // Low can be 0, so test for false. Index 0 is already handled.\n if (low === false) {\n return;\n }\n // If high is undefined we are at the last subrange. Make sure it iterates once (#1088)\n if (high === undefined) {\n high = low;\n }\n // Make sure step isn't 0, which would cause an infinite loop (#654)\n step = Math.max(step, 0.0000001);\n // Find all steps in the subrange.\n for (i = low; i <= high; i = safeIncrement(i, step)) {\n // Get the percentage value for the current step,\n // calculate the size for the subrange.\n newPct = scope_Spectrum.toStepping(i);\n pctDifference = newPct - prevPct;\n steps = pctDifference / density;\n realSteps = Math.round(steps);\n // This ratio represents the amount of percentage-space a point indicates.\n // For a density 1 the points/percentage = 1. For density 2, that percentage needs to be re-divided.\n // Round the percentage offset to an even number, then divide by two\n // to spread the offset on both sides of the range.\n stepSize = pctDifference / realSteps;\n // Divide all points evenly, adding the correct number to this subrange.\n // Run up to <= so that 100% gets a point, event if ignoreLast is set.\n for (q = 1; q <= realSteps; q += 1) {\n // The ratio between the rounded value and the actual size might be ~1% off.\n // Correct the percentage offset by the number of points\n // per subrange. density = 1 will result in 100 points on the\n // full range, 2 for 50, 4 for 25, etc.\n pctPos = prevPct + q * stepSize;\n indexes[pctPos.toFixed(5)] = [scope_Spectrum.fromStepping(pctPos), 0];\n }\n // Determine the point type.\n type = group.indexOf(i) > -1 ? PIPS_LARGE_VALUE : isSteps ? PIPS_SMALL_VALUE : PIPS_NO_VALUE;\n // Enforce the 'ignoreFirst' option by overwriting the type for 0.\n if (!index && ignoreFirst && i !== high) {\n type = 0;\n }\n if (!(i === high && ignoreLast)) {\n // Mark the 'type' of this point. 0 = plain, 1 = real value, 2 = step value.\n indexes[newPct.toFixed(5)] = [i, type];\n }\n // Update the percentage count.\n prevPct = newPct;\n }\n });\n return indexes;\n }\n function addMarking(spread, filterFunc, formatter) {\n var element = scope_Document.createElement(\"div\");\n var valueSizeClasses = [];\n valueSizeClasses[PIPS_NO_VALUE] = options.cssClasses.valueNormal;\n valueSizeClasses[PIPS_LARGE_VALUE] = options.cssClasses.valueLarge;\n valueSizeClasses[PIPS_SMALL_VALUE] = options.cssClasses.valueSub;\n var markerSizeClasses = [];\n markerSizeClasses[PIPS_NO_VALUE] = options.cssClasses.markerNormal;\n markerSizeClasses[PIPS_LARGE_VALUE] = options.cssClasses.markerLarge;\n markerSizeClasses[PIPS_SMALL_VALUE] = options.cssClasses.markerSub;\n var valueOrientationClasses = [options.cssClasses.valueHorizontal, options.cssClasses.valueVertical];\n var markerOrientationClasses = [options.cssClasses.markerHorizontal, options.cssClasses.markerVertical];\n addClass(element, options.cssClasses.pips);\n addClass(element, options.ort === 0 ? options.cssClasses.pipsHorizontal : options.cssClasses.pipsVertical);\n function getClasses(type, source) {\n var a = source === options.cssClasses.value;\n var orientationClasses = a ? valueOrientationClasses : markerOrientationClasses;\n var sizeClasses = a ? valueSizeClasses : markerSizeClasses;\n return source + \" \" + orientationClasses[options.ort] + \" \" + sizeClasses[type];\n }\n function addSpread(offset, value, type) {\n // Apply the filter function, if it is set.\n type = filterFunc ? filterFunc(value, type) : type;\n if (type === PIPS_NONE) {\n return;\n }\n // Add a marker for every point\n var node = addNodeTo(element, false);\n node.className = getClasses(type, options.cssClasses.marker);\n node.style[options.style] = offset + \"%\";\n // Values are only appended for points marked '1' or '2'.\n if (type > PIPS_NO_VALUE) {\n node = addNodeTo(element, false);\n node.className = getClasses(type, options.cssClasses.value);\n node.setAttribute(\"data-value\", value);\n node.style[options.style] = offset + \"%\";\n node.innerHTML = formatter.to(value);\n }\n }\n // Append all points.\n Object.keys(spread).forEach(function (offset) {\n addSpread(offset, spread[offset][0], spread[offset][1]);\n });\n return element;\n }\n function removePips() {\n if (scope_Pips) {\n removeElement(scope_Pips);\n scope_Pips = null;\n }\n }\n function pips(grid) {\n // Fix #669\n removePips();\n var mode = grid.mode;\n var density = grid.density || 1;\n var filter = grid.filter || false;\n var values = grid.values || false;\n var stepped = grid.stepped || false;\n var group = getGroup(mode, values, stepped);\n var spread = generateSpread(density, mode, group);\n var format = grid.format || {\n to: Math.round\n };\n scope_Pips = scope_Target.appendChild(addMarking(spread, filter, format));\n return scope_Pips;\n }\n // Shorthand for base dimensions.\n function baseSize() {\n var rect = scope_Base.getBoundingClientRect();\n var alt = \"offset\" + [\"Width\", \"Height\"][options.ort];\n return options.ort === 0 ? rect.width || scope_Base[alt] : rect.height || scope_Base[alt];\n }\n // Handler for attaching events trough a proxy.\n function attachEvent(events, element, callback, data) {\n // This function can be used to 'filter' events to the slider.\n // element is a node, not a nodeList\n var method = function (e) {\n e = fixEvent(e, data.pageOffset, data.target || element);\n // fixEvent returns false if this event has a different target\n // when handling (multi-) touch events;\n if (!e) {\n return false;\n }\n // doNotReject is passed by all end events to make sure released touches\n // are not rejected, leaving the slider \"stuck\" to the cursor;\n if (isSliderDisabled() && !data.doNotReject) {\n return false;\n }\n // Stop if an active 'tap' transition is taking place.\n if (hasClass(scope_Target, options.cssClasses.tap) && !data.doNotReject) {\n return false;\n }\n // Ignore right or middle clicks on start #454\n if (events === actions.start && e.buttons !== undefined && e.buttons > 1) {\n return false;\n }\n // Ignore right or middle clicks on start #454\n if (data.hover && e.buttons) {\n return false;\n }\n // 'supportsPassive' is only true if a browser also supports touch-action: none in CSS.\n // iOS safari does not, so it doesn't get to benefit from passive scrolling. iOS does support\n // touch-action: manipulation, but that allows panning, which breaks\n // sliders after zooming/on non-responsive pages.\n // See: https://bugs.webkit.org/show_bug.cgi?id=133112\n if (!supportsPassive) {\n e.preventDefault();\n }\n e.calcPoint = e.points[options.ort];\n // Call the event handler with the event [ and additional data ].\n callback(e, data);\n };\n var methods = [];\n // Bind a closure on the target for every event type.\n events.split(\" \").forEach(function (eventName) {\n element.addEventListener(eventName, method, supportsPassive ? { passive: true } : false);\n methods.push([eventName, method]);\n });\n return methods;\n }\n // Provide a clean event with standardized offset values.\n function fixEvent(e, pageOffset, eventTarget) {\n // Filter the event to register the type, which can be\n // touch, mouse or pointer. Offset changes need to be\n // made on an event specific basis.\n var touch = e.type.indexOf(\"touch\") === 0;\n var mouse = e.type.indexOf(\"mouse\") === 0;\n var pointer = e.type.indexOf(\"pointer\") === 0;\n var x;\n var y;\n // IE10 implemented pointer events with a prefix;\n if (e.type.indexOf(\"MSPointer\") === 0) {\n pointer = true;\n }\n // Erroneous events seem to be passed in occasionally on iOS/iPadOS after user finishes interacting with\n // the slider. They appear to be of type MouseEvent, yet they don't have usual properties set. Ignore\n // events that have no touches or buttons associated with them. (#1057, #1079, #1095)\n if (e.type === \"mousedown\" && !e.buttons && !e.touches) {\n return false;\n }\n // The only thing one handle should be concerned about is the touches that originated on top of it.\n if (touch) {\n // Returns true if a touch originated on the target.\n var isTouchOnTarget = function (checkTouch) {\n return (checkTouch.target === eventTarget ||\n eventTarget.contains(checkTouch.target) ||\n (checkTouch.target.shadowRoot && checkTouch.target.shadowRoot.contains(eventTarget)));\n };\n // In the case of touchstart events, we need to make sure there is still no more than one\n // touch on the target so we look amongst all touches.\n if (e.type === \"touchstart\") {\n var targetTouches = Array.prototype.filter.call(e.touches, isTouchOnTarget);\n // Do not support more than one touch per handle.\n if (targetTouches.length > 1) {\n return false;\n }\n x = targetTouches[0].pageX;\n y = targetTouches[0].pageY;\n }\n else {\n // In the other cases, find on changedTouches is enough.\n var targetTouch = Array.prototype.find.call(e.changedTouches, isTouchOnTarget);\n // Cancel if the target touch has not moved.\n if (!targetTouch) {\n return false;\n }\n x = targetTouch.pageX;\n y = targetTouch.pageY;\n }\n }\n pageOffset = pageOffset || getPageOffset(scope_Document);\n if (mouse || pointer) {\n x = e.clientX + pageOffset.x;\n y = e.clientY + pageOffset.y;\n }\n e.pageOffset = pageOffset;\n e.points = [x, y];\n e.cursor = mouse || pointer; // Fix #435\n return e;\n }\n // Translate a coordinate in the document to a percentage on the slider\n function calcPointToPercentage(calcPoint) {\n var location = calcPoint - offset(scope_Base, options.ort);\n var proposal = (location * 100) / baseSize();\n // Clamp proposal between 0% and 100%\n // Out-of-bound coordinates may occur when .noUi-base pseudo-elements\n // are used (e.g. contained handles feature)\n proposal = limit(proposal);\n return options.dir ? 100 - proposal : proposal;\n }\n // Find handle closest to a certain percentage on the slider\n function getClosestHandle(clickedPosition) {\n var smallestDifference = 100;\n var handleNumber = false;\n scope_Handles.forEach(function (handle, index) {\n // Disabled handles are ignored\n if (isHandleDisabled(index)) {\n return;\n }\n var handlePosition = scope_Locations[index];\n var differenceWithThisHandle = Math.abs(handlePosition - clickedPosition);\n // Initial state\n var clickAtEdge = differenceWithThisHandle === 100 && smallestDifference === 100;\n // Difference with this handle is smaller than the previously checked handle\n var isCloser = differenceWithThisHandle < smallestDifference;\n var isCloserAfter = differenceWithThisHandle <= smallestDifference && clickedPosition > handlePosition;\n if (isCloser || isCloserAfter || clickAtEdge) {\n handleNumber = index;\n smallestDifference = differenceWithThisHandle;\n }\n });\n return handleNumber;\n }\n // Fire 'end' when a mouse or pen leaves the document.\n function documentLeave(event, data) {\n if (event.type === \"mouseout\" && event.target.nodeName === \"HTML\" && event.relatedTarget === null) {\n eventEnd(event, data);\n }\n }\n // Handle movement on document for handle and range drag.\n function eventMove(event, data) {\n // Fix #498\n // Check value of .buttons in 'start' to work around a bug in IE10 mobile (data.buttonsProperty).\n // https://connect.microsoft.com/IE/feedback/details/927005/mobile-ie10-windows-phone-buttons-property-of-pointermove-event-always-zero\n // IE9 has .buttons and .which zero on mousemove.\n // Firefox breaks the spec MDN defines.\n if (navigator.appVersion.indexOf(\"MSIE 9\") === -1 && event.buttons === 0 && data.buttonsProperty !== 0) {\n return eventEnd(event, data);\n }\n // Check if we are moving up or down\n var movement = (options.dir ? -1 : 1) * (event.calcPoint - data.startCalcPoint);\n // Convert the movement into a percentage of the slider width/height\n var proposal = (movement * 100) / data.baseSize;\n moveHandles(movement > 0, proposal, data.locations, data.handleNumbers);\n }\n // Unbind move events on document, call callbacks.\n function eventEnd(event, data) {\n // The handle is no longer active, so remove the class.\n if (data.handle) {\n removeClass(data.handle, options.cssClasses.active);\n scope_ActiveHandlesCount -= 1;\n }\n // Unbind the move and end events, which are added on 'start'.\n data.listeners.forEach(function (c) {\n scope_DocumentElement.removeEventListener(c[0], c[1]);\n });\n if (scope_ActiveHandlesCount === 0) {\n // Remove dragging class.\n removeClass(scope_Target, options.cssClasses.drag);\n setZindex();\n // Remove cursor styles and text-selection events bound to the body.\n if (event.cursor) {\n scope_Body.style.cursor = \"\";\n scope_Body.removeEventListener(\"selectstart\", preventDefault);\n }\n }\n data.handleNumbers.forEach(function (handleNumber) {\n fireEvent(\"change\", handleNumber);\n fireEvent(\"set\", handleNumber);\n fireEvent(\"end\", handleNumber);\n });\n }\n // Bind move events on document.\n function eventStart(event, data) {\n // Ignore event if any handle is disabled\n if (data.handleNumbers.some(isHandleDisabled)) {\n return false;\n }\n var handle;\n if (data.handleNumbers.length === 1) {\n var handleOrigin = scope_Handles[data.handleNumbers[0]];\n handle = handleOrigin.children[0];\n scope_ActiveHandlesCount += 1;\n // Mark the handle as 'active' so it can be styled.\n addClass(handle, options.cssClasses.active);\n }\n // A drag should never propagate up to the 'tap' event.\n event.stopPropagation();\n // Record the event listeners.\n var listeners = [];\n // Attach the move and end events.\n var moveEvent = attachEvent(actions.move, scope_DocumentElement, eventMove, {\n // The event target has changed so we need to propagate the original one so that we keep\n // relying on it to extract target touches.\n target: event.target,\n handle: handle,\n listeners: listeners,\n startCalcPoint: event.calcPoint,\n baseSize: baseSize(),\n pageOffset: event.pageOffset,\n handleNumbers: data.handleNumbers,\n buttonsProperty: event.buttons,\n locations: scope_Locations.slice()\n });\n var endEvent = attachEvent(actions.end, scope_DocumentElement, eventEnd, {\n target: event.target,\n handle: handle,\n listeners: listeners,\n doNotReject: true,\n handleNumbers: data.handleNumbers\n });\n var outEvent = attachEvent(\"mouseout\", scope_DocumentElement, documentLeave, {\n target: event.target,\n handle: handle,\n listeners: listeners,\n doNotReject: true,\n handleNumbers: data.handleNumbers\n });\n // We want to make sure we pushed the listeners in the listener list rather than creating\n // a new one as it has already been passed to the event handlers.\n listeners.push.apply(listeners, moveEvent.concat(endEvent, outEvent));\n // Text selection isn't an issue on touch devices,\n // so adding cursor styles can be skipped.\n if (event.cursor) {\n // Prevent the 'I' cursor and extend the range-drag cursor.\n scope_Body.style.cursor = getComputedStyle(event.target).cursor;\n // Mark the target with a dragging state.\n if (scope_Handles.length > 1) {\n addClass(scope_Target, options.cssClasses.drag);\n }\n // Prevent text selection when dragging the handles.\n // In noUiSlider <= 9.2.0, this was handled by calling preventDefault on mouse/touch start/move,\n // which is scroll blocking. The selectstart event is supported by FireFox starting from version 52,\n // meaning the only holdout is iOS Safari. This doesn't matter: text selection isn't triggered there.\n // The 'cursor' flag is false.\n // See: http://caniuse.com/#search=selectstart\n scope_Body.addEventListener(\"selectstart\", preventDefault, false);\n }\n data.handleNumbers.forEach(function (handleNumber) {\n fireEvent(\"start\", handleNumber);\n });\n }\n // Move closest handle to tapped location.\n function eventTap(event) {\n // The tap event shouldn't propagate up\n event.stopPropagation();\n var proposal = calcPointToPercentage(event.calcPoint);\n var handleNumber = getClosestHandle(proposal);\n // Tackle the case that all handles are 'disabled'.\n if (handleNumber === false) {\n return false;\n }\n // Flag the slider as it is now in a transitional state.\n // Transition takes a configurable amount of ms (default 300). Re-enable the slider after that.\n if (!options.events.snap) {\n addClassFor(scope_Target, options.cssClasses.tap, options.animationDuration);\n }\n setHandle(handleNumber, proposal, true, true);\n setZindex();\n fireEvent(\"slide\", handleNumber, true);\n fireEvent(\"update\", handleNumber, true);\n fireEvent(\"change\", handleNumber, true);\n fireEvent(\"set\", handleNumber, true);\n if (options.events.snap) {\n eventStart(event, { handleNumbers: [handleNumber] });\n }\n }\n // Fires a 'hover' event for a hovered mouse/pen position.\n function eventHover(event) {\n var proposal = calcPointToPercentage(event.calcPoint);\n var to = scope_Spectrum.getStep(proposal);\n var value = scope_Spectrum.fromStepping(to);\n Object.keys(scope_Events).forEach(function (targetEvent) {\n if (\"hover\" === targetEvent.split(\".\")[0]) {\n scope_Events[targetEvent].forEach(function (callback) {\n callback.call(scope_Self, value);\n });\n }\n });\n }\n // Handles keydown on focused handles\n // Don't move the document when pressing arrow keys on focused handles\n function eventKeydown(event, handleNumber) {\n if (isSliderDisabled() || isHandleDisabled(handleNumber)) {\n return false;\n }\n var horizontalKeys = [\"Left\", \"Right\"];\n var verticalKeys = [\"Down\", \"Up\"];\n var largeStepKeys = [\"PageDown\", \"PageUp\"];\n var edgeKeys = [\"Home\", \"End\"];\n if (options.dir && !options.ort) {\n // On an right-to-left slider, the left and right keys act inverted\n horizontalKeys.reverse();\n }\n else if (options.ort && !options.dir) {\n // On a top-to-bottom slider, the up and down keys act inverted\n verticalKeys.reverse();\n largeStepKeys.reverse();\n }\n // Strip \"Arrow\" for IE compatibility. https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key\n var key = event.key.replace(\"Arrow\", \"\");\n var isLargeDown = key === largeStepKeys[0];\n var isLargeUp = key === largeStepKeys[1];\n var isDown = key === verticalKeys[0] || key === horizontalKeys[0] || isLargeDown;\n var isUp = key === verticalKeys[1] || key === horizontalKeys[1] || isLargeUp;\n var isMin = key === edgeKeys[0];\n var isMax = key === edgeKeys[1];\n if (!isDown && !isUp && !isMin && !isMax) {\n return true;\n }\n event.preventDefault();\n var to;\n if (isUp || isDown) {\n var multiplier = options.keyboardPageMultiplier;\n var direction = isDown ? 0 : 1;\n var steps = getNextStepsForHandle(handleNumber);\n var step = steps[direction];\n // At the edge of a slider, do nothing\n if (step === null) {\n return false;\n }\n // No step set, use the default of 10% of the sub-range\n if (step === false) {\n step = scope_Spectrum.getDefaultStep(scope_Locations[handleNumber], isDown, options.keyboardDefaultStep);\n }\n if (isLargeUp || isLargeDown) {\n step *= multiplier;\n }\n // Step over zero-length ranges (#948);\n step = Math.max(step, 0.0000001);\n // Decrement for down steps\n step = (isDown ? -1 : 1) * step;\n to = scope_Values[handleNumber] + step;\n }\n else if (isMax) {\n // End key\n to = options.spectrum.xVal[options.spectrum.xVal.length - 1];\n }\n else {\n // Home key\n to = options.spectrum.xVal[0];\n }\n setHandle(handleNumber, scope_Spectrum.toStepping(to), true, true);\n fireEvent(\"slide\", handleNumber);\n fireEvent(\"update\", handleNumber);\n fireEvent(\"change\", handleNumber);\n fireEvent(\"set\", handleNumber);\n return false;\n }\n // Attach events to several slider parts.\n function bindSliderEvents(behaviour) {\n // Attach the standard drag event to the handles.\n if (!behaviour.fixed) {\n scope_Handles.forEach(function (handle, index) {\n // These events are only bound to the visual handle\n // element, not the 'real' origin element.\n attachEvent(actions.start, handle.children[0], eventStart, {\n handleNumbers: [index]\n });\n });\n }\n // Attach the tap event to the slider base.\n if (behaviour.tap) {\n attachEvent(actions.start, scope_Base, eventTap, {});\n }\n // Fire hover events\n if (behaviour.hover) {\n attachEvent(actions.move, scope_Base, eventHover, {\n hover: true\n });\n }\n // Make the range draggable.\n if (behaviour.drag) {\n scope_Connects.forEach(function (connect, index) {\n if (connect === false || index === 0 || index === scope_Connects.length - 1) {\n return;\n }\n var handleBefore = scope_Handles[index - 1];\n var handleAfter = scope_Handles[index];\n var eventHolders = [connect];\n addClass(connect, options.cssClasses.draggable);\n // When the range is fixed, the entire range can\n // be dragged by the handles. The handle in the first\n // origin will propagate the start event upward,\n // but it needs to be bound manually on the other.\n if (behaviour.fixed) {\n eventHolders.push(handleBefore.children[0]);\n eventHolders.push(handleAfter.children[0]);\n }\n eventHolders.forEach(function (eventHolder) {\n attachEvent(actions.start, eventHolder, eventStart, {\n handles: [handleBefore, handleAfter],\n handleNumbers: [index - 1, index]\n });\n });\n });\n }\n }\n // Attach an event to this slider, possibly including a namespace\n function bindEvent(namespacedEvent, callback) {\n scope_Events[namespacedEvent] = scope_Events[namespacedEvent] || [];\n scope_Events[namespacedEvent].push(callback);\n // If the event bound is 'update,' fire it immediately for all handles.\n if (namespacedEvent.split(\".\")[0] === \"update\") {\n scope_Handles.forEach(function (a, index) {\n fireEvent(\"update\", index);\n });\n }\n }\n function isInternalNamespace(namespace) {\n return namespace === INTERNAL_EVENT_NS.aria || namespace === INTERNAL_EVENT_NS.tooltips;\n }\n // Undo attachment of event\n function removeEvent(namespacedEvent) {\n var event = namespacedEvent && namespacedEvent.split(\".\")[0];\n var namespace = event ? namespacedEvent.substring(event.length) : namespacedEvent;\n Object.keys(scope_Events).forEach(function (bind) {\n var tEvent = bind.split(\".\")[0];\n var tNamespace = bind.substring(tEvent.length);\n if ((!event || event === tEvent) && (!namespace || namespace === tNamespace)) {\n // only delete protected internal event if intentional\n if (!isInternalNamespace(tNamespace) || namespace === tNamespace) {\n delete scope_Events[bind];\n }\n }\n });\n }\n // External event handling\n function fireEvent(eventName, handleNumber, tap) {\n Object.keys(scope_Events).forEach(function (targetEvent) {\n var eventType = targetEvent.split(\".\")[0];\n if (eventName === eventType) {\n scope_Events[targetEvent].forEach(function (callback) {\n callback.call(\n // Use the slider public API as the scope ('this')\n scope_Self, \n // Return values as array, so arg_1[arg_2] is always valid.\n scope_Values.map(options.format.to), \n // Handle index, 0 or 1\n handleNumber, \n // Un-formatted slider values\n scope_Values.slice(), \n // Event is fired by tap, true or false\n tap || false, \n // Left offset of the handle, in relation to the slider\n scope_Locations.slice(), \n // add the slider public API to an accessible parameter when this is unavailable\n scope_Self);\n });\n }\n });\n }\n // Split out the handle positioning logic so the Move event can use it, too\n function checkHandlePosition(reference, handleNumber, to, lookBackward, lookForward, getValue) {\n var distance;\n // For sliders with multiple handles, limit movement to the other handle.\n // Apply the margin option by adding it to the handle positions.\n if (scope_Handles.length > 1 && !options.events.unconstrained) {\n if (lookBackward && handleNumber > 0) {\n distance = scope_Spectrum.getAbsoluteDistance(reference[handleNumber - 1], options.margin, 0);\n to = Math.max(to, distance);\n }\n if (lookForward && handleNumber < scope_Handles.length - 1) {\n distance = scope_Spectrum.getAbsoluteDistance(reference[handleNumber + 1], options.margin, 1);\n to = Math.min(to, distance);\n }\n }\n // The limit option has the opposite effect, limiting handles to a\n // maximum distance from another. Limit must be > 0, as otherwise\n // handles would be unmovable.\n if (scope_Handles.length > 1 && options.limit) {\n if (lookBackward && handleNumber > 0) {\n distance = scope_Spectrum.getAbsoluteDistance(reference[handleNumber - 1], options.limit, 0);\n to = Math.min(to, distance);\n }\n if (lookForward && handleNumber < scope_Handles.length - 1) {\n distance = scope_Spectrum.getAbsoluteDistance(reference[handleNumber + 1], options.limit, 1);\n to = Math.max(to, distance);\n }\n }\n // The padding option keeps the handles a certain distance from the\n // edges of the slider. Padding must be > 0.\n if (options.padding) {\n if (handleNumber === 0) {\n distance = scope_Spectrum.getAbsoluteDistance(0, options.padding[0], 0);\n to = Math.max(to, distance);\n }\n if (handleNumber === scope_Handles.length - 1) {\n distance = scope_Spectrum.getAbsoluteDistance(100, options.padding[1], 1);\n to = Math.min(to, distance);\n }\n }\n to = scope_Spectrum.getStep(to);\n // Limit percentage to the 0 - 100 range\n to = limit(to);\n // Return false if handle can't move\n if (to === reference[handleNumber] && !getValue) {\n return false;\n }\n return to;\n }\n // Uses slider orientation to create CSS rules. a = base value;\n function inRuleOrder(v, a) {\n var o = options.ort;\n return (o ? a : v) + \", \" + (o ? v : a);\n }\n // Moves handle(s) by a percentage\n // (bool, % to move, [% where handle started, ...], [index in scope_Handles, ...])\n function moveHandles(upward, proposal, locations, handleNumbers) {\n var proposals = locations.slice();\n var b = [!upward, upward];\n var f = [upward, !upward];\n // Copy handleNumbers so we don't change the dataset\n handleNumbers = handleNumbers.slice();\n // Check to see which handle is 'leading'.\n // If that one can't move the second can't either.\n if (upward) {\n handleNumbers.reverse();\n }\n // Step 1: get the maximum percentage that any of the handles can move\n if (handleNumbers.length > 1) {\n handleNumbers.forEach(function (handleNumber, o) {\n var to = checkHandlePosition(proposals, handleNumber, proposals[handleNumber] + proposal, b[o], f[o], false);\n // Stop if one of the handles can't move.\n if (to === false) {\n proposal = 0;\n }\n else {\n proposal = to - proposals[handleNumber];\n proposals[handleNumber] = to;\n }\n });\n }\n // If using one handle, check backward AND forward\n else {\n b = f = [true];\n }\n var state = false;\n // Step 2: Try to set the handles with the found percentage\n handleNumbers.forEach(function (handleNumber, o) {\n state = setHandle(handleNumber, locations[handleNumber] + proposal, b[o], f[o]) || state;\n });\n // Step 3: If a handle moved, fire events\n if (state) {\n handleNumbers.forEach(function (handleNumber) {\n fireEvent(\"update\", handleNumber);\n fireEvent(\"slide\", handleNumber);\n });\n }\n }\n // Takes a base value and an offset. This offset is used for the connect bar size.\n // In the initial design for this feature, the origin element was 1% wide.\n // Unfortunately, a rounding bug in Chrome makes it impossible to implement this feature\n // in this manner: https://bugs.chromium.org/p/chromium/issues/detail?id=798223\n function transformDirection(a, b) {\n return options.dir ? 100 - a - b : a;\n }\n // Updates scope_Locations and scope_Values, updates visual state\n function updateHandlePosition(handleNumber, to) {\n // Update locations.\n scope_Locations[handleNumber] = to;\n // Convert the value to the slider stepping/range.\n scope_Values[handleNumber] = scope_Spectrum.fromStepping(to);\n var translation = 10 * (transformDirection(to, 0) - scope_DirOffset);\n var translateRule = \"translate(\" + inRuleOrder(translation + \"%\", \"0\") + \")\";\n scope_Handles[handleNumber].style[options.transformRule] = translateRule;\n updateConnect(handleNumber);\n updateConnect(handleNumber + 1);\n }\n // Handles before the slider middle are stacked later = higher,\n // Handles after the middle later is lower\n // [[7] [8] .......... | .......... [5] [4]\n function setZindex() {\n scope_HandleNumbers.forEach(function (handleNumber) {\n var dir = scope_Locations[handleNumber] > 50 ? -1 : 1;\n var zIndex = 3 + (scope_Handles.length + dir * handleNumber);\n scope_Handles[handleNumber].style.zIndex = zIndex;\n });\n }\n // Test suggested values and apply margin, step.\n // if exactInput is true, don't run checkHandlePosition, then the handle can be placed in between steps (#436)\n function setHandle(handleNumber, to, lookBackward, lookForward, exactInput) {\n if (!exactInput) {\n to = checkHandlePosition(scope_Locations, handleNumber, to, lookBackward, lookForward, false);\n }\n if (to === false) {\n return false;\n }\n updateHandlePosition(handleNumber, to);\n return true;\n }\n // Updates style attribute for connect nodes\n function updateConnect(index) {\n // Skip connects set to false\n if (!scope_Connects[index]) {\n return;\n }\n var l = 0;\n var h = 100;\n if (index !== 0) {\n l = scope_Locations[index - 1];\n }\n if (index !== scope_Connects.length - 1) {\n h = scope_Locations[index];\n }\n // We use two rules:\n // 'translate' to change the left/top offset;\n // 'scale' to change the width of the element;\n // As the element has a width of 100%, a translation of 100% is equal to 100% of the parent (.noUi-base)\n var connectWidth = h - l;\n var translateRule = \"translate(\" + inRuleOrder(transformDirection(l, connectWidth) + \"%\", \"0\") + \")\";\n var scaleRule = \"scale(\" + inRuleOrder(connectWidth / 100, \"1\") + \")\";\n scope_Connects[index].style[options.transformRule] = translateRule + \" \" + scaleRule;\n }\n // Parses value passed to .set method. Returns current value if not parse-able.\n function resolveToValue(to, handleNumber) {\n // Setting with null indicates an 'ignore'.\n // Inputting 'false' is invalid.\n if (to === null || to === false || to === undefined) {\n return scope_Locations[handleNumber];\n }\n // If a formatted number was passed, attempt to decode it.\n if (typeof to === \"number\") {\n to = String(to);\n }\n to = options.format.from(to);\n to = scope_Spectrum.toStepping(to);\n // If parsing the number failed, use the current value.\n if (to === false || isNaN(to)) {\n return scope_Locations[handleNumber];\n }\n return to;\n }\n // Set the slider value.\n function valueSet(input, fireSetEvent, exactInput) {\n var values = asArray(input);\n var isInit = scope_Locations[0] === undefined;\n // Event fires by default\n fireSetEvent = fireSetEvent === undefined ? true : !!fireSetEvent;\n // Animation is optional.\n // Make sure the initial values were set before using animated placement.\n if (options.animate && !isInit) {\n addClassFor(scope_Target, options.cssClasses.tap, options.animationDuration);\n }\n // First pass, without lookAhead but with lookBackward. Values are set from left to right.\n scope_HandleNumbers.forEach(function (handleNumber) {\n setHandle(handleNumber, resolveToValue(values[handleNumber], handleNumber), true, false, exactInput);\n });\n var i = scope_HandleNumbers.length === 1 ? 0 : 1;\n // Secondary passes. Now that all base values are set, apply constraints.\n // Iterate all handles to ensure constraints are applied for the entire slider (Issue #1009)\n for (; i < scope_HandleNumbers.length; ++i) {\n scope_HandleNumbers.forEach(function (handleNumber) {\n setHandle(handleNumber, scope_Locations[handleNumber], true, true, exactInput);\n });\n }\n setZindex();\n scope_HandleNumbers.forEach(function (handleNumber) {\n fireEvent(\"update\", handleNumber);\n // Fire the event only for handles that received a new value, as per #579\n if (values[handleNumber] !== null && fireSetEvent) {\n fireEvent(\"set\", handleNumber);\n }\n });\n }\n // Reset slider to initial values\n function valueReset(fireSetEvent) {\n valueSet(options.start, fireSetEvent);\n }\n // Set value for a single handle\n function valueSetHandle(handleNumber, value, fireSetEvent, exactInput) {\n // Ensure numeric input\n handleNumber = Number(handleNumber);\n if (!(handleNumber >= 0 && handleNumber < scope_HandleNumbers.length)) {\n throw new Error(\"noUiSlider (\" + VERSION + \"): invalid handle number, got: \" + handleNumber);\n }\n // Look both backward and forward, since we don't want this handle to \"push\" other handles (#960);\n // The exactInput argument can be used to ignore slider stepping (#436)\n setHandle(handleNumber, resolveToValue(value, handleNumber), true, true, exactInput);\n fireEvent(\"update\", handleNumber);\n if (fireSetEvent) {\n fireEvent(\"set\", handleNumber);\n }\n }\n // Get the slider value.\n function valueGet() {\n var values = scope_Values.map(options.format.to);\n // If only one handle is used, return a single value.\n if (values.length === 1) {\n return values[0];\n }\n return values;\n }\n // Removes classes from the root and empties it.\n function destroy() {\n // remove protected internal listeners\n removeEvent(INTERNAL_EVENT_NS.aria);\n removeEvent(INTERNAL_EVENT_NS.tooltips);\n for (var key in options.cssClasses) {\n if (!options.cssClasses.hasOwnProperty(key)) {\n continue;\n }\n removeClass(scope_Target, options.cssClasses[key]);\n }\n while (scope_Target.firstChild) {\n scope_Target.removeChild(scope_Target.firstChild);\n }\n delete scope_Target.noUiSlider;\n }\n function getNextStepsForHandle(handleNumber) {\n var location = scope_Locations[handleNumber];\n var nearbySteps = scope_Spectrum.getNearbySteps(location);\n var value = scope_Values[handleNumber];\n var increment = nearbySteps.thisStep.step;\n var decrement = null;\n // If snapped, directly use defined step value\n if (options.snap) {\n return [\n value - nearbySteps.stepBefore.startValue || null,\n nearbySteps.stepAfter.startValue - value || null\n ];\n }\n // If the next value in this step moves into the next step,\n // the increment is the start of the next step - the current value\n if (increment !== false) {\n if (value + increment > nearbySteps.stepAfter.startValue) {\n increment = nearbySteps.stepAfter.startValue - value;\n }\n }\n // If the value is beyond the starting point\n if (value > nearbySteps.thisStep.startValue) {\n decrement = nearbySteps.thisStep.step;\n }\n else if (nearbySteps.stepBefore.step === false) {\n decrement = false;\n }\n // If a handle is at the start of a step, it always steps back into the previous step first\n else {\n decrement = value - nearbySteps.stepBefore.highestStep;\n }\n // Now, if at the slider edges, there is no in/decrement\n if (location === 100) {\n increment = null;\n }\n else if (location === 0) {\n decrement = null;\n }\n // As per #391, the comparison for the decrement step can have some rounding issues.\n var stepDecimals = scope_Spectrum.countStepDecimals();\n // Round per #391\n if (increment !== null && increment !== false) {\n increment = Number(increment.toFixed(stepDecimals));\n }\n if (decrement !== null && decrement !== false) {\n decrement = Number(decrement.toFixed(stepDecimals));\n }\n return [decrement, increment];\n }\n // Get the current step size for the slider.\n function getNextSteps() {\n return scope_HandleNumbers.map(getNextStepsForHandle);\n }\n // Updateable: margin, limit, padding, step, range, animate, snap\n function updateOptions(optionsToUpdate, fireSetEvent) {\n // Spectrum is created using the range, snap, direction and step options.\n // 'snap' and 'step' can be updated.\n // If 'snap' and 'step' are not passed, they should remain unchanged.\n var v = valueGet();\n var updateAble = [\n \"margin\",\n \"limit\",\n \"padding\",\n \"range\",\n \"animate\",\n \"snap\",\n \"step\",\n \"format\",\n \"pips\",\n \"tooltips\"\n ];\n // Only change options that we're actually passed to update.\n updateAble.forEach(function (name) {\n // Check for undefined. null removes the value.\n if (optionsToUpdate[name] !== undefined) {\n originalOptions[name] = optionsToUpdate[name];\n }\n });\n var newOptions = testOptions(originalOptions);\n // Load new options into the slider state\n updateAble.forEach(function (name) {\n if (optionsToUpdate[name] !== undefined) {\n options[name] = newOptions[name];\n }\n });\n scope_Spectrum = newOptions.spectrum;\n // Limit, margin and padding depend on the spectrum but are stored outside of it. (#677)\n options.margin = newOptions.margin;\n options.limit = newOptions.limit;\n options.padding = newOptions.padding;\n // Update pips, removes existing.\n if (options.pips) {\n pips(options.pips);\n }\n else {\n removePips();\n }\n // Update tooltips, removes existing.\n if (options.tooltips) {\n tooltips();\n }\n else {\n removeTooltips();\n }\n // Invalidate the current positioning so valueSet forces an update.\n scope_Locations = [];\n valueSet(isSet(optionsToUpdate.start) ? optionsToUpdate.start : v, fireSetEvent);\n }\n // Initialization steps\n function setupSlider() {\n // Create the base element, initialize HTML and set classes.\n // Add handles and connect elements.\n scope_Base = addSlider(scope_Target);\n addElements(options.connect, scope_Base);\n // Attach user events.\n bindSliderEvents(options.events);\n // Use the public value method to set the start values.\n valueSet(options.start);\n if (options.pips) {\n pips(options.pips);\n }\n if (options.tooltips) {\n tooltips();\n }\n aria();\n }\n setupSlider();\n // noinspection JSUnusedGlobalSymbols\n scope_Self = {\n destroy: destroy,\n steps: getNextSteps,\n on: bindEvent,\n off: removeEvent,\n get: valueGet,\n set: valueSet,\n setHandle: valueSetHandle,\n reset: valueReset,\n // Exposed for unit testing, don't use this in your application.\n __moveHandles: function (a, b, c) {\n moveHandles(a, b, scope_Locations, c);\n },\n options: originalOptions,\n updateOptions: updateOptions,\n target: scope_Target,\n removePips: removePips,\n removeTooltips: removeTooltips,\n getTooltips: function () {\n return scope_Tooltips;\n },\n getOrigins: function () {\n return scope_Handles;\n },\n pips: pips // Issue #594\n };\n return scope_Self;\n }\n // Run the standard initializer\n function initialize(target, originalOptions) {\n if (!target || !target.nodeName) {\n throw new Error(\"noUiSlider (\" + VERSION + \"): create requires a single element, got: \" + target);\n }\n // Throw an error if the slider was already initialized.\n if (target.noUiSlider) {\n throw new Error(\"noUiSlider (\" + VERSION + \"): Slider was already initialized.\");\n }\n // Test the options and create the slider environment;\n var options = testOptions(originalOptions);\n var api = scope(target, options, originalOptions);\n target.noUiSlider = api;\n return api;\n }\n // Use an object instead of a function for future expandability;\n return {\n // Exposed for unit testing, don't use this in your application.\n __spectrum: Spectrum,\n version: VERSION,\n // A reference to the default classes, allows global changes.\n // Use the cssClasses option for changes to one slider.\n cssClasses: cssClasses,\n create: initialize\n };\n});\n"],"sourceRoot":""}