{"version":3,"sources":["webpack:///./store/modules/StudioLauncher.js","webpack:///./store/modules/StudioProps.js","webpack:///./plugins/gtag.js","webpack:///./plugins/vee-validate.js","webpack:///./plugins/vue-observer-visibility.js","webpack:///./plugins/vue-slider.js","webpack:///./plugins/directives.js","webpack:///./plugins/readerLauncher.js","webpack:///./plugins/api.js","webpack:///./plugins/vue-lazyload.js","webpack:///./modules/vue-audio-visual/src/components/AvBase.js","webpack:///./modules/vue-audio-visual/src/components/AvBars.js","webpack:///./modules/vue-audio-visual/src/components/AvLine.js","webpack:///./modules/vue-audio-visual/src/components/AvCircle.js","webpack:///./modules/vue-audio-visual/src/components/AvWaveform.js","webpack:///./modules/vue-audio-visual/src/index.js","webpack:///./plugins/vue-audio-visual.js","webpack:///./middleware/redirects.js","webpack:///./assets/style/app.styl?5796","webpack:///./assets/style/app.styl","webpack:///./store/index.js","webpack:///./node_modules/vee-validate/dist/locale lazy ^\\.\\/.*$ namespace object","webpack:///./layouts/error.vue","webpack:///./layouts/error.vue?3bd7","webpack:///layouts/error.vue","webpack:///./layouts/error.vue?6c5d"],"names":["state","initialState","createProject","previewDialog","soundPanel","chatHistoryDialog","chatHistory","project","author_username","layout","event","thumb","sounds","global_variables","pageScale","fonts","slug","projectDetails","title","synoposis","tags","genre","status","classroom","assignment","studentmilestone","has_room_edit_perms","student_proxy","cover","id","layout_objects","event_figures","records","tabIndex","tabActive","activeFonts","transferStoryDialog","transferIsOn","fontsLoaded","generateCover","isLessonEditorMode","nextMilestone","nextMilestoneDialog","editDialog","showConfirmMilestone","showProgress","hideConfirmMilestone","fadeProgress","showNextMilestone","hideCloseBtn","selectedEmoji","selectedSatisfactionEmoji","progressValue","addFeedback","comment","category","lessonEditorAssignment","currentTutorial","mutations","CHAT_HISTORY_DIALOG","value","CHAT_HISTORY","stat","GENERATE_COVER","FONTS_LOADED","SET_PREVIEW_DIALOG","SET_SOUND_PANEL","RESET_STATE","Object","assign","SET_CREATE_PROJECT_LAYOUT","layoutName","IS_LESSON_EDITOR_MODE","SET_CURRENT_TUTORIAL","RESET_CREATE_PROJECT_LAYOUT","SET_PROJECT_AUTHOR_USERNAME","SET_PROJECT_SLUG","SET_PROJECT_LAYOUT","i","l","length","push","JSON","parse","LZString","decompressFromBase64","SET_PROJECT_EVENTGRAPH","SET_PROJECT_SOUNDS","SET_TRANSFER_IS_ON","SET_TRANSFER_STORY_DIALOG","SET_PROJECT_GLOBAL_VARIABLES","SET_PROJECT_FONTS","SET_ADDFEEDBACK_COMMENT","SET_ADDFEEDBACK_CATEGORY","SET_PROJECT_TITLE","SET_PROJECT_SYNOPOSIS","SET_PROJECT_TAGS","SET_PROJECT_ASSIGNMENT","SET_PROJECT_STUDENT_PROXY","SET_PROJECT_CLASSROOM","SET_LESSON_EDITOR_ASSIGNMENT","SET_NEXT_MILESTONE_EDIT_DIALOG","SHOW_NEXT_MILESTONE_DIALOG","CLOSE_NEXT_MILESTONE_DIALOG","SET_NEXT_MILESTONE_HIDE_CLOSE_BTN","SET_NEXT_MILESTONE_SHOW_PROGRESS","SET_NEXT_MILESTONE_FADE_PROGRESS","SET_NEXT_MILESTONE_SHOW_NEXT_MILESTONE","SET_NEXT_MILESTONE_HIDE_CONFIRM_MILESTONE","SET_NEXT_MILESTONE_SHOW_CONFIRM_MILESTONE","SET_NEXT_MILESTONE_PROGRESS_VALUE","completed","milestone","index","total_milestones","SET_PROJECT_ROOM_PERMISSIONS","SUBMIT_STUDENT_MILESTONE","is_submitted","is_ongoing","SET_STUDENT_PROXY","e","console","error","SET_PROJECT_MILESTONE","SET_PROJECT_GENRE","SET_PROJECT_STATUS","RESTORE_LAYOUT_PAGE","data","splice","pageNumber","switchMode","eventGraphMode","addPage","pageSelected","deletePage","setPageIndex","setTabIndex","setPageScale","addActiveFont","font","setLayoutPageDimensions","setHeight","height","setWidth","width","setLayoutPageDirty","dirty","namespaced","getters","actions","_ref","commit","_ref2","resetStudioLauncherState","_ref3","_ref4","_ref5","_ref6","languages","Afrikaans","አማርኛ","العربية","Azərbaycanca","বাংলা","Indonesian","Melayu","Català","Čeština","Dansk","Deutsch","English","Español","Filipino","Français","Basa_Jawa","Galego","ગુજરાતી","Hrvatski","IsiZulu","Íslenska","Italiano","ಕನ್ನಡ","ភាសាខ្មែរ","Latviešu","Lietuvių","മലയാളം","मराठी","Magyar","ລາວ","Nederlands","नेपाली","Norsk_bokmål","Polski","Português","Português_Brasil","Română","සිංහල","Slovenščina","Sunda","Slovenčina","Suomi","Svenska","Kiswahili_Kenya","Kiswahili_Tanzania","ქართული","Հայերեն","தமிழ்","తెలుగు","Tiếng_Việt","Türkçe","اُردُو","Ελληνικά","български","Pусский","Српски","Українська","한국어","普通话_中国大陆","普通话_台灣","粵語","日本語","हिन्दी","ภาษาไทย","templates","left","bottom","right","top","fontSizes","assetCategories","icon","name","blockCategories","color","blocks","functions","src","thumb_height","controls","variables","type","logic","events","textEffects","easings","percents","durations","objectAttributes","attr","moveDirections","speeds","textAssets","padding","style","spineAssets","json","tintedImg","basicShapes","widgetAssets","paletteColors","userColors","musicMoods","Happy","Aggressive","Sad","Relaxing","Romantic","Suspenseful","Epic","soundEffectGenres","Animals","Bells","Human","Foley","Instrument","Cartoon","Nature","PublicPlaces","tween","tweenThreshold","layoutContainer","mainObjectsContainer","mainFunctionsContainer","rightSidebar","positions","centerContainer","recordVoiceOver","templateKeys","code","editLayoutKeys","text","fontWeight","fontFamily","fontSize","fill","opacity","lockMovementX","tailPointx","scaleX","angle","currentSkin","stroke","strokeWidth","lineWidth","btnBgColor","rx","shadow","textAlign","center","justify","fontStyle","underline","flipX","bgColor","toFront","toBack","editBlockKeys","tutorials","animation","media_url","task","url","is_added","proxy","initActions","layoutMode","click_next_btn","cssClass","target_object","source","port","node_proxy","target","click_preview_btn","record","sound","fadeIn","textEffect","effect","createTextVariable","add_variable","variable_proxy","edit_variable","entity","createVariable","test","imagetoolbar","shapetoolbar","animationtoolbar","attachments","texttoolbar","bubbletoolbar","buttontoolbar","Vue","use","VueGtag","deferScriptLoad","config","installed","localized","en","fr","es","it","pt","de","el","_ref10","app","VeeValidate","inject","i18n","Validator","extend","getMessage","field","validate","_arguments","arguments","_asyncToGenerator","regeneratorRuntime","mark","_callee","valid","res","wrap","_context","prev","next","undefined","_slicedToArray","$api","checkUsername","sent","taken","t0","log","abrupt","stop","_arguments2","_callee2","_context2","checkEmail","_arguments3","_callee3","Filter","filter","cleaned","_context3","require","addWords","clean","includes","_arguments4","_callee4","_ref8","lower","cleanTarget","endsWithABC","cleanedValue","containsFilteredAsterisk","containsEmbeddedSwear","_context4","toLowerCase","endsWith","slice","list","some","badWord","installRules","locale","concat","then","localeObj","localize","_defineProperty","VueObserveVisibility","SlideVerify","directive","bind","binding","vnode","clickOutsideEvent","contains","classList","context","expression","document","body","addEventListener","unbind","removeEventListener","_appendLogMsg","_startHighlightInspectConnection","prototype","$elementari","SpeechRecognition","SpeechTargetsList","goToLinkStatus","timeThresholdBetweenTwoGoToLink","page","reader","selectedBtnObj","nextFrameTime","animationDelay","blur","offsetX","offsetY","fillShadow","strokeShadow","glow","eventCodeCounter","highlightBlocksList","eventBlocks","blocksWithObjectPort","blockWithLogicPort","setVarValBlocks","initEventStatus","eventObjectId","maxIterations","this","setGlobalVariables","m","getObjectBlockName","o","setPage","callback","setReader","checkIfEventIsActive","eventCode","eventStatus","activeStack","checkIfEventCodeIsCompleted","options","currentIteration","counter","block","getBlock","executeOnEventCode","getBlockConnections","animateCanvas","self","time","myRequestAnimation","requestAnimationFrame","isAnimating","requestRenderAll","stopAllRendering","cancelAnimationFrame","window","mozCancelAnimationFrame","animatedObjects","startObjectAnimationFrame","objectID","animationName","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","stopObjectAnimationFrame","displayNextPageHint","goToPageBlock","log_pageNumber","isValueAVariableField","isNumber","Number","$t","appendLogMsg","goToPage","parseInt","goToLinkBlock","Date","getTime","goToLink","hideBlock","_this","getItemById","visible","timeouts","setTimeout","pop","showBlock","_this2","popObject","testCollision","scaleBlock","pageScales","isStudio","duration","scale","dragAnimationTrigger","isScaling","factor","easing","fabric","util","ease","abortAnimation","animate","scaleY","abort","bounce","isRotating","moveX","moveY","fade","inspectMode","$nuxt","$store","onChange","setImageLanczosFilter","onComplete","rotateBlock","originalAngle","waitBlock","parseFloat","moveToBlockAbsolute","testX","testY","coords","xCoord","yCoord","moveToBlockRelative","collisionWatchList","threshold","forEach","intersectsWithObject","event_id","hasOwnProperty","stringify","collisionTriggered","name1","name2","setTriggerObject","conn","connection","originalScaleY","playSoundEffectBlock","easeOutExpo","easeOutElastic","bounceBlock","easeOutBounce","fadeBlock","shift","ownCaching","objectCaching","_originalProperties","dontAddToActiveStack","setCoords","animateParams","easeOutQuart","textEffectBlock","texteffect1","textLength","_unwrappedTextLines","j","_renderTextCommon","canvas","getContext","originalStyles","styles","s","Color","setAlpha","toRgba","setSelectionStyles","fade_options","direction","speed","totalSteps","tumbleAnimation","flipAnimation","breatheAnimation","whirlpoolAnimation","rollAnimation","fadeTextEffect","texteffect2","typeTextEffect","lineIndex","charIndex","_this3","_text","urls","Math","floor","random","volume","getRandomNumber","deltaX","deltaY","_this4","_index","_lineIndex","_charIndex","fadeCharEffect","_fadeCharEffect","step","_this5","easeInBounce","t","easeOutBack","thirdSteps","c","max","sign","x","pow","easeInExpo","c1","easeInQuint","easeOutQuint","n1","d1","easeInElastic","c4","PI","sin","easeInOutElastic","c5","hexToRGBA","hex","replace","substring","blinkBlock","blink","animateSpineBlock","endless","tracks","setAnimation","$tc","clearTrack","setVarVal","_this6","_typeof","showplaceholder","transformStringValue","$set","variable","updateObjectsTextValue","waitForGlowList","condition","generateConditionCode","layout_obj","obj_id","glowObject","setCookie","numberVariableEqualsRandomBlock","_this7","nameB","nameC","ceil","incrementBlock","_this8","decrementBlock","_this9","insertTextBlock","_this10","toString","setObjAttr","attribute","__callback","set","editable","setColor","flipY","lockMovementY","srcArray","setSrc","eventId","makeObjectGlow","parseBoolStr","hoverCursor","stopGlow","isGlowing","setShadow","easeInQuad","evented","clicked","easeOutQuad","soundUrl","artist","Howl","preload","onload","soundEffects","play","mute","onplay","unload","onend","_src","playRecordBlock","recordSounds","stopMusicBlock","_this11","music","playMusicBlock","repeat","bg_sound","loop","_loop","changeImageBlock","imagePrefixPath","sourcePath","objects","loadSVGFromURL","obj","groupSVGElements","_objects","crossOrigin","arithmeticCalculatorBlock","_this12","String","eval","operation","textObjectEqualsVariableBlock","_this13","newTransformStringValue","getSelectionStyles","textObjectEqualsValueBlock","_this14","eventBlock","original_text","original_style","isVariable","removeChars","insertChars","start","indexOf","end","trim","substring_start","varName","varValue","getVariableValue","styles_start","original_styles","original_value","isVar","lockSwipeRightBlock","_this15","lockSwipeRight","lockSwipeLeftBlock","_this16","lockSwipeLeft","variableHasChanged","getObjects","dontPopActiveStack","oldText","flipObjectBlock","_this17","setObjectPositionBlock","_this18","y","setDraggableBlock","_this19","drag","restoreObjectBlock","_this20","btnHandler","btn","tinycolor","on","isHovered","isActive","lighten","darken","str","expressions","expressionRegex","RegExp","expressionIndex","match","evalBoolStr","conditions","split","validity","toBoolean","comparer","inversed","initCode","generateInitCode","generateCode","nextBlock","nextConn","connections","getBlockOutputConnections","checkLogicGatePorts","portCounter","getLogicGateChildren","children","child","canNegative","isInt","isFloat","isNaN","n","term1","term2","result","logicConnections","highlightBlock","hasTimeout","highlightConnection","onPageStartBlock","_this21","hasOutputFlowConn","delay","onPronounceBlock","word","array_words","initSpeechRecognition","isRecording","searchForSpeechMatch","colored","map","array_res","indexes_to_delete","speechTargetsList","match_counter","target_index","v","event_triggered","removeFromSpeechTargetsList","onClickBlock","_this22","_ret","enableObjectIsTouched","other_layout_obj","disableObjectIsTouched","onClickOnceBlock","onCollisionBlock","target_objects","collider_object","collisionWatch","initCollisionWatch","collision_is_active","targets","onDragOverBlock","_this23","targetObjConnection","dragged_obj","_ret2","_loop2","dragEventTriggered","onDragOverOnceBlock","onTextInputBlock","_this24","_ret3","_loop3","exitTextEditing","inputTriggered","onTextInputOnceBlock","generateOnCompleteCode","executeScript","objectConn","testCondition","obj_name1","obj_name2","obj_name","clicked_object","functionBlock","onCompleteTrigger","block_has_objectPort","eventGraphIsReady","stopHighlightInspectBlock","block_has_logicPort","branchBlock","conditionResult","targetBlock","sourceBlock","numberComparisonBlock","textComparisonBlock","includes_port_connected","is_exact","is_includes","_this25","startHighlightInspectBlock","_this26","startHighlightInspectConnection","stopHighlightInspectConnection","figure","highlightList","array","f","eventPage","getFigure","rect","draw2d","shape","basic","Rectangle","dasharray","show","groupId","setCanvas","transition","strokeDashoffset","_x","apply","hide","setPosition","getAbsolutePosition","translate","setDimension","getWidth","getHeight","sendError","method","message","traceback","remove","lines","strokeDasharray","$nextTick","_x2","_x3","msg","isEvent","isGoToPage","isSpeech","isError","container","scrollDown","getElementById","offsetHeight","scrollTop","scrollHeight","inspectLog","_x4","_x5","_x6","_x7","_x8","axios","$axios","registerUser","passwordReset","email","passwordResetConfirm","passwordChange","refreshToken","localLogin","autoLogin","resetStudentLoginLink","username","getAllStudentLogins","$get","facebookLogin","googleLogin","cleverGetToken","uri","cleverLogin","importCleverClassroom","classlinkGetToken","classlinkLogin","importClasslinkClassroom","resendVerifyEmail","verifyEmail","token","getInvoices","getSubscription","getUserSettings","setSubscription","cancelSubscription","reactivateSubscription","reactivate","checkCoupon","getClubs","getTrainings","getPastMyAssignments","params","cloneAssignment","getAASL","getCCELA","getCSTA","getISTE","getVocab","getHelperText","getEvent","getBanners","selectClassBanner","getClassbyClasscode","classcode","invite_url","setClassbyClasscode","getStudentClassrooms","active","getActiveShortListClassrooms","getClassrooms","getClassroomByGrade","grade","getClassroomBySubject","subject","getCoteachingClassrooms","getClassroom","createClassroom","editClassroom","deleteClassroom","archiveClassroom","unarchiveClassroom","setPasswordForStudents","password","teacher","getGoogleClassrooms","importGoogleClassroom","createStudent","removeStudent","setUserForGuestStory","storySlug","deleteOldGuestStories","transferStory","getLibrary","getLibraryAssignmentStories","getStudentRoster","query","getStudentRosterProfile","getStudentRosterOnline","progress","getClassroomAssignments","classSlug","getAssignmentDropdown","getAssignment","getStudentClassroomAssignments","getStudentClassroomAssignmentsName","getStoryBasic","createAssignment","editAssignment","deleteAssignment","submitToLessons","getAssignmentStats","getCurrentMilestoneIndex","getLibraryAssignmentStatus","editAssignmentStatus","closeAssignmentStatus","reopenAssignmentStatus","deleteAssignmentStatus","getAssignmentStatusUserStories","assignment_status_slug","created_by","getAssignmentStatusStories","getAssignmentStatusPublicStories","createSchool","editSchool","deleteSchool","getSchool","getSchoolTeachers","getSchoolInvitations","inviteTeacher","editInvite","sendTeacherInvite","removeTeacher","checkSchoolcode","connectSchool","getPurchaseOrders","school_slug","getQuote","createQuote","editQuote","getNumFeedbacksforStories","getStoryFeedback","story_slug","createFeedback","editFeedback","deleteFeedback","getChatHistory","getStoryComment","getComment","comment_id","getStoryCommentBy","editor","createComment","editComment","deleteComment","getAssetFolders","getAssetFolder","folder_id","createAssetFolder","editAssetFolder","deleteAssetFolder","addAssetToFolder","getUsers","getUser","editUser","editUserSettings","addEmail","editUserPk","pk","deleteUser","getNotificationFeed","feed_length","createStory","editStory","sendThumbnail","deleteStory","getMyUsedLessons","getMyLessons","getPublishedLessons","q","queryString","getSimilarPublishedLessons","getLesson","assignLessonToClassroom","getUserStories","is_student","getReadStory","getReviewStory","getFeaturedStories","getPublishedStories","search","searchQ","getAssetsList","group","categoryQ","groupQ","getAssetsSVGList","getFeaturedAssets","getAssetsInCollection","col_id","getAssetsDetailsInCollection","getAssetsFromAsset","getSVGCollectionFromAsset","getAssetSvgInCollection","getAssetCollections","getSVGCollections","filterSoundsList","params_list","mood","instrument","collection_id","join","getSoundEffectCollectionsList","getSoundsInCollection","getFeaturedSounds","getSoundCollectionsByArtist","getDisplayMessages","removeMessage","display","getSuggestedUsers","pagesize","_readOnlyError","getUserProfile","editUserProfile","getAvatars","changeAvatar","getFollowers","getFollowing","getBadges","getVersion","like","follow","report","remixStory","sendStoryLog","$post","hit","updateNotifications","updateTutorial","getTags","model","getCurrency","serverStatus","contactForm","errorForm","subscribeForm","addMember","removeMember","getAllRoomMembers","changeMember","getEditStory","deleteRecordSound","addRecordSound","getPageTemplatesList","getPageTemplate","getTutorialsList","getTutorial","searchGifs","searchTerm","apiKey","VueLazyload","observer","lazyComponent","observerOptions","rootMargin","methods","createHTMLElements","canv","createElement","canvDiv","audioDiv","audio","refLink","$parent","$refs","setAttribute","backgroundColor","audioSrc","audioControls","audioClass","corsAnonym","appendChild","$el","canvClass","canvWidth","canvHeight","canvTop","insertBefore","ctxWrapper","ctx","setAnalyser","$avAudioRefs","analyser","createAnalyser","AudioContext","createMediaElementSource","connect","fftSize","destination","audioCtx","fillGradient","colorsArray","w","h","gradient","createLinearGradient","offset","addColorStop","props","default","Boolean","canvFillColor","Array","render","mounted","mainLoop","beforeDestroy","close","AvBars","mixins","BaseMixin","barWidth","barSpace","barColor","capsHeight","capsDropSpeed","capsColor","brickHeight","brickSpace","symmetric","caps","frqBits","frequencyBinCount","Uint8Array","round","barFill","isArray","getByteFrequencyData","_fillCanvasBG","_","bits","reduce","barHeight","_drawCap","fillStyle","_drawBar","clearRect","fillRect","barX","_drawBrickBar","_symAlign","b","barwidth","barY","cap","capY","AvLine","lineColor","_setCanvas","strokeStyle","beginPath","reverse","moveTo","_drawLine","lineTo","canvColor","AvCircle","radius","lineSpace","outlineColor","outlineWidth","barLength","progressWidth","progressColor","progressClockwise","outlineMeterSpace","playtime","playtimeFont","playtimeColor","rotateGraph","rotateSpeed","rotate","cx","cy","r","arcStep","barLen","_rotate","_drawOutline","_drawProgress","_drawPlaytime","_setBarColor","blen","cos","elapsed","currentTime","angleEnd","arc","sec","tsizew","measureText","fillText","createRadialGradient","AvWaveform","playedLineWidth","playedLineColor","noplayedLineWidth","noplayedLineColor","playtimeWithMs","playtimeFontSize","playtimeFontFamily","playtimeFontColor","playtimeTextBottom","playtimeSlider","playtimeSliderColor","playtimeSliderWidth","playtimeClickable","peaks","downloadProgress","fetch","headers","responseType","response","arrayBuffer","decode","decodeAudioData","audioBuffer","setPeaks","buffer","min","segSize","$emit","numberOfChannels","getChannelData","updateTime","waveform","playX","draw","drawSlider","drawTime","timeFormat","timeSec","frmStr","ms","substr","timeStr","textWidth","textX","textY","ev","progressX","loaded","total","AVPlugin","webkitAudioContext","mozAudioContext","msAudioContext","component","route","redirect","normalizedPath","path","newLocation","ruleFound","_i","_redirects","from","to","rule","content","__esModule","module","locals","exports","add","___CSS_LOADER_EXPORT___","___CSS_LOADER_API_IMPORT___","pkg","VueI18n","store","Vuex","Store","version","assignmentDev","baseURL","socketBaseURL","frontendBaseURL","cleverKey","classlinkKey","stripeAPIKey","getStream","appId","ap","ga","st","an","currency","plans","accountType","amount","planId","discount","cookie_exp_date","searchQuery","placeholder","avatar_sm","avatar_md","story","navigationDrawer","onlineStatusDrawer","loginDialog","studentSignupDialog","teacherSignupDialog","signupDialog","contactDialog","submitAssetDialog","schoolContactDialog","featuredStories","featuredCurriculums","featuredClassrooms","featuredAssets","featuredSounds","previewSoundItem","previewSoundLoading","previewSoundPlaying","howl","initReaderAudio","hasLoginCookie","showLayoutLoader","suggestedUsers","displayMessages","currentProfile","currentClass","currentLibrary","studentSelectClass","studentSelectStory","collectionAssets","badgesCard","readerHelpDocumentationDialog","studioHelpDocumentationDialog","documentationArticle","getCurrentProfile","loggedIn","auth","appVersion","symbol","modules","StudioLauncher","StudioProps","SET_NUM_STUDENTS","num","num_students","SET_INSPECT_MODE","SET_DOCUMENTATION_ARTICLE","SET_READER_HELP_DOCUMENTATION_DIALOG","SET_STUDIO_HELP_DOCUMENTATION_DIALOG","HAS_LOGIN_COOKIE","SET_SHOW_LAYOUT_LOADER","LOGOUT","$auth","logout","setUser","setHeader","localStorage","clear","$cookies","removeAll","user","INIT_READER_AUDIO","setSearchQuery","setNavigationDrawer","setOnlineStatusDrawer","setLoginDialog","setStudentSignupDialog","setTeacherSignupDialog","setSubmitAssetDialog","setSignupDialog","setContactDialog","setSchoolContactDialog","SET_FEATURED_CURRICULUMS","SET_FEATURED_STORIES","SET_FEATURED_CLASSROOMS","SET_FEATURED_ASSETS","SET_FEATURED_SOUNDS","SET_STUDENT_SELECT_STORY","SET_STUDENT_SELECT_CLASS","SET_STUDENT_SELECT_ASSIGNMENT","SET_CURRENT_CLASS","SET_CURRENT_LIBRARY","SET_CURRENT_CLASS_LIBRARY_PASSWORD","student_password","SET_CURRENT_LIBRARY_ARCHIVE","archived_at","SET_CURRENT_ASSIGNMENT","SET_CURRENT_PROFILE","ADD_SOCIAL_LINK","profile","social","title_verbose","REMOVE_SOCIAL_LINK","SET_CLEVER_TOKEN","clever_token","SET_CLASSLINK_TOKEN","classlink_token","SET_LEVEL","level","CHANGE_LANG","lang","SET_STUDENT_PASS_IS_CODE","student_data","need_pass_change","SET_TEACHER_PASS_IS_CODE","teacher_data","SET_DISPLAY_MESSAGES","CHANGE_AVATAR","REMOVE_MESSAGE","findIndex","item","SET_CURRENCY","SET_SUGGESTED_USERS","SET_ASSETS_IN_COLLECTION","_ref7","SET_BADGES_CARD","SET_UNSEEN_NOTIFICATIONS","count","unseen_notifications","SET_PREVIEW_SOUND_ITEM","PLAY_SOUND_ITEM","audio_file","STOP_SOUND_ITEM","SET_FEEDBACK_FOR_STORIES","draft_stories","results","itm","_objectSpread","find","_ref9","_ref11","_ref12","DISPLAY_HELP","_ref13","payload","_ref14","_ref15","_ref16","_ref17","_ref18","_ref19","_ref20","_ref21","_ref22","_ref23","_ref24","GET_CURRENCY","_ref25","success","GET_SUGGESTED_USERS","_ref26","GET_FEATURED_CURRICULUMS","_ref27","_callee5","_context5","getCurriculums","GET_FEATURED_STORIES","_ref28","_callee6","_context6","GET_FEATURED_CLASSROOMS","_ref29","_callee7","_context7","getFeaturedClassrooms","GET_FEATURED_ASSETS","_ref30","_callee8","_context8","GET_FEATURED_SOUNDS","_ref31","_callee9","_context9","GET_DISPLAY_MESSAGES","_ref32","_callee10","_context10","GET_BADGES_CARD","_ref33","getting_started_done","_ref34","_ref35","_ref36","_ref37","_ref38","_ref39","_ref40","_ref41","SUBSCRIBE_PLAN","_ref42","_ref43","CANCEL_TRIAL","_ref44","CANCEL_PLAN","_ref45","SEND_CONTACT_FORM","_ref46","SEND_SUBSCRIBER","_ref47","UPDATE_UNSEEN_NOTIFICATIONS","_ref48","_ref49","_ref50","webpackAsyncContext","req","__webpack_require__","Promise","resolve","Error","ids","keys","required","head","meta","statusCode","refreshPage","location","reload","computed","_vm","_c","_self","attrs","staticClass","_v","_s","localePath","_e","VBtn","VContainer","VLayout"],"mappings":"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JC,MAAK,QACLC,SAAQ,QACRC,UAAS,SAEX/M,MAAO,CACL,SACA,gBACA,OACA,WACA,aACA,gBACA,kBACA,SACA,QACA,mBACA,YACA,2BACA,QACA,sBACA,aACA,OACA,OACA,YACA,oBACA,aACA,UACA,SACA,aACA,YACA,kBACA,gBACA,WACA,eACA,kBACA,aACA,eACA,eACA,eACA,QACA,WACA,SACA,WACA,QACA,qBACA,oBACA,YACA,eACA,YACA,SACA,iBACA,aACA,QACA,cACA,QACA,eACA,MACA,eACA,UACA,cACA,uBACA,UACA,gBACA,WACA,gBACA,oBACA,cACA,aACA,cACA,cACA,SACA,UACA,cACA,iBACA,0BACA,eACA,eACA,eACA,eACA,eACA,kBACA,QACA,iBACA,WACA,QACA,SACA,OACA,aACA,oBACA,iBACA,YACA,cACA,kBACA,kBACA,OACA,wBACA,eACA,eACA,YACA,WACA,eACA,cACA,mBACA,UACA,aACA,gBACA,qBACA,mBACA,SACA,uBACA,SACA,YACA,WACA,UACA,SACA,mBACA,WACA,WACA,aACA,eACA,mBACA,UACA,mBACA,iBACA,aACA,iBACA,cACA,SACA,eACA,YACA,kBACA,UACA,eACA,QACA,eACA,gBACA,SACA,SACA,mBACA,cACA,YACA,UACA,iBACA,cACA,aACA,UACA,cACA,YACA,aACA,aACA,aACA,YACA,yBACA,kBACA,YACA,gBACA,UACA,gBACA,gBACA,cACA,YACA,UACA,OACA,SACA,UACA,mBACA,cACA,QACA,YACA,cACA,WACA,QACA,aACA,gBAEFgN,UAAW,CACTC,KAAM,0CACNC,OAAQ,4CACRC,MAAO,2CACPC,IAAK,0CAEPC,UAAW,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,KACrEC,gBAAiB,CAEf,CACEC,KAAM,iBACNC,KAAM,QAER,CACED,KAAM,eACNC,KAAM,UAER,CACED,KAAM,aACNC,KAAM,eAER,CACED,KAAM,SACNC,KAAM,cA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wBFC,aAAc,CACZ,CACExD,KAAM,QACNyD,KAAM,MAER,CACEzD,KAAM,eACNyD,KAAM,MAER,CACEzD,KAAM,aACNyD,KAAM,MAER,CACEzD,KAAM,kBACNyD,KAAM,MAER,CACEzD,KAAM,YACNyD,KAAM,MAER,CACEzD,KAAM,aACNyD,KAAM,MAER,CACEzD,KAAM,qBACNyD,KAAM,MAER,CACEzD,KAAM,YACNyD,KAAM,OAGVC,eAAgB,CACd,CAACC,KAAM,MACP,CAACC,WAAY,iBACb,CAACC,WAAY,MACb,CAACC,SAAU,MACX,CAACC,KAAM,sBACP,CAACC,QAAS,cACV,CAACC,cAAe,2BAChB,CAACC,WAAY,MACb,CAACC,OAAQ,MACT,CAACC,MAAO,MACR,CAACC,YAAa,MACd,CAACC,OAAQ,kBACT,CAACC,YAAa,uBACd,CAACC,UAAW,uBACZ,CAACC,WAAY,sBACb,CAACC,GAAI,oBACL,CAACC,OAAQ,2BACT,CAACC,UAAW,CACVnF,KAAM,qBACNoF,OAAQ,uBACRC,QAAS,wBACTnF,MAAO,wBAET,CAACoF,UAAW,mBACZ,CAACC,UAAW,sBACZ,CAACC,MAAO,qBACR,CAACC,QAAS,sBACV,CAACC,QAAS,kBACV,CAACC,OAAQ,kBAGXC,cAAe,CACb,YACA,WACA,QACA,QACA,YACA,OACA,WACA,SACA,SACA,OACA,OACA,OACA,OACA,OACA,QACA,QACA,QACA,OACA,YACA,OACA,SACA,QACA,QACA,QACA,MACA,QACA,WACA,SACA,OACA,SACA,SACA,eACA,iBAEFC,UAAW,CACTC,UAAW,CACTC,UAAW,kDACXhM,KAAM,CACJ,CACEiM,KAAM,CACJlS,eAAgB,CACd,CACEmS,IAAK,gCACLjF,KAAM,QACNkF,UAAU,EACVC,MAAO,iBAIbC,YAAa,CAAC,cACdC,YAAY,GAEd,CACEL,KAAM,CACJM,gBAAgB,GAElBD,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEmS,UAAU,EACVK,SAAU,mBACVJ,MAAO,wBAIbE,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEmS,UAAU,EACVK,SAAU,oBACVJ,MAAO,yBAIbE,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEmS,UAAU,EACVK,SAAU,cACVC,cAAe,cACfL,MAAO,mBAIbE,YAAY,GAEd,CACEL,KAAM,CACJM,gBAAgB,GAElBD,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEmS,UAAU,EACVK,SAAU,oBACVE,OAAQ,CACNC,KAAM,aACNC,WAAY,sBAEdC,OAAQ,CACNF,KAAM,gBACNC,WAAY,uBAEdR,MAAO,kBAIbE,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEmS,UAAU,EACVK,SAAU,oBACVE,OAAQ,CACNC,KAAM,aACNC,WAAY,iBAEdC,OAAQ,CACNF,KAAM,aACNC,WAAY,uBAEdR,MAAO,kBAIbE,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEwM,KAAM,SACNgG,SAAU,oBACVJ,MAAO,yBAIbE,YAAY,GAEd,CACEL,KAAM,CACJa,mBAAmB,GAErBR,YAAY,KAKlBS,OAAQ,CACN/M,KAAM,CACJ,CACEiM,KAAM,CACJc,OAAQ,YAEVV,YAAa,CAAC,eAEhB,CACEJ,KAAM,CACJjS,cAAe,CACb,CACEmS,UAAU,EACVK,SAAU,mBACVJ,MAAO,wBAIbE,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEmS,UAAU,EACVK,SAAU,kBACVJ,MAAO,uBAIbE,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEmS,UAAU,EACVK,SAAU,oBACVE,OAAQ,CACNC,KAAM,aACNC,WAAY,sBAEdC,OAAQ,CACNF,KAAM,gBACNC,WAAY,qBAEdR,MAAO,kBAIbE,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEwS,SAAU,kBACVQ,MAAO,KACPZ,MAAO,uBAIbE,YAAY,KAIlBW,OAAQ,CACNjB,UAAW,kDACXhM,KAAM,CACJ,CACEiM,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,QACNiF,IAAK,KACLC,UAAU,EACVC,MAAO,aAIbE,YAAY,GAEd,CACEL,KAAM,CACJM,gBAAgB,GAElBD,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEmS,UAAU,EACVK,SAAU,mBACVJ,MAAO,wBAIbE,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEmS,UAAU,EACVK,SAAU,YACVJ,MAAO,iBAIbE,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEmS,UAAU,EACVK,SAAU,cACVC,cAAe,UACfL,MAAO,mBAIbE,YAAY,GAEd,CACEL,KAAM,CACJM,gBAAgB,GAElBD,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEmS,UAAU,EACVK,SAAU,oBACVE,OAAQ,CACNC,KAAM,aACNC,WAAY,sBAEdC,OAAQ,CACNF,KAAM,gBACNC,WAAY,eAEdR,MAAO,kBAIbE,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEmS,UAAU,EACVK,SAAU,oBACVE,OAAQ,CACNC,KAAM,aACNC,WAAY,iBAEdC,OAAQ,CACNF,KAAM,aACNC,WAAY,eAEdR,MAAO,kBAIbE,YAAY,GAEd,CACEL,KAAM,CACJa,mBAAmB,GAErBR,YAAY,KAIlBY,WAAY,CACVlB,UAAW,sDACXhM,KAAM,CACJ,CACEiM,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,UACNkF,UAAU,EACVC,MAAO,eAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEoQ,KAAM,KACNiC,MAAO,eAIbE,YAAY,GAEd,CACEL,KAAM,CACJM,gBAAgB,GAElBD,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEmS,UAAU,EACVK,SAAU,mBACVJ,MAAO,wBAIbE,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEmS,UAAU,EACVK,SAAU,kBACVJ,MAAO,uBAIbE,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEmS,UAAU,EACVK,SAAU,cACVC,cAAe,YACfL,MAAO,mBAIbE,YAAY,GAEd,CACEL,KAAM,CACJM,gBAAgB,GAElBD,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEmS,UAAU,EACVK,SAAU,oBACVE,OAAQ,CACNC,KAAM,aACNC,WAAY,sBAEdC,OAAQ,CACNF,KAAM,gBACNC,WAAY,qBAEdR,MAAO,kBAIbE,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEmS,UAAU,EACVK,SAAU,oBACVE,OAAQ,CACNC,KAAM,aACNC,WAAY,iBAEdC,OAAQ,CACNF,KAAM,aACNC,WAAY,qBAEdR,MAAO,kBAIbE,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEmT,OAAQ,SACRX,SAAU,kBACVJ,MAAO,uBAIbE,YAAY,GAEd,CACEL,KAAM,CACJa,mBAAmB,GAErBR,YAAY,KAIlBc,mBAAoB,CAClBpB,UAAW,mDACXhM,KAAM,CACJ,CACEiM,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,YACNkF,UAAU,EACVC,MAAO,iBAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEqS,MAAO,cACPjC,KAAM,wBAIZmC,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEmS,UAAU,EACVK,SAAU,sBACVJ,MAAO,2BAIbE,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEqT,cAAc,EACdb,SAAU,sBACVJ,MAAO,wBACPkB,eAAgB,gBAItBhB,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEuT,eAAe,EACfC,OAAQ,CACNhH,KAAM,QAERgG,SAAU,sBACVJ,MAAO,wBACPkB,eAAgB,gBAItBhB,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEmS,UAAU,EACVK,SAAU,cACVC,cAAe,cACfL,MAAO,mBAIbE,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEmS,UAAU,EACVK,SAAU,mBACVJ,MAAO,wBAIbE,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEmS,UAAU,EACVK,SAAU,oCACVJ,MAAO,yCAIbE,YAAY,GAEd,CACEL,KAAM,CACJM,gBAAgB,GAElBD,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEmS,UAAU,EACVK,SAAU,oBACVE,OAAQ,CACNC,KAAM,aACNC,WAAY,iBAEdC,OAAQ,CACNF,KAAM,aACNC,WAAY,sBAEdR,MAAO,kBAIbE,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEmS,UAAU,EACVK,SAAU,oBACVE,OAAQ,CACNC,KAAM,aACNC,WAAY,iBAEdC,OAAQ,CACNF,KAAM,aACNC,WAAY,uCAEdR,MAAO,kBAIbE,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEmS,UAAU,EACVK,SAAU,oBACVE,OAAQ,CACNC,KAAM,aACNC,WAAY,sBAEdC,OAAQ,CACNF,KAAM,gBACNC,WAAY,uCAEdR,MAAO,kBAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,UACNkF,UAAU,EACVC,MAAO,eAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEqS,MAAO,YACPjC,KAAM,uBAIZmC,YAAY,GAEd,CACEL,KAAM,CACJa,mBAAmB,MAK3BW,eAAgB,CACdzB,UAAW,mDACXhM,KAAM,CACJ,CACEiM,KAAM,CACJjS,cAAe,CACb,CACEmS,UAAU,EACVK,SAAU,sBACVJ,MAAO,2BAIbE,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEqT,cAAc,EACdb,SAAU,sBACVJ,MAAO,wBACPkB,eAAgB,gBAItBhB,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEuT,cAAe,KACff,SAAU,sBACVJ,MAAO,wBACPkB,eAAgB,gBAItBhB,YAAY,GAId,CACEL,KAAM,CACJjS,cAAe,CACb,CACEmS,UAAU,EACVK,SAAU,yBACVJ,MAAO,8BAIbE,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEqT,cAAc,EACdb,SAAU,yBACVJ,MAAO,2BACPkB,eAAgB,gBAItBhB,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEqT,cAAc,EACdb,SAAU,yBACVJ,MAAO,2BACPkB,eAAgB,gBAItBhB,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEuT,cAAe,KACff,SAAU,yBACVJ,MAAO,2BACPkB,eAAgB,gBAItBhB,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEmS,UAAU,EACVK,SAAU,wBACVJ,MAAO,6BAIbE,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEmS,UAAU,EACVK,SAAU,wBACVJ,MAAO,6BAIbE,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEqT,cAAc,EACdb,SAAU,wBACVJ,MAAO,0BACPkB,eAAgB,gBAItBhB,YAAY,GAEd,CACEL,KAAM,CACJjS,cAAe,CACb,CACEuT,cAAe,KACff,SAAU,wBACVJ,MAAO,0BACPkB,eAAgB,gBAItBhB,YAAY,KAIlBoB,KAAM,CACJ1B,UAAW,kDAEPhM,KAAM,CACJ,CACE,GAAM,SACN,KAAQ,CACN,WAAc,SACd,eAAkB,CAChB,CACE,KAAQ,UACR,MAAS,SACT,UAAY,EACZ,WAAc,YAIpB,YAAc,GAEhB,CACE,GAAM,SACN,KAAQ,CACN,WAAc,SACd,eAAkB,CAChB,CACE,MAAS,SACT,WAAc,KACd,WAAc,YAIpB,YAAc,GACb,CAAC,GAAM,SAAU,KAAQ,CAAC,WAAc,SAAU,eAAkB,CAAC,CAAC,MAAS,SAAU,SAAY,KAAM,WAAc,YAAa,YAAc,GAAO,CAAC,GAAM,SAAU,KAAQ,CAAC,WAAc,SAAU,eAAkB,CAAC,CAAC,MAAS,SAAU,OAAU,KAAM,WAAc,YAAa,YAAc,KAiQxT2N,aAAc,CACZ3N,KAAM,CACJ,CACEiM,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,QACNkF,UAAU,EACVC,MAAO,aAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,QACNkE,OAAQ,KACRiB,MAAO,aAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,QACNwE,OAAO,EACPW,MAAO,aAIbE,YAAY,KAKlBsB,aAAc,CACZ5N,KAAM,CACJ,CACEiM,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,OACNkF,UAAU,EACVC,MAAO,YAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,OACNkE,OAAQ,KACRiB,MAAO,YAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,OACNsD,KAAM,KACN6B,MAAO,YAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,OACN6D,OAAQ,KACRsB,MAAO,YAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,OACN8D,YAAa,KACbqB,MAAO,YAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,OACNuD,QAAS,KACT4B,MAAO,YAIbE,YAAY,KAKlBuB,iBAAkB,CAChB7N,KAAM,CACJ,CACEiM,KAAM,CACJlS,eAAgB,CACd,CACEmS,IAAK,4BACLjF,KAAM,QACNkF,UAAU,EACVC,MAAO,iBAIbC,YAAa,CAAC,cACdC,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEyQ,QAAS,KACT4B,MAAO,iBAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACE0R,OAAO,EACPW,MAAO,iBAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACE8Q,YAAa,KACbiD,YAAa,KACb1B,MAAO,iBAIbE,YAAY,KAKlByB,YAAa,CACX/N,KAAM,CACJ,CACEiM,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,UACNkF,UAAU,EACVC,MAAO,eAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,UACNkE,OAAQ,KACRiB,MAAO,eAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,UACNoD,WAAY,SACZ+B,MAAO,eAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,UACNqD,SAAU,GACV8B,MAAO,eAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,UACNmE,UAAW,OACXgB,MAAO,eAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,UACNmD,WAAY,OACZgC,MAAO,eAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,UACNsE,UAAW,SACXa,MAAO,eAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,UACNuE,WAAW,EACXY,MAAO,eAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,UACNsD,KAAM,KACN6B,MAAO,eAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,UACNuD,QAAS,KACT4B,MAAO,eAIbE,YAAY,KAIlB0B,cAAe,CACbhO,KAAM,CACJ,CACEiM,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,eACNkF,UAAU,EACVC,MAAO,oBAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,eACNkE,OAAQ,KACRiB,MAAO,oBAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,eACNoD,WAAY,SACZ+B,MAAO,oBAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,eACNqD,SAAU,GACV8B,MAAO,oBAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,eACNmD,WAAY,OACZgC,MAAO,oBAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,eACNsE,UAAW,SACXa,MAAO,oBAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,eACNuE,WAAW,EACXY,MAAO,oBAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,eACNyE,QAAS,KACTU,MAAO,oBAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,eACNsD,KAAM,KACN6B,MAAO,oBAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,eACN+D,UAAW,KACXoB,MAAO,oBAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,eACNuD,QAAS,KACT4B,MAAO,oBAIbE,YAAY,KAIlB2B,cAAe,CACbjO,KAAM,CACJ,CACEiM,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,aACNkF,UAAU,EACVC,MAAO,kBAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,aACNkE,OAAQ,KACRiB,MAAO,kBAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,aACNoD,WAAY,SACZ+B,MAAO,kBAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,aACNqD,SAAU,GACV8B,MAAO,kBAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,aACNmD,WAAY,OACZgC,MAAO,kBAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,aACNsE,UAAW,SACXa,MAAO,kBAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,aACNgE,WAAY,KACZmB,MAAO,kBAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,aACNsD,KAAM,KACN6B,MAAO,kBAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,aACNuD,QAAS,KACT4B,MAAO,kBAIbE,YAAY,GAEd,CACEL,KAAM,CACJlS,eAAgB,CACd,CACEkN,KAAM,aACNiE,GAAI,KACJkB,MAAO,kBAIbE,YAAY,OA8BpBjL,QAfc,CAAC,EAgBfC,QAbc,CAAC,EAcf3F,UAXgB,CAGhB,E,mCC94FF,oBAGAuS,UAAIC,IAAIC,IAAS,CACfC,iBAAiB,EACjBC,OAAQ,CAAExU,GAAI,iB,8HC4MhB,IAAIyU,GAAY,EACZC,EAAY,CACdC,IAAI,EACJC,IAAI,EACJC,IAAI,EAGJC,IAAI,EACJC,IAAI,EACJC,IAAI,EACJC,IAAI,GAGS,aAAAC,GAAa,IAAVC,EAAGD,EAAHC,IACXV,IACHL,UAAIC,IAAIe,IAAa,CACnBC,QAAQ,EACRC,KAAMH,EAAIG,OA/NhB,SAAqB7N,GAAU,IAAP0N,EAAG1N,EAAH0N,IACtBC,IAAYG,UAAUC,OAAO,kBAAmB,CAC9CC,WAAU,SAACC,GACT,MAAO,2BACT,EACMC,SAAQ,SAAC5T,GAAyB,IAAA6T,EAAAC,UAAA,OAAAC,YAAAC,mBAAAC,MAAA,SAAAC,IAAA,IAAAtO,EAAAuO,EAAAC,EAAA,OAAAJ,mBAAAK,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OAAR,GAAQ5O,EAAAiO,EAAAzS,OAAA,QAAAqT,IAAAZ,EAAA,GAAAA,EAAA,GAAJ,GAAEa,YAAA9O,EAAA,GAAN,KAC1B5F,GAASA,EAAMoB,OAAS,GAAC,CAAAkT,EAAAE,KAAA,SACV,OAAbL,GAAQ,EAAKG,EAAAC,KAAA,EAAAD,EAAAE,KAAA,EAEGpB,EAAIuB,KAAKC,cAAc5U,GAAM,OAAzCoU,EAAGE,EAAAO,KAEPV,GADEC,EAAIjQ,KAAK2Q,MAIZR,EAAAE,KAAA,iBAAAF,EAAAC,KAAA,GAAAD,EAAAS,GAAAT,EAAA,SAEDzQ,QAAQmR,IAAGV,EAAAS,IACXZ,GAAQ,EAAK,eAAAG,EAAAW,OAAA,SAER,CACLd,MAAOA,IACR,eAAAG,EAAAW,OAAA,UAEM,GAAK,yBAAAX,EAAAY,OAAA,GAAAhB,EAAA,kBAlBwBH,EAoBxC,IAEFV,IAAYG,UAAUC,OAAO,eAAgB,CAC3CC,WAAU,SAACC,GACT,MAAO,6BACT,EACMC,SAAQ,SAAC5T,GAAyB,IAAAmV,EAAArB,UAAA,OAAAC,YAAAC,mBAAAC,MAAA,SAAAmB,IAAA,IAAArP,EAAAoO,EAAAC,EAAA,OAAAJ,mBAAAK,MAAA,SAAAgB,GAAA,cAAAA,EAAAd,KAAAc,EAAAb,MAAA,OAAR,GAAQzO,EAAAoP,EAAA/T,OAAA,QAAAqT,IAAAU,EAAA,GAAAA,EAAA,GAAJ,GAAET,YAAA3O,EAAA,GAAN,KAC1B/F,GAASA,EAAMoB,OAAS,GAAC,CAAAiU,EAAAb,KAAA,SACV,OAAbL,GAAQ,EAAKkB,EAAAd,KAAA,EAAAc,EAAAb,KAAA,EAEGpB,EAAIuB,KAAKW,WAAWtV,GAAM,OAAtCoU,EAAGiB,EAAAR,KAEPV,GADEC,EAAIjQ,KAAK2Q,MAIZO,EAAAb,KAAA,iBAAAa,EAAAd,KAAA,GAAAc,EAAAN,GAAAM,EAAA,SAEDxR,QAAQmR,IAAGK,EAAAN,IACXZ,GAAQ,EAAK,eAAAkB,EAAAJ,OAAA,SAER,CACLd,MAAOA,IACR,eAAAkB,EAAAJ,OAAA,UAEM,GAAK,yBAAAI,EAAAH,OAAA,GAAAE,EAAA,kBAlBwBrB,EAoBxC,IAEFV,IAAYG,UAAUC,OAAO,qBAAsB,CACjDC,WAAU,SAACC,GACT,MAAO,gCACT,EACMC,SAAQ,SAAC5T,GAAyB,IAAAuV,EAAAzB,UAAA,OAAAC,YAAAC,mBAAAC,MAAA,SAAAuB,IAAA,IAAAvP,EAAAkO,EAAAsB,EAAAC,OAAAC,EAAA,OAAA3B,mBAAAK,MAAA,SAAAuB,GAAA,cAAAA,EAAArB,KAAAqB,EAAApB,MAAA,OAAR,GAAQvO,EAAAsP,EAAAnU,OAAA,QAAAqT,IAAAc,EAAA,GAAAA,EAAA,GAAJ,GAAEb,YAAAzO,EAAA,GAAN,KAC1BjG,GAASA,EAAMoB,OAAS,GAAC,CAAAwU,EAAApB,KAAA,SAyG1B,OAxGGL,GAAQ,EACRsB,EAASI,EAAQ,MACnBH,OAAS,IAAID,GACRK,SACL,QACA,UACA,WACA,MACA,OACA,SACA,aACA,cACA,UACA,aACA,cACA,UACA,QACA,UACA,UACA,WACA,OACA,SACA,cACA,YACA,UACA,OACA,QACA,MACA,OACA,WACA,YACA,aACA,aACA,QACA,SACA,UACA,UACA,WACA,OACA,QACA,YACA,aACA,QACA,SACA,QACA,WACA,aACA,eACA,gBACA,OACA,aACA,QACA,SACA,QACA,SACA,eACA,gBACA,WACA,UACA,WACA,QACA,UACA,UACA,MACA,aACA,cACA,iBACA,QACA,SACA,iBACA,UACA,UACA,WACA,SACA,UACA,UACA,WACA,eACA,gBACA,QACA,SACA,cACA,eACA,UACA,QACA,SACA,YACA,UACA,UACA,WACA,QACA,UACA,oBACA,MACA,cACA,kBACA,eACA,YAEEH,EAAUD,OAAOK,MAAM/V,GAEzBmU,GADEwB,EAAQK,SAAS,KAIpBJ,EAAAX,OAAA,SACM,CACLd,MAAOA,IACR,eAAAyB,EAAAX,OAAA,UAEM,GAAK,yBAAAW,EAAAV,OAAA,GAAAM,EAAA,IA/GwBzB,EAiHxC,IAGFV,IAAYG,UAAUC,OAAO,kBAAmB,CAC9CC,WAAU,SAACC,GACT,MAAO,uBACT,EACMC,SAAQ,SAAC5T,GAAyB,IAAAiW,EAAAnC,UAAA,OAAAC,YAAAC,mBAAAC,MAAA,SAAAiC,IAAA,IAAAC,EAAAV,EAAAC,OAAAU,EAAAC,EAAAV,EAAAW,EAAAC,EAAAC,EAAAC,EAAA,OAAAzC,mBAAAK,MAAA,SAAAqC,GAAA,cAAAA,EAAAnC,KAAAmC,EAAAlC,MAAA,OAAR,GAAQ2B,EAAAF,EAAA7U,OAAA,QAAAqT,IAAAwB,EAAA,GAAAA,EAAA,GAAJ,GAAEvB,YAAAyB,EAAA,GAAN,GACzBnW,EAAO,CAAF0W,EAAAlC,KAAA,eAAAkC,EAAAzB,OAAA,UAAS,GAAK,OAkBvB,OAhBGQ,EAASI,EAAQ,KACrBH,OAAS,IAAID,EACPW,EAAQpW,EAAM2W,cAGdN,EAAcD,EAAQ,OACtBT,EAAUD,OAAOK,MAAMM,GACvBC,EAAcX,EAAQiB,SAAS,OAC/BL,EAAeD,EAAcX,EAAQkB,MAAM,GAAI,GAAKlB,EAGpDa,EAA2BD,EAAaP,SAAS,KAGjDS,EAAwBf,OAAOoB,KAAKC,MAAK,SAAAC,GAAO,OACpDZ,EAAMJ,SAASgB,EAAQ,IACxBN,EAAAzB,OAAA,SAEM,CACLd,OAAQqC,IAA6BC,IACtC,yBAAAC,EAAAxB,OAAA,GAAAgB,EAAA,IAvBqCnC,EAwBxC,GAGJ,CAsBIkD,CAAa,CAAE7D,QACfV,GAAY,GAGd,IAAMwE,EAAS9D,EAAIG,KAAK2D,OAExB,IAAIvE,EAAUuE,GAGd,OAAO,OAAO,KAADC,OAA6BD,IAAUE,MAAK,SAAAC,GACvDhE,IAAYG,UAAU8D,SAAQC,YAAC,CAAC,EAAEL,EAASG,IAC3C1E,EAAUuE,IAAU,CACtB,GACD,C,mCClPD,oBAGA7E,UAAIC,IAAIkF,I,mCCHR,6BAGAnF,UAAIC,IAAImF,I,mCCHR,KAEApF,QAAIqF,UAAU,uBAAwB,CACpCC,KAAM,SAASzE,EAAI0E,EAASC,GAC1B3E,EAAG4E,kBAAoB,SAAShb,GAG1BoW,GAAMpW,EAAMkU,QAAUkC,EAAG6E,SAASjb,EAAMkU,SAExClU,EAAMkU,OAAOgH,UAAUD,SAAS,uBACjCjb,EAAMkU,OAAOgH,UAAUD,SAAS,gBAChCjb,EAAMkU,OAAOgH,UAAUD,SAAS,gBAChCjb,EAAMkU,OAAOgH,UAAUD,SAAS,yBAGjCF,EAAMI,QAAQL,EAAQM,YAAYpb,EAEtC,EACAqb,SAASC,KAAKC,iBAAiB,QAASnF,EAAG4E,mBAC3CK,SAASC,KAAKC,iBAAiB,aAAcnF,EAAG4E,kBAClD,EACAQ,OAAQ,SAASpF,GACfiF,SAASC,KAAKG,oBAAoB,QAASrF,EAAG4E,mBAC9CK,SAASC,KAAKG,oBAAoB,aAAcrF,EAAG4E,kBACrD,G,ukMCilKYU,cAzEmBC,iCAxhKjCpG,0CAAIqG,UAAUC,YAAc,CAC1BC,kBAAmB,KACnBC,kBAAmB,GACnBC,eAAgB,CAAC,EACjBC,gCAAiC,IACjCC,KAAM,KACNC,OAAQ,KACRC,eAAgB,KAChBC,cAAe,EACfC,eAAgB,GAChB9J,OAAQ,CACNzE,MAAO,kBACPwO,KAAM,GACNC,QAAS,GACTC,QAAS,GACT5K,QAAS,GACT6K,YAAY,EACZC,cAAc,GAEhBC,KAAM,CACJ7O,MAAO,kBACPwO,KAAM,EACNC,QAAS,EACTC,QAAS,EACT5K,QAAS,EACT6K,YAAY,EACZC,cAAc,GAEhBE,iBAAkB,EAClB1c,iBAAkB,CAAC,EACnB2c,oBAAqB,CAAC,EAEtBC,YAAa,CACX,mBAEA,eACA,mBACA,kBACA,sBACA,mBACA,uBACA,mBACA,oBAGFC,qBAAsB,CACpB,oBACA,aACA,cACA,YACA,kBACA,mBACA,YACA,sBACA,sBACA,cACA,aACA,qBACA,kBACA,sBACA,sBACA,yBACA,oBACA,YACA,6BACA,iCAGFC,mBAAoB,CAClB,cACA,wBACA,uBAGFC,gBAAiB,CACf,kCACA,+BACA,oCACA,oCACA,iCACA,qCACA,mCAGFC,gBAAiB,SAAUC,EAAeC,GACxCC,KAAKnB,OAAOgB,gBAAgBC,EAAeC,EAC7C,EAEAE,mBAAoB,SAAS/O,GAG3B,IAAK,IAAIpK,EAAI,EAAGA,EAAIoK,EAAOlK,OAAQF,IACjC,IAAK,IAAIC,EAAI,EAAGA,EAAImK,EAAOpK,GAAGE,OAAQD,IACpC,GAAgCsT,MAA5BnJ,EAAOpK,GAAGC,GAAa,SAA3B,CAEA,IAAIiK,EAAO,OACPpL,EAAQ,GACoB,yBAA5BsL,EAAOpK,GAAGC,GAAa,UACzBiK,EAAO,SACPpL,EAAQ,KAC6B,0BAA5BsL,EAAOpK,GAAGC,GAAa,WAChCiK,EAAO,UACPpL,EAAQ,SAGV,IAAK,IAAIsa,EAAI,EAAGA,EAAIhP,EAAOpK,GAAGC,GAAa,SAAEC,OAAQkZ,IACnDF,KAAKnB,OAAOhc,iBAAiBqO,EAAOpK,GAAGC,GAAa,SAAEmZ,GAAS,MAAK,CAClEta,MAAOA,EACPoL,KAAMA,EAfyC,CAoBzD,EACAmP,mBAAoB,SAASC,GAO3B,MALI,SAAUA,GAAmB,OAAdA,EAAQ,KACdA,EAAQ,KAERA,EAAM,EAGrB,EAEAC,QAAS,SAAUzB,EAAM0B,GACvBN,KAAKpB,KAAOA,EACQ,mBAAb0B,GAA2BA,GACpC,EAEA7V,aAAc,SAAU3H,GACtBkd,KAAKld,UAAYA,CACnB,EACAyd,UAAW,SAAU1B,GACnBmB,KAAKnB,OAASA,CAChB,EAEA2B,qBAAsB,SAAUC,GAC9B,SAAIT,KAAKnB,OAAO6B,YAAYD,IAAcT,KAAKnB,OAAO6B,YAAYD,GAAWE,YAAY3Z,OAAS,EAEpG,EAEA4Z,4BAA6B,SAAUC,GAGrC,GAAkDxG,MAA9C2F,KAAKnB,OAAO6B,YAAYG,EAAQJ,WAClC,OAAO,EAGT,GAAIT,KAAKnB,OAAO6B,YAAYG,EAAQJ,WAAWE,YAAY3Z,OAAS,EAAG,OAAO,EAE9E,GAAI6Z,EAAQC,kBAAoBd,KAAKnB,OAAO6B,YAAYG,EAAQJ,WAAWM,QAAS,OAAO,EAC3F,GACEf,KAAKnB,OAAO6B,YAAYG,EAAQJ,WAAWV,cAAgB,GAC3DC,KAAKnB,OAAO6B,YAAYG,EAAQJ,WAAWM,SAAWf,KAAKnB,OAAO6B,YAAYG,EAAQJ,WAAWV,cAAgB,EAIjH,OADAC,KAAKnB,OAAO6B,YAAYG,EAAQJ,WAAWM,QAAU,GAC9C,EAGTf,KAAKnB,OAAO6B,YAAYG,EAAQJ,WAAWM,UAG3C,IAAMC,EAAQhB,KAAKiB,SAASJ,EAAQJ,WAEpC,OAAa,MAATO,IAEJhB,KAAKkB,mBAAmBF,EAAOhB,KAAKmB,oBAAoBH,EAAU,MAE3D,EAET,EAEAI,cAAe,SAAUC,EAAMC,MACxBtB,KAAKpB,KAMN0C,KAAOtB,KAAKjB,cACdiB,KAAKuB,mBAAqBC,uBAAsB,SAAUF,MACxDD,EAAKD,cAAcC,EAAMC,KAC3B,KAKEtB,KAAKnB,QAAWmB,KAAKnB,OAAO4C,aAMhCzB,KAAKjB,cAAgBuC,KAAOtB,KAAKhB,eAEjCgB,KAAKpB,KAAK8C,mBAEV1B,KAAKuB,mBAAqBC,uBAAsB,SAAUF,MACxDD,EAAKD,cAAcC,EAAMC,KAC3B,KAXEtB,KAAK2B,mBAdL3B,KAAK2B,kBA0BT,EAEAA,iBAAkB,WACZ3B,KAAKpB,MACPoB,KAAKpB,KAAK8C,mBAEZE,qBACEC,OAAOD,sBAAwBC,OAAOC,wBACxCF,qBAAqB5B,KAAKuB,oBAC1BvB,KAAKuB,mBAAqB,KAE1BvB,KAAKnB,OAAOkD,gBAAkB,EAChC,EAEAC,0BAA2B,SAAUC,EAAUC,GAC7C,IAAIb,EAAOrB,KACXA,KAAKnB,OAAO4C,aAAc,EAE1BzB,KAAKnB,OAAOkD,gBAAgB9a,KAAK,CAC/BpD,GAAIoe,EACJC,cAAeA,IAGblC,KAAKuB,qBAETC,sBACEK,OAAOL,uBACPK,OAAOM,0BACPN,OAAOO,6BACPP,OAAOQ,wBACTrC,KAAKuB,mBAAqBC,uBAAsB,SAAUF,MAExDD,EAAKD,cAAcC,EAAMC,KAC3B,IACF,EAEAgB,yBAA0B,SAAUL,EAAUC,GAC5C,IAAK,IAAIpb,EAAI,EAAGC,EAAIiZ,KAAKnB,OAAOkD,gBAAgB/a,OAAQF,EAAIC,EAAGD,IAC7D,GACEkZ,KAAKnB,OAAOkD,gBAAgBjb,GAAGjD,KAAOoe,GACtCjC,KAAKnB,OAAOkD,gBAAgBjb,GAAGob,gBAAkBA,EACjD,CACAlC,KAAKnB,OAAOkD,gBAAgB/X,OAAOlD,EAAG,GACtC,KACF,CAGGkZ,KAAKnB,OAAOkD,gBAAgB/a,SAC/BgZ,KAAKnB,OAAO4C,aAAc,EACtBzB,KAAKnB,OAAO0D,qBACdvC,KAAKnB,OAAO0D,oBACVvC,KAAKnB,OACLmB,KAAKnB,OAAOxU,aACZ,KAIR,EAEAmY,cAAe,SAAUnB,EAAML,EAAOV,GAKpC,IAWImC,EAXAxY,EAAa+V,KAAK0C,sBAAsB1B,EAAY,MACnDhB,KAAK2C,SAAS1Y,GAAY,KAa7BwY,EAF6B,GAA5BG,OAAO3Y,EAAWrE,OAEFoa,KAAKnB,OAAOgE,GAAG,6BACK,GAA7BD,OAAO3Y,EAAWrE,OACToa,KAAKnB,OAAOgE,GAAG,gBAAgBtG,eACX,GAA7BqG,OAAO3Y,EAAWrE,OACToa,KAAKnB,OAAOgE,GAAG,oBAAoBtG,cAEpCtS,EAAWrE,MAG7Boa,KAAK8C,aACH9C,KAAKnB,OAAOgE,GAAG,0BAA2B,CACxCjE,KAAM6D,IAER,MACA,GAGFzC,KAAKnB,OAAOkE,SAASC,SAAS/Y,EAAWrE,OAAS,GAClD0a,IACF,EAEA2C,cAAe,SAAU5B,EAAML,EAAOV,GACpC,GAAmDjG,MAA/C2F,KAAKnB,OAAO6B,YAAYM,EAAiB,WAA7C,CAGA,GAAKhB,KAAKtB,eAAesC,EAAW,MAKlC,IADY,IAAIkC,MACRC,UAAYnD,KAAKtB,eAAesC,EAAW,KAAGmC,UAAYnD,KAAKrB,gCAErE,YADAqB,KAAKrB,gCAAkC,UALzCqB,KAAKtB,eAAesC,EAAW,KAAK,IAAIkC,KAS1ClC,EAAwB,iBAAIhB,KAAKnB,OAAO6B,YAAYM,EAAiB,WAAGD,QAExEf,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,0BAA2B,CAC1D5M,IAAK+K,EAAW,OAGlBhB,KAAKnB,OAAOuE,SAASpC,EAAW,KAGhCV,GAtBoE,CAwBtE,EAEA+C,UAAW,SAAUhC,EAAML,EAAOV,GAAU,IAAAgD,EAAA,KAC1C,GAAmDjJ,MAA/C2F,KAAKnB,OAAO6B,YAAYM,EAAiB,YACxChB,KAAKpB,KAAV,CACA,IAAIwB,EAAIJ,KAAKpB,KAAK2E,YAAYvC,EAAc,QACvCZ,IACLY,EAAwB,iBAAIhB,KAAKnB,OAAO6B,YAAYM,EAAiB,WAAGD,QACxEX,EAAEoD,SAAU,EAEZxD,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,sBAAuB,CACtDtS,KAAMyP,KAAKG,mBAAmBC,MAGU,GAAtCJ,KAAKnB,OAAOkD,gBAAgB/a,QAC9BgZ,KAAKpB,KAAK8C,mBAIZ1B,KAAKnB,OAAO4E,SAASxc,KAAKyc,YAAW,WACnCJ,EAAKzE,OAAO4E,SAASE,MACrBrD,GACF,GAAG,MAlBmB,CAmBxB,EAEAsD,UAAW,SAAUvC,EAAML,EAAOV,GAAU,IAAAuD,EAAA,KAC1C,GAAmDxJ,MAA/C2F,KAAKnB,OAAO6B,YAAYM,EAAiB,YACxChB,KAAKpB,KAAV,CACA,IAAIwB,EAAIJ,KAAKpB,KAAK2E,YAAYvC,EAAc,QACvCZ,IACLJ,KAAKnB,OAAO6B,YAAYM,EAAiB,WAAGL,YAAY1Z,MAAK,GAC7D+Z,EAAwB,iBAAIhB,KAAKnB,OAAO6B,YAAYM,EAAiB,WAAGD,QACxEX,EAAEoD,SAAU,EACZpD,EAAE7L,QAAU,EAEZyL,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,sBAAuB,CACtDtS,KAAMyP,KAAKG,mBAAmBC,MAGU,GAAtCJ,KAAKnB,OAAOkD,gBAAgB/a,QAC9BgZ,KAAKpB,KAAK8C,mBAEZ1B,KAAK8D,UAAU9D,KAAMgB,GAErBhB,KAAK+D,cAAc/D,KAAMgB,EAAOZ,GAEhCJ,KAAKnB,OAAO4E,SAASxc,KAAKyc,YAAW,WACnCG,EAAKhF,OAAO4E,SAASE,MACrBrD,GACF,GAAG,MAtBmB,CAuBxB,EAEA0D,WAAY,SAAU3C,EAAML,EAAOV,GACjC,GAAKN,KAAKpB,KAAV,CAEA,IAAIwB,EAAIJ,KAAKpB,KAAK2E,YAAYvC,EAAc,QAG5C,GAAKZ,EAAL,CAEA,IAAI/V,EAAegX,EAAKxC,OAAOxU,aACfgX,EAAKxC,OAAOoF,WAAW5C,EAAKxC,OAAOxU,cAC/CgX,EAAKxC,OAAOqF,UAEZ7C,EAAKxC,OAAOoF,WAAW5C,EAAKxC,OAAOxU,cACnCgX,EAAKxC,OAAOtc,QAAQO,UAAUue,EAAKxC,OAAOxU,cAG9C,IAAI8Z,EAAWnE,KAAK0C,sBAAsB1B,EAAgB,UAC1D,GAAKhB,KAAK2C,SAASwB,GAAU,GAA7B,CAIA,IAAIC,EAASpE,KAAK0C,sBAAsB1B,EAAa,OAErD,GAAKhB,KAAK2C,SAASyB,GAAO,KAKtBhE,EAAEiE,uBAEJD,GADQ,MAINhE,EAAEkE,WAAN,CAEAtE,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,uBAAwB,CACvDtS,KAAMyP,KAAKG,mBAAmBC,GAC9BmE,OAAQH,EAAMxe,MACdue,SAAUA,EAASve,SAGrBob,EAAwB,iBAAIK,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGD,QAExEf,KAAKnB,OAAO6B,YAAYM,EAAiB,WAAGL,YAAY1Z,MAAK,GAE7Doa,EAAKW,0BAA0BhB,EAAc,OAAG,eAChDZ,EAAEkE,WAAY,EAOd,IAAIE,GAAS,EACU,WAAnBxD,EAAc,SAChBwD,EAASC,OAAOC,KAAKC,KAAK,OAAS3D,EAAc,SAG/CZ,EAAEwE,uBACGxE,EAAEwE,eAEXxE,EAAEyE,QAAQ,CACRnQ,OAAQ0L,EAAE1L,OAAS0P,EAAMxe,MACzBkf,OAAQ1E,EAAE0E,OAASV,EAAMxe,OACxB,CACDue,SAAqC,IAA3BnB,SAASmB,EAASve,OAC5B4e,OAAQA,EACRO,MAAO,WAGL,OAFAtb,QAAQmR,IAAI,sBAEPyG,EAAKzC,MAAQvU,GAAgBgX,EAAKxC,OAAOxU,aAK1C+V,EAAEwE,gBAEJvD,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAYgD,MACxDvD,EAAEkE,WAAY,EAETlE,EAAE4E,QAAW5E,EAAEkE,WAAclE,EAAE6E,YAAe7E,EAAE8E,OAAU9E,EAAE+E,OAAU/E,EAAEgF,aACpEhF,EAAEwE,gBAGJ,QAE2CvK,IAAhDgH,EAAKxC,OAAO6B,YAAYM,EAAiB,aACzCK,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGqE,cAAgBC,MAAMC,OAAOvjB,MAAMqjB,kBAAnF,IAhBEhE,EAAKiB,yBAAyBtB,EAAc,OAAG,gBACxC,EAiBX,EACAwE,SAAU,WAERnE,EAAKxC,OAAO4G,sBAAsBrF,GAClCiB,EAAK0C,cAAc1C,EAAML,EAAOZ,EASlC,EACAsF,WAAY,WACVrE,EAAKiB,yBAAyBtB,EAAc,OAAG,eAC3CK,EAAKzC,MAAQvU,GAAgBgX,EAAKxC,OAAOxU,eAC3C+V,EAAEkE,WAAY,EAMdjD,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAYgD,MAMpC,mBAAbrD,GAA2BA,IAEtC,GAvFqB,CAdvB,CAbc,CALQ,CAyHxB,EAEAqF,YAAa,SAAUtE,EAAML,EAAOV,GAClC,GAAKN,KAAKpB,KAAV,CAEA,IAAIwB,EAAIiB,EAAKzC,KAAK2E,YAAYvC,EAAc,QAE5C,GAAKZ,IACDA,EAAE6E,WAAN,CACA,IAAI5a,EAAegX,EAAKxC,OAAOxU,aAC/B2W,EAAwB,iBAAIK,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGD,QAExEf,KAAKnB,OAAO6B,YAAYM,EAAiB,WAAGL,YAAY1Z,MAAK,GAC7Doa,EAAKW,0BAA0BhB,EAAc,OAAG,gBAChDZ,EAAE6E,YAAa,EAEV7E,EAAEwF,gBACLxF,EAAEwF,cAAgBxF,EAAEzL,OAGtB,IAAI6P,GAAS,EACU,WAAnBxD,EAAc,SAChBwD,EAASC,OAAOC,KAAKC,KAAK,OAAS3D,EAAc,SAGnD,IAAIrM,EAAQqL,KAAK0C,sBAAsB1B,EAAgB,UACnDmD,EAAWnE,KAAK0C,sBAAsB1B,EAAgB,UAErDhB,KAAK2C,SAAShO,GAAO,IACrBqL,KAAK2C,SAASwB,GAAU,KAS7BnE,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,wBAAyB,CACxDtS,KAAMyP,KAAKG,mBAAmBC,GAC9BzL,MAAOA,EAAM/O,MACbue,SAAUA,EAASve,SAIjBwa,EAAEwE,uBACGxE,EAAEwE,eAGXxE,EAAEyE,QAAQ,QAASzE,EAAEzL,MAAQA,EAAM/O,MAAO,CACxCue,SAAqC,IAA3BnB,SAASmB,EAASve,OAC5B4e,OAAQA,EACRO,MAAO,WAEL,OAAK1D,EAAKzC,MAAQvU,GAAgBgX,EAAKxC,OAAOxU,aAK1C+V,EAAEwE,gBAEJvD,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAYgD,MACxDvD,EAAE6E,YAAa,EAEV7E,EAAE4E,QAAW5E,EAAEkE,WAAclE,EAAE6E,YAAe7E,EAAE8E,OAAU9E,EAAE+E,OAAU/E,EAAEgF,aACpEhF,EAAEwE,gBAGJ,QAE2CvK,IAAhDgH,EAAKxC,OAAO6B,YAAYM,EAAiB,aACzCK,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGqE,cAAgBC,MAAMC,OAAOvjB,MAAMqjB,kBAAnF,IAhBEhE,EAAKiB,yBAAyBtB,EAAc,OAAG,iBACxC,EAiBX,EACAwE,SAAU,WACRnE,EAAK0C,cAAc1C,EAAML,EAAOZ,EAClC,EACAsF,WAAY,WACVrE,EAAKiB,yBAAyBtB,EAAc,OAAG,gBAC3CK,EAAKzC,MAAQvU,GAAgBgX,EAAKxC,OAAOxU,eAC3C+V,EAAE6E,YAAa,EACf5D,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAYgD,MACpC,mBAAbrD,GAA2BA,IAEtC,IA5EsB,CALF,CAmFxB,EAEAuF,UAAW,SAAUxE,EAAML,EAAOV,GAEhC,IAAMjW,EAAegX,EAAKxC,OAAOxU,aACjC2W,EAAwB,iBAAIK,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGD,QACxEM,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAY1Z,MAAK,GAE7D,IAAIkd,EAAWnE,KAAK0C,sBAAsB1B,EAAgB,UAErDhB,KAAK2C,SAASwB,GAAU,KAE7BnE,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,sBAAuB,CACtDsB,SAAUA,EAASve,SAGrByb,EAAKxC,OAAO4E,SAASxc,KACnByc,YAAW,WACTrC,EAAKxC,OAAO4E,SAASE,MACjBtZ,GAAgBgX,EAAKxC,OAAOxU,eAC9BgX,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAYgD,MACpC,mBAAbrD,GAA2BA,IAEtC,GAAgC,IAA7BwF,WAAW3B,EAASve,SAE3B,EAEAmgB,oBAAqB,SAAU1E,EAAML,EAAOV,GAC1C,IAAIxd,EAAYue,EAAKxC,OAAOoF,WAAW5C,EAAKxC,OAAOxU,cAC/CgX,EAAKxC,OAAOqF,WACdphB,EACEue,EAAKxC,OAAOoF,WAAW5C,EAAKxC,OAAOxU,cACnCgX,EAAKxC,OAAOtc,QAAQO,UAAUue,EAAKxC,OAAOxU,eAG9C,IAAI+V,EAAIiB,EAAKzC,KAAK2E,YAAYvC,EAAc,QAC5C,GAAKZ,KACDA,EAAE8E,QAAS9E,EAAE+E,OAAjB,CAEAnE,EAAwB,iBAAIK,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGD,QAExEf,KAAKnB,OAAO6B,YAAYM,EAAiB,WAAGL,YAAY1Z,MAAK,GAC7D,IAAIoD,EAAegX,EAAKxC,OAAOxU,aAC/BgX,EAAKW,0BAA0BhB,EAAc,OAAG,kBAEhD,IAAImD,EAAWnE,KAAK0C,sBAAsB1B,EAAgB,UAC1D,GAAKhB,KAAK2C,SAASwB,GAAU,GAA7B,CAEA,IAAI6B,EAAQhG,KAAK0C,sBAAsB1B,EAAc,QACrD,GAAKhB,KAAK2C,SAASqD,GAAO,GAA1B,CAEA,IAAIC,EAAQjG,KAAK0C,sBAAsB1B,EAAc,QACrD,GAAKhB,KAAK2C,SAASsD,GAAO,GAA1B,CAE2B,GAAvBrD,OAAOoD,EAAMpgB,SACfwa,EAAE8E,OAAQ,GAEe,GAAvBtC,OAAOqD,EAAMrgB,SACfwa,EAAE+E,OAAQ,GAGZ,IAAMe,EAAS,CAAC,EAChBA,EAAa,KAAItD,OAAOoD,EAAMpgB,OAAS9C,EACvCojB,EAAY,IAAItD,OAAOqD,EAAMrgB,OAAS9C,EAEtC,IAAI0hB,GAAS,EACU,WAAnBxD,EAAc,SAChBwD,EAASC,OAAOC,KAAKC,KAAK,OAAS3D,EAAc,SAGnDhB,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,2BAA4B,CAC3DtS,KAAMyP,KAAKG,mBAAmBC,GAC9B+F,OAASH,EAAMpgB,MACfwgB,OAAQH,EAAMrgB,MACdue,SAAUA,EAASve,SAGjBwa,EAAEwE,uBACGxE,EAAEwE,eAGXxE,EAAEyE,QAAQqB,EAAQ,CAChB/B,SAAqC,IAA3BnB,SAASmB,EAASve,OAC5B4e,OAAQA,EACRO,MAAO,WAGL,OAAK1D,EAAKzC,MAASwB,GAAK/V,GAAgBgX,EAAKxC,OAAOxU,aAKhD+V,EAAEwE,gBAEJvD,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAYgD,MAC7B,GAAvBf,OAAOoD,EAAMpgB,SACfwa,EAAE8E,OAAQ,GAGe,GAAvBtC,OAAOqD,EAAMrgB,SACfwa,EAAE+E,OAAQ,GAGP/E,EAAE4E,QAAW5E,EAAEkE,WAAclE,EAAE6E,YAAe7E,EAAE8E,OAAU9E,EAAE+E,OAAU/E,EAAEgF,aACpEhF,EAAEwE,gBAGJ,QAG2CvK,IAAhDgH,EAAKxC,OAAO6B,YAAYM,EAAiB,aACzCK,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGqE,cAAgBC,MAAMC,OAAOvjB,MAAMqjB,kBAAnF,IAvBEhE,EAAKiB,yBAAyBtB,EAAc,OAAG,mBACxC,EAwBX,EACAwE,SAAU,WAERnE,EAAK0C,cAAc1C,EAAML,EAAOZ,EAOlC,EACAsF,WAAY,WACVrE,EAAKiB,yBAAyBtB,EAAc,OAAG,kBAC3CK,EAAKzC,MAAQvU,GAAgBgX,EAAKxC,OAAOxU,eAEhB,GAAvBuY,OAAOoD,EAAMpgB,SACfwa,EAAE8E,OAAQ,GAGe,GAAvBtC,OAAOqD,EAAMrgB,SACfwa,EAAE+E,OAAQ,GAGZ9D,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAYgD,MAKpC,mBAAbrD,GAA2BA,IAItC,GA7FqC,CAHA,CAHI,CATb,CA8GhC,EAEA+F,oBAAqB,SAAUhF,EAAML,EAAOV,GAG1C,IAAIxd,EAAYue,EAAKxC,OAAOoF,WAAW5C,EAAKxC,OAAOxU,cAC/CgX,EAAKxC,OAAOqF,WACdphB,EACEue,EAAKxC,OAAOoF,WAAW5C,EAAKxC,OAAOxU,cACnCgX,EAAKxC,OAAOtc,QAAQO,UAAUue,EAAKxC,OAAOxU,eAE9C,IAAI+V,EAAIiB,EAAKzC,KAAK2E,YAAYvC,EAAc,QAC1C3W,EAAegX,EAAKxC,OAAOxU,aAC7B,GAAK+V,KACDA,EAAE8E,QAAS9E,EAAE+E,OAAjB,CAEAnE,EAAwB,iBAAIK,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGD,QAExEf,KAAKnB,OAAO6B,YAAYM,EAAiB,WAAGL,YAAY1Z,MAAK,GAE7Doa,EAAKW,0BAA0BhB,EAAc,OAAG,kBAGhD,IAAMkF,EAAS,CAAC,EAEZF,EAAQhG,KAAK0C,sBAAsB1B,EAAc,QACrD,GAAKhB,KAAK2C,SAASqD,GAAO,GAA1B,CACA,IAAIC,EAAQjG,KAAK0C,sBAAsB1B,EAAc,QACrD,GAAKhB,KAAK2C,SAASsD,GAAO,GAA1B,CAEA,IAAI9B,EAAWnE,KAAK0C,sBAAsB1B,EAAgB,UAC1D,GAAKhB,KAAK2C,SAASwB,GAAU,KAGzBvB,OAAOuB,EAASve,OAAS,IAC3Bue,EAASve,MAAQ,GAEQ,GAAvBgd,OAAOoD,EAAMpgB,SACfwa,EAAE8E,OAAQ,GAGe,GAAvBtC,OAAOqD,EAAMrgB,SACfwa,EAAE+E,OAAQ,GAGe,GAAvBvC,OAAOoD,EAAMpgB,SACfsgB,EAAa,KAAI9F,EAAEpQ,KAAQ4S,OAAOoD,EAAMpgB,OAAS9C,GAGxB,GAAvB8f,OAAOqD,EAAMrgB,SACfsgB,EAAY,IAAI9F,EAAEjQ,IAAOyS,OAAOqD,EAAMrgB,OAAS9C,GAG5CojB,EAAa,MAAMA,EAAY,KAApC,CAEA,IAAI1B,GAAS,EACU,WAAnBxD,EAAc,SAChBwD,EAASC,OAAOC,KAAKC,KAAK,OAAS3D,EAAc,SAGnDhB,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,wBAAyB,CACxDtS,KAAMyP,KAAKG,mBAAmBC,GAC9B+F,OAAQH,EAAMpgB,MACdwgB,OAAQH,EAAMrgB,MACdue,SAAUA,EAASve,SAGjBwa,EAAEwE,uBACGxE,EAAEwE,eAGXxE,EAAEyE,QAAQqB,EAAQ,CAChB/B,SAAqC,IAA3BnB,SAASmB,EAASve,OAC5B4e,OAAQA,EACRO,MAAO,WAEL,OAAK3E,GAAK/V,GAAgBgX,EAAKxC,OAAOxU,aAKlC+V,EAAEwE,gBAEJvD,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAYgD,MAC7B,GAAvBf,OAAOoD,EAAMpgB,SACfwa,EAAE8E,OAAQ,GAGe,GAAvBtC,OAAOqD,EAAMrgB,SACfwa,EAAE+E,OAAQ,GAGP/E,EAAE4E,QAAW5E,EAAEkE,WAAclE,EAAE6E,YAAe7E,EAAE8E,OAAU9E,EAAE+E,OAAU/E,EAAEgF,aACpEhF,EAAEwE,gBAGJ,QAG2CvK,IAAhDgH,EAAKxC,OAAO6B,YAAYM,EAAiB,aAEzCK,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGqE,cAAgBC,MAAMC,OAAOvjB,MAAMqjB,kBAAnF,IAxBEhE,EAAKiB,yBAAyBtB,EAAc,OAAG,mBACxC,EAwBX,EACAwE,SAAU,WAERnE,EAAK0C,cAAc1C,EAAML,EAAOZ,EAOlC,EACAsF,WAAY,WAEVrE,EAAKiB,yBAAyBtB,EAAc,OAAG,kBAC3CK,EAAKzC,MAAQvU,GAAgBgX,EAAKxC,OAAOxU,eAChB,GAAvBuY,OAAOoD,EAAMpgB,SACfwa,EAAE8E,OAAQ,GAGe,GAAvBtC,OAAOqD,EAAMrgB,SACfwa,EAAE+E,OAAQ,GAGZ9D,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAYgD,MAWpC,mBAAbrD,GAA2BA,IAItC,GAvF2C,CAzBN,CAFA,CAZT,CAgIhC,EAEAyD,cAAe,SAAU1C,EAAML,EAAOZ,GACpC,GAAiB,GAAbA,EAAEoD,SAEDnC,EAAKxC,OAAOyH,mBAAmBtF,EAAc,QAAlD,CAEA,IAAMuF,EAAYlF,EAAKxC,OAAOyH,mBAAmBtF,EAAc,QAAc,UAE7EK,EAAKxC,OAAOyH,mBAAmBtF,EAAc,QAAY,QAAEwF,SAAQ,SAAS5P,GAE1E,GAAsB,GAAlBA,EAAO4M,QAEX,GAAKpD,EAAEqG,qBAAqB7P,GAAQ,GAAO,EAAM2P,IAUjD,IAAK,IAAIG,KAAY9P,EAAuB,eAAEwJ,EAAEvc,IAAY,OAC1D,GAAI+S,EAAuB,eAAEwJ,EAAEvc,IAAY,OAAE8iB,eAAeD,GAAW,CAErE,GAAI9P,EAAuB,eAAEwJ,EAAEvc,IAAY,OAAE6iB,GAA+B,oBAAG,OAE/E,IAAIhkB,EAAQwE,KAAKC,MAAMD,KAAK0f,UAAUhQ,EAAuB,eAAEwJ,EAAEvc,IAAY,OAAE6iB,KAE/E,GAAIhkB,EAAMmkB,mBAAoB,SAa9B,GAVAxF,EAAKyB,aAAazB,EAAKxC,OAAOgE,GAAG,6BAA8B,CAC7DiE,MAAOzF,EAAKlB,mBAAmBC,GAC/B2G,MAAO1F,EAAKlB,mBAAmBvJ,MAE7B,GAEJyK,EAAKxC,OAAOmI,iBAAiBtkB,EAAMse,MAAU,GAAGpK,EAAO/S,IAIpC,GAFDwd,EAAKH,mBAAmBxe,EAAMse,MAAOte,EAAMukB,KAAMvkB,EAAMwkB,YAAY,GAE3D,OAE1BtQ,EAAuB,eAAEwJ,EAAEvc,IAAY,OAAE6iB,GAA+B,qBAAI,EAGjD,GAAvBhkB,EAAMse,MAAY,OACpBte,EAAMmkB,oBAAqB,EAI/B,OAtCA,IAAK,IAAIH,KAAY9P,EAAuB,eAAEwJ,EAAEvc,IAAY,OACtD+S,EAAuB,eAAEwJ,EAAEvc,IAAY,OAAE8iB,eAAeD,KAC1D9P,EAAuB,eAAEwJ,EAAEvc,IAAY,OAAE6iB,GAA+B,qBAAI,EAsCpF,GAlD4D,CAmD9D,EAoRA5C,UAAW,SAAUzC,EAAML,GACzB,GAAKhB,KAAKpB,KAAV,CAEA,IAAIwB,EAAIiB,EAAKzC,KAAK2E,YAAYvC,EAAc,QAExCle,EAAYue,EAAKxC,OAAOoF,WAAW5C,EAAKxC,OAAOxU,cACjDA,EAAegX,EAAKxC,OAAOxU,aAOzB+V,EAAEuD,MAENtC,EAAKW,0BAA0BhB,EAAc,OAAG,aAChDZ,EAAE+G,eAAiB/G,EAAE0E,OACrB1E,EAAEuD,KAAM,EACR3C,EAAgB,SAAI,yBACpBA,EAAc,OAAI,GAClBA,EAAkB,WAAIK,EAAKxC,OAAOxU,aAClC2W,EAA4B,sBAAI,EAChCK,EAAK+F,qBAAqB/F,EAAML,GAChCZ,EAAEyE,QAAQ,SAAqB,IAAXzE,EAAE0E,OAAc,CAClCX,SAAU,IACVK,OAAQC,OAAOC,KAAKC,KAAK0C,YACzBtC,MAAO,WAIL,OAAK1D,EAAKzC,MAAQvU,GAAgBgX,EAAKxC,OAAOxU,kBAMMgQ,IAAhDgH,EAAKxC,OAAO6B,YAAYM,EAAiB,aAEzCK,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGqE,cAAgBC,MAAMC,OAAOvjB,MAAMqjB,kBAAnF,IANEhE,EAAKiB,yBAAyBtB,EAAc,OAAG,cACxC,EAOX,EACAwE,SAAU,WAERpF,EAAE0E,QACAzD,EAAKxC,OAAOoF,WAAW5C,EAAKxC,OAAOxU,cAAgBvH,CACvD,EACA4iB,WAAY,SAASA,IACF,MAAbrE,EAAKzC,MACPwB,EAAEyE,QAAQ,SAAUzE,EAAE+G,eAAgB,CACpChD,SAAU,IACVK,OAAQC,OAAOC,KAAKC,KAAK2C,eACzBvC,MAAO,WACL,OAAK1D,EAAKzC,MAAQvU,GAAgBgX,EAAKxC,OAAOxU,kBAKMgQ,IAAhDgH,EAAKxC,OAAO6B,YAAYM,EAAiB,aACzCK,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGqE,cAAgBC,MAAMC,OAAOvjB,MAAMqjB,kBAAnF,IALEhE,EAAKiB,yBAAyBtB,EAAc,OAAG,cACxC,EAMX,EACAwE,SAAU,WAERpF,EAAE0E,QACAzD,EAAKxC,OAAOoF,WAAW5C,EAAKxC,OAAOxU,cAAgBvH,CACvD,EACA4iB,WAAY,WACNrE,EAAKzC,OACHwB,EAAE0E,QAAU1E,EAAE+G,eAChBzB,KAEAtF,EAAEuD,KAAM,EACRtC,EAAKiB,yBAAyBtB,EAAc,OAAG,aAC1CA,EAA0B,qBAC7BK,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAYgD,MACxDtC,EAAKT,4BAA4BI,KAMzC,GAIN,IApFoB,CAuFxB,EAEAuG,YAAa,SAAUlG,EAAML,EAAOV,GAClC,GAAKN,KAAKpB,KAAV,CAEA,IAAIwB,EAAIiB,EAAKzC,KAAK2E,YAAYvC,EAAc,QACxC3W,EAAegX,EAAKxC,OAAOxU,aAE3B+V,EAAE4E,SACNhE,EAAwB,iBAAIK,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGD,QAExEf,KAAKnB,OAAO6B,YAAYM,EAAiB,WAAGL,YAAY1Z,MAAK,GAC7Doa,EAAKW,0BAA0BhB,EAAc,OAAG,gBAEhDhB,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,wBAAyB,CACxDtS,KAAMyP,KAAKG,mBAAmBC,MAGhCA,EAAE4E,QAAS,EAEP5E,EAAEwE,uBACGxE,EAAEwE,eAGXxE,EAAEyE,QACA,MACAzE,EAAEjQ,IAAM,IAAMkR,EAAKxC,OAAOoF,WAAW5C,EAAKxC,OAAOxU,cAAe,CAC9D8Z,SAAU,IACVK,OAAQC,OAAOC,KAAKC,KAAK0C,YACzBtC,MAAO,WAEL,OAAK1D,EAAKzC,MAAQvU,GAAgBgX,EAAKxC,OAAOxU,aAK1C+V,EAAEwE,gBAEJvD,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAYgD,MACxDvD,EAAE4E,QAAS,EAEN5E,EAAE4E,QAAW5E,EAAEkE,WAAclE,EAAE6E,YAAe7E,EAAE8E,OAAU9E,EAAE+E,OAAU/E,EAAEgF,aACpEhF,EAAEwE,gBAGJ,QAG2CvK,IAAhDgH,EAAKxC,OAAO6B,YAAYM,EAAiB,aACzCK,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGqE,cAAgBC,MAAMC,OAAOvjB,MAAMqjB,kBAAnF,IAjBEhE,EAAKiB,yBAAyBtB,EAAc,OAAG,iBACxC,EAiBX,EACAwE,SAAU,WAERnE,EAAK0C,cAAc1C,EAAML,EAAOZ,EAOlC,EACAsF,WAAY,WACO,MAAbrE,EAAKzC,MACPwB,EAAEyE,QACA,MAMAzE,EAAEjQ,IAAM,IAAMkR,EAAKxC,OAAOoF,WAAW5C,EAAKxC,OAAOxU,cAAe,CAC9D8Z,SAAU,IACVK,OAAQC,OAAOC,KAAKC,KAAK6C,cACzBzC,MAAO,WAEL,OAAK1D,EAAKzC,MAAQvU,GAAgBgX,EAAKxC,OAAOxU,aAK1C+V,EAAEwE,gBAEJvD,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAYgD,MACxDvD,EAAE4E,QAAS,EAEN5E,EAAE4E,QAAW5E,EAAEkE,WAAclE,EAAE6E,YAAe7E,EAAE8E,OAAU9E,EAAE+E,OAAU/E,EAAEgF,aACpEhF,EAAEwE,gBAGJ,QAG2CvK,IAAhDgH,EAAKxC,OAAO6B,YAAYM,EAAiB,aACzCK,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGqE,cAAgBC,MAAMC,OAAOvjB,MAAMqjB,kBAAnF,IAjBEhE,EAAKiB,yBAAyBtB,EAAc,OAAG,iBACxC,EAkBX,EACAwE,SAAU,WACRnE,EAAK0C,cAAc1C,EAAML,EAAOZ,EAKlC,EACAsF,WAAY,WACVrE,EAAKiB,yBAAyBtB,EAAc,OAAG,gBAC3CK,EAAKzC,MAAQvU,GAAgBgX,EAAKxC,OAAOxU,eAC3C+V,EAAE4E,QAAS,EACX3D,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAYgD,MAMpC,mBAAbrD,GAA2BA,IAEtC,GAIR,IApHkB,CAwHxB,EAEAmH,UAAW,SAAUpG,EAAML,EAAOV,GAGhC,GAAKN,KAAKpB,KAAV,CAEA,IAAI8I,EAAQ,EACVtH,EAAIiB,EAAKzC,KAAK2E,YAAYvC,EAAc,QAEtCle,EAAYue,EAAKxC,OAAOoF,WAAW5C,EAAKxC,OAAOxU,cACjDA,EAAegX,EAAKxC,OAAOxU,aAE7B,GAAK+V,IACDA,EAAEgF,KAAN,CAEe,YAAXhF,EAAEpP,OACJoP,EAAEuH,YAAa,EACfvH,EAAEwH,eAAgB,GAQpB5G,EAAwB,iBAAIK,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGD,QAExE,IAAI7J,EAAS,EACU,WAAnB8J,EAAc,SAChB9J,EAAyC,IAAhCkJ,EAAEyH,oBAAoBtT,SAI7B6L,EAAEoD,SAAqB,GAAVtM,IACfkJ,EAAEoD,SAAU,EACZpD,EAAE7L,QAAU,GAGT6L,EAAEoD,SAAqB,GAAVtM,IAChBkJ,EAAEoD,SAAU,EACZpD,EAAE7L,QAAU6L,EAAEyH,oBAAoBtT,SAgBF8F,MAA9B2G,EAAM8G,uBACRzG,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAY1Z,MAAK,GAC7Doa,EAAKW,0BAA0BhB,EAAc,OAAG,cAElC,KAAV9J,EACF8I,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,wBAAyB,CACxDtS,KAAMyP,KAAKG,mBAAmBC,MAGhCJ,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,yBAA0B,CACzDtS,KAAMyP,KAAKG,mBAAmBC,OAKT,kBAAvBY,EAAiB,WACnBA,EAAiB,UAAI,OAChBZ,EAAEoD,UACLpD,EAAEpQ,MAAQ,GAAKlN,GAGjB4kB,GAAS,IACuB,kBAAvB1G,EAAiB,WAC1BA,EAAiB,UAAI,OAChBZ,EAAEoD,UACLpD,EAAEpQ,MAAQ,GAAKlN,GAEjB4kB,EAAQ,IACwB,kBAAvB1G,EAAiB,WAC1BA,EAAiB,UAAI,MAChBZ,EAAEoD,UACLpD,EAAEjQ,KAAO,GAAKrN,GAEhB4kB,EAAQ,IACwB,kBAAvB1G,EAAiB,YAC1BA,EAAiB,UAAI,MAChBZ,EAAEoD,UACLpD,EAAEjQ,KAAO,GAAKrN,GAEhB4kB,GAAS,IAGXtH,EAAE2H,YACF3H,EAAEgF,MAAO,EACT/D,EAAKxC,OAAO4E,SAASxc,KACnByc,YAAW,WACTrC,EAAKxC,OAAO4E,SAASE,MAErB,IAAIqE,EAAgB,CAClBzT,QAAS2C,EAAS,KAGM,QAAtB8J,EAAiB,YACnBgH,EAAchH,EAAiB,WAAKgC,SAAS5C,EAAEY,EAAiB,YAAM0G,EAAQrG,EAAKxC,OAAOoF,WAAW5C,EAAKxC,OAAOxU,eAG/G+V,EAAEwE,uBACGxE,EAAEwE,eAGXxE,EAAEoD,SAAU,EACZpD,EAAEyE,QAAQmD,EAAe,CACvB7D,SAAU,IACVK,OAAQC,OAAOC,KAAKC,KAAKsD,aACzBlD,MAAO,WAEL,OAAK1D,EAAKzC,MAAQvU,GAAgBgX,EAAKxC,OAAOxU,aAS1C+V,EAAEwE,gBAEJvD,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAYgD,MACxDvD,EAAEgF,MAAO,EAEJhF,EAAE4E,QAAW5E,EAAEkE,WAAclE,EAAE6E,YAAe7E,EAAE8E,OAAU9E,EAAE+E,OAAU/E,EAAEgF,aACpEhF,EAAEwE,eAGI,YAAXxE,EAAEpP,OACJoP,EAAEuH,YAAa,EACfvH,EAAEwH,eAAgB,IAGb,QAG2CvN,IAAhDgH,EAAKxC,OAAO6B,YAAYM,EAAiB,aAEzCK,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGqE,cAAgBC,MAAMC,OAAOvjB,MAAMqjB,kBAAnF,IA3BEhE,EAAKiB,yBAAyBtB,EAAc,OAAG,cAChC,YAAXZ,EAAEpP,OACJoP,EAAEuH,YAAa,EACfvH,EAAEwH,eAAgB,IAEb,EAyBX,EACApC,SAAU,WACRnE,EAAK0C,cAAc1C,EAAML,EAAOZ,EAClC,EACAsF,WAAY,WAEVrE,EAAKiB,yBAAyBtB,EAAc,OAAG,cAC3CK,EAAKzC,MAAQvU,GAAgBgX,EAAKxC,OAAOxU,eAC5B,IAAX6M,IACFkJ,EAAEoD,SAAU,GAEdpD,EAAEgF,MAAO,EACM,YAAXhF,EAAEpP,OACJoP,EAAEuH,YAAa,EACfvH,EAAEwH,eAAgB,GAGcvN,MAA9B2G,EAAM8G,sBACRzG,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAYgD,MAEtC,mBAAbrD,GAA2BA,IAEtC,GAEJ,GAAG,KApKa,CATI,CA+KxB,EAEA4H,gBAAiB,SAAU7G,EAAML,EAAOV,GACtC,GAAKN,KAAKpB,KAAV,CAEA,IAAIwB,EAAIiB,EAAKzC,KAAK2E,YAAYvC,EAAc,QAE5C,GAAKZ,IACDA,EAAE+H,YAAN,CAKA,IADA,IAAIC,EAAa,EACRthB,EAAI,EAAGA,EAAIsZ,EAAEiI,oBAAoBrhB,OAAQF,IAChD,IAAK,IAAIwhB,EAAI,EAAGA,EAAIlI,EAAEiI,oBAAoBvhB,GAAGE,OAAQshB,IACnDF,GAAc,EAIlBpH,EAAwB,iBAAIK,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGD,QACxEM,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAY1Z,MAAK,GAC7Doa,EAAKW,0BAA0BhB,EAAc,OAAG,cAEhDZ,EAAEmI,kBAAkBnI,EAAEoI,OAAOC,WAAW,MAAO,YAG/CrI,EAAE+H,aAAc,EAEhB/H,EAAEsI,eAAiBxhB,KAAKC,MAAMD,KAAK0f,UAAUxG,EAAEuI,SAE/C,IAAIC,EAAI,CACNtU,KAAM,IAAImQ,OAAOoE,MAAMzI,EAAE9L,MAAMwU,SAAS,GAAGC,UAS7C3I,EAAE4I,mBAAmBJ,EAAG,EAAGxI,EAAElM,KAAKlN,QAElC,IAAIqD,EAAegX,EAAKxC,OAAOxU,aAE/B,IAAK+V,EAAEgF,KAAM,CACX,IAAI6D,EAAe/hB,KAAKC,MAAMD,KAAK0f,UAAU5F,IAC7CiI,EAAa/R,OAAS,UACtB+R,EAAaC,UAAY,OACzBD,EAAanB,sBAAuB,EACpCzG,EAAKoG,UAAUzH,KAAMiJ,EACvB,CAEA,IAAIE,EAAQ,GACU,QAAlBnI,EAAa,MACfmI,EAAQ,GACmB,UAAlBnI,EAAa,MACtBmI,EAAQ,IACmB,QAAlBnI,EAAa,QACtBmI,EAAQ,KAGa,cAAnBnI,EAAc,OAChBhB,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,gCAAiC,CAChEtS,KAAMyP,KAAKG,mBAAmBC,MAGhCJ,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,gCAAiC,CAChEtS,KAAMyP,KAAKG,mBAAmBC,MAIlCiB,EAAKxC,OAAO4E,SAASxc,KACnByc,YAAW,WAST,GAPArC,EAAKxC,OAAO4E,SAASE,MAGN,YAAXvD,EAAEpP,OACJoP,EAAEwH,eAAgB,GAIC,cAAnB5G,EAAc,QACK,SAAnBA,EAAc,OAFhB,CAmCA,IAAI4H,EAAI,CACNQ,WAAY,GACZD,MAAOA,EACP9e,aAAcA,EACd+d,WAAYA,EACZpH,MAAOA,GAIc,OAAnBA,EAAc,QAEY,OAAnBA,EAAc,QAEK,QAAnBA,EAAc,SAEK,QAAnBA,EAAc,OAEvB4H,EAAc,WAAI,IACU,UAAnB5H,EAAc,OAIvBZ,EAAEiJ,iBAAkB,EACQ,cAAnBrI,EAAc,OACvBZ,EAAEkJ,eAAgB,EACU,SAAnBtI,EAAc,QAEK,SAAnBA,EAAc,QAEK,YAAnBA,EAAc,SAEK,WAAnBA,EAAc,QACvBZ,EAAEmJ,kBAAmB,EACrBX,EAAc,WAAI,KACU,aAAnB5H,EAAc,OACvBZ,EAAEoJ,oBAAqB,EACK,QAAnBxI,EAAc,SACvBZ,EAAEqJ,eAAgB,EAClBb,EAAc,WAAI,GAClBA,EAAc,WAAIA,EAAc,WAAI,KAGtCvH,EAAKqI,eAAetJ,GAAI,EAAG,GAAI,EAAGwI,GAChC,WAEEvH,EAAKiB,yBAAyBtB,EAAc,OAAG,cAC3CK,EAAKzC,MAAQvU,GAAgBgX,EAAKxC,OAAOxU,cAAgB+V,EAAEsI,wBACtDtI,EAAE+H,mBACF/H,EAAEuJ,mBACFvJ,EAAEmJ,wBACFnJ,EAAEoJ,0BACFpJ,EAAEiJ,uBACFjJ,EAAEkJ,qBACFlJ,EAAEqJ,cACM,YAAXrJ,EAAEpP,OAAoBoP,EAAEwH,eAAgB,GAE5CxH,EAAEuI,OAASzhB,KAAKC,MAAMD,KAAK0f,UAAUxG,EAAEsI,wBAChCtI,EAAEsI,eACTrH,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAYgD,MAEpC,mBAAbrD,GAA2BA,IAEtC,GAhEF,KAjCA,CAKEF,EAAEuJ,aAAc,EAEhB,IAAIf,EAAI,CACNO,MAAOA,EACP9e,aAAcA,EACd2W,MAAOA,EACPoH,WAAYA,GAGd/G,EAAKuI,eAAexJ,EAAG,EAAG,EAAG,EAAGA,EAAEyH,oBAAoBtT,QAASqU,GAC7D,WACEvH,EAAKiB,yBAAyBtB,EAAc,OAAG,cAC3C3W,GAAgBgX,EAAKxC,OAAOxU,eAC9B+V,EAAE+H,aAAc,EAChB/H,EAAEuJ,aAAc,EACD,YAAXvJ,EAAEpP,OAAoBoP,EAAEwH,eAAgB,GAE5CxH,EAAEuI,OAASzhB,KAAKC,MAAMD,KAAK0f,UAAUxG,EAAEsI,wBAEhCtI,EAAEsI,eACTrH,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAYgD,MAEpC,mBAAbrD,GAA2BA,IAEtC,GAIJ,CAmEF,GAAG,KA7KoB,CALH,CAoLxB,EAEAsJ,eAAgB,SAAUxJ,EAAGyJ,EAAWC,EAAW7gB,EAAOsL,EAASsM,EAASP,GAAU,IAAAyJ,EAAA,KAEpF,GAAI/J,KAAKnB,OAAOxU,cAAgBwW,EAAQxW,aAAxC,CAEsB,MAAlB+V,EAAE4J,MAAM/gB,KAEVA,IACA6gB,KAGF,IAAMG,EAAO,CACX,2BACA,2BACA,2BACA,2BACA,2BACA,2BACA,2BACA,4BAGFjK,KAAKnB,OAAO4E,SAASxc,KACnByc,YAAW,WAIT,GAFAqG,EAAKlL,OAAO4E,SAASE,MAEmBtJ,MAApC+F,EAAEiI,oBAAoBwB,GAe1B,GANmDxP,MAA/C+F,EAAEiI,oBAAoBwB,GAAWC,KACnCA,EAAY,EAEZD,KAGsCxP,MAApC+F,EAAEiI,oBAAoBwB,GAA1B,CAO4B,cAAxBhJ,EAAQG,MAAM9J,QAChB6S,EAAK3C,qBACH2C,EAAM,CACJ9T,IAAKgU,EAAKC,KAAKC,MAAMD,KAAKE,SAAWH,EAAKjjB,SAC1CqjB,OAAQ,GACRhgB,aAAcwW,EAAQxW,aACtBoW,UAAWI,EAAQG,MAAiB,UACpC8G,sBAAsB,IAK5B,IAAIjW,MAAQ,CAAC,EACbA,MAAY,KAAI,IAAI4S,OAAOoE,MAAMzI,EAAEsI,eAAemB,GAAWC,GAAWxV,MAAMyU,SAElD,SAAxBlI,EAAQG,MAAM9J,SAChBrF,MAAc,OAAIkY,EAAKO,gBAAgB,KACvCzY,MAAc,OAAIkY,EAAKO,gBAAgB,MAGzClK,EAAE4I,mBACAnX,MACA5I,EACAA,EAAQ,GAIkB,SAAxB4X,EAAQG,MAAM9J,QAChB6S,EAAKlL,OAAO4E,SAASxc,KACnByc,YAAW,WAELqG,EAAKlL,OAAOxU,cAAgBwW,EAAQxW,eAExC0f,EAAKlL,OAAO4E,SAASE,MACrBvD,EAAE4I,mBAAmB,CACjBuB,OAAQ,EACRC,OAAQ,GAEVvhB,EACAA,EAAQ,GAGNA,EAAQ4X,EAAQuH,WAAa,GAEb,mBAAb9H,GAA2BA,IAEpC,GAAmB,GAAhBO,EAAQsI,QAIXlgB,EAAQmX,EAAElM,KAAKlN,OAAS,EAG1B+iB,EAAKH,eAAexJ,EAAGyJ,EAAWC,EAAY,EAAG7gB,EAAQ,EAAGsL,EAASsM,GAAS,WACxD,mBAAbP,GAA2BA,GACpC,IACiC,cAAxBO,EAAQG,MAAM9J,QACH,mBAAboJ,GAA2BA,GA3DpC,KAJ8B,cAAxBO,EAAQG,MAAM9J,QACI,mBAAboJ,GAA2BA,QAhBR,cAAxBO,EAAQG,MAAM9J,QACI,mBAAboJ,GAA2BA,GA+ExC,GAAGO,EAAQsI,OAzG+C,CA2G9D,EAEAO,eAAgB,SAAUtJ,EAAGnX,EAAO4gB,EAAWC,EAAWjJ,EAASP,GAAU,IAAAmK,EAAA,KAE3E,GAAIzK,KAAKnB,OAAOxU,cAAgBwW,EAAQxW,cAEAgQ,MAApC+F,EAAEiI,oBAAoBwB,KAI1B5gB,IACA6gB,IAEsB,MAAlB1J,EAAE4J,MAAM/gB,KAEVA,IACA6gB,KAGiDzP,MAA/C+F,EAAEiI,oBAAoBwB,GAAWC,KACnCA,EAAY,EACZD,KAGsCxP,MAApC+F,EAAEiI,oBAAoBwB,IAA1B,CAIA,IAAMa,EAASzhB,EACT0hB,EAAad,EACbe,EAAad,EAEnB1J,EAAEqB,aAAc,EAChBzB,KAAKnB,OAAO4E,SAASxc,KACnByc,YAAW,WAET+G,EAAK5L,OAAO4E,SAASE,MACjBvD,EAAEwH,eAA4B,YAAXxH,EAAEpP,OAAoBoP,EAAEwH,eAAgB,GAE3D3e,EAAQmX,EAAElM,KAAKlN,QAEjByjB,EAAKf,eAAetJ,EAAGsK,EAAQC,EAAYC,EAAa/J,GAAS,WAC3C,mBAAbP,GAA2BA,GACpC,GAEJ,GAAGO,EAAQsI,QAMbnJ,KAAK6K,eAAezK,EAAGsK,EAAQC,EAAYC,EAAY,EAAG/J,GAAS,WACjET,EAAEqB,aAAc,EACI,mBAAbnB,GAA2BA,GACpC,GA5BA,CA6BF,EAEAwK,gBAAiB,SAAU1K,EAAGnX,EAAO4gB,EAAWC,EAAWiB,EAAMlK,EAASP,GAAU,IAAA0K,EAAA,KAElF,GAAIhL,KAAKnB,OAAOxU,cAAgBwW,EAAQxW,aAAxC,CAGA,GAAI+V,EAAEsI,gBAAkBtI,EAAEsI,eAAemB,IAAczJ,EAAEsI,eAAemB,GAAWC,GAAY,CAE7F,IAAIjY,MAAQ,CAAC,EAMb,GAJIkZ,EAAO,KACTlZ,MAAY,KAAI,IAAI4S,OAAOoE,MAAMzI,EAAEsI,eAAemB,GAAWC,GAAWxV,MAAMwU,SAASiC,EAAO,IAAIhC,UAGrE,OAA3BlI,EAAQG,MAAc,OACxBnP,MAAgB,SAAIuO,EAAEsI,eAAemB,GAAWC,GAAWzV,SAAW2L,KAAKsH,eAAeyD,EAAOlK,EAAQuI,iBACpG,GAA+B,OAA3BvI,EAAQG,MAAc,OAE/BnP,MAAc,OAAI,EAAIgP,EAAQuI,WAAa2B,OACtC,GAA+B,QAA3BlK,EAAQG,MAAc,OAE/BnP,MAAc,OAAIgP,EAAQuI,WAAa2B,EAAO,OACzC,GAA+B,QAA3BlK,EAAQG,MAAc,OAE/BnP,MAAgB,SAAIuO,EAAEsI,eAAemB,GAAWC,GAAWzV,SAAW2L,KAAKsH,eAAeyD,EAAOlK,EAAQuI,iBAUpG,GAA+B,cAA3BvI,EAAQG,MAAc,OAC/BnP,MAAa,MAAI,IAAMmO,KAAKsH,eAAeyD,EAAOlK,EAAQuI,iBACrD,GAA+B,aAA3BvI,EAAQG,MAAc,OAE/BnP,MAAa,MAAI,IAAMmO,KAAKsH,eAAeyD,EAAOlK,EAAQuI,iBACrD,GAA+B,SAA3BvI,EAAQG,MAAc,aAE1B,GAA+B,SAA3BH,EAAQG,MAAc,aAE1B,GAA+B,YAA3BH,EAAQG,MAAc,OAC/BnP,MAAc,QAAK,IAAMmO,KAAKiL,cAAcpK,EAAQuI,WAAa2B,GAAQlK,EAAQuI,iBAC5E,GAA+B,WAA3BvI,EAAQG,MAAc,OAAgB,CAE/C,IAAMkK,EAAI9K,EAAEsI,eAAemB,GAAWC,GAAWzV,SAAW,EAE5DxC,MAAgB,SAAIqZ,EAAIA,EAAIlL,KAAKmL,YAAYJ,EAAOlK,EAAQuI,WAC9D,MAAO,GAA+B,QAA3BvI,EAAQG,MAAc,OAC/B,GAAIH,EAAQuK,YAAcL,EAAM,CAE9BlZ,MAAc,QAAagP,EAAQuK,WAAaL,GAAQlK,EAAQuK,YAA7C,IACnB,IAAIC,EAAIN,EAAOlK,EAAQuK,WAAa,GAChCC,EAAI,IACNA,EAAI,EAER,MAAO,GAAIxK,EAAQuK,WAAaL,GAAQ,EAAIlK,EAAQuK,YAAcL,EAEhElZ,MAAc,QAAYkZ,EAAOlK,EAAQuK,YAAcvK,EAAQuK,WAA7C,QAEb,CACL,IAAMF,EAAI,EAAIrK,EAAQuK,WACtBvZ,MAAc,QAAagP,EAAQuK,YAAcL,EAAOG,IAAMrK,EAAQuK,YAAnD,GAErB,CAIFhL,EAAE4I,mBAAmBnX,MAAO5I,EAAOA,EAAQ,EAC7C,CACA+W,KAAKnB,OAAO4E,SAASxc,KACnByc,YAAW,WACTsH,EAAKnM,OAAO4E,SAASE,MAEjB9C,EAAQuI,WAAa2B,GACvBA,GAAQ,EACRC,EAAKH,eAAezK,EAAGnX,EAAO4gB,EAAWC,EAAWiB,EAAMlK,GAAS,WAC7C,mBAAbP,GAA2BA,GACpC,KACSrX,GAAS4X,EAAQuH,WAAa,GACnB,mBAAb9H,GAA2BA,GAEtC,GAAG,IAhFG,CAkFV,EACA,kBAAIuK,GACF,OAAO7K,KAAK8K,eACd,EACA,kBAAID,CAAgBjlB,GAClBoa,KAAK8K,gBAAkBllB,CACzB,EAEA0kB,gBAAiB,SAASgB,GACxB,IACIC,EAAO,EAKX,OANkBrB,KAAKE,SAEP,KACdmB,GAAQ,GAGHA,EAAOrB,KAAKC,MAAMD,KAAKE,SAAWkB,EAE3C,EAEAjE,YAAa,SAASmE,GACpB,OAAa,IAANA,EAAU,EAAI,EAAItB,KAAKuB,IAAI,GAAI,GAAKD,EAC7C,EAEAE,WAAY,SAASF,GACnB,OAAa,IAANA,EAAU,EAAItB,KAAKuB,IAAI,EAAG,GAAKD,EAAI,GAC5C,EAEAL,YAAa,SAAUK,GACrB,IAAMG,EAAK,QAGX,OAAO,EAFIA,QAEKzB,KAAKuB,IAAID,EAAI,EAAG,GAAKG,EAAKzB,KAAKuB,IAAID,EAAI,EAAG,EAC5D,EAEAI,YAAa,SAAUJ,GAGrB,OAAOA,EAAIA,EAAIA,EAAIA,EAAIA,CACzB,EAEAK,aAAc,SAAUL,GACtB,OAAO,EAAItB,KAAKuB,IAAI,EAAID,EAAG,EAC7B,EAEAhE,cAAe,SAASgE,GACtB,IAAMM,EAAK,OACLC,EAAK,KAEX,OAAIP,EAAI,EAAIO,EACDD,EAAKN,EAAIA,EACTA,EAAI,EAAIO,EACRD,GAAMN,GAAK,IAAMO,GAAMP,EAAI,IAC3BA,EAAI,IAAMO,EACVD,GAAMN,GAAK,KAAOO,GAAMP,EAAI,MAE5BM,GAAMN,GAAK,MAAQO,GAAMP,EAAI,OAE1C,EAEAP,aAAc,SAASO,GACrB,OAAO,EAAIxL,KAAKwH,cAAc,EAAIgE,EACpC,EAEAQ,cAAe,SAASR,GACtB,IAAMS,EAAM,EAAI/B,KAAKgC,GAAM,EAE3B,OAAa,IAANV,EACH,EACM,IAANA,EACA,GACCtB,KAAKuB,IAAI,EAAG,GAAKD,EAAI,IAAMtB,KAAKiC,KAAS,GAAJX,EAAS,OAASS,EAC9D,EAGA3E,eAAgB,SAAUkE,GACxB,IAAMS,EAAM,EAAI/B,KAAKgC,GAAM,EAE3B,OAAa,IAANV,EACH,EACM,IAANA,EACA,EACAtB,KAAKuB,IAAI,GAAI,GAAKD,GAAKtB,KAAKiC,KAAS,GAAJX,EAAS,KAAQS,GAAM,CAC9D,EAEAG,iBAAkB,SAASZ,GACzB,IAAMa,EAAM,EAAInC,KAAKgC,GAAM,IAE3B,OAAa,IAANV,EACH,EACM,IAANA,EACA,EACAA,EAAI,IACFtB,KAAKuB,IAAI,EAAG,GAAKD,EAAI,IAAMtB,KAAKiC,KAAK,GAAKX,EAAI,QAAUa,GAAO,EAChEnC,KAAKuB,IAAI,GAAI,GAAKD,EAAI,IAAMtB,KAAKiC,KAAK,GAAKX,EAAI,QAAUa,GAAO,EAAI,CAC3E,EAEAC,UAAW,SAAUC,EAAKhY,GAMxB,OALAgY,EAAMA,EAAIC,QAAQ,IAAK,IAIZ,QAHDxJ,SAASuJ,EAAIE,UAAU,EAAG,GAAI,IAGf,IAFnBzJ,SAASuJ,EAAIE,UAAU,EAAG,GAAI,IAED,IAD7BzJ,SAASuJ,EAAIE,UAAU,EAAG,GAAI,IACS,IAAMlY,EAAU,GAE/D,EAEAmY,WAAY,SAAUrL,EAAML,EAAOV,GACjC,GAAKN,KAAKpB,KAAV,CAEA,IAAIwB,EAAIiB,EAAKzC,KAAK2E,YAAYvC,EAAc,QAC1C3W,EAAegX,EAAKxC,OAAOxU,aAEzB+V,EAAEuM,QACNvM,EAAEuM,OAAQ,EAEV3L,EAAwB,iBAAIK,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGD,QACxEM,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAY1Z,MAAK,GAC7Doa,EAAKW,0BAA0BhB,EAAc,OAAG,eAEhDhB,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,uBAAwB,CACvDtS,KAAMyP,KAAKG,mBAAmBC,MAGhCA,EAAEyE,QAAQ,UAAW,EAAG,CACtBV,SAAU,IACVK,OAAQC,OAAOC,KAAKC,KAAK+G,WACzB3G,MAAO,WACL,OAAK1D,EAAKzC,MAAQvU,GAAgBgX,EAAKxC,OAAOxU,kBAIMgQ,IAAhDgH,EAAKxC,OAAO6B,YAAYM,EAAiB,aACzCK,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGqE,cAAgBC,MAAMC,OAAOvjB,MAAMqjB,kBAAnF,IAJEhE,EAAKiB,yBAAyBtB,EAAc,OAAG,gBACxC,EAKX,EACA0E,WAAY,WACNrE,EAAKzC,MAAQvU,GAAgBgX,EAAKxC,OAAOxU,aAC3C+V,EAAEyE,QAAQ,UAAWzE,EAAEyH,oBAAoBtT,QAAS,CAClD4P,SAAU,IACVK,OAAQC,OAAOC,KAAKC,KAAK+G,WACzB3G,MAAO,WAEL,OAAK1D,EAAKzC,MAAQvU,GAAgBgX,EAAKxC,OAAOxU,kBAKMgQ,IAAhDgH,EAAKxC,OAAO6B,YAAYM,EAAiB,aACzCK,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGqE,cAAgBC,MAAMC,OAAOvjB,MAAMqjB,kBAAnF,IALEhE,EAAKiB,yBAAyBtB,EAAc,OAAG,gBACxC,EAMX,EACA0E,WAAY,WACVrE,EAAKiB,yBAAyBtB,EAAc,OAAG,eAC3CK,EAAKzC,MAAQvU,GAAgBgX,EAAKxC,OAAOxU,cAC3C+V,EAAEuM,OAAQ,EAEVtL,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAYgD,MAEpC,mBAAbrD,GAA2BA,KAElCe,EAAKiB,yBAAyBtB,EAAc,OAAG,cAEnD,IAGFK,EAAKiB,yBAAyBtB,EAAc,OAAG,cAEnD,IA5DoB,CA8DxB,EAEA4L,kBAAmB,SAAUvL,EAAML,EAAOV,GACxC,GAAKN,KAAKpB,MAEW,QAAjBoC,EAAY,KAAhB,CAEA,IAAIZ,EAAIiB,EAAKzC,KAAK2E,YAAYvC,EAAc,QAC1C3W,EAAegX,EAAKxC,OAAOxU,aAExB+V,IACLA,EAAEyM,SAAU,EAEZ7L,EAAwB,iBAAIK,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGD,QAExEM,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAY1Z,MAAK,GAEzDmZ,EAAEpe,MAAM8qB,OAAO,IAGjBzL,EAAKW,0BAA0BhB,EAAc,OAAG,sBAElDZ,EAAEpe,MAAM+qB,aAAa,EAAG/L,EAAY,KAAGZ,EAAEyM,SACzCzM,EAAEpe,MAAM8qB,OAAO,GAAGvc,KAAOyQ,EAAY,KAErChB,KAAK8C,aAAa9C,KAAKnB,OAAOmO,IAAI,8BAChChK,SAAShC,EAAgB,UACzB,CACEzQ,KAAMyP,KAAKG,mBAAmBC,GAC9BtK,UAAWkL,EAAY,KACvBmD,SAAUnD,EAAgB,YAK9BK,EAAKxC,OAAO4E,SAASxc,KACnByc,YAAW,WACTrC,EAAKxC,OAAO4E,SAASE,MACjBtZ,GAAgBgX,EAAKxC,OAAOxU,cAC3B+V,EAAEpe,MAAM8qB,OAAO,IAEe,GAA/B9J,SAAShC,EAAgB,YAE7BK,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAYgD,MAgBxDvD,EAAEpe,MAAMirB,WAAW,GAEnB5L,EAAKiB,yBAAyBtB,EAAc,OAAG,sBAE3B,mBAAbV,GAA2BA,IAEpC,GAAG0C,SAA6B,IAApBhC,EAAgB,YA5DK,CA8DrC,EAEAkM,UAAW,SAAU7L,EAAML,EAAOV,GAAU,IAAA6M,EAAA,KAE1C,GAAsB,QAAlBnM,EAAa,OAKjB,GAAmD3G,MAA/C2F,KAAKnB,OAAO6B,YAAYM,EAAiB,WAA7C,CAG6B,UAAzBoM,yEAAOpM,EAAa,OAClBA,EAAa,MAAEqM,gBACjBrM,EAAa,MAAI,GAEjBA,EAAa,MAAIA,EAAa,MAAE9M,KAEA,iBAAlB8M,EAAa,QAC7BA,EAAa,MAAIhB,KAAKsN,qBAAqBtM,EAAa,QAG1DA,EAAwB,iBAAIhB,KAAKnB,OAAO6B,YAAYM,EAAiB,WAAGD,QACxEf,KAAKnB,OAAO6B,YAAYM,EAAiB,WAAGL,YAAY1Z,MAAK,GAGpC,mCAArB+Z,EAAgB,UAA+D,qCAArBA,EAAgB,UAAkE,sCAArBA,EAAgB,UAIzIhB,KAAKnB,OAAO0O,KAAKvN,KAAKnB,OAAOhc,iBAAkBme,EAAa,MAC1D,CACEpb,MAAOoa,KAAKnB,OAAOhc,iBAAiBme,EAAa,OAAU,MAC3DhQ,KAAMgP,KAAKnB,OAAOhc,iBAAiBme,EAAa,OAAS,OAI7DhB,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,2BAA4B,CAC3D2K,SAAUxM,EAAa,MACvBpb,MAAOoa,KAAKnB,OAAOhc,iBAAiBme,EAAa,OAAU,WAI7DhB,KAAKnB,OAAO0O,KAAKvN,KAAKnB,OAAOhc,iBAAkBme,EAAa,MAC1D,CACEpb,MAAOob,EAAa,MACpBhQ,KAAMgP,KAAKnB,OAAOhc,iBAAiBme,EAAa,OAAS,OAI7DhB,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,2BAA4B,CAC3D2K,SAAUxM,EAAa,MACvBpb,MAAOob,EAAa,UAKxBhB,KAAKyN,wBAAuB,EAAMzM,GAElC,IAAK,IAAIla,EAAI,EAAGC,EAAIiZ,KAAKnB,OAAO6O,gBAAgB1mB,OAAQF,EAAIC,EAAGD,IAAK,CAGlE,IADA,IAAImgB,EAAOjH,KAAKmB,oBAAoBnB,KAAKnB,OAAO6O,gBAAgB5mB,GAAa,UACpEoZ,EAAI,EAAGA,EAAI+G,EAAKjgB,OAAQkZ,IAC/B,GAAiC,sBAA7B+G,EAAK/G,GAAW,OAAQ,KAA5B,CACAF,KAAKnB,OAAO6O,gBAAgB5mB,GAAG6mB,UAAY3N,KAAK4N,sBAAsB3G,EAAK/G,GAAW,OAAQ,MAC9F,KAF+D,CAMjE,IAAI2N,EAAa7N,KAAKpB,KAAK2E,YAAYvD,KAAKnB,OAAO6O,gBAAgB5mB,GAAGgnB,QAClED,GACF7N,KAAK+N,WACH/N,KACA6N,EACA7N,KAAKnB,OAAO6O,gBAAgB5mB,GAAG6mB,UAC/B3M,EAAU,GACVA,EAAY,KAGlB,CAEAhB,KAAKnB,OAAOmP,UACVhN,EAAgB,SAChBhB,KAAKnB,OAAOhc,iBAAiBme,EAAgB,UAC7C,iBAAmBhB,KAAKnB,OAAOtc,QAAQS,MAGzCgd,KAAKnB,OAAO4E,SAASxc,KAAKyc,YAAW,WACnCrC,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAYgD,MACxDwJ,EAAKtO,OAAO4E,SAASE,MACD,mBAAbrD,GAA2BA,GACpC,GAAG,KAlFiE,OAJlEA,GAuFJ,EAEA2N,gCAAiC,SAAU5M,EAAML,EAAOV,GAAU,IAAA4N,EAAA,KAEhE,GAAsB,QAAlBlN,EAAa,OAKjB,GAAmD3G,MAA/C2F,KAAKnB,OAAO6B,YAAYM,EAAiB,WAA7C,CAEA,IAAImN,EAAQnO,KAAK0C,sBAAsB1B,EAAa,OACpD,GAAKhB,KAAK2C,SAASwL,GAAO,GAA1B,CAEA,IAAIC,EAAQpO,KAAK0C,sBAAsB1B,EAAa,OAC/ChB,KAAK2C,SAASyL,GAAO,KAE1BD,EAAMvoB,MAAQskB,KAAKC,MAAMnH,SAASmL,EAAMvoB,QACxCwoB,EAAMxoB,MAAQskB,KAAKmE,KAAKrL,SAASoL,EAAMxoB,QAMvCoa,KAAKnB,OAAO0O,KAAKvN,KAAKnB,OAAOhc,iBAAkBme,EAAa,MAC1D,CACEpb,MAAOskB,KAAKC,MAAMD,KAAKE,UAAY+D,EAAMvoB,MAAQ,EAAIwoB,EAAMxoB,QAAUwoB,EAAMxoB,MAC3EoL,KAAMgP,KAAKnB,OAAOhc,iBAAiBme,EAAa,OAAS,OAI7DhB,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,gCAAiC,CAChE2K,SAAUxM,EAAa,MACvBpb,MAAOoa,KAAKnB,OAAOhc,iBAAiBme,EAAa,OAAU,SAG7DA,EAAwB,iBAAIhB,KAAKnB,OAAO6B,YAAYM,EAAiB,WAAGD,QACxEf,KAAKnB,OAAO6B,YAAYM,EAAiB,WAAGL,YAAY1Z,MAAK,GAC7D+Y,KAAKyN,wBAAuB,EAAMzM,GAClChB,KAAKnB,OAAOmP,UACVhN,EAAa,MACbhB,KAAKnB,OAAOhc,iBAAiBme,EAAa,OAC1C,iBAAmBhB,KAAKnB,OAAOtc,QAAQS,MAEzCgd,KAAKnB,OAAO4E,SAASxc,KAAKyc,YAAW,WACnCrC,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAYgD,MACxDuK,EAAKrP,OAAO4E,SAASE,MACrBrD,GACF,GAAG,MApCoC,CAH6B,OAJlEA,GA4CJ,EAEAgO,eAAgB,SAAUjN,EAAML,EAAOV,GAAU,IAAAiO,EAAA,KAC/C,GAAyB,QAArBvN,EAAgB,UAMpB,GAAmD3G,MAA/C2F,KAAKnB,OAAO6B,YAAYM,EAAiB,WAA7C,CAEA,IAAIpb,EAAQoa,KAAK0C,sBAAsB1B,EAAa,OAC/ChB,KAAK2C,SAAS/c,GAAO,KAG1Boa,KAAKnB,OAAO0O,KAAKvN,KAAKnB,OAAOhc,iBAAkBme,EAAgB,SAC7D,CACEpb,MAAOkgB,WAAW9F,KAAKnB,OAAOhc,iBAAiBme,EAAgB,UAAU,OAAKgC,SAASpd,EAAMA,OAC7FoL,KAAMgP,KAAKnB,OAAOhc,iBAAiBme,EAAgB,UAAS,OAGhEA,EAAwB,iBAAIhB,KAAKnB,OAAO6B,YAAYM,EAAiB,WAAGD,QACxEf,KAAKnB,OAAO6B,YAAYM,EAAiB,WAAGL,YAAY1Z,MAAK,GAE7D+Y,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,2BAA4B,CAC3D2K,SAAUxM,EAAgB,SAC1Bpb,MAAOob,EAAa,SAGtBhB,KAAKyN,wBAAuB,EAAMzM,GAClChB,KAAKnB,OAAOmP,UACVhN,EAAgB,SAChBhB,KAAKnB,OAAOhc,iBAAiBme,EAAgB,UAC7C,iBAAmBhB,KAAKnB,OAAOtc,QAAQS,MAGzCgd,KAAKnB,OAAO4E,SAASxc,KAAKyc,YAAW,WACnCrC,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAYgD,MACxD4K,EAAK1P,OAAO4E,SAASE,MACrBrD,GACF,GAAG,MA/BiE,OALlEA,GAqCJ,EAEAkO,eAAgB,SAAUnN,EAAML,EAAOV,GAAU,IAAAmO,EAAA,KAE/C,GAAyB,QAArBzN,EAAgB,UAKpB,GAAmD3G,MAA/C2F,KAAKnB,OAAO6B,YAAYM,EAAiB,WAA7C,CAEA,IAAIpb,EAAQoa,KAAK0C,sBAAsB1B,EAAa,OAC/ChB,KAAK2C,SAAS/c,GAAO,KAG1Boa,KAAKnB,OAAO0O,KAAKvN,KAAKnB,OAAOhc,iBAAkBme,EAAgB,SAC7D,CACEpb,MAAOkgB,WAAW9F,KAAKnB,OAAOhc,iBAAiBme,EAAgB,UAAU,OAAKgC,SAASpd,EAAMA,OAC7FoL,KAAMgP,KAAKnB,OAAOhc,iBAAiBme,EAAgB,UAAS,OAGhEA,EAAwB,iBAAIhB,KAAKnB,OAAO6B,YAAYM,EAAiB,WAAGD,QACxEf,KAAKnB,OAAO6B,YAAYM,EAAiB,WAAGL,YAAY1Z,MAAK,GAE7D+Y,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,2BAA4B,CAC3D2K,SAAUxM,EAAgB,SAC1Bpb,MAAOob,EAAa,SAGtBhB,KAAKyN,wBAAuB,EAAMzM,GAElChB,KAAKnB,OAAOmP,UACVhN,EAAgB,SAChBhB,KAAKnB,OAAOhc,iBAAiBme,EAAgB,UAC7C,iBAAmBhB,KAAKnB,OAAOtc,QAAQS,MAGzCgd,KAAKnB,OAAO4E,SAASxc,KAAKyc,YAAW,WACnCrC,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAYgD,MACxD8K,EAAK5P,OAAO4E,SAASE,MACrBrD,GACF,GAAG,MAhCiE,OAJlEA,GAqCJ,EAEAoO,gBAAiB,SAAUrN,EAAML,EAAOV,GAAU,IAAAqO,EAAA,KAEhD,GAAyB,QAArB3N,EAAgB,UAKpB,GAAmD3G,MAA/C2F,KAAKnB,OAAO6B,YAAYM,EAAiB,WAA7C,CAEA,IAAIpb,EAAQoa,KAAK0C,sBAAsB1B,EAAa,OACpDpb,EAAMA,MAAQA,EAAMA,MAAMgpB,WAEA,WAAtB5N,EAAiB,WAGnBhB,KAAKnB,OAAO0O,KAAKvN,KAAKnB,OAAOhc,iBAAkBme,EAAgB,SAC7D,CACEpb,MAAOoa,KAAKnB,OAAOhc,iBAAiBme,EAAgB,UAAU,MAAE4N,WAAW7R,OAAOnX,EAAMA,OACxFoL,KAAMgP,KAAKnB,OAAOhc,iBAAiBme,EAAgB,UAAS,OAIhEhB,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,kCAAmC,CAClE2K,SAAUxM,EAAgB,SAC1Bpb,MAAOA,EAAMA,WAIfoa,KAAKnB,OAAO0O,KAAKvN,KAAKnB,OAAOhc,iBAAkBme,EAAgB,SAC7D,CACEpb,MAAOA,EAAMA,MAAMmX,OAAOiD,KAAKnB,OAAOhc,iBAAiBme,EAAgB,UAAG4N,YAC1E5d,KAAMgP,KAAKnB,OAAOhc,iBAAiBme,EAAgB,UAAS,OAGhEhB,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,kCAAmC,CAClE2K,SAAUxM,EAAgB,SAC1Bpb,MAAOA,EAAMA,UAGjBob,EAAwB,iBAAIhB,KAAKnB,OAAO6B,YAAYM,EAAiB,WAAGD,QACxEf,KAAKnB,OAAO6B,YAAYM,EAAiB,WAAGL,YAAY1Z,MAAK,GAI7D+Y,KAAKyN,wBAAuB,EAAMzM,GAElChB,KAAKnB,OAAOmP,UACVhN,EAAgB,SAChBhB,KAAKnB,OAAOhc,iBAAiBme,EAAgB,UAC7C,iBAAmBhB,KAAKnB,OAAOtc,QAAQS,MAEzCgd,KAAKnB,OAAO4E,SAASxc,KAAKyc,YAAW,WACnCrC,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAYgD,MACxDgL,EAAK9P,OAAO4E,SAASE,MACrBrD,GACF,GAAG,KAhDiE,OAJlEA,GAqDJ,EAEAuO,WAAY,SAAUhrB,EAAIirB,EAAWlpB,EAAOmpB,GAE1C,GAAK/O,KAAKpB,KAAV,CAEA,IAAIwB,EAAIJ,KAAKpB,KAAK2E,YAAY1f,GAC9B,GAAKuc,EAAL,CACA,OAAQ0O,GACN,IAAK,mBACHA,EAAY,kBACZ,MACF,IAAK,kBACHA,EAAY,OACZ,MACF,IAAK,oBACHA,EAAY,SACZ,MACF,IAAK,oBACW,SAAVlpB,GAA8B,QAAVA,IAAiBA,GAAQ,GACnC,UAAVA,GAA+B,OAAVA,IAAgBA,GAAQ,GACjDkpB,EAAY,QACZ,MACF,IAAK,kBACW,SAAVlpB,GAA8B,QAAVA,IAAiBA,GAAQ,GACnC,UAAVA,GAA+B,OAAVA,IAAgBA,GAAQ,GACjDkpB,EAAY,QACZ,MACF,IAAK,cACHA,EAAY,aACZ,MACF,IAAK,YACHA,EAAY,WACZ,MACF,IAAK,aACHA,EAAY,YACZ,MACF,IAAK,gBACW,SAAVlpB,GAA8B,QAAVA,IAAiBA,GAAQ,GACnC,UAAVA,GAA+B,OAAVA,IAAgBA,GAAQ,GACjDkpB,EAAY,gBACZ,MACF,IAAK,iBACHA,EAAY,YACZ,MACF,IAAK,eACHA,EAAY,MAIhB,OAAQA,GACN,IAAK,OACH1O,EAAElM,KAAOtO,EAAMgpB,WACf,MACF,IAAK,kBACHxO,EAAE4O,IAAI,kBAAmBppB,GACzB,MACF,IAAK,WACHwa,EAAE6O,SAAWrpB,EACb,MACF,IAAK,OACHwa,EAAE8O,SAAStpB,GACX,MACF,IAAK,SACHwa,EAAEvL,OAASjP,EACX,MACF,IAAK,QACHwa,EAAE5K,MAAQ5P,EACV,MACF,IAAK,QACHwa,EAAE+O,MAAQvpB,EACV,MACF,IAAK,aACHwa,EAAEhM,WAAa,IAAMxO,EAAQ,IAC7B,MACF,IAAK,WACHwa,EAAE/L,SAAWzO,EACb,MACF,IAAK,YACHwa,EAAE9K,UAAY1P,EACd,MACF,IAAK,SACHwa,EAAEtV,OAASlF,EAAQoa,KAAKnB,OAAOoF,WAAWjE,KAAKnB,OAAOxU,cACtD,MACF,IAAK,OACH+V,EAAEpQ,KAAOpK,EAAQoa,KAAKnB,OAAOoF,WAAWjE,KAAKnB,OAAOxU,cACpD,MACF,IAAK,gBACH+V,EAAEgP,cAAgBxpB,EAClBwa,EAAE5L,cAAgB5O,EAClB,MACF,IAAK,WACHA,GAAS,KACG,EACVA,EAAQ,EACCA,EAAQ,IACjBA,EAAQ,GAEVwa,EAAE7L,QAAU3O,EACZ,MACF,IAAK,SAEDwa,EAAElL,QADU,IAAVtP,EACSoa,KAAK9K,OAEL,KAGb,MACF,IAAK,YACHtP,EAAQA,EAAM2W,cACd6D,EAAEjL,UAAYvP,EACd,MACF,IAAK,MACHwa,EAAEjQ,IAAMvK,EAAQoa,KAAKnB,OAAOoF,WAAWjE,KAAKnB,OAAOxU,cACnD,MACF,IAAK,QACH+V,EAAEpV,MAAQpF,EAAQoa,KAAKnB,OAAOoF,WAAWjE,KAAKnB,OAAOxU,cACrD,MACF,IAAK,MACH+V,EAAEiP,SAAS7I,SAAQ,SAAUhd,GACvBA,EAAEtG,QAAU0C,GACdwa,EAAEkP,OAAO9lB,EAAEyM,KAAK,WAAa,GAGjC,IACA+J,KAAK8D,UAAU9D,KAAMI,EAAEvc,IAG3Buc,EAAE8O,SAAS9O,EAAE9L,MACb8L,EAAE2H,YACF/H,KAAKpB,KAAK8C,mBACY,mBAAfqN,GAA6BA,GA5HtB,CAHQ,CAgIxB,EAEAhB,WAAY,SAAU1M,EAAMjB,EAAGuN,EAAW4B,EAASC,GAEjD,GAAKnO,EAAKzC,KAAV,CAEA,IAAIvU,EAAegX,EAAKxC,OAAOxU,aAW/B,GATIklB,GACFvP,KAAKnB,OAAO6O,gBAAgBzmB,KAAK,CAC/B6mB,OAAQ1N,EAAEvc,GACV8pB,UAAWA,EACXjH,SAAU6I,IAKsB,GAAhCvP,KAAKyP,aAAa9B,GAGpB,OAFAvN,EAAEsP,YAAc,eAChBtP,EAAEuP,UAAW,GAIXvP,EAAEwP,YAENxP,EAAEsP,YAAc,UAGJ,cAAVtP,EAAEpP,MACQ,QAAVoP,EAAEpP,MACQ,SAAVoP,EAAEpP,MACQ,WAAVoP,EAAEpP,MACQ,aAAVoP,EAAEpP,MAIkB,GAAlBwe,IAEJnO,EAAKW,0BAA0B5B,EAAEvc,GAAI,cACrCuc,EAAEwP,WAAY,EACdxP,EAAEuP,UAAW,EAEbvP,EAAEyP,UAAUxO,EAAK/B,MACjBc,EAAEyE,QAAQ,cAAe,GAAI,CAC3BV,SAAU,IACVK,OAAQC,OAAOC,KAAKC,KAAKmL,WACzB/K,MAAO,WAEL,OAAK3E,EAMAA,EAAE2P,SAAY1O,EAAKzC,OAAQwB,EAAEuP,UAAYtlB,GAAgBgX,EAAKxC,OAAOxU,kBAA1E,GACE+V,EAAEyP,UAAU,CACV3Q,QAAS,EACTC,QAAS,EACTF,KAAM,EACNxO,MAAO,kBACP8D,QAAS,KAEX6L,EAAEsP,YAAc,UAChBtP,EAAE4P,SAAU,EACZ5P,EAAEwP,WAAY,EACdvO,EAAKiB,yBAAyBlC,EAAEvc,GAAI,eAC7B,IAjBPwd,EAAKiB,yBAAyBlC,EAAEvc,GAAI,cACpCuc,EAAEwP,WAAY,GACP,EAiBX,EACAlK,WAAY,SAASA,IACnB,GAAKrE,EAAKzC,MAAQvU,GAAgBgX,EAAKxC,OAAOxU,aAK9C,OAAK+V,EAAElL,SAAUkL,EAAEuP,UAAavP,EAAE2P,aAMlC3P,EAAEyE,QAAQ,cAAiC,KAAlBzE,EAAElL,OAAO+J,KAAc,EAAI,GAAI,CACtDkF,SAAU,IACVK,OAAQC,OAAOC,KAAKC,KAAKsL,YACzBlL,MAAO,WAEL,OAAK1D,EAAKzC,MAAQvU,GAAgBgX,EAAKxC,OAAOxU,aAKzC+V,EAAE2P,SAAY1O,EAAKzC,OAAQwB,EAAEuP,cAAlC,GACEvP,EAAEsP,YAAc,UAChBtP,EAAEyP,UAAU,CACV3Q,QAAS,EACTC,QAAS,EACTF,KAAM,EACNxO,MAAO,kBACP8D,QAAS,KAEX6L,EAAE4P,SAAU,EACZ5P,EAAEwP,WAAY,EACdvO,EAAKiB,yBAAyBlC,EAAEvc,GAAI,eAC7B,IAhBPwd,EAAKiB,yBAAyBlC,EAAEvc,GAAI,eAC7B,EAkBX,EACA6hB,WAAYA,KA/BZtF,EAAEwP,WAAY,OACdvO,EAAKiB,yBAAyBlC,EAAEvc,GAAI,eANpCwd,EAAKiB,yBAAyBlC,EAAEvc,GAAI,aAsCxC,KAzGoB,CA2GxB,EAEAujB,qBAAsB,SAAU/F,EAAML,EAAOV,GAE3CU,EAAwB,iBAAIK,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGD,QAEtC1G,MAA9B2G,EAAM8G,sBACRzG,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAY1Z,MAAK,GAG/D,IAAMoD,EAAegX,EAAKxC,OAAOxU,aAEH,iBAAnB2W,EAAc,SACvBA,EAAc,OAAIgC,SAAShC,EAAc,OAAEvE,MAAM,EAAG,KAGtD,IAAIyT,EAAWlP,EAAW,IACtBA,EAAgB,WAElBkP,EAAWlP,EAAgB,UAGQ3G,MAAjC2G,EAA4B,sBAC9BhB,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,iCAAkC,CACjE9L,MAAOiK,EAAa,MACpBmP,OAAQnP,EAAc,UAI1B,IAAIqJ,EAASrJ,EAAc,OAAI,GAC3BqJ,EAAS,IACXA,EAAS,GAEX,IAAItT,EAAQ,IAAIqZ,0CAAK,CACnBxf,IAAK,CAACsf,GACN7F,OAAQA,EAERgG,SAAS,EACTC,OAAQ,WAENjP,EAAKxC,OAAO0R,aAAatpB,KAAK8P,GAC9BA,EAAMyZ,OACFnP,EAAKxC,OAAO4R,MACd1Z,EAAM0Z,MAAK,EAEf,EACAC,OAAQ,WACN,GAAuC,GAAnCrP,EAAKxC,OAAO0R,aAAavpB,QACzBqD,GAAgBgX,EAAKxC,OAAOxU,aAC9B,IAAK,IAAIvD,EAAI,EAAGC,EAAIsa,EAAKxC,OAAO0R,aAAavpB,OAAQF,EAAIC,EAAGD,IAC1Dua,EAAKxC,OAAO0R,aAAazpB,GAAG6pB,QAGlC,EACAC,MAAO,WACLvP,EAAKxC,OAAO0R,aAAa/J,SAAQ,SAAUhd,EAAG1C,GACxC0C,EAAEqnB,MAAQ7P,EAAW,KACvBK,EAAKxC,OAAO0R,aAAavmB,OAAOlD,EAAG,EAGvC,IACIuD,GAAgBgX,EAAKxC,OAAOxU,eACIgQ,MAA9B2G,EAAM8G,sBACRzG,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAYgD,MAGtC,mBAAbrD,GAA2BA,IAEtC,GAEJ,EAEAwQ,gBAAiB,SAAUzP,EAAML,EAAOV,GACtCU,EAAwB,iBAAIK,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGD,QACxEM,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAY1Z,MAAK,GAC7D,IAAMgD,EAAaoX,EAAKxC,OAAOxU,aAE/B2V,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,4BAA6B,CAC5D9L,MAAOiK,EAAa,MACpBmP,OAAQnP,EAAc,UAIxB,IAAIqJ,EAASrH,SAAShC,EAAc,QAAK,IACrCqJ,EAAS,IACXA,EAAS,GAGX,IAAItT,EAAQ,IAAIqZ,0CAAK,CACnBxf,IAAK,CAACoQ,EAAW,KAEjBqP,SAAS,EACThG,OAAQA,EACRiG,OAAQ,WACFrmB,GAAcoX,EAAKxC,OAAOxU,eAC9BgX,EAAKxC,OAAOkS,aAAa9pB,KAAK8P,GAC9BA,EAAMyZ,OACFnP,EAAKxC,OAAO4R,MACd1Z,EAAM0Z,MAAK,GAEf,EACAC,OAAQ,WACiC,GAAnCrP,EAAKxC,OAAOkS,aAAa/pB,QAEzBiD,GAAcoX,EAAKxC,OAAOxU,cAC5B0M,EAAM4Z,QAEV,EACAC,MAAO,WACLvP,EAAKxC,OAAOkS,aAAavK,SAAQ,SAAUhd,EAAG1C,GACxC0C,EAAEqnB,MAAQ7P,EAAW,KACvBK,EAAKxC,OAAOkS,aAAa/mB,OAAOlD,EAAG,EAGvC,IAEImD,GAAcoX,EAAKxC,OAAOxU,eAE5BgX,EAAKxC,OAAO0D,oBAAoBlB,EAAKxC,OAAQ5U,EAAY,KACzDoX,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAYgD,MAEpC,mBAAbrD,GAA2BA,IAEtC,GAEJ,EAEA0Q,eAAgB,SAAU3P,EAAML,EAAOV,GAAU,IAAA2Q,EAAA,KAC1CjR,KAAKnB,OAAOqS,QACjBlQ,EAAwB,iBAAIhB,KAAKnB,OAAO6B,YAAYM,EAAiB,WAAGD,QACxEf,KAAKnB,OAAOqS,MAAMP,SAClB3Q,KAAKnB,OAAOqS,MAAQ,KAEpBlR,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,6BAEjC7C,KAAKnB,OAAO6B,YAAYM,EAAiB,WAAGL,YAAYgD,MAExD3D,KAAKnB,OAAO4E,SAASxc,KAAKyc,YAAW,WACnCuN,EAAKpS,OAAO4E,SAASE,MACrBrD,GACF,GAAG,MACL,EAEA6Q,eAAgB,SAAU9P,EAAML,EAAOV,GAGrCU,EAAwB,iBAAIK,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGD,QACxEM,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAY1Z,MAAK,GAE7D,IAAImqB,GAAS,EACU,QAAnBpQ,EAAc,SAChBoQ,GAAS,GAGX,IAAMnnB,EAAaoX,EAAKxC,OAAOxU,aAO/B,GALA2V,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,2BAA4B,CAC3D9L,MAAOiK,EAAa,MACpBmP,OAAQnP,EAAc,UAGnBK,EAAKxC,OAAOqS,MAuCN7P,EAAKxC,OAAOqS,MAAML,MAAQ7P,EAAW,MAC9CK,EAAKxC,OAAOqS,MAAM9L,KAAKpC,SAAShC,EAAc,QAAK,IAAK,EAAG,KAC3DK,EAAKxC,OAAO4E,SAASxc,KAAKyc,YAAW,WACnCrC,EAAKxC,OAAO4E,SAASE,MACrB,IAAI0N,EAAW,IAAIjB,0CAAK,CACtBxf,IAAK,CAACoQ,EAAW,KACjBsQ,KAAMF,EACN/G,OAAQrH,SAAShC,EAAc,QAAK,IACpCqP,SAAS,EAETC,OAAQ,WACDjP,EAAKxC,OAAOqS,QAGjB7P,EAAKxC,OAAOqS,MAAMP,SAElBtP,EAAKxC,OAAOqS,MAAQG,EACpBA,EAAW,KACXhQ,EAAKxC,OAAOqS,MAAMV,OACdnP,EAAKxC,OAAO4R,MACdpP,EAAKxC,OAAOqS,MAAMT,MAAK,GAI3B,EACAC,OAAQ,WACDrP,EAAKxC,OAAOqS,QACb7P,EAAKxC,OAAOqS,MAAMK,OAClBtnB,GAAcoX,EAAKxC,OAAOxU,cAC5BgX,EAAKxC,OAAOqS,MAAMP,SAEtB,EACAC,MAAO,WACAvP,EAAKxC,OAAOqS,QACZ7P,EAAKxC,OAAOqS,MAAMK,QACrBlQ,EAAKxC,OAAOqS,MAAQ,MAElBjnB,GAAcoX,EAAKxC,OAAOxU,eAC5BgX,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAYgD,MACpC,mBAAbrD,GAA2BA,KAEtC,GAEJ,GAAG,YAlFmB,CACtB,IAAI+J,EAASrH,SAAShC,EAAc,QAAK,IACrCqJ,EAAS,IACXA,EAAS,GAEXhJ,EAAKxC,OAAOqS,MAAQ,IAAId,0CAAK,CAC3Bxf,IAAK,CAACoQ,EAAW,KACjBsQ,KAAMF,EACN/G,OAAQA,EAGRiG,OAAQ,WACDjP,EAAKxC,OAAOqS,QACjB7P,EAAKxC,OAAOqS,MAAMV,OACdnP,EAAKxC,OAAO4R,MACdpP,EAAKxC,OAAOqS,MAAMT,MAAK,GAG3B,EACAC,OAAQ,WACDrP,EAAKxC,OAAOqS,QACb7P,EAAKxC,OAAOqS,MAAMK,OAClBtnB,GAAcoX,EAAKxC,OAAOxU,cAC5BgX,EAAKxC,OAAOqS,MAAMP,SAEtB,EACAC,MAAO,WACoB,MAArBvP,EAAKxC,OAAOqS,QACX7P,EAAKxC,OAAOqS,MAAMK,QACrBlQ,EAAKxC,OAAOqS,MAAQ,MAGlBjnB,GAAcoX,EAAKxC,OAAOxU,eAC5BgX,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAYgD,MAEpC,mBAAbrD,GAA2BA,KAEtC,GAEJ,CA6CF,EAEAkR,iBAAkB,SAAUnQ,EAAML,EAAOV,GAEvC,IAAIF,EAAIJ,KAAKpB,KAAK2E,YAAYvC,EAAc,QACvCZ,IAEDY,EAAW,IAAEpF,SAAS0J,MAAMC,OAAOvjB,MAAMyvB,iBAC3CzQ,EAAW,IAAIA,EAAW,IAE1BA,EAAW,IAAIsE,MAAMC,OAAOvjB,MAAMyvB,gBAAkBzQ,EAAW,IAEjEA,EAAwB,iBAAIhB,KAAKnB,OAAO6B,YAAYM,EAAiB,WAAGD,QAEpEX,EAAExP,MAAQoQ,EAAW,KAAKZ,EAAEsR,aAAe1Q,EAAW,KAK1DhB,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,6BAA8B,CAC7DtS,KAAMyP,KAAKG,mBAAmBC,MAGhCiB,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAY1Z,MAAK,GAC/C,SAAVmZ,EAAEpP,MAA6B,QAAVoP,EAAEpP,MACzBgQ,EAAW,IAAIA,EAAW,IAAEwL,QAAQ,WAAY,UAChDxL,EAAW,IAAIA,EAAW,IAAI,kBAE9BZ,EAAEsR,WAAa1Q,EAAW,IAC1BZ,EAAEuR,QAAU3Q,EAAW,IACvByD,OAAOmN,eAAe5Q,EAAW,KAAG,SAAU2Q,EAAS9Q,GACrD,IAAIgR,EAAMpN,OAAOC,KAAKoN,iBAAiBH,EAAS3Q,EAAW,KAC3DZ,EAAE2R,SAAWF,EAAIE,QACnB,IACA1Q,EAAKyC,UAAUzC,EAAML,IAErBZ,EAAEkP,OACAtO,EAAW,KACX,WACEK,EAAKyC,UAAUzC,EAAML,GACD,mBAAbV,GAA2BA,GACpC,GAAG,CACD0R,YAAa,cAInB3Q,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAYgD,OA/BlC,mBAAbrD,GAA2BA,IAgCtC,EAEA2R,0BAA2B,SAAAA,0BAAU5Q,KAAML,MAAOV,UAAU,IAAA4R,QAAA,KAC1D,GAAsB,QAAlBlR,MAAa,OAAiC,QAAlBA,MAAa,MAA7C,CAOA,IAEEhB,KAAKnB,OAAO0O,KAAKvN,KAAKnB,OAAOhc,iBAAkBme,MAAa,MAC1D,CACEpb,MAAOusB,OAAOC,KAAKpS,KAAKnB,OAAOhc,iBAAiBme,MAAa,OAAU,QACvEhQ,KAAMgP,KAAKnB,OAAOhc,iBAAiBme,MAAa,OAAS,OAI7DhB,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,2BAA4B,CAC3DwP,UAAWrS,KAAKnB,OAAOhc,iBAAiBme,MAAa,OAAU,QAEnE,CAAE,MAAOxX,GAEPwW,KAAKnB,OAAO0O,KAAKvN,KAAKnB,OAAOhc,iBAAkBme,MAAa,MAC1D,CACEpb,MAAO,QACPoL,KAAMgP,KAAKnB,OAAOhc,iBAAiBme,MAAa,OAAS,OAI7DhB,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,wCAAyC,CACxEtS,KAAMyQ,MAAa,MACnBqR,UAAWrS,KAAKnB,OAAOhc,iBAAiBme,MAAa,OAAU,QAEnE,CACAhB,KAAKnB,OAAO6B,YAAYM,MAAiB,WAAGL,YAAY1Z,MAAK,GAC7D+Z,MAAwB,iBAAIhB,KAAKnB,OAAO6B,YAAYM,MAAiB,WAAGD,QACxEf,KAAKyN,wBAAuB,EAAMzM,OAClChB,KAAKnB,OAAO4E,SAASxc,KAAKyc,YAAW,WACnCwO,QAAKrT,OAAO4E,SAASE,MACrBrD,UACF,GAAG,KApCH,KAFsB,mBAAbA,UAA2BA,UAuCtC,EAEAgS,8BAA+B,SAAUjR,EAAML,EAAOV,GAAU,IAAAiS,EAAA,KAC1DV,EAAM7R,KAAKpB,KAAK2E,YAAYvC,EAAc,QAC9C,GAAK6Q,EAAL,CACA7R,KAAKnB,OAAO6B,YAAYM,EAAiB,WAAGL,YAAY1Z,MAAK,GAC7D+Z,EAAwB,iBAAIhB,KAAKnB,OAAO6B,YAAYM,EAAiB,WAAGD,QAExEf,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,uCAAwC,CACvE2K,SAAUxM,EAAa,MACvBpb,MAAOoa,KAAKnB,OAAOhc,iBAAiBme,EAAa,OAAU,SAG7DhB,KAAKwS,wBAAwBX,EAAK,KAAO7Q,EAAa,MAAI,KAAM6Q,EAAIY,mBAAmB,EAAGZ,EAAI3d,KAAKlN,QAAQ,IAC3G6qB,EAAIhK,oBAAoB3T,KAAO2d,EAAI3d,KAEnC,IACIyP,GAAM,EACoB,oBAFX3D,KAAKiB,SAASD,EAAiB,WAEzB,WAAyB2C,GAAM,GACpDA,EACF3D,KAAK8D,UAAU9D,KAAMgB,GAC0B,GAAtChB,KAAKnB,OAAOkD,gBAAgB/a,QACrCgZ,KAAKpB,KAAK8C,mBAGZ1B,KAAK+D,cAAc/D,KAAMgB,EAAO6Q,GAEhC7R,KAAKnB,OAAO4E,SAASxc,KAAKyc,YAAW,WACnC6O,EAAK1T,OAAO4E,SAASE,MACrBrD,GACF,GAAG,KA1Ba,CA4BlB,EAEAoS,2BAA4B,SAAUrR,EAAML,EAAOV,GAAU,IAAAqS,EAAA,KACvDd,EAAM7R,KAAKpB,KAAK2E,YAAYvC,EAAc,QAC9C,GAAK6Q,EAAL,CACA7R,KAAKnB,OAAO6B,YAAYM,EAAiB,WAAGL,YAAY1Z,MAAK,GAC7D+Z,EAAwB,iBAAIhB,KAAKnB,OAAO6B,YAAYM,EAAiB,WAAGD,QAExEf,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,oCAAqC,CACpEjd,MAAOob,EAAa,SAItBhB,KAAKwS,wBAAwBX,EAAK7Q,EAAa,MAAG6Q,EAAIY,mBAAmB,EAAGZ,EAAI3d,KAAKlN,QAAQ,IAC7F6qB,EAAIhK,oBAAoB3T,KAAO2d,EAAI3d,KAEnC,IAAIyP,GAAM,EACoB,oBAA1BiP,WAAqB,WAAyBjP,GAAM,GAEpDA,EACF3D,KAAK8D,UAAU9D,KAAMgB,GAC0B,GAAtChB,KAAKnB,OAAOkD,gBAAgB/a,QACrCgZ,KAAKpB,KAAK8C,mBAGZ1B,KAAK+D,cAAc/D,KAAMgB,EAAO6Q,GAEhC7R,KAAKnB,OAAO4E,SAASxc,KAAKyc,YAAW,WACnCiP,EAAK9T,OAAO4E,SAASE,MACrBrD,GACF,GAAG,KA1Ba,CA2BlB,EAEAkS,wBAAuB,SAACX,EAAKgB,EAAeC,GAC1C,IAAIC,GAAa,EAEjBlB,EAAImB,YAAY,EAAGnB,EAAI3d,KAAKlN,QAE1B,GACE8rB,EAAiBA,EAAe/V,OAAO+V,SAChCD,EAAc7rB,OAAS8rB,EAAe9rB,QAE3C6rB,EAAc7rB,QAAU8rB,EAAe9rB,SACzC8rB,EAAe9rB,OAAS6rB,EAAc7rB,QAI1C6qB,EAAIoB,YAAYJ,EAAeC,EAAgB,GAG/C,IAAMI,EAAQL,EAAcM,QAAQ,MAClCC,EAAMP,EAAcM,QAAQ,MAG9B,MAAc,GAAVD,IAAuB,GAARE,GAAaF,GAASE,GAAzC,CACA,IAAM3G,EAAYoG,EAAcpG,UAAUyG,EAAQ,EAAGE,GAAKC,OACpDC,EAAkBT,EAAcM,QAAQ1G,EAAWyG,GAOzD,IAAK,IAAIK,KALT1B,EAAImB,YAAYE,EAAOI,GAEvBzB,EAAImB,YAAYnB,EAAI3d,KAAKif,QAAQ1G,EAAWyG,GAASzG,EAAUzlB,OAAQ6qB,EAAI3d,KAAKif,QAAQ,MAAQ,GAG5EnT,KAAKnB,OAAOhc,iBAC9B,GAAI0wB,GAAW9G,EAAf,CACAsG,GAAa,EACb,KAFkC,CAKpC,IAAIS,EAAW/G,EACXsG,IACFS,EAAWxT,KAAKyT,iBAAiBhH,IAGnC,IAAMiH,EAAe7B,EAAI3d,KAAKif,QAAQ1G,EAAWyG,GAE7CS,EAAkB9B,EAAIY,mBAAmBiB,EAAcA,EAAejH,EAAUzlB,QAAQ,GAE5F6qB,EAAImB,YAAYU,EAAcA,EAAejH,EAAUzlB,QAEvD,GACE2sB,EAAkBA,EAAgB5W,OAAO4W,SAClCH,EAASxsB,OAAS2sB,EAAgB3sB,QAEvCwsB,EAASxsB,QAAU2sB,EAAgB3sB,SACrC2sB,EAAgB3sB,OAASwsB,EAASxsB,QAGpC6qB,EAAIoB,YAAYO,EAAUG,EAAiBD,GAE3C1T,KAAKwS,wBAAwBX,EAAKA,EAAI3d,KAAM2d,EAAIY,mBAAmB,EAAGZ,EAAI3d,KAAKlN,QAAQ,GApCnC,CAqCtD,EAEA0b,sBAAuB,SAAUkR,GAE/B,GAA6B,iBAAlBA,EACT,MAAO,CAAEhuB,MAAOguB,GAGlB,IAAMV,EAAQU,EAAeT,QAAQ,MACrCC,EAAMQ,EAAeT,QAAQ,MAE7B,GAAID,GAASE,EAAK,MAAO,CAAES,OAAO,EAAOjuB,MAAOguB,GAEhD,IAAInH,EAAYmH,EAKhB,IAAK,IAAIL,KAHM,IAAXL,IAAyB,IAATE,IAAY3G,EAAYmH,EAAenH,UAAUyG,EAAQ,EAAGE,GAAKC,QAGjErT,KAAKnB,OAAOhc,iBAC9B,GAAI0wB,IAAY9G,EAAW,MAAO,CAAE8G,QAAS9G,EAAW7mB,MAAOoa,KAAKyT,iBAAiBhH,IAEvF,MAAO,CAAE7mB,MAAOguB,EAElB,EAEAH,iBAAkB,SAAUF,GAC1B,OAAOpB,OAAOnS,KAAKnB,OAAOhc,iBAAiB0wB,GAAgB,MAC7D,EAEAjG,qBAAsB,SAAU1nB,EAAOoL,GACrC,IAAI+hB,GAAa,EAIXG,EAAQttB,EAAMutB,QAAQ,MAC1BC,EAAMxtB,EAAMutB,QAAQ,MAEtB,GAAID,GAAS,GAAKE,GAAO,GAAKF,EAAQE,EAAK,CAEzC,IAAI3G,EAAY7mB,EAAM6mB,UAAUyG,EAAQ,EAAGE,GAAKC,OAEhD,IAAK,IAAIE,KAAWvT,KAAKnB,OAAOhc,iBAC9B,GAAI0wB,GAAW9G,EAAf,CACAsG,GAAa,EACb,KAFkC,CAkBpC,OALEntB,EARGmtB,EASDntB,EAAM6mB,UAAU,EAAGyG,GACnBlT,KAAKnB,OAAOhc,iBAAiB4pB,GAAW7mB,MAAMgpB,WAC9ChpB,EAAM6mB,UAAU2G,EAAM,EAAGxtB,EAAMoB,QAR/BpB,EAAM6mB,UAAU,EAAGyG,GACnBzG,EACA7mB,EAAM6mB,UAAU2G,EAAM,EAAGxtB,EAAMoB,QAQ5BgZ,KAAKsN,qBAAqB1nB,EAAO,SAC1C,CAEA,MAAmC,UAARoL,GACrB,UAAUyG,KAAK7R,GACVod,SAASpd,GAGbA,CACT,EAEAkuB,oBAAqB,SAAUzS,EAAML,EAAOV,GAAU,IAAAyT,EAAA,KACpD/T,KAAKpB,KAAKoV,gBAAiB,EAE3BhT,EAAwB,iBAAIhB,KAAKnB,OAAO6B,YAAYM,EAAiB,WAAGD,QAGxEf,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,gCAEjC7C,KAAKnB,OAAO4E,SAASxc,KAAKyc,YAAW,WACnCqQ,EAAKlV,OAAO4E,SAASE,MACrBrD,GACF,GAAG,KACL,EAEA2T,mBAAoB,SAAU5S,EAAML,EAAOV,GAAU,IAAA4T,EAAA,KACnDlU,KAAKpB,KAAKuV,eAAgB,EAE1BnT,EAAwB,iBAAIhB,KAAKnB,OAAO6B,YAAYM,EAAiB,WAAGD,QAGxEf,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,oCAEjC7C,KAAKnB,OAAO4E,SAASxc,KAAKyc,YAAW,WACnCwQ,EAAKrV,OAAO4E,SAASE,MACrBrD,GACF,GAAG,KACL,EAEAmN,uBAAwB,SAAU2G,EAAoBpT,GAEpD,QAAoB3G,IAAhB2F,KAAKnB,OAAT,CAEA,IAAI8S,EAAU3R,KAAKpB,KAAKyV,aACpBrT,IACFA,EAAMsT,oBAAqB,GAG7B,IAAK,IAAIxtB,EAAI,EAAGC,EAAI4qB,EAAQ3qB,OAAQF,EAAIC,EAAGD,IACzC,GACsB,YAApB6qB,EAAQ7qB,GAAGkK,MACS,eAApB2gB,EAAQ7qB,GAAGkK,MACS,iBAApB2gB,EAAQ7qB,GAAGkK,KACX,CACA,IAAIujB,EAAU5C,EAAQ7qB,GAAGoN,KACzB8L,KAAKwS,wBAAwBb,EAAQ7qB,GAAI6qB,EAAQ7qB,GAAG+gB,oBAAoB3T,KAAMyd,EAAQ7qB,GAAG+gB,oBAAoBhW,OAEzGuiB,GAAsBG,GAAW5C,EAAQ7qB,GAAGoN,MAAQ8M,EAAW,MACjEA,EAAc,OAAI2Q,EAAQ7qB,GAAGjD,GAC7Bmc,KAAK8D,UAAU9D,KAAMgB,GACrBA,EAA0B,oBAAI,EAElC,CAEwC,GAAtChB,KAAKnB,OAAOkD,gBAAgB/a,QAC9BgZ,KAAKpB,KAAK8C,mBAGPV,GAELhB,KAAKY,4BAA4BI,EA7BI,CA8BvC,EAEAwT,gBAAiB,SAAUnT,EAAML,EAAOV,GAAU,IAAAmU,EAAA,KAEhDzT,EAAwB,iBAAIhB,KAAKnB,OAAO6B,YAAYM,EAAiB,WAAGD,QACxE,IAAIX,EAAIJ,KAAKpB,KAAK2E,YAAYvC,EAAc,QAEvCZ,GAKLA,EAAEY,EAAY,OAAMZ,EAAEY,EAAY,MAElChB,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,sBAAuB,CACtDtS,KAAMyP,KAAKG,mBAAmBC,MAGU,GAAtCJ,KAAKnB,OAAOkD,gBAAgB/a,QAC9BgZ,KAAKpB,KAAK8C,mBAGZ1B,KAAKnB,OAAO4E,SAASxc,KAAKyc,YAAW,WACnC+Q,EAAK5V,OAAO4E,SAASE,MACrBrD,GACF,GAAG,OAjBmB,mBAAbA,GAA2BA,GAkBtC,EAEAoU,uBAAwB,SAAUrT,EAAML,EAAOV,GAAU,IAAAqU,EAAA,KACvD3T,EAAwB,iBAAIhB,KAAKnB,OAAO6B,YAAYM,EAAiB,WAAGD,QAGxE,IAAIX,EAAIJ,KAAKpB,KAAK2E,YAAYvC,EAAc,QAC5C,GAAKZ,EAAL,CAKAJ,KAAKnB,OAAO6B,YAAYM,EAAiB,WAAGL,YAAY1Z,MAAK,GAE7D,IAAInE,EAAYue,EAAKxC,OAAOoF,WAAW5C,EAAKxC,OAAOxU,cAE/C2b,EAAQhG,KAAK0C,sBAAsB1B,EAAc,QACrD,GAAKhB,KAAK2C,SAASqD,GAAnB,CACA,IAAIC,EAAQjG,KAAK0C,sBAAsB1B,EAAc,QAChDhB,KAAK2C,SAASsD,KAEnB7F,EAAEpQ,KAAO4S,OAAOoD,EAAMpgB,OAAS9C,EAC/Bsd,EAAEjQ,IAAMyS,OAAOqD,EAAMrgB,OAAS9C,EAE9Bkd,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,mCAAoC,CACnEtS,KAAMyP,KAAKG,mBAAmBC,GAC9BoL,EAAG5I,OAAOoD,EAAMpgB,OAChBgvB,EAAGhS,OAAOqD,EAAMrgB,UAGwB,GAAtCoa,KAAKnB,OAAOkD,gBAAgB/a,QAC9BgZ,KAAKpB,KAAK8C,mBAGZ1B,KAAK+D,cAAc/D,KAAMgB,EAAOZ,GAEhCJ,KAAKnB,OAAO4E,SAASxc,KAAKyc,YAAW,WACnCrC,EAAKxC,OAAO6B,YAAYM,EAAiB,WAAGL,YAAYgD,MACxDgR,EAAK9V,OAAO4E,SAASE,MACrBrD,GACF,GAAG,MAvB8B,CAPjC,KAFsB,mBAAbA,GAA2BA,GAkCtC,EAEAuU,kBAAmB,SAAUxT,EAAML,EAAOV,GAAU,IAAAwU,EAAA,KAClD9T,EAAwB,iBAAIhB,KAAKnB,OAAO6B,YAAYM,EAAiB,WAAGD,QAExE,IAAIX,EAAIJ,KAAKpB,KAAK2E,YAAYvC,EAAc,QAC5C,GAAKZ,EAAL,CAKA,IAAI2U,GAAO,EACU,QAAjB/T,EAAY,OAAa+T,GAAO,GAEpC3U,EAAE5L,eAAiBugB,EACnB3U,EAAEgP,eAAiB2F,EAEnB/U,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,8BAA+B,CAC9DtS,KAAMyP,KAAKG,mBAAmBC,MAGU,GAAtCJ,KAAKnB,OAAOkD,gBAAgB/a,QAC9BgZ,KAAKpB,KAAK8C,mBAGZ1B,KAAKnB,OAAO4E,SAASxc,KAAKyc,YAAW,WACnCoR,EAAKjW,OAAO4E,SAASE,MACrBrD,GACF,GAAG,KAnBH,KAFsB,mBAAbA,GAA2BA,GAuBtC,EAEA0U,mBAAoB,SAAU3T,EAAML,EAAOV,EAAUF,GAAG,IAAA6U,EAAA,KAOtD,GALAjU,EAAwB,iBAAIhB,KAAKnB,OAAO6B,YAAYM,EAAiB,WAAGD,QACnEX,IACHA,EAAIJ,KAAKpB,KAAK2E,YAAYvC,EAAc,SAGtCZ,GAAKA,EAAEyH,oBAAqB,CAE9B,GAAIzH,EAAE4E,QAAU5E,EAAEkE,WAAalE,EAAE6E,YAAc7E,EAAE8E,OAAS9E,EAAE+E,OAAS/E,EAAEgF,KAKrE,OAJAhF,EAAEwE,gBAAiB,OACnBlB,YAAW,WACTuR,EAAKD,mBAAmB3T,EAAML,EAAOV,EAAUF,EACjD,GAAG,KAEE,GAAIA,EAAEwE,eACX,OAGFxE,EAAEpQ,KAAOoQ,EAAEyH,oBAAoB7X,KAAOqR,EAAKxC,OAAOoF,WAAW5C,EAAKxC,OAAOxU,cACzE+V,EAAEjQ,IAAMiQ,EAAEyH,oBAAoB1X,IAAMkR,EAAKxC,OAAOoF,WAAW5C,EAAKxC,OAAOxU,cACvE+V,EAAE1L,OAAS0L,EAAEyH,oBAAoBnT,OAAS2M,EAAKxC,OAAOoF,WAAW5C,EAAKxC,OAAOxU,cAC7E+V,EAAE0E,OAAS1E,EAAEyH,oBAAoB/C,OAASzD,EAAKxC,OAAOoF,WAAW5C,EAAKxC,OAAOxU,cAC7E+V,EAAE5K,MAAQ4K,EAAEyH,oBAAoBrS,MAChC4K,EAAE+O,MAAQ/O,EAAEyH,oBAAoBsH,MAChC/O,EAAE5L,cAAgB4L,EAAEyH,oBAAoBrT,cACxC4L,EAAEgP,cAAgBhP,EAAEyH,oBAAoBuH,cACxChP,EAAE7L,QAAU6L,EAAEyH,oBAAoBtT,QAElCyL,KAAK8C,aAAa9C,KAAKnB,OAAOgE,GAAG,4BAA6B,CAC5DtS,KAAMyP,KAAKG,mBAAmBC,MAInB,YAAXA,EAAEpP,MACS,eAAXoP,EAAEpP,MACS,iBAAXoP,EAAEpP,MACS,cAAXoP,EAAEpP,OAEFoP,EAAE4S,YAAY,EAAG5S,EAAElM,KAAKlN,QACxBoZ,EAAE6S,YAAY7S,EAAEyH,oBAA0B,KAAGzH,EAAEyH,oBAA2B,MAAG,IAI/EzH,EAAE2H,YAEwC,GAAtC/H,KAAKnB,OAAOkD,gBAAgB/a,QAC9BgZ,KAAKpB,KAAK8C,mBAEZ1B,KAAK+D,cAAc/D,KAAMgB,EAAOZ,EAClC,CAEAJ,KAAKnB,OAAO4E,SAASxc,KAAKyc,YAAW,WACnCuR,EAAKpW,OAAO4E,SAASE,MACrBrD,GACF,GAAG,KAEL,EAEA4U,WAAY,SAAU7T,EAAM8T,GAE1B,IAAIC,EAAY3Z,oBAAQ,KAExB0Z,EAAIE,GAAG,aAAa,WAElBF,EAAItN,oBAAoB7S,WAAamgB,EAAIngB,WACzCmgB,EAAIG,WAAY,EACI,GAAhBH,EAAII,WAERJ,EAAInG,IAAI,aAAcoG,EAAUD,EAAIngB,YAAYwgB,QAAQ,GAAG5G,YACvDvN,EAAKxC,OAAOkD,gBAAgB/a,OAAS,GACzCqa,EAAKzC,KAAK8C,mBACZ,IAEAyT,EAAIE,GAAG,YAAY,WACjBF,EAAInG,IAAI,aAAcmG,EAAItN,oBAAoB7S,YAC9CmgB,EAAIG,WAAY,EACZjU,EAAKxC,OAAOkD,gBAAgB/a,OAAS,GACzCqa,EAAKzC,KAAK8C,kBACZ,IAEAyT,EAAIE,GAAG,aAAa,WAClBF,EAAII,UAAW,EACfJ,EAAInG,IAAI,aAAcoG,EAAUD,EAAItN,oBAAoB7S,YAAYygB,OAAO,GAAG7G,YAC1EvN,EAAKxC,OAAOkD,gBAAgB/a,OAAS,GACzCqa,EAAKzC,KAAK8C,kBACZ,IAEAyT,EAAIE,GAAG,WAAW,WAChBF,EAAII,UAAW,EACM,GAAjBJ,EAAIG,UACNH,EAAInG,IAAI,aAAcoG,EAAUD,EAAItN,oBAAoB7S,YAAYwgB,QAAQ,GAAG5G,YAE/EuG,EAAInG,IAAI,aAAcmG,EAAItN,oBAAoB7S,YAG5CqM,EAAKxC,OAAOkD,gBAAgB/a,OAAS,GACzCqa,EAAKzC,KAAK8C,kBACZ,GACF,EAEA+N,aAAc,SAASiG,GACrB,IAAIC,EAAc,CAAC,EACfC,EAAkB,IAAIC,OAAO,sEAC7BC,EAAkB,EAMtB,IAJkB,iBAAPJ,IACTA,EAAMA,EAAIrC,QAGLqC,EAAIK,MAAMH,IAAkB,CACjC,IAAIG,EAAQL,EAAIK,MAAMH,GAAiB,GACnC9X,EAAa,WAAagY,EAC9BJ,EAAMA,EAAIlJ,QAAQuJ,EAAOjY,GACzBiY,EAAQA,EAAMvJ,QAAQ,IAAK,IAAIA,QAAQ,IAAK,IAC5CmJ,EAAY7X,GAAciY,EAC1BD,GACF,CACA,OAAO9V,KAAKgW,YAAYN,EAAKC,EAC/B,EAEAK,YAAa,SAASN,EAAKC,GAEzB,IAAIM,EAAaP,EAAIQ,MAAM,KAC3B,GAAID,EAAWjvB,OAAS,EAAG,CAEzB,IADA,IAAImvB,EAAWnW,KAAKoW,UAAUH,EAAW,GAAIN,GACpC7uB,EAAI,EAAGA,EAAI,EAAImvB,EAAWjvB,OAAQF,GAAK,EAAG,CACjD,IAAIuvB,EAAWJ,EAAWnvB,GACtBlB,EAAQoa,KAAKoW,UAAUH,EAAWnvB,EAAI,GAAI6uB,GAC9C,OAAQU,GACN,IAAK,KACHF,EAAWA,GAAYvwB,EACvB,MACF,IAAK,KACHuwB,EAAWA,GAAYvwB,EAG7B,CACA,OAAOuwB,CACT,CACA,MAAO,eACT,EAEAC,UAAW,SAASV,EAAKC,GAGvB,IADA,IAKIQ,EALAG,EAAW,EACa,IAArBZ,EAAIvC,QAAQ,MACjBuC,EAAMA,EAAIlJ,QAAQ,IAAK,IACvB8J,IAG8B,IAA5BZ,EAAIvC,QAAQ,YACdgD,EAAWnW,KAAKgW,YAAYL,EAAYD,GAAMC,GAC9B,QAAPD,GAAwB,SAAPA,GAAyB,aAAPA,EAC5CS,EAAkB,QAAPT,EACF7T,OAAO6T,KAChBS,EAAWtU,OAAO6T,MAEpB,IAAK,IAAI5uB,EAAI,EAAGA,EAAIwvB,EAAUxvB,IAC5BqvB,GAAYA,EAEd,OAAOA,CACT,EAEAI,SAAU,SAAS7lB,GAEjB,QAAoB2J,IAAhB2F,KAAKnB,OAAT,CAEAmB,KAAKtP,OAASxJ,KAAKC,MAAMD,KAAK0f,UAAUlW,IAGxC,IAAK,IAAI5J,EAAI,EAAGA,EAAI4J,EAAO1J,OAAQF,IAE5BkZ,KAAKP,YAAY7D,SAASlL,EAAO5J,GAAa,WAEnDkZ,KAAKwW,iBAAiB9lB,EAAO5J,GATM,CAYvC,EAEA2vB,aAAc,SAAU/lB,GAEtB,IAAK,IAAI5J,EAAI,EAAGA,EAAI4J,EAAO1J,OAAQF,IAC7BkZ,KAAKP,YAAY7D,SAASlL,EAAO5J,GAAa,YAEvBuT,MAArB3J,EAAO5J,GAAS,OAClB4J,EAAO5J,GAAS,KAAI,GAGtBkZ,KAAKH,gBAAgBnP,EAAO5J,GAAO,GAAGkc,SAAStS,EAAO5J,GAAS,OAE/DkZ,KAAKtP,EAAO5J,GAAa,UACvBkZ,KACAtP,EAAO5J,GACPkZ,KAAKmB,oBAAoBzQ,EAAO5J,GAAO,KAI/C,EAEA0vB,iBAAkB,SAASxV,GAIzB,IADA,IAAIiG,EAAOjH,KAAKmB,oBAAoBH,EAAU,IACrCla,EAAI,EAAGA,EAAImgB,EAAKjgB,OAAQF,IAE/B,GAAImgB,EAAKngB,GAAW,OAAQ,MAAKka,EAAU,GAA3C,CAEA,IAAI0V,EAAY1W,KAAKiB,SAASgG,EAAKngB,GAAW,OAAQ,MACtD,GAC4B,aAAzB4vB,EAAoB,UAA2C,WAAvBA,EAAkB,QAClC,mBAAzBA,EAAoB,SAIpB,IADA,IAAIC,EAAW3W,KAAKmB,oBAAoB8F,EAAKngB,GAAW,OAAQ,MACvDC,EAAI,EAAGA,EAAI4vB,EAAS3vB,OAAQD,IAEnC,GAAqC,cAAjC4vB,EAAS5vB,GAAW,OAAQ,KAAhC,CAEA,IAAI8mB,EAAa7N,KAAKpB,KAAK2E,YAAYoT,EAAS5vB,GAAW,OAAQ,MAEjD,MAAd8mB,IACJA,EAAWtZ,QAAU,EACrBsZ,EAAWrK,SAAU,EANsC,CAU/DxD,KAAKwW,iBAAiBE,EArBgC,CAuB1D,EAEAzV,SAAU,SAAUpd,GAElB,IADA,IAAImd,EAAQ,KACHla,EAAI,EAAGA,EAAIkZ,KAAKtP,OAAO1J,OAAQF,IACtC,GAAIkZ,KAAKtP,OAAO5J,GAAO,IAAKjD,EAA5B,CACAmd,EAAQhB,KAAKtP,OAAO5J,GACpB,KAFwC,CAI1C,OAAOka,CACT,EAEAG,oBAAqB,SAAUtd,GAE7B,IADA,IAAI+yB,EAAc,GACT9vB,EAAI,EAAGA,EAAIkZ,KAAKtP,OAAO1J,OAAQF,IACJ,qBAA9BkZ,KAAKtP,OAAO5J,GAAa,WACzBkZ,KAAKtP,OAAO5J,GAAW,OAAQ,MAAKjD,GAAMmc,KAAKtP,OAAO5J,GAAW,OAAQ,MAAKjD,GAChF+yB,EAAY3vB,KAAK+Y,KAAKtP,OAAO5J,KAGjC,OAAO8vB,CACT,EAEAC,0BAA2B,SAAShzB,GAElC,IADA,IAAI+yB,EAAc,GACT9vB,EAAI,EAAGA,EAAIkZ,KAAKtP,OAAO1J,OAAQF,IACJ,qBAA9BkZ,KAAKtP,OAAO5J,GAAa,UACzBkZ,KAAKtP,OAAO5J,GAAW,OAAQ,MAAKjD,GACtC+yB,EAAY3vB,KAAK+Y,KAAKtP,OAAO5J,IAGjC,OAAO8vB,CACT,EAEAE,oBAAqB,SAAUjzB,EAAIojB,GAE/B,IADF,IAAI8P,EAAc,EACPjwB,EAAI,EAAGA,EAAImgB,EAAKjgB,OAAQF,IAC3BmgB,EAAKngB,GAAW,OAAQ,MAAKjD,IACjCkzB,GAAe,GAGjB,OAAIA,EAAc,CAGtB,EAEAC,qBAAsB,SAASnzB,EAAIojB,GAEjC,IADA,IAAIgQ,EAAW,GACNnwB,EAAI,EAAGA,EAAImgB,EAAKjgB,OAAQF,IAC/B,GAAImgB,EAAKngB,GAAW,OAAQ,MAAKjD,EAAjC,CAEA,IAAIqzB,EAAQ,CACVlW,MAAOhB,KAAKiB,SAASgG,EAAKngB,GAAW,OAAQ,MAC7CmgB,KAAMA,EAAKngB,IAGTowB,GAAOD,EAAShwB,KAAKiwB,EAPoB,CAS/C,OAAOD,CACT,EAEAtU,SAAU,SAAUzO,KAAMijB,GAExB,IAAIvxB,EAAuB,UAAfwnB,yEAAOlZ,MAAmBA,KAAKtO,MAAQsO,KAC/Cqf,EAAyB,UAAfnG,yEAAOlZ,MAAmBA,KAAKqf,QAAU,KAEvD,GAAoB,iBAAT3tB,GAAqBA,EAAMgW,SAAS,KAAW,CACxD,IAAI3S,EAAQrD,EAAMutB,QAAQ,KAC1BvtB,EAAQA,EAAM6mB,UAAU,EAAGxjB,EAAQ,EACrC,CASA,OANC,QAAQwO,KAAK7R,IACZ,SAAS6R,KAAK7R,IACdoa,KAAKoX,MAAMpU,SAASpd,KACpBoa,KAAKqX,QAAQvR,WAAWlgB,OACpB0xB,MAAM1xB,KAiBRA,EAAQ,IACLuxB,KACHnX,KAAK8C,aACH9C,KAAKnB,OAAOgE,GAAG,oDAAqD,CAClEtS,KAAMgjB,IAER,KACA,KACA,MACA,IAEK,IAzBTvT,KAAK8C,aACH9C,KAAKnB,OAAOgE,GAAG,yCAA0C,CACvDtS,KAAMgjB,IAER,KACA,KACA,MACA,IAEK,EAgDX,EAEA6D,MAAO,SAAUG,GACf,OAAO3U,OAAO2U,KAAOA,GAAKA,EAAI,GAAM,CACtC,EAEAF,QAAS,SAAUE,GACjB,OAAO3U,OAAO2U,KAAOA,GAAKA,EAAI,GAAM,CACtC,EAEA3J,sBAAuB,SAAS/pB,EAAI2zB,EAAOC,GAE5Bpd,MAATmd,IAAoBA,EAAQ,IACnBnd,MAATod,IAAoBA,EAAQ,IAChC,IAAIC,EAAS,QACTC,EAAmB3X,KAAKmB,oBAAoBtd,GAC5Cmd,EAAQhB,KAAKiB,SAASpd,GAE1B,GAAa,MAATmd,EAAe,OAAO0W,EAE1B,GAAyB,gBAArB1W,EAAgB,UAA4C,eAArBA,EAAgB,UACzD,GAAIhB,KAAK8W,oBAAoBjzB,EAAI8zB,GAAmB,CAClD,IAAMV,EAAWjX,KAAKgX,qBAAqBnzB,EAAI8zB,GAyD/C,GAvDwC,iBAApCV,EAAS,GAAU,MAAY,UAEjCjX,KAAK4X,eAAe,CAClB5W,MAAQiW,EAAS,GAAU,MAC3BY,YAAY,EACZpnB,MAAO,YAGyD4J,MAA9D2F,KAAKnB,OAAOhc,iBAAiBo0B,EAAS,GAAU,MAAQ,MAC1DO,EAAQ,QAKK,SAHbA,EAAQxX,KAAKnB,OAAOhc,iBAAiBo0B,EAAS,GAAU,MAAQ,MAAU,MAAErI,aAI1E5O,KAAK8X,oBAAoB,CACvB7Q,KAAOgQ,EAAS,GAAS,KACzBY,YAAY,KAI2B,gBAApCZ,EAAS,GAAU,MAAY,UAA2D,eAApCA,EAAS,GAAU,MAAY,WAC9FO,EAAQxX,KAAK4N,sBAAsBqJ,EAAS,GAAU,MAAM,GAAGO,EAAOC,IAGpER,EAASjwB,OAAS,EAEoB,iBAApCiwB,EAAS,GAAU,MAAY,UAEjCjX,KAAK4X,eAAe,CAClB5W,MAAQiW,EAAS,GAAU,MAC3BY,YAAY,EACZpnB,MAAO,YAGyD4J,MAA9D2F,KAAKnB,OAAOhc,iBAAiBo0B,EAAS,GAAU,MAAQ,MAC1DQ,EAAQ,QAIK,SAFbA,EAAQzX,KAAKnB,OAAOhc,iBAAiBo0B,EAAS,GAAU,MAAQ,MAAU,MAAErI,aAG1E5O,KAAK8X,oBAAoB,CACvB7Q,KAAOgQ,EAAS,GAAS,KACzBY,YAAY,KAI2B,gBAApCZ,EAAS,GAAU,MAAY,UAA2D,eAApCA,EAAS,GAAU,MAAY,WAC9FQ,EAAQzX,KAAK4N,sBAAsBqJ,EAAS,GAAU,MAAM,GAAGO,EAAOC,IAGxEA,EAAQ,QAIe,gBAArBzW,EAAgB,SAAqB,CAEvC,GAAIsE,MAAMC,OAAOvjB,MAAMqjB,aAA2C,GAA5BrF,KAAKyP,aAAa+H,IAA8C,GAA5BxX,KAAKyP,aAAagI,GAAgB,CAE1G,IAAK,IAAI3wB,EAAI,EAAGA,EAAI6wB,EAAiB3wB,OAAQF,IACvC6wB,EAAiB7wB,GAAW,OAAQ,MAAKka,EAAU,IAEvDhB,KAAK8X,oBAAoB,CACvB7Q,KAAM0Q,EAAiB7wB,GACvB+wB,YAAY,IAIhB7X,KAAK4X,eAAe,CAClB5W,MAAQA,EACR6W,YAAY,EACZpnB,MAAO,WAEX,CAEAinB,EAASF,EAAQ,OAASC,CAC5B,KAAO,CAEL,GAAInS,MAAMC,OAAOvjB,MAAMqjB,cAA4C,GAA5BrF,KAAKyP,aAAa+H,IAA8C,GAA5BxX,KAAKyP,aAAagI,IAAiB,CAE5G,IAAK,IAAI3wB,EAAI,EAAGA,EAAI6wB,EAAiB3wB,OAAQF,IACvC6wB,EAAiB7wB,GAAW,OAAQ,MAAKka,EAAU,IAEvDhB,KAAK8X,oBAAoB,CACvB7Q,KAAM0Q,EAAiB7wB,GACvB+wB,YAAY,IAIhB7X,KAAK4X,eAAe,CAClB5W,MAAQA,EACR6W,YAAY,EACZpnB,MAAO,WAEX,CAEAinB,EAASF,EAAQ,OAASC,CAC5B,CACF,OACK,GAAyB,iBAArBzW,EAAgB,SACzB,GAAmD3G,MAA/C2F,KAAKnB,OAAOhc,iBAAiBme,EAAY,MAC3C0W,EAAS,aAUT,GARAA,EAAS1X,KAAKnB,OAAOhc,iBAAiBme,EAAY,MAAU,MAAE4N,WAE9D5O,KAAK4X,eAAe,CAClB5W,MAAQA,EACR6W,YAAY,EACZpnB,MAAO,YAGK,QAAVinB,EAEF,IAAK,IAAI5wB,EAAI,EAAGA,EAAI6wB,EAAiB3wB,OAAQF,IACvC6wB,EAAiB7wB,GAAW,OAAQ,MAAKka,EAAU,IAEvDhB,KAAK8X,oBAAoB,CACvB7Q,KAAM0Q,EAAiB7wB,GACvB+wB,YAAY,IAMtB,OAAOH,CACT,EAEAK,iBAAkB,SAAU1W,EAAML,EAAOiG,GAMvC,IAN6C,IAAA+Q,EAAA,KAIzCrK,EAAY,OACZsK,GAAoB,EACfnxB,EAAI,EAAGA,EAAImgB,EAAKjgB,OAAQF,IACE,sBAA7BmgB,EAAKngB,GAAW,OAAQ,OAC1B6mB,EAAY3N,KAAK4N,sBAAsB3G,EAAKngB,GAAW,OAAQ,OAG7DmgB,EAAKngB,GAAW,OAAQ,MAAKka,EAAU,KACzCiX,GAAoB,GAIxB,GAAyB,GAArBA,GAGgC,GAAhCjY,KAAKyP,aAAa9B,GAAtB,CAGA,IAAIuK,EAAQlY,KAAK0C,sBAAsB1B,EAAa,OAE/ChB,KAAK2C,SAASuV,GAAO,KAEL7d,MAAjB2G,EAAY,OAAgBA,EAAY,KAAI,GAE5C4B,OAAOsV,EAAMtyB,OAAS,EAExBoa,KAAKnB,OAAO4E,SAASxc,KACnByc,YAAW,WAETsU,EAAKJ,eAAe,CAClB5W,MAAOA,IAGTgX,EAAKnZ,OAAO4E,SAASE,MACrBqU,EAAK9W,mBAAmBF,EAAOiG,EAAM,MAAM,EAC7C,GAA6B,IAA1BnB,WAAWoS,EAAMtyB,UAMxBoa,KAAK4X,eAAe,CAClB5W,MAAOA,IAEThB,KAAKkB,mBAAmBF,EAAOiG,EAAM,MAAM,IA7BM,CA+BnD,EAgEAkR,iBAAkB,SAAU9W,EAAML,EAAOiG,GAKvC,IAFA,IAAI0G,EAAY,OACZsK,GAAoB,EACfnxB,EAAI,EAAGA,EAAImgB,EAAKjgB,OAAQF,IACE,sBAA7BmgB,EAAKngB,GAAW,OAAQ,OAC1B6mB,EAAY3N,KAAK4N,sBAAsB3G,EAAKngB,GAAW,OAAQ,OAG7DmgB,EAAKngB,GAAW,OAAQ,MAAKka,EAAU,KACzCiX,GAAoB,GAIxB,GAAyB,GAArBA,GAGgC,GAAhCjY,KAAKyP,aAAa9B,GAAtB,CAEqBtT,MAAjB2G,EAAY,OAAgBA,EAAY,KAAI,GAGhD,IAAIoX,EAAOpY,KAAKsN,qBAAqBtM,EAAY,MACjDA,EAAMqX,YAAcD,EAAK7b,cAAc2Z,MAAM,KAS7ClW,KAAKnB,OAAOyZ,sBAAsBtY,KAAKnB,OAAQmC,EAAOiG,GACtDjH,KAAKnB,OAAO0Z,aAAc,CAhBuB,CA2CnD,EAEAC,qBAAsB,SAASnX,EAAMrH,GAEnC,IACIye,EAAUze,EAAIkc,MAAM,KAAKwC,KAAI,SAAAlN,GAC7B,MAAO,CACL4M,KAAM5M,EACNuK,MAAO,KAEb,IAEM4C,EAAY3e,EAAIuC,cAAc2Z,MAAM,KAEtC0C,EAAoB,GA6ExB,OA3EA5Y,KAAKnB,OAAOga,kBAAkBrS,SAAQ,SAAShd,EAAGP,GAEhD,GAAoBoR,MAAhB7Q,EAAEwX,MAAMoX,KAOZ,IALA,IAAIU,EAAgB,EAChBC,EAAe,EACfC,GAAI,EACJC,GAAkB,EAEbnyB,EAAI,EAAGA,EAAI6xB,EAAU3xB,OAAQF,IAAK,CAErC0C,EAAEwX,MAAMqX,YAAYzc,SAAS+c,EAAU7xB,MAEzC2xB,EAAQ3xB,GAAGivB,OAAQ,GAGrB,IAAK,IAAIhvB,EAAIgyB,EAAchyB,EAAIyC,EAAEwX,MAAMqX,YAAYrxB,OAAQD,IAAK,CAY9D,GAVIyC,EAAEwX,MAAMqX,YAAYtxB,KAAO4xB,EAAU7xB,IACvCgyB,EAAgB,GACH,IAGbE,GAAG,EAEHF,KAGEA,GAAiBtvB,EAAEwX,MAAMqX,YAAYrxB,OAAQ,EAClC,GACF,EAGX,IAAK,IAAIkZ,EAAI,EAAGA,EAAI4Y,EAAe5Y,IACjCuY,EAAQ3xB,EAAIoZ,GAAG6V,OAAQ,EAGF,GAAnBkD,IAEFA,GAAkB,EAElB5X,EAAKuW,eAAe,CAClB5W,MAAOxX,EAAEwX,QAEXK,EAAKH,mBAAmB1X,EAAEwX,MAAOxX,EAAEyd,KAAM,MAAM,GAC3Czd,EAAEwX,MAAY,MAChB4X,EAAkB3xB,KAAKgC,IAG3B6vB,EAAgB,CAClB,CAEA,GAAqB,GAAjBA,EAAoB,CAClBtvB,EAAEwX,MAAMqX,YAAYrxB,OAASD,EAAI,IACnCgyB,EAAehyB,EAAI,GAErB,KACF,CACMiyB,GACFA,GAAI,GACJjyB,GAAQ,GACA,IAAGA,EAAI,IAGjBgyB,EAAe,CAEnB,CACF,CACF,IAGA/Y,KAAKnB,OAAOqa,4BAA4BN,GAExCvX,EAAKyB,aAAa2V,GAAS,GAAO,GAAO,GAElCA,CACT,EAEAU,aAAc,SAAU9X,EAAML,EAAOiG,GAInC,IAJyC,IAAAmS,EAAA,KAGrCzL,EAAY,OAAQsK,GAAoB,EACnClxB,EAAI,EAAGA,EAAIkgB,EAAKjgB,OAAQD,IAEE,sBAA7BkgB,EAAKlgB,GAAW,OAAQ,OAC1B4mB,EAAY3N,KAAK4N,sBAAsB3G,EAAKlgB,GAAW,OAAQ,OAG7DkgB,EAAKlgB,GAAW,OAAQ,MAAKia,EAAU,KACzCiX,GAAoB,GAKxB,GAAyB,GAArBA,EAEJ,IAFsC,IA+CrCpK,EAAAwL,EA/CqC9H,EAAA,SAAAzqB,GAIpC,MAAiC,cAA7BmgB,EAAKngB,GAAW,OAAQ,KAAiB,EAI3B,OAFd+mB,EAAauL,EAAKxa,KAAK2E,YAAY0D,EAAKngB,GAAW,OAAQ,OAEzC,CAAAkyB,OAAA,IAEtBI,EAAKrL,WAAWqL,EAAMvL,EAAYF,EAAW3M,EAAU,GAAGA,EAAY,MAEtE6M,EAAWwH,GAAG,aAAa,WASzB,GARAhU,EAAKxC,OAAOya,wBAEZtY,EAAoB,aAAI6M,EAAe,GAEvC5G,EAAKngB,GAAS,KAAI+mB,EAAiB,KAIhB,GAFCxM,EAAKH,mBAAmBF,EAAOiG,EAAMA,EAAKngB,IAAI,IAK7C,GAAjBka,EAAY,KAAW,CAEzB6M,EAAWkC,SAAU,EAErB,IAAK,IAAIwH,EAAI,EAAGA,EAAItQ,EAAKjgB,OAAQuwB,IAE/B,GAAiC,cAA7BtQ,EAAKsQ,GAAW,OAAQ,KAA5B,CAEA,IAAIgC,EAAmBlY,EAAKzC,KAAK2E,YAAY0D,EAAKsQ,GAAW,OAAQ,MAE7C,MAApBgC,IAEJA,EAAiBxJ,SAAU,EAN4B,CAQ3D,CAEF,SAEAlC,EAAWwH,GAAG,WAAW,WAEvBhU,EAAKxC,OAAO2a,wBAEd,IACF,EA7CS1yB,EAAI,EAAGA,EAAImgB,EAAKjgB,OAAQF,IAAG,QAAAuyB,EAAA9H,EAAAzqB,KAEqBuyB,EAAA,OAAAA,EAAAL,CA4C3D,EAEAS,iBAAkB,SAAUpY,EAAML,EAAOiG,GACvCjH,KAAKmZ,aAAa9X,EAAML,EAAOiG,EACjC,EAEAyS,iBAAkB,SAASrY,EAAML,EAAOiG,GAMtC,IAHA,IAAI0S,EAAiB,GACjBC,EAAkB,KAEb9yB,EAAI,EAAGA,EAAImgB,EAAKjgB,OAAQF,IAE/B,GAAkC,eAA9BmgB,EAAKngB,GAAW,OAAQ,KAAoB,CAC9C8yB,EAAkB5Z,KAAKpB,KAAK2E,YAAY0D,EAAKngB,GAAW,OAAQ,MAChE,KACF,CAGF,GAAuB,MAAnB8yB,EAAJ,CAEA,IAAK,IAAI7yB,EAAI,EAAGA,EAAIkgB,EAAKjgB,OAAQD,IAE/B,GAAkC,uBAA9BkgB,EAAKlgB,GAAW,OAAQ,KAA4B,CAEtD,IAAIqZ,EAAIJ,KAAKpB,KAAK2E,YAAY0D,EAAKlgB,GAAW,OAAQ,MAEtD,IAAKqZ,EAAG,SAERuZ,EAAe1yB,KAAKmZ,GAEI/F,MAApB+F,EAAEyZ,iBACJzZ,EAAEyZ,eAAiB,CAAC,QAG0Bxf,IAA5C+F,EAAEyZ,eAAeD,EAAoB,MACvCxZ,EAAEyZ,eAAeD,EAAoB,IAAK,CAExC1oB,OAAQ,CAAC,IAIbkP,EAAEyZ,eAAeD,EAAoB,IAAW,OAAE5Y,EAAU,IAAK,CAC/DA,MAAOA,EACPiG,KAAMA,EAGV,CAG4B,IAA1B0S,EAAe3yB,QAGnBgZ,KAAKnB,OAAOib,mBAAmBF,EAAgB/1B,GAAI,CACjDk2B,qBAAqB,EACrBC,QAASL,EACTpT,UAAWvF,EAAiB,WArCK,CAuCrC,EAEAiZ,gBAAiB,SAAU5Y,EAAML,EAAOiG,GAItC,IAJ4C,IAAAiT,EAAA,KAGxCvM,EAAY,OAAQsK,GAAoB,EACnClxB,EAAI,EAAGA,EAAIkgB,EAAKjgB,OAAQD,IAEE,sBAA7BkgB,EAAKlgB,GAAW,OAAQ,OAC1B4mB,EAAY3N,KAAK4N,sBAAsB3G,EAAKlgB,GAAW,OAAQ,OAG7DkgB,EAAKlgB,GAAW,OAAQ,MAAKia,EAAU,KACzCiX,GAAoB,GAKxB,GAAyB,GAArBA,EAAJ,CAIA,IAFA,IAAIzhB,EAAgB,KAChB2jB,EAAsB,KACjBja,EAAI,EAAGA,EAAI+G,EAAKjgB,OAAQkZ,IAE/B,GAAiC,sBAA7B+G,EAAK/G,GAAW,OAAQ,KAA5B,CAEAia,EAAsBlT,EAAK/G,GAE3B1J,EAAgBwJ,KAAKpB,KAAK2E,YAAY0D,EAAK/G,GAAW,OAAQ,MAE9D,KAN+D,CAUjE,GAAqB,MAAjB1J,EAEJ,IAFiC,IA+ChC4jB,EAAAC,EA/CgCC,EAAA,SAAAxzB,GAI/B,MAAiC,cAA7BmgB,EAAKngB,GAAW,OAAQ,KAAiB,GAEzCszB,EAAcF,EAAKtb,KAAK2E,YAAY0D,EAAKngB,GAAW,OAAQ,MAEhEozB,EAAKnM,WAAWmM,EAAME,EAAazM,EAAW3M,EAAU,GAAGA,EAAY,MAEpD,MAAfoZ,EAAmB,CAAApB,OAAA,IAEvBoB,EAAY5lB,eAAgB,EAC5B4lB,EAAYhL,eAAgB,OAE5BgL,EAAY/E,GAAG,UAAU,WAEnB+E,EAAY3T,qBAAqBjQ,OAAe6D,OAAWA,EAAW2G,EAAiB,aAAMoZ,EAAYG,qBAE7GtT,EAAKngB,GAAU,MAAIszB,EAAkB,KACrCnT,EAAKngB,GAAU,MAAI0P,EAAoB,KAEvC6K,EAAKyB,aAAazB,EAAKxC,OAAOgE,GAAG,4BAA6B,CAC5DiE,MAAOzF,EAAKlB,mBAAmBia,GAC/BrT,MAAO1F,EAAKlB,mBAAmB3J,MAC7B,GAIe,GAFC6K,EAAKH,mBAAmBF,EAAOiG,EAAMA,EAAKngB,IAAI,KAI7C,GAAjBka,EAAY,OAEdoZ,EAAYG,oBAAqB,GAGnClZ,EAAKuW,eAAe,CAClB5W,MAAOK,EAAKJ,SAASkZ,EAA4B,OAAQ,MACzDtC,YAAY,EACZpnB,MAAO,YAGT4Q,EAAKyW,oBAAoB,CACvB7Q,KAAMkT,EACNtC,YAAY,KAEhB,KACF,EA7CS/wB,EAAI,EAAGA,EAAImgB,EAAKjgB,OAAQF,IAAG,QAAAuzB,EAAAC,EAAAxzB,KAEqBuzB,EAAA,OAAAA,EAAArB,CApBnB,CAgExC,EAEAwB,oBAAqB,SAAUnZ,EAAML,EAAOiG,GAC1CjG,EAAY,MAAI,EAChBhB,KAAKia,gBAAgB5Y,EAAML,EAAOiG,EACpC,EAEAwT,iBAAkB,SAAUpZ,EAAML,EAAOiG,GAIvC,IAJ6C,IAAAyT,EAAA,KAGzCzC,GAAoB,EACflxB,EAAI,EAAGA,EAAIkgB,EAAKjgB,OAAQD,IAC/B,GAAIkgB,EAAKlgB,GAAW,OAAQ,MAAKia,EAAU,GAA3C,CACAiX,GAAoB,EACpB,KAFsD,CAMxD,GAAyB,GAArBA,EAGJ,IAFA,IAsBC0C,EAtBG9M,EAAa,CAAC,EAAC+M,EAAA,SAAA9zB,GAGjB,MAAiC,cAA7BmgB,EAAKngB,GAAW,OAAQ,KAAiB,GAE7C+mB,EAAW/mB,GAAK4zB,EAAK9b,KAAK2E,YAAY0D,EAAKngB,GAAW,OAAQ,MAE9B,MAA5B+mB,EAAW/mB,EAAE8nB,YAAmB,CAAAoK,OAAA,QAEpCnL,EAAW/mB,GAAGuuB,GAAG,kBAAkB,YACjChU,EAAKxC,OAAOgc,kBAEThN,EAAW/mB,GAAGg0B,gBAAkBjN,EAAW/mB,GAAGumB,mBACjDpG,EAAKngB,GAAS,KAAI+mB,EAAW/mB,GAAS,KAGnB,GAFCua,EAAKH,mBAAmBF,EAAOiG,EAAMA,EAAKngB,IAAI,IAI7C,GAAjBka,EAAY,OACd6M,EAAW/mB,GAAGg0B,gBAAiB,GAEnC,IACF,EApBSh0B,EAAI,EAAGA,EAAImgB,EAAKjgB,OAAQF,IAAG,QAAA6zB,EAAAC,EAAA9zB,KACqB6zB,EAAA,OAAAA,EAAA3B,CAoB3D,EAEA+B,qBAAsB,SAAU1Z,EAAML,EAAOiG,GAC3CjG,EAAY,MAAI,EAChBhB,KAAKya,iBAAiBpZ,EAAML,EAAOiG,EACrC,EAEA+T,uBAAwB,SAASha,EAAOiG,EAAMsI,GAE5C,QAAoBlV,IAAhB2F,KAAKnB,OAET,IAAK,IAAI/X,EAAI,EAAGA,EAAImgB,EAAKjgB,OAAQF,IAE/B,GAAImgB,EAAKngB,GAAW,OAAQ,MAAKka,EAAU,GAA3C,CAEA,IAAI0V,EAAY1W,KAAKiB,SAASgG,EAAKngB,GAAW,OAAQ,MAGrC,MAAb4vB,IAEgB,GAAhB1V,EAAW,MAAW0V,EAAe,KAAI,GAE7CA,EAAiB,MAAI1V,EAAa,MAAI,EAEtChB,KAAK8X,oBAAoB,CACvB7Q,KAAMA,EAAKngB,GACX+wB,YAAY,IAGd7X,KAAKib,cACHjb,KACA0W,EACA1W,KAAKmB,oBAAoBuV,EAAc,IACvCnH,GApBoD,CAuB1D,EAEArO,mBAAoB,SAASF,EAAOiG,EAAMiU,EAAYC,GAGpD,GAAInb,KAAKQ,qBAAqBQ,EAAU,IAAI,OAAO,EAEnD,QAAoB3G,IAAhB2F,KAAKnB,OAAsB,OAAO,EAEtC,GAAIsc,EAAe,CAIjB,IADA,IA0DMC,EAAWC,EA6BXC,EAvFF3N,EAAY,OACPzN,EAAI,EAAGA,EAAI+G,EAAKjgB,OAAQkZ,IAC/B,GAAiC,sBAA7B+G,EAAK/G,GAAW,OAAQ,KAA5B,CACAyN,EAAY3N,KAAK4N,sBAAsB3G,EAAK/G,GAAW,OAAQ,MAC/D,KAF+D,CAMjE,GAAoC,GAAhCF,KAAKyP,aAAa9B,GAAqB,OAAO,EAgBlD,GAbyB,oBAArB3M,EAAgB,UAClBhB,KAAK8C,aACH9C,KAAKnB,OAAOgE,GAAG,6BAA8B,CAC3CjE,KAAOoB,KAAKnB,OAAOxU,aAAe,KAEpC,GAQqB,gBAArB2W,EAAgB,UAA4C,oBAArBA,EAAgB,SAAyB,CAOlF,IAAIsa,EAEJ,GAAsBjhB,MAAnB6gB,EAAW3qB,KAEZ+qB,EAAWJ,EAAmB,OAAQ,SAEnC,CAEH,IAAIK,EAAiBvb,KAAKpB,KAAK2E,YAAY2X,EAAmB,OAAQ,MAElEK,IACFD,EAAWC,EAAqB,KAEpC,CAEAvb,KAAK8C,aACH9C,KAAKnB,OAAOgE,GAAG,yBAA0B,CACvCtS,KAAO+qB,KAET,EAIJ,CAEA,GAAyB,mBAArBta,EAAgB,UAA+C,uBAArBA,EAAgB,SAI1Doa,EADwB/gB,MAAvB6gB,EAAkB,MACPA,EAAmB,OAAQ,KAE3BA,EAAkB,MAI9BG,EADwBhhB,MAAvB6gB,EAAkB,MACPA,EAAmB,OAAQ,KAE3BA,EAAkB,MAGhClb,KAAK8C,aACH9C,KAAKnB,OAAOgE,GAAG,4BAA6B,CAC1CiE,MAAQsU,EACRrU,MAAQsU,KAEV,GAIJ,GAAyB,oBAArBra,EAAgB,UAAgD,wBAArBA,EAAgB,SAS3Dsa,EADuBjhB,MAAtB6gB,EAAiB,KACPA,EAAmB,OAAQ,KAE3Blb,KAAKpB,KAAK2E,YAAY2X,EAAmB,OAAQ,MAAS,KAEvElb,KAAK8C,aACH9C,KAAKnB,OAAOgE,GAAG,yBAA0B,CACvCtS,KAAO+qB,KAET,EAGN,CAEIJ,IAEFlb,KAAK4X,eAAe,CAClB5W,MAAOhB,KAAKiB,SAASia,EAAmB,OAAQ,MAChDrD,YAAY,EACZpnB,MAAO,YAGTuP,KAAK8X,oBAAoB,CACvB7Q,KAAMiU,EACNrD,YAAY,KAIhB7X,KAAK4X,eAAe,CAClB5W,MAAOA,EACP6W,YAAY,IAKd,IAAK,IAAIzX,EAAI,EAAGA,EAAI6G,EAAKjgB,OAAQoZ,IAE/B,GAAiC,sBAA7B6G,EAAK7G,GAAW,OAAQ,MAEK,cAA7B6G,EAAK7G,GAAW,OAAQ,MAEK,sBAA7B6G,EAAK7G,GAAW,OAAQ,KAA5B,CAEA,IAAIob,EAAgBxb,KAAKiB,SAASgG,EAAK7G,GAAW,OAAQ,MAE1D,GAAqB,MAAjBob,EAAJ,CAEAA,EAAmB,KAAI,EAEvB,IAAI5E,EAAc5W,KAAKmB,oBAAoBqa,EAAkB,IAC7DA,EAAqB,MAAI,EAEzBxb,KAAK8X,oBAAoB,CACvB7Q,KAAMA,EAAK7G,GACXyX,YAAY,IAEd7X,KAAKib,cAAcjb,KAAMwb,EAAe5E,EAAa5V,EAAU,GAX5B,CAJ4B,CAkBjE,OAAO,CACT,EAEAia,cAAe,SAAU5Z,EAAML,EAAOiG,EAAMsI,GAC1C,IAAIkM,GAAoB,EAMxBza,EAAiB,UAAIuO,EAErB,IAAImM,GAAuB,EAG3B,GAFI1b,KAAKN,qBAAqB9D,SAASoF,EAAgB,YAAI0a,GAAuB,GAE9EA,GACF,IAAK,IAAI50B,EAAI,EAAGA,EAAImgB,EAAKjgB,OAAQF,IAE/B,GAAiC,cAA7BmgB,EAAKngB,GAAW,OAAQ,KAA5B,CAEA,GAAkC,SAA9BmgB,EAAKngB,GAAW,OAAQ,KAC1Bka,EAAc,OAAIiG,EAAKngB,GAAW,OAAQ,SACrC,KAAIkZ,KAAKnB,OAAO6B,YAAY6O,GAAuB,aAGxD,SAFAvO,EAAc,OAAIhB,KAAKnB,OAAO6B,YAAY6O,GAAuB,YAGnE,CAGAvP,KAAK4X,eAAe,CAClB5W,MAAQhB,KAAKiB,SAASgG,EAAKngB,GAAW,OAAQ,MAC9C+wB,YAAY,EACZpnB,MAAO,YAGTuP,KAAK8X,oBAAoB,CACvB7Q,KAAOA,EAAKngB,GACZ+wB,YAAY,IAGd7X,KAAK4X,eAAe,CAClB5W,MAAQA,EACR6W,YAAY,IAGd7X,KAAKgB,EAAgB,UAAGhB,KAAMgB,GAAO,gBAEf3G,IAAhBgH,EAAKxC,SAELyG,MAAMC,OAAOvjB,MAAMqjB,aACjBhE,EAAKxC,OAAO8c,mBAEdta,EAAKua,0BAA0B5a,EAAU,GAAGK,EAAK7B,qBAIjDic,IAEJA,GAAoB,EAIK,GAFNpa,EAAKwV,0BAA0B7V,EAAU,IAE7Cha,OAKfqa,EAAK2Z,uBAAuBha,EAAOiG,EAAMsI,GAJQ,GAA3ClO,EAAKT,4BAA4BI,KAAiBya,GAAoB,IAK9E,GAlDuD,MAH3D,CA2DA,GAAIzb,KAAKJ,gBAAgBhE,SAASoF,EAAgB,UAAI,CAGpD,GAAyB,qCAArBA,EAAgB,SAClB,IAAK,IAAId,EAAI,EAAGA,EAAI+G,EAAKjgB,OAAQkZ,IAC/B,GAAiC,cAA7B+G,EAAK/G,GAAW,OAAQ,KAA5B,CACA,IAAI2N,EAAa7N,KAAKpB,KAAK2E,YAAY0D,EAAK/G,GAAW,OAAQ,MAC/Dc,EAAa,MAAI6M,EAAW3Z,IAF2B,CA2B3D,OArBA8L,KAAK4X,eAAe,CAClB5W,MAAQA,EACR6W,YAAY,SAGd7X,KAAKkN,UAAUlN,KAAMgB,GAAO,WACtBya,IAEJA,GAAoB,EAKK,GAFNpa,EAAKwV,0BAA0B7V,EAAU,IAE7Cha,OAKfqa,EAAK2Z,uBAAuBha,EAAOiG,EAAMsI,GAJvClO,EAAKT,4BAA4BI,GAKrC,GAGF,CAGA,IAAI6a,GAAsB,EACtB7b,KAAKL,mBAAmB/D,SAASoF,EAAgB,YAAI6a,GAAsB,GAG3EA,EACF7b,KAAKgB,EAAgB,UAAGhB,KAAMgB,EAAOiG,EAAMsI,IAI7CvP,KAAK4X,eAAe,CAClB5W,MAAQA,EACR6W,YAAY,IAId7X,KAAKgB,EAAgB,UAAGhB,KAAMgB,GAAO,YAE/BsE,MAAMC,OAAOvjB,MAAMqjB,aACjBhE,EAAKxC,OAAO8c,mBAEdta,EAAKua,0BAA0B5a,EAAU,GAAGK,EAAK7B,qBAIjDic,KAEJA,GAAoB,EAKK,GAFNpa,EAAKwV,0BAA0B7V,EAAU,IAE7Cha,OAKfqa,EAAK2Z,uBAAuBha,EAAOiG,EAAMsI,GAJvClO,EAAKT,4BAA4BI,GAKrC,IA5EA,CA6EF,EAEA8a,YAAa,SAAUza,EAAML,EAAOiG,EAAMsI,GAGxC,IAFA,IAAI5B,EAAY,QAEP5mB,EAAI,EAAGA,EAAIkgB,EAAKjgB,OAAQD,IAC/B,GAAiC,sBAA7BkgB,EAAKlgB,GAAW,OAAQ,KAA5B,CACA4mB,EAAY3N,KAAK4N,sBAAsB3G,EAAKlgB,GAAW,OAAQ,MAC/D,KAF+D,CAOjE,IAFA,IAAMg1B,EAAkB/b,KAAKyP,aAAa9B,GAEjC7mB,EAAI,EAAGA,EAAImgB,EAAKjgB,OAAQF,IAAK,CACpC,IAAIk1B,EAAchc,KAAKiB,SAASgG,EAAKngB,GAAW,OAAQ,MACpDm1B,EAAcjc,KAAKiB,SAASgG,EAAKngB,GAAW,OAAQ,MACxDk1B,EAAmB,MAAIhb,EAAa,MAAI,GAGnB,GAAnB+a,GAC6B,wBAA7B9U,EAAKngB,GAAW,OAAQ,MACxBm1B,EAAgB,IAAKjb,EAAU,IAQZ,GAAnB+a,GAC6B,yBAA7B9U,EAAKngB,GAAW,OAAQ,MACxBm1B,EAAgB,IAAKjb,EAAU,MAR/BhB,KAAK8X,oBAAoB,CACvB7Q,KAAMA,EAAKngB,GACX+wB,YAAY,IAEd7X,KAAKib,cAAc5Z,EAAM2a,EAAahc,KAAKmB,oBAAoB6a,EAAgB,IAAIzM,GAYvF,CACF,EAEA2M,sBAAuB,SAAU7a,EAAML,EAAOiG,EAAMsI,GAClD,GAAsB,QAAlBvO,EAAa,MAEjB,IAAK,IAAIja,EAAI,EAAGA,EAAIkgB,EAAKjgB,OAAQD,IAAK,CAEpC,IAAIi1B,EAAchc,KAAKiB,SAASgG,EAAKlgB,GAAW,OAAQ,MACpDk1B,EAAcjc,KAAKiB,SAASgG,EAAKlgB,GAAW,OAAQ,MAEpDonB,EAAQnO,KAAK0C,sBAAsB1B,EAAa,OACpD,IAAKhB,KAAK2C,SAASwL,GAAO,GAAO,OAEjC6N,EAAmB,MAAIhb,EAAa,MAAI,GAStC8E,WAAW9F,KAAKnB,OAAOhc,iBAAiBme,EAAa,OAAU,OAAK8E,WAAWqI,EAAMvoB,QACxD,2BAA7BqhB,EAAKlgB,GAAW,OAAQ,MACxBk1B,EAAgB,IAAKjb,EAAU,IAQ/B8E,WAAW9F,KAAKnB,OAAOhc,iBAAiBme,EAAa,OAAU,QAAM8E,WAAWqI,EAAMvoB,QACzD,0BAA7BqhB,EAAKlgB,GAAW,OAAQ,MACxBk1B,EAAgB,IAAKjb,EAAU,IAQ/B8E,WAAW9F,KAAKnB,OAAOhc,iBAAiBme,EAAa,OAAU,OAAK8E,WAAWqI,EAAMvoB,QACxD,2BAA7BqhB,EAAKlgB,GAAW,OAAQ,MACxBk1B,EAAgB,IAAKjb,EAAU,MAlB/BhB,KAAK8X,oBAAoB,CACvB7Q,KAAMA,EAAKlgB,GACX8wB,YAAY,IAEd7X,KAAKib,cAAc5Z,EAAM2a,EAAahc,KAAKmB,oBAAoB6a,EAAgB,IAAIzM,GAsBvF,CACF,EAEA4M,oBAAqB,SAAU9a,EAAML,EAAOiG,EAAMsI,GAEhD,GAAsB,QAAlBvO,EAAa,MAAjB,CAIA,IADA,IAAIob,GAA0B,EACrBlc,EAAI,EAAGA,EAAI+G,EAAKjgB,OAAQkZ,IAC/B,GAAiC,4BAA7B+G,EAAK/G,GAAW,OAAQ,KAAiC,CAC3Dkc,GAA0B,EAC1B,KACF,CAGF,IAAK,IAAIr1B,EAAI,EAAGA,EAAIkgB,EAAKjgB,OAAQD,IAAK,CAEpC,IAAIi1B,EAAchc,KAAKiB,SAASgG,EAAKlgB,GAAW,OAAQ,MACpDk1B,EAAcjc,KAAKiB,SAASgG,EAAKlgB,GAAW,OAAQ,MACpDonB,EAAQnO,KAAKsN,qBAAqBtM,EAAa,OACnDgb,EAAmB,MAAIhb,EAAa,MAAI,EAMxC,IAAIqb,EAAWrc,KAAKnB,OAAOhc,iBAAiBme,EAAa,OAAU,OAAKmN,EACpEmO,EAActc,KAAKnB,OAAOhc,iBAAiBme,EAAa,OAAU,OAAKhB,KAAKnB,OAAOhc,iBAAiBme,EAAa,OAAU,MAAEpF,SAASuS,IAAUiO,EAOlJC,GAC6B,0BAA7BpV,EAAKlgB,GAAW,OAAQ,MACxBk1B,EAAgB,IAAKjb,EAAU,IAQ/Bsb,GAC6B,4BAA7BrV,EAAKlgB,GAAW,OAAQ,MACxBk1B,EAAgB,IAAKjb,EAAU,IAR/BhB,KAAK8X,oBAAoB,CACvB7Q,KAAMA,EAAKlgB,GACX8wB,YAAY,IAEd7X,KAAKib,cAAc5Z,EAAM2a,EAAahc,KAAKmB,oBAAoB6a,EAAgB,IAAIzM,IAYtD,wBAA7BtI,EAAKlgB,GAAW,OAAQ,MACxBk1B,EAAgB,IAAKjb,EAAU,IAC9Bsb,GAAgBD,IAEjBrc,KAAK8X,oBAAoB,CACvB7Q,KAAMA,EAAKlgB,GACX8wB,YAAY,IAEd7X,KAAKib,cAAc5Z,EAAM2a,EAAahc,KAAKmB,oBAAoB6a,EAAgB,IAAIzM,GAEvF,CA5DoC,CA6DtC,EAEAqI,eAAgB,SAAS/W,GAAS,IAAA0b,EAAA,KAC3BjX,MAAMC,OAAOvjB,MAAMqjB,aAEnBrF,KAAKnB,OAAO8c,oBAEjB3b,KAAKwc,2BAA2Bxc,KAAMa,EAAQG,MAAOhB,KAAKR,oBAAqBqB,EAAQpQ,OAE7D,GAAtBoQ,EAAQgX,aAEYxd,MAApBwG,EAAQsD,WAAuBtD,EAAQsD,SAAW,KAEtDnE,KAAKnB,OAAO4E,SAASxc,KAAKyc,YAAW,WACnC6Y,EAAK1d,OAAO4E,SAASE,MAErB4Y,EAAKX,0BAA0B/a,EAAQG,MAAU,GAAGub,EAAK/c,oBAC3D,GAAGqB,EAAQsD,YACb,EAEA2T,oBAAqB,SAASjX,GAAS,IAAA4b,EAAA,KAChCnX,MAAMC,OAAOvjB,MAAMqjB,aAEnBrF,KAAKnB,OAAO8c,oBAEjB3b,KAAK0c,gCAAgC7b,EAAQoG,KAAMjH,KAAKR,qBAE9B,GAAtBqB,EAAQgX,aAEYxd,MAApBwG,EAAQsD,WAAuBtD,EAAQsD,SAAW,KAEtDnE,KAAKnB,OAAO4E,SAASxc,KAAKyc,YAAW,WACnC+Y,EAAK5d,OAAO4E,SAASE,MAErB8Y,EAAKE,+BAA+B9b,EAAQoG,KAAS,GAAGwV,EAAKjd,oBAC/D,GAAGqB,EAAQsD,YAEb,EAGAqY,2BAA4B,SAASnb,EAAMub,OAAQC,EAAepsB,GAChE,IACA,IAAKmsB,OAAQ,OAEb,GAAIC,EAAcD,OAAW,IAE3B,YADAC,EAAcD,OAAW,IAAGE,MAAM71B,MAAK,GAIzC,IAAM81B,EAAI/c,KAAKnB,OAAOme,UAAUC,UAAUL,OAAW,IAErD,IAAKG,EAAG,OAEK1iB,MAAT5J,IAAoBA,EAAQ,WAEhC,IAAMysB,KAAO,IAAIC,OAAOC,MAAMC,MAAMC,UAAU,CAC5C7nB,QAAS,KACTZ,OAAQ,EACRpE,MAAOA,EACP8sB,UAAW,MAGbL,KAAKM,KAAI,eAAAlyB,EAAAqO,mFAAAC,mBAAAC,MAAG,SAAAC,EAAgB0O,QAAM,OAAA5O,mBAAAK,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OACL,OAA3B8iB,KAAKO,QAAUb,OAAW,GAAC1iB,EAAAE,KAAA,EACrB8iB,KAAKQ,UAAUlV,QAAO,OAEuB,OADnD0U,KAAKE,MAAM,GAAGvrB,MAAM8rB,WAAa,2BACjCT,KAAKE,MAAM,GAAGvrB,MAAMiE,UAAY,oBAAmBoE,EAAAE,KAAA,EAE7C8iB,KAAKE,MAAM1nB,UAAS,OAC1BwnB,KAAKE,MAAM,GAAGvrB,MAAM+rB,iBAAmB,IAAK,wBAAA1jB,EAAAY,OAAA,GAAAhB,EAAA,KAC7C,gBAAA+jB,GAAA,OAAAvyB,EAAAwyB,MAAA,KAAApkB,UAAA,EARQ,GAUTwjB,KAAKa,KAAO,SAAUzd,GAEpB4c,KAAKO,QAAUb,OAAW,GAE1BM,KAAKE,MAAM,GAAGvrB,MAAMiD,YAAc,EAElCuM,EAAKxC,OAAO4E,SAASxc,KAAKyc,YAAW,WACnCrC,EAAKxC,OAAO4E,SAASE,MACrBuZ,KAAKQ,UAAU,MACfpd,GACF,GAAG,KACL,EAEA4c,KAAKM,KAAKxd,KAAKnB,OAAOme,WACtBE,KAAKc,YAAYjB,EAAEkB,sBAAsBC,WAAW,GAAI,IACxDhB,KAAKiB,aAAapB,EAAEqB,WAAYrB,EAAEsB,aAElCxB,EAAcD,OAAW,IAAK,CAC5B9jB,GAAIokB,KACJJ,MAAO,EAAC,GAEZ,CAAE,MAAOtzB,GACPC,QAAQmR,IAAIpR,GACZwW,KAAKnB,OAAOyf,UAAU,CACpBC,OAAQ,4CACRC,QAASh1B,EAAEolB,WACX6P,UAAWj1B,EAAEi1B,WAEjB,CACA,EAEA7C,0BAA2B,SAAS/3B,EAAIg5B,GACtC,IACA,GAAyBxiB,MAArBwiB,EAAch5B,GAAkB,OAIpC,GAFAg5B,EAAch5B,GAAIi5B,MAAMnZ,MAEpBkZ,EAAch5B,GAAIi5B,MAAQ,EAAG,OAEjC,IAAII,KAAOL,EAAch5B,GAAIiV,GAEzBuI,EAAOrB,KAAKnB,OAAOme,UACvBE,KAAKa,MAAK,WACR1c,EAAKqd,OAAOxB,MAAM,EACpB,WAEOL,EAAch5B,EACvB,CAAE,MAAO2F,GACPC,QAAQmR,IAAIpR,GACZwW,KAAKnB,OAAOyf,UAAU,CACpBC,OAAQ,2CACRC,QAASh1B,EAAEolB,WACX6P,UAAWj1B,EAAEi1B,WAEjB,CACA,EAEA/B,iCAA+Bre,iCAAA1E,mFAAAC,mBAAAC,MAAE,SAAAmB,EAAeiM,EAAM4V,GAAa,IAAAxR,EAAAvkB,EAAA,OAAA8S,mBAAAK,MAAA,SAAAgB,GAAA,cAAAA,EAAAd,KAAAc,EAAAb,MAAA,UAAAa,EAAAd,KAAA,EAE5D8M,EAAM,CAAFhM,EAAAb,KAAA,eAAAa,EAAAJ,OAAA,qBAELgiB,EAAc5V,EAAS,IAAI,CAAFhM,EAAAb,KAAA,QACe,OAA1CyiB,EAAc5V,EAAS,IAAG6V,MAAM71B,MAAK,GAAKgU,EAAAJ,OAAA,iBAKxCwQ,EAAI,KACCvkB,EAAI,EAAC,YAAEA,EAAIkZ,KAAKnB,OAAOme,UAAU2B,MAAM50B,KAAK/C,QAAM,CAAAiU,EAAAb,KAAA,YACrD4F,KAAKnB,OAAOme,UAAU2B,MAAM50B,KAAKjD,GAAO,IAAKmgB,EAAS,GAAC,CAAAhM,EAAAb,KAAA,gBAAAa,EAAAJ,OAAA,uBAEpB,OAAvCwQ,EAAIrL,KAAKnB,OAAOme,UAAU2B,MAAM50B,KAAKjD,GAAEmU,EAAAJ,OAAA,oBAHoB/T,IAAGmU,EAAAb,KAAA,mBAS3DiR,EAAG,CAAFpQ,EAAAb,KAAA,gBAAAa,EAAAJ,OAAA,kBAIuC,OAF7CwQ,EAAE+R,MAAM,GAAG,GAAGvrB,MAAM8rB,WAAa,yFACjCtS,EAAE+R,MAAM,GAAG,GAAGvrB,MAAMiD,YAAc,EAClCuW,EAAE+R,MAAM,GAAG,GAAGvrB,MAAM+sB,gBAAkB,QAAO3jB,EAAAb,KAAA,GAEvC4F,KAAKnB,OAAOggB,YAAW,WAEd,MAAXxT,EAAE+R,MAAa,CAAAniB,EAAAb,KAAA,gBAAAa,EAAAJ,OAAA,kBAEnBwQ,EAAE+R,MAAM,GAAG,GAAGvrB,MAAM+rB,kBAAoB,IAGxCf,EAAc5V,EAAS,IAAK,CAC1BnO,GAAIuS,EAAE+R,MAAM,GAAG,GACfN,MAAO,EAAC,IACT7hB,EAAAb,KAAA,iBAAAa,EAAAd,KAAA,GAAAc,EAAAN,GAAAM,EAAA,SAEDxR,QAAQmR,IAAGK,EAAAN,IACXqF,KAAKnB,OAAOyf,UAAU,CACpBC,OAAQ,iDACRC,QAASvjB,EAAAN,GAAEiU,WACX6P,UAAWxjB,EAAAN,GAAE8jB,YACb,yBAAAxjB,EAAAH,OAAA,GAAAE,EAAA,mBAEH,SAAA8jB,EAAAC,GAAA,OAAA1gB,iCAAAyf,MAAA,KAAApkB,UAAA,GAEDijB,+BAAgC,SAAS94B,EAAIg5B,GAC3C,IACA,GAAyBxiB,MAArBwiB,EAAch5B,GAAkB,OAIpC,GAFAg5B,EAAch5B,GAAIi5B,MAAMnZ,MAEpBkZ,EAAch5B,GAAIi5B,MAAQ,EAAG,OAEjC,IAAI7V,EAAO4V,EAAch5B,GAAIiV,GAE7BmO,EAAKpV,MAAM8rB,WAAa,yDACxB1W,EAAKpV,MAAM+rB,iBAAmB,EAC9B3W,EAAKpV,MAAMiD,YAAc,EACzBmS,EAAKpV,MAAM+sB,gBAAkB,cAEtB/B,EAAch5B,EACvB,CAAE,MAAO2F,GACPC,QAAQmR,IAAIpR,GACZwW,KAAKnB,OAAOyf,UAAU,CACpBC,OAAQ,gDACRC,QAASh1B,EAAEolB,WACX6P,UAAWj1B,EAAEi1B,WAEjB,CACA,EAEA3b,cAAY1E,cAAAzE,mFAAAC,mBAAAC,MAAE,SAAAuB,EAAe4jB,EAAKC,EAASC,EAAYC,EAAUC,GAAO,IAAAC,EAAAC,EAAA,OAAA1lB,mBAAAK,MAAA,SAAAuB,GAAA,cAAAA,EAAArB,KAAAqB,EAAApB,MAAA,UAEjE4F,KAAKnB,QAAWmB,KAAKnB,OAAOwG,YAAW,CAAA7J,EAAApB,KAAA,eAAAoB,EAAAX,OAAA,iBAmB1C,GAjBEwkB,EAAYthB,SAASwhB,eAAe,uBACpCD,GAAa,EAMfA,EAHAD,EAAUG,aAAeH,EAAUI,WACnCJ,EAAUK,aAKZ1f,KAAKnB,OAAO8gB,WAAW14B,KAAK,CAC1B+3B,IAAKA,EACLG,SAAUA,EACVF,QAASA,EACTG,QAASA,EACTF,WAAYA,EACZ5d,KAAM,IAAI4B,OAGRoc,EAAY,CAAF9jB,EAAApB,KAAA,eAAAoB,EAAAX,OAAA,wBAAAW,EAAApB,KAAA,GAER4F,KAAKnB,OAAOggB,YAAW,QAE7BQ,EAAUI,UAAYJ,EAAUK,aAAY,yBAAAlkB,EAAAV,OAAA,GAAAM,EAAA,UAE7C,SAAAwkB,EAAAC,EAAAC,EAAAC,EAAAC,GAAA,OAAA5hB,cAAA0f,MAAA,KAAApkB,UAAA,G,4DCnvHY,aAAApO,EAEZ4N,GAAW,IAr5CK+mB,EAo5CjBjnB,EAAG1N,EAAH0N,IASAE,EAAO,OA75CU+mB,EA45CMjnB,EAAIknB,OA55CA,CAE3BC,aAAY,SAACp2B,MACX,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,iCACLlM,KAAMA,MAEV,EACAq2B,cAAa,SAACC,GACZ,OAAOJ,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,mCACLlM,KAAMs2B,GAEV,EAEAC,qBAAoB,SAACv2B,MAEnB,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,2CACLlM,KAAMA,MAEV,EACAw2B,eAAc,SAACx2B,MAEb,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,oCACLlM,KAAMA,MAEV,EACAy2B,aAAY,SAACz2B,MACX,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,kCACLlM,KAAMA,MAEV,EACA02B,WAAU,SAAC12B,MACT,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,0BACLlM,KAAMA,MAEV,EACA22B,UAAS,SAAC32B,MACR,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,oBACLlM,KAAMA,MAEV,EACA42B,sBAAqB,SAACC,EAAU72B,MAC9B,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,mBAAqB2qB,EAAU,wBACpC72B,KAAMA,MAEV,EACA82B,oBAAmB,SAAC79B,GAClB,OAAOi9B,EAAMa,KAAK,qBAAuB99B,EAAO,uBAClD,EACA+9B,cAAa,SAACh3B,MACZ,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,6BACLlM,KAAMA,MAEV,EACAi3B,YAAW,SAACj3B,MACV,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,2BACLlM,KAAMA,MAEV,EACAk3B,eAAc,SAACl3B,MACb,GAAIA,KAAKm3B,IACP,IAAIA,EAAM,QAAUn3B,KAAKm3B,SAErBA,EAAM,GAEZ,OAAOjB,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,sCAAwClM,KAAKiK,KAAOktB,EACzDn3B,KAAMA,MAEV,EACAo3B,YAAW,SAACp3B,MACV,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,2BACLlM,KAAMA,MAEV,EACAq3B,sBAAqB,SAACr3B,MACpB,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,kCACLlM,KAAMA,MAEV,EACAs3B,kBAAiB,SAACt3B,MAChB,GAAIA,KAAKm3B,IACP,IAAIA,EAAM,QAAUn3B,KAAKm3B,SAErBA,EAAM,GAEZ,OAAOjB,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,yCAA2ClM,KAAKiK,KAAOktB,EAC5Dn3B,KAAMA,MAEV,EACAu3B,eAAc,SAACv3B,MACb,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,8BACLlM,KAAMA,MAEV,EACAw3B,yBAAwB,SAACx3B,MACvB,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,qCACLlM,KAAMA,MAEV,EACAy3B,kBAAiB,SAACnB,GAChB,OAAOJ,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,iCACLlM,KAAMs2B,GAEV,EACAoB,YAAW,SAACC,GACV,OAAOzB,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,8CACLlM,KAAM23B,GAEV,EAGAC,YAAW,SAACf,GACV,OAAOX,EAAMa,KAAK,0BAA4BF,EAAW,IAC3D,EACAgB,gBAAe,WACb,OAAO3B,EAAMa,KAAK,8BACpB,EACAe,gBAAe,SAACjB,GACd,OAAOX,EAAMa,KAAK,mBAAqBF,EAAW,kBACpD,EACAkB,gBAAe,SAAC/3B,MAEd,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,8BACLlM,KAAMA,MAEV,EACAg4B,mBAAkB,WAChB,OAAO9B,EAAM,CACX1B,OAAQ,SACRtoB,IAAK,+BAET,EACA+rB,uBAAsB,WAIpB,OAAO/B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,8BACLlM,KANS,CACTk4B,YAAY,IAOhB,EACAC,YAAW,SAACluB,MACV,OAAOisB,EAAMa,KAAK,8BAAgC9sB,KAAO,IAC3D,EAEAmuB,SAAQ,WACN,OAAOlC,EAAMa,KAAK,gBACpB,EAGAsB,aAAY,WACR,OAAOnC,EAAMa,KAAK,oBACpB,EAWFuB,qBAAoB,SAACzjB,EAAMgiB,GACzB,IAAI0B,EAKJ,OAJAA,EAAS,SAAW1B,EAChBhiB,IACFA,EAAO,GAEFqhB,EAAMa,KAAK,qDAAuDliB,EAAO0jB,EAClF,EAEAC,gBAAe,SAACv/B,EAAM+G,MACpB,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,sBAAwBjT,EAAO,qBACpC+G,KAAMA,MAEV,EA+EAy4B,QAAO,SAAC5jB,GACN,OAAOqhB,EAAMa,KAAK,+BAAiCliB,EACrD,EACA6jB,SAAQ,SAAC7jB,GACP,OAAOqhB,EAAMa,KAAK,gCAAkCliB,EACtD,EACA8jB,QAAO,SAAC9jB,GACN,OAAOqhB,EAAMa,KAAK,+BAAiCliB,EACrD,EACA+jB,QAAO,SAAC/jB,GACN,OAAOqhB,EAAMa,KAAK,+BAAiCliB,EACrD,EACAgkB,SAAQ,SAAChkB,GACP,OAAOqhB,EAAMa,KAAK,sBAAwBliB,EAC5C,EACAikB,cAAa,SAACjkB,GACZ,OAAOqhB,EAAMa,KAAK,2BAA6BliB,EACjD,EAGAkkB,SAAQ,SAAC9/B,GACP,OAAOi9B,EAAMa,KAAK,iBAAmB99B,EAAO,IAC9C,EAGA+/B,WAAU,WACR,OAAO9C,EAAMa,KAAK,kBACpB,EACAkC,kBAAiB,SAACj5B,MAChB,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,8BACLlM,KAAMA,MAEV,EACAk5B,oBAAmB,SAACC,EAAWC,EAAYvC,GACzC,IAAI0B,EAAS,GAOb,OANIa,IACFb,EAAS,eACL1B,IACF0B,EAASA,EAAS,aAAe1B,IAG9BX,EAAMa,KAAK,wBAA0BoC,EAAY,IAAMZ,EAChE,EACAc,oBAAmB,SAACr5B,MAClB,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,4BACLlM,KAAMA,MAEV,EACAs5B,qBAAoB,SAACzC,EAAUhiB,EAAM0kB,GACnC,IAAMv5B,KAAO,CACX,SAAY62B,GAGV0C,IAAQv5B,KAAKu5B,QAAS,GAC1B,IAAIhB,EAAS,GAIb,OAHI1jB,IACF0jB,EAAS,SAAW1jB,GAEfqhB,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,4CAA8CqsB,EACnDv4B,KAAMA,MAEV,EACAw5B,6BAA4B,SAACx5B,MAE3B,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,uCACLlM,KAAMA,MAEV,EACAy5B,cAAa,SAAC5C,EAAUhiB,GACtB,IAAI0jB,EAAS,GAKb,OAJAA,EAAS,sBAAwB1B,EAC7BhiB,IACF0jB,EAASA,EAAS,SAAW1jB,GAExBqhB,EAAMa,KAAK,qBAAuBwB,EAC3C,EACAmB,oBAAmB,SAACC,EAAO9kB,GACzB,IAAI0jB,EAAS,GAKb,OAJAA,EAAS,UAAYoB,EACjB9kB,IACF0jB,EAASA,EAAS,SAAW1jB,GAExBqhB,EAAMa,KAAK,qBAAuBwB,EAI3C,EACAqB,sBAAqB,SAACC,EAAShlB,GAC7B,IAAI0jB,EAAS,GAKb,OAJAA,EAAS,YAAcsB,EACnBhlB,IACF0jB,EAASA,EAAS,SAAW1jB,GAExBqhB,EAAMa,KAAK,qBAAuBwB,EAG3C,EACAuB,wBAAuB,SAACjD,GACtB,IAAI0B,EAEJ,OADAA,EAAS,cAAgB1B,EAClBX,EAAMa,KAAK,qBAAuBwB,EAC3C,EACAwB,aAAY,SAAC9gC,GACX,OAAOi9B,EAAMa,KAAK,qBAAuB99B,EAAO,IAClD,EAEA+gC,gBAAe,SAACh6B,MACd,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,qBACLlM,KAAMA,MAEV,EACAi6B,cAAa,SAAChhC,EAAM+G,MAClB,OAAOk2B,EAAM,CACX1B,OAAQ,QACRtoB,IAAK,qBAAuBjT,EAAO,IACnC+G,KAAMA,MAEV,EACAk6B,gBAAe,SAACjhC,GACd,OAAOi9B,EAAM,CACX1B,OAAQ,SACRtoB,IAAK,qBAAuBjT,EAAO,KAEvC,EACAkhC,iBAAgB,SAAClhC,GACf,OAAOi9B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,qBAAuBjT,EAAO,aAEvC,EACAmhC,mBAAkB,SAACnhC,GACjB,OAAOi9B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,qBAAuBjT,EAAO,eAEvC,EACAohC,uBAAsB,SAACphC,EAAMqhC,EAAUC,GAKrC,OAAOrE,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,qBAAuBjT,EAAO,8BACnC+G,KAPW,CACXs6B,SAAUA,EACVC,QAASA,IAOb,EACAC,oBAAmB,SAACx6B,MAClB,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,+BACLlM,KAAMA,MAEV,EACAy6B,sBAAqB,SAACz6B,MACpB,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,kCACLlM,KAAMA,MAEV,EACA06B,cAAa,SAAC16B,MACZ,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,yBACLlM,KAAMA,MAEV,EACA26B,cAAa,SAAC36B,MACZ,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,yBACLlM,KAAMA,MAEV,EACA46B,qBAAoB,SAACC,EAAW76B,MAE9B,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,mBAAqB2uB,EAAY,6BACtC76B,KAAMA,MAGV,EACA86B,sBAAqB,WACnB,OAAO5E,EAAMa,KAAK,4CACpB,EACAgE,cAAa,SAAC/6B,MAEZ,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,iCACLlM,KAAMA,MAEV,EAGAg7B,WAAU,SAAC/hC,GACT,OAAOi9B,EAAMa,KAAK,kBAAoB99B,EAAO,IAC/C,EACAgiC,4BAA2B,SAAChiC,GAC1B,OAAOi9B,EAAMa,KAAK,yDAA2D99B,EAC/E,EACAiiC,iBAAgB,SAACjiC,EAAM4b,GACrB,IAAIsmB,EAAQ,GAIZ,OAHItmB,IACFsmB,EAAQA,EAAQ,SAAWtmB,GAEtBqhB,EAAMa,KAAK,qBAAuB99B,EAAO,uBAAyBkiC,EAC3E,EACAC,wBAAuB,SAACniC,EAAM4b,GAC5B,IAAIsmB,EAAQ,GAIZ,OAHItmB,IACFsmB,EAAQA,EAAQ,SAAWtmB,GAEtBqhB,EAAMa,KAAK,qBAAuB99B,EAAO,+BAAiCkiC,EACnF,EACAE,uBAAsB,SAACpiC,EAAM4b,GAC3B,IAAIsmB,EAAQ,GAIZ,OAHItmB,IACFsmB,EAAQA,EAAQ,SAAWtmB,GAEtBqhB,EAAMa,KAAK,qBAAuB99B,EAAO,8BAAgCkiC,EAAO,CACrFG,UAAU,GAEd,EAGAC,wBAAuB,SAACC,EAAW3mB,GAOjC,OAHKA,IACHA,EAAO,GAEFqhB,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,sDAAwD2I,EAC7D7U,KATW,CACX,WAAcw7B,IAUlB,EACAC,sBAAqB,SAACxiC,GACpB,OAAOi9B,EAAMa,KAAK,sBAAwB99B,EAAO,+BACnD,EACAyiC,cAAa,SAACziC,GACZ,OAAOi9B,EAAMa,KAAK,sBAAwB99B,EAAO,IACnD,EACA0iC,+BAA8B,SAACH,EAAW3E,EAAUhiB,GAQlD,OAHKA,IACHA,EAAO,GAEFqhB,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,8DAAgE2I,EACrE7U,KAVW,CACX,WAAcw7B,EACd,SAAY3E,IAUhB,EACA+E,mCAAkC,SAACJ,EAAW3E,EAAUhiB,GAQtD,OAHKA,IACHA,EAAO,GAEFqhB,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,oEAAsE2I,EAC3E7U,KAVW,CACX,WAAcw7B,EACd,SAAY3E,IAUhB,EAGAgF,cAAa,SAAC5iC,GACZ,OAAOi9B,EAAMa,KAAK,mBAAqB99B,EAAO,UAChD,EAEA6iC,iBAAgB,SAAC97B,MACf,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,sBACLlM,KAAMA,MAEV,EACA+7B,eAAc,SAAC9iC,EAAM+G,MACnB,OAAOk2B,EAAM,CACX1B,OAAQ,QACRtoB,IAAK,sBAAwBjT,EAAO,IACpC+G,KAAMA,MAEV,EACAg8B,iBAAgB,SAAC/iC,GACf,OAAOi9B,EAAM,CACX1B,OAAQ,SACRtoB,IAAK,sBAAwBjT,EAAO,KAExC,EAEAgjC,gBAAe,SAAChjC,GACd,OAAOi9B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,sBAAwBjT,EAAO,uBAExC,EACAijC,mBAAkB,SAACjjC,GACjB,OAAOi9B,EAAMa,KAAK,mCAAqC99B,EAAO,IAChE,EAEAkjC,yBAAwB,SAACtB,GACvB,OAAO3E,EAAMa,KACX,mBAAqB8D,EAAY,4BAErC,EAIAuB,2BAA0B,SAACnjC,GACzB,OAAOi9B,EAAMa,KAAK,2BAA6B99B,EAAO,YACxD,EACAojC,qBAAoB,SAACpjC,EAAM+G,MACzB,OAAOk2B,EAAM,CACX1B,OAAQ,QACRtoB,IAAK,2BAA6BjT,EAAO,IACzC+G,KAAMA,MAEV,EACAs8B,sBAAqB,SAACrjC,GACpB,OAAOi9B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,2BAA6BjT,EAAO,WAE7C,EACAsjC,uBAAsB,SAACtjC,GACrB,OAAOi9B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,2BAA6BjT,EAAO,YAE7C,EACAujC,uBAAsB,SAACvjC,GACrB,OAAOi9B,EAAM,CACX1B,OAAQ,SACRtoB,IAAK,2BAA6BjT,EAAO,KAE7C,EAEAwjC,+BAA8B,SAACC,EAAwB7nB,EAAMgiB,EAAU8F,GAErE,IAAIpE,EAAS,GASb,OAPAA,EAAS,SAAW1B,EAChB8F,IAGFpE,GADwB,eAAiBoE,GAIpCzG,EAAMa,KAAK,2BAA4B2F,EAAyB,uBAAyB7nB,EAAO0jB,EACzG,EACAqE,2BAA0B,SAACF,EAAwBnjC,EAAQsb,GAIzD,OAHKA,IACHA,EAAO,GAEFqhB,EAAMa,KACX,2BAA6B2F,EAAyB,wBAA0BnjC,EAAS,SAAWsb,EAExG,EACAgoB,iCAAgC,SAACH,EAAwB7nB,GAIvD,OAHKA,IACHA,EAAO,GAEFqhB,EAAMa,KACX,2BAA6B2F,EAAyB,6BAA+B7nB,EAEzF,EAGAioB,aAAY,SAAC98B,MACX,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,kBACLlM,KAAMA,MAEV,EACA+8B,WAAU,SAAC9jC,EAAM+G,MACf,OAAOk2B,EAAM,CACX1B,OAAQ,QACRtoB,IAAK,kBAAoBjT,EAAO,IAChC+G,KAAMA,MAEV,EACAg9B,aAAY,SAAC/jC,GACX,OAAOi9B,EAAM,CACX1B,OAAQ,SACRtoB,IAAK,kBAAoBjT,EAAO,KAEpC,EACAgkC,UAAS,SAAChkC,GACR,OAAOi9B,EAAMa,KAAK,kBAAoB99B,EAAO,IAC/C,EACAikC,kBAAiB,SAACjkC,GAChB,OAAOi9B,EAAMa,KAAK,kBAAoB99B,EAAO,iBAC/C,EACAkkC,qBAAoB,SAAClkC,GACnB,OAAOi9B,EAAMa,KAAK,kBAAoB99B,EAAO,gBAC/C,EACAmkC,cAAa,SAACnkC,EAAM+G,MAClB,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,kBAAoBjT,EAAO,mBAChC+G,KAAMA,MAEV,EACAq9B,WAAU,SAACvjC,EAAIkG,MACb,OAAOk2B,EAAM,CACX1B,OAAQ,QACRtoB,IAAK,sBAAwBpS,EAAK,IAClCkG,KAAMA,MAEV,EACAs9B,kBAAiB,SAACrkC,EAAM+G,MACtB,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,kBAAoBjT,EAAO,gBAChC+G,KAAMA,MAEV,EACAu9B,cAAa,SAACtkC,EAAM+G,MAClB,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,kBAAoBjT,EAAO,mBAChC+G,KAAMA,MAEV,EACAw9B,gBAAe,SAACx9B,MACd,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,mCACLlM,KAAMA,MAEV,EACAy9B,cAAa,SAACz9B,MACZ,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,iCACLlM,KAAMA,MAEV,EACA09B,kBAAiB,SAACC,GAChB,OAAOzH,EAAMa,KAAK,4BAA8B4G,EAClD,EACAC,SAAQ,SAAC3kC,GACP,OAAOi9B,EAAMa,KAAK,iBAAmB99B,EAAO,IAC9C,EACA4kC,YAAW,SAAC79B,MACV,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,iBACLlM,KAAMA,MAEV,EACA89B,UAAS,SAAChkC,EAAIkG,MACZ,OAAOk2B,EAAM,CACX1B,OAAQ,QACRtoB,IAAK,iBAAmBpS,EAAK,IAC7BkG,KAAMA,MAEV,EAEA+9B,0BAAyB,SAAC/9B,MAExB,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,mCACLlM,KAAMA,MAEV,EACAg+B,iBAAgB,SAACC,GAIf,OAAO/H,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,yCACLlM,KANS,CACT,KAAQi+B,IAYZ,EACAC,eAAc,SAACl+B,MACb,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,mBACLlM,KAAMA,MAEV,EACAm+B,aAAY,SAACrkC,EAAIkG,MACf,OAAOk2B,EAAM,CACX1B,OAAQ,QACRtoB,IAAK,mBAAqBpS,EAAK,IAC/BkG,KAAMA,MAEV,EACAo+B,eAAc,SAACtkC,GACb,OAAOo8B,EAAM,CACX1B,OAAQ,SACRtoB,IAAK,mBAAqBpS,EAAK,KAEnC,EAGAukC,eAAc,SAACJ,GACb,OAAO/H,EAAMa,KAAK,gBAAkBkH,EAAa,qBACnD,EAGAK,gBAAe,SAACL,EAAYppB,GAC1B,IAAIsmB,EAAQ,kBAAoB8C,EAIhC,OAHIppB,IACFsmB,EAAQA,EAAQ,SAAWtmB,GAEtBqhB,EAAMa,KAAK,kBAAoBoE,EACxC,EACAoD,WAAU,SAACC,EAAY3pB,GACrB,IAAIsmB,EAAQ,GAIZ,OAHItmB,IACFsmB,EAAQA,EAAQ,SAAWtmB,GAEtBqhB,EAAMa,KAAK,kBAAoByH,EAAa,IAAMrD,EAC3D,EACAsD,kBAAiB,SAACR,EAAYS,EAAQ7pB,GACpC,IAAIsmB,EAAQ,iBAAmB8C,EAAa,wBAA0BS,EAItE,OAHI7pB,IACFsmB,EAAQA,EAAQ,SAAWtmB,GAEtBqhB,EAAMa,KAAK,kBAAoBoE,EACxC,EACAwD,cAAa,SAAC3+B,MACZ,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,kBACLlM,KAAMA,MAEV,EACA4+B,YAAW,SAAC9kC,EAAIkG,MACd,OAAOk2B,EAAM,CACX1B,OAAQ,QACRtoB,IAAK,kBAAoBpS,EAAK,IAC9BkG,KAAMA,MAEV,EACA6+B,cAAa,SAAC/kC,GACZ,OAAOo8B,EAAM,CACX1B,OAAQ,SACRtoB,IAAK,kBAAoBpS,EAAK,KAElC,EAGAglC,gBAAe,SAACjI,EAAUhiB,GACxB,IAAIsmB,EAAQ,mBAAqBtE,EAIjC,OAHIhiB,IACFsmB,EAAQA,EAAQ,SAAWtmB,GAEtBqhB,EAAMa,KAAK,8BAAgCoE,EACpD,EACA4D,eAAc,SAACC,EAAWnqB,GACxB,IAAIsmB,EAAQ,GAIZ,OAHItmB,IACFsmB,EAAQA,EAAQ,SAAWtmB,GAEtBqhB,EAAMa,KAAK,8BAAgCiI,EAAY,IAAM7D,EACtE,EACA8D,kBAAiB,SAACj/B,MAChB,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,8BACLlM,KAAMA,MAEV,EACAk/B,gBAAe,SAACplC,EAAIkG,MAClB,OAAOk2B,EAAM,CACX1B,OAAQ,QACRtoB,IAAK,8BAAgCpS,EAAK,IAC1CkG,KAAMA,MAEV,EACAm/B,kBAAiB,SAACrlC,GAChB,OAAOo8B,EAAM,CACX1B,OAAQ,SACRtoB,IAAK,8BAAgCpS,EAAK,KAE9C,EACAslC,iBAAgB,SAACJ,EAAWh/B,MAC1B,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,8BAAgC8yB,EAAhC,wBACLh/B,KAAMA,MAGV,EAIAyQ,cAAa,SAAComB,GAIZ,OAAOX,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,kCACLlM,KANW,CACX62B,SAAUA,IAOd,EACA1lB,WAAU,SAACmlB,GAIT,OAAOJ,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,+BACLlM,KANW,CACXs2B,MAAOA,IAOX,EACA+I,SAAQ,SAAC9G,GACP,IAAI4C,EAAQ,GAIZ,OAHI5C,IACF4C,EAAQ,IAAM5C,GAETrC,EAAMa,KAAK,mBAAqBoE,EACzC,EACAmE,QAAO,SAACzI,GACN,GAAIA,EACF,OAAOX,EAAMa,KAAK,mBAAqBF,EAAW,IAEtD,EACA0I,SAAQ,SAAC1I,EAAU72B,MACjB,OAAOk2B,EAAM,CACX1B,OAAQ,QACRtoB,IAAK,mBAAqB2qB,EAAW,IACrC72B,KAAMA,MAEV,EACAw/B,iBAAgB,SAAC1lC,EAAIkG,MACnB,OAAOk2B,EAAM,CACX1B,OAAQ,QACRtoB,IAAK,uBAAyBpS,EAAK,IACnCkG,KAAMA,MAEV,EACAy/B,SAAQ,SAAC5I,EAAU72B,MACjB,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,mBAAqB2qB,EAAW,cACrC72B,KAAMA,MAEV,EACA0/B,WAAU,SAACC,EAAI3/B,MACb,OAAOk2B,EAAM,CACX1B,OAAQ,QACRtoB,IAAK,qBAAuByzB,EAAK,IACjC3/B,KAAMA,MAEV,EACA4/B,WAAU,SAAC/I,GACT,OAAOX,EAAM,CACX1B,OAAQ,SACRtoB,IAAK,mBAAqB2qB,EAAW,KAEzC,EAGAgJ,oBAAmB,SAACC,GAClB,IAAIvH,EAAS,GAIb,OAHIuH,IACFvH,EAAS,gBAAkBuH,GAEtB5J,EAAMa,KAAK,2CAA6CwB,EACjE,EAGAwH,YAAW,SAAC//B,MACV,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,wBACLlM,KAAMA,MAEV,EACAggC,UAAS,SAAC/mC,EAAM+G,MACd,OAAOk2B,EAAM,CACX1B,OAAQ,QACRtoB,IAAK,mBAAqBjT,EAAO,IACjC+G,KAAMA,MAEV,EACAigC,cAAa,SAAChnC,EAAM+G,MAClB,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,mBAAqBjT,EAAO,eACjC+G,KAAMA,MAEV,EACAkgC,YAAW,SAACjnC,GACV,OAAOi9B,EAAM,CACX1B,OAAQ,SACRtoB,IAAK,mBAAqBjT,EAAO,KAErC,EACAknC,iBAAgB,SAACtrB,EAAMgiB,GACrB,IAAI0B,EAAS,GAIb,YAHgBjoB,IAAbumB,IACD0B,EAAS,SAAW1B,GAEfX,EAAMa,KAAK,gDAAkDliB,EAAO0jB,EAC7E,EACA6H,aAAY,SAACvrB,EAAMgiB,GACjB,IAAI0B,EAAS,GAIb,YAHgBjoB,IAAbumB,IACD0B,EAAS,SAAW1B,GAEfX,EAAMa,KAAK,2CAA6CliB,EAAO0jB,EACxE,EACA8H,oBAAmB,SAACxrB,EAAMyrB,GAGxB,IAAMC,EAAcD,EAAI,IAAHttB,OAAOstB,GAAM,GAClC,OAAOpK,EAAMa,KAAK,8CAAD/jB,OAA+C6B,GAAI7B,OAAGutB,GACzE,EACAC,2BAA0B,SAACvnC,GACzB,OAAOi9B,EAAMa,KAAK,sBAAwB99B,EAAO,8BACnD,EACAwnC,UAAS,SAACxnC,GACR,OAAOi9B,EAAMa,KAAK,sBAAwB99B,EAAO,gBACnD,EACAynC,wBAAuB,SAACznC,EAAM+G,MAC5B,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,sBAAwBjT,EAAO,wBACpC+G,KAAMA,MAEV,EAEA2gC,eAAc,SAAC9rB,EAAMgiB,EAAU+J,EAAYrnC,EAAQE,EAAYkjC,GAC7D,IAAIpE,EAAS,GAuBb,OArBAA,EAAS,SAAW1B,EAChB+J,IAEFrI,GADqB,eAAiBqI,GAIpCrnC,IAGFg/B,GADoB,WAAah/B,GAG/BE,IAEF8+B,GADwB,eAAiB9+B,GAGvCkjC,IAGFpE,GADwB,eAAiBoE,GAIpCzG,EAAMa,KAAK,sCAAwCliB,EAAO0jB,EACnE,EACAsI,aAAY,SAAC5nC,GACX,OAAOi9B,EAAMa,KAAK,uBAAyB99B,EAAO,IACpD,EACA6nC,eAAc,SAAC7nC,GACb,OAAOi9B,EAAMa,KAAK,yBAA2B99B,EAAO,IACtD,EACA8nC,mBAAkB,WAChB,OAAO7K,EAAMa,KAAK,2BACpB,EACAiK,oBAAmB,SAACnsB,EAAMosB,GACxB,IAAIC,EAAU,GAId,OAHID,IACFC,EAAU,MAAQD,GAEb/K,EAAMa,KAAK,2CAA6CliB,EAAOqsB,EACxE,EAEAC,cAAa,SAACtsB,EAAMrZ,EAAUylC,EAAQG,GACpC,IAAIF,EAAU,GACVD,IACFC,EAAU,MAAQD,GAEpB,IAAII,EAAY,GACb7lC,IACD6lC,EAAY,aAAe7lC,GAE7B,IAAI8lC,EAAS,GAKb,OAJGF,IACDE,EAAS,UAAYF,GAGhBlL,EAAMa,KAAK,qCAAuCliB,EAAOwsB,EAAYH,EAAUI,EACxF,EACAC,iBAAgB,SAAC1sB,GACf,OAAOqhB,EAAMa,KAAK,mCAAqCliB,EACzD,EACA2sB,kBAAiB,WACf,OAAOtL,EAAMa,KAAK,iCACpB,EACA0K,sBAAqB,SAACC,GACpB,OAAOxL,EAAMa,KAAK,gCAAkC2K,EAAS,IAC/D,EACAC,6BAA4B,SAACD,GAC3B,OAAOxL,EAAMa,KAAK,wCAA0C2K,EAAS,IACvE,EACAE,mBAAkB,SAAC3oC,GACjB,OAAOi9B,EAAMa,KAAK,2CAA6C99B,EAAO,IACxE,EACA4oC,0BAAyB,SAAC5oC,GACxB,OAAOi9B,EAAMa,KAAK,wCAA0C99B,EAAO,IACrE,EAEA6oC,wBAAuB,SAACJ,GACtB,OAAOxL,EAAMa,KAAK,mCAAqC2K,EAAS,IAClE,EACAK,oBAAmB,SAAClL,GAClB,OAAOX,EAAMa,KAAK,mCAAqCF,EAAW,IACpE,EACAmL,kBAAiB,SAACnL,GAChB,OAAOX,EAAMa,KAAK,iCAAmCF,EAAW,IAClE,EAEAoL,iBAAgB,SAACnrB,GACf,IAAIorB,EAAc,GACd3J,EAAS,GAoBb,OAlBIzhB,EAAQtb,UACV0mC,EAAYhlC,KAAK,YAAc4Z,EAAQtb,UAErCsb,EAAQxd,OACV4oC,EAAYhlC,KAAK,SAAW4Z,EAAQxd,OAElCwd,EAAQqrB,MACVD,EAAYhlC,KAAK,QAAU4Z,EAAQqrB,MAElCrrB,EAAQsrB,YACTF,EAAYhlC,KAAK,kBAAoB4Z,EAAQsrB,YAE5CtrB,EAAQurB,eACTH,EAAYhlC,KAAK,kBAAoB4Z,EAAQurB,eAE3CH,EAAYjlC,OAAS,IACvBs7B,EAAS2J,EAAYI,KAAK,MAErBpM,EAAMa,KAAK,6BAA+BwB,EAEnD,EACAgK,8BAA6B,SAACjpC,GAC5B,OAAO48B,EAAMa,KAAK,qDAAuDz9B,EAC3E,EAIAkpC,sBAAqB,SAACd,GACpB,OAAOxL,EAAMa,KAAK,gCAAkC2K,EAAS,IAC/D,EACAe,kBAAiB,WACf,OAAOvM,EAAMa,KAAK,iCACpB,EACA2L,4BAA2B,SAAC7L,GAC1B,OAAOX,EAAMa,KAAK,6CAA+CF,EAAW,IAC9E,EAIA8L,mBAAkB,WAChB,OAAOzM,EAAMa,KAAK,gCACpB,EACA6L,cAAa,SAAC9oC,GACZ,OAAOo8B,EAAM,CACX1B,OAAQ,QACRtoB,IAAK,mBAAqBpS,EAAK,IAC/BkG,KAAM,CACJ6iC,SAAS,IAGf,EACAC,kBAAiB,SAACC,GAMhB,OAHIA,GAC+BC,YAAA,UAE5B9M,EAAMa,KAAK,0BACpB,EAEAkM,eAAc,SAACpM,GACb,OAAOX,EAAMa,KAAK,mBAAqBF,EAAW,IACpD,EACAqM,gBAAe,SAACrM,EAAU72B,MACxB,OAAOk2B,EAAM,CACX1B,OAAQ,QACRtoB,IAAK,kBAAoB2qB,EAAW,IACpC72B,KAAMA,MAEV,EACAmjC,WAAU,SAACtuB,GACT,OAAOqhB,EAAMa,KAAK,wBAA0BliB,EAC9C,EAEAuuB,aAAY,SAACpjC,MACX,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,wBACLlM,KAAMA,MAEV,EACAqjC,aAAY,SAACxM,GACX,OAAOX,EAAM,CACX1B,OAAQ,MACRtoB,IAAK,mBAAqB2qB,EAAW,mBAEzC,EACAyM,aAAY,SAACzM,GACX,OAAOX,EAAM,CACX1B,OAAQ,MACRtoB,IAAK,mBAAqB2qB,EAAW,mBAEzC,EAEA0M,UAAS,WACP,OAAOrN,EAAMa,KAAK,6BACpB,EAIAyM,WAAU,WACR,OAAOtN,EAAMa,KAAK,4BACpB,EACA0M,KAAI,SAACzjC,MAEH,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,uBACLlM,KAAMA,MAEV,EACA0jC,OAAM,SAAC7M,GACL,OAAOX,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,yBACLlM,KAAM,CACJ62B,SAAUA,IAGhB,EACA8M,OAAM,SAAC3jC,MACL,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,yBACLlM,KAAMA,MAEV,EACA4jC,WAAU,SAAC5jC,MACT,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,wBACLlM,KAAMA,MAEV,EACA6jC,aAAY,SAAC7jC,MACX,OAAOk2B,EAAM4N,MAAM,2BAA4B9jC,KAAM,CACnDs7B,UAAU,GAEd,EACAyI,IAAG,SAAC/jC,MACF,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,sBACLlM,KAAMA,KACN8W,QAAS,CACPwkB,UAAU,IAGhB,EACA0I,oBAAmB,SAAChkC,MAClB,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,sCACLlM,KAAMA,MAEV,EACAikC,eAAc,SAACjkC,MACb,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,4CAA8CiU,KAAKE,SACxDrgB,KAAMA,MAEV,EACAkkC,QAAO,SAACC,GAIN,OAHKA,IACHA,EAAQ,WAEHjO,EAAMa,KAAK,iCAAmCoN,EACvD,EACAC,YAAW,WACT,OAAOlO,EAAMa,KAAK,+BACpB,EAGAsN,aAAY,WACV,OAAOnO,EAAMa,KAAK,wBACpB,EACAuN,YAAW,SAACtkC,MACV,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,kBACLlM,KAAMA,MAEV,EACAukC,UAAS,SAACvkC,MACR,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,gBACLlM,KAAMA,MAEV,EACAwkC,cAAa,SAACxkC,MACZ,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,oBACLlM,KAAMA,MAEV,EAGAykC,UAAS,SAACxrC,EAAM+G,MACd,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,gBAAkBjT,EAAO,eAC9B+G,KAAMA,MAEV,EACA0kC,aAAY,SAACzrC,EAAM+G,MACjB,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,gBAAkBjT,EAAO,kBAC9B+G,KAAMA,MAEV,EACA2kC,kBAAiB,SAAC1rC,EAAM4b,GAEtB,OAAOqhB,EAAMa,KAAK,gBAAkB99B,EAAO,0BAA4B4b,EACzE,EACA+vB,aAAY,SAAC3rC,EAAM+G,MAEjB,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,gBAAkBjT,EAAO,kBAC9B+G,KAAMA,MAEV,EAGA6kC,aAAY,SAAC5rC,GACX,OAAOi9B,EAAMa,KAAK,sBAAwB99B,EAAO,IACnD,EACA6rC,kBAAiB,SAAChrC,GAChB,OAAOo8B,EAAM,CACX1B,OAAQ,SACRtoB,IAAK,8BAAgCpS,EAAK,KAE9C,EACAirC,eAAc,SAAC/kC,MACb,OAAOk2B,EAAM,CACX1B,OAAQ,OACRtoB,IAAK,8BACLlM,KAAMA,MAEV,EACAglC,qBAAoB,SAACxpC,EAAUqZ,GAC7B,IAAI0jB,EAAS,GAOb,OANI1jB,IACFA,EAAO,GAELrZ,IACF+8B,EAAS,aAAe/8B,GAEnB06B,EAAMa,KAAK,8BAAgCliB,EAAO0jB,EAC3D,EACA0M,gBAAe,SAAChsC,GACd,OAAOi9B,EAAMa,KAAK,wBAA0B99B,EAAO,IACrD,EAEAisC,iBAAgB,SAAC1pC,EAAUqZ,GACzB,IAAI0jB,EAAS,GAOb,OANI1jB,IACFA,EAAO,GAELrZ,IACF+8B,EAAS,aAAe/8B,GAEnB06B,EAAMa,KAAK,0BAA4BliB,EAAO0jB,EACvD,EACA4M,YAAW,SAAClsC,GACV,OAAOi9B,EAAMa,KAAK,oBAAsB99B,EAAO,IACjD,EAEAmsC,WAAU,SAACC,EAAYC,GACrB,OAAOpP,EAAMa,KAAK,gDAAD/jB,OAAiDsyB,EAAM,OAAAtyB,OAAMqyB,EAAU,aAC1F,IAmBD,C,mCC95CD,6BAGAn3B,UAAIC,IAAIo3B,IAAa,CAEnBC,UAAU,EACVC,eAAe,EAGfC,gBAAiB,CACfC,WAAY,MACZnpB,UAAW,K,8CCsFTopB,G,kNAAU,CAMdC,mBAAoB,WAClB,IAAMC,EAAO9xB,SAAS+xB,cAAc,UAC9BC,EAAUhyB,SAAS+xB,cAAc,OACnCE,EAAW,KACXC,MAAQ,KAERjwB,KAAKkwB,QACPD,MAAQjwB,KAAKmwB,QAAQC,MAAMpwB,KAAKkwB,WAEhCD,MAAQlyB,SAAS+xB,cAAc,UACzBO,aAAa,KAAM,eACzBN,EAAQl+B,MAAMy+B,gBAAkB,UAChCN,EAAWjyB,SAAS+xB,cAAc,OAClCG,MAAMI,aAAa,MAAOrwB,KAAKuwB,UAC3BvwB,KAAKwwB,eAAeP,MAAMI,aAAa,YAAY,GACnDrwB,KAAKywB,YAAYR,MAAMI,aAAa,QAASrwB,KAAKywB,YAClDzwB,KAAK0wB,aAAYT,MAAMje,YAAc,aACzCge,EAASW,YAAYV,OACrBjwB,KAAK4wB,IAAID,YAAYX,IAGnBhwB,KAAK6wB,WAAWhB,EAAKQ,aAAa,QAASrwB,KAAK6wB,WAChD7wB,KAAK8wB,WAAWjB,EAAKQ,aAAa,QAASrwB,KAAK8wB,WAChD9wB,KAAK+wB,YAAYlB,EAAKQ,aAAa,SAAUrwB,KAAK+wB,YACtDhB,EAAQY,YAAYd,GAEhB7vB,KAAKgxB,QACPhxB,KAAK4wB,IAAIK,aAAalB,EAASC,GAE/BhwB,KAAK4wB,IAAID,YAAYZ,GAEvB/vB,KAAKkxB,WAAarB,EAClB7vB,KAAKmxB,IAAMtB,EAAKpnB,WAAW,MAE3BzI,KAAKiwB,MAAQA,KACf,EAIAmB,YAAa,WACX,IAAIxgC,EAAM,KACNugC,EAAM,KACNnxB,KAAKkwB,QACHlwB,KAAKqxB,aAAarxB,KAAKkwB,UACzBt/B,EAAMoP,KAAKqxB,aAAarxB,KAAKkwB,SAASt/B,IACtCugC,EAAMnxB,KAAKqxB,aAAarxB,KAAKkwB,SAASiB,IACtCnxB,KAAKsxB,SAAWH,EAAII,mBAEpBJ,EAAM,IAAIK,aACVxxB,KAAKsxB,SAAWH,EAAII,iBACpB3gC,EAAMugC,EAAIM,yBAAyBzxB,KAAKiwB,OACxCjwB,KAAKqxB,aAAarxB,KAAKkwB,SAAW,CAAEt/B,IAAKA,EAAKugC,IAAKA,KAGrDA,EAAM,IAAIK,aACVxxB,KAAKsxB,SAAWH,EAAII,iBACpB3gC,EAAMugC,EAAIM,yBAAyBzxB,KAAKiwB,QAG1Cr/B,EAAI8gC,QAAQ1xB,KAAKsxB,UACjBtxB,KAAKsxB,SAASK,QAAU3xB,KAAK2xB,QAC7B3xB,KAAKsxB,SAASI,QAAQP,EAAIS,aAE1B5xB,KAAK6xB,SAAWV,CAClB,EAIAW,aAAc,SAASC,GACrB,IAAMC,EAAIhyB,KAAK8wB,UACTmB,EAAIjyB,KAAK+wB,WACTmB,EAAWlyB,KAAKmxB,IAAIgB,qBAAqBH,EAAI,EAAG,EAAGA,EAAI,EAAGC,GAC5DG,EAAS,EAKb,OAJAL,EAAYvrB,SAAQ,SAAA/V,GAClByhC,EAASG,aAAaD,EAAQ3hC,GAC9B2hC,GAAU,EAAIL,EAAY/qC,MAC5B,IACOkrC,CACT,IAGa,GACbI,MAlLY,CAKZ/B,SAAU,CACRv/B,KAAMmhB,OACNogB,QAAS,MAQXrC,QAAS,CACPl/B,KAAMmhB,OACNogB,QAAS,MAOX/B,cAAe,CACbx/B,KAAMwhC,QACND,SAAS,GAQX7B,WAAY,CACV1/B,KAAMwhC,QACND,SAAS,GAMX9B,WAAY,CACVz/B,KAAMmhB,OACNogB,QAAS,MAMXzB,UAAW,CACT9/B,KAAM4R,OACN2vB,QAAS,KAMXxB,WAAY,CACV//B,KAAM4R,OACN2vB,QAAS,IAMX1B,UAAW,CACT7/B,KAAMmhB,OACNogB,QAAS,MAOXvB,QAAS,CACPhgC,KAAMwhC,QACND,SAAS,GAOXE,cAAe,CACbzhC,KAAM,CAACmhB,OAAQugB,OACfH,QAAS,OA6FXI,OAAQ,SAAAV,GAAC,OAAIA,EAAE,MAAM,EACrBW,QAAO,WACL5yB,KAAK4vB,qBACL5vB,KAAKoxB,cACLpxB,KAAK6yB,UACP,EACAC,cAAa,WACP9yB,KAAK6xB,UACP7xB,KAAK6xB,SAASkB,OAElB,EACApD,WC0BaqD,EA5HA,CACbziC,KAAM,UACN0iC,OAAQ,CAACC,GACTZ,MAlGY,CAMZa,SAAU,CACRniC,KAAM4R,OACN2vB,QAAS,GAOXa,SAAU,CACRpiC,KAAM4R,OACN2vB,QAAS,GAMXc,SAAU,CACRriC,KAAM,CAACmhB,OAAQugB,OACfH,QAAS,WAQXe,WAAY,CACVtiC,KAAM4R,OACN2vB,QAAS,GAOXgB,cAAe,CACbviC,KAAM4R,OACN2vB,QAAS,IAMXiB,UAAW,CACTxiC,KAAMmhB,OACNogB,QAAS,WAMXkB,YAAa,CACXziC,KAAM4R,OACN2vB,QAAS,GAMXmB,WAAY,CACV1iC,KAAM4R,OACN2vB,QAAS,GAOXoB,UAAW,CACT3iC,KAAMwhC,QACND,SAAS,GASXZ,QAAS,CACP3gC,KAAM4R,OACN2vB,QAAS,OAWXxoC,KAAI,WACF,MAAO,CACLkmC,MAAO,KACPqB,SAAU,KACVH,IAAK,KACLU,SAAU,KACV+B,KAAMlB,MAAM5U,MAAM,KAAM4U,MAAM1yB,KAAK2xB,QAAU,IAAIjZ,KAAI,kBAAM,CAAC,IAEhE,EACAiX,QAAS,CAIPkD,SAAU,WAAW,IAAAvvB,EAAA,KACbuwB,EAAU7zB,KAAKsxB,SAASwC,kBACxB/pC,KAAO,IAAIgqC,WAAWF,GACtBV,EACJnzB,KAAKmzB,UAAYnzB,KAAK8wB,UAAY9wB,KAAK8wB,UAAY9wB,KAAKmzB,SACpDpoB,EAAOb,KAAK8pB,OACdb,EAAWnzB,KAAKozB,UAAYS,EAAW7zB,KAAK8wB,WAE1CmD,EAAUvB,MAAMwB,QAAQl0B,KAAKqzB,UAC/BrzB,KAAK8xB,aAAa9xB,KAAKqzB,UACvBrzB,KAAKqzB,SACL7nB,EAAI,EAERxL,KAAKsxB,SAAS6C,qBAAqBpqC,MACnCiW,KAAKo0B,gBAELrqC,KAAKyc,SAAQ,SAAC6tB,EAAGprC,GACf,KAAIA,EAAQ8hB,GAAZ,CACA,IAAMupB,EAAOpqB,KAAK8pB,MAChBjqC,KAAK0S,MAAMxT,EAAOA,EAAQ8hB,GAAMwpB,QAAO,SAACvb,EAAG9N,GAAC,OAAKA,EAAI8N,CAAC,GAAE,GAAKjO,GAEzDypB,EAAaF,EAAO,IAAOhxB,EAAKytB,WAClCztB,EAAKgwB,YACPhwB,EAAKmxB,SAASxrC,EAAOkqC,EAAU3nB,EAAG8oB,GAEpChxB,EAAK6tB,IAAIuD,UAAYT,EACrB3wB,EAAKqxB,SAASxB,EAAUqB,EAAWhpB,GACnCA,GAAK2nB,EAAW7vB,EAAK8vB,QAVG,CAW1B,IACA5xB,sBAAsBxB,KAAK6yB,SAC7B,EAKAuB,cAAe,WACb,IAAMpC,EAAIhyB,KAAK8wB,UACTmB,EAAIjyB,KAAK+wB,WACf/wB,KAAKmxB,IAAIyD,UAAU,EAAG,EAAG5C,EAAGC,GACxBjyB,KAAKyyB,gBACPzyB,KAAKmxB,IAAIuD,UAAYhC,MAAMwB,QAAQl0B,KAAKyyB,eACpCzyB,KAAK8xB,aAAa9xB,KAAKyyB,eACvBzyB,KAAKyyB,cACTzyB,KAAKmxB,IAAI0D,SAAS,EAAG,EAAG7C,EAAGC,GAE/B,EAKA0C,SAAU,SAASxB,EAAUqB,EAAWM,GAClC90B,KAAKyzB,YACPzzB,KAAK+0B,cAAc5B,EAAUqB,EAAWM,GAExC90B,KAAKmxB,IAAI0D,SACPC,EACA90B,KAAK+wB,WAAayD,EAAYx0B,KAAKg1B,UAAUR,GAC7CrB,EACAqB,EAGN,EAKAO,cAAe,SAAS5B,EAAUqB,EAAWM,GAC3C,IAAK,IAAIG,EAAI,EAAGA,EAAIT,EAAWS,GAAKj1B,KAAKyzB,YAAczzB,KAAK0zB,WAC1D1zB,KAAKmxB,IAAI0D,SACPC,EACA90B,KAAK+wB,WAAayD,EAAYS,EAAIj1B,KAAKg1B,UAAUR,GACjDrB,EACAnzB,KAAKyzB,YAGX,EAKAgB,SAAU,SAASxrC,EAAOisC,EAAUJ,EAAMK,GACxC,IAAMC,EACJp1B,KAAK4zB,KAAK3qC,IAAUksC,EAAOA,EAAOn1B,KAAK4zB,KAAK3qC,GAAS+W,KAAKuzB,cACtD3e,EAAKwgB,EAAM,IAASp1B,KAAK+wB,WACzBsE,EAAOr1B,KAAK+wB,WAAanc,EAAI5U,KAAKszB,WAAatzB,KAAKg1B,UAAUpgB,GACpE5U,KAAKmxB,IAAIuD,UAAY10B,KAAKwzB,UAC1BxzB,KAAKmxB,IAAI0D,SAASC,EAAMO,EAAMH,EAAUl1B,KAAKszB,YACzCtzB,KAAK2zB,WACP3zB,KAAKmxB,IAAI0D,SACPC,EACA90B,KAAK+wB,WAAasE,EAAOr1B,KAAKszB,WAC9B4B,EACAl1B,KAAKszB,YAGTtzB,KAAK4zB,KAAK3qC,GAASmsC,CACrB,EAKAJ,UAAW,SAASR,GAClB,OAAOx0B,KAAK2zB,WAAa3zB,KAAK+wB,WAAayD,GAAa,EAAI,CAC9D,IChGWc,EArFA,CACb/kC,KAAM,UACN0iC,OAAQ,CAACC,GACTZ,MApCY,CAKZv9B,UAAW,CACT/D,KAAM4R,OACN2vB,QAAS,GAMXgD,UAAW,CACTvkC,KAAM,CAACmhB,OAAQugB,OACfH,QAAS,QASXZ,QAAS,CACP3gC,KAAM4R,OACN2vB,QAAS,MAWXxoC,KAAI,WACF,MAAO,CACLkmC,MAAO,KACPqB,SAAU,KACVH,IAAK,KACLU,SAAU,KAEd,EACAlC,QAAS,CAIPkD,SAAU,WACR,IAAMgB,EAAU7zB,KAAKsxB,SAASwC,kBACxB/oB,EAAO/K,KAAK8wB,UAAY,EAAM+C,EAC9B9pC,KAAO,IAAIgqC,WAAWF,GACxBroB,EAAI,EAERxL,KAAKw1B,aACLx1B,KAAKsxB,SAAS6C,qBAAqBpqC,MAEnCiW,KAAKmxB,IAAIp8B,UAAYiL,KAAKjL,UAC1BiL,KAAKmxB,IAAIsE,YAAc/C,MAAMwB,QAAQl0B,KAAKu1B,WACtCv1B,KAAK8xB,aAAa9xB,KAAKu1B,WACvBv1B,KAAKu1B,UACTv1B,KAAKmxB,IAAIuE,YAET3rC,KAAK4rC,UACL31B,KAAKmxB,IAAIyE,OAAOpqB,EAAGxL,KAAK+wB,WAAa,GACrCvlB,EAAIxL,KAAK61B,UAAU9rC,KAAMyhB,EAAGT,GAC5BhhB,KAAK4rC,UACLnqB,EAAIxL,KAAK61B,UAAU9rC,KAAMyhB,EAAGT,GAC5B/K,KAAKmxB,IAAI2E,OAAO91B,KAAK8wB,UAAW9wB,KAAK+wB,WAAa,GAClD/wB,KAAKmxB,IAAIt8B,SAET2M,sBAAsBxB,KAAK6yB,SAC7B,EAKA2C,WAAY,WACV,IAAMxD,EAAIhyB,KAAK8wB,UACTmB,EAAIjyB,KAAK+wB,WACTgF,EAAY/1B,KAAKyyB,cACjBP,EAAWlyB,KAAKmxB,IAAIgB,qBAAqBH,EAAI,EAAG,EAAGA,EAAI,EAAGC,GAC5DG,EAAS,EACbpyB,KAAKmxB,IAAIyD,UAAU,EAAG,EAAG5C,EAAGC,GAEvB8D,IAEDrD,MAAMwB,QAAQ6B,IAChBA,EAAUvvB,SAAQ,SAAA/V,GAChByhC,EAASG,aAAaD,EAAQ3hC,GAC9B2hC,GAAU,EAAI2D,EAAU/uC,MAC1B,IACAgZ,KAAKmxB,IAAIuD,UAAYxC,GAErBlyB,KAAKmxB,IAAIuD,UAAYqB,EAEvB/1B,KAAKmxB,IAAI0D,SAAS,EAAG,EAAG7C,EAAGC,GAC7B,EAKA4D,UAAW,SAAS9rC,KAAMyhB,EAAGT,GAAM,IAAAzH,EAAA,KAC3B2uB,EAAIjyB,KAAK+wB,WACXnc,EAAI,EAQR,OAPA7qB,KAAKyc,SAAQ,SAACwS,EAAGlyB,GAEf8tB,EAAKqd,GAAK,IAAMjZ,GAAM,IAClBlyB,EAAI,IAAG8tB,EAAIqd,EAAIrd,GACnBtR,EAAK6tB,IAAI2E,OAAOtqB,EAAGoJ,GACnBpJ,GAAKT,CACP,IACOS,CACT,ICmQWwqB,G,MApLE,CACfzlC,KAAM,YACN0iC,OAAQ,CAACC,GACTZ,MApMY,CAQZX,QAAS,CACP3gC,KAAM4R,OACN2vB,QAAS,MAMXzB,UAAW,CACT9/B,KAAM4R,OACN2vB,QAAS,KAMXxB,WAAY,CACV//B,KAAM4R,OACN2vB,QAAS,KAQX0D,OAAQ,CACNjlC,KAAM4R,OACN2vB,QAAS,GAMXx9B,UAAW,CACT/D,KAAM4R,OACN2vB,QAAS,GAMX2D,UAAW,CACTllC,KAAM4R,OACN2vB,QAAS,GAOX4D,aAAc,CACZnlC,KAAMmhB,OACNogB,QAAS,WAOX6D,aAAc,CACZplC,KAAM4R,OACN2vB,QAAS,IAMXY,SAAU,CACRniC,KAAM4R,OACN2vB,QAAS,GAOX8D,UAAW,CACTrlC,KAAM4R,OACN2vB,QAAS,GAOXc,SAAU,CACRriC,KAAM,CAACmhB,OAAQugB,OACfH,QAAS,iBAAM,CAAC,UAAW,UAAU,GAOvClN,SAAU,CACRr0B,KAAMwhC,QACND,SAAS,GAOX+D,cAAe,CACbtlC,KAAM4R,OACN2vB,QAAS,GAOXgE,cAAe,CACbvlC,KAAMmhB,OACNogB,QAAS,WAOXiE,kBAAmB,CACjBxlC,KAAMwhC,QACND,SAAS,GAOXkE,kBAAmB,CACjBzlC,KAAM4R,OACN2vB,QAAS,GAOXmE,SAAU,CACR1lC,KAAMwhC,QACND,SAAS,GAOXoE,aAAc,CACZ3lC,KAAMmhB,OACNogB,QAAS,eAOXqE,cAAe,CACb5lC,KAAMmhB,OACNogB,QAAS,QAOXsE,YAAa,CACX7lC,KAAMwhC,QACND,SAAS,GAOXuE,YAAa,CACX9lC,KAAM4R,OACN2vB,QAAS,OAWXxoC,KAAI,WACF,MAAO,CACLgtC,OAAQ,IACR9G,MAAO,KACPqB,SAAU,KACVH,IAAK,KACLU,SAAU,KAEd,EACAlC,QAAS,CAIPkD,SAAU,WAAW,IAAAvvB,EAAA,KACb0zB,EAAKh3B,KAAK8wB,UAAY,EACtBmG,EAAKj3B,KAAK+wB,WAAa,EACvBmG,EAAIl3B,KAAKi2B,OACXj2B,KAAKi2B,OACL/rB,KAAK8pB,MAAOh0B,KAAK8wB,UAAY,EAAK,IAChC/7B,EAAYiL,KAAKjL,UACjBmhC,EAAYl2B,KAAKk2B,UACjBiB,EAAUjtB,KAAKmE,KAAKtZ,EAAYmhC,GAChCrC,EAAU7zB,KAAKsxB,SAASwC,kBACxB/pC,KAAO,IAAIgqC,WAAWF,GACtB9oB,GAAShW,EAAYmhC,GAAansC,KAAK/C,QAAW,EAAIkjB,KAAKgC,IAC3DkrB,EACJp3B,KAAKq2B,UAAY,EAAIr2B,KAAKq2B,UAAYr2B,KAAK8wB,UAAY,EAAIoG,EACzDviC,EAAQuV,KAAKgC,GAAKlM,KAAKq3B,UAE3Br3B,KAAKw1B,aACLx1B,KAAKsxB,SAAS6C,qBAAqBpqC,MAG/BiW,KAAKo2B,aAAe,GACtBp2B,KAAKs3B,aAAaJ,EAAGF,EAAIC,GAIvBj3B,KAAKqlB,UACPrlB,KAAKu3B,cAAcL,EAAGF,EAAIC,GAIxBj3B,KAAK02B,UACP12B,KAAKw3B,cAAcR,EAAIC,GAIzBj3B,KAAKmxB,IAAIp8B,UAAYiL,KAAKmzB,SAC1BnzB,KAAKmxB,IAAIsE,YAAcz1B,KAAKy3B,aAAaT,EAAIC,GAE7CltC,KAAKyc,SAAQ,SAAC6tB,EAAGprC,GAEf,GADA0L,GAASoW,IACL9hB,EAAQkuC,GAAZ,CAGA,IAAM7C,EAAOpqB,KAAK8pB,MAChBjqC,KAAK0S,MAAMxT,EAAOA,EAAQkuC,GAAS5C,QAAO,SAACvb,EAAG9N,GAAC,OAAKA,EAAI8N,CAAC,GAAE,GACzDme,GAGEO,EAAOR,EAAK5C,EAAO,IAAS8C,EAClC9zB,EAAK6tB,IAAIuE,YACTpyB,EAAK6tB,IAAIyE,OAAOsB,EAAIhtB,KAAKytB,IAAIhjC,GAASqiC,EAAIE,EAAIhtB,KAAKiC,IAAIxX,GAASsiC,GAChE3zB,EAAK6tB,IAAI2E,OACP4B,EAAOxtB,KAAKytB,IAAIhjC,GAASqiC,EACzBU,EAAOxtB,KAAKiC,IAAIxX,GAASsiC,GAE3B3zB,EAAK6tB,IAAIt8B,QAbT,CAcF,IAEA2M,sBAAsBxB,KAAK6yB,SAC7B,EAKA2C,WAAY,WACVx1B,KAAKmxB,IAAIyD,UAAU,EAAG,EAAG50B,KAAK8wB,UAAW9wB,KAAK+wB,YAEzC/wB,KAAKyyB,gBAEVzyB,KAAKmxB,IAAIuD,UAAYhC,MAAMwB,QAAQl0B,KAAKyyB,eACpCzyB,KAAK8xB,aAAa9xB,KAAKyyB,eACvBzyB,KAAKyyB,cACTzyB,KAAKmxB,IAAI0D,SAAS,EAAG,EAAG70B,KAAK8wB,UAAW9wB,KAAK+wB,YAC/C,EAIAwG,cAAe,SAASL,EAAGF,EAAIC,GAC7B,IAAMW,EACH53B,KAAKiwB,MAAM4H,YAAc73B,KAAKiwB,MAAM9rB,SAAY,EAAI+F,KAAKgC,GACtD4rB,EAAqB,IAAV5tB,KAAKgC,GAAW0rB,EAE5BA,IAEL53B,KAAKmxB,IAAIp8B,UAAYiL,KAAKs2B,cAC1Bt2B,KAAKmxB,IAAIsE,YAAcz1B,KAAKu2B,cAE5Bv2B,KAAKmxB,IAAIuE,YACT11B,KAAKmxB,IAAI4G,IACPf,EACAC,EACAC,EAAIl3B,KAAKo2B,aAAep2B,KAAKy2B,kBAC7B,IAAMvsB,KAAKgC,GACX4rB,EACA93B,KAAKw2B,mBAEPx2B,KAAKmxB,IAAIt8B,SACX,EAIAyiC,aAAc,SAASJ,EAAGF,EAAIC,GAC5Bj3B,KAAKmxB,IAAIuE,YACT11B,KAAKmxB,IAAIsE,YAAcz1B,KAAKm2B,aAC5Bn2B,KAAKmxB,IAAIp8B,UAAYiL,KAAKo2B,aAC1Bp2B,KAAKmxB,IAAI4G,IAAIf,EAAIC,EAAIC,EAAG,EAAG,EAAIhtB,KAAKgC,IACpClM,KAAKmxB,IAAIt8B,QACX,EAIA2iC,cAAe,SAASR,EAAIC,GAC1B,IAAM/2B,EAAIgK,KAAKC,MAAMnK,KAAKiwB,MAAM4H,YAAc,IACxCG,EAAM9tB,KAAKC,MAAMnK,KAAKiwB,MAAM4H,aAAe,GAC3CjvB,EAAIovB,EAAM,GAAK,IAAHj7B,OAAOi7B,GAAG,GAAAj7B,OAAQi7B,GAC9B9jC,KAAO,GAAH6I,OAAMmD,EAAC,KAAAnD,OAAI6L,GACfqvB,EAAS/tB,KAAKmE,KAAKrO,KAAKmxB,IAAI+G,YAAYhkC,MAAMlJ,OAEpDgV,KAAKmxB,IAAIxmC,KAAOqV,KAAK22B,aACrB32B,KAAKmxB,IAAIuD,UAAY10B,KAAK42B,cAC1B52B,KAAKmxB,IAAIgH,SACPjkC,KACA8iC,EAAK9sB,KAAK8pB,MAAMiE,EAAS,GACzBhB,EAAK,IAAOj0B,SAAShD,KAAK22B,cAE9B,EAIAU,QAAS,WAMP,OALIr3B,KAAK62B,YACP72B,KAAK+2B,OAAyB,MAAhB/2B,KAAK+2B,OAAiB,IAAM/2B,KAAK+2B,OAAS/2B,KAAK82B,YAE7D92B,KAAK+2B,OAAS,IAET/2B,KAAK+2B,MACd,EAIAU,aAAc,SAAST,EAAIC,GAAI,IAAApzB,EAAA,KAC7B,IAAK6uB,MAAMwB,QAAQl0B,KAAKqzB,UACtB,OAAOrzB,KAAKqzB,SAEd,IAAMnB,EAAWlyB,KAAKmxB,IAAIiH,qBACxBpB,EACAC,EACAj3B,KAAK8wB,UAAY,EACjBkG,EACAC,EACA,GAEE7E,EAAS,EAMb,OAJApyB,KAAKqzB,SAAS7sB,SAAQ,SAAA/V,GACpByhC,EAASG,aAAaD,EAAQ3hC,GAC9B2hC,GAAU,EAAIvuB,EAAKwvB,SAASrsC,MAC9B,IACOkrC,CACT,KCgDWmG,G,OA1QI,CACjB9nC,KAAM,cACN0iC,OAAQ,CAACC,GACTZ,MAzJY,CAKZxB,UAAW,CACT9/B,KAAM4R,OACN2vB,QAAS,KAMXxB,WAAY,CACV//B,KAAM4R,OACN2vB,QAAS,IAOX+F,gBAAiB,CACftnC,KAAM4R,OACN2vB,QAAS,IAOXgG,gBAAiB,CACfvnC,KAAMmhB,OACNogB,QAAS,QAOXiG,kBAAmB,CACjBxnC,KAAM4R,OACN2vB,QAAS,IAOXkG,kBAAmB,CACjBznC,KAAMmhB,OACNogB,QAAS,QAOXmE,SAAU,CACR1lC,KAAMwhC,QACND,SAAS,GAQXmG,eAAgB,CACd1nC,KAAMwhC,QACND,SAAS,GAOXoG,iBAAkB,CAChB3nC,KAAM4R,OACN2vB,QAAS,IAOXqG,mBAAoB,CAClB5nC,KAAMmhB,OACNogB,QAAS,aAOXsG,kBAAmB,CACjB7nC,KAAMmhB,OACNogB,QAAS,QAQXuG,mBAAoB,CAClB9nC,KAAMwhC,QACND,SAAS,GAOXwG,eAAgB,CACd/nC,KAAMwhC,QACND,SAAS,GAOXyG,oBAAqB,CACnBhoC,KAAMmhB,OACNogB,QAAS,OAOX0G,oBAAqB,CACnBjoC,KAAM4R,OACN2vB,QAAS,GAOX2G,kBAAmB,CACjBloC,KAAMwhC,QACND,SAAS,IAWXxoC,KAAI,WACF,MAAO,CACLmnC,WAAY,KACZC,IAAK,KACLlB,MAAO,KACP9rB,SAAU,KACVg1B,MAAO,GAEX,EACAvG,QAAO,WAAG,IAAAtvB,EAAA,KAGctD,KAAKo5B,iBAiB3BC,MAAMr5B,KAAKiwB,MAAMr/B,IAAK,CACpB0oC,QAAS,CACP,eAAgB,cAElBC,aAAc,gBAEbv8B,MAAK,SAAAw8B,GACJ,OAAOA,EAASC,aAClB,IACCz8B,MAAK,SAAAw8B,GACJl2B,EAAKo2B,OAAOF,EACd,GACJ,EACA7J,QAAS,CAIPyB,YAAa,WAEX,OAAO,IACT,EAIAyB,SAAU,WAER,OAAO,IACT,EAIA6G,OAAQ,SAASF,GAAU,IAAA31B,EAAA,MAEb,IAAI2tB,cAaZmI,gBACFH,GACA,SAAAI,GACE/1B,EAAKg2B,SAASD,EAChB,IACA,SAAAlwC,GAAK,OAAID,QAAQC,MAAMA,EAAM,GAEjC,EAKAmwC,SAAU,SAASC,GAAQ,IAAA/vB,EAAA,KACnBovB,EAAQ,GACVY,EAAM,EACNzuB,EAAM,EACNnb,EAAM,EACNF,EAAS,EACP+pC,EAAU9vB,KAAKmE,KAAKyrB,EAAO9yC,OAASgZ,KAAK8wB,WACzC9lC,EAAQgV,KAAK8wB,UACbhmC,EAASkV,KAAK+wB,WACpB/wB,KAAKi6B,MAAM,WAAYH,EAAO31B,UAC9BnE,KAAKmE,SAAW21B,EAAO31B,SAEvB,IAAK,IAAIkH,EAAI,EAAGA,EAAIyuB,EAAOI,iBAAkB7uB,IAE3C,IADA,IAAMthB,KAAO+vC,EAAOK,eAAe9uB,GAC1BzC,EAAI,EAAGA,EAAI5d,EAAO4d,IAAK,CAC9B,IAAMsK,KAAWtK,EAAIoxB,GACf5mB,KAASF,EAAQ8mB,GACvBD,EAAM,EACNzuB,EAAM,EACN,IAAK,IAAIxkB,EAAIosB,EAAOpsB,EAAIssB,EAAKtsB,IAC3BizC,EAAMhwC,KAAKjD,GAAKizC,EAAMhwC,KAAKjD,GAAKizC,EAChCzuB,EAAMvhB,KAAKjD,GAAKwkB,EAAMvhB,KAAKjD,GAAKwkB,EAG9B6tB,EAAMvwB,KACRuwB,EAAMvwB,GAAG,GAAKuwB,EAAMvwB,GAAG,GAAK0C,EAAMA,EAAM6tB,EAAMvwB,GAAG,GACjDuwB,EAAMvwB,GAAG,GAAKuwB,EAAMvwB,GAAG,GAAKmxB,EAAMA,EAAMZ,EAAMvwB,GAAG,IAEnDuwB,EAAMvwB,GAAK,CAAC0C,EAAKyuB,EACnB,CAGF,IAAK,IAAIjzC,EAAI,EAAGA,EAAIqyC,EAAMnyC,OAAQF,IAGhCqJ,EAAMrF,EAAS,GAFfwgB,EAAM6tB,EAAMryC,GAAG,IAEWgE,EAAU,EACpCmF,EAASnF,EAAS,GAFlBivC,EAAMZ,EAAMryC,GAAG,IAEcgE,EAAU,EACvCquC,EAAMryC,GAAK,CAACqJ,EAAKF,IAAWE,EAAMA,EAAM,EAAIF,GAE9C+P,KAAKm5B,MAAQA,EAETn5B,KAAKk5B,mBACPl5B,KAAKkxB,WAAWjzB,iBAAiB,SAAS,SAAAzU,GAAC,OAAIugB,EAAKqwB,WAAW5wC,EAAE,IAEnEwW,KAAKq6B,UACP,EAIAA,SAAU,WACR,IAAMlB,EAAQn5B,KAAKm5B,MACb73B,KAAOtB,KAAKiwB,MAAM4H,YAClByC,EAAQt6B,KAAKs6B,MAAMh5B,MACrBkK,EAAI,EACRxL,KAAKmxB,IAAIyD,UAAU,EAAG,EAAG50B,KAAK8wB,UAAW9wB,KAAK+wB,YAC9CvlB,EAAIxL,KAAKu6B,KACPpB,EAAM18B,MAAM,EAAG69B,GACft6B,KAAKs4B,gBACLt4B,KAAKu4B,gBACL/sB,GAEFxL,KAAKu6B,KACHpB,EAAM18B,MAAM69B,GACZt6B,KAAKw4B,kBACLx4B,KAAKy4B,kBACLjtB,GAEFxL,KAAKw6B,WAAWl5B,MAChBtB,KAAKy6B,SAASn5B,MAEdE,sBAAsBxB,KAAKq6B,SAC7B,EAIAE,KAAM,SAASxwC,KAAMgL,EAAWtE,EAAO+a,GAAG,IAAAf,EAAA,KAUxC,OATAzK,KAAKmxB,IAAIp8B,UAAYA,EACrBiL,KAAKmxB,IAAIsE,YAAchlC,EACvBuP,KAAKmxB,IAAIuE,YACT3rC,KAAKyc,SAAQ,SAAAwS,GACXvO,EAAK0mB,IAAIyE,OAAOpqB,EAAGwN,EAAE,IACrBvO,EAAK0mB,IAAI2E,OAAOtqB,EAAGwN,EAAE,IACrBxN,GACF,IACAxL,KAAKmxB,IAAIt8B,SACF2W,CACT,EAMAkvB,WAAY,SAASC,GACnB,IAAIC,EAAS,GACPt5B,KAAOwE,WAAW60B,GACxB,GAAIrjB,MAAMhW,MACR,OAAOs5B,EAGT,IAAMb,KAASz4B,KAAO,IAChB02B,KAAS12B,KAAO,IAChBu5B,KAASv5B,KAAO,EAAK,KAQ3B,OANAs5B,EAASb,EAAM,GAAK,IAAHh9B,OAAOg9B,EAAG,QAAAh9B,OAASg9B,EAAG,KACvCa,GAAU,IAAA79B,OAAIi7B,GAAM8C,QAAQ,GACxB96B,KAAK04B,iBACPkC,GAAU,IAAM,KAAA79B,OAAK89B,GAAKC,QAAQ,IAG7BF,CACT,EAMAH,SAAU,SAASn5B,MACjB,IAAMy5B,EAAU/6B,KAAK06B,WAAWp5B,MAE1B05B,IAAch7B,KAAKmxB,IAAI+G,YAAY6C,GAAS/vC,MAC5CsvC,EAAQt6B,KAAKs6B,MAAMh5B,MACnB25B,EACJX,EAAQt6B,KAAK8wB,UAAYkK,EAJZ,EAKTV,EAAQU,EALC,EAMTV,EANS,EAOTY,EAAQl7B,KAAK84B,mBACf94B,KAAK+wB,WAAa/wB,KAAK24B,iBARZ,EASX34B,KAAK24B,iBATM,EAUf34B,KAAKmxB,IAAIuD,UAAY10B,KAAK64B,kBAC1B74B,KAAKmxB,IAAIxmC,KAAO,GAAHoS,OAAMiD,KAAK24B,iBAAgB,OAAA57B,OAAMiD,KAAK44B,oBACnD54B,KAAKmxB,IAAIgH,SAAS4C,EAASE,EAAOC,EACpC,EAMAV,WAAY,SAASl5B,MACnB,IAAMg5B,EAAQt6B,KAAKs6B,MAAMh5B,MACzBtB,KAAKmxB,IAAIp8B,UAAYiL,KAAKi5B,oBAC1Bj5B,KAAKmxB,IAAIsE,YAAcz1B,KAAKg5B,oBAC5Bh5B,KAAKmxB,IAAIuE,YACT11B,KAAKmxB,IAAIyE,OAAO0E,EAAO,GACvBt6B,KAAKmxB,IAAI2E,OAAOwE,EAAOt6B,KAAK+wB,YAC5B/wB,KAAKmxB,IAAIt8B,QACX,EAMAylC,MAAO,SAASh5B,MACd,SAAWA,KAAOtB,KAAKmE,SAAYnE,KAAK8wB,UAC1C,EAKAsJ,WAAY,SAAS5wC,GACnBwW,KAAKiwB,MAAM4H,YAAeruC,EAAE0V,QAAUc,KAAK8wB,UAAa9wB,KAAKmE,QAC/D,EAIAi1B,iBAAkB,SAAS+B,GACzB,IAAMC,EAAYlxB,KAAK8pB,MAAOmH,EAAGE,OAASF,EAAGG,MAASt7B,KAAK8wB,WAC3D9wB,KAAKmxB,IAAIyD,UAAU,EAAG,EAAG50B,KAAK8wB,UAAW9wB,KAAK+wB,YAC9C/wB,KAAKmxB,IAAIuE,YACT11B,KAAKmxB,IAAIsE,YAAcz1B,KAAKy4B,kBAC5Bz4B,KAAKmxB,IAAIyE,OAAO,EAAG51B,KAAK+wB,WAAa,GACrC/wB,KAAKmxB,IAAI2E,OAAOsF,EAAWp7B,KAAK+wB,WAAa,GAC7C/wB,KAAKmxB,IAAIt8B,QACX,KC9ZE0mC,EAAW,CAEjBA,QAAmB,SAAStjC,GAE1B4J,OAAO2vB,aACL3vB,OAAO2vB,cACP3vB,OAAO25B,oBACP35B,OAAO45B,iBACP55B,OAAO65B,eACT75B,OAAOL,sBACLK,OAAOL,uBACPK,OAAOO,6BACPP,OAAOM,0BACPN,OAAOQ,wBAETpK,EAAI0jC,UAAU3I,EAAOziC,KAAMyiC,GAC3B/6B,EAAI0jC,UAAUrG,EAAO/kC,KAAM+kC,GAC3Br9B,EAAI0jC,UAAU3F,EAASzlC,KAAMylC,GAC7B/9B,EAAI0jC,UAAUtD,EAAW9nC,KAAM8nC,GAC/BpgC,EAAIqG,UAAU+yB,aAAe,CAAC,CAChC,GAEekK,ICrBftjC,UAAIC,IAAIqjC,E,yGCNO,mBAAAjwC,GAA+B,IAAnBswC,EAAKtwC,EAALswC,MAAOC,EAAQvwC,EAARuwC,SAE5BC,EAAiBF,EAAMG,KACvBD,EAAe90C,OAAS,GAAK80C,EAAet/B,SAAS,OACvDs/B,EAAiBA,EAAer/B,MAAM,GAAI,IA8B5C,IAzBA,IAuBIu/B,EAAcF,EACdG,GAAY,EAChBC,EAAA,EAAAC,EAzBkB,CAChB,CAEEC,KAAM,uBACNC,GAAI,mBAEN,CAEED,KAAM,qBACNC,GAAI,YAEN,CAMED,KAAM,wBACNC,GAAI,gBAOoBH,EAAAC,EAAAn1C,OAAAk1C,IAAE,CAAzB,IAAMI,EAAIH,EAAAD,GACb,GAAII,EAAKF,KAAK3kC,KAAKqkC,GAAiB,CAClCE,EAAcF,EAAetvB,QAAQ8vB,EAAKF,KAAME,EAAKD,IACrDJ,GAAY,EACZ,KACF,CACF,CAQA,MALoB,MAAhBD,GAAuBA,EAAYx/B,SAAS,OAC9Cw/B,EAAcA,EAAYv/B,MAAM,GAAI,IAIlCw/B,GAAaD,IAAgBF,EACxBD,EAAS,IAAKG,IAKlBC,GAAaL,EAAMG,KAAK/0C,OAAS,GAAK40C,EAAMG,KAAKv/B,SAAS,KACtDq/B,EAAS,IAAKC,QADvB,C,uBCnDF,IAAIS,QAAU,EAAQ,KACnBA,QAAQC,aAAYD,QAAUA,QAAQhK,SACnB,iBAAZgK,UAAsBA,QAAU,CAAC,CAACE,EAAO31C,EAAIy1C,QAAS,MAC7DA,QAAQG,SAAQD,EAAOE,QAAUJ,QAAQG,SAG/BE,EADH,EAAQ,IAA+DrK,SAChE,WAAYgK,SAAS,EAAM,CAAC,WAAY,G,sBCRzD,IACIM,EAD8B,EAAQ,GACZC,EAA4B,SAASh2C,GAAG,OAAOA,EAAE,EAAE,IAEjF+1C,EAAwB51C,KAAK,CAACw1C,EAAO31C,EAAI,qqJAAwqJ,KAEjtJ+1C,EAAwBH,OAAS,CAAC,EAClCD,EAAOE,QAAUE,C,uwBCOjB,IAAME,EAAMthC,EAAQ,KAGpBxD,UAAIC,IAAI8kC,KAw1BOC,UAr0BD,WACZ,OAAO,IAAIC,IAAKC,MAAM,CACpBn7C,MAAO,CACLo7C,QAASL,EAAIK,QAEbC,eAAe,EAEfC,QAAS,6BACTC,cAAe,qBACfC,gBAAiB,yBAgBjBC,UAAW,uBACXC,aAAc,+CACdC,aAAc,mCAEdC,UAAW,CAETvO,OAAQ,eACRwO,MAAO,SAKTx6C,MAAO,CACLy6C,GAAI,MACJC,GAAI,OACJC,GAAI,QACJC,GAAI,aAENC,SAAU,KACVC,MAAO,CAEL,CACED,SAAU,MACVE,YAAa,IACbC,OAAQ,GACRC,OAAQ,sBACR/tC,KAAM,uBAER,CACE2tC,SAAU,MACVE,YAAa,IACbC,OAAQ,GACRC,OAAQ,sBACR/tC,KAAM,qBACNguC,SAAU,IAEZ,CACEL,SAAU,MACVE,YAAa,IACbC,OAAQ,GACRC,OAAQ,sBACR/tC,KAAM,2BAER,CACE2tC,SAAU,MACVE,YAAa,IACbC,OAAQ,IACRC,OAAQ,sBACR/tC,KAAM,yBACNguC,SAAU,IAEZ,CACEL,SAAU,MACVE,YAAa,IACbC,OAAQ,KACRC,OAAQ,sBACR/tC,KAAM,oBAGR,CACE2tC,SAAU,MACVE,YAAa,IACbC,OAAQ,GACRC,OAAQ,sBACR/tC,KAAM,uBAER,CACE2tC,SAAU,MACVE,YAAa,IACbC,OAAQ,GACRC,OAAQ,sBACR/tC,KAAM,qBACNguC,SAAU,IAEZ,CACEL,SAAU,MACVE,YAAa,IACbC,OAAQ,GACRC,OAAQ,sBACR/tC,KAAM,uBAER,CACE2tC,SAAU,MACVE,YAAa,IACbC,OAAQ,IACRC,OAAQ,sBACR/tC,KAAM,qBACNguC,SAAU,IAEZ,CACEL,SAAU,MACVE,YAAa,IACbC,OAAQ,KACRC,OAAQ,sBACR/tC,KAAM,qBAkEViuC,gBAAiB,EACjBC,YAAa,GACbC,YAAa,CACXC,UAAW,yFACXC,UAAW,yFACXC,MAAO,0BAETC,iBAAkB,KAClBC,mBAAoB,KACpBC,aAAa,EACbC,qBAAqB,EACrBC,qBAAqB,EACrBC,cAAc,EACdC,eAAe,EACfC,mBAAmB,EACnBC,qBAAqB,EACrB7tB,gBAAiB,yCAEjB8tB,gBAAiB,GACjBC,oBAAqB,GACrBC,mBAAoB,GACpBC,eAAgB,GAChBC,eAAgB,GAEhBC,iBAAkB,CAAC,EACnBC,qBAAqB,EACrBC,qBAAqB,EACrBC,KAAM,KACNC,iBAAiB,EACjBC,gBAAgB,EAChBC,kBAAkB,EAElBC,eAAgB,GAChBC,gBAAiB,GACjBC,eAAgB,CAAC,EACjBC,aAAc,CAAC,EACfC,eAAgB,CAAC,EACjBC,mBAAoB,CAAC,EACrBC,mBAAoB,CAAC,EACrBC,iBAAkB,GAClBC,WAAY,GACZC,+BAA+B,EAC/BC,+BAA+B,EAC/BC,qBAAsB,CACpBvwC,KAAM,gBACNhL,SAAU,aAEZ8f,aAAa,GAGfja,QAAS,CACPm1C,eAAgB,SAACv+C,GACf,OAAOA,EAAMu+C,cACf,EACAQ,kBAAiB,SAAC/+C,GAChB,OAAOA,EAAMq+C,cACf,EACAW,SAAQ,SAACh/C,GACP,OAAOA,EAAMi/C,KAAKD,QACpB,EACAE,WAAY,SAACl/C,GACX,OAAOA,EAAMo7C,OACf,EACAc,SAAQ,SAACl8C,GAIP,MAAO,CACLgS,KAAM,MACNmtC,OAAQ,IAGZ,GAGFC,QAAS,CACPC,yBACAC,uBAEF57C,UAAW,CACT67C,iBAAgB,SAACv/C,EAAOw/C,GACtBx/C,EAAMu+C,eAAekB,aAAeD,CACtC,EACAE,iBAAgB,SAAC1/C,EAAOqjB,GACtBrjB,EAAMqjB,YAAcA,CACtB,EACAs8B,0BAAyB,SAAC3/C,EAAO8+C,GAC/B9+C,EAAM8+C,qBAAuBA,CAC/B,EACAc,qCAAoC,SAAC5/C,EAAO4+C,GAC1C5+C,EAAM4+C,8BAAgCA,CACxC,EACAiB,qCAAoC,SAAC7/C,EAAO6+C,GAC1C7+C,EAAM6+C,8BAAgCA,CACxC,EACAiB,iBAAgB,SAAC9/C,EAAOi+C,GACtBj+C,EAAMi+C,eAAiBA,CACzB,EACA8B,uBAAsB,SAAC//C,EAAOk+C,GAC5Bl+C,EAAMk+C,iBAAmBA,CAC3B,EACA8B,OAAM,WACJhiC,KAAKiiC,MAAMC,SACXliC,KAAKiiC,MAAME,SAAQ,GACnBniC,KAAKkgB,OAAOkiB,UAAU,iBAAiB,GAEvCvgC,OAAOwgC,aAAaC,QACpBtiC,KAAKuiC,SAASC,WAChB,EACAr8C,YAAW,SAACnE,GACVoE,OAAOC,OAAOrE,EAtTb,CACLygD,KAAM,KACNxC,gBAAgB,EAChBE,eAAgB,GAChBC,gBAAiB,GACjBC,eAAgB,CAAC,EACjBC,aAAc,CAAC,EACfC,eAAgB,CAAC,EACjBC,mBAAoB,CAAC,EACrBC,mBAAoB,CAAC,EACrBC,iBAAkB,GAClBC,WAAY,IA4SV,EAEA+B,kBAAiB,SAAC1gD,GAChBA,EAAMg+C,iBAAkB,CAC1B,EAEA2C,eAAc,SAAC3gD,EAAOy8C,GACpBz8C,EAAMy8C,YAAcA,CACtB,EACAmE,oBAAmB,SAAC5gD,EAAO88C,GACzB98C,EAAM88C,iBAAmBA,CAC3B,EACA+D,sBAAqB,SAAC7gD,EAAO+8C,GAC3B/8C,EAAM+8C,mBAAqBA,CAC7B,EACA+D,eAAc,SAAC9gD,EAAOg9C,GACpBh9C,EAAMg9C,YAAcA,CACtB,EACA+D,uBAAsB,SAAC/gD,EAAOi9C,GAC5Bj9C,EAAMm9C,cAAe,EACrBn9C,EAAMi9C,oBAAsBA,CAC9B,EACA+D,uBAAsB,SAAChhD,EAAOk9C,GAC5Bl9C,EAAMm9C,cAAe,EACrBn9C,EAAMk9C,oBAAsBA,CAC9B,EACA+D,qBAAoB,SAACjhD,EAAOq9C,GAC1Br9C,EAAMq9C,kBAAoBA,CAC5B,EACA6D,gBAAe,SAAClhD,EAAOm9C,GACrBn9C,EAAMk9C,qBAAsB,EAC5Bl9C,EAAMi9C,qBAAsB,EAC5Bj9C,EAAMm9C,aAAeA,CACvB,EACAgE,iBAAgB,SAACnhD,EAAOo9C,GACtBp9C,EAAMo9C,cAAgBA,CACxB,EACAgE,uBAAsB,SAACphD,EAAOo9C,GAC5Bp9C,EAAMs9C,oBAAsBF,CAC9B,EACAiE,yBAAwB,SAACrhD,EAAKsJ,GAE3B,IADDoR,EAAIpR,EAAJoR,KAEA1a,EAAMw9C,oBAAsB9iC,CAC9B,EACA4mC,qBAAoB,SAACthD,EAAKwJ,GAEvB,IADDkR,EAAIlR,EAAJkR,KAEA1a,EAAMu9C,gBAAkB7iC,CAC1B,EACA6mC,wBAAuB,SAACvhD,EAAK0J,GAE1B,IADDgR,EAAIhR,EAAJgR,KAEA1a,EAAMy9C,mBAAqB/iC,CAC7B,EACA8mC,oBAAmB,SAACxhD,EAAK2J,GAEtB,IADD+Q,EAAI/Q,EAAJ+Q,KAEA1a,EAAM09C,eAAiBhjC,CACzB,EACA+mC,oBAAmB,SAACzhD,EAAO0a,GACzB1a,EAAM29C,eAAiBjjC,CACzB,EACAgnC,yBAAwB,SAAC1hD,EAAO6vB,GAC9B7vB,EAAMy+C,mBAAqB5uB,CAC7B,EACA8xB,yBAAwB,SAAC3hD,EAAO6vB,GAC9B7vB,EAAMw+C,mBAAqB3uB,CAC7B,EACA+xB,8BAA6B,SAAC5hD,EAAO6vB,GACnC7vB,EAAMw+C,mBAAmBh9C,WAAaquB,CACxC,EACAgyB,kBAAiB,SAAC7hD,EAAO6vB,GACvB7vB,EAAMs+C,aAAezuB,CACvB,EAEAiyB,oBAAmB,SAAC9hD,EAAO6vB,GACzB7vB,EAAMu+C,eAAiB1uB,CACzB,EACAkyB,mCAAkC,SAAC/hD,EAAO6vB,GACxC7vB,EAAMs+C,aAAa0D,iBAAmBnyB,CACxC,EACAoyB,4BAA2B,SAACjiD,EAAO6vB,GACjC7vB,EAAMu+C,eAAe2D,YAAcryB,CACrC,EACAsyB,uBAAsB,SAACniD,EAAO6vB,GAC5B7vB,EAAMs+C,aAAa98C,WAAaquB,CAClC,EACAuyB,oBAAmB,SAACpiD,EAAO6vB,GACzB7vB,EAAMq+C,eAAiBxuB,CACzB,EACAwyB,gBAAe,SAACriD,GAMdA,EAAMq+C,eAAeiE,QAAQC,OAAOt9C,KAL1B,CACR/D,MAAO,GACPshD,cAAe,GACfvuC,IAAK,IAGT,EACAwuC,mBAAkB,SAACziD,EAAOiH,GACxBjH,EAAMq+C,eAAeiE,QAAQC,OAAOv6C,OAAOf,EAAO,EACpD,EACAy7C,iBAAgB,SAAC1iD,EAAO+H,MACtB/H,EAAMi/C,KAAK0D,aAAe56C,IAC5B,EACA66C,oBAAmB,SAAC5iD,EAAO+H,MACzB/H,EAAMi/C,KAAK4D,gBAAkB96C,IAC/B,EACA+6C,UAAS,SAAC9iD,EAAO+H,MACf/H,EAAMi/C,KAAKwB,KAAKsC,MAAQh7C,IAC1B,EACAi7C,YAAW,SAAChjD,EAAO4D,GACd5D,EAAMi/C,KAAKD,WACZh/C,EAAMi/C,KAAKwB,KAAK6B,QAAQW,KAAOr/C,GAEjC5D,EAAMmX,KAAK2D,OAASlX,CAEtB,EACAs/C,yBAAwB,SAACljD,EAAO4D,GAC9B5D,EAAMi/C,KAAKwB,KAAK0C,aAAaC,iBAAmBx/C,CAClD,EACAy/C,yBAAwB,SAACrjD,EAAO4D,GAC9B5D,EAAMi/C,KAAKwB,KAAK6C,aAAaF,iBAAmBx/C,CAClD,EACA2/C,qBAAoB,SAACvjD,EAAK4J,GAEvB,IADD8Q,EAAI9Q,EAAJ8Q,KAEA1a,EAAMo+C,gBAAkB1jC,CAC1B,EACA8oC,cAAa,SAACxjD,EAAO+H,MACnB/H,EAAMi/C,KAAKwB,KAAK6B,QAAQ7tC,OAAS1M,IACnC,EAiBM07C,eAAc,SAACzjD,EAAO6B,GAAI,IAAAyf,EAAA,YAAA3J,YAAAC,mBAAAC,MAAA,SAAAC,IAAA,IAAA7Q,EAAA,OAAA2Q,mBAAAK,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OAEyC,OAFzCF,EAAAC,KAAA,EAEtBlR,EAAQjH,EAAMo+C,gBAAgBsF,WAAU,SAAAC,GAAI,OAAIA,EAAK9hD,KAAOA,CAAE,IAACqW,EAAAE,KAAA,EACnDkJ,EAAK/I,KAAKoyB,cAAc9oC,GAAG,OAApCqW,EAAAO,KACTzY,EAAMo+C,gBAAgBp2C,OAAOf,EAAO,GAAEiR,EAAAE,KAAA,gBAAAF,EAAAC,KAAA,EAAAD,EAAAS,GAAAT,EAAA,SAEtCzQ,QAAQmR,IAAGV,EAAAS,IAAG,yBAAAT,EAAAY,OAAA,GAAAhB,EAAA,iBANcH,EAQhC,EACAisC,aAAY,SAAC5jD,EAAOk8C,GAEhBl8C,EAAMk8C,SADQ,OAAZA,EACe,CACflqC,KAAM,MACNmtC,OAAQ,KAGO,CACfntC,KAAM,MACNmtC,OAAQ,IAGd,EACA0E,oBAAmB,SAAC7jD,EAAK6J,GAEtB,IADD6Q,EAAI7Q,EAAJ6Q,KAEA1a,EAAMm+C,eAAiBzjC,CACzB,EACAopC,yBAAwB,SAAC9jD,EAAK+jD,GAE3B,IADDrpC,EAAIqpC,EAAJrpC,KAEA1a,EAAM0+C,iBAAmBhkC,CAC3B,EACAspC,gBAAe,SAAChkD,EAAK+Z,GAElB,IADDW,EAAIX,EAAJW,KAEA1a,EAAM2+C,WAAajkC,CACrB,EAEAupC,yBAAwB,SAACjkD,EAAOkkD,GAC9BlkD,EAAMi/C,KAAKwB,KAAK0D,qBAAuBD,CACzC,EAGAE,uBAAsB,SAACpkD,EAAO6vB,GAC5B7vB,EAAM49C,iBAAmB/tB,CAC3B,EACMw0B,gBAAe,SAACrkD,EAAO6vB,GAAK,OAAAlY,YAAAC,mBAAAC,MAAA,SAAAmB,IAAA,IAAApK,EAAA,OAAAgJ,mBAAAK,MAAA,SAAAgB,GAAA,cAAAA,EAAAd,KAAAc,EAAAb,MAAA,OAC5BxJ,EAAM5O,EAAMyvB,gBAAkBI,EAAIy0B,WAClCz0B,EAAIy0B,WAAW1qC,SAAS5Z,EAAMyvB,mBAChC7gB,EAAMihB,EAAIy0B,YAEZtkD,EAAM+9C,KAAO,IAAI3vB,KAAK,CACpBxf,IAAK,CAACA,GACNyZ,OAAQ,GACRqG,OAAQ,WACN1uB,EAAM69C,qBAAsB,EAC5B79C,EAAM89C,qBAAsB,CAC9B,EACAlvB,MAAO,WACL5uB,EAAM89C,qBAAsB,EAC5B99C,EAAM49C,iBAAmB,CAAC,CAC5B,IAEF59C,EAAM+9C,KAAKvvB,OACE,CACX0d,MAAO,QACPpgB,OAAQ+D,EAAIhuB,IAMd,wBAAAoX,EAAAH,OAAA,GAAAE,EAAA,IA1BgCrB,EA2BlC,EACA4sC,gBAAe,SAACvkD,GACdA,EAAM89C,qBAAsB,EAC5B99C,EAAM+9C,KAAKjlC,MACb,EACA0rC,yBAAwB,SAACxkD,EAAOgY,GACrBhY,EAAMykD,cAAcC,QAE7B1kD,EAAMykD,cAAcC,QAAU1kD,EAAMykD,cAAcC,QAAQhuB,KAAI,SAAAiuB,GAAG,OAAAC,IAAA,GAC5D5sC,EAAI6sC,MAAK,SAAClB,GAAI,OAAMA,EAAK3iD,OAAS2jD,EAAI3jD,IAAI,KAC1C2jD,EAAG,GAEV,GAmBFt7C,QAAS,CACPu2C,qCAAoC,SAAAkF,EAAWlG,IAC7Cr1C,EAD0Cu7C,EAANv7C,QAC7B,uCAAwCq1C,EACjD,EACAiB,qCAAoC,SAAA9oC,EAAW8nC,IAC7Ct1C,EAD0CwN,EAANxN,QAC7B,uCAAwCs1C,EACjD,EACAc,0BAAyB,SAAAoF,EAAWjG,IAClCv1C,EAD+Bw7C,EAANx7C,QAClB,4BAA6Bu1C,EACtC,EACAY,iBAAgB,SAAAsF,EAAW3hC,IACzB9Z,EADsBy7C,EAANz7C,QACT,mBAAoB8Z,EAC7B,EACA4hC,aAAY,SAAAC,EAAkBC,GAAQ,IAAxB57C,EAAM27C,EAAN37C,OAAa27C,EAALllD,MACXqjB,YACP9Z,EAAO,wCAAwC,GAE/CA,EAAO,wCAAwC,GAEjDA,EAAO,4BAA6B47C,EAAQrG,qBAC9C,EACAgB,iBAAgB,SAAAsF,EAEbnH,IACD10C,EAFM67C,EAAN77C,QAEO,mBAAoB00C,EAC7B,EACA8B,uBAAsB,SAAAsF,EAEnBnH,IACD30C,EAFM87C,EAAN97C,QAEO,yBAA0B20C,EACnC,EACA8B,OAAM,SAAAsF,GAEH,IADD/7C,EAAM+7C,EAAN/7C,OAEAA,EAAO,UACPA,EAAO,cACT,EACAm3C,kBAAiB,SAAA6E,IAGfh8C,EAFMg8C,EAANh8C,QAEO,oBACT,EACAu3C,eAAc,SAAA0E,EAEXxI,IACDzzC,EAFMi8C,EAANj8C,QAEO,iBAAkByzC,EAC3B,EACA+D,uBAAsB,SAAA0E,EAEnBxI,IACD1zC,EAFMk8C,EAANl8C,QAEO,yBAA0B0zC,EACnC,EACA+D,uBAAsB,SAAA0E,EAEnBxI,IACD3zC,EAFMm8C,EAANn8C,QAEO,yBAA0B2zC,EACnC,EACAgE,gBAAe,SAAAyE,EAEZxI,IACD5zC,EAFMo8C,EAANp8C,QAEO,kBAAmB4zC,EAC5B,EACA8D,qBAAoB,SAAA2E,EAEjBvI,IACD9zC,EAFMq8C,EAANr8C,QAEO,uBAAwB8zC,EACjC,EACA8D,iBAAgB,SAAA0E,EAEbzI,IACD7zC,EAFMs8C,EAANt8C,QAEO,mBAAoB6zC,EAC7B,EACAgE,uBAAsB,SAAA0E,EAEnB1I,IACD7zC,EAFMu8C,EAANv8C,QAEO,yBAA0B6zC,EACnC,EACM2I,aAAY,SAAAC,GAEf,IAAAnkC,EAAA,YAAAlK,YAAAC,mBAAAC,MAAA,SAAAuB,IAAA,IAAA7P,EAAAyO,EAAA,OAAAJ,mBAAAK,MAAA,SAAAuB,GAAA,cAAAA,EAAArB,KAAAqB,EAAApB,MAAA,OADK,OAAN7O,EAAMy8C,EAANz8C,OAAMiQ,EAAArB,KAAA,EAAAqB,EAAApB,KAAA,EAGcyJ,EAAKtJ,KAAK4zB,cAAa,QAAnCn0B,EAAGwB,EAAAf,MACDwtC,QACN18C,EAAO,eAAgByO,EAAIkkC,UAE3B3yC,EAAO,eAAgB,OACxBiQ,EAAApB,KAAA,gBAAAoB,EAAArB,KAAA,EAAAqB,EAAAb,GAAAa,EAAA,SAED/R,QAAQmR,IAAGY,EAAAb,IAAG,yBAAAa,EAAAV,OAAA,GAAAM,EAAA,iBATfzB,EAWH,EACMuuC,oBAAmB,SAAAC,GAEtB,IAAAp+B,EAAA,YAAApQ,YAAAC,mBAAAC,MAAA,SAAAiC,IAAA,IAAAvQ,EAAAyO,EAAA,OAAAJ,mBAAAK,MAAA,SAAAqC,GAAA,cAAAA,EAAAnC,KAAAmC,EAAAlC,MAAA,OADK,OAAN7O,EAAM48C,EAAN58C,OAAM+Q,EAAAnC,KAAA,EAAAmC,EAAAlC,KAAA,EAGc2P,EAAKxP,KAAKsyB,oBAAmB,OAAzC7yB,EAAGsC,EAAA7B,KACTlP,EAAO,sBAAuB,CAC5BmR,KAAM1C,EAAI0sC,UACVpqC,EAAAlC,KAAA,gBAAAkC,EAAAnC,KAAA,EAAAmC,EAAA3B,GAAA2B,EAAA,SAEF7S,QAAQmR,IAAG0B,EAAA3B,IAAG,yBAAA2B,EAAAxB,OAAA,GAAAgB,EAAA,iBAPfnC,EASH,EACMyuC,yBAAwB,SAAAC,GAE3B,IAAA59B,EAAA,YAAA9Q,YAAAC,mBAAAC,MAAA,SAAAyuC,IAAA,IAAA/8C,EAAAyO,EAAA,OAAAJ,mBAAAK,MAAA,SAAAsuC,GAAA,cAAAA,EAAApuC,KAAAouC,EAAAnuC,MAAA,OADK,OAAN7O,EAAM88C,EAAN98C,OAAMg9C,EAAApuC,KAAA,EAAAouC,EAAAnuC,KAAA,EAGcqQ,EAAKlQ,KAAKiuC,iBAAgB,OAAtCxuC,EAAGuuC,EAAA9tC,KACTlP,EAAO,2BAA4B,CACjCmR,KAAM1C,EAAI0sC,UACV6B,EAAAnuC,KAAA,gBAAAmuC,EAAApuC,KAAA,EAAAouC,EAAA5tC,GAAA4tC,EAAA,SAEF9+C,QAAQmR,IAAG2tC,EAAA5tC,IAAG,yBAAA4tC,EAAAztC,OAAA,GAAAwtC,EAAA,iBAPf3uC,EASH,EACM8uC,qBAAoB,SAAAC,GAEvB,IAAA19B,EAAA,YAAArR,YAAAC,mBAAAC,MAAA,SAAA8uC,IAAA,IAAAp9C,EAAAyO,EAAA,OAAAJ,mBAAAK,MAAA,SAAA2uC,GAAA,cAAAA,EAAAzuC,KAAAyuC,EAAAxuC,MAAA,OADK,OAAN7O,EAAMm9C,EAANn9C,OAAMq9C,EAAAzuC,KAAA,EAAAyuC,EAAAxuC,KAAA,EAGc4Q,EAAKzQ,KAAKuwB,qBAAoB,OAA1C9wB,EAAG4uC,EAAAnuC,KACTlP,EAAO,uBAAwB,CAC7BmR,KAAM1C,EAAI0sC,UACVkC,EAAAxuC,KAAA,gBAAAwuC,EAAAzuC,KAAA,EAAAyuC,EAAAjuC,GAAAiuC,EAAA,SAEFn/C,QAAQmR,IAAGguC,EAAAjuC,IAAG,yBAAAiuC,EAAA9tC,OAAA,GAAA6tC,EAAA,iBAPfhvC,EASH,EACMkvC,wBAAuB,SAAAC,GAE1B,IAAA37B,EAAA,YAAAxT,YAAAC,mBAAAC,MAAA,SAAAkvC,IAAA,IAAAx9C,EAAAyO,EAAA,OAAAJ,mBAAAK,MAAA,SAAA+uC,GAAA,cAAAA,EAAA7uC,KAAA6uC,EAAA5uC,MAAA,OADK,OAAN7O,EAAMu9C,EAANv9C,OAAMy9C,EAAA7uC,KAAA,EAAA6uC,EAAA5uC,KAAA,EAGc+S,EAAK5S,KAAK0uC,wBAAuB,OAA7CjvC,EAAGgvC,EAAAvuC,KACTlP,EAAO,0BAA2B,CAChCmR,KAAM1C,EAAI0sC,UACVsC,EAAA5uC,KAAA,gBAAA4uC,EAAA7uC,KAAA,EAAA6uC,EAAAruC,GAAAquC,EAAA,SAEFv/C,QAAQmR,IAAGouC,EAAAruC,IAAG,yBAAAquC,EAAAluC,OAAA,GAAAiuC,EAAA,iBAPfpvC,EASH,EACMuvC,oBAAmB,SAAAC,GAEtB,IAAAj7B,EAAA,YAAAvU,YAAAC,mBAAAC,MAAA,SAAAuvC,IAAA,IAAA79C,EAAAyO,EAAA,OAAAJ,mBAAAK,MAAA,SAAAovC,GAAA,cAAAA,EAAAlvC,KAAAkvC,EAAAjvC,MAAA,OADK,OAAN7O,EAAM49C,EAAN59C,OAAM89C,EAAAlvC,KAAA,EAAAkvC,EAAAjvC,KAAA,EAGc8T,EAAK3T,KAAKgxB,oBAAmB,OAAzCvxB,EAAGqvC,EAAA5uC,KACTlP,EAAO,sBAAuB,CAC5BmR,KAAM1C,EAAI0sC,UACV2C,EAAAjvC,KAAA,gBAAAivC,EAAAlvC,KAAA,EAAAkvC,EAAA1uC,GAAA0uC,EAAA,SAEF5/C,QAAQmR,IAAGyuC,EAAA1uC,IAAG,yBAAA0uC,EAAAvuC,OAAA,GAAAsuC,EAAA,iBAPfzvC,EASH,EAEM2vC,oBAAmB,SAAAC,GAEtB,IAAAh7B,EAAA,YAAA5U,YAAAC,mBAAAC,MAAA,SAAA2vC,IAAA,IAAAj+C,EAAAyO,EAAA,OAAAJ,mBAAAK,MAAA,SAAAwvC,GAAA,cAAAA,EAAAtvC,KAAAsvC,EAAArvC,MAAA,OADK,OAAN7O,EAAMg+C,EAANh+C,OAAMk+C,EAAAtvC,KAAA,EAAAsvC,EAAArvC,KAAA,EAGcmU,EAAKhU,KAAKiyB,oBAAmB,OAAzCxyB,EAAGyvC,EAAAhvC,KACTlP,EAAO,sBAAuByO,GAAIyvC,EAAArvC,KAAA,gBAAAqvC,EAAAtvC,KAAA,EAAAsvC,EAAA9uC,GAAA8uC,EAAA,SAElChgD,QAAQmR,IAAG6uC,EAAA9uC,IAAG,yBAAA8uC,EAAA3uC,OAAA,GAAA0uC,EAAA,iBALf7vC,EAOH,EACM+vC,qBAAoB,SAAAC,GAEvB,IAAAl7B,EAAA,YAAA9U,YAAAC,mBAAAC,MAAA,SAAA+vC,IAAA,IAAAr+C,EAAAyO,EAAA,OAAAJ,mBAAAK,MAAA,SAAA4vC,GAAA,cAAAA,EAAA1vC,KAAA0vC,EAAAzvC,MAAA,OADK,OAAN7O,EAAMo+C,EAANp+C,OAAMs+C,EAAA1vC,KAAA,EAAA0vC,EAAAzvC,KAAA,EAGcqU,EAAKlU,KAAKmyB,qBAAoB,OAA1C1yB,EAAG6vC,EAAApvC,KACTlP,EAAO,uBAAwB,CAC7BmR,KAAM1C,EAAI0sC,UACVmD,EAAAzvC,KAAA,gBAAAyvC,EAAA1vC,KAAA,EAAA0vC,EAAAlvC,GAAAkvC,EAAA,SAEFpgD,QAAQmR,IAAGivC,EAAAlvC,IAAG,yBAAAkvC,EAAA/uC,OAAA,GAAA8uC,EAAA,iBAPfjwC,EASH,EAGAmwC,gBAAiB,SAAAC,GAEd,IADDx+C,EAAMw+C,EAANx+C,OAEIyU,KAAKiiC,MAAMQ,KAAKuH,qBAClBhqC,KAAKkgB,OAAOY,KAAK,8BAA8B9jB,MAAK,SAAAhD,GAClDzO,EAAO,kBAAmB,CACxBmR,KAAM1C,EAAI0sC,SAEd,IAEA1mC,KAAKkgB,OAAOY,KAAK,8BAA8B9jB,MAAK,SAAAhD,GAClDzO,EAAO,kBAAmB,CACxBmR,KAAM1C,EAAI0sC,SAEd,GAEJ,EAEArC,gBAAe,SAAA4F,IAGb1+C,EAFM0+C,EAAN1+C,QAEO,kBACT,EACAk5C,mBAAkB,SAAAyF,EAEfjhD,IACDsC,EAFM2+C,EAAN3+C,QAEO,qBAAsBtC,EAC/B,EACAy7C,iBAAgB,SAAAyF,EAEbpgD,OACDwB,EAFM4+C,EAAN5+C,QAEO,mBAAoBxB,KAC7B,EACA66C,oBAAmB,SAAAwF,EAEhBrgD,OACDwB,EAFM6+C,EAAN7+C,QAEO,sBAAuBxB,KAChC,EACA+6C,UAAS,SAAAuF,EAENtgD,OACDwB,EAFM8+C,EAAN9+C,QAEO,YAAaxB,KACtB,EACAm7C,yBAAwB,SAAAoF,EAErB1kD,IACD2F,EAFM++C,EAAN/+C,QAEO,2BAA4B3F,EACrC,EACAy/C,yBAAwB,SAAAkF,EAErB3kD,IACD2F,EAFMg/C,EAANh/C,QAEO,2BAA4B3F,EACrC,EACAo/C,YAAW,SAAAwF,EAER5kD,IACD2F,EAFMi/C,EAANj/C,QAEO,cAAe3F,EACxB,EACA6kD,eAAc,SAAAC,EAEX3gD,OACDwB,EAFMm/C,EAANn/C,QAEO,iBAAkBxB,KAC3B,EACAy7C,cAAa,SAAAmF,EAEV5gD,OACDwB,EAFMo/C,EAANp/C,QAEO,gBAAiBxB,KAC1B,EACA6gD,aAAY,SAAAC,IAGVt/C,EAFMs/C,EAANt/C,QAEO,eACT,EACAu/C,YAAW,SAAAC,EAERnlD,IACD2F,EAFMw/C,EAANx/C,QAEO,cAAe3F,EACxB,EAGAolD,kBAAmB,SAAAC,GACXA,EAAN1/C,OAEAyU,KAAKkgB,OAAOY,KAAK,kBAAkB9jB,MAAK,SAAAhD,GAAQ,GAClD,EACAkxC,gBAAiB,SAAAC,GACTA,EAAN5/C,OAEAyU,KAAKkgB,OAAOY,KAAK,qBAAqB9jB,MAAK,SAAAhD,GAAQ,GACrD,EAGAoxC,4BAA6B,SAAAC,EAE1BnF,IACD36C,EAFM8/C,EAAN9/C,QAEO,2BAA4B26C,EACrC,EAGAE,uBAAsB,SAAAkF,EAEnBz5B,GAAK,IADNtmB,EAAM+/C,EAAN//C,OAEAA,EAAO,yBAA0BsmB,GACjCtmB,EAAO,kBAAmBsmB,EAC5B,EACA00B,gBAAe,SAAAgF,IAGbhgD,EAFMggD,EAANhgD,QAEO,kBACT,IAGN,C,ygHCx2BA,IAAImtB,IAAM,CACT,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,UAAW,CACV,IACA,IAED,aAAc,CACb,IACA,IAED,UAAW,CACV,IACA,IAED,aAAc,CACb,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,UAAW,CACV,IACA,IAED,aAAc,CACb,IACA,IAED,OAAQ,CACP,IACA,IAED,UAAW,CACV,IACA,IAED,UAAW,CACV,IACA,IAED,aAAc,CACb,IACA,IAED,UAAW,CACV,IACA,IAED,aAAc,CACb,IACA,IAED,OAAQ,CACP,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","file":"121b5b7184842961f3a0.v5.0.1.js","sourcesContent":["\r\nimport LZString from 'lz-string'\r\n\r\nfunction initialState() {\r\n return {\r\n createProject: null,\r\n previewDialog: false,\r\n soundPanel: null,\r\n chatHistoryDialog: false,\r\n chatHistory: null,\r\n project: {\r\n author_username: null,\r\n layout: [],\r\n event: [],\r\n thumb: [],\r\n sounds: [\r\n []\r\n ],\r\n global_variables: [],\r\n pageScale: [],\r\n fonts: {},\r\n slug: null\r\n },\r\n projectDetails: {\r\n title: '',\r\n synoposis: '',\r\n tags: [],\r\n genre: null,\r\n status: null,\r\n slug: null,\r\n classroom: null,\r\n assignment: {},\r\n studentmilestone: {},\r\n has_room_edit_perms: false,\r\n student_proxy: {\r\n cover: {\r\n id: 'cover',\r\n layout_objects: {},\r\n event_figures: {},\r\n records: {}\r\n }\r\n }\r\n },\r\n tabIndex: 0,\r\n tabActive: false,\r\n activeFonts: {},\r\n transferStoryDialog: false,\r\n transferIsOn: false,\r\n fontsLoaded: false,\r\n generateCover: false,\r\n isLessonEditorMode: false,\r\n nextMilestone: {\r\n nextMilestoneDialog: false,\r\n editDialog: false,\r\n showConfirmMilestone: true,\r\n showProgress: false,\r\n hideConfirmMilestone: false,\r\n fadeProgress: false,\r\n showNextMilestone: false,\r\n hideCloseBtn: false,\r\n selectedEmoji: null,\r\n selectedSatisfactionEmoji: null,\r\n progressValue: 0\r\n },\r\n addFeedback: {\r\n comment: null,\r\n category: null\r\n },\r\n lessonEditorAssignment: {},\r\n currentTutorial: {}\r\n }\r\n}\r\n\r\nconst state = {\r\n initialState: initialState(),\r\n createProject: initialState().createProject,\r\n previewDialog: initialState().previewDialog,\r\n soundPanel: initialState().soundPanel,\r\n chatHistoryDialog: initialState().chatHistoryDialog,\r\n chatHistory: initialState().chatHistory,\r\n project: {\r\n author_username: initialState().project.author_username,\r\n layout: initialState().project.layout,\r\n event: initialState().project.event,\r\n thumb: initialState().project.thumb,\r\n sounds: initialState().project.sounds,\r\n global_variables: initialState().project.global_variables,\r\n pageScale: initialState().project.pageScale,\r\n fonts: initialState().project.fonts,\r\n slug: initialState().project.slug,\r\n },\r\n projectDetails: {\r\n title: initialState().projectDetails.title,\r\n synoposis: initialState().projectDetails.synoposis,\r\n tags: initialState().projectDetails.tags,\r\n genre: initialState().projectDetails.genre,\r\n status: initialState().projectDetails.status,\r\n slug: initialState().projectDetails.slug,\r\n classroom: initialState().projectDetails.classroom,\r\n assignment: initialState().projectDetails.assignment,\r\n studentmilestone: initialState().projectDetails.studentmilestone,\r\n has_room_edit_perms: initialState().projectDetails.has_room_edit_perms,\r\n student_proxy: initialState().projectDetails.student_proxy\r\n },\r\n tabIndex: initialState().tabIndex,\r\n tabActive: initialState().tabActive,\r\n activeFonts: initialState().activeFonts,\r\n transferStoryDialog: initialState().transferStoryDialog,\r\n transferIsOn: initialState().transferIsOn,\r\n fontsLoaded: initialState().fontsLoaded,\r\n generateCover: initialState().generateCover,\r\n isLessonEditorMode: initialState().isLessonEditorMode,\r\n nextMilestone: {\r\n nextMilestoneDialog: initialState().nextMilestone.nextMilestoneDialog,\r\n editDialog: initialState().nextMilestone.editDialog,\r\n showConfirmMilestone: initialState().nextMilestone.showConfirmMilestone,\r\n showProgress: initialState().nextMilestone.showProgress,\r\n hideConfirmMilestone: initialState().nextMilestone.hideConfirmMilestone,\r\n fadeProgress: initialState().nextMilestone.fadeProgress,\r\n showNextMilestone: initialState().nextMilestone.showNextMilestone,\r\n hideCloseBtn: initialState().nextMilestone.hideCloseBtn,\r\n selectedEmoji: initialState().nextMilestone.selectedEmoji,\r\n selectedSatisfactionEmoji: initialState().nextMilestone.selectedSatisfactionEmoji,\r\n progressValue: initialState().nextMilestone.progressValue\r\n },\r\n addFeedback: {\r\n comment: initialState().addFeedback.comment,\r\n category: initialState().addFeedback.category\r\n },\r\n lessonEditorAssignment: initialState().lessonEditorAssignment,\r\n currentTutorial: initialState().currentTutorial\r\n}\r\n\r\n// getters\r\nconst getters = {}\r\n\r\n// actions\r\nconst actions = {\r\n GENERATE_COVER({\r\n commit\r\n }, status) {\r\n commit('GENERATE_COVER', status)\r\n },\r\n FONTS_LOADED({\r\n commit\r\n }) {\r\n commit('FONTS_LOADED')\r\n },\r\n resetStudioLauncherState({\r\n commit\r\n }) {\r\n commit('RESET_STATE')\r\n },\r\n SET_PREVIEW_DIALOG({\r\n commit\r\n }, previewDialog) {\r\n commit('SET_PREVIEW_DIALOG', previewDialog)\r\n },\r\n SET_SOUND_PANEL({\r\n commit\r\n }, soundPanel) {\r\n commit('SET_SOUND_PANEL', soundPanel)\r\n },\r\n RESTORE_LAYOUT_PAGE({\r\n commit\r\n }, data) {\r\n commit('RESTORE_LAYOUT_PAGE', data)\r\n }\r\n}\r\n\r\n// mutations\r\nconst mutations = {\r\n CHAT_HISTORY_DIALOG(state, value) {\r\n state.chatHistoryDialog = value\r\n },\r\n CHAT_HISTORY(stat, value){\r\n stat.chatHistory = value\r\n },\r\n GENERATE_COVER(state, status) {\r\n state.generateCover = status\r\n },\r\n FONTS_LOADED(state) {\r\n state.fontsLoaded = true\r\n },\r\n SET_PREVIEW_DIALOG(state, previewDialog) {\r\n state.previewDialog = previewDialog\r\n },\r\n SET_SOUND_PANEL(state, soundPanel) {\r\n state.soundPanel = soundPanel\r\n },\r\n RESET_STATE(state) {\r\n Object.assign(state, initialState())\r\n },\r\n SET_CREATE_PROJECT_LAYOUT(state, layoutName) {\r\n state.createProject = {\r\n layout: layoutName\r\n }\r\n },\r\n IS_LESSON_EDITOR_MODE(state, value) {\r\n state.isLessonEditorMode = value\r\n },\r\n SET_CURRENT_TUTORIAL(state, value){\r\n state.currentTutorial = value\r\n },\r\n RESET_CREATE_PROJECT_LAYOUT(state) {\r\n state.createProject = null\r\n },\r\n SET_PROJECT_AUTHOR_USERNAME(state, id) {\r\n state.project.author_username = id\r\n },\r\n SET_PROJECT_SLUG(state, slug) {\r\n state.project.slug = slug\r\n state.projectDetails.slug = slug\r\n },\r\n SET_PROJECT_LAYOUT(state, layout) {\r\n state.project.layout = []\r\n if (layout) {\r\n for (var i = 0, l = layout.length; i < l; i++) { \r\n if (typeof layout[i] == 'string') {\r\n state.project.layout.push(\r\n JSON.parse(LZString.decompressFromBase64(layout[i]))\r\n )\r\n } else {\r\n state.project.layout.push(\r\n layout[i]\r\n )\r\n }\r\n \r\n }\r\n }\r\n },\r\n SET_PROJECT_EVENTGRAPH(state, event) {\r\n state.project.event = []\r\n if (event) {\r\n for (var i = 0, l = event.length; i < l; i++) {\r\n if (typeof event[i] == 'string') {\r\n state.project.event.push(\r\n JSON.parse(LZString.decompressFromBase64(event[i]))\r\n )\r\n } else {\r\n state.project.event.push(event[i])\r\n }\r\n }\r\n }\r\n },\r\n SET_PROJECT_SOUNDS(state, sounds) {\r\n if (sounds) {\r\n state.project.sounds = sounds\r\n } else {\r\n state.project.sounds = [\r\n []\r\n ]\r\n }\r\n },\r\n SET_TRANSFER_IS_ON(state, value) {\r\n state.transferIsOn = value\r\n },\r\n SET_TRANSFER_STORY_DIALOG(state, value) {\r\n state.transferStoryDialog = value\r\n },\r\n SET_PROJECT_GLOBAL_VARIABLES(state, global_variables) {\r\n if (global_variables) {\r\n state.project.global_variables = JSON.parse(global_variables)\r\n } else {\r\n state.project.global_variables = []\r\n }\r\n },\r\n SET_PROJECT_FONTS(state, fonts) {\r\n if (fonts) {\r\n state.project.fonts = JSON.parse(fonts)\r\n } else {\r\n state.project.fonts = {}\r\n }\r\n },\r\n\r\n // feedback form details\r\n SET_ADDFEEDBACK_COMMENT(state, comment) {\r\n state.addFeedback.comment = comment\r\n },\r\n SET_ADDFEEDBACK_CATEGORY(state, category) {\r\n state.addFeedback.category = category\r\n },\r\n\r\n // form details\r\n SET_PROJECT_TITLE(state, title) {\r\n state.projectDetails.title = title\r\n },\r\n SET_PROJECT_SYNOPOSIS(state, synoposis) {\r\n state.projectDetails.synoposis = synoposis\r\n },\r\n SET_PROJECT_TAGS(state, tags) {\r\n state.projectDetails.tags = tags\r\n },\r\n SET_PROJECT_ASSIGNMENT(state, assignment) {\r\n if (assignment) {\r\n state.projectDetails.assignment = assignment\r\n } else {\r\n state.projectDetails.assignment = {}\r\n }\r\n },\r\n\r\n SET_PROJECT_STUDENT_PROXY(state, student_proxy) {\r\n state.projectDetails.student_proxy = student_proxy\r\n },\r\n SET_PROJECT_CLASSROOM(state, classroom) {\r\n if (classroom) {\r\n state.projectDetails.classroom = classroom\r\n } else {\r\n state.projectDetails.classroom = null\r\n }\r\n },\r\n SET_LESSON_EDITOR_ASSIGNMENT(state, assignment) {\r\n if(assignment){\r\n state.lessonEditorAssignment = assignment \r\n }else {\r\n state.lessonEditorAssignment = null\r\n }\r\n },\r\n SET_NEXT_MILESTONE_EDIT_DIALOG(state, value) {\r\n state.nextMilestone.editDialog = value\r\n },\r\n\r\n SHOW_NEXT_MILESTONE_DIALOG(state) {\r\n state.nextMilestone.nextMilestoneDialog = true\r\n },\r\n\r\n CLOSE_NEXT_MILESTONE_DIALOG(state) {\r\n state.nextMilestone.nextMilestoneDialog = false\r\n state.nextMilestone.showProgress = false\r\n state.nextMilestone.showNextMilestone = false\r\n state.nextMilestone.hideConfirmMilestone = false\r\n state.nextMilestone.showConfirmMilestone = true\r\n },\r\n\r\n SET_NEXT_MILESTONE_HIDE_CLOSE_BTN(state, value) {\r\n state.nextMilestone.hideCloseBtn = value\r\n },\r\n\r\n SET_NEXT_MILESTONE_SHOW_PROGRESS(state, value) {\r\n state.nextMilestone.showProgress = value\r\n },\r\n\r\n SET_NEXT_MILESTONE_FADE_PROGRESS(state, value) {\r\n state.nextMilestone.fadeProgress = value\r\n },\r\n\r\n SET_NEXT_MILESTONE_SHOW_NEXT_MILESTONE(state, value) {\r\n state.nextMilestone.showNextMilestone = value\r\n },\r\n\r\n SET_NEXT_MILESTONE_HIDE_CONFIRM_MILESTONE(state, value) {\r\n state.nextMilestone.hideConfirmMilestone = value\r\n },\r\n\r\n SET_NEXT_MILESTONE_SHOW_CONFIRM_MILESTONE(state, value) {\r\n state.nextMilestone.showConfirmMilestone = value\r\n },\r\n\r\n SET_NEXT_MILESTONE_PROGRESS_VALUE(state, completed) {\r\n if (completed){\r\n state.nextMilestone.progressValue = 100\r\n }else{\r\n state.nextMilestone.progressValue = ((state.projectDetails.studentmilestone.milestone.index - 1) / state.projectDetails.studentmilestone.milestone.total_milestones) * 100\r\n }\r\n },\r\n\r\n SET_PROJECT_ROOM_PERMISSIONS(state, has_room_edit_perms) {\r\n state.projectDetails.has_room_edit_perms = has_room_edit_perms\r\n },\r\n SUBMIT_STUDENT_MILESTONE(state) {\r\n if (state.projectDetails.studentmilestone) {\r\n state.projectDetails.studentmilestone.status = '1'\r\n state.projectDetails.studentmilestone.is_submitted = true\r\n state.projectDetails.studentmilestone.is_ongoing = false\r\n }\r\n },\r\n SET_STUDENT_PROXY(state, student_proxy) {\r\n if (typeof student_proxy === 'string') {\r\n try {\r\n state.projectDetails.student_proxy = JSON.parse(student_proxy);\r\n } catch (e) {\r\n console.error('Invalid JSON:', e);\r\n state.projectDetails.student_proxy = {cover: {\r\n id: 'cover',\r\n layout_objects: {},\r\n event_figures: {},\r\n records: {}\r\n }};\r\n }\r\n } else if (student_proxy) {\r\n state.projectDetails.student_proxy = student_proxy;\r\n } else {\r\n state.projectDetails.student_proxy = {cover: {\r\n id: 'cover',\r\n layout_objects: {},\r\n event_figures: {},\r\n records: {}\r\n }};\r\n }\r\n },\r\n SET_PROJECT_MILESTONE(state, studentmilestone) {\r\n if (studentmilestone) {\r\n state.projectDetails.studentmilestone = studentmilestone\r\n } else {\r\n state.projectDetails.studentmilestone = {}\r\n }\r\n },\r\n SET_PROJECT_GENRE(state, genre) {\r\n state.projectDetails.genre = genre\r\n },\r\n SET_PROJECT_STATUS(state, status) {\r\n state.projectDetails.status = status\r\n },\r\n\r\n RESTORE_LAYOUT_PAGE(state, data) {\r\n // console.log(JSON.parse(data.layout))\r\n // state.project.layout[data.pageNumber] = JSON.parse(data.layout)\r\n state.project.layout.splice(data.pageNumber, 0, JSON.parse(data.layout))\r\n },\r\n // methods\r\n switchMode: state => {\r\n state.tabActive = false\r\n state.eventGraphMode = !state.eventGraphMode\r\n },\r\n addPage: state => {\r\n state.project.layout.splice(state.pageSelected, 0, 'newPage')\r\n state.project.event.splice(state.pageSelected, 0, 'newPage')\r\n state.project.thumb.splice(state.pageSelected, 0, 'newPage')\r\n state.pageSelected++\r\n },\r\n\r\n deletePage: state => {\r\n if (state.project.layout.length <= 1) return\r\n\r\n state.project.layout.splice(state.pageSelected, 1)\r\n state.project.event.splice(state.pageSelected, 1)\r\n state.project.thumb.splice(state.pageSelected, 1)\r\n\r\n if (state.pageSelected > 0) {\r\n state.pageSelected--\r\n }\r\n },\r\n setPageIndex(state, index) {\r\n state.pageSelected = index\r\n },\r\n setTabIndex(state, index) {\r\n state.tabIndex = index\r\n state.tabActive = true\r\n },\r\n setPageScale(state, data) {\r\n state.project.pageScale[data.pageNumber] = data.pageScale\r\n },\r\n addActiveFont(state, data) {\r\n if (!state.activeFonts[state.pageSelected]) {\r\n state.activeFonts[state.pageSelected] = {}\r\n }\r\n state.activeFonts[state.pageSelected][data.id] = data.font\r\n },\r\n setLayoutPageDimensions(state, data) {\r\n state.project.layout[state.pageSelected].setHeight(data.height)\r\n state.project.layout[state.pageSelected].setWidth(data.width)\r\n },\r\n setLayoutPageDirty: state => {\r\n state.project.layout[state.pageSelected].dirty = true\r\n }\r\n // incrementObjectCounter(state, objectName) {\r\n // state.objectsCounters[objectName]++\r\n // }\r\n // insertObjOnPage(state, o){\r\n\r\n // if (o.left - o.width * o.scaleX / 2 < 0) {\r\n // o.left = 20 + o.width * o.scaleX / 2;\r\n // }\r\n\r\n // if (o.top - o.height * o.scaleY < 0) {\r\n // o.top = 20 + o.height * o.scaleY / 2;\r\n // }\r\n\r\n // state.project.layout[0].add(o);\r\n\r\n // o.animate(\"opacity\", 1, {\r\n // duration: 500,\r\n // easing: fabric.util.ease.easeOutQuart,\r\n // abort: function() {\r\n // if (!state.project.layout[state.pageSelected]) {\r\n // callback();\r\n // return true;\r\n // }\r\n // },\r\n // onChange: state.project.layout[\r\n // state.pageSelected\r\n // ].renderAll.bind(\r\n // state.project.layout[state.pageSelected]\r\n // ),\r\n // onComplete: function onComplete() {\r\n // if (state.project.layout[state.pageSelected]) {\r\n // state.project.layout[\r\n // state.pageSelected\r\n // ].setActiveObject(o);\r\n // // setTimeout(function() {\r\n // // callback();\r\n // // }, 10);\r\n // console.log(state.project.layout[state.pageSelected]);\r\n // state.project.layout[0].dirty = true;\r\n // state.project.layout[0].requestRenderAll();\r\n // }\r\n // }\r\n // });\r\n\r\n // o.animate(\r\n // \"top\",\r\n // o.top +\r\n // 10 * state.project.pageScale[state.pageSelected],\r\n // {\r\n // duration: 700,\r\n // easing: fabric.util.ease.easeOutBounce,\r\n // abort: function() {\r\n // if (!state.project.layout[state.pageSelected]) {\r\n // return true;\r\n // }\r\n // }\r\n // }\r\n // );\r\n // }\r\n}\r\n\r\nexport default {\r\n namespaced: true,\r\n state,\r\n getters,\r\n actions,\r\n mutations\r\n}\r\n","const state = {\r\n languages: {\r\n Afrikaans: 'af-ZA',\r\n አማርኛ: 'am-ET',\r\n العربية: 'ar-EG',\r\n Azərbaycanca: 'az-AZ',\r\n বাংলা: 'bn-IN',\r\n Indonesian: 'id-ID',\r\n Melayu: 'ms-MY',\r\n Català: 'ca-ES',\r\n Čeština: 'cs-CZ',\r\n Dansk: 'da-DK',\r\n Deutsch: 'de-DE',\r\n English: 'en-US',\r\n Español: 'es-ES',\r\n Filipino: 'fil-PH',\r\n Français: 'fr-FR',\r\n Basa_Jawa: 'jv-ID',\r\n Galego: 'gl-ES',\r\n ગુજરાતી: 'gu-IN',\r\n Hrvatski: 'hr-HR',\r\n IsiZulu: 'zu-ZA',\r\n Íslenska: 'is-IS',\r\n Italiano: 'it-IT',\r\n ಕನ್ನಡ: 'kn-IN',\r\n ភាសាខ្មែរ: 'km-KH',\r\n Latviešu: 'lv-LV',\r\n Lietuvių: 'lt-LV',\r\n മലയാളം: 'ml-IN',\r\n मराठी: 'mr-IN',\r\n Magyar: 'hu-HU',\r\n ລາວ: 'lo-LA',\r\n Nederlands: 'nl-NL',\r\n नेपाली: 'ne-NP',\r\n Norsk_bokmål: 'nb-NO',\r\n Polski: 'pl-PL',\r\n Português: 'pt-PT',\r\n Português_Brasil: 'pt-BR',\r\n Română: 'ro-RO',\r\n සිංහල: 'si-LK',\r\n Slovenščina: 'sl-SI',\r\n Sunda: 'su-ID',\r\n Slovenčina: 'sk-SK',\r\n Suomi: 'sl-SI',\r\n Svenska: 'sv-SE',\r\n Kiswahili_Kenya: 'sw-KE',\r\n Kiswahili_Tanzania: 'sw-TZ',\r\n ქართული: 'ka-GE',\r\n Հայերեն: 'hy-AM',\r\n தமிழ்: 'ta-IN',\r\n తెలుగు: 'te-IN',\r\n Tiếng_Việt: 'vi-VN',\r\n Türkçe: 'tr-TR',\r\n اُردُو: 'ur-PK',\r\n Ελληνικά: 'el-GR',\r\n български: 'bg-BG',\r\n Pусский: 'ru-RU',\r\n Српски: 'sr-RS',\r\n Українська: 'uk-UA',\r\n 한국어: 'ko-KR',\r\n 普通话_中国大陆: 'cmn-Hans-TW',\r\n 普通话_台灣: 'cmn-Hant-TW',\r\n 粵語: 'yue-Hant-HK',\r\n 日本語: 'ja-JP',\r\n हिन्दी: 'hi-IN',\r\n ภาษาไทย: 'th-TH'\r\n },\r\n fonts: [\r\n 'Lexend',\r\n 'Abril Fatface',\r\n 'Acme',\r\n 'Alegreya',\r\n 'Alex Brush',\r\n 'Alfa Slab One',\r\n 'Allerta Stencil',\r\n 'Allura',\r\n 'Alice',\r\n 'Almendra Display',\r\n 'Amatic SC',\r\n 'Annie Use Your Telescope',\r\n 'Anton',\r\n 'Architects Daughter',\r\n 'Aref Ruqaa',\r\n 'Arvo',\r\n 'Atma',\r\n 'Audiowide',\r\n 'Averia Sans Libre',\r\n 'Bad Script',\r\n 'Bangers',\r\n 'Barrio',\r\n 'Bebas Neue',\r\n 'BenchNine',\r\n 'Berkshire Swash',\r\n 'Bigelow Rules',\r\n 'Boogaloo',\r\n 'Cabin Sketch',\r\n 'Caesar Dressing',\r\n 'Carter One',\r\n 'Caveat Brush',\r\n 'Chakra Petch',\r\n 'Cherry Swash',\r\n 'Chewy',\r\n 'Chilanka',\r\n 'Cinzel',\r\n 'Codystar',\r\n 'Combo',\r\n 'Cormorant Garamond',\r\n 'Cormorant Unicase',\r\n 'Courgette',\r\n 'Crafty Girls',\r\n 'Creepster',\r\n 'Damion',\r\n 'Dancing Script',\r\n 'Devonshire',\r\n 'Dosis',\r\n 'Dr Sugiyama',\r\n 'Eater',\r\n 'Emilys Candy',\r\n 'Exo',\r\n 'Finger Paint',\r\n 'Flavors',\r\n 'Fredoka One',\r\n 'Fredericka the Great',\r\n 'Frijole',\r\n 'Gentium Basic',\r\n 'Girassol',\r\n 'Glass Antiqua',\r\n 'Gloria Hallelujah',\r\n 'Great Vibes',\r\n 'Gochi Hand',\r\n 'Grand Hotel',\r\n 'Great Vibes',\r\n 'Griffy',\r\n 'Handlee',\r\n 'Henny Penny',\r\n 'Homemade Apple',\r\n 'IM Fell French Canon SC',\r\n 'Indie Flower',\r\n 'Irish Grover',\r\n 'Jolly Lodger',\r\n 'Josefin Sans',\r\n 'Josefin Slab',\r\n 'Julius Sans One',\r\n 'Kalam',\r\n 'Kaushan Script',\r\n 'Kite One',\r\n 'Kreon',\r\n 'Lateef',\r\n 'Lato',\r\n 'Lato Heavy',\r\n 'Libre Baskerville',\r\n 'Libre Franklin',\r\n 'Limelight',\r\n 'Lobster Two',\r\n 'Londrina Shadow',\r\n 'Londrina Sketch',\r\n 'Lora',\r\n 'Love Ya Like A Sister',\r\n 'Luckiest Guy',\r\n 'Marck Script',\r\n 'Margarine',\r\n 'Merienda',\r\n 'Merriweather',\r\n 'Metal Mania',\r\n 'Miltonian Tattoo',\r\n 'Monoton',\r\n 'Montserrat',\r\n 'Mystery Quest',\r\n 'Nanum Brush Script',\r\n 'Nanum Pen Script',\r\n 'Neucha',\r\n 'Nothing You Could Do',\r\n 'Nunito',\r\n 'Open Sans',\r\n 'Orbitron',\r\n 'Oregano',\r\n 'Oswald',\r\n 'Over the Rainbow',\r\n 'Pacifico',\r\n 'Pangolin',\r\n 'Parisienne',\r\n 'Patrick Hand',\r\n 'Permanent Marker',\r\n 'Poppins',\r\n 'Port Lligat Slab',\r\n 'Press Start 2P',\r\n 'Prosto One', \r\n 'Princess Sofia',\r\n 'Proza Libre',\r\n 'Quando',\r\n 'Quattrocento',\r\n 'Quicksand',\r\n 'Racing Sans One',\r\n 'Raleway',\r\n 'Rammetto One',\r\n 'Ranga',\r\n 'Ravi Prakash',\r\n 'Reenie Beanie',\r\n 'Ribeye',\r\n 'Roboto',\r\n 'Roboto Condensed',\r\n 'Roboto Slab',\r\n 'Rock Salt',\r\n 'Rosario',\r\n 'Rubik 80s Fade',\r\n 'Ruge Boogie',\r\n 'Sacramento',\r\n 'Satisfy',\r\n 'Secular One',\r\n 'Sevillana',\r\n 'Sigmar One',\r\n 'Spicy Rice',\r\n 'Schoolbell',\r\n 'Sevillana',\r\n 'Shadows Into Light Two',\r\n 'Share Tech Mono',\r\n 'Shojumaru',\r\n 'Sirin Stencil',\r\n 'Slackey',\r\n 'Snowburst One',\r\n 'Special Elite',\r\n 'Staatliches',\r\n 'Tangerine',\r\n 'Taviraj',\r\n 'Teko',\r\n 'Tienne',\r\n 'Tillana',\r\n 'Times Neue Roman',\r\n 'Trade Winds',\r\n 'Ultra',\r\n 'Unica One',\r\n 'Vast Shadow',\r\n 'Voltaire',\r\n 'VT323',\r\n 'Yellowtail',\r\n 'ZCOOL KuaiLe'\r\n ],\r\n templates: {\r\n left: '/img/studio/templates/template-left.jpg',\r\n bottom: '/img/studio/templates/template-bottom.jpg',\r\n right: '/img/studio/templates/template-right.jpg',\r\n top: '/img/studio/templates/template-top.jpg'\r\n },\r\n fontSizes: [20, 22, 24, 26, 28, 36, 40, 48, 60, 72, 80, 88, 96, 106, 114],\r\n assetCategories: [\r\n \r\n {\r\n icon: 'mdiFormatTitle',\r\n name: 'text',\r\n },\r\n {\r\n icon: 'mdiWallpaper',\r\n name: 'images'\r\n },\r\n {\r\n icon: 'mdiTexture',\r\n name: 'backgrounds'\r\n },\r\n {\r\n icon: 'mdiRun',\r\n name: 'animations'\r\n },\r\n {\r\n icon: 'mdiShapeOutline',\r\n name: 'shapes'\r\n },\r\n {\r\n icon: 'mdiLightbulbOnOutline',\r\n name: 'widgets'\r\n },\r\n {\r\n icon: 'mdiLandPlots',\r\n name: 'templates'\r\n },\r\n {\r\n icon: 'mdiCloudUploadOutline',\r\n name: 'uploads'\r\n },\r\n \r\n ],\r\n blockCategories: [\r\n {\r\n icon: 'mdiFlaskOutline',\r\n name: 'transform', \r\n color: 'rgb(67, 160, 71)'\r\n },\r\n {\r\n icon: 'mdiMusicNote',\r\n name: 'sounds',\r\n color: 'rgb(67, 160, 71)'\r\n },\r\n {\r\n icon: 'mdiShipWheel',\r\n name: 'controls',\r\n color: 'rgb(67, 160, 71)'\r\n },\r\n {\r\n icon: 'mdiVariable',\r\n name: 'variables',\r\n },\r\n {\r\n icon: 'mdiCallSplit',\r\n name: 'logic',\r\n color: 'rgb(255,255,255)'\r\n },\r\n {\r\n icon: 'mdiCursorDefaultClickOutline',\r\n name: 'events',\r\n color: 'rgb(251, 140, 0)' \r\n\r\n },\r\n {\r\n icon: 'mdiWidgetsOutline',\r\n name: 'objects',\r\n color: 'rgb(154, 103, 234)'\r\n }\r\n ],\r\n blocks: {\r\n functions: [\r\n {\r\n id: 'textEffectBlock',\r\n src: '/functions/textEffectBlock.svg',\r\n thumb_height: 0\r\n },\r\n {\r\n id: 'animateSpineBlock',\r\n src: '/functions/animateSpineBlock.svg',\r\n thumb_height: 182\r\n },\r\n {\r\n id: 'fadeBlock',\r\n src: '/functions/fadeBlock.svg',\r\n thumb_height: 242\r\n },\r\n {\r\n id: 'moveToBlockAbsolute',\r\n src: '/functions/moveToBlockAbsolute.svg',\r\n thumb_height: 242\r\n },\r\n {\r\n id: 'moveToBlockRelative',\r\n src: '/functions/moveToBlockRelative.svg',\r\n thumb_height: 122\r\n },\r\n {\r\n id: 'blinkBlock',\r\n src: '/functions/blinkBlock.svg',\r\n thumb_height: 122\r\n },\r\n {\r\n id: 'bounceBlock',\r\n src: '/functions/bounceBlock.svg',\r\n thumb_height: 212\r\n },\r\n // {\r\n // id: 'setObjectAttribute',\r\n // src: '/functions/set-obj-attr.png'\r\n // },\r\n {\r\n id: 'scaleBlock',\r\n src: '/functions/scaleBlock.svg',\r\n thumb_height: 212\r\n },\r\n {\r\n id: 'rotateBlock',\r\n src: '/functions/rotateBlock.svg',\r\n thumb_height: 157\r\n },\r\n // {\r\n // id: 'scrollingObjectsBlock',\r\n // src: '/functions/scrolling-obj.png'\r\n // },\r\n {\r\n id: 'changeImageBlock',\r\n src: '/functions/changeImageBlock.svg',\r\n thumb_height: 122\r\n },\r\n {\r\n id: 'showBlock',\r\n src: '/functions/showBlock.svg',\r\n thumb_height: 122\r\n },\r\n {\r\n id: 'hideBlock',\r\n src: '/functions/hideBlock.svg',\r\n thumb_height: 149.7\r\n },\r\n {\r\n id: 'textObjectEqualsValueBlock',\r\n src: '/functions/textObjectEqualsValueBlock.svg',\r\n thumb_height: 149.7\r\n },\r\n {\r\n id: 'textObjectEqualsVariableBlock',\r\n src: '/functions/textObjectEqualsVariableBlock.svg',\r\n thumb_height: 122\r\n },\r\n {\r\n id: 'restoreObjectBlock',\r\n src: '/functions/restoreObjectBlock.svg',\r\n thumb_height: 182\r\n },\r\n {\r\n id: 'setObjectPositionBlock',\r\n src: '/functions/setObjectPositionBlock.svg',\r\n thumb_height: 152\r\n },\r\n {\r\n id: 'flipObjectBlock',\r\n src: '/functions/flipObjectBlock.svg',\r\n thumb_height: 145\r\n },\r\n ],\r\n sounds: [\r\n {\r\n id: 'playRecordBlock',\r\n src: '/functions/playRecordBlock.svg',\r\n thumb_height: 0\r\n },\r\n {\r\n id: 'playMusicBlock',\r\n src: '/functions/playMusicBlock.svg',\r\n thumb_height: 152\r\n },\r\n {\r\n id: 'playSoundEffectBlock',\r\n src: '/functions/playSoundEffectBlock.svg',\r\n thumb_height: 182\r\n },\r\n {\r\n id: 'stopMusicBlock',\r\n src: '/functions/stopMusicBlock.svg',\r\n thumb_height: 152\r\n },\r\n ],\r\n controls: [\r\n {\r\n id: 'goToPageBlock',\r\n src: '/functions/goToPageBlock.svg',\r\n thumb_height: 0\r\n },\r\n {\r\n id: 'goToLinkBlock',\r\n src: '/functions/goToLinkBlock.svg',\r\n thumb_height: 122\r\n\r\n },\r\n {\r\n id: 'lockSwipeRightBlock',\r\n src: '/functions/lockSwipeRightBlock.svg',\r\n thumb_height: 127\r\n },\r\n {\r\n id: 'lockSwipeLeftBlock',\r\n src: '/functions/lockSwipeLeftBlock.svg',\r\n thumb_height: 84.22\r\n },\r\n {\r\n id: 'waitBlock',\r\n src: '/functions/waitBlock.svg',\r\n thumb_height: 78.67\r\n },\r\n {\r\n id: 'setDraggableBlock',\r\n src: '/functions/setDraggableBlock.svg',\r\n thumb_height: 122\r\n }\r\n ],\r\n variables: [\r\n {\r\n id: 'createTextVariables',\r\n src: '/variables/createTextVariables.svg',\r\n type: 'text',\r\n thumb_height: 0\r\n },\r\n {\r\n id: 'textVariableEqualsValueBlock',\r\n src: '/variables/textVariableEqualsValueBlock.svg',\r\n type: 'text',\r\n thumb_height: 99.16\r\n },\r\n {\r\n id: 'textVariableEqualsVariableBlock',\r\n src: '/variables/textVariableEqualsVariableBlock.svg',\r\n type: 'text',\r\n thumb_height: 159.75\r\n },\r\n {\r\n id: 'textVariableEqualsTextObjectBlock',\r\n src: '/variables/textVariableEqualsTextObjectBlock.svg',\r\n type: 'text',\r\n thumb_height: 149.48\r\n },\r\n {\r\n id: 'insertTextBlock',\r\n src: '/variables/insertTextBlock.svg',\r\n type: 'text',\r\n thumb_height: 140.45\r\n },\r\n {\r\n id: 'arithmeticCalculatorBlock',\r\n src: '/variables/arithmeticCalculatorBlock.svg',\r\n type: 'text',\r\n thumb_height: 173.39\r\n },\r\n {\r\n id: 'createBooleanVariables',\r\n src: '/variables/createBooleanVariables.svg',\r\n type: 'boolean',\r\n thumb_height: 154.42\r\n },\r\n {\r\n id: 'variableBlock',\r\n src: '/variables/variableBlock.svg',\r\n type: 'boolean',\r\n thumb_height: 93.59\r\n },\r\n {\r\n id: 'booleanVariableEqualsValueBlock',\r\n src: '/variables/booleanVariableEqualsValueBlock.svg',\r\n type: 'boolean',\r\n thumb_height: 97\r\n },\r\n {\r\n id: 'booleanVariableEqualsVariableBlock',\r\n src: '/variables/booleanVariableEqualsVariableBlock.svg',\r\n type: 'boolean',\r\n thumb_height: 159.75\r\n },\r\n {\r\n id: 'createNumberVariables',\r\n src: '/variables/createNumberVariables.svg',\r\n type: 'number',\r\n thumb_height: 159.75\r\n },\r\n {\r\n id: 'numberVariableEqualsValueBlock',\r\n src: '/variables/numberVariableEqualsValueBlock.svg',\r\n type: 'number',\r\n thumb_height: 93.59\r\n },\r\n {\r\n id: 'numberVariableEqualsVariableBlock',\r\n src: '/variables/numberVariableEqualsVariableBlock.svg',\r\n type: 'number',\r\n thumb_height: 159.75\r\n },\r\n {\r\n id: 'numberVariableEqualsRandomBlock',\r\n src: '/variables/numberVariableEqualsRandomBlock.svg',\r\n type: 'number',\r\n thumb_height: 149.48\r\n },\r\n {\r\n id: 'incrementBlock',\r\n src: '/variables/incrementBlock.svg',\r\n type: 'number',\r\n thumb_height: 170.47\r\n },\r\n {\r\n id: 'decrementBlock',\r\n src: '/variables/decrementBlock.svg',\r\n type: 'number',\r\n thumb_height: 144.94\r\n }\r\n ],\r\n logic: [\r\n {\r\n id: 'ANDGateBlock',\r\n src: '/logics/ANDGateBlock.svg',\r\n thumb_height: 0\r\n },\r\n {\r\n id: 'ORGateBlock',\r\n src: '/logics/ORGateBlock.svg',\r\n thumb_height: 137\r\n },\r\n {\r\n id: 'branchBlock',\r\n src: '/logics/branchBlock.svg',\r\n thumb_height: 137\r\n },\r\n {\r\n id: 'numberComparisonBlock',\r\n src: '/logics/numberComparisonBlock.svg',\r\n thumb_height: 116.48\r\n },\r\n {\r\n id: 'textComparisonBlock',\r\n src: '/logics/textComparisonBlock.svg',\r\n thumb_height: 154.42\r\n }\r\n ],\r\n events: [\r\n {\r\n id: 'onPageStartBlock',\r\n src: '/events/onPageStartBlock.svg',\r\n thumb_height: 0\r\n },\r\n {\r\n id: 'onClickBlock',\r\n src: '/events/onClickBlock.svg',\r\n thumb_height: 152\r\n },\r\n // {\r\n // id: 'onTouchBlock',\r\n // src: '/events/onClickBlock.svg'\r\n // },\r\n // {\r\n // id: 'onClickOnceBlock',\r\n // src: '/events/onClickOnceBlock.png'\r\n // },\r\n {\r\n id: 'onDragOverBlock',\r\n src: '/events/onDragOverBlock.svg',\r\n thumb_height: 212\r\n },\r\n // {\r\n // id: 'onDragOverOnceBlock',\r\n // src: '/events/onDragOverOnceBlock.png'\r\n // },\r\n {\r\n id: 'onTextInputBlock',\r\n src: '/events/onTextInputBlock.svg',\r\n thumb_height: 242\r\n },\r\n {\r\n id: 'onPronounceBlock',\r\n src: '/events/onPronounceBlock.svg',\r\n thumb_height: 182\r\n },\r\n {\r\n id: 'onCollisionBlock',\r\n src: '/events/onCollisionBlock.svg',\r\n thumb_height: 212\r\n },\r\n // {\r\n // id: 'onTextInputOnceBlock',\r\n // src: '/events/onTextInputOnceBlock.png'\r\n // }\r\n ]\r\n },\r\n\r\n textEffects: [\r\n 'typeWriter',\r\n 'fadeIn',\r\n 'breathe',\r\n 'pop',\r\n 'pan',\r\n 'rise',\r\n // 'tumble',\r\n 'flipObject',\r\n 'scrap',\r\n // 'stomp',\r\n 'wave',\r\n 'starfall',\r\n 'whirlpool',\r\n // 'roll'\r\n ],\r\n\r\n easings: [\r\n {\r\n 'name': 'InSine',\r\n 'path': 'M1 84c14 1 47.75 1 123-83',\r\n 'transition': '0.12, 0, 0.39, 0',\r\n 'maths': 'return 1 - cos((x * PI) / 2);',\r\n 'gradient': 'url(#in)'\r\n },\r\n {\r\n 'name': 'OutSine',\r\n 'path': 'M1 84C76.25 0 110 0 124 1',\r\n 'transition': '0.61, 1, 0.88, 1',\r\n 'maths': 'return sin((x * PI) / 2);',\r\n 'gradient': 'url(#out)'\r\n },\r\n {\r\n 'name': 'InOutSine',\r\n 'path': 'M1 84C46.25 85 78.75 0 124 1',\r\n 'transition': '0.37, 0, 0.63, 1',\r\n 'maths': 'return -(cos(PI * x) - 1) / 2;',\r\n 'gradient': 'url(#inOut)'\r\n },\r\n {\r\n 'name': 'InQuad',\r\n 'path': 'M1 84c12.75 1 61.5 1 123-83',\r\n 'transition': '0.11, 0, 0.5, 0',\r\n 'maths': 'return x * x;',\r\n 'gradient': 'url(#in)'\r\n },\r\n {\r\n 'name': 'OutQuad',\r\n 'path': 'M1 84C62.5 0 111.25 0 124 1',\r\n 'transition': '0.5, 1, 0.89, 1',\r\n 'maths': 'return 1 - (1 - x) * (1 - x);',\r\n 'gradient': 'url(#out)'\r\n },\r\n {\r\n 'name': 'InOutQuad',\r\n 'path': 'M1 84C56.25 85 68.75 0 124 1',\r\n 'transition': '0.45, 0, 0.55, 1',\r\n 'maths': 'return x < 0.5 ? 2 * x * x : 1 - pow(-2 * x + 2, 2) / 2;',\r\n 'gradient': 'url(#inOut)'\r\n },\r\n {\r\n 'name': 'InCubic',\r\n 'path': 'M1 84c39 1 82.75 1 123-83',\r\n 'transition': '0.32, 0, 0.67, 0',\r\n 'maths': 'return x * x * x;',\r\n 'gradient': 'url(#in)'\r\n },\r\n {\r\n 'name': 'OutCubic',\r\n 'path': 'M1 84C41.25 0 85 0 124 1',\r\n 'transition': '0.33, 1, 0.68, 1',\r\n 'maths': 'return 1 - pow(1 - x, 3);',\r\n 'gradient': 'url(#out)'\r\n },\r\n {\r\n 'name': 'InOutCubic',\r\n 'path': 'M1 84C81.25 85 43.75 0 124 1',\r\n 'transition': '0.65, 0, 0.35, 1',\r\n 'maths': 'return x < 0.5 ? 4 * x * x * x : 1 - pow(-2 * x + 2, 3) / 2;',\r\n 'gradient': 'url(#inOut)'\r\n },\r\n {\r\n 'name': 'InQuart',\r\n 'path': 'M1 84c61.5 1 92.75 1 123-83',\r\n 'transition': '0.5, 0, 0.75, 0',\r\n 'maths': 'return x * x * x * x;',\r\n 'gradient': 'url(#in)'\r\n },\r\n {\r\n 'name': 'OutQuart',\r\n 'path': 'M1 84C31.25 0 62.5 0 124 1',\r\n 'transition': '0.25, 1, 0.5, 1',\r\n 'maths': 'return 1 - pow(1 - x, 4);',\r\n 'gradient': 'url(#out)'\r\n },\r\n {\r\n 'name': 'InOutQuart',\r\n 'path': 'M1 84C95 85 30 0 124 1',\r\n 'transition': '0.76, 0, 0.24, 1',\r\n 'maths': 'return x < 0.5 ? 8 * x * x * x * x : 1 - pow(-2 * x + 2, 4) / 2;',\r\n 'gradient': 'url(#inOut)'\r\n },\r\n {\r\n 'name': 'InQuint',\r\n 'path': 'M1 84c79 1 96.5 1 123-83',\r\n 'transition': '0.64, 0, 0.78, 0',\r\n 'maths': 'return x * x * x * x * x;',\r\n 'gradient': 'url(#in)'\r\n },\r\n {\r\n 'name': 'OutQuint',\r\n 'path': 'M1 84C27.5 0 45 0 124 1',\r\n 'transition': '0.22, 1, 0.36, 1',\r\n 'maths': 'return 1 - pow(1 - x, 5);',\r\n 'gradient': 'url(#out)'\r\n },\r\n {\r\n 'name': 'InOutQuint',\r\n 'path': 'M1 84C103.75 85 21.25 0 124 1',\r\n 'transition': '0.83, 0, 0.17, 1',\r\n 'maths': 'return x < 0.5 ? 16 * x * x * x * x * x : 1 - pow(-2 * x + 2, 5) / 2;',\r\n 'gradient': 'url(#inOut)'\r\n },\r\n \r\n {\r\n 'name': 'InExpo',\r\n 'path': 'M1 84c86.5 1 104 1 123-83',\r\n 'transition': '0.7, 0, 0.84, 0',\r\n 'maths': 'return x === 0 ? 0 : pow(2, 10 * x - 10);',\r\n 'gradient': 'url(#in)'\r\n },\r\n {\r\n 'name': 'OutExpo',\r\n 'path': 'M1 84C20 0 37.5 0 124 1',\r\n 'transition': '0.16, 1, 0.3, 1',\r\n 'maths': 'return x === 1 ? 1 : 1 - pow(2, -10 * x);',\r\n 'gradient': 'url(#out)'\r\n },\r\n {\r\n 'name': 'InOutExpo',\r\n 'path': 'M1 84C108.75 85 16.25 0 124 1',\r\n 'transition': '0.87, 0, 0.13, 1',\r\n 'maths': 'return x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ? pow(2, 20 * x - 10) / 2 : (2 - pow(2, -20 * x + 10)) / 2;',\r\n 'gradient': 'url(#inOut)'\r\n },\r\n {\r\n 'name': 'InCirc',\r\n 'path': 'M1 84c67.75 1 124-37.25 123-83',\r\n 'transition': '0.55, 0, 1, 0.45',\r\n 'maths': 'return 1 - sqrt(1 - pow(x, 2));',\r\n 'gradient': 'url(#in)'\r\n },\r\n {\r\n 'name': 'OutCirc',\r\n 'path': 'M1 84C0 38.25 56.25 0 124 1',\r\n 'transition': '0, 0.55, 0.45, 1',\r\n 'maths': 'return sqrt(1 - pow(x - 1, 2));',\r\n 'gradient': 'url(#out)'\r\n },\r\n {\r\n 'name': 'InOutCirc',\r\n 'path': 'M1 84C106.25 85 18.75 0 124 1',\r\n 'transition': '0.85, 0, 0.15, 1)\"',\r\n 'maths': 'return x < 0.5 ? (1 - sqrt(1 - pow(2 * x, 2))) / 2 : (sqrt(1 - pow(-2 * x + 2, 2)) + 1) / 2;',\r\n 'gradient': 'url(#inOut)'\r\n },\r\n {\r\n 'name': 'InBack',\r\n 'path': 'M1 84c44 1 81.5 48.6 123-83',\r\n 'transition': '0.36, 0, 0.66, -0.56',\r\n 'maths': 'const c1 = 1.70158;const c3 = c1 + 1;return c3 * x * x * x - c1 * x * x;',\r\n 'gradient': 'url(#in)'\r\n },\r\n {\r\n 'name': 'OutBack',\r\n 'path': 'M1 84C42.5-47.6 80 0 124 1',\r\n 'transition': '0.34, 1.56, 0.64, 1',\r\n 'maths': 'const c1 = 1.70158;const c3 = c1 + 1;return 1 + c3 * pow(x - 1, 3) + c1 * pow(x - 1, 2);',\r\n 'gradient': 'url(#out)'\r\n },\r\n {\r\n 'name': 'InOutBack',\r\n 'path': 'M1 84C85 136 40-51 124 1',\r\n 'transition': '0.68, -0.6, 0.32, 1.6',\r\n 'maths': 'const c1 = 1.70158; const c2 = c1 * 1.525; return x < 0.5 ? (pow(2 * x, 2) * ((c2 + 1) * 2 * x - c2)) / 2 : (pow(2 * x - 2, 2) * ((c2 + 1) * (x * 2 - 2) + c2) + 2) / 2;',\r\n 'gradient': 'url(#inOut)'\r\n },\r\n {\r\n 'name': 'InElastic',\r\n 'path': 'M1 84l.24.03 1.24-.02 1.24-.02 1.24-.02 1.24-.03 1.24-.02 1.24-.03 1.24-.02 1.24-.02 1.24-.01 1.24-.01h1.24l1.24.01 1.24.02 1.24.02 1.24.04 1.24.05 1.24.06 1.24.06 1.24.07 1.24.08 1.24.06 1.24.07 1.24.05 1.24.04 1.24.03h1.24l1.24-.03 1.24-.05 1.24-.08 1.24-.11 1.24-.14 1.24-.16 1.24-.19 1.24-.19 1.24-.21 1.24-.19 1.24-.18 1.24-.16 1.24-.11 1.24-.07h1.24l1.24.07 1.24.15 1.24.23 1.24.32 1.24.39 1.24.46 1.24.52 1.24.55 1.24.57 1.24.56 1.24.51 1.24.44 1.24.32 1.24.18 1.24.01 1.24-.2 1.24-.42 1.24-.66 1.24-.88 1.24-1.11 1.24-1.31 1.24-1.46 1.24-1.57 1.24-1.61 1.24-1.58 1.24-1.45 1.24-1.23 1.24-.92 1.24-.51 1.24-.01 1.24.56 1.24 1.19L93 76.58l1.24 2.5 1.24 3.14 1.24 3.69 1.24 4.14 1.24 4.45 1.24 4.56 1.24 4.46 1.24 4.1 1.24 3.48 1.24 2.6 1.24 1.43 1.24.04 1.24-1.59 1.24-3.36 1.24-5.22 1.24-7.09 1.24-8.87 1.24-10.44 1.24-11.73 1.24-12.57 1.24-12.9 1.24-12.6 1.24-11.6 1.24-9.86',\r\n 'transition': '', \r\n 'maths': 'const c4 = (2 * Math.PI) / 3; return x === 0 ? 0 : x === 1 ? 1 : -pow(2, 10 * x - 10) * sin((x * 10 - 10.75) * c4);',\r\n 'InElastic': true,\r\n 'gradient': 'url(#in)'\r\n },\r\n {\r\n 'name': 'OutElastic',\r\n 'path': 'M1 84l.24-7.34 1.24-9.86 1.24-11.6 1.24-12.6L6.2 29.7l1.24-12.57L8.68 5.4 9.92-5.04l1.24-8.87L12.4-21l1.24-5.22 1.24-3.36 1.24-1.59 1.24.04 1.24 1.43 1.24 2.6 1.24 3.48 1.24 4.1 1.24 4.46 1.24 4.56 1.24 4.45 1.24 4.14 1.24 3.69 1.24 3.14L31 7.42l1.24 1.85 1.24 1.19 1.24.56 1.24-.01 1.24-.51 1.24-.92 1.24-1.23 1.24-1.45 1.24-1.58 1.24-1.61 1.24-1.57L45.88.68l1.24-1.31 1.24-1.11 1.24-.89 1.24-.65 1.24-.42 1.24-.2 1.24.01 1.24.18 1.24.32 1.24.44 1.24.51 1.24.56 1.24.57 1.24.55 1.24.52 1.24.46 1.24.39 1.24.32 1.24.23 1.24.15 1.24.07h1.24l1.24-.07 1.24-.11 1.24-.16 1.24-.18 1.24-.19L80.6.46l1.24-.19 1.24-.19 1.24-.16 1.24-.14 1.24-.11 1.24-.08 1.24-.05 1.24-.03h1.24L93-.46l1.24.04 1.24.05 1.24.07 1.24.06 1.24.08 1.24.07 1.24.06 1.24.06 1.24.05 1.24.04 1.24.02 1.24.02 1.24.01h1.24l1.24-.01 1.24-.01 1.24-.02 1.24-.02 1.24-.03 1.24-.02 1.24-.03 1.24-.02 1.24-.02 1.24-.02',\r\n 'transition': '',\r\n 'maths': 'const c4 = (2 * Math.PI) / 3; return x === 0 ? 0 : x === 1 ? 1 : pow(2, -10 * x) * sin((x * 10 - 0.75) * c4) + 1;',\r\n 'OutElastic': true,\r\n 'gradient': 'url(#out)'\r\n },\r\n {\r\n 'name': 'InOutElastic',\r\n 'path': 'M1 84l.24-.02 1.24-.02 1.24-.01 1.24-.02 1.24-.01 1.24-.01h1.24l1.24.01 1.24.02 1.24.03 1.24.05 1.24.06 1.24.07 1.24.08 1.24.08 1.24.07 1.24.04 1.24.02 1.24-.03 1.24-.08 1.24-.15 1.24-.21 1.24-.28 1.24-.33 1.24-.37 1.24-.37 1.24-.33 1.24-.26 1.24-.12 1.24.08 1.24.32 1.24.62 1.24.93 1.24 1.25 1.24 1.52 1.24 1.71 1.24 1.78 1.24 1.66 1.24 1.34 1.24.75 1.24-.11 1.24-1.23 1.24-2.57 1.24-4.05 1.24-5.56 1.24-6.92 1.24-7.97 1.24-8.45 1.24-8.16L62 42l1.24-6.85 1.24-8.16 1.24-8.45 1.24-7.97 1.24-6.92 1.24-5.56 1.24-4.05 1.24-2.57 1.24-1.23 1.24-.11 1.24.75 1.24 1.34 1.24 1.66 1.24 1.78 1.24 1.72 1.24 1.51L83.08.14l1.24.93 1.24.62 1.24.32 1.24.08 1.24-.12 1.24-.26 1.24-.33L93 1.01l1.24-.37 1.24-.33 1.24-.28 1.24-.21 1.24-.15 1.24-.08 1.24-.03 1.24.02 1.24.04 1.24.07 1.24.08 1.24.08 1.24.07 1.24.06 1.24.05 1.24.03 1.24.02 1.24.01h1.24l1.24-.01 1.24-.01 1.24-.02 1.24-.01 1.24-.02',\r\n 'transition': '',\r\n 'maths': 'const c5 = (2 * Math.PI) / 4.5; return x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ? -(pow(2, 20 * x - 10) * sin((20 * x - 11.125) * c5)) / 2 : (pow(2, -20 * x + 10) * sin((20 * x - 11.125) * c5)) / 2 + 1;',\r\n 'InOutElastic': true,\r\n 'gradient': 'url(#inOut)'\r\n },\r\n {\r\n 'name': 'InBounce',\r\n 'path': 'M1 84l.24-.51 1.24-.39 1.24-.26 1.24-.13 1.24-.01 1.24.12 1.24.25 1.24.38 1.24.5L12.4 83l1.24-.97 1.24-.85 1.24-.72 1.24-.6 1.24-.47 1.24-.34 1.24-.21 1.24-.09 1.24.04 1.24.17 1.24.29 1.24.43 1.24.54 1.24.68 1.24.8 1.24.93 1.24 1.06 1.24-1.34 1.24-2.15 1.24-2.03 1.24-1.9 1.24-1.77 1.24-1.65 1.24-1.52 1.24-1.39 1.24-1.26 1.24-1.14 1.24-1.01 1.24-.88 1.24-.76 1.24-.63 1.24-.5 1.24-.38 1.24-.25 1.24-.12 1.24.01 1.24.13 1.24.26 1.24.39 1.24.51 1.24.64 1.24.77 1.24.9 1.24 1.02 1.24 1.15 1.24 1.27 1.24 1.41L71.92 73l1.24 1.66 1.24 1.78 1.24 1.91 1.24 2.04 1.24 2.17 1.24-.23 1.24-4.51 1.24-4.39 1.24-4.25 1.24-4.13 1.24-4 1.24-3.88 1.24-3.75 1.24-3.62 1.24-3.49 1.24-3.37L93 39.7l1.24-3.11 1.24-2.99 1.24-2.85 1.24-2.74 1.24-2.6 1.24-2.48 1.24-2.35 1.24-2.22 1.24-2.1 1.24-1.97 1.24-1.84 1.24-1.71 1.24-1.59 1.24-1.46 1.24-1.34 1.24-1.2 1.24-1.08 1.24-.96 1.24-.82 1.24-.7 1.24-.57 1.24-.45 1.24-.32 1.24-.19',\r\n 'transition': '',\r\n 'maths': 'return 1 - easeOutBounce(1 - x);',\r\n 'InBounce': true,\r\n 'gradient': 'url(#in)'\r\n \r\n },\r\n {\r\n 'name': 'OutBounce',\r\n 'path': 'M1 84l.24-.06 1.24-.19 1.24-.32 1.24-.45 1.24-.57 1.24-.7 1.24-.82 1.24-.96 1.24-1.08 1.24-1.2 1.24-1.34 1.24-1.46 1.24-1.59 1.24-1.71 1.24-1.84 1.24-1.97 1.24-2.1 1.24-2.22 1.24-2.35 1.24-2.48 1.24-2.6 1.24-2.74 1.24-2.85 1.24-2.99L31 44.3l1.24-3.24 1.24-3.37 1.24-3.49 1.24-3.62 1.24-3.75 1.24-3.88 1.24-4 1.24-4.13 1.24-4.25 1.24-4.39 1.24-4.51 1.24-.23 1.24 2.17 1.24 2.04 1.24 1.91 1.24 1.78L52.08 11l1.24 1.53 1.24 1.41 1.24 1.27 1.24 1.15 1.24 1.02 1.24.9 1.24.77 1.24.64 1.24.51 1.24.39 1.24.26 1.24.13 1.24.01 1.24-.12 1.24-.25 1.24-.38 1.24-.5 1.24-.63 1.24-.76 1.24-.88 1.24-1.01 1.24-1.14 1.24-1.26 1.24-1.39 1.24-1.52 1.24-1.65 1.24-1.77 1.24-1.9 1.24-2.03 1.24-2.15L90.52.31l1.24 1.06L93 2.3l1.24.8 1.24.68 1.24.54 1.24.43 1.24.29 1.24.17 1.24.04 1.24-.09 1.24-.21 1.24-.34 1.24-.47 1.24-.6 1.24-.72 1.24-.85L111.6 1l1.24-.95 1.24.5 1.24.38 1.24.25 1.24.12 1.24-.01 1.24-.13 1.24-.26 1.24-.39',\r\n 'transition': '',\r\n 'maths': 'const n1 = 7.5625; const d1 = 2.75; if (x < 1 / d1) { return n1 * x * x; } else if (x < 2 / d1) { return n1 * (x -= 1.5 / d1) * x + 0.75; } else if (x < 2.5 / d1) { return n1 * (x -= 2.25 / d1) * x + 0.9375; } else { return n1 * (x -= 2.625 / d1) * x + 0.984375; }',\r\n 'OutBounce': true,\r\n 'gradient': 'url(#out)'\r\n },\r\n {\r\n 'name': 'InOutBounce',\r\n 'path': 'M1 84l.24-.45 1.24-.2 1.24.06 1.24.31 1.24-.22 1.24-.91 1.24-.66 1.24-.4 1.24-.15 1.24.1 1.24.36 1.24.61 1.24.87 1.24-.14 1.24-2.09 1.24-1.84 1.24-1.58 1.24-1.33 1.24-1.07 1.24-.83 1.24-.56 1.24-.31 1.24-.06 1.24.2 1.24.45 1.24.7 1.24.96 1.24 1.21 1.24 1.47 1.24 1.72 1.24 1.98 1.24.96 1.24-4.44 1.24-4.2 1.24-3.93 1.24-3.69 1.24-3.43 1.24-3.17 1.24-2.93 1.24-2.67 1.24-2.41 1.24-2.16 1.24-1.9 1.24-1.66 1.24-1.39 1.24-1.15 1.24-.89 1.24-.63 1.24-.38L62 42l1.24-.13 1.24-.38 1.24-.63 1.24-.89 1.24-1.15 1.24-1.39 1.24-1.66 1.24-1.9 1.24-2.16 1.24-2.42 1.24-2.66 1.24-2.93 1.24-3.17 1.24-3.43 1.24-3.69 1.24-3.93 1.24-4.2L84.32.84l1.24.96 1.24 1.98 1.24 1.72 1.24 1.47 1.24 1.21 1.24.96 1.24.7 1.24.45 1.24.2 1.24-.06 1.24-.31 1.24-.57 1.24-.82 1.24-1.07 1.24-1.33 1.24-1.58 1.24-1.84 1.24-2.09 1.24-.14 1.24.87 1.24.61 1.24.36 1.24.1 1.24-.15 1.24-.4 1.24-.66L117.8.5l1.24-.22 1.24.31 1.24.06 1.24-.2',\r\n 'transition': '',\r\n 'maths': 'return x < 0.5 ? (1 - easeOutBounce(1 - 2 * x)) / 2: (1 + easeOutBounce(2 * x - 1)) / 2;',\r\n 'InOutBounce': true,\r\n 'gradient': 'url(#inOut)'\r\n },\r\n {\r\n 'name': 'default',\r\n 'path': 'M 0,85\tL 125,0',\r\n 'transition': '',\r\n 'maths': '',\r\n 'default': true,\r\n 'gradient': 'url(#inOut)'\r\n }\r\n ],\r\n\r\n percents: [\r\n '100%',\r\n '90%',\r\n '80%',\r\n '70%',\r\n '60%',\r\n '50%',\r\n '40%',\r\n '30%',\r\n '20%',\r\n '10%'\r\n ],\r\n\r\n durations: [\r\n '1',\r\n '2',\r\n '3',\r\n '4',\r\n '5',\r\n '6',\r\n '7',\r\n '8',\r\n '9',\r\n '10',\r\n '11',\r\n '12',\r\n '13',\r\n '14',\r\n '15',\r\n '16',\r\n '17',\r\n '18',\r\n '19',\r\n '20',\r\n '25',\r\n '30',\r\n '35',\r\n '40',\r\n '45',\r\n '50',\r\n '55',\r\n '60'\r\n ],\r\n\r\n objectAttributes: [\r\n { attr: 'left', type: 0 },\r\n { attr: 'top', type: 0 },\r\n { attr: 'lock_movement', type: 0 },\r\n { attr: 'opacity', type: 0 },\r\n { attr: 'shadow', type: 0 },\r\n { attr: 'opacity', type: 0 },\r\n { attr: 'flip_horizontally', type: 0 },\r\n { attr: 'flip_vertically', type: 0 },\r\n { attr: 'text', type: 1 },\r\n { attr: 'editable', type: 1 },\r\n { attr: 'text_fill_color', type: 1 },\r\n { attr: 'fill_color', type: 1 },\r\n { attr: 'background_color', type: 0 },\r\n { attr: 'font_family', type: 1 },\r\n { attr: 'font_size', type: 1 },\r\n { attr: 'text_alignment', type: 1 },\r\n { attr: 'source_image', type: 2 },\r\n { attr: 'height', type: 0 },\r\n { attr: 'width', type: 0 }\r\n ],\r\n\r\n moveDirections: [\r\n 'none',\r\n 'left-to-right',\r\n 'right-to-left',\r\n 'top-to-bottom',\r\n 'bottom-to-top'\r\n ],\r\n\r\n speeds: ['slow', 'medium', 'fast', 'veryFast'],\r\n\r\n textAssets: [\r\n {\r\n padding: 20,\r\n src: 'bubble1.png',\r\n style: '1'\r\n },\r\n {\r\n padding: 40,\r\n src: 'bubble2.png',\r\n style: '2'\r\n },\r\n {\r\n padding: 5,\r\n src: 'bubble3.png',\r\n style: '3'\r\n },\r\n {\r\n padding: 20,\r\n src: 'bubble4.png',\r\n style: '4'\r\n }\r\n ],\r\n\r\n spineAssets: [\r\n {\r\n src: '/img/spineboy.png',\r\n json: \"/img/Spine/spineboy/spineboy.json\",\r\n tintedImg: false\r\n },\r\n {\r\n src: '/img/hero.png',\r\n json: \"/img/Spine/hero/hero.json\",\r\n tintedImg: false\r\n },\r\n {\r\n src: '/img/alien.png',\r\n json: \"/img/Spine/alien/alien.json\",\r\n tintedImg: false\r\n },\r\n {\r\n src: '/img/dragon.png',\r\n json: \"/img/Spine/dragon/dragon.json\",\r\n tintedImg: false\r\n },\r\n {\r\n src: '/img/yeti.png',\r\n json: \"/img/Spine/yeti/yeti.json\",\r\n tintedImg: false\r\n },\r\n {\r\n src: '/img/bluebuck2.png',\r\n json: \"/img/Spine/bluebuck2/bluebuck2.json\",\r\n tintedImg: false\r\n },\r\n {\r\n src: '/img/Goat.png',\r\n json: \"/img/Spine/Goat/Goat.json\",\r\n tintedImg: false\r\n },\r\n {\r\n src: '/img/TasmanianTiger.png',\r\n json: \"/img/Spine/TasmanianTiger/TasmanianTiger.json\",\r\n tintedImg: false\r\n },\r\n {\r\n src: '/img/JerseyDevil.png',\r\n json: \"/img/Spine/JerseyDevil/JerseyDevil.json\",\r\n tintedImg: false\r\n },\r\n {\r\n src: '/img/girl.png',\r\n json: \"/img/Spine/girl/girl.json\",\r\n tintedImg: true\r\n },\r\n {\r\n src: '/img/boy.png',\r\n json: \"/img/Spine/boy/boy.json\",\r\n tintedImg: true\r\n },\r\n // {\r\n // src: '/img/raptor.png',\r\n // json: \"/img/Spine/raptor/raptor.json\",\r\n // tintedImg: true\r\n // }\r\n ],\r\n\r\n basicShapes: [\r\n {\r\n src: '/img/square-thumb.png',\r\n // type: 'squ'\r\n type: 'rect'\r\n },\r\n {\r\n src: '/img/circle-thumb.png',\r\n // type: 'cir'\r\n type: 'circle'\r\n },\r\n {\r\n src: '/img/triangle-thumb.png',\r\n // type: 'tri'\r\n type: 'triangle'\r\n\r\n }\r\n ],\r\n widgetAssets: [\r\n {\r\n src: 'button.png',\r\n type: 'Textbutton'\r\n },\r\n {\r\n src: 'textfield.png',\r\n type: 'textfield'\r\n }\r\n ],\r\n paletteColors: [\r\n // pallette colors\r\n // first row\r\n '#ff5c5cff',\r\n '#ffbd4aff',\r\n '#fff952ff',\r\n '#99e265ff',\r\n '#35b729ff',\r\n // second row\r\n '#44d9e6ff',\r\n '#2eb2ffff',\r\n '#5271ffff',\r\n '#b760e6ff',\r\n '#ff63b1ff',\r\n '#663300ff',\r\n // third row\r\n '#000000ff',\r\n '#333333ff',\r\n '#666666ff',\r\n '#a8a8a8ff',\r\n '#d9d9d9ff',\r\n '#ffffffff'\r\n ],\r\n\r\n userColors: [\r\n // pallette colors\r\n '#ff5c5cff',\r\n '#ffbd4aff',\r\n '#fff952ff',\r\n '#99e265ff',\r\n '#35b729ff',\r\n '#44d9e6ff',\r\n '#2eb2ffff',\r\n '#5271ffff',\r\n '#b760e6ff',\r\n '#ff63b1ff',\r\n '#663300ff',\r\n // darker\r\n '#db0000FF',\r\n '#C98000FF',\r\n '#D1CA00FF',\r\n '#58A820FF',\r\n '#174F12FF',\r\n '#148C96FF',\r\n '#006EADFF',\r\n '#0026D1FF',\r\n '#F7A0FFFF',\r\n '#E20071FF',\r\n '#000000FF',\r\n // lighten\r\n '#FF9C9CFF',\r\n '#FFFD8AFF',\r\n '#FFFF92FF',\r\n '#D9FFA5FF',\r\n '#75F769FF',\r\n '#84FFFFFF',\r\n '#6EF2FFFF',\r\n '#92B1FFFF',\r\n '#791BACFF',\r\n '#FFA3F1FF',\r\n '#A67340FF'\r\n ],\r\n musicMoods: {\r\n Happy: 'mdiEmoticonHappyOutline',\r\n Aggressive: 'mdiFlashOutline',\r\n Sad: 'mdiEmoticonSadOutline',\r\n Relaxing: 'mdiCloudOutline',\r\n Romantic: 'mdiHeart',\r\n Suspenseful: 'mdiBrightness2',\r\n Epic: 'mdiFire'\r\n },\r\n soundEffectGenres: {\r\n Animals: 'mdiCat',\r\n Bells: 'mdiBellRingOutline',\r\n Human: 'mdiAccountTieVoiceOutline',\r\n Foley: 'mdiChartBubble',\r\n Instrument: 'mdiMusicNote',\r\n Cartoon: 'mdiBabyFaceOutline',\r\n Nature: 'mdiPineTree',\r\n PublicPlaces: 'mdiSubwayVariant'\r\n },\r\n\r\n tween: {\r\n tweenThreshold: '50%'\r\n },\r\n layout: {\r\n layoutContainer: null,\r\n mainObjectsContainer: null,\r\n mainFunctionsContainer: null,\r\n rightSidebar: null\r\n },\r\n positions: {\r\n centerContainer: {\r\n left: 0,\r\n top: 0\r\n }\r\n },\r\n\r\n recordVoiceOver: [\r\n 'recordTutorialGoToStepOne',\r\n 'recordTutorialGoToStepTwo',\r\n 'recordTutorialGoToStepThree',\r\n 'recordTutorialGoToStepFour',\r\n ],\r\n\r\n // editLayoutKeys: [\r\n // \"text\", \r\n // \"fontFamily\",\r\n // \"fill\", \r\n // \"opacity\",\r\n // \"lockMovementX\",\r\n // \"tailPointx\", //speechbubble tail\r\n // \"scaleX\",\r\n // \"angle\",\r\n // \"currentSkin\", //always sent along with 'attachments' when Spine character is modified\r\n // \"stroke\", //for shapes\r\n // \"strokeWidth\", //for shapes\r\n // \"btnBgColor\",\r\n // \"rx\", //button corner radius\r\n // \"shadow\",\r\n // \"textAlign\", \r\n // \"fontWeight\", \r\n // \"fontStyle\",\r\n // \"underline\",\r\n // ],\r\n\r\n templateKeys: [\r\n {\r\n name: 'title',\r\n code: 'ti',\r\n },\r\n {\r\n name: 'forward page',\r\n code: 'fw',\r\n },\r\n {\r\n name: 'voice over',\r\n code: 'vo',\r\n }, \r\n {\r\n name: 'multiple choice',\r\n code: 'mc',\r\n },\r\n {\r\n name: 'game over',\r\n code: 'go',\r\n },\r\n {\r\n name: 'text input',\r\n code: 'te',\r\n },\r\n {\r\n name: 'speech recognition',\r\n code: 'sp',\r\n },\r\n {\r\n name: 'collision',\r\n code: 'co',\r\n },\r\n ], \r\n editLayoutKeys: [\r\n {text: null },\r\n {fontWeight: \"mdiFormatBold\" },\r\n {fontFamily: null},\r\n {fontSize: null},\r\n {fill: \"mdiFormatColorText\"},\r\n {opacity: \"mdiOpacity\"},\r\n {lockMovementX: 'mdiCheckboxBlankOutline'},\r\n {tailPointx: null},\r\n {scaleX: null},\r\n {angle: null},\r\n {currentSkin: null},\r\n {stroke: 'mdiSelectColor'},\r\n {strokeWidth: \"mdiFormatLineWeight\"},\r\n {lineWidth: \"mdiFormatLineWeight\"}, \r\n {btnBgColor: \"mdiFormatColorFill\"},\r\n {rx: \"mdiRoundedCorner\"},\r\n {shadow: 'mdiCheckboxBlankOutline'},\r\n {textAlign: {\r\n left: \"mdiFormatAlignLeft\",\r\n center: \"mdiFormatAlignCenter\",\r\n justify: \"mdiFormatAlignJustify\",\r\n right: \"mdiFormatAlignRight\"\r\n }},\r\n {fontStyle: \"mdiFormatItalic\"},\r\n {underline: \"mdiFormatUnderline\"},\r\n {flipX: \"mdiFlipHorizontal\"},\r\n {bgColor: \"mdiFormatColorFill\"}, \r\n {toFront: \"mdiFlipToFront\"},\r\n {toBack: \"mdiFlipToBack\"}\r\n ],\r\n \r\n editBlockKeys: [\r\n \"threshold\",\r\n \"rotation\",\r\n \"angle\",\r\n \"delay\",\r\n \"direction\",\r\n \"drag\",\r\n \"duration\",\r\n \"easing\",\r\n \"effect\",\r\n \"flip\",\r\n \"glow\",\r\n \"lang\",\r\n \"loop\",\r\n \"name\",\r\n \"nameA\",\r\n \"nameB\",\r\n \"nameC\",\r\n \"once\",\r\n \"operation\",\r\n \"page\",\r\n \"repeat\",\r\n \"scale\",\r\n \"sound\",\r\n \"speed\",\r\n \"url\",\r\n \"value\",\r\n \"variable\",\r\n \"volume\",\r\n \"word\",\r\n \"xCoord\",\r\n \"yCoord\",\r\n \"add_variable\", \r\n \"edit_variable\"\r\n ],\r\n tutorials: {\r\n animation: {\r\n media_url: \"/img/studio/tutorials/gifs/animate_tutorial.gif\",\r\n data: [\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n url: \"/img/Spine/dragon/dragon.json\",\r\n type: 'Spine',\r\n is_added: true,\r\n proxy: 'animation 0'\r\n } \r\n ]\r\n },\r\n initActions: ['addNewPage'],\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n click_next_btn: true\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'onPageStartBlock',\r\n proxy: 'onPageStartBlock 1'\r\n }\r\n ] \r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'animateSpineBlock',\r\n proxy: 'animateSpineBlock 1'\r\n }\r\n ] \r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'objectBlock', \r\n target_object: 'animation 0',\r\n proxy: 'objectBlock 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n click_next_btn: true\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: \"draw2d_Connection\",\r\n source: {\r\n port: 'outputPort',\r\n node_proxy: 'onPageStartBlock 1'\r\n },\r\n target: {\r\n port: \"conditionPort\",\r\n node_proxy: 'animateSpineBlock 1'\r\n },\r\n proxy: 'connection 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: \"draw2d_Connection\",\r\n source: {\r\n port: 'objectPort',\r\n node_proxy: 'objectBlock 1'\r\n },\r\n target: {\r\n port: \"objectPort\",\r\n node_proxy: 'animateSpineBlock 1'\r\n },\r\n proxy: 'connection 2'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n name: \"flying\",\r\n cssClass: 'animateSpineBlock',\r\n proxy: 'animateSpineBlock 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n click_preview_btn: true\r\n },\r\n layoutMode: false,\r\n }\r\n ]\r\n },\r\n\r\n record: {\r\n data: [\r\n {\r\n task: {\r\n record: 'record 1'\r\n },\r\n initActions: ['addNewPage'],\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'onPageStartBlock',\r\n proxy: 'onPageStartBlock 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'playRecordBlock',\r\n proxy: 'playRecordBlock 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: \"draw2d_Connection\",\r\n source: {\r\n port: 'outputPort',\r\n node_proxy: 'onPageStartBlock 1'\r\n },\r\n target: {\r\n port: \"conditionPort\",\r\n node_proxy: 'playRecordBlock 1'\r\n },\r\n proxy: 'connection 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n cssClass: 'playRecordBlock',\r\n sound: null,\r\n proxy: 'playRecordBlock 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n ]\r\n }, \r\n fadeIn: {\r\n media_url: \"/img/studio/tutorials/gifs/fade_in_tutorial.gif\",\r\n data: [\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'image',\r\n url: null,\r\n is_added: true,\r\n proxy: 'image 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n click_next_btn: true\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'onPageStartBlock',\r\n proxy: 'onPageStartBlock 1'\r\n }\r\n ] \r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'fadeBlock',\r\n proxy: 'fadeBlock 1'\r\n }\r\n ] \r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'objectBlock', \r\n target_object: 'image 0',\r\n proxy: 'objectBlock 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n click_next_btn: true\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: \"draw2d_Connection\",\r\n source: {\r\n port: 'outputPort',\r\n node_proxy: 'onPageStartBlock 1'\r\n },\r\n target: {\r\n port: \"conditionPort\",\r\n node_proxy: 'fadeBlock 1'\r\n },\r\n proxy: 'connection 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: \"draw2d_Connection\",\r\n source: {\r\n port: 'objectPort',\r\n node_proxy: 'objectBlock 1'\r\n },\r\n target: {\r\n port: \"objectPort\",\r\n node_proxy: 'fadeBlock 1'\r\n },\r\n proxy: 'connection 2'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n click_preview_btn: true\r\n },\r\n layoutMode: false,\r\n }\r\n ]\r\n },\r\n textEffect: {\r\n media_url: \"/img/studio/tutorials/gifs/text_effect_tutorial.gif\",\r\n data: [\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'textbox',\r\n is_added: true,\r\n proxy: 'textbox 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n text: null,\r\n proxy: 'textbox 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n click_next_btn: true\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'onPageStartBlock',\r\n proxy: 'onPageStartBlock 1'\r\n }\r\n ] \r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'textEffectBlock',\r\n proxy: 'textEffectBlock 1'\r\n }\r\n ] \r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'objectBlock', \r\n target_object: 'textbox 0',\r\n proxy: 'objectBlock 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n click_next_btn: true\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: \"draw2d_Connection\",\r\n source: {\r\n port: 'outputPort',\r\n node_proxy: 'onPageStartBlock 1'\r\n },\r\n target: {\r\n port: \"conditionPort\",\r\n node_proxy: 'textEffectBlock 1'\r\n },\r\n proxy: 'connection 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: \"draw2d_Connection\",\r\n source: {\r\n port: 'objectPort',\r\n node_proxy: 'objectBlock 1'\r\n },\r\n target: {\r\n port: \"objectPort\",\r\n node_proxy: 'textEffectBlock 1'\r\n },\r\n proxy: 'connection 2'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n effect: \"fadeIn\",\r\n cssClass: 'textEffectBlock',\r\n proxy: 'textEffectBlock 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n click_preview_btn: true\r\n },\r\n layoutMode: false,\r\n }\r\n ]\r\n },\r\n createTextVariable: {\r\n media_url: \"/img/studio/tutorials/gifs/variable_tutorial.gif\",\r\n data: [\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'textfield',\r\n is_added: true,\r\n proxy: 'textfield 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n proxy: 'textfield 0',\r\n text: 'What is your name?'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'createTextVariables',\r\n proxy: 'createTextVariables 1'\r\n }\r\n ] \r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n add_variable: true,\r\n cssClass: 'createTextVariables',\r\n proxy: 'createTextVariables 1',\r\n variable_proxy: 'variable 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n edit_variable: true,\r\n entity: {\r\n name: 'name'\r\n },\r\n cssClass: 'createTextVariables',\r\n proxy: 'createTextVariables 1',\r\n variable_proxy: 'variable 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'objectBlock', \r\n target_object: 'textfield 0',\r\n proxy: 'objectBlock 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'onTextInputBlock',\r\n proxy: 'onTextInputBlock 1'\r\n }\r\n ] \r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'textVariableEqualsTextObjectBlock',\r\n proxy: 'textVariableEqualsTextObjectBlock 1'\r\n }\r\n ] \r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n click_next_btn: true\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: \"draw2d_Connection\",\r\n source: {\r\n port: 'objectPort',\r\n node_proxy: 'objectBlock 1'\r\n },\r\n target: {\r\n port: \"objectPort\",\r\n node_proxy: 'onTextInputBlock 1'\r\n },\r\n proxy: 'connection 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: \"draw2d_Connection\",\r\n source: {\r\n port: 'objectPort',\r\n node_proxy: 'objectBlock 1'\r\n },\r\n target: {\r\n port: \"objectPort\",\r\n node_proxy: 'textVariableEqualsTextObjectBlock 1'\r\n },\r\n proxy: 'connection 2'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: \"draw2d_Connection\",\r\n source: {\r\n port: 'outputPort',\r\n node_proxy: 'onTextInputBlock 1'\r\n },\r\n target: {\r\n port: \"conditionPort\",\r\n node_proxy: 'textVariableEqualsTextObjectBlock 1'\r\n },\r\n proxy: 'connection 3'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'textbox',\r\n is_added: true,\r\n proxy: 'textbox 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n proxy: 'textbox 0',\r\n text: 'Hello {{ name }}!'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n click_preview_btn: true\r\n }\r\n }\r\n ]\r\n },\r\n createVariable: {\r\n media_url: \"/img/studio/tutorials/gifs/variable_tutorial.gif\",\r\n data: [\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'createTextVariables',\r\n proxy: 'createTextVariables 1'\r\n }\r\n ] \r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n add_variable: true,\r\n cssClass: 'createTextVariables',\r\n proxy: 'createTextVariables 1',\r\n variable_proxy: 'variable 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n edit_variable: null,\r\n cssClass: 'createTextVariables',\r\n proxy: 'createTextVariables 1',\r\n variable_proxy: 'variable 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n \r\n \r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'createBooleanVariables',\r\n proxy: 'createBooleanVariables 1',\r\n }\r\n ] \r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n add_variable: true,\r\n cssClass: 'createBooleanVariables',\r\n proxy: 'createBooleanVariables 1',\r\n variable_proxy: 'variable 2'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n add_variable: true,\r\n cssClass: 'createBooleanVariables',\r\n proxy: 'createBooleanVariables 1',\r\n variable_proxy: 'variable 3'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n edit_variable: null,\r\n cssClass: 'createBooleanVariables',\r\n proxy: 'createBooleanVariables 1',\r\n variable_proxy: 'variable 3'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n }, \r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'createNumberVariables',\r\n proxy: 'createNumberVariables 1'\r\n }\r\n ] \r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n is_added: true,\r\n cssClass: 'createNumberVariables',\r\n proxy: 'createNumberVariables 1'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n add_variable: true,\r\n cssClass: 'createNumberVariables',\r\n proxy: 'createNumberVariables 1',\r\n variable_proxy: 'variable 4'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n {\r\n task: {\r\n event_figures: [\r\n {\r\n edit_variable: null,\r\n cssClass: 'createNumberVariables',\r\n proxy: 'createNumberVariables 1',\r\n variable_proxy: 'variable 4'\r\n }\r\n ]\r\n },\r\n layoutMode: false,\r\n },\r\n ]\r\n },\r\n test: {\r\n media_url: \"/img/studio/tutorials/gifs/animate_tutorial.gif\",\r\n\r\n data: [\r\n {\r\n \"id\": \"K6Hk46\", \r\n \"task\": {\r\n \"page_proxy\": \"CrL0ae\",\r\n \"layout_objects\": [\r\n {\r\n \"type\": \"textbox\",\r\n \"proxy\": \"bRCV6q\",\r\n \"is_added\": true,\r\n \"page_proxy\": \"CrL0ae\"\r\n }\r\n ]\r\n }, \r\n \"layoutMode\": true\r\n }, \r\n {\r\n \"id\": \"QM3AyL\",\r\n \"task\": {\r\n \"page_proxy\": \"CrL0ae\",\r\n \"layout_objects\": [\r\n {\r\n \"proxy\": \"bRCV6q\",\r\n \"fontFamily\": null,\r\n \"page_proxy\": \"CrL0ae\"\r\n }\r\n ]\r\n }, \r\n \"layoutMode\": true\r\n }, {\"id\": \"3tBb0I\", \"task\": {\"page_proxy\": \"CrL0ae\", \"layout_objects\": [{\"proxy\": \"bRCV6q\", \"fontSize\": null, \"page_proxy\": \"CrL0ae\"}]}, \"layoutMode\": true}, {\"id\": \"8mqWjl\", \"task\": {\"page_proxy\": \"CrL0ae\", \"layout_objects\": [{\"proxy\": \"bRCV6q\", \"shadow\": null, \"page_proxy\": \"CrL0ae\"}]}, \"layoutMode\": true}\r\n\r\n // {\r\n // \"task\": {\r\n // layout_objects: [{\r\n // \"is_added\": true,\r\n // \"proxy\": \"eqmRwa\",\r\n // \"type\": \"textbox\"\r\n // }]\r\n // },\r\n // \"layoutMode\": true\r\n // },\r\n // {\r\n // \"task\": {\r\n // layout_objects: [{\r\n // \"is_paste\": true,\r\n // \"proxy\": \"gY8O9Q\",\r\n // \"original_proxy\": \"eqmRwa\",\r\n // }]\r\n // }\r\n // },\r\n // {\r\n // \"task\": {\r\n // \"isduplicatepage\": true,\r\n // \"previous_page_proxy\": \"ulhysp\",\r\n // \"page_proxy\": \"5oeZNy\"\r\n // }\r\n // },\r\n // {\r\n // \"task\": {\r\n // \"isnewpage\": true,\r\n // \"previous_page_proxy\": \"5oeZNy\",\r\n // \"page_proxy\": \"5oeZNr\"\r\n // }\r\n // },\r\n // {\r\n // \"task\": {\r\n // \"layout_objects\": [\r\n // {\r\n // \"type\": \"textbox\",\r\n // \"left\": null,\r\n // \"top\": null,\r\n // \"is_added\": true,\r\n // \"proxy\": \"LV6zo5\",\r\n // \"page_proxy\": \"5oeZNy\"\r\n // }\r\n // ]\r\n // },\r\n // \"layoutMode\": true\r\n // },\r\n // {\r\n // task: {\r\n // uploadImage: true\r\n // },\r\n // layoutMode: true,\r\n // },\r\n // {\r\n // task: {\r\n // addImageFolder: true\r\n // },\r\n // layoutMode: true,\r\n // },\r\n \r\n // {\r\n // task: {\r\n // addTemplate: true,\r\n // slug: \"UtiXIlVHIZ\",\r\n // code: 'ti' \r\n // },\r\n // layoutMode: true,\r\n // },\r\n // {\r\n // task: {\r\n // layout_objects: [\r\n // {\r\n // type: 'textbox',\r\n // text: null,\r\n // is_added: true,\r\n // proxy: 'textbox 0'\r\n // } \r\n // ]\r\n // },\r\n // layoutMode: true,\r\n // },\r\n // {\r\n // task: {\r\n // layout_objects: [\r\n // {\r\n // scaleX: null,\r\n // scaleY: null,\r\n // proxy: 'textbox 0'\r\n // } \r\n // ]\r\n // },\r\n // layoutMode: true,\r\n // },\r\n // {\r\n // task: {\r\n // layout_objects: [\r\n // {\r\n // width: null,\r\n // height: null,\r\n // proxy: 'textbox 0'\r\n // } \r\n // ]\r\n // },\r\n // layoutMode: true,\r\n // },\r\n // {\r\n // task: {\r\n // layout_objects: [\r\n // {\r\n // angle: null,\r\n // proxy: 'textbox 0'\r\n // } \r\n // ]\r\n // },\r\n // layoutMode: true,\r\n // },\r\n // {\r\n // task: {\r\n // event_figures: [\r\n // {\r\n // is_added: true,\r\n // cssClass: 'rotateBlock',\r\n // proxy: 'rotateBlock 1'\r\n // }\r\n // ] \r\n // },\r\n // layoutMode: false,\r\n // },\r\n // {\r\n // task: {\r\n // event_figures: [\r\n // {\r\n // is_added: true,\r\n // cssClass: 'createBooleanVariables',\r\n // proxy: 'createBooleanVariables 1'\r\n // }\r\n // ] \r\n // },\r\n // layoutMode: false,\r\n // },\r\n // {\r\n // task: {\r\n // event_figures: [\r\n // {\r\n // is_added: true,\r\n // cssClass: 'createNumberVariables',\r\n // proxy: 'createNumberVariables 1'\r\n // }\r\n // ] \r\n // },\r\n // layoutMode: false,\r\n // }\r\n // {\r\n // task: {\r\n // event_figures: [\r\n // {\r\n // add_variable: true,\r\n // cssClass: 'createTextVariables',\r\n // proxy: 'createTextVariables 1',\r\n // variable_proxy: 'variable 1'\r\n // }\r\n // ]\r\n // },\r\n // layoutMode: false,\r\n // },\r\n // {\r\n // task: {\r\n // event_figures: [\r\n // {\r\n // variable_proxy: 'variable 1',\r\n // edit_variable: true,\r\n // entity: {\r\n // name: 'rawr'\r\n // },\r\n // cssClass: 'createTextVariables',\r\n // proxy: 'createTextVariables 1'\r\n // }\r\n // ]\r\n // },\r\n // layoutMode: false,\r\n // },\r\n // {\r\n // task: {\r\n // event_figures: [\r\n // {\r\n // is_added: true,\r\n // cssClass: 'textEffectBlock',\r\n // proxy: 'textEffectBlock 1'\r\n // }\r\n // ] \r\n // },\r\n // layoutMode: false,\r\n // },\r\n // {\r\n // task: {\r\n // event_figures: [\r\n // {\r\n // effect: \"fadeIn\",\r\n // cssClass: 'textEffectBlock',\r\n // proxy: 'textEffectBlock 1'\r\n // }\r\n // ]\r\n // },\r\n // layoutMode: false,\r\n // }\r\n // {\r\n // task: {\r\n // layout_objects: [\r\n // {\r\n // type: 'image',\r\n // is_bg: true\r\n // } \r\n // ]\r\n // },\r\n // layoutMode: true,\r\n // },\r\n // {\r\n // task: {\r\n // layout_objects: [\r\n // {\r\n // type: 'image',\r\n // is_added: true,\r\n // proxy: 'image 0'\r\n // } \r\n // ]\r\n // },\r\n // layoutMode: true,\r\n // },\r\n // {\r\n // task: {\r\n // layout_objects: [\r\n // {\r\n // type: 'Textbutton',\r\n // is_added: true,\r\n // proxy: 'button 0'\r\n // } \r\n // ]\r\n // },\r\n // layoutMode: true,\r\n // },\r\n // {\r\n // task: {\r\n // layout_objects: [\r\n // {\r\n // type: 'textfield',\r\n // is_added: true,\r\n // proxy: 'textfield 0'\r\n // } \r\n // ]\r\n // },\r\n // layoutMode: true,\r\n // },\r\n ]\r\n },\r\n imagetoolbar: {\r\n data: [\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'image',\r\n is_added: true,\r\n proxy: 'image 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'image',\r\n shadow: null, \r\n proxy: 'image 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'image',\r\n flipX: true, \r\n proxy: 'image 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n ]\r\n },\r\n\r\n shapetoolbar: {\r\n data: [\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'rect',\r\n is_added: true,\r\n proxy: 'rect 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'rect',\r\n shadow: null, \r\n proxy: 'rect 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'rect',\r\n fill: null, \r\n proxy: 'rect 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'rect',\r\n stroke: null, \r\n proxy: 'rect 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'rect',\r\n strokeWidth: null, \r\n proxy: 'rect 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'rect',\r\n opacity: null, \r\n proxy: 'rect 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n ]\r\n },\r\n\r\n animationtoolbar: {\r\n data: [\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n url: \"/img/Spine/girl/girl.json\",\r\n type: 'Spine',\r\n is_added: true,\r\n proxy: 'animation 0'\r\n } \r\n ]\r\n },\r\n initActions: ['addNewPage'],\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n opacity: null, \r\n proxy: 'animation 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n flipX: true, \r\n proxy: 'animation 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n currentSkin: null,\r\n attachments: null, \r\n proxy: 'animation 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n },\r\n ]\r\n },\r\n\r\n texttoolbar: {\r\n data: [\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'textbox',\r\n is_added: true,\r\n proxy: 'textbox 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'textbox',\r\n shadow: null, \r\n proxy: 'textbox 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'textbox',\r\n fontFamily: \"Lexend\", \r\n proxy: 'textbox 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'textbox',\r\n fontSize: 24, \r\n proxy: 'textbox 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'textbox',\r\n textAlign: \"left\", \r\n proxy: 'textbox 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'textbox',\r\n fontWeight: \"bold\", \r\n proxy: 'textbox 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'textbox',\r\n fontStyle: \"italic\",\r\n proxy: 'textbox 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'textbox',\r\n underline: true, \r\n proxy: 'textbox 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'textbox',\r\n fill: null, \r\n proxy: 'textbox 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'textbox',\r\n opacity: null, \r\n proxy: 'textbox 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n } \r\n ]\r\n },\r\n bubbletoolbar: {\r\n data: [\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'speechbubble',\r\n is_added: true,\r\n proxy: 'speechbubble 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'speechbubble',\r\n shadow: null, \r\n proxy: 'speechbubble 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'speechbubble',\r\n fontFamily: \"Lexend\", \r\n proxy: 'speechbubble 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'speechbubble',\r\n fontSize: 24, \r\n proxy: 'speechbubble 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'speechbubble',\r\n fontWeight: \"bold\", \r\n proxy: 'speechbubble 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'speechbubble',\r\n fontStyle: \"italic\",\r\n proxy: 'speechbubble 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'speechbubble',\r\n underline: true, \r\n proxy: 'speechbubble 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'speechbubble',\r\n bgColor: null, \r\n proxy: 'speechbubble 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'speechbubble',\r\n fill: null, \r\n proxy: 'speechbubble 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'speechbubble',\r\n lineWidth: null, \r\n proxy: 'speechbubble 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'speechbubble',\r\n opacity: null, \r\n proxy: 'speechbubble 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n } \r\n ]\r\n },\r\n buttontoolbar: {\r\n data: [\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'Textbutton',\r\n is_added: true,\r\n proxy: 'Textbutton 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'Textbutton',\r\n shadow: null, \r\n proxy: 'Textbutton 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'Textbutton',\r\n fontFamily: \"Lexend\", \r\n proxy: 'Textbutton 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'Textbutton',\r\n fontSize: 24, \r\n proxy: 'Textbutton 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'Textbutton',\r\n fontWeight: \"bold\", \r\n proxy: 'Textbutton 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'Textbutton',\r\n fontStyle: \"italic\",\r\n proxy: 'Textbutton 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'Textbutton',\r\n btnBgColor: null, \r\n proxy: 'Textbutton 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'Textbutton',\r\n fill: null, \r\n proxy: 'Textbutton 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n }, \r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'Textbutton',\r\n opacity: null, \r\n proxy: 'Textbutton 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n },\r\n {\r\n task: {\r\n layout_objects: [\r\n {\r\n type: 'Textbutton',\r\n rx: null, \r\n proxy: 'Textbutton 0'\r\n } \r\n ]\r\n },\r\n layoutMode: true,\r\n } \r\n ]\r\n }\r\n }\r\n\r\n // dimensions: {\r\n // page: {\r\n // height: 0,\r\n // width: 0\r\n // }\r\n // }\r\n}\r\n\r\n// getters\r\nconst getters = {}\r\n\r\n// actions\r\nconst actions = {}\r\n\r\n// mutations\r\nconst mutations = {\r\n // setPageDimensions(state, dimensions) {\r\n // state.dimensions.page = dimensions;\r\n // }\r\n}\r\n\r\nexport default {\r\n namespaced: true,\r\n state,\r\n getters,\r\n actions,\r\n mutations\r\n}\r\n","import Vue from \"vue\";\r\nimport VueGtag from \"vue-gtag\";\r\n\r\nVue.use(VueGtag, {\r\n deferScriptLoad: true,\r\n config: { id: \"G-BRH3E70VNP\" },\r\n\r\n})","import Vue from 'vue'\r\nimport VeeValidate from 'vee-validate'\r\n\r\nfunction installRules({ app }) {\r\n VeeValidate.Validator.extend('unique_username', {\r\n getMessage(field) {\r\n return 'username is already taken'\r\n },\r\n async validate(value, [exception] = []) {\r\n if (value && value.length > 2) {\r\n let valid = false\r\n try {\r\n const res = await app.$api.checkUsername(value)\r\n if (res.data.taken) {\r\n valid = false\r\n } else {\r\n valid = true\r\n }\r\n } catch (e) {\r\n console.log(e)\r\n valid = false\r\n }\r\n return {\r\n valid: valid // Your api could return a response containing a 'valid property'\r\n }\r\n } else {\r\n return false\r\n }\r\n }\r\n })\r\n VeeValidate.Validator.extend('unique_email', {\r\n getMessage(field) {\r\n return 'email is already registered'\r\n },\r\n async validate(value, [exception] = []) {\r\n if (value && value.length > 2) {\r\n let valid = false\r\n try {\r\n const res = await app.$api.checkEmail(value)\r\n if (res.data.taken) {\r\n valid = false\r\n } else {\r\n valid = true\r\n }\r\n } catch (e) {\r\n console.log(e)\r\n valid = false\r\n }\r\n return {\r\n valid: valid // Your api could return a response containing a 'valid property'\r\n }\r\n } else {\r\n return false\r\n }\r\n }\r\n })\r\n VeeValidate.Validator.extend('blacklist_username', {\r\n getMessage(field) {\r\n return 'this username is not available'\r\n },\r\n async validate(value, [exception] = []) {\r\n if (value && value.length > 2) {\r\n let valid = false\r\n var Filter = require('bad-words'),\r\n filter = new Filter()\r\n filter.addWords(\r\n 'about',\r\n 'account',\r\n 'accounts',\r\n 'art',\r\n 'arts',\r\n 'artist',\r\n 'artcontest',\r\n 'artcontests',\r\n 'artists',\r\n 'background',\r\n 'backgrounds',\r\n 'billing',\r\n 'class',\r\n 'classes',\r\n 'contest',\r\n 'contests',\r\n 'code',\r\n 'coding',\r\n 'coding-club',\r\n 'community',\r\n 'contact',\r\n 'club',\r\n 'clubs',\r\n 'doc',\r\n 'docs',\r\n 'educator',\r\n 'educators',\r\n 'elementari',\r\n 'elementary',\r\n 'email',\r\n 'emails',\r\n 'explore',\r\n 'feature',\r\n 'features',\r\n 'file',\r\n 'files',\r\n 'fieldtrip',\r\n 'field_trip',\r\n 'grant',\r\n 'grants',\r\n 'hobby',\r\n 'hourcode',\r\n 'hourofcode',\r\n 'illustration',\r\n 'illustrations',\r\n 'live',\r\n 'livestream',\r\n 'login',\r\n 'logout',\r\n 'music',\r\n 'musics',\r\n 'notification',\r\n 'notifications',\r\n 'password',\r\n 'payment',\r\n 'payments',\r\n 'plans',\r\n 'premium',\r\n 'privacy',\r\n 'pro',\r\n 'researcher',\r\n 'researchers',\r\n 'reset_password',\r\n 'reset',\r\n 'school',\r\n 'school-connect',\r\n 'schools',\r\n 'setting',\r\n 'settings',\r\n 'signin',\r\n 'sign_in',\r\n 'signout',\r\n 'sign_out',\r\n 'sound_effect',\r\n 'sound_effects',\r\n 'sound',\r\n 'sounds',\r\n 'soundeffect',\r\n 'soundeffects',\r\n 'stories',\r\n 'story',\r\n 'studio',\r\n 'subscribe',\r\n 'support',\r\n 'teacher',\r\n 'teachers',\r\n 'terms',\r\n 'virtual',\r\n 'virtual_fieldtrip',\r\n 'web',\r\n 'webmonetize',\r\n 'webmonetization', \r\n 'monetization',\r\n 'monetize'\r\n )\r\n let cleaned = filter.clean(value)\r\n if (cleaned.includes('*')) {\r\n valid = false\r\n } else {\r\n valid = true\r\n }\r\n return {\r\n valid: valid // Your api could return a response containing a 'valid property'\r\n }\r\n } else {\r\n return false\r\n }\r\n }\r\n })\r\n\r\n VeeValidate.Validator.extend('blacklist_words', {\r\n getMessage(field) {\r\n return 'Inappropriate content';\r\n },\r\n async validate(value, [exception] = []) {\r\n if (!value) return false;\r\n \r\n var Filter = require('bad-words'),\r\n filter = new Filter()\r\n const lower = value.toLowerCase();\r\n \r\n // Add emoji workaround\r\n const cleanTarget = lower + ' ABC';\r\n const cleaned = filter.clean(cleanTarget);\r\n const endsWithABC = cleaned.endsWith('ABC');\r\n const cleanedValue = endsWithABC ? cleaned.slice(0, -3) : cleaned;\r\n \r\n // Check for * from bad-words default filter\r\n const containsFilteredAsterisk = cleanedValue.includes('*');\r\n \r\n // Check if any bad word is a substring (not just exact word)\r\n const containsEmbeddedSwear = filter.list.some(badWord =>\r\n lower.includes(badWord)\r\n );\r\n \r\n return {\r\n valid: !containsFilteredAsterisk && !containsEmbeddedSwear\r\n };\r\n }\r\n });\r\n\r\n}\r\n\r\nlet installed = false\r\nlet localized = {\r\n en: false,\r\n fr: false,\r\n es: false,\r\n // zh_CN: false,\r\n // zh_TW: false,\r\n it: false,\r\n pt: false,\r\n de: false,\r\n el: false\r\n}\r\n\r\nexport default ({ app }) => {\r\n if (!installed) {\r\n Vue.use(VeeValidate, {\r\n inject: false,\r\n i18n: app.i18n\r\n })\r\n // extend the rules after vee-validate is installed.\r\n installRules({ app })\r\n installed = true\r\n }\r\n\r\n const locale = app.i18n.locale\r\n // skip if already localized.\r\n if (localized[locale]) return\r\n\r\n // dynamically load a vee-validate locale\r\n return import(`vee-validate/dist/locale/${locale}`).then(localeObj => {\r\n VeeValidate.Validator.localize({ [locale]: localeObj })\r\n localized[locale] = true\r\n })\r\n}\r\n\r\n// Vue.use(VueI18n)\r\n// const i18n = new VueI18n()\r\n// Vue.use(VeeValidate, {\r\n// inject: false,\r\n// i18nRootKey: 'validations',\r\n// i18n,\r\n// dictionary: {\r\n// en: en,\r\n// fr: fr,\r\n// es: es\r\n// }\r\n// })\r\n\r\n// installRules()\r\n","import Vue from 'vue'\r\nimport VueObserveVisibility from 'vue-observe-visibility'\r\n\r\nVue.use(VueObserveVisibility)\r\n","import Vue from 'vue';\r\nimport SlideVerify from 'vue-monoplasty-slide-verify';\r\n\r\nVue.use(SlideVerify);\r\n","import Vue from 'vue'\r\n\r\nVue.directive('studio-click-outside', {\r\n bind: function(el, binding, vnode) {\r\n el.clickOutsideEvent = function(event) {\r\n // here I check that click was outside the el and his childrens\r\n if (\r\n !(el == event.target || el.contains(event.target)) &&\r\n // check if event.target is select element (for image categories)\r\n (!event.target.classList.contains('v-list-item__title') &&\r\n !event.target.classList.contains('v-subheader') && \r\n !event.target.classList.contains('v-list-item') &&\r\n !event.target.classList.contains('v-list-item__content'))\r\n ) {\r\n // and if it did, call method provided in attribute value\r\n vnode.context[binding.expression](event)\r\n }\r\n }\r\n document.body.addEventListener('click', el.clickOutsideEvent)\r\n document.body.addEventListener('touchstart', el.clickOutsideEvent)\r\n },\r\n unbind: function(el) {\r\n document.body.removeEventListener('click', el.clickOutsideEvent)\r\n document.body.removeEventListener('touchstart', el.clickOutsideEvent)\r\n }\r\n})\r\n","import Vue from 'vue'\r\nimport {\r\n Howl,\r\n Howler\r\n} from 'howler';\r\nimport { compressToEncodedURIComponent } from 'lz-string';\r\nimport { mdiConsoleNetworkOutline } from '@mdi/js';\r\n\r\nVue.prototype.$elementari = {\r\n SpeechRecognition: null,\r\n SpeechTargetsList: [],\r\n goToLinkStatus: {},\r\n timeThresholdBetweenTwoGoToLink: 1000,\r\n page: null,\r\n reader: null,\r\n selectedBtnObj: null,\r\n nextFrameTime: 0,\r\n animationDelay: 27,\r\n shadow: {\r\n color: 'rgba(0,0,0,0.6)',\r\n blur: 10,\r\n offsetX: 10,\r\n offsetY: 10,\r\n opacity: 0.6,\r\n fillShadow: true,\r\n strokeShadow: true\r\n },\r\n glow: {\r\n color: 'rgba(0,0,255,1)',\r\n blur: 0,\r\n offsetX: 0,\r\n offsetY: 0,\r\n opacity: 1,\r\n fillShadow: true,\r\n strokeShadow: true\r\n },\r\n eventCodeCounter: 0,\r\n global_variables: {},\r\n highlightBlocksList: {},\r\n // collisionWatchList: {},\r\n eventBlocks: [\r\n 'onPageStartBlock',\r\n // 'onTouchBlock',\r\n 'onClickBlock',\r\n 'onClickOnceBlock',\r\n 'onDragOverBlock',\r\n 'onDragOverOnceBlock',\r\n 'onTextInputBlock',\r\n 'onTextInputOnceBlock',\r\n 'onPronounceBlock',\r\n 'onCollisionBlock'\r\n ],\r\n\r\n blocksWithObjectPort: [\r\n 'animateSpineBlock',\r\n 'blinkBlock',\r\n 'bounceBlock',\r\n 'fadeBlock',\r\n 'textEffectBlock',\r\n 'changeImageBlock',\r\n 'hideBlock',\r\n 'moveToBlockAbsolute',\r\n 'moveToBlockRelative',\r\n 'rotateBlock',\r\n 'scaleBlock',\r\n 'restoreObjectBlock',\r\n 'flipObjectBlock',\r\n 'setObjectAngleBlock',\r\n 'setObjectScaleBlock',\r\n 'setObjectPositionBlock',\r\n 'setDraggableBlock',\r\n 'showBlock', \r\n 'textObjectEqualsValueBlock',\r\n 'textObjectEqualsVariableBlock'\r\n ],\r\n\r\n blockWithLogicPort: [\r\n 'branchBlock', \r\n 'numberComparisonBlock',\r\n 'textComparisonBlock'\r\n ],\r\n\r\n setVarValBlocks: [\r\n 'textVariableEqualsVariableBlock',\r\n 'textVariableEqualsValueBlock',\r\n 'textVariableEqualsTextObjectBlock',\r\n 'numberVariableEqualsVariableBlock',\r\n 'numberVariableEqualsValueBlock',\r\n 'booleanVariableEqualsVariableBlock',\r\n 'booleanVariableEqualsValueBlock'\r\n ],\r\n\r\n initEventStatus: function (eventObjectId, maxIterations) {\r\n this.reader.initEventStatus(eventObjectId, maxIterations)\r\n },\r\n\r\n setGlobalVariables: function(events) {\r\n // search for variables through each event page \r\n // and store them into $elementari.global_variables\r\n for (let i = 0; i < events.length; i++) {\r\n for (let l = 0; l < events[i].length; l++) {\r\n if (events[i][l]['entities'] == undefined) continue\r\n \r\n var type = \"Text\"\r\n var value = \"\"\r\n if (events[i][l]['cssClass'] == 'createNumberVariables') {\r\n type = \"Number\"\r\n value = '0'\r\n } else if (events[i][l]['cssClass'] == 'createBooleanVariables') {\r\n type = \"Boolean\"\r\n value = 'false'\r\n }\r\n\r\n for (var m = 0; m < events[i][l]['entities'].length; m++) {\r\n this.reader.global_variables[events[i][l]['entities'][m]['text']] = {\r\n value: value,\r\n type: type\r\n }\r\n }\r\n }\r\n }\r\n }, \r\n getObjectBlockName: function(o){\r\n let obj_name\r\n if ('name' in o && o[\"name\"] !== null){\r\n obj_name = o[\"name\"]\r\n }else{\r\n obj_name = o[\"id\"]\r\n }\r\n return obj_name\r\n },\r\n\r\n setPage: function (page, callback) {\r\n this.page = page\r\n typeof callback === 'function' && callback()\r\n },\r\n\r\n setPageScale: function (pageScale) {\r\n this.pageScale = pageScale\r\n },\r\n setReader: function (reader) {\r\n this.reader = reader\r\n },\r\n\r\n checkIfEventIsActive: function (eventCode) {\r\n if (this.reader.eventStatus[eventCode] && this.reader.eventStatus[eventCode].activeStack.length > 0) return true\r\n return false\r\n },\r\n\r\n checkIfEventCodeIsCompleted: function (options) {\r\n // console.log('checkIfEventCodeIsCompleted', options)\r\n // console.log('counter', this.reader.eventStatus[options.eventCode].counter)\r\n if (this.reader.eventStatus[options.eventCode] == undefined) {\r\n return false\r\n }\r\n\r\n if (this.reader.eventStatus[options.eventCode].activeStack.length > 0) return false\r\n\r\n if (options.currentIteration != this.reader.eventStatus[options.eventCode].counter) return false\r\n if (\r\n this.reader.eventStatus[options.eventCode].maxIterations > 0 &&\r\n this.reader.eventStatus[options.eventCode].counter >= this.reader.eventStatus[options.eventCode].maxIterations - 1\r\n ) {\r\n // make sure counter is reset before ending the loop\r\n this.reader.eventStatus[options.eventCode].counter = 0\r\n return false\r\n }\r\n\r\n this.reader.eventStatus[options.eventCode].counter++\r\n\r\n // get event block from id and call it again\r\n const block = this.getBlock(options.eventCode)\r\n\r\n if (block == null) return false\r\n\r\n this.executeOnEventCode(block, this.getBlockConnections(block[\"id\"]))\r\n\r\n return true\r\n\r\n },\r\n\r\n animateCanvas: function (self, time) {\r\n if (!this.page) {\r\n this.stopAllRendering()\r\n return\r\n }\r\n // if we're not animating anything or if desired delay\r\n // hasn't occurred, just request another loop and return\r\n if (time < this.nextFrameTime) {\r\n this.myRequestAnimation = requestAnimationFrame(function (time) {\r\n self.animateCanvas(self, time)\r\n })\r\n // this.animateCanvas(this, new Date())\r\n return\r\n }\r\n\r\n if (this.reader && !this.reader.isAnimating) {\r\n this.stopAllRendering()\r\n return\r\n }\r\n\r\n // set nextTime to the next elapsed time\r\n this.nextFrameTime = time + this.animationDelay\r\n // re-render everything\r\n this.page.requestRenderAll()\r\n // request another loop\r\n this.myRequestAnimation = requestAnimationFrame(function (time) {\r\n self.animateCanvas(self, time)\r\n })\r\n },\r\n\r\n stopAllRendering: function () {\r\n if (this.page) {\r\n this.page.requestRenderAll()\r\n }\r\n cancelAnimationFrame =\r\n window.cancelAnimationFrame || window.mozCancelAnimationFrame\r\n cancelAnimationFrame(this.myRequestAnimation)\r\n this.myRequestAnimation = null\r\n //reset list\r\n this.reader.animatedObjects = []\r\n },\r\n\r\n startObjectAnimationFrame: function (objectID, animationName) {\r\n let self = this\r\n this.reader.isAnimating = true\r\n\r\n this.reader.animatedObjects.push({\r\n id: objectID,\r\n animationName: animationName\r\n })\r\n\r\n if (this.myRequestAnimation) return\r\n\r\n requestAnimationFrame =\r\n window.requestAnimationFrame ||\r\n window.mozRequestAnimationFrame ||\r\n window.webkitRequestAnimationFrame ||\r\n window.msRequestAnimationFrame\r\n this.myRequestAnimation = requestAnimationFrame(function (time) {\r\n \r\n self.animateCanvas(self, time)\r\n })\r\n },\r\n\r\n stopObjectAnimationFrame: function (objectID, animationName) {\r\n for (var i = 0, l = this.reader.animatedObjects.length; i < l; i++) {\r\n if (\r\n this.reader.animatedObjects[i].id === objectID &&\r\n this.reader.animatedObjects[i].animationName === animationName\r\n ) {\r\n this.reader.animatedObjects.splice(i, 1)\r\n break\r\n }\r\n }\r\n\r\n if (!this.reader.animatedObjects.length) {\r\n this.reader.isAnimating = false\r\n if (this.reader.displayNextPageHint) {\r\n this.reader.displayNextPageHint(\r\n this.reader,\r\n this.reader.pageSelected,\r\n 500\r\n )\r\n }\r\n }\r\n },\r\n\r\n goToPageBlock: function (self, block, callback) {\r\n\r\n // let pageNumber = parseInt(block['page'])\r\n\r\n\r\n let pageNumber = this.isValueAVariableField(block[\"page\"])\r\n if (!this.isNumber(pageNumber, true)) return\r\n\r\n // if (isNaN(parseInt(block['page']))){\r\n // // check if 'page' is a Variable\r\n // if (this.reader.global_variables[block['page']] != undefined) {\r\n // pageNumber = this.reader.global_variables[block['page']]['value']\r\n // } else {\r\n // return\r\n // }\r\n // }\r\n let log_pageNumber\r\n if(Number(pageNumber.value) == 0){\r\n // is origin page\r\n log_pageNumber = this.reader.$t('studio.blocks.originPage')\r\n } else if(Number(pageNumber.value) == -1) { \r\n log_pageNumber = this.reader.$t('actions.next').toLowerCase()\r\n } else if(Number(pageNumber.value) == -2) { \r\n log_pageNumber = this.reader.$t('actions.previous').toLowerCase()\r\n }else{\r\n log_pageNumber= pageNumber.value\r\n }\r\n\r\n this.appendLogMsg(\r\n this.reader.$t('reader.inspect.goToPage', {\r\n page: log_pageNumber\r\n }),\r\n null,\r\n true\r\n )\r\n \r\n this.reader.goToPage(parseInt(pageNumber.value) - 1)\r\n callback()\r\n },\r\n\r\n goToLinkBlock: function (self, block, callback) {\r\n if (this.reader.eventStatus[block[\"eventCode\"]] == undefined) return\r\n // check if tab are already open with url\r\n\r\n if (!this.goToLinkStatus[block[\"url\"]]) {\r\n this.goToLinkStatus[block[\"url\"]] = new Date()\r\n } else {\r\n // check if at least 1 second happend since last gotolink call\r\n const now = new Date()\r\n if (now.getTime() - this.goToLinkStatus[block[\"url\"]].getTime() < this.timeThresholdBetweenTwoGoToLink) {\r\n this.timeThresholdBetweenTwoGoToLink = 60000\r\n return\r\n }\r\n }\r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.goToLink', {\r\n url: block['url']\r\n }))\r\n\r\n this.reader.goToLink(block[\"url\"])\r\n // this.checkIfEventCodeIsCompleted(block)\r\n\r\n callback()\r\n \r\n },\r\n\r\n hideBlock: function (self, block, callback) {\r\n if (this.reader.eventStatus[block[\"eventCode\"]] == undefined) return\r\n if (!this.page) return\r\n let o = this.page.getItemById(block[\"obj_id\"])\r\n if (!o) return\r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n o.visible = false\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.hide', {\r\n name: this.getObjectBlockName(o)\r\n }))\r\n\r\n if (this.reader.animatedObjects.length == 0) {\r\n this.page.requestRenderAll()\r\n }\r\n // this.checkIfEventCodeIsCompleted(block)\r\n\r\n this.reader.timeouts.push(setTimeout(() => {\r\n this.reader.timeouts.pop()\r\n callback()\r\n }, 600))\r\n },\r\n\r\n showBlock: function (self, block, callback) {\r\n if (this.reader.eventStatus[block[\"eventCode\"]] == undefined) return\r\n if (!this.page) return\r\n let o = this.page.getItemById(block[\"obj_id\"])\r\n if (!o) return\r\n this.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n o.visible = true\r\n o.opacity = 1\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.show', {\r\n name: this.getObjectBlockName(o)\r\n }))\r\n\r\n if (this.reader.animatedObjects.length == 0) {\r\n this.page.requestRenderAll()\r\n }\r\n this.popObject(this, block)\r\n\r\n this.testCollision(this, block, o)\r\n\r\n this.reader.timeouts.push(setTimeout(() => {\r\n this.reader.timeouts.pop()\r\n callback()\r\n }, 600))\r\n },\r\n\r\n scaleBlock: function (self, block, callback) {\r\n if (!this.page) return\r\n\r\n let o = this.page.getItemById(block[\"obj_id\"]),\r\n coeff = 1\r\n\r\n if (!o) return\r\n\r\n let pageSelected = self.reader.pageSelected\r\n let pageScale = self.reader.pageScales[self.reader.pageSelected]\r\n if (self.reader.isStudio) {\r\n pageScale =\r\n self.reader.pageScales[self.reader.pageSelected] *\r\n self.reader.project.pageScale[self.reader.pageSelected]\r\n }\r\n\r\n let duration = this.isValueAVariableField(block[\"duration\"])\r\n if (!this.isNumber(duration, false)) {\r\n return\r\n } \r\n\r\n let scale = this.isValueAVariableField(block[\"scale\"])\r\n \r\n if (!this.isNumber(scale, false)) {\r\n return\r\n }\r\n\r\n //check if object is being dragged\r\n if (o.dragAnimationTrigger) {\r\n coeff = 1.2\r\n scale *= coeff\r\n }\r\n\r\n if (o.isScaling) return\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.scale', {\r\n name: this.getObjectBlockName(o),\r\n factor: scale.value,\r\n duration: duration.value\r\n }))\r\n\r\n block[\"currentIteration\"] = self.reader.eventStatus[block[\"eventCode\"]].counter\r\n // push to event active stack\r\n this.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n\r\n self.startObjectAnimationFrame(block[\"obj_id\"], 'scaleObject')\r\n o.isScaling = true\r\n\r\n // if (o._originalProperties && o._originalProperties.scaleX == undefined) {\r\n // o._originalProperties.scaleX = o.scaleX\r\n // o._originalProperties.scaleY = o.scaleY\r\n // }\r\n\r\n let easing = false\r\n if (block[\"easing\"] != \"default\") {\r\n easing = fabric.util.ease['ease' + block[\"easing\"]]\r\n }\r\n\r\n if (o.abortAnimation) { \r\n delete o.abortAnimation\r\n }\r\n o.animate({\r\n scaleX: o.scaleX * scale.value,\r\n scaleY: o.scaleY * scale.value\r\n }, {\r\n duration: parseInt(duration.value) * 1000,\r\n easing: easing,\r\n abort: function () {\r\n console.log(\"aborting animation\")\r\n \r\n if (!self.page || pageSelected != self.reader.pageSelected) {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'scaleObject')\r\n return true\r\n }\r\n\r\n if (o.abortAnimation) {\r\n \r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n o.isScaling = false\r\n\r\n if (!o.bounce && !o.isScaling && !o.isRotating && !o.moveX && !o.moveY && !o.fade) {\r\n delete o.abortAnimation\r\n }\r\n\r\n return true\r\n }\r\n if (self.reader.eventStatus[block[\"eventCode\"]] === undefined) return true\r\n if (self.reader.eventStatus[block[\"eventCode\"]].inspectMode !== $nuxt.$store.state.inspectMode) return true\r\n \r\n },\r\n onChange: function () {\r\n // update LanczosFilter\r\n self.reader.setImageLanczosFilter(o)\r\n self.testCollision(self, block, o)\r\n //readjusting in case of page re-scaling\r\n // if (self.reader.pageScales[self.reader.pageSelected] !== pageScale) {\r\n // o.left *=\r\n // self.reader.pageScales[self.reader.pageSelected] / pageScale\r\n // o.top *=\r\n // self.reader.pageScales[self.reader.pageSelected] / pageScale\r\n // }\r\n\r\n },\r\n onComplete: function onComplete() {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'scaleObject')\r\n if (self.page && pageSelected == self.reader.pageSelected) {\r\n o.isScaling = false\r\n //save original scale\r\n // if (o._originalProperties) {\r\n // o._originalProperties.scaleX = o.scaleX / coeff\r\n // o._originalProperties.scaleY = o.scaleY / coeff\r\n // }\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n // if (typeof callback !== 'function') {\r\n // const c = self.checkIfEventCodeIsCompleted(block)\r\n // }\r\n // if (c) return\r\n \r\n typeof callback === 'function' && callback()\r\n }\r\n }\r\n })\r\n },\r\n\r\n rotateBlock: function (self, block, callback) {\r\n if (!this.page) return\r\n\r\n let o = self.page.getItemById(block[\"obj_id\"])\r\n\r\n if (!o) return\r\n if (o.isRotating) return\r\n let pageSelected = self.reader.pageSelected\r\n block[\"currentIteration\"] = self.reader.eventStatus[block[\"eventCode\"]].counter\r\n // push to event active stack\r\n this.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n self.startObjectAnimationFrame(block[\"obj_id\"], 'rotateObject')\r\n o.isRotating = true\r\n //save original angle\r\n if (!o.originalAngle) {\r\n o.originalAngle = o.angle\r\n }\r\n\r\n let easing = false\r\n if (block[\"easing\"] != \"default\") {\r\n easing = fabric.util.ease['ease' + block[\"easing\"]]\r\n }\r\n \r\n let angle = this.isValueAVariableField(block[\"rotation\"])\r\n let duration = this.isValueAVariableField(block[\"duration\"])\r\n\r\n if (!this.isNumber(angle, true)) return\r\n if (!this.isNumber(duration, false)) return\r\n // if (this.isNumber(angle, true)) {\r\n // angle = parseInt(angle)\r\n // } else {\r\n // angle = parseInt(this.isValueAVariableField(block[\"rotation\"]).value)\r\n \r\n // if (!this.isNumber(angle, true)) return\r\n // }\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.rotate', {\r\n name: this.getObjectBlockName(o),\r\n angle: angle.value,\r\n duration: duration.value\r\n }))\r\n\r\n \r\n if (o.abortAnimation) { \r\n delete o.abortAnimation\r\n }\r\n\r\n o.animate('angle', o.angle + angle.value, {\r\n duration: parseInt(duration.value) * 1000,\r\n easing: easing,\r\n abort: function () {\r\n \r\n if (!self.page || pageSelected != self.reader.pageSelected) {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'rotateObject')\r\n return true\r\n }\r\n\r\n if (o.abortAnimation) {\r\n \r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n o.isRotating = false\r\n \r\n if (!o.bounce && !o.isScaling && !o.isRotating && !o.moveX && !o.moveY && !o.fade) {\r\n delete o.abortAnimation\r\n }\r\n\r\n return true\r\n }\r\n if (self.reader.eventStatus[block[\"eventCode\"]] === undefined) return true\r\n if (self.reader.eventStatus[block[\"eventCode\"]].inspectMode !== $nuxt.$store.state.inspectMode) return true\r\n \r\n },\r\n onChange: function () {\r\n self.testCollision(self, block, o)\r\n },\r\n onComplete: function onComplete() {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'rotateObject')\r\n if (self.page && pageSelected == self.reader.pageSelected) {\r\n o.isRotating = false\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n typeof callback === 'function' && callback()\r\n }\r\n }\r\n })\r\n },\r\n\r\n waitBlock: function (self, block, callback) {\r\n \r\n const pageSelected = self.reader.pageSelected\r\n block[\"currentIteration\"] = self.reader.eventStatus[block[\"eventCode\"]].counter\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n\r\n let duration = this.isValueAVariableField(block[\"duration\"])\r\n\r\n if (!this.isNumber(duration, false)) return\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.wait', {\r\n duration: duration.value\r\n }))\r\n\r\n self.reader.timeouts.push(\r\n setTimeout(function () {\r\n self.reader.timeouts.pop()\r\n if (pageSelected == self.reader.pageSelected) {\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n typeof callback === 'function' && callback()\r\n }\r\n }, parseFloat(duration.value) * 1000)\r\n )\r\n },\r\n\r\n moveToBlockAbsolute: function (self, block, callback) {\r\n let pageScale = self.reader.pageScales[self.reader.pageSelected]\r\n if (self.reader.isStudio) {\r\n pageScale =\r\n self.reader.pageScales[self.reader.pageSelected] *\r\n self.reader.project.pageScale[self.reader.pageSelected]\r\n }\r\n\r\n let o = self.page.getItemById(block[\"obj_id\"])\r\n if (!o) return\r\n if (o.moveX && o.moveY) return\r\n\r\n block[\"currentIteration\"] = self.reader.eventStatus[block[\"eventCode\"]].counter\r\n // push to event active stack\r\n this.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n let pageSelected = self.reader.pageSelected\r\n self.startObjectAnimationFrame(block[\"obj_id\"], 'moveToAbsolute')\r\n\r\n var duration = this.isValueAVariableField(block[\"duration\"])\r\n if (!this.isNumber(duration, false)) return\r\n\r\n var testX = this.isValueAVariableField(block[\"xCoord\"])\r\n if (!this.isNumber(testX, true)) return\r\n\r\n var testY = this.isValueAVariableField(block[\"yCoord\"])\r\n if (!this.isNumber(testY, true)) return\r\n\r\n if (Number(testX.value) != 0) {\r\n o.moveX = true\r\n }\r\n if (Number(testY.value) != 0) {\r\n o.moveY = true\r\n }\r\n\r\n const coords = {}\r\n coords['left'] = Number(testX.value) * pageScale\r\n coords['top'] = Number(testY.value) * pageScale\r\n\r\n let easing = false\r\n if (block[\"easing\"] != \"default\") {\r\n easing = fabric.util.ease['ease' + block[\"easing\"]]\r\n }\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.moveToAbs', {\r\n name: this.getObjectBlockName(o),\r\n xCoord: testX.value,\r\n yCoord: testY.value,\r\n duration: duration.value\r\n }))\r\n \r\n if (o.abortAnimation) {\r\n delete o.abortAnimation\r\n }\r\n \r\n o.animate(coords, {\r\n duration: parseInt(duration.value) * 1000,\r\n easing: easing,\r\n abort: function () {\r\n\r\n \r\n if (!self.page || !o || pageSelected != self.reader.pageSelected) {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'moveToAbsolute')\r\n return true\r\n }\r\n\r\n if (o.abortAnimation) {\r\n \r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n if (Number(testX.value) != 0) {\r\n o.moveX = false\r\n }\r\n\r\n if (Number(testY.value) != 0) {\r\n o.moveY = false\r\n }\r\n\r\n if (!o.bounce && !o.isScaling && !o.isRotating && !o.moveX && !o.moveY && !o.fade) {\r\n delete o.abortAnimation\r\n }\r\n\r\n return true\r\n }\r\n\r\n if (self.reader.eventStatus[block[\"eventCode\"]] === undefined) return true\r\n if (self.reader.eventStatus[block[\"eventCode\"]].inspectMode !== $nuxt.$store.state.inspectMode) return true\r\n \r\n },\r\n onChange: function() {\r\n\r\n self.testCollision(self, block, o)\r\n // //readjusting in case of page re-scaling\r\n // if (self.reader.pageScales[self.reader.pageSelected] === pageScale) {\r\n // return\r\n // }\r\n // o.left *= self.reader.pageScales[self.reader.pageSelected] / pageScale\r\n // o.top *= self.reader.pageScales[self.reader.pageSelected] / pageScale\r\n },\r\n onComplete: function () {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'moveToAbsolute')\r\n if (self.page && pageSelected == self.reader.pageSelected) {\r\n\r\n if (Number(testX.value) != 0) {\r\n o.moveX = false\r\n }\r\n\r\n if (Number(testY.value) != 0) {\r\n o.moveY = false\r\n }\r\n\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n \r\n // const c = self.checkIfEventCodeIsCompleted(block)\r\n \r\n // if (!c) {\r\n typeof callback === 'function' && callback()\r\n // }\r\n \r\n }\r\n }\r\n })\r\n },\r\n\r\n moveToBlockRelative: function (self, block, callback) {\r\n \r\n // let self = this\r\n let pageScale = self.reader.pageScales[self.reader.pageSelected]\r\n if (self.reader.isStudio) {\r\n pageScale =\r\n self.reader.pageScales[self.reader.pageSelected] *\r\n self.reader.project.pageScale[self.reader.pageSelected]\r\n }\r\n let o = self.page.getItemById(block[\"obj_id\"]),\r\n pageSelected = self.reader.pageSelected\r\n if (!o) return\r\n if (o.moveX && o.moveY) return\r\n\r\n block[\"currentIteration\"] = self.reader.eventStatus[block[\"eventCode\"]].counter\r\n // push to event active stack\r\n this.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n\r\n self.startObjectAnimationFrame(block[\"obj_id\"], 'moveToRelative')\r\n // o.move = true\r\n\r\n const coords = {}\r\n\r\n var testX = this.isValueAVariableField(block[\"xCoord\"])\r\n if (!this.isNumber(testX, true)) return\r\n var testY = this.isValueAVariableField(block[\"yCoord\"])\r\n if (!this.isNumber(testY, true)) return\r\n\r\n var duration = this.isValueAVariableField(block[\"duration\"])\r\n if (!this.isNumber(duration, false)) return\r\n\r\n\r\n if (Number(duration.value) < 0) {\r\n duration.value = 0\r\n }\r\n if (Number(testX.value) != 0) {\r\n o.moveX = false\r\n }\r\n\r\n if (Number(testY.value) != 0) {\r\n o.moveY = false\r\n }\r\n\r\n if (Number(testX.value) != 0) {\r\n coords['left'] = o.left + (Number(testX.value) * pageScale)\r\n }\r\n\r\n if (Number(testY.value) != 0) {\r\n coords['top'] = o.top + (Number(testY.value) * pageScale)\r\n }\r\n\r\n if (!coords['left'] && !coords['top']) return\r\n\r\n let easing = false\r\n if (block[\"easing\"] != \"default\") {\r\n easing = fabric.util.ease['ease' + block[\"easing\"]]\r\n }\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.moveTo', {\r\n name: this.getObjectBlockName(o),\r\n xCoord: testX.value,\r\n yCoord: testY.value,\r\n duration: duration.value\r\n }))\r\n\r\n if (o.abortAnimation) {\r\n delete o.abortAnimation\r\n }\r\n \r\n o.animate(coords, {\r\n duration: parseInt(duration.value) * 1000,\r\n easing: easing,\r\n abort: function () {\r\n\r\n if (!o || pageSelected != self.reader.pageSelected) {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'moveToRelative')\r\n return true\r\n }\r\n\r\n if (o.abortAnimation) {\r\n\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n if (Number(testX.value) != 0) {\r\n o.moveX = false\r\n }\r\n \r\n if (Number(testY.value) != 0) {\r\n o.moveY = false\r\n }\r\n\r\n if (!o.bounce && !o.isScaling && !o.isRotating && !o.moveX && !o.moveY && !o.fade) {\r\n delete o.abortAnimation\r\n }\r\n\r\n return true\r\n }\r\n\r\n if (self.reader.eventStatus[block[\"eventCode\"]] === undefined) return true\r\n\r\n if (self.reader.eventStatus[block[\"eventCode\"]].inspectMode !== $nuxt.$store.state.inspectMode) return true\r\n },\r\n onChange: function() {\r\n\r\n self.testCollision(self, block, o)\r\n //readjusting in case of page re-scaling\r\n // if (self.reader.pageScales[self.reader.pageSelected] === pageScale) {\r\n // return\r\n // }\r\n // o.left *= self.reader.pageScales[self.reader.pageSelected] / pageScale\r\n // o.top *= self.reader.pageScales[self.reader.pageSelected] / pageScale\r\n },\r\n onComplete: function () {\r\n \r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'moveToRelative')\r\n if (self.page && pageSelected == self.reader.pageSelected) {\r\n if (Number(testX.value) != 0) {\r\n o.moveX = false\r\n }\r\n \r\n if (Number(testY.value) != 0) {\r\n o.moveY = false\r\n }\r\n \r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n \r\n // if (typeof callback !== 'function') {\r\n \r\n // return\r\n // }\r\n // self.reader.eventStatus[block[\"eventCode\"]].backOrder++\r\n\r\n // const c = self.checkIfEventCodeIsCompleted(block)\r\n \r\n // if (!c) {\r\n typeof callback === 'function' && callback()\r\n // } \r\n \r\n }\r\n }\r\n })\r\n },\r\n\r\n testCollision: function (self, block, o) {\r\n if (o.visible == false) return\r\n \r\n if (!self.reader.collisionWatchList[block[\"obj_id\"]]) return\r\n\r\n const threshold = self.reader.collisionWatchList[block[\"obj_id\"]]['threshold']\r\n \r\n self.reader.collisionWatchList[block[\"obj_id\"]][\"targets\"].forEach(function(target){\r\n \r\n if (target.visible == false) return\r\n \r\n if (!o.intersectsWithObject(target, false, true, threshold)) {\r\n\r\n for (var event_id in target['collisionWatch'][o.id]['events']) {\r\n if (target['collisionWatch'][o.id]['events'].hasOwnProperty(event_id)) {\r\n target['collisionWatch'][o.id]['events'][event_id]['collision_is_active'] = false\r\n }\r\n }\r\n return\r\n }\r\n \r\n for (var event_id in target[\"collisionWatch\"][o.id][\"events\"]) {\r\n if (target[\"collisionWatch\"][o.id][\"events\"].hasOwnProperty(event_id)) {\r\n \r\n if (target['collisionWatch'][o.id]['events'][event_id]['collision_is_active']) return\r\n\r\n let event = JSON.parse(JSON.stringify(target[\"collisionWatch\"][o.id][\"events\"][event_id]))\r\n\r\n if (event.collisionTriggered) continue\r\n\r\n\r\n self.appendLogMsg(self.reader.$t('reader.inspect.onCollision', {\r\n name1: self.getObjectBlockName(o),\r\n name2: self.getObjectBlockName(target),\r\n \r\n }), true)\r\n\r\n self.reader.setTriggerObject(event.block[\"id\"], target.id)\r\n \r\n let isExecuting = self.executeOnEventCode(event.block, event.conn, event.connection, true)\r\n\r\n if (isExecuting == false) return\r\n\r\n target['collisionWatch'][o.id]['events'][event_id]['collision_is_active'] = true\r\n \r\n // check if layout_obj is already evented\r\n if (event.block[\"once\"] == true) {\r\n event.collisionTriggered = true\r\n }\r\n \r\n \r\n }\r\n }\r\n })\r\n },\r\n\r\n // flipObject: function (id, image, direction, center, easing) {\r\n // let o = self.page.getItemById(id)\r\n\r\n // if (!o) return\r\n\r\n // if (o.flipping) return\r\n\r\n // o.flipping = true\r\n // let pageScale = self.reader.pageScales[self.reader.pageSelected]\r\n\r\n // if (image != 'main') {\r\n // o.srcArray.forEach(function (e, i) {\r\n // if (e.title == image) {\r\n // image = i\r\n // return\r\n // }\r\n // })\r\n // }\r\n\r\n // if (!o.flipToggle) o.flipToggle = false\r\n\r\n // let midToggle = true,\r\n // url = null,\r\n // targetOrigin = 'center',\r\n // coeff = 1,\r\n // scale = o.scaleX,\r\n // flipProperty = 'flipX',\r\n // scaleProperty = 'scaleX',\r\n // originProperty = 'originX',\r\n // positionProperty = 'left',\r\n // dimensionProperty = 'width'\r\n // switch (direction) {\r\n // case 'right-to-left':\r\n // if (!o.flipToggle) {\r\n // if (!center) {\r\n // o.originX = 'left'\r\n // o.left -= (o.width / 2) * o.scaleX\r\n // targetOrigin = 'right'\r\n // coeff = -1\r\n // }\r\n // url = o.srcArray[image].url\r\n // } else {\r\n // if (!center) {\r\n // o.originX = 'right'\r\n // o.left += (o.width / 2) * o.scaleX\r\n // targetOrigin = 'left'\r\n // }\r\n // url = o.srcArray[0].url\r\n // }\r\n // break\r\n // case 'left-to-right':\r\n // scale = o.scaleX\r\n // flipProperty = 'flipX'\r\n // scaleProperty = 'scaleX'\r\n // originProperty = 'originX'\r\n // positionProperty = 'left'\r\n // dimensionProperty = 'width'\r\n // if (!o.flipToggle) {\r\n // if (!center) {\r\n // o.originX = 'right'\r\n // o.left += (o.width / 2) * o.scaleX\r\n // targetOrigin = 'left'\r\n // }\r\n // url = o.srcArray[image].url\r\n // } else {\r\n // if (!center) {\r\n // o.originX = 'left'\r\n // o.left -= (o.width / 2) * o.scaleX\r\n // targetOrigin = 'right'\r\n // coeff = -1\r\n // }\r\n // url = o.srcArray[0].url\r\n // }\r\n // break\r\n // case 'top-to-bottom':\r\n // ;\r\n // (scale = o.scaleY), (flipProperty = 'flipY')\r\n // scaleProperty = 'scaleY'\r\n // originProperty = 'originY'\r\n // positionProperty = 'top'\r\n // dimensionProperty = 'height'\r\n // if (!o.flipToggle) {\r\n // if (!center) {\r\n // o.originY = 'bottom'\r\n // o.top += (o.height / 2) * o.scaleY\r\n // targetOrigin = 'top'\r\n // }\r\n // url = o.srcArray[image].url\r\n // } else {\r\n // if (!center) {\r\n // o.originY = 'top'\r\n // o.top -= (o.height / 2) * o.scaleY\r\n // targetOrigin = 'bottom'\r\n // coeff = -1\r\n // }\r\n // url = o.srcArray[0].url\r\n // }\r\n // break\r\n // case 'bottom-to-top':\r\n // ;\r\n // (scale = o.scaleY),\r\n // (flipProperty = 'flipY'),\r\n // (scaleProperty = 'scaleY'),\r\n // (originProperty = 'originY'),\r\n // (positionProperty = 'top'),\r\n // (dimensionProperty = 'height')\r\n // if (!o.flipToggle) {\r\n // if (!center) {\r\n // o.originY = 'top'\r\n // o.top -= (o.height / 2) * o.scaleY\r\n // targetOrigin = 'bottom'\r\n // // coeff = - 1;\r\n // }\r\n // url = o.srcArray[image].url\r\n // } else {\r\n // if (!center) {\r\n // o.originY = 'bottom'\r\n // o.top += (o.height / 2) * o.scaleY\r\n // targetOrigin = 'top'\r\n // }\r\n // url = o.srcArray[0].url\r\n // }\r\n // break\r\n // }\r\n\r\n // self.startObjectAnimationFrame(id, 'flipObject')\r\n // o.animate(scaleProperty, -scale, {\r\n // duration: 1000,\r\n // easing: easing,\r\n // onComplete: function onComplete() {\r\n // o.setCoords()\r\n // o.flipToggle = !o.flipToggle\r\n // o.flipping = false\r\n // // o[flipProperty] =\r\n // if (!center) {\r\n // o[originProperty] = 'center'\r\n // o[positionProperty] +=\r\n // ((coeff * o[dimensionProperty]) / 2) * o[scaleProperty]\r\n // self.page.requestRenderAll()\r\n // }\r\n // self.stopObjectAnimationFrame(id, 'flipObject')\r\n // },\r\n // onAbort: function () {\r\n // if (!self.page) {\r\n // return true\r\n // }\r\n // }\r\n // // onChange: function() {\r\n // // //readjusting in case of page re-scaling\r\n // // o[scaleProperty] *=\r\n // // self.reader.pageScales[self.reader.pageSelected] / pageScale\r\n // // // look wether we passed 50% of the animation\r\n // // if (midToggle && o[scaleProperty] < scale * 0.05) {\r\n // // midToggle = false\r\n // // o[originProperty] = targetOrigin\r\n // // if (!center) {\r\n // // o[positionProperty] +=\r\n // // coeff * o[dimensionProperty] * o[scaleProperty]\r\n // // }\r\n // // o.setSrc(url, function() {})\r\n // // }\r\n // // // o[\"flipProperty\"] = o.flipToggle;\r\n // // }\r\n // })\r\n // },\r\n\r\n // scrollingObject: function (id, speed, direction) {\r\n // if (!this.page) return\r\n\r\n // let self = this,\r\n // o = self.page.getItemById(id),\r\n // pageScale = self.reader.pageScales[self.reader.pageSelected]\r\n\r\n // if (o.scrolling) return\r\n\r\n // let reference = null,\r\n // duration1 = null,\r\n // duration2 = null,\r\n // target = null\r\n // o.scrolling = true\r\n\r\n // if (direction === 'left-to-right') {\r\n // reference = 'left'\r\n // target = self.page.width + (o.width * o.scaleX) / 2\r\n // duration1 =\r\n // (1000 * (self.page.width - (o.left + (o.width * o.scaleX) / 2))) /\r\n // (speed * self.reader.pageScales[self.reader.pageSelected])\r\n // duration2 =\r\n // (1000 * (self.page.width - o.left)) /\r\n // (speed * self.reader.pageScales[self.reader.pageSelected])\r\n // } else if (direction === 'right-to-left') {\r\n // reference = 'left'\r\n // target = (-o.width * o.scaleX) / 2\r\n // duration1 =\r\n // (1000 * o.left) /\r\n // (speed * self.reader.pageScales[self.reader.pageSelected])\r\n // duration2 = duration1\r\n // } else if (direction === 'bottom-to-top') {\r\n // reference = 'top'\r\n // target = (-o.height * o.scaleY) / 2\r\n // duration1 =\r\n // (1000 * o.top) /\r\n // (speed * self.reader.pageScales[self.reader.pageSelected])\r\n // duration2 = duration1\r\n // } else if (direction === 'top-to-bottom') {\r\n // reference = 'top'\r\n // target = self.page.height + (o.height * o.scaleY) / 2\r\n // duration1 =\r\n // (1000 * (self.page.height - (o.top + (o.height * o.scaleY) / 2))) /\r\n // (speed * self.reader.pageScales[self.reader.pageSelected])\r\n // duration2 =\r\n // (1000 * (self.page.height - o.top)) /\r\n // (speed * self.reader.pageScales[self.reader.pageSelected])\r\n // }\r\n\r\n // self.startObjectAnimationFrame(id, 'scrollingObject')\r\n // o.animate(reference, target, {\r\n // duration: duration1,\r\n // abort: function () {\r\n // if (!self.page) {\r\n // self.stopObjectAnimationFrame(id, 'scrollingObject')\r\n // return true\r\n // }\r\n // },\r\n // onChange: function () {\r\n // //readjusting in case of page re-scaling\r\n // o[reference] *=\r\n // self.reader.pageScales[self.reader.pageSelected] / pageScale\r\n // },\r\n // onComplete: function onComplete() {\r\n // if (!self.page) return\r\n\r\n // //reset object position\r\n // if (direction === 'left-to-right') {\r\n // o.left = (-o.width * o.scaleX) / 2\r\n // } else if (direction === 'right-to-left') {\r\n // o.left = self.page.width + (o.width * o.scaleX) / 2\r\n // } else if (direction === 'bottom-to-top') {\r\n // o.top = self.page.height + (o.height * o.scaleY) / 2\r\n // } else if (direction === 'top-to-bottom') {\r\n // o.top = (-o.height * o.scaleY) / 2\r\n // }\r\n // // console.log(duration2)\r\n // // console.log(o.left)\r\n // o.animate(reference, target, {\r\n // duration: duration2,\r\n // abort: function () {\r\n // if (!self.page) {\r\n // self.stopObjectAnimationFrame(id, 'scrollingObject')\r\n // return true\r\n // }\r\n // },\r\n // onChange: function () {\r\n // o[reference] *=\r\n // self.reader.pageScales[self.reader.pageSelected] / pageScale\r\n // },\r\n // onComplete: function () {\r\n // if (!self.page) return\r\n // // if (direction === \"left-to-right\") {\r\n // // o.left = -o.width * o.scaleX / 2;\r\n // // } else if (direction === \"right-to-left\") {\r\n // // o.left = self.options.pageWidth + o.width * o.scaleX / 2;\r\n // // } else if (direction === \"bottom-to-top\") {\r\n // // o.top = self.options.pageHeight + o.height * o.scaleY / 2;\r\n // // } else if (direction === \"top-to-bottom\") {\r\n // // o.top = -o.height * o.scaleY / 2;\r\n // // }\r\n // onComplete()\r\n // }\r\n // })\r\n // }\r\n // })\r\n // },\r\n\r\n popObject: function (self, block) {\r\n if (!this.page) return\r\n\r\n let o = self.page.getItemById(block[\"obj_id\"])\r\n\r\n let pageScale = self.reader.pageScales[self.reader.pageSelected],\r\n pageSelected = self.reader.pageSelected\r\n // if (self.reader.isStudio) {\r\n // pageScale =\r\n // self.reader.pageScales[self.reader.pageSelected] *\r\n // self.reader.project.pageScale[self.reader.pageSelected]\r\n // }\r\n\r\n if (o.pop) return\r\n\r\n self.startObjectAnimationFrame(block[\"obj_id\"], 'popObject')\r\n o.originalScaleY = o.scaleY\r\n o.pop = true\r\n block['soundUrl'] = '/sounds/pop-effect.wav'\r\n block['volume'] = 30\r\n block['pageNumber'] = self.reader.pageSelected\r\n block['dontAddToActiveStack'] = true\r\n self.playSoundEffectBlock(self, block)\r\n o.animate('scaleY', o.scaleY * 1.2, {\r\n duration: 100,\r\n easing: fabric.util.ease.easeOutExpo,\r\n abort: function () {\r\n \r\n \r\n\r\n if (!self.page || pageSelected != self.reader.pageSelected) {\r\n\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'popObject')\r\n return true\r\n }\r\n\r\n if (self.reader.eventStatus[block[\"eventCode\"]] === undefined) return true\r\n \r\n if (self.reader.eventStatus[block[\"eventCode\"]].inspectMode !== $nuxt.$store.state.inspectMode) return true\r\n\r\n },\r\n onChange: function () {\r\n //readjusting in case of page re-scaling\r\n o.scaleY *=\r\n self.reader.pageScales[self.reader.pageSelected] / pageScale\r\n },\r\n onComplete: function onComplete() {\r\n if (self.page != null) {\r\n o.animate('scaleY', o.originalScaleY, {\r\n duration: 400,\r\n easing: fabric.util.ease.easeOutElastic,\r\n abort: function () { \r\n if (!self.page || pageSelected != self.reader.pageSelected) {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'popObject')\r\n return true\r\n }\r\n\r\n if (self.reader.eventStatus[block[\"eventCode\"]] === undefined) return true\r\n if (self.reader.eventStatus[block[\"eventCode\"]].inspectMode !== $nuxt.$store.state.inspectMode) return true\r\n \r\n },\r\n onChange: function () {\r\n //readjusting in case of page re-scaling\r\n o.scaleY *=\r\n self.reader.pageScales[self.reader.pageSelected] / pageScale\r\n },\r\n onComplete: function () {\r\n if (self.page) {\r\n if (o.scaleY != o.originalScaleY) {\r\n onComplete()\r\n } else {\r\n o.pop = false\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'popObject')\r\n if (!block['dontPopActiveStack']) {\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n self.checkIfEventCodeIsCompleted(block)\r\n }\r\n // o.originY = 'center'\r\n // typeof callback === 'function' && callback()\r\n }\r\n }\r\n }\r\n })\r\n // self.stopObjectAnimationFrame(id, 'popObject')\r\n }\r\n }\r\n })\r\n\r\n },\r\n\r\n bounceBlock: function (self, block, callback) {\r\n if (!this.page) return\r\n\r\n let o = self.page.getItemById(block[\"obj_id\"])\r\n let pageSelected = self.reader.pageSelected\r\n\r\n if (o.bounce) return\r\n block[\"currentIteration\"] = self.reader.eventStatus[block[\"eventCode\"]].counter\r\n // push to event active stack\r\n this.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n self.startObjectAnimationFrame(block[\"obj_id\"], 'bounceObject')\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.bounce', {\r\n name: this.getObjectBlockName(o)\r\n }))\r\n\r\n o.bounce = true\r\n\r\n if (o.abortAnimation) {\r\n delete o.abortAnimation\r\n }\r\n\r\n o.animate(\r\n 'top',\r\n o.top - 100 * self.reader.pageScales[self.reader.pageSelected], {\r\n duration: 700,\r\n easing: fabric.util.ease.easeOutExpo,\r\n abort: function () {\r\n \r\n if (!self.page || pageSelected != self.reader.pageSelected) {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'bounceObject')\r\n return true\r\n }\r\n\r\n if (o.abortAnimation) {\r\n\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n o.bounce = false\r\n\r\n if (!o.bounce && !o.isScaling && !o.isRotating && !o.moveX && !o.moveY && !o.fade) {\r\n delete o.abortAnimation\r\n }\r\n \r\n return true\r\n }\r\n\r\n if (self.reader.eventStatus[block[\"eventCode\"]] === undefined) return true\r\n if (self.reader.eventStatus[block[\"eventCode\"]].inspectMode !== $nuxt.$store.state.inspectMode) return true\r\n },\r\n onChange: function() {\r\n \r\n self.testCollision(self, block, o)\r\n \r\n //readjusting in case of page re-scaling\r\n // o.left *=\r\n // self.reader.pageScales[self.reader.pageSelected] / pageScale\r\n // o.top *=\r\n // self.reader.pageScales[self.reader.pageSelected] / pageScale\r\n },\r\n onComplete: function onComplete() {\r\n if (self.page != null) {\r\n o.animate(\r\n 'top',\r\n // o.top == o.originalTop ?\r\n // o.top -\r\n // 100 * self.reader.pageScales[self.reader.pageSelected] :\r\n // o.top +\r\n // 100 * self.reader.pageScales[self.reader.pageSelected],\r\n o.top + 100 * self.reader.pageScales[self.reader.pageSelected], {\r\n duration: 700,\r\n easing: fabric.util.ease.easeOutBounce,\r\n abort: function () {\r\n \r\n if (!self.page || pageSelected != self.reader.pageSelected) {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'bounceObject')\r\n return true\r\n }\r\n\r\n if (o.abortAnimation) {\r\n\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n o.bounce = false\r\n \r\n if (!o.bounce && !o.isScaling && !o.isRotating && !o.moveX && !o.moveY && !o.fade) {\r\n delete o.abortAnimation\r\n }\r\n \r\n return true\r\n }\r\n\r\n if (self.reader.eventStatus[block[\"eventCode\"]] === undefined) return true\r\n if (self.reader.eventStatus[block[\"eventCode\"]].inspectMode !== $nuxt.$store.state.inspectMode) return true\r\n\r\n },\r\n onChange: function() {\r\n self.testCollision(self, block, o)\r\n // //readjusting in case of page re-scaling\r\n // o['top'] *=\r\n // self.reader.pageScales[self.reader.pageSelected] /\r\n // pageScale\r\n },\r\n onComplete: function () {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'bounceObject')\r\n if (self.page && pageSelected == self.reader.pageSelected) {\r\n o.bounce = false\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n\r\n // const c = self.checkIfEventCodeIsCompleted(block)\r\n \r\n // if (c) return\r\n \r\n typeof callback === 'function' && callback()\r\n }\r\n }\r\n }\r\n )\r\n }\r\n }\r\n }\r\n )\r\n\r\n },\r\n\r\n fadeBlock: function (self, block, callback) {\r\n\r\n\r\n if (!this.page) return\r\n\r\n let shift = 0,\r\n o = self.page.getItemById(block[\"obj_id\"])\r\n\r\n let pageScale = self.reader.pageScales[self.reader.pageSelected],\r\n pageSelected = self.reader.pageSelected\r\n\r\n if (!o) return\r\n if (o.fade) return\r\n \r\n if (o.type === 'textbox') {\r\n o.ownCaching = false\r\n o.objectCaching = false\r\n }\r\n\r\n \r\n // o.ownCaching = false\r\n // o.objectCaching = false\r\n \r\n\r\n block[\"currentIteration\"] = self.reader.eventStatus[block[\"eventCode\"]].counter\r\n\r\n let effect = 0\r\n if (block[\"effect\"] == 'fade in') {\r\n effect = o._originalProperties.opacity * 100\r\n // effect = 100\r\n }\r\n\r\n if (o.visible && effect != 0) {\r\n o.visible = false\r\n o.opacity = 0\r\n }\r\n\r\n if (!o.visible && effect == 0) {\r\n o.visible = true\r\n o.opacity = o._originalProperties.opacity\r\n // o.opacity = 1\r\n }\r\n\r\n // if (o.visible && effect != 0 || !o.visible && effect == 0) {\r\n\r\n // const t = self.checkIfEventCodeIsCompleted(block)\r\n\r\n // if (t) return\r\n\r\n // if (typeof callback == 'function') {\r\n // typeof callback === 'function' && callback()\r\n // }\r\n // return\r\n // }\r\n\r\n if (block.dontAddToActiveStack == undefined) {\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n self.startObjectAnimationFrame(block[\"obj_id\"], 'fadeobject')\r\n\r\n if (effect == 100) {\r\n this.appendLogMsg(this.reader.$t('reader.inspect.fadeIn', {\r\n name: this.getObjectBlockName(o)\r\n }))\r\n } else {\r\n this.appendLogMsg(this.reader.$t('reader.inspect.fadeOut', {\r\n name: this.getObjectBlockName(o)\r\n }))\r\n }\r\n }\r\n\r\n if (block[\"direction\"] === 'right-to-left') {\r\n block[\"direction\"] = 'left'\r\n if (!o.visible) {\r\n o.left += 20 * pageScale\r\n }\r\n\r\n shift = -20\r\n } else if (block[\"direction\"] === 'left-to-right') {\r\n block[\"direction\"] = 'left'\r\n if (!o.visible) {\r\n o.left -= 20 * pageScale\r\n }\r\n shift = 20\r\n } else if (block[\"direction\"] === 'top-to-bottom') {\r\n block[\"direction\"] = 'top'\r\n if (!o.visible) {\r\n o.top -= 20 * pageScale\r\n }\r\n shift = 20\r\n } else if (block[\"direction\"] === 'bottom-to-top') {\r\n block[\"direction\"] = 'top'\r\n if (!o.visible) {\r\n o.top += 20 * pageScale\r\n }\r\n shift = -20\r\n }\r\n\r\n o.setCoords()\r\n o.fade = true\r\n self.reader.timeouts.push(\r\n setTimeout(() => {\r\n self.reader.timeouts.pop()\r\n\r\n let animateParams = {\r\n opacity: effect / 100\r\n }\r\n \r\n if (block[\"direction\"] != 'none') {\r\n animateParams[block[\"direction\"]] = parseInt(o[block[\"direction\"]]) + shift * self.reader.pageScales[self.reader.pageSelected]\r\n }\r\n\r\n if (o.abortAnimation) {\r\n delete o.abortAnimation\r\n }\r\n \r\n o.visible = true\r\n o.animate(animateParams, {\r\n duration: 710,\r\n easing: fabric.util.ease.easeOutQuart,\r\n abort: function () {\r\n\r\n if (!self.page || pageSelected != self.reader.pageSelected) {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'fadeobject')\r\n if (o.type === 'textbox') {\r\n o.ownCaching = true\r\n o.objectCaching = true\r\n }\r\n return true\r\n }\r\n\r\n if (o.abortAnimation) {\r\n \r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n o.fade = false\r\n\r\n if (!o.bounce && !o.isScaling && !o.isRotating && !o.moveX && !o.moveY && !o.fade) {\r\n delete o.abortAnimation\r\n }\r\n\r\n if (o.type === 'textbox') {\r\n o.ownCaching = true\r\n o.objectCaching = true\r\n }\r\n\r\n return true\r\n }\r\n\r\n if (self.reader.eventStatus[block[\"eventCode\"]] === undefined) return true\r\n\r\n if (self.reader.eventStatus[block[\"eventCode\"]].inspectMode !== $nuxt.$store.state.inspectMode) return true\r\n \r\n\r\n },\r\n onChange: function () {\r\n self.testCollision(self, block, o)\r\n },\r\n onComplete: function onComplete() {\r\n \r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'fadeobject')\r\n if (self.page && pageSelected == self.reader.pageSelected) {\r\n if (effect === 0) {\r\n o.visible = false\r\n }\r\n o.fade = false\r\n if (o.type === 'textbox') {\r\n o.ownCaching = true\r\n o.objectCaching = true\r\n }\r\n\r\n if (block.dontAddToActiveStack == undefined) {\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n }\r\n typeof callback === 'function' && callback()\r\n }\r\n }\r\n })\r\n }, 500)\r\n )\r\n },\r\n\r\n textEffectBlock: function (self, block, callback) {\r\n if (!this.page) return\r\n\r\n let o = self.page.getItemById(block[\"obj_id\"])\r\n\r\n if (!o) return\r\n if (o.texteffect1) return\r\n\r\n \r\n\r\n let textLength = 0\r\n for (var i = 0; i < o._unwrappedTextLines.length; i++) {\r\n for (var j = 0; j < o._unwrappedTextLines[i].length; j++) {\r\n textLength += 1\r\n }\r\n }\r\n\r\n block[\"currentIteration\"] = self.reader.eventStatus[block[\"eventCode\"]].counter\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n self.startObjectAnimationFrame(block[\"obj_id\"], 'textEffect')\r\n \r\n o._renderTextCommon(o.canvas.getContext('2d'), 'fillText')\r\n // this._renderTextCommon(ctx, 'fillText')\r\n\r\n o.texteffect1 = true\r\n \r\n o.originalStyles = JSON.parse(JSON.stringify(o.styles))\r\n\r\n let s = {\r\n fill: new fabric.Color(o.fill).setAlpha(0).toRgba()\r\n // fill: this.hexToRGBA(o.fill, 0),\r\n }\r\n\r\n // if (block[\"effect\"] == 'pop') {\r\n // s['fontSize'] = 0\r\n // }\r\n\r\n // get text color and convert to rgba\r\n o.setSelectionStyles(s, 0, o.text.length)\r\n\r\n let pageSelected = self.reader.pageSelected\r\n\r\n if (!o.fade) {\r\n let fade_options = JSON.parse(JSON.stringify(block))\r\n fade_options.effect = 'fade in'\r\n fade_options.direction = 'none'\r\n fade_options.dontAddToActiveStack = true\r\n self.fadeBlock(this, fade_options)\r\n }\r\n \r\n let speed = 40\r\n if (block[\"speed\"] == 'fast') {\r\n speed = 60\r\n } else if (block[\"speed\"] == 'medium') {\r\n speed = 100\r\n } else if (block[\"speed\"] == 'slow') {\r\n speed = 200\r\n }\r\n\r\n if (block[\"effect\"] == 'typeWriter') {\r\n this.appendLogMsg(this.reader.$t('reader.inspect.typeTextEffect', {\r\n name: this.getObjectBlockName(o)\r\n }))\r\n } else {\r\n this.appendLogMsg(this.reader.$t('reader.inspect.fadeTextEffect', {\r\n name: this.getObjectBlockName(o)\r\n }))\r\n }\r\n\r\n self.reader.timeouts.push(\r\n setTimeout(() => {\r\n\r\n self.reader.timeouts.pop()\r\n\r\n // necessary to avoid text flickering and text not being rendered\r\n if (o.type === 'textbox') {\r\n o.objectCaching = false\r\n }\r\n \r\n if (\r\n block[\"effect\"] == 'typeWriter' ||\r\n block[\"effect\"] == 'scrap'\r\n ) {\r\n\r\n o.texteffect2 = true\r\n\r\n let s = {\r\n speed: speed,\r\n pageSelected: pageSelected,\r\n block: block,\r\n textLength: textLength\r\n }\r\n\r\n self.typeTextEffect(o, 0, 0, 0, o._originalProperties.opacity, s,\r\n function () {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'textEffect')\r\n if (pageSelected == self.reader.pageSelected) {\r\n o.texteffect1 = false\r\n o.texteffect2 = false\r\n if (o.type === 'textbox') o.objectCaching = true\r\n \r\n o.styles = JSON.parse(JSON.stringify(o.originalStyles))\r\n \r\n delete o.originalStyles\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n\r\n typeof callback === 'function' && callback()\r\n }\r\n }\r\n )\r\n return\r\n // } else if (block[\"effect\"] == 'fadeIn') {\r\n }\r\n\r\n let s = {\r\n totalSteps: 30,\r\n speed: speed,\r\n pageSelected: pageSelected,\r\n textLength: textLength,\r\n block: block\r\n }\r\n\r\n // here, adjust speed if necessary\r\n if (block[\"effect\"] == 'pop') {\r\n\r\n } else if (block[\"effect\"] == 'pan') {\r\n // horizontal slide in\r\n } else if (block[\"effect\"] == 'rise') {\r\n // vertical slide in\r\n } else if (block[\"effect\"] == 'wave') {\r\n // fade in then grow fontsize\r\n s[\"totalSteps\"] = 300\r\n } else if (block[\"effect\"] == 'tumble') {\r\n // rotate letter while slide in \r\n // s[\"totalSteps\"] = 20\r\n // s[\"speed\"] = s[\"speed\"] / 2\r\n o.tumbleAnimation = true\r\n } else if (block[\"effect\"] == 'flipObject') {\r\n o.flipAnimation = true\r\n } else if (block[\"effect\"] == 'scrap') {\r\n // pop up in random position then set in right position\r\n } else if (block[\"effect\"] == 'stomp') {\r\n // like pop but all char pop at the same time\r\n } else if (block[\"effect\"] == 'starfall') {\r\n \r\n } else if (block[\"effect\"] == 'breathe') {\r\n o.breatheAnimation = true\r\n s[\"totalSteps\"] = 150\r\n } else if (block[\"effect\"] == 'whirlpool') {\r\n o.whirlpoolAnimation = true\r\n } else if (block[\"effect\"] == 'roll') {\r\n o.rollAnimation = true\r\n s[\"totalSteps\"] = 60\r\n s[\"thirdSteps\"] = s[\"totalSteps\"] / 3\r\n }\r\n\r\n self.fadeTextEffect(o, -1, 0, -1, s,\r\n function () {\r\n // end animation\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'textEffect')\r\n if (self.page && pageSelected == self.reader.pageSelected && o.originalStyles) {\r\n delete o.texteffect1\r\n delete o.texteffect2\r\n delete o.breatheAnimation\r\n delete o.whirlpoolAnimation\r\n delete o.tumbleAnimation\r\n delete o.flipAnimation\r\n delete o.rollAnimation\r\n if (o.type === 'textbox') o.objectCaching = true\r\n \r\n o.styles = JSON.parse(JSON.stringify(o.originalStyles))\r\n delete o.originalStyles\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n\r\n typeof callback === 'function' && callback()\r\n }\r\n }\r\n )\r\n \r\n }, 1000)\r\n )\r\n },\r\n\r\n typeTextEffect: function (o, lineIndex, charIndex, index, opacity, options, callback) {\r\n \r\n if (this.reader.pageSelected != options.pageSelected) return\r\n\r\n if (o._text[index] == \"\\n\") {\r\n // skip line break\r\n index++\r\n charIndex++\r\n }\r\n\r\n const urls = [\r\n '/sounds/typewriter-1.mp3',\r\n '/sounds/typewriter-2.mp3',\r\n '/sounds/typewriter-3.mp3',\r\n '/sounds/typewriter-4.mp3',\r\n '/sounds/typewriter-5.mp3',\r\n '/sounds/typewriter-6.mp3',\r\n '/sounds/typewriter-7.mp3',\r\n '/sounds/typewriter-8.mp3'\r\n ]\r\n\r\n this.reader.timeouts.push(\r\n setTimeout(() => {\r\n\r\n this.reader.timeouts.pop()\r\n\r\n if (o._unwrappedTextLines[lineIndex] == undefined) {\r\n if (options.block.effect == \"typeWriter\") {\r\n typeof callback === 'function' && callback()\r\n }\r\n return\r\n }\r\n \r\n // index++\r\n // charIndex++\r\n if (o._unwrappedTextLines[lineIndex][charIndex] == undefined) {\r\n charIndex = 0\r\n // index = index - 1\r\n lineIndex++\r\n }\r\n \r\n if (o._unwrappedTextLines[lineIndex] == undefined) {\r\n if (options.block.effect == \"typeWriter\") {\r\n typeof callback === 'function' && callback()\r\n }\r\n return\r\n }\r\n\r\n if (options.block.effect == \"typeWriter\") {\r\n this.playSoundEffectBlock(\r\n this, {\r\n url: urls[Math.floor(Math.random() * urls.length)],\r\n volume: 20,\r\n pageSelected: options.pageSelected,\r\n eventCode: options.block[\"eventCode\"],\r\n dontAddToActiveStack: true\r\n }\r\n )\r\n }\r\n\r\n var style = {}\r\n style[\"fill\"] = new fabric.Color(o.originalStyles[lineIndex][charIndex].fill).toRgba()\r\n\r\n if (options.block.effect == \"scrap\") {\r\n style[\"deltaX\"] = this.getRandomNumber(400)\r\n style[\"deltaY\"] = this.getRandomNumber(400)\r\n }\r\n\r\n o.setSelectionStyles(\r\n style,\r\n index,\r\n index + 1\r\n )\r\n // }\r\n\r\n if (options.block.effect == \"scrap\") {\r\n this.reader.timeouts.push(\r\n setTimeout(() => {\r\n \r\n if (this.reader.pageSelected != options.pageSelected) return\r\n\r\n this.reader.timeouts.pop()\r\n o.setSelectionStyles({\r\n deltaX: 0,\r\n deltaY: 0\r\n },\r\n index,\r\n index + 1\r\n )\r\n \r\n if (index < options.textLength - 1) return\r\n \r\n typeof callback === 'function' && callback()\r\n\r\n }, options.speed * 10)\r\n )\r\n }\r\n \r\n if (index < o.text.length - 1) {\r\n // if (index < options.textLength - 1) {\r\n\r\n this.typeTextEffect(o, lineIndex, charIndex + 1, index + 1, opacity, options, function () {\r\n typeof callback === 'function' && callback()\r\n })\r\n } else if (options.block.effect == \"typeWriter\") {\r\n typeof callback === 'function' && callback()\r\n }\r\n }, options.speed)\r\n )\r\n },\r\n\r\n fadeTextEffect: function (o, index, lineIndex, charIndex, options, callback) {\r\n\r\n if (this.reader.pageSelected != options.pageSelected) return\r\n\r\n if (o._unwrappedTextLines[lineIndex] == undefined) {\r\n return\r\n }\r\n\r\n index++\r\n charIndex++\r\n\r\n if (o._text[index] == \"\\n\") {\r\n // skip line break\r\n index++\r\n charIndex++\r\n }\r\n\r\n if (o._unwrappedTextLines[lineIndex][charIndex] == undefined) {\r\n charIndex = 0\r\n lineIndex++\r\n }\r\n\r\n if (o._unwrappedTextLines[lineIndex] == undefined) {\r\n return\r\n }\r\n \r\n const _index = index\r\n const _lineIndex = lineIndex\r\n const _charIndex = charIndex\r\n\r\n o.isAnimating = true\r\n this.reader.timeouts.push(\r\n setTimeout(() => {\r\n \r\n this.reader.timeouts.pop()\r\n if (o.objectCaching && o.type === 'textbox') o.objectCaching = false\r\n \r\n if (index < o.text.length) {\r\n \r\n this.fadeTextEffect(o, _index, _lineIndex, _charIndex, options, function () {\r\n typeof callback === 'function' && callback()\r\n })\r\n }\r\n }, options.speed)\r\n )\r\n\r\n // this.fadeCharEffect(o, index, opacity, opacity / 30, 0, pageSelected, 0, block, function () {\r\n\r\n \r\n this.fadeCharEffect(o, _index, _lineIndex, _charIndex, 0, options, function () {\r\n o.isAnimating = false\r\n typeof callback === 'function' && callback()\r\n })\r\n },\r\n\r\n _fadeCharEffect: function (o, index, lineIndex, charIndex, step, options, callback) {\r\n\r\n if (this.reader.pageSelected != options.pageSelected)\r\n return;\r\n \r\n if (o.originalStyles && o.originalStyles[lineIndex] && o.originalStyles[lineIndex][charIndex]) {\r\n \r\n var style = {};\r\n\r\n if (step < 11) {\r\n style[\"fill\"] = new fabric.Color(o.originalStyles[lineIndex][charIndex].fill).setAlpha(step / 10).toRgba()\r\n }\r\n\r\n if (options.block[\"effect\"] == 'pop') {\r\n style[\"fontSize\"] = o.originalStyles[lineIndex][charIndex].fontSize * this.easeOutElastic(step / options.totalSteps);\r\n } else if (options.block[\"effect\"] == 'pan') {\r\n // horizontal slide in\r\n style[\"deltaX\"] = 1 - options.totalSteps / step;\r\n } else if (options.block[\"effect\"] == 'rise') {\r\n // vertical slide in\r\n style[\"deltaY\"] = options.totalSteps / step - 1;\r\n } else if (options.block[\"effect\"] == 'wave') {\r\n // fade in then grow fontsize\r\n style[\"fontSize\"] = o.originalStyles[lineIndex][charIndex].fontSize * this.easeOutElastic(step / options.totalSteps);\r\n // } else if (options.block[\"effect\"] == 'tumble') {\r\n // rotate letter while slide in\r\n // if (index % 2 == 1) {\r\n // style[\"deltaX\"] = options.totalSteps / step - 1\r\n // style[\"angle\"] = 360 * step / options.totalSteps\r\n // } else {\r\n // style[\"deltaX\"] = 1 - options.totalSteps / step \r\n // style[\"angle\"] = -360 * step / options.totalSteps\r\n // }\r\n } else if (options.block[\"effect\"] == 'flipObject') {\r\n style[\"angle\"] = 360 * this.easeOutElastic(step / options.totalSteps);\r\n } else if (options.block[\"effect\"] == 'whirlpool') {\r\n // rotate letter while slide in\r\n style[\"angle\"] = 360 * this.easeOutElastic(step / options.totalSteps);\r\n } else if (options.block[\"effect\"] == 'scrap') {\r\n // pop up in random position then set in right position\r\n } else if (options.block[\"effect\"] == 'stomp') {\r\n // like pop but all char pop at the same time\r\n } else if (options.block[\"effect\"] == 'starfall') {\r\n style[\"deltaY\"] = -500 * this.easeInBounce((options.totalSteps - step) / options.totalSteps);\r\n } else if (options.block[\"effect\"] == 'breathe') {\r\n // const t = o.originalStyles[options.loc[\"lineIndex\"].toString()][options.loc[\"charIndex\"].toString()].fontSize / 2;\r\n const t = o.originalStyles[lineIndex][charIndex].fontSize / 2;\r\n\r\n style[\"fontSize\"] = t + t * this.easeOutBack(step / options.totalSteps);\r\n } else if (options.block[\"effect\"] == 'roll') {\r\n if (options.thirdSteps >= step) {\r\n // fade in + vert down to 0\r\n style[\"deltaY\"] = -100 * ((options.thirdSteps - step) / options.thirdSteps);\r\n let c = step / options.thirdSteps * 0.6\r\n if (c > 1) {\r\n c = 1\r\n }\r\n } else if (options.thirdSteps < step && 2 * options.thirdSteps >= step) {\r\n \r\n style[\"deltaY\"] = 100 * ((step - options.thirdSteps) / options.thirdSteps);\r\n\r\n } else {\r\n const t = 2 * options.thirdSteps;\r\n style[\"deltaY\"] = -100 * ((options.thirdSteps - (step - t)) / options.thirdSteps);\r\n\r\n }\r\n\r\n }\r\n \r\n o.setSelectionStyles(style, index, index + 1);\r\n }\r\n this.reader.timeouts.push(\r\n setTimeout(() => {\r\n this.reader.timeouts.pop();\r\n \r\n if (options.totalSteps > step) {\r\n step += 1;\r\n this.fadeCharEffect(o, index, lineIndex, charIndex, step, options, function () {\r\n typeof callback === 'function' && callback();\r\n });\r\n } else if (index >= options.textLength - 1) {\r\n typeof callback === 'function' && callback();\r\n }\r\n }, 30)\r\n );\r\n },\r\n get fadeCharEffect () {\r\n return this._fadeCharEffect;\r\n },\r\n set fadeCharEffect (value) {\r\n this._fadeCharEffect = value;\r\n },\r\n\r\n getRandomNumber: function(max) {\r\n const rand_sign = Math.random()\r\n let sign = 1\r\n if (rand_sign > 0.5) {\r\n sign = -1\r\n }\r\n\r\n return sign * Math.floor(Math.random() * max)\r\n\r\n },\r\n\r\n easeOutExpo: function(x) {\r\n return x === 1 ? 1 : 1 - Math.pow(2, -10 * x);\r\n },\r\n\r\n easeInExpo: function(x) {\r\n return x === 0 ? 0 : Math.pow(2, 10 * x - 10);\r\n },\r\n\r\n easeOutBack: function (x) {\r\n const c1 = 1.70158;\r\n const c3 = c1 + 1;\r\n\r\n return 1 + c3 * Math.pow(x - 1, 3) + c1 * Math.pow(x - 1, 2);\r\n },\r\n\r\n easeInQuint: function (x) {\r\n // return 1 - Math.pow(1 - x, 5);\r\n // return x * x * x * x * x;\r\n return x * x * x * x * x;\r\n },\r\n\r\n easeOutQuint: function (x) {\r\n return 1 - Math.pow(1 - x, 5);\r\n },\r\n\r\n easeOutBounce: function(x) {\r\n const n1 = 7.5625;\r\n const d1 = 2.75;\r\n \r\n if (x < 1 / d1) {\r\n return n1 * x * x;\r\n } else if (x < 2 / d1) {\r\n return n1 * (x -= 1.5 / d1) * x + 0.75;\r\n } else if (x < 2.5 / d1) {\r\n return n1 * (x -= 2.25 / d1) * x + 0.9375;\r\n } else {\r\n return n1 * (x -= 2.625 / d1) * x + 0.984375;\r\n }\r\n },\r\n\r\n easeInBounce: function(x) {\r\n return 1 - this.easeOutBounce(1 - x);\r\n },\r\n \r\n easeInElastic: function(x) {\r\n const c4 = (2 * Math.PI) / 3;\r\n\r\n return x === 0\r\n ? 0\r\n : x === 1\r\n ? 1\r\n : -Math.pow(2, 10 * x - 10) * Math.sin((x * 10 - 10.75) * c4);\r\n },\r\n\r\n\r\n easeOutElastic: function (x) {\r\n const c4 = (2 * Math.PI) / 3;\r\n\r\n return x === 0\r\n ? 0\r\n : x === 1\r\n ? 1\r\n : Math.pow(2, -10 * x) * Math.sin((x * 10 - 0.75) * c4) + 1;\r\n },\r\n\r\n easeInOutElastic: function(x) {\r\n const c5 = (2 * Math.PI) / 4.5;\r\n \r\n return x === 0\r\n ? 0\r\n : x === 1\r\n ? 1\r\n : x < 0.5\r\n ? -(Math.pow(2, 20 * x - 10) * Math.sin((20 * x - 11.125) * c5)) / 2\r\n : (Math.pow(2, -20 * x + 10) * Math.sin((20 * x - 11.125) * c5)) / 2 + 1;\r\n },\r\n \r\n hexToRGBA: function (hex, opacity) {\r\n hex = hex.replace('#', '')\r\n const r = parseInt(hex.substring(0, 2), 16),\r\n g = parseInt(hex.substring(2, 4), 16),\r\n b = parseInt(hex.substring(4, 6), 16),\r\n result = 'rgba(' + r + ',' + g + ',' + b + ',' + opacity + ')'\r\n return result\r\n },\r\n\r\n blinkBlock: function (self, block, callback) {\r\n if (!this.page) return\r\n\r\n let o = self.page.getItemById(block[\"obj_id\"]),\r\n pageSelected = self.reader.pageSelected\r\n\r\n if (o.blink) return\r\n o.blink = true\r\n\r\n block[\"currentIteration\"] = self.reader.eventStatus[block[\"eventCode\"]].counter\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n self.startObjectAnimationFrame(block[\"obj_id\"], 'blinkObject')\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.blink', {\r\n name: this.getObjectBlockName(o)\r\n }))\r\n\r\n o.animate('opacity', 0, {\r\n duration: 700,\r\n easing: fabric.util.ease.easeInExpo,\r\n abort: function () { \r\n if (!self.page || pageSelected != self.reader.pageSelected) {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'blinkObject')\r\n return true\r\n }\r\n if (self.reader.eventStatus[block[\"eventCode\"]] === undefined) return true\r\n if (self.reader.eventStatus[block[\"eventCode\"]].inspectMode !== $nuxt.$store.state.inspectMode) return true\r\n \r\n },\r\n onComplete: function onComplete() {\r\n if (self.page && pageSelected == self.reader.pageSelected) {\r\n o.animate('opacity', o._originalProperties.opacity, {\r\n duration: 700,\r\n easing: fabric.util.ease.easeInExpo,\r\n abort: function () {\r\n \r\n if (!self.page || pageSelected != self.reader.pageSelected) {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'blinkObject')\r\n return true\r\n }\r\n\r\n if (self.reader.eventStatus[block[\"eventCode\"]] === undefined) return true\r\n if (self.reader.eventStatus[block[\"eventCode\"]].inspectMode !== $nuxt.$store.state.inspectMode) return true\r\n \r\n },\r\n onComplete: function () {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'blinkObject')\r\n if (self.page && pageSelected == self.reader.pageSelected) {\r\n o.blink = false\r\n \r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n\r\n typeof callback === 'function' && callback()\r\n } else {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'blinkObject')\r\n }\r\n }\r\n })\r\n } else {\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'blinkObject')\r\n }\r\n }\r\n })\r\n },\r\n\r\n animateSpineBlock: function (self, block, callback) {\r\n if (!this.page) return\r\n\r\n if (block[\"name\"] == 'none') return\r\n\r\n let o = self.page.getItemById(block[\"obj_id\"]),\r\n pageSelected = self.reader.pageSelected\r\n\r\n if (!o) return\r\n o.endless = true\r\n // o.skeleton.updateCache()\r\n block[\"currentIteration\"] = self.reader.eventStatus[block[\"eventCode\"]].counter\r\n // push to event active stack\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n\r\n if (o.state.tracks[0]) {\r\n // o.state.data.setMix(o.state.tracks[0].name, options.animation, 0.5)\r\n } else {\r\n self.startObjectAnimationFrame(block[\"obj_id\"], 'animateSpineObject')\r\n }\r\n o.state.setAnimation(0, block[\"name\"], o.endless)\r\n o.state.tracks[0].name = block[\"name\"]\r\n\r\n this.appendLogMsg(this.reader.$tc('reader.inspect.animateSpine', \r\n parseInt(block[\"duration\"]),\r\n {\r\n name: this.getObjectBlockName(o),\r\n animation: block['name'],\r\n duration: block['duration']\r\n }\r\n ))\r\n\r\n // return\r\n self.reader.timeouts.push(\r\n setTimeout(function () {\r\n self.reader.timeouts.pop()\r\n if (pageSelected != self.reader.pageSelected) return\r\n if (!o.state.tracks[0]) return\r\n \r\n if (parseInt(block[\"duration\"]) == 0) return\r\n\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n \r\n //check if object must stop being animated\r\n // if (\r\n // o.state.tracks[0].name != block[\"animation\"] &&\r\n // o.state.tracks[0].name != 'none'\r\n // ) {\r\n // self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n // // if (typeof callback !== 'function') {\r\n // self.checkIfEventCodeIsCompleted(block)\r\n // // }\r\n // return\r\n // }\r\n\r\n // self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n //stop all animations\r\n o.state.clearTrack(0)\r\n\r\n self.stopObjectAnimationFrame(block[\"obj_id\"], 'animateSpineObject')\r\n\r\n typeof callback === 'function' && callback()\r\n \r\n }, parseInt(block[\"duration\"] * 1000))\r\n )\r\n },\r\n\r\n setVarVal: function (self, block, callback) {\r\n \r\n if (block[\"nameA\"] == \"none\") {\r\n callback()\r\n return\r\n } \r\n\r\n if (this.reader.eventStatus[block[\"eventCode\"]] == undefined) return\r\n // check if nameB is undefined\r\n // if yes, block is\r\n if (typeof block[\"nameB\"] == 'object') {\r\n if (block[\"nameB\"].showplaceholder) {\r\n block[\"nameB\"] = ''\r\n } else {\r\n block[\"nameB\"] = block[\"nameB\"].text \r\n }\r\n } else if (typeof block[\"nameB\"] == 'string') {\r\n block[\"nameB\"] = this.transformStringValue(block[\"nameB\"])\r\n }\r\n \r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n this.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n\r\n // if variable is equal to variable block\r\n if (block[\"cssClass\"] == \"textVariableEqualsVariableBlock\" || block[\"cssClass\"] == \"numberVariableEqualsVariableBlock\" || block[\"cssClass\"] == \"booleanVariableEqualsVariableBlock\"){\r\n // get variable B current value\r\n // this.reader.global_variables[block[\"nameA\"]]['value'] = this.reader.global_variables[block[\"nameB\"]]['value']\r\n // this.reader.$set(this.reader.global_variables[block[\"nameA\"]], 'value', this.reader.global_variables[block[\"nameB\"]]['value'])\r\n this.reader.$set(this.reader.global_variables, block[\"nameA\"], \r\n {\r\n value: this.reader.global_variables[block[\"nameB\"]]['value'],\r\n type: this.reader.global_variables[block[\"nameA\"]]['type']\r\n }\r\n )\r\n \r\n this.appendLogMsg(this.reader.$t('reader.inspect.setVarVal', {\r\n variable: block[\"nameA\"],\r\n value: this.reader.global_variables[block[\"nameB\"]]['value']\r\n }))\r\n }else{\r\n // this.reader.global_variables[block[\"nameA\"]]['value'] = block[\"nameB\"]\r\n this.reader.$set(this.reader.global_variables, block[\"nameA\"], \r\n {\r\n value: block[\"nameB\"],\r\n type: this.reader.global_variables[block[\"nameA\"]]['type']\r\n }\r\n )\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.setVarVal', {\r\n variable: block[\"nameA\"],\r\n value: block['nameB']\r\n }))\r\n\r\n }\r\n\r\n this.updateObjectsTextValue(true, block)\r\n // check for wait for glow list\r\n for (var i = 0, l = this.reader.waitForGlowList.length; i < l; i++) {\r\n // update condition\r\n var conn = this.getBlockConnections(this.reader.waitForGlowList[i][\"event_id\"])\r\n for (let m = 0; m < conn.length; m++) {\r\n if (conn[m][\"target\"][\"port\"] != \"conditionLogicPort\") continue\r\n this.reader.waitForGlowList[i].condition = this.generateConditionCode(conn[m][\"source\"][\"node\"])\r\n break\r\n }\r\n\r\n // retest glowobject\r\n var layout_obj = this.page.getItemById(this.reader.waitForGlowList[i].obj_id)\r\n if (layout_obj) {\r\n this.glowObject(\r\n this,\r\n layout_obj,\r\n this.reader.waitForGlowList[i].condition,\r\n block['id'],\r\n block['glow']\r\n )\r\n }\r\n }\r\n\r\n this.reader.setCookie(\r\n block[\"variable\"],\r\n this.reader.global_variables[block[\"variable\"]],\r\n 'path=/stories/' + this.reader.project.slug\r\n )\r\n\r\n this.reader.timeouts.push(setTimeout(() => {\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n this.reader.timeouts.pop()\r\n typeof callback === 'function' && callback()\r\n }, 600))\r\n },\r\n\r\n numberVariableEqualsRandomBlock: function (self, block, callback) {\r\n \r\n if (block[\"nameA\"] == \"none\") {\r\n callback()\r\n return\r\n }\r\n\r\n if (this.reader.eventStatus[block[\"eventCode\"]] == undefined) return\r\n\r\n var nameB = this.isValueAVariableField(block[\"nameB\"])\r\n if (!this.isNumber(nameB, true)) return\r\n\r\n var nameC = this.isValueAVariableField(block[\"nameC\"])\r\n if (!this.isNumber(nameC, true)) return\r\n\r\n nameB.value = Math.floor(parseInt(nameB.value))\r\n nameC.value = Math.ceil(parseInt(nameC.value))\r\n // block[\"nameC\"] = Math.ceil(parseInt(block[\"nameC\"]))\r\n // block[\"nameB\"] = Math.floor(parseInt(block[\"nameB\"]))\r\n\r\n // window[options.variable] = Math.floor(Math.random() * (options.max - options.min)) + options.min\r\n // this.reader.global_variables[block[\"nameA\"]]['value'] = Math.floor(Math.random() * (block[\"nameB\"] + 1 - block[\"nameC\"])) + block[\"nameC\"]\r\n this.reader.$set(this.reader.global_variables, block[\"nameA\"], \r\n {\r\n value: Math.floor(Math.random() * (nameB.value + 1 - nameC.value)) + nameC.value,\r\n type: this.reader.global_variables[block[\"nameA\"]]['type']\r\n }\r\n )\r\n // post message in log if inspectmode == true\r\n this.appendLogMsg(this.reader.$t('reader.inspect.setRandomValue', {\r\n variable: block[\"nameA\"],\r\n value: this.reader.global_variables[block[\"nameA\"]]['value']\r\n }))\r\n\r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n this.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n this.updateObjectsTextValue(true, block)\r\n this.reader.setCookie(\r\n block[\"nameA\"],\r\n this.reader.global_variables[block[\"nameA\"]],\r\n 'path=/stories/' + this.reader.project.slug\r\n )\r\n this.reader.timeouts.push(setTimeout(() => {\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n this.reader.timeouts.pop()\r\n callback()\r\n }, 600))\r\n },\r\n\r\n incrementBlock: function (self, block, callback) {\r\n if (block[\"variable\"] == \"none\") {\r\n callback()\r\n return\r\n }\r\n\r\n\r\n if (this.reader.eventStatus[block[\"eventCode\"]] == undefined) return\r\n\r\n var value = this.isValueAVariableField(block[\"value\"])\r\n if (!this.isNumber(value, true)) return\r\n\r\n // this.reader.global_variables[block[\"variable\"]]['value'] = parseFloat(this.reader.global_variables[block[\"variable\"]]['value']) + parseInt(block[\"value\"])\r\n this.reader.$set(this.reader.global_variables, block[\"variable\"], \r\n {\r\n value: parseFloat(this.reader.global_variables[block[\"variable\"]]['value']) + parseInt(value.value),\r\n type: this.reader.global_variables[block[\"variable\"]]['type']\r\n }\r\n )\r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n this.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.increment', {\r\n variable: block[\"variable\"],\r\n value: block['value']\r\n }))\r\n\r\n this.updateObjectsTextValue(true, block)\r\n this.reader.setCookie(\r\n block[\"variable\"],\r\n this.reader.global_variables[block[\"variable\"]],\r\n 'path=/stories/' + this.reader.project.slug\r\n )\r\n\r\n this.reader.timeouts.push(setTimeout(() => {\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n this.reader.timeouts.pop()\r\n callback()\r\n }, 600))\r\n },\r\n\r\n decrementBlock: function (self, block, callback) {\r\n\r\n if (block[\"variable\"] == \"none\") {\r\n callback()\r\n return\r\n }\r\n\r\n if (this.reader.eventStatus[block[\"eventCode\"]] == undefined) return\r\n\r\n let value = this.isValueAVariableField(block[\"value\"])\r\n if (!this.isNumber(value, true)) return\r\n \r\n // this.reader.global_variables[block[\"variable\"]]['value'] = parseFloat(this.reader.global_variables[block[\"variable\"]]['value']) - parseInt(block[\"value\"])\r\n this.reader.$set(this.reader.global_variables, block[\"variable\"], \r\n {\r\n value: parseFloat(this.reader.global_variables[block[\"variable\"]]['value']) - parseInt(value.value),\r\n type: this.reader.global_variables[block[\"variable\"]]['type']\r\n }\r\n )\r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n this.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.decrement', {\r\n variable: block[\"variable\"],\r\n value: block['value']\r\n }))\r\n\r\n this.updateObjectsTextValue(true, block)\r\n\r\n this.reader.setCookie(\r\n block[\"variable\"],\r\n this.reader.global_variables[block[\"variable\"]],\r\n 'path=/stories/' + this.reader.project.slug\r\n )\r\n\r\n this.reader.timeouts.push(setTimeout(() => {\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n this.reader.timeouts.pop()\r\n callback()\r\n }, 600))\r\n },\r\n\r\n insertTextBlock: function (self, block, callback) {\r\n\r\n if (block[\"variable\"] == \"none\") {\r\n callback()\r\n return\r\n }\r\n\r\n if (this.reader.eventStatus[block[\"eventCode\"]] == undefined) return\r\n\r\n let value = this.isValueAVariableField(block[\"value\"])\r\n value.value = value.value.toString() \r\n\r\n if (block[\"operation\"] != \"prepend\") {\r\n // this.reader.global_variables[block[\"variable\"]][\"value\"] = this.reader.global_variables[block[\"variable\"]][\"value\"].toString().concat(block['value'])\r\n\r\n this.reader.$set(this.reader.global_variables, block[\"variable\"], \r\n {\r\n value: this.reader.global_variables[block[\"variable\"]][\"value\"].toString().concat(value.value),\r\n type: this.reader.global_variables[block[\"variable\"]]['type']\r\n }\r\n )\r\n // post message in log if inspectmode == true\r\n this.appendLogMsg(this.reader.$t('reader.inspect.insertTextBefore', {\r\n variable: block[\"variable\"],\r\n value: value.value\r\n }))\r\n } else {\r\n // this.reader.global_variables[block[\"variable\"]][\"value\"] = block[\"value\"].concat(this.reader.global_variables[block[\"variable\"]].toString())\r\n this.reader.$set(this.reader.global_variables, block[\"variable\"], \r\n {\r\n value: value.value.concat(this.reader.global_variables[block[\"variable\"]].toString()),\r\n type: this.reader.global_variables[block[\"variable\"]]['type']\r\n }\r\n )\r\n this.appendLogMsg(this.reader.$t('reader.inspect.insertTextBefore', {\r\n variable: block[\"variable\"],\r\n value: value.value\r\n }))\r\n }\r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n this.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n\r\n \r\n\r\n this.updateObjectsTextValue(true, block)\r\n\r\n this.reader.setCookie(\r\n block[\"variable\"],\r\n this.reader.global_variables[block[\"variable\"]],\r\n 'path=/stories/' + this.reader.project.slug\r\n )\r\n this.reader.timeouts.push(setTimeout(() => {\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n this.reader.timeouts.pop()\r\n callback()\r\n }, 600))\r\n },\r\n\r\n setObjAttr: function (id, attribute, value, __callback) {\r\n // if (this.reader.eventStatus[block[\"eventCode\"]] == undefined) return\r\n if (!this.page) return\r\n\r\n let o = this.page.getItemById(id)\r\n if (!o) return\r\n switch (attribute) {\r\n case 'background color':\r\n attribute = 'backgroundColor'\r\n break\r\n case 'text fill color':\r\n attribute = 'fill'\r\n break\r\n case 'text stroke color':\r\n attribute = 'stroke'\r\n break\r\n case 'flip horizontally':\r\n if (value === 'true' || value === 'yes') value = true\r\n if (value === 'false' || value === 'no') value = false\r\n attribute = 'flipX'\r\n break\r\n case 'flip vertically':\r\n if (value === 'true' || value === 'yes') value = true\r\n if (value === 'false' || value === 'no') value = false\r\n attribute = 'flipY'\r\n break\r\n case 'font family':\r\n attribute = 'fontFamily'\r\n break\r\n case 'font size':\r\n attribute = 'fontSize'\r\n break\r\n case 'font style':\r\n attribute = 'fontStyle'\r\n break\r\n case 'lock movement':\r\n if (value === 'true' || value === 'yes') value = true\r\n if (value === 'false' || value === 'no') value = false\r\n attribute = 'lockMovementX'\r\n break\r\n case 'text alignment':\r\n attribute = 'textAlign'\r\n break\r\n case 'source image':\r\n attribute = 'src'\r\n break\r\n // case \"background color\":\r\n }\r\n switch (attribute) {\r\n case 'text':\r\n o.text = value.toString()\r\n break\r\n case 'backgroundColor':\r\n o.set('backgroundColor', value)\r\n break\r\n case 'editable':\r\n o.editable = value\r\n break\r\n case 'fill':\r\n o.setColor(value)\r\n break\r\n case 'stroke':\r\n o.stroke = value\r\n break\r\n case 'flipX':\r\n o.flipX = value\r\n break\r\n case 'flipY':\r\n o.flipY = value\r\n break\r\n case 'fontFamily':\r\n o.fontFamily = '\"' + value + '\"'\r\n break\r\n case 'fontSize':\r\n o.fontSize = value\r\n break\r\n case 'fontStyle':\r\n o.fontStyle = value\r\n break\r\n case 'height':\r\n o.height = value * this.reader.pageScales[this.reader.pageSelected]\r\n break\r\n case 'left':\r\n o.left = value * this.reader.pageScales[this.reader.pageSelected]\r\n break\r\n case 'lockMovementX':\r\n o.lockMovementY = value\r\n o.lockMovementX = value\r\n break\r\n case 'opacity':\r\n value /= 100\r\n if (value > 1) {\r\n value = 1\r\n } else if (value < 0) {\r\n value = 0\r\n }\r\n o.opacity = value\r\n break\r\n case 'shadow':\r\n if (value === true) {\r\n o.shadow = this.shadow\r\n } else {\r\n o.shadow = null\r\n }\r\n\r\n break\r\n case 'textAlign':\r\n value = value.toLowerCase()\r\n o.textAlign = value\r\n break\r\n case 'top':\r\n o.top = value * this.reader.pageScales[this.reader.pageSelected]\r\n break\r\n case 'width':\r\n o.width = value * this.reader.pageScales[this.reader.pageSelected]\r\n break\r\n case 'src':\r\n o.srcArray.forEach(function (e) {\r\n if (e.title === value) {\r\n o.setSrc(e.url, function () {})\r\n return\r\n }\r\n })\r\n this.popObject(this, o.id)\r\n break\r\n }\r\n o.setColor(o.fill)\r\n o.setCoords()\r\n this.page.requestRenderAll()\r\n typeof __callback === 'function' && __callback()\r\n },\r\n\r\n glowObject: function (self, o, condition, eventId, makeObjectGlow) {\r\n\r\n if (!self.page) return\r\n\r\n var pageSelected = self.reader.pageSelected\r\n\r\n if (eventId) {\r\n this.reader.waitForGlowList.push({\r\n obj_id: o.id,\r\n condition: condition,\r\n event_id: eventId\r\n })\r\n // this.reader.waitForGlowList[eventId] = condition\r\n }\r\n\r\n if (this.parseBoolStr(condition) == false) {\r\n o.hoverCursor = 'default'\r\n o.stopGlow = true\r\n return\r\n }\r\n\r\n if (o.isGlowing) return\r\n\r\n o.hoverCursor = 'pointer'\r\n\r\n if (\r\n o.type == 'Textbutton' ||\r\n o.type == 'Quiz' ||\r\n o.type == 'Spine' ||\r\n o.type == 'textbox' ||\r\n o.type == 'textfield'\r\n )\r\n return\r\n\r\n if (makeObjectGlow == false) return\r\n\r\n self.startObjectAnimationFrame(o.id, 'glowObject')\r\n o.isGlowing = true\r\n o.stopGlow = false\r\n \r\n o.setShadow(self.glow)\r\n o.animate('shadow.blur', 30, {\r\n duration: 1000,\r\n easing: fabric.util.ease.easeInQuad,\r\n abort: function () {\r\n \r\n if (!o) {\r\n self.stopObjectAnimationFrame(o.id, 'glowObject')\r\n o.isGlowing = false\r\n return true\r\n }\r\n\r\n if (!o.evented || !self.page || o.stopGlow || pageSelected != self.reader.pageSelected) {\r\n o.setShadow({\r\n offsetX: 0,\r\n offsetY: 0,\r\n blur: 0,\r\n color: 'rgba(0,0,0,0.3)',\r\n opacity: 0.6\r\n })\r\n o.hoverCursor = 'default'\r\n o.clicked = false\r\n o.isGlowing = false\r\n self.stopObjectAnimationFrame(o.id, 'glowObject')\r\n return true\r\n }\r\n },\r\n onComplete: function onComplete() {\r\n if (!self.page || pageSelected != self.reader.pageSelected) {\r\n self.stopObjectAnimationFrame(o.id, 'glowObject')\r\n return\r\n }\r\n\r\n if (!o.shadow || o.stopGlow || !o.evented) {\r\n o.isGlowing = false\r\n self.stopObjectAnimationFrame(o.id, 'glowObject')\r\n return\r\n }\r\n\r\n o.animate('shadow.blur', o.shadow.blur === 30 ? 1 : 30, {\r\n duration: 1000,\r\n easing: fabric.util.ease.easeOutQuad,\r\n abort: function () {\r\n \r\n if (!self.page || pageSelected != self.reader.pageSelected) {\r\n self.stopObjectAnimationFrame(o.id, 'glowObject')\r\n return true\r\n }\r\n\r\n if (!o.evented || !self.page || o.stopGlow) {\r\n o.hoverCursor = 'default'\r\n o.setShadow({\r\n offsetX: 0,\r\n offsetY: 0,\r\n blur: 0,\r\n color: 'rgba(0,0,0,0.3)',\r\n opacity: 0.6\r\n })\r\n o.clicked = false\r\n o.isGlowing = false\r\n self.stopObjectAnimationFrame(o.id, 'glowObject')\r\n return true\r\n } \r\n \r\n },\r\n onComplete: onComplete\r\n })\r\n }\r\n })\r\n },\r\n\r\n playSoundEffectBlock: function (self, block, callback) {\r\n // if (options.pageSelected != self.reader.pageSelected) return\r\n block[\"currentIteration\"] = self.reader.eventStatus[block[\"eventCode\"]].counter\r\n\r\n if (block.dontAddToActiveStack == undefined) {\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n }\r\n \r\n const pageSelected = self.reader.pageSelected\r\n\r\n if (typeof block[\"volume\"] == 'string') {\r\n block[\"volume\"] = parseInt(block[\"volume\"].slice(0, 2))\r\n }\r\n\r\n let soundUrl = block[\"url\"]\r\n if (block[\"soundUrl\"]){\r\n // case of change image, we use url for the image path => we want another another keyname for the sound url\r\n soundUrl = block[\"soundUrl\"]\r\n }\r\n\r\n if (block[\"dontAddToActiveStack\"] == undefined) {\r\n this.appendLogMsg(this.reader.$t('reader.inspect.playSoundEffect', {\r\n sound: block[\"sound\"],\r\n artist: block[\"artist\"]\r\n }))\r\n }\r\n // Check if the value is greater than 1\r\n let volume = block[\"volume\"] / 50\r\n if (volume > 1) {\r\n volume = 1;\r\n }\r\n var sound = new Howl({\r\n src: [soundUrl],\r\n volume: volume,\r\n // html5: true,\r\n preload: true,\r\n onload: function () {\r\n // if (options.pageSelected != self.reader.pageSelected) return\r\n self.reader.soundEffects.push(sound)\r\n sound.play()\r\n if (self.reader.mute) {\r\n sound.mute(true)\r\n }\r\n },\r\n onplay: function () {\r\n if (self.reader.soundEffects.length == 0) return\r\n if (pageSelected != self.reader.pageSelected) {\r\n for (var i = 0, l = self.reader.soundEffects.length; i < l; i++) {\r\n self.reader.soundEffects[i].unload()\r\n }\r\n }\r\n },\r\n onend: function () {\r\n self.reader.soundEffects.forEach(function (e, i) {\r\n if (e._src == block[\"url\"]) {\r\n self.reader.soundEffects.splice(i, 1)\r\n return\r\n }\r\n })\r\n if (pageSelected == self.reader.pageSelected) {\r\n if (block.dontAddToActiveStack == undefined) {\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n }\r\n\r\n typeof callback === 'function' && callback()\r\n }\r\n }\r\n })\r\n },\r\n\r\n playRecordBlock: function (self, block, callback) {\r\n block[\"currentIteration\"] = self.reader.eventStatus[block[\"eventCode\"]].counter\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n const pageNumber = self.reader.pageSelected\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.playRecord', {\r\n sound: block[\"sound\"],\r\n artist: block[\"artist\"]\r\n }))\r\n\r\n // Check if the value is greater than 1\r\n let volume = parseInt(block[\"volume\"]) / 100\r\n if (volume > 1) {\r\n volume = 1;\r\n }\r\n\r\n var sound = new Howl({\r\n src: [block[\"url\"]],\r\n // html5: true,\r\n preload: true,\r\n volume: volume,\r\n onload: function () {\r\n if (pageNumber != self.reader.pageSelected) return\r\n self.reader.recordSounds.push(sound)\r\n sound.play()\r\n if (self.reader.mute) {\r\n sound.mute(true)\r\n }\r\n },\r\n onplay: function () {\r\n if (self.reader.recordSounds.length == 0) return\r\n\r\n if (pageNumber != self.reader.pageSelected) {\r\n sound.unload()\r\n }\r\n },\r\n onend: function () {\r\n self.reader.recordSounds.forEach(function (e, i) {\r\n if (e._src == block[\"url\"]) {\r\n self.reader.recordSounds.splice(i, 1)\r\n return\r\n }\r\n })\r\n\r\n if (pageNumber == self.reader.pageSelected) {\r\n\r\n self.reader.displayNextPageHint(self.reader, pageNumber, 500)\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n\r\n typeof callback === 'function' && callback()\r\n }\r\n }\r\n })\r\n },\r\n\r\n stopMusicBlock: function (self, block, callback) {\r\n if (!this.reader.music) return\r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n this.reader.music.unload()\r\n this.reader.music = null\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.stopMusic'))\r\n\r\n this.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n\r\n this.reader.timeouts.push(setTimeout(() => {\r\n this.reader.timeouts.pop()\r\n callback()\r\n }, 600))\r\n },\r\n\r\n playMusicBlock: function (self, block, callback) {\r\n\r\n // if (options.pageNumber != self.reader.pageSelected) return\r\n block[\"currentIteration\"] = self.reader.eventStatus[block[\"eventCode\"]].counter\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n\r\n let repeat = false\r\n if (block[\"repeat\"] == \"true\") {\r\n repeat = true\r\n }\r\n\r\n const pageNumber = self.reader.pageSelected\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.playMusic', {\r\n sound: block[\"sound\"],\r\n artist: block[\"artist\"]\r\n }))\r\n\r\n if (!self.reader.music) {\r\n let volume = parseInt(block[\"volume\"]) / 600\r\n if (volume > 1) {\r\n volume = 1;\r\n }\r\n self.reader.music = new Howl({\r\n src: [block[\"url\"]],\r\n loop: repeat,\r\n volume: volume,\r\n // preload: true,\r\n // html5: true,\r\n onload: function () {\r\n if (!self.reader.music) return\r\n self.reader.music.play()\r\n if (self.reader.mute) {\r\n self.reader.music.mute(true)\r\n }\r\n // self.core.reader.music.fade(0, volume / 500, 1500);\r\n },\r\n onplay: function () {\r\n if (!self.reader.music) return\r\n if (self.reader.music._loop) return\r\n if (pageNumber != self.reader.pageSelected) {\r\n self.reader.music.unload()\r\n }\r\n },\r\n onend: function () {\r\n if (self.reader.music == null) return\r\n if (!self.reader.music._loop) {\r\n self.reader.music = null\r\n }\r\n\r\n if (pageNumber == self.reader.pageSelected) {\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n \r\n typeof callback === 'function' && callback()\r\n }\r\n }\r\n })\r\n } else if (self.reader.music._src != block[\"url\"]) {\r\n self.reader.music.fade(parseInt(block[\"volume\"]) / 600, 0, 2000)\r\n self.reader.timeouts.push(setTimeout(() => {\r\n self.reader.timeouts.pop()\r\n let bg_sound = new Howl({\r\n src: [block[\"url\"]],\r\n loop: repeat,\r\n volume: parseInt(block[\"volume\"]) / 600,\r\n preload: true,\r\n // html5: true,\r\n onload: function () {\r\n if (!self.reader.music) return\r\n // setTimeout(function() {\r\n // if (self.reader.music) {\r\n self.reader.music.unload()\r\n // }\r\n self.reader.music = bg_sound\r\n bg_sound = null\r\n self.reader.music.play()\r\n if (self.reader.mute) {\r\n self.reader.music.mute(true)\r\n }\r\n // self.reader.music.fade(0, volume / 600, 2000)\r\n // }, 1500)\r\n },\r\n onplay: function () {\r\n if (!self.reader.music) return\r\n if (self.reader.music._loop) return\r\n if (pageNumber != self.reader.pageSelected) {\r\n self.reader.music.unload()\r\n }\r\n },\r\n onend: function () {\r\n if (!self.reader.music) return\r\n if (!self.reader.music._loop) {\r\n self.reader.music = null\r\n }\r\n if (pageNumber == self.reader.pageSelected) {\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n typeof callback === 'function' && callback()\r\n }\r\n }\r\n })\r\n }, 1500))\r\n }\r\n },\r\n\r\n changeImageBlock: function (self, block, callback) {\r\n\r\n let o = this.page.getItemById(block[\"obj_id\"])\r\n if (!o) return\r\n\r\n if (block[\"url\"].includes($nuxt.$store.state.imagePrefixPath)){\r\n block[\"url\"] = block[\"url\"]\r\n }else{\r\n block[\"url\"] = $nuxt.$store.state.imagePrefixPath + block[\"url\"]\r\n }\r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n\r\n if (o.src === block[\"url\"] || o.sourcePath === block[\"url\"]) {\r\n typeof callback === 'function' && callback()\r\n return\r\n }\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.changeImage', {\r\n name: this.getObjectBlockName(o)\r\n }))\r\n\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n if (o.type == 'group' || o.type == 'path') {\r\n block[\"url\"] = block[\"url\"].replace('/assets/', '/svgs/')\r\n block[\"url\"] = block[\"url\"] + '?x-request=html'\r\n\r\n o.sourcePath = block[\"url\"]\r\n o.objects = block[\"url\"]\r\n fabric.loadSVGFromURL(block[\"url\"], function (objects, options) {\r\n var obj = fabric.util.groupSVGElements(objects, block[\"url\"])\r\n o._objects = obj._objects\r\n })\r\n self.popObject(self, block)\r\n } else {\r\n o.setSrc(\r\n block[\"url\"],\r\n function () {\r\n self.popObject(self, block)\r\n typeof callback === 'function' && callback()\r\n }, {\r\n crossOrigin: 'Anonymous'\r\n }\r\n )\r\n }\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n },\r\n\r\n arithmeticCalculatorBlock: function (self, block, callback) {\r\n if (block[\"nameA\"] == \"none\" || block[\"nameB\"] == \"none\") {\r\n typeof callback === 'function' && callback()\r\n return\r\n }\r\n\r\n\r\n\r\n try {\r\n // this.reader.global_variables[block[\"nameB\"]]['value'] = String(eval(this.reader.global_variables[block[\"nameA\"]]['value']))\r\n this.reader.$set(this.reader.global_variables, block[\"nameB\"], \r\n {\r\n value: String(eval(this.reader.global_variables[block[\"nameA\"]]['value'])),\r\n type: this.reader.global_variables[block[\"nameB\"]]['type']\r\n }\r\n )\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.calculate', {\r\n operation: this.reader.global_variables[block[\"nameA\"]]['value']\r\n }))\r\n } catch (e) {\r\n // this.reader.global_variables[block[\"nameB\"]]['value'] = 'error'\r\n this.reader.$set(this.reader.global_variables, block[\"nameB\"], \r\n {\r\n value: 'error',\r\n type: this.reader.global_variables[block[\"nameB\"]]['type']\r\n }\r\n )\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.errors.cannotCalculate', {\r\n name: block[\"nameA\"],\r\n operation: this.reader.global_variables[block[\"nameA\"]]['value']\r\n }))\r\n }\r\n this.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n this.updateObjectsTextValue(true, block)\r\n this.reader.timeouts.push(setTimeout(() => {\r\n this.reader.timeouts.pop()\r\n callback()\r\n }, 600))\r\n },\r\n\r\n textObjectEqualsVariableBlock: function (self, block, callback) {\r\n let obj = this.page.getItemById(block[\"obj_id\"])\r\n if (!obj) return\r\n this.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.textObjEqualsVariable', {\r\n variable: block[\"nameA\"],\r\n value: this.reader.global_variables[block[\"nameA\"]]['value']\r\n }))\r\n\r\n this.newTransformStringValue(obj, '{{' + block[\"nameA\"] + '}}', obj.getSelectionStyles(0, obj.text.length, true))\r\n obj._originalProperties.text = obj.text\r\n\r\n const eventBlock = this.getBlock(block[\"eventCode\"])\r\n let pop = true\r\n if (eventBlock['cssClass'] == \"onPageStartBlock\") pop = false\r\n if (pop) {\r\n this.popObject(this, block)\r\n } else if (this.reader.animatedObjects.length == 0) {\r\n this.page.requestRenderAll()\r\n }\r\n\r\n this.testCollision(this, block, obj)\r\n\r\n this.reader.timeouts.push(setTimeout(() => {\r\n this.reader.timeouts.pop()\r\n callback()\r\n }, 600))\r\n\r\n },\r\n\r\n textObjectEqualsValueBlock: function (self, block, callback) {\r\n let obj = this.page.getItemById(block[\"obj_id\"])\r\n if (!obj) return\r\n this.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.textObjEqualsValue', {\r\n value: block[\"nameA\"]\r\n }))\r\n\r\n // obj.text = this.transformStringValue(options.text)\r\n this.newTransformStringValue(obj, block[\"nameA\"], obj.getSelectionStyles(0, obj.text.length, true))\r\n obj._originalProperties.text = obj.text\r\n\r\n let pop = true\r\n if (eventBlock['cssClass'] == \"onPageStartBlock\") pop = false\r\n\r\n if (pop) {\r\n this.popObject(this, block)\r\n } else if (this.reader.animatedObjects.length == 0) {\r\n this.page.requestRenderAll()\r\n }\r\n\r\n this.testCollision(this, block, obj)\r\n\r\n this.reader.timeouts.push(setTimeout(() => {\r\n this.reader.timeouts.pop()\r\n callback()\r\n }, 600))\r\n },\r\n\r\n newTransformStringValue(obj, original_text, original_style) {\r\n let isVariable = false\r\n // reset to original styles and value\r\n obj.removeChars(0, obj.text.length)\r\n\r\n do {\r\n original_style = original_style.concat(original_style)\r\n } while (original_text.length > original_style.length);\r\n //make sure original styles is same length as inserted varValue\r\n if (original_text.length <= original_style.length) {\r\n original_style.length = original_text.length\r\n }\r\n\r\n\r\n obj.insertChars(original_text, original_style, 0)\r\n\r\n // get substring between the 2 mustaches\r\n const start = original_text.indexOf('{{'),\r\n end = original_text.indexOf('}}')\r\n\r\n\r\n if (start == -1 || end == -1 || start >= end) return\r\n const substring = original_text.substring(start + 2, end).trim()\r\n const substring_start = original_text.indexOf(substring, start)\r\n // remove empty space and bracket {{\r\n obj.removeChars(start, substring_start)\r\n // remove empty space and }}\r\n obj.removeChars(obj.text.indexOf(substring, start) + substring.length, obj.text.indexOf('}}') + 2)\r\n\r\n // lookup if substring is a variable\r\n for (var varName in this.reader.global_variables) {\r\n if (varName != substring) continue\r\n isVariable = true\r\n break\r\n }\r\n\r\n let varValue = substring\r\n if (isVariable) {\r\n varValue = this.getVariableValue(substring)\r\n // check if value is a variable (variableEqualsVariableBlock)\r\n }\r\n const styles_start = obj.text.indexOf(substring, start)\r\n // get styles\r\n let original_styles = obj.getSelectionStyles(styles_start, styles_start + substring.length, true)\r\n // remove substring\r\n obj.removeChars(styles_start, styles_start + substring.length)\r\n\r\n do {\r\n original_styles = original_styles.concat(original_styles)\r\n } while (varValue.length > original_styles.length);\r\n //make sure original styles is same length as inserted varValue\r\n if (varValue.length <= original_styles.length) {\r\n original_styles.length = varValue.length\r\n }\r\n // insert variable value\r\n obj.insertChars(varValue, original_styles, styles_start)\r\n // call itself again for next {{ variable }}\r\n this.newTransformStringValue(obj, obj.text, obj.getSelectionStyles(0, obj.text.length, true))\r\n },\r\n\r\n isValueAVariableField: function (original_value) {\r\n\r\n if (typeof original_value == 'number') {\r\n return { value: original_value }\r\n }\r\n\r\n const start = original_value.indexOf('{{'),\r\n end = original_value.indexOf('}}')\r\n\r\n if (start >= end) return { isVar: false, value: original_value }\r\n\r\n let substring = original_value\r\n\r\n if (start !== -1 || end !== -1) substring = original_value.substring(start + 2, end).trim()\r\n\r\n // lookup if substring is a variable\r\n for (var varName in this.reader.global_variables) {\r\n if (varName === substring) return { varName: substring, value: this.getVariableValue(substring)}\r\n }\r\n return { value: original_value }\r\n\r\n },\r\n\r\n getVariableValue: function (varName) {\r\n return String(this.reader.global_variables[varName]['value'])\r\n },\r\n\r\n transformStringValue: function (value, type ) {\r\n let isVariable = false\r\n let varType = null\r\n\r\n // get substring betwween the 2 mustaches\r\n const start = value.indexOf('{{'),\r\n end = value.indexOf('}}')\r\n\r\n if (start > -1 && end > -1 && start < end) {\r\n\r\n let substring = value.substring(start + 2, end).trim()\r\n\r\n for (var varName in this.reader.global_variables) {\r\n if (varName != substring) continue\r\n isVariable = true\r\n break\r\n }\r\n\r\n if (!isVariable) {\r\n\r\n value =\r\n value.substring(0, start) +\r\n substring +\r\n value.substring(end + 2, value.length)\r\n } else {\r\n\r\n value =\r\n value.substring(0, start) +\r\n this.reader.global_variables[substring].value.toString() +\r\n value.substring(end + 2, value.length)\r\n }\r\n return this.transformStringValue(value, 'Number')\r\n }\r\n\r\n if (varType == 'Number' || type == 'Number') {\r\n if (/^-?\\d+$/.test(value)) {\r\n return parseInt(value)\r\n }\r\n }\r\n return value\r\n },\r\n\r\n lockSwipeRightBlock: function (self, block, callback) {\r\n this.page.lockSwipeRight = true\r\n\r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n // this.checkIfEventCodeIsCompleted(block)\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.lockNextPage'))\r\n\r\n this.reader.timeouts.push(setTimeout(() => {\r\n this.reader.timeouts.pop()\r\n callback()\r\n }, 600))\r\n },\r\n\r\n lockSwipeLeftBlock: function (self, block, callback) {\r\n this.page.lockSwipeLeft = true\r\n\r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n // this.checkIfEventCodeIsCompleted(block)\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.lockPreviousPage'))\r\n\r\n this.reader.timeouts.push(setTimeout(() => {\r\n this.reader.timeouts.pop()\r\n callback()\r\n }, 600))\r\n },\r\n\r\n updateObjectsTextValue: function (variableHasChanged, block) {\r\n\r\n if (this.reader === undefined) return\r\n\r\n let objects = this.page.getObjects()\r\n if (block) {\r\n block.dontPopActiveStack = false\r\n }\r\n\r\n for (var i = 0, l = objects.length; i < l; i++) {\r\n if (\r\n objects[i].type === 'textbox' ||\r\n objects[i].type === 'Textbutton' ||\r\n objects[i].type === 'speechbubble'\r\n ) {\r\n var oldText = objects[i].text\r\n this.newTransformStringValue(objects[i], objects[i]._originalProperties.text, objects[i]._originalProperties.style)\r\n\r\n if (variableHasChanged && oldText != objects[i].text && block[\"pop\"]) {\r\n block[\"obj_id\"] = objects[i].id\r\n this.popObject(this, block)\r\n block['dontPopActiveStack'] = true\r\n }\r\n }\r\n }\r\n if (this.reader.animatedObjects.length == 0) {\r\n this.page.requestRenderAll()\r\n }\r\n\r\n if (!block) return\r\n // this.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n this.checkIfEventCodeIsCompleted(block)\r\n },\r\n\r\n flipObjectBlock: function (self, block, callback) {\r\n // this.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n var o = this.page.getItemById(block[\"obj_id\"])\r\n\r\n if (!o) {\r\n typeof callback === 'function' && callback() \r\n return\r\n }\r\n\r\n o[block[\"flip\"]] = !o[block[\"flip\"]]\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.flip', {\r\n name: this.getObjectBlockName(o)\r\n }))\r\n\r\n if (this.reader.animatedObjects.length == 0) {\r\n this.page.requestRenderAll()\r\n }\r\n\r\n this.reader.timeouts.push(setTimeout(() => {\r\n this.reader.timeouts.pop()\r\n callback()\r\n }, 600))\r\n },\r\n\r\n setObjectPositionBlock: function (self, block, callback) {\r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter \r\n \r\n\r\n var o = this.page.getItemById(block[\"obj_id\"])\r\n if (!o) {\r\n typeof callback === 'function' && callback() \r\n return\r\n }\r\n\r\n this.reader.eventStatus[block[\"eventCode\"]].activeStack.push(true)\r\n\r\n let pageScale = self.reader.pageScales[self.reader.pageSelected]\r\n\r\n var testX = this.isValueAVariableField(block[\"xCoord\"])\r\n if (!this.isNumber(testX)) return\r\n var testY = this.isValueAVariableField(block[\"yCoord\"])\r\n if (!this.isNumber(testY)) return\r\n\r\n o.left = Number(testX.value) * pageScale\r\n o.top = Number(testY.value) * pageScale\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.setObjectPosition', {\r\n name: this.getObjectBlockName(o),\r\n x: Number(testX.value),\r\n y: Number(testY.value)\r\n }))\r\n\r\n if (this.reader.animatedObjects.length == 0) {\r\n this.page.requestRenderAll()\r\n }\r\n \r\n this.testCollision(this, block, o)\r\n \r\n this.reader.timeouts.push(setTimeout(() => {\r\n self.reader.eventStatus[block[\"eventCode\"]].activeStack.pop()\r\n this.reader.timeouts.pop()\r\n callback()\r\n }, 600))\r\n\r\n },\r\n\r\n setDraggableBlock: function (self, block, callback) {\r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n\r\n var o = this.page.getItemById(block[\"obj_id\"])\r\n if (!o) {\r\n typeof callback === 'function' && callback() \r\n return\r\n }\r\n \r\n let drag = false\r\n if (block[\"drag\"] == \"true\") drag = true\r\n\r\n o.lockMovementX = !drag\r\n o.lockMovementY = !drag\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.setDraggable', {\r\n name: this.getObjectBlockName(o)\r\n }))\r\n\r\n if (this.reader.animatedObjects.length == 0) {\r\n this.page.requestRenderAll()\r\n }\r\n\r\n this.reader.timeouts.push(setTimeout(() => {\r\n this.reader.timeouts.pop()\r\n callback()\r\n }, 600))\r\n\r\n },\r\n\r\n restoreObjectBlock: function (self, block, callback, o) {\r\n \r\n block[\"currentIteration\"] = this.reader.eventStatus[block[\"eventCode\"]].counter\r\n if (!o) {\r\n o = this.page.getItemById(block[\"obj_id\"])\r\n }\r\n\r\n if (o && o._originalProperties) {\r\n \r\n if (o.bounce || o.isScaling || o.isRotating || o.moveX || o.moveY || o.fade) {\r\n o.abortAnimation = true\r\n setTimeout(() => {\r\n this.restoreObjectBlock(self, block, callback, o) \r\n }, 100);\r\n return\r\n } else if (o.abortAnimation) {\r\n return\r\n }\r\n \r\n o.left = o._originalProperties.left * self.reader.pageScales[self.reader.pageSelected]\r\n o.top = o._originalProperties.top * self.reader.pageScales[self.reader.pageSelected]\r\n o.scaleX = o._originalProperties.scaleX * self.reader.pageScales[self.reader.pageSelected]\r\n o.scaleY = o._originalProperties.scaleY * self.reader.pageScales[self.reader.pageSelected]\r\n o.flipX = o._originalProperties.flipX\r\n o.flipY = o._originalProperties.flipY\r\n o.lockMovementX = o._originalProperties.lockMovementX\r\n o.lockMovementY = o._originalProperties.lockMovementY\r\n o.opacity = o._originalProperties.opacity\r\n\r\n this.appendLogMsg(this.reader.$t('reader.inspect.restoreObj', {\r\n name: this.getObjectBlockName(o)\r\n }))\r\n\r\n if (\r\n o.type === 'textbox' ||\r\n o.type === 'Textbutton' ||\r\n o.type === 'speechbubble' ||\r\n o.type === 'textfield'\r\n ) {\r\n o.removeChars(0, o.text.length)\r\n o.insertChars(o._originalProperties['text'], o._originalProperties['style'], 0)\r\n }\r\n // }\r\n\r\n o.setCoords()\r\n\r\n if (this.reader.animatedObjects.length == 0) {\r\n this.page.requestRenderAll()\r\n }\r\n this.testCollision(this, block, o)\r\n }\r\n\r\n this.reader.timeouts.push(setTimeout(() => {\r\n this.reader.timeouts.pop()\r\n callback()\r\n }, 600))\r\n\r\n },\r\n\r\n btnHandler: function (self, btn) {\r\n\r\n var tinycolor = require('tinycolor2')\r\n\r\n btn.on('mouseover', function() {\r\n // btn.set('btnBgColor', btn.btnBgColorActive)\r\n btn._originalProperties.btnBgColor = btn.btnBgColor\r\n btn.isHovered = true\r\n if (btn.isActive == true) return\r\n\r\n btn.set('btnBgColor', tinycolor(btn.btnBgColor).lighten(5).toString()) \r\n if (self.reader.animatedObjects.length > 0) return\r\n self.page.requestRenderAll()\r\n })\r\n\r\n btn.on('mouseout', function() {\r\n btn.set('btnBgColor', btn._originalProperties.btnBgColor)\r\n btn.isHovered = false\r\n if (self.reader.animatedObjects.length > 0) return\r\n self.page.requestRenderAll()\r\n })\r\n\r\n btn.on('mousedown', function() {\r\n btn.isActive = true\r\n btn.set('btnBgColor', tinycolor(btn._originalProperties.btnBgColor).darken(5).toString())\r\n if (self.reader.animatedObjects.length > 0) return\r\n self.page.requestRenderAll()\r\n })\r\n\r\n btn.on('mouseup', function() {\r\n btn.isActive = false\r\n if (btn.isHovered == true) {\r\n btn.set('btnBgColor', tinycolor(btn._originalProperties.btnBgColor).lighten(5).toString())\r\n } else {\r\n btn.set('btnBgColor', btn._originalProperties.btnBgColor)\r\n }\r\n \r\n if (self.reader.animatedObjects.length > 0) return\r\n self.page.requestRenderAll()\r\n })\r\n },\r\n\r\n parseBoolStr: function(str) {\r\n var expressions = {};\r\n var expressionRegex = new RegExp(\"\\\\((?:(?:!*true)|(?:!*false)|(?:&&)|(?:\\\\|\\\\|)|\\\\s|(?:!*\\\\w+))+\\\\)\");\r\n var expressionIndex = 0;\r\n \r\n if (typeof str == 'string') {\r\n str = str.trim();\r\n }\r\n\r\n while (str.match(expressionRegex)) {\r\n var match = str.match(expressionRegex)[0];\r\n var expression = 'boolExpr' + expressionIndex;\r\n str = str.replace(match, expression);\r\n match = match.replace('(', '').replace(')', '');\r\n expressions[expression] = match;\r\n expressionIndex++;\r\n }\r\n return this.evalBoolStr(str, expressions);\r\n },\r\n\r\n evalBoolStr: function(str, expressions) {\r\n\r\n var conditions = str.split(' ');\r\n if (conditions.length > 0) {\r\n var validity = this.toBoolean(conditions[0], expressions);\r\n for (var i = 1; i + 1 < conditions.length; i += 2) {\r\n var comparer = conditions[i];\r\n var value = this.toBoolean(conditions[i + 1], expressions);\r\n switch (comparer) {\r\n case '&&':\r\n validity = validity && value;\r\n break;\r\n case '||':\r\n validity = validity || value;\r\n break;\r\n }\r\n }\r\n return validity;\r\n }\r\n return 'Invalid input';\r\n },\r\n\r\n toBoolean: function(str, expressions) {\r\n\r\n var inversed = 0;\r\n while (str.indexOf('!') === 0) {\r\n str = str.replace('!', '');\r\n inversed++;\r\n }\r\n var validity;\r\n if (str.indexOf('boolExpr') === 0) {\r\n validity = this.evalBoolStr(expressions[str], expressions);\r\n } else if (str == 'true' || str == 'false' || str == 'undefined') {\r\n validity = str == 'true';\r\n } else if (window[str]){\r\n validity = window[str]();\r\n }\r\n for (var i = 0; i < inversed; i++) {\r\n validity = !validity;\r\n }\r\n return validity;\r\n },\r\n\r\n initCode: function(blocks) {\r\n\r\n if (this.reader === undefined) return\r\n\r\n this.blocks = JSON.parse(JSON.stringify(blocks))\r\n\r\n // first get init setup code (e.g play text effect. needs to hide the text object on page start)\r\n for (var i = 0; i < blocks.length; i++) {\r\n\r\n if (!this.eventBlocks.includes(blocks[i]['cssClass'])) continue\r\n\r\n this.generateInitCode(blocks[i])\r\n\r\n }\r\n },\r\n\r\n generateCode: function (blocks) {\r\n // then execute regular script\r\n for (var i = 0; i < blocks.length; i++) {\r\n if (this.eventBlocks.includes(blocks[i]['cssClass'])) {\r\n\r\n if (blocks[i]['loop'] == undefined){\r\n blocks[i]['loop'] = 1\r\n }\r\n\r\n this.initEventStatus(blocks[i]['id'], parseInt(blocks[i]['loop']))\r\n \r\n this[blocks[i]['cssClass']](\r\n this,\r\n blocks[i],\r\n this.getBlockConnections(blocks[i]['id'])\r\n )\r\n }\r\n }\r\n },\r\n\r\n generateInitCode: function(block) {\r\n // console.log('generateInitCode', block)\r\n // get event block conn\r\n var conn = this.getBlockConnections(block['id'])\r\n for (var i = 0; i < conn.length; i++) {\r\n\r\n if (conn[i]['target']['node'] == block['id']) continue\r\n\r\n var nextBlock = this.getBlock(conn[i]['target']['node'])\r\n if (\r\n (nextBlock['cssClass'] == 'fadeBlock' && nextBlock['effect'] == \"fade in\") ||\r\n nextBlock['cssClass'] == 'textEffectBlock'\r\n ) {\r\n \r\n var nextConn = this.getBlockConnections(conn[i]['target']['node'])\r\n for (let l = 0; l < nextConn.length; l++) {\r\n // look up for connection to object object\r\n if (nextConn[l][\"target\"][\"port\"] != \"objectPort\") continue\r\n\r\n var layout_obj = this.page.getItemById(nextConn[l][\"source\"][\"port\"])\r\n\r\n if (layout_obj == null) continue\r\n layout_obj.opacity = 0\r\n layout_obj.visible = false\r\n }\r\n }\r\n // go to next function block\r\n this.generateInitCode(nextBlock)\r\n }\r\n },\r\n\r\n getBlock: function (id) {\r\n let block = null\r\n for (let i = 0; i < this.blocks.length; i++) {\r\n if (this.blocks[i]['id'] != id) continue\r\n block = this.blocks[i]\r\n break\r\n }\r\n return block\r\n },\r\n\r\n getBlockConnections: function (id) {\r\n let connections = []\r\n for (var i = 0; i < this.blocks.length; i++) {\r\n if (this.blocks[i]['cssClass'] != 'draw2d_Connection') continue\r\n if (this.blocks[i]['target']['node'] == id || this.blocks[i]['source']['node'] == id) {\r\n connections.push(this.blocks[i])\r\n }\r\n }\r\n return connections\r\n },\r\n\r\n getBlockOutputConnections: function(id) {\r\n let connections = []\r\n for (var i = 0; i < this.blocks.length; i++) {\r\n if (this.blocks[i]['cssClass'] != 'draw2d_Connection') continue\r\n if (this.blocks[i]['source']['node'] == id) {\r\n connections.push(this.blocks[i])\r\n }\r\n }\r\n return connections\r\n },\r\n\r\n checkLogicGatePorts: function (id, conn) {\r\n let portCounter = 0\r\n for (let i = 0; i < conn.length; i++) {\r\n if (conn[i][\"target\"][\"node\"] != id) continue\r\n portCounter += 1\r\n }\r\n \r\n if (portCounter > 0) return true\r\n\r\n return false \r\n },\r\n\r\n getLogicGateChildren: function(id, conn) {\r\n let children = []\r\n for (let i = 0; i < conn.length; i++) {\r\n if (conn[i][\"target\"][\"node\"] != id) continue\r\n\r\n var child = {\r\n block: this.getBlock(conn[i][\"source\"][\"node\"]),\r\n conn: conn[i]\r\n }\r\n\r\n if (child) children.push(child)\r\n }\r\n return children\r\n },\r\n\r\n isNumber: function (text, canNegative) {\r\n\r\n var value = typeof text == 'object' ? text.value : text\r\n var varName = typeof text == 'object' ? text.varName : null\r\n \r\n if (typeof value == 'string' && value.includes('\\u25be')) {\r\n var index = value.indexOf('\\u25be')\r\n value = value.substring(0, index - 1)\r\n }\r\n\r\n const valueIsNumber = \r\n (/^\\d+$/.test(value) ||\r\n /^-\\d+$/.test(value) ||\r\n this.isInt(parseInt(value)) ||\r\n this.isFloat(parseFloat(value))\r\n ) && !isNaN(value)\r\n \r\n if (!valueIsNumber) {\r\n this.appendLogMsg(\r\n this.reader.$t('reader.inspect.errors.valueIsNotNumber', {\r\n name: varName\r\n }),\r\n null,\r\n null,\r\n null,\r\n true\r\n )\r\n return false\r\n }\r\n\r\n \r\n\r\n if (value < 0) {\r\n if (!canNegative) {\r\n this.appendLogMsg(\r\n this.reader.$t('reader.inspect.errors.valueCannotBeNegativeNumber', {\r\n name: varName\r\n }),\r\n null,\r\n null,\r\n null,\r\n true\r\n )\r\n return false\r\n }\r\n }\r\n\r\n\r\n // if (canNegative) {\r\n // if (\r\n // isnum ||\r\n // isNegativeNum ||\r\n // this.isInt(parseInt(value)) ||\r\n // this.isFloat(parseFloat(value))\r\n // ) {\r\n // if (!isNaN(value)) {\r\n // // testNumber = true\r\n // valueIsNotNumber = true\r\n // }\r\n // }\r\n // } else if (\r\n // (this.isInt(parseInt(value)) || this.isFloat(parseFloat(value))) &&\r\n // value >= 0\r\n // ) {\r\n // // testNumber = true\r\n // valueIsNegative = true\r\n // }\r\n\r\n // if (!isnum || !testNumber) {\r\n // // display error log in inspector\r\n // if (canNegative)\r\n\r\n // return false\r\n // }\r\n return true\r\n },\r\n \r\n isInt: function (n) {\r\n return Number(n) === n && n % 1 === 0\r\n },\r\n\r\n isFloat: function (n) {\r\n return Number(n) === n && n % 1 !== 0\r\n },\r\n\r\n generateConditionCode: function(id, term1, term2) {\r\n\r\n if (term1 == undefined) term1 = ''\r\n if (term2 == undefined) term2 = ''\r\n let result = \"false\"\r\n let logicConnections = this.getBlockConnections(id)\r\n let block = this.getBlock(id)\r\n\r\n if (block == null) return result\r\n\r\n if (block['cssClass'] == \"ANDGateBlock\" || block['cssClass'] == \"ORGateBlock\") {\r\n if (this.checkLogicGatePorts(id, logicConnections)) {\r\n const children = this.getLogicGateChildren(id, logicConnections)\r\n // test 1st child\r\n if (children[0][\"block\"][\"cssClass\"] == \"variableBlock\") {\r\n \r\n this.highlightBlock({\r\n block: children[0][\"block\"],\r\n hasTimeout: true,\r\n color: \"#ffeb3b\"\r\n })\r\n\r\n if (this.reader.global_variables[children[0][\"block\"][\"name\"]] == undefined) {\r\n term1 = \"false\"\r\n } else {\r\n term1 = this.reader.global_variables[children[0][\"block\"][\"name\"]][\"value\"].toString()\r\n // highlight connection\r\n\r\n if (term1 == \"true\") {\r\n this.highlightConnection({\r\n conn: children[0][\"conn\"],\r\n hasTimeout: true,\r\n })\r\n }\r\n }\r\n } else if (children[0][\"block\"][\"cssClass\"] == \"ANDGateBlock\" || children[0][\"block\"][\"cssClass\"] == \"ORGateBlock\") {\r\n term1 = this.generateConditionCode(children[0][\"block\"][\"id\"], term1, term2)\r\n } \r\n \r\n if (children.length > 1) {\r\n // test 2nd child\r\n if (children[1][\"block\"][\"cssClass\"] == \"variableBlock\") {\r\n\r\n this.highlightBlock({\r\n block: children[1][\"block\"],\r\n hasTimeout: true,\r\n color: \"#ffeb3b\"\r\n })\r\n \r\n if (this.reader.global_variables[children[1][\"block\"][\"name\"]] == undefined) {\r\n term2 = \"false\"\r\n } else {\r\n term2 = this.reader.global_variables[children[1][\"block\"][\"name\"]][\"value\"].toString()\r\n \r\n if (term2 == \"true\") {\r\n this.highlightConnection({\r\n conn: children[1][\"conn\"],\r\n hasTimeout: true\r\n })\r\n }\r\n }\r\n } else if (children[1][\"block\"][\"cssClass\"] == \"ANDGateBlock\" || children[1][\"block\"][\"cssClass\"] == \"ORGateBlock\") {\r\n term2 = this.generateConditionCode(children[1][\"block\"][\"id\"], term1, term2)\r\n }\r\n } else {\r\n term2 = \"false\"\r\n }\r\n \r\n\r\n if (block[\"cssClass\"] == \"ANDGateBlock\") {\r\n\r\n if ($nuxt.$store.state.inspectMode && this.parseBoolStr(term1) == true && this.parseBoolStr(term2) == true) {\r\n\r\n for (let i = 0; i < logicConnections.length; i++) {\r\n if (logicConnections[i][\"source\"][\"node\"] != block[\"id\"]) continue\r\n\r\n this.highlightConnection({\r\n conn: logicConnections[i],\r\n hasTimeout: true\r\n })\r\n }\r\n\r\n this.highlightBlock({\r\n block: block,\r\n hasTimeout: true,\r\n color: \"#ffeb3b\"\r\n })\r\n }\r\n\r\n result = term1 + \" && \" + term2\r\n } else {\r\n\r\n if ($nuxt.$store.state.inspectMode && (this.parseBoolStr(term1) == true || this.parseBoolStr(term2) == true)) {\r\n\r\n for (let i = 0; i < logicConnections.length; i++) {\r\n if (logicConnections[i][\"source\"][\"node\"] != block[\"id\"]) continue\r\n\r\n this.highlightConnection({\r\n conn: logicConnections[i],\r\n hasTimeout: true\r\n })\r\n }\r\n\r\n this.highlightBlock({\r\n block: block,\r\n hasTimeout: true,\r\n color: \"#ffeb3b\"\r\n })\r\n }\r\n\r\n result = term1 + \" || \" + term2\r\n } \r\n }\r\n } else if (block[\"cssClass\"] == \"variableBlock\") {\r\n if (this.reader.global_variables[block[\"name\"]] == undefined) {\r\n result = \"false\"\r\n } else {\r\n result = this.reader.global_variables[block[\"name\"]][\"value\"].toString()\r\n\r\n this.highlightBlock({\r\n block: block,\r\n hasTimeout: true,\r\n color: \"#ffeb3b\"\r\n })\r\n\r\n if (result == \"true\") {\r\n \r\n for (let i = 0; i < logicConnections.length; i++) {\r\n if (logicConnections[i]['source']['node'] != block[\"id\"]) continue\r\n\r\n this.highlightConnection({\r\n conn: logicConnections[i],\r\n hasTimeout: true\r\n })\r\n }\r\n }\r\n }\r\n }\r\n return result\r\n },\r\n\r\n onPageStartBlock: function (self, block, conn) {\r\n // console.log('onPageStartBlock', block)\r\n // loop through block connections\r\n // search uniquely for conditionLogicPort first\r\n let condition = 'true'\r\n let hasOutputFlowConn = false\r\n for (let i = 0; i < conn.length; i++) {\r\n if (conn[i][\"target\"][\"port\"] == \"conditionLogicPort\") {\r\n condition = this.generateConditionCode(conn[i][\"source\"][\"node\"]) \r\n }\r\n\r\n if (conn[i][\"source\"][\"node\"] == block[\"id\"]) {\r\n hasOutputFlowConn = true\r\n }\r\n }\r\n // test if event block has output connections\r\n if (hasOutputFlowConn == false) return\r\n // // test if condition is true or false\r\n // // if false, return and do nothing\r\n if (this.parseBoolStr(condition) == false) return\r\n // // init event status\r\n\r\n var delay = this.isValueAVariableField(block[\"delay\"])\r\n\r\n if (!this.isNumber(delay, false)) return\r\n\r\n if (block['loop'] == undefined) block['loop'] = 1\r\n\r\n if (Number(delay.value) > 0) {\r\n \r\n this.reader.timeouts.push(\r\n setTimeout(() => {\r\n // highlight Event block\r\n this.highlightBlock({\r\n block: block\r\n })\r\n \r\n this.reader.timeouts.pop()\r\n this.executeOnEventCode(block, conn, null, true)\r\n }, parseFloat(delay.value) * 1000)\r\n )\r\n return\r\n }\r\n\r\n // highlight Event block\r\n this.highlightBlock({\r\n block: block\r\n })\r\n this.executeOnEventCode(block, conn, null, true)\r\n\r\n },\r\n\r\n // onTouchBlock: function (self, block, conn) {\r\n // // loop through block connections\r\n // // search uniquely for conditionLogicPort first\r\n // let condition = 'true', hasOutputFlowConn = false\r\n // for (let l = 0; l < conn.length; l++) {\r\n\r\n // if (conn[l][\"target\"][\"port\"] == \"conditionLogicPort\") {\r\n // condition = this.generateConditionCode(conn[l][\"source\"][\"node\"]) \r\n // }\r\n\r\n // if (conn[l][\"source\"][\"node\"] == block[\"id\"]) {\r\n // hasOutputFlowConn = true\r\n // }\r\n // }\r\n\r\n // // test if event block has output connections\r\n // if (hasOutputFlowConn == false) return\r\n \r\n // for (let i = 0; i < conn.length; i++) { \r\n\r\n // if (conn[i][\"target\"][\"port\"] != \"objectPort\") continue\r\n\r\n // var layout_obj = this.page.getItemById(conn[i][\"source\"][\"port\"])\r\n\r\n // if (layout_obj == null) return\r\n // // make object glow\r\n // this.glowObject(this, layout_obj, condition, block['id'])\r\n \r\n // layout_obj.on('mouseup', function () {\r\n // self.reader.disableObjectIsTouched()\r\n // })\r\n \r\n // // add mouse up listerner to trigger the event\r\n // layout_obj.on('mousedown', function () {\r\n\r\n // self.reader.enableObjectIsTouched()\r\n\r\n // conn[i]['name'] = layout_obj['name']\r\n\r\n // const isExecuting = self.executeOnEventCode(block, conn, conn[i], true)\r\n\r\n // if (isExecuting == false) return\r\n\r\n // // check if layout_obj is already evented\r\n // if (block[\"once\"] == true) {\r\n // layout_obj.evented = false\r\n // // look for other objects linked to the same event to disable them as well\r\n // for (let n = 0; n < conn.length; n++) { \r\n\r\n // if (conn[n][\"target\"][\"port\"] != \"objectPort\") continue\r\n\r\n // var other_layout_obj = self.page.getItemById(conn[n][\"source\"][\"port\"])\r\n\r\n // if (other_layout_obj == null) continue\r\n\r\n // other_layout_obj.evented = false\r\n // }\r\n // }\r\n // })\r\n // }\r\n // },\r\n\r\n onPronounceBlock: function (self, block, conn) {\r\n // loop through block connections\r\n // search uniquely for conditionLogicPort first\r\n let condition = 'true'\r\n let hasOutputFlowConn = false\r\n for (let i = 0; i < conn.length; i++) {\r\n if (conn[i][\"target\"][\"port\"] == \"conditionLogicPort\") {\r\n condition = this.generateConditionCode(conn[i][\"source\"][\"node\"]) \r\n }\r\n\r\n if (conn[i][\"source\"][\"node\"] == block[\"id\"]) {\r\n hasOutputFlowConn = true\r\n }\r\n }\r\n // test if event block has output connections\r\n if (hasOutputFlowConn == false) return\r\n // // test if condition is true or false\r\n // // if false, return and do nothing\r\n if (this.parseBoolStr(condition) == false) return\r\n // // init event status\r\n if (block['loop'] == undefined) block['loop'] = 1\r\n\r\n\r\n let word = this.transformStringValue(block[\"word\"])\r\n block.array_words = word.toLowerCase().split(\" \")\r\n\r\n // block.array_words = word.value.toLowerCase().split(\" \")\r\n // store block with string to recognize\r\n // this.SpeechTargetsList.push({\r\n // block: block,\r\n // conn: conn\r\n // })\r\n\r\n this.reader.initSpeechRecognition(this.reader, block, conn)\r\n this.reader.isRecording = true\r\n // if (Object.keys(this.reader.SpeechRecognition).length !== 0) return\r\n \r\n // let SpeechRecognition = SpeechRecognition || window.webkitSpeechRecognition\r\n // let SpeechRecognitionEvent = SpeechRecognitionEvent || window.webkitSpeechRecognitionEvent\r\n \r\n // this.reader.SpeechRecognition = new SpeechRecognition();\r\n\r\n // this.reader.SpeechRecognition.continuous = true;\r\n // this.reader.SpeechRecognition.lang = $nuxt.$store.state.StudioProps.languages[block.lang]\r\n // this.reader.SpeechRecognition.interimResults = false;\r\n // this.reader.SpeechRecognition.maxAlternatives = 1;\r\n\r\n // this.reader.SpeechRecognition.start();\r\n\r\n // this.reader.SpeechRecognition.onend = function(event) {\r\n \r\n // if (self.reader.not_transition && self.reader.pageSelected != null) {\r\n // // console.log('onend')\r\n // self.reader.SpeechRecognition.start();\r\n // }\r\n // }\r\n \r\n // this.reader.SpeechRecognition.onresult = function(event) {\r\n // var res = event.results[event.results.length - 1][0].transcript.toLowerCase();\r\n // self.searchForSpeechMatch(res.split(\" \"))\r\n // }\r\n },\r\n\r\n searchForSpeechMatch: function(self, res) {\r\n \r\n let full_match = false\r\n let colored = res.split(\" \").map(x => {\r\n return {\r\n word: x,\r\n match: null\r\n }\r\n })\r\n\r\n const array_res = res.toLowerCase().split(\" \")\r\n let post_log = false\r\n let indexes_to_delete = []\r\n\r\n this.reader.speechTargetsList.forEach(function(e, index) {\r\n\r\n if (e.block.word == undefined) return\r\n\r\n let match_counter = 0\r\n let target_index = 0\r\n let v = false\r\n let event_triggered = false\r\n \r\n for (var i = 0; i < array_res.length; i++) {\r\n \r\n if (e.block.array_words.includes(array_res[i])) {\r\n // turning word yellow\r\n colored[i].match = false\r\n }\r\n \r\n for (var l = target_index; l < e.block.array_words.length; l++) {\r\n \r\n if (e.block.array_words[l] !== array_res[i]) {\r\n match_counter = 0\r\n full_match = false\r\n \r\n } else {\r\n v =true\r\n // colored[i].match = false\r\n match_counter++\r\n }\r\n\r\n if (match_counter == e.block.array_words.length) {\r\n full_match = true\r\n post_log = true\r\n\r\n // turning words green\r\n for (var m = 0; m < match_counter; m++) {\r\n colored[i - m].match = true\r\n }\r\n\r\n if (event_triggered == false) {\r\n\r\n event_triggered = true\r\n\r\n self.highlightBlock({\r\n block: e.block\r\n })\r\n self.executeOnEventCode(e.block, e.conn, null, true)\r\n if (e.block[\"once\"]) {\r\n indexes_to_delete.push(index)\r\n } \r\n } \r\n match_counter = 0\r\n }\r\n\r\n if (match_counter != 0) {\r\n if (e.block.array_words.length > l + 1) {\r\n target_index = l + 1\r\n }\r\n break\r\n } else {\r\n if (v) {\r\n v = false\r\n l = l - 2\r\n if (l < 0) l = 0\r\n continue\r\n }\r\n target_index = 0\r\n }\r\n }\r\n }\r\n })\r\n\r\n\r\n this.reader.removeFromSpeechTargetsList(indexes_to_delete)\r\n \r\n self.appendLogMsg(colored, false, false, true)\r\n\r\n return colored\r\n },\r\n\r\n onClickBlock: function (self, block, conn) {\r\n // loop through block connections\r\n // search uniquely for conditionLogicPort first\r\n let condition = 'true', hasOutputFlowConn = false\r\n for (let l = 0; l < conn.length; l++) {\r\n\r\n if (conn[l][\"target\"][\"port\"] == \"conditionLogicPort\") {\r\n condition = this.generateConditionCode(conn[l][\"source\"][\"node\"]) \r\n }\r\n\r\n if (conn[l][\"source\"][\"node\"] == block[\"id\"]) {\r\n hasOutputFlowConn = true\r\n }\r\n }\r\n\r\n // test if event block has output connections\r\n if (hasOutputFlowConn == false) return\r\n \r\n for (let i = 0; i < conn.length; i++) { \r\n\r\n if (conn[i][\"target\"][\"port\"] != \"objectPort\") continue\r\n\r\n var layout_obj = this.page.getItemById(conn[i][\"source\"][\"port\"])\r\n\r\n if (layout_obj == null) return\r\n // make object glow\r\n this.glowObject(this, layout_obj, condition, block['id'], block['glow'])\r\n\r\n layout_obj.on('mousedown', function () {\r\n self.reader.enableObjectIsTouched()\r\n \r\n block['triggerObjId'] = layout_obj[\"id\"]\r\n\r\n conn[i]['name'] = layout_obj['name']\r\n\r\n const isExecuting = self.executeOnEventCode(block, conn, conn[i], true)\r\n\r\n if (isExecuting == false) return\r\n\r\n // check if layout_obj is already evented\r\n if (block[\"once\"] == true) {\r\n // console.log('disable click event')\r\n layout_obj.evented = false\r\n // look for other objects linked to the same event to disable them as well\r\n for (let n = 0; n < conn.length; n++) { \r\n\r\n if (conn[n][\"target\"][\"port\"] != \"objectPort\") continue\r\n\r\n var other_layout_obj = self.page.getItemById(conn[n][\"source\"][\"port\"])\r\n\r\n if (other_layout_obj == null) continue\r\n\r\n other_layout_obj.evented = false\r\n }\r\n }\r\n\r\n })\r\n // add mouse up listerner to trigger the event\r\n layout_obj.on('mouseup', function () {\r\n\r\n self.reader.disableObjectIsTouched()\r\n\r\n })\r\n }\r\n },\r\n\r\n onClickOnceBlock: function (self, block, conn) {\r\n this.onClickBlock(self, block, conn)\r\n },\r\n\r\n onCollisionBlock: function(self, block, conn) {\r\n \r\n // let source_object = null\r\n let target_objects = []\r\n let collider_object = null\r\n\r\n for (let i = 0; i < conn.length; i++) { \r\n // get source object\r\n if (conn[i][\"target\"][\"port\"] === \"objectPort\") {\r\n collider_object = this.page.getItemById(conn[i][\"source\"][\"port\"])\r\n break\r\n }\r\n }\r\n\r\n if (collider_object == null) return\r\n\r\n for (let l = 0; l < conn.length; l++) { \r\n // get target object\r\n if (conn[l][\"target\"][\"port\"] === \"targetedObjectPort\") {\r\n // target_objects.push(this.page.getItemById(conn[i][\"source\"][\"port\"]))\r\n var o = this.page.getItemById(conn[l][\"source\"][\"port\"])\r\n\r\n if (!o) continue\r\n \r\n target_objects.push(o)\r\n\r\n if (o.collisionWatch == undefined) {\r\n o.collisionWatch = {}\r\n }\r\n\r\n if (o.collisionWatch[collider_object[\"id\"]] === undefined) {\r\n o.collisionWatch[collider_object[\"id\"]] = {\r\n // collision_is_active: false,\r\n events: {}\r\n }\r\n }\r\n\r\n o.collisionWatch[collider_object[\"id\"]][\"events\"][block[\"id\"]] = {\r\n block: block,\r\n conn: conn,\r\n // objectConn: objectConn\r\n }\r\n }\r\n }\r\n\r\n if (target_objects.length === 0) return\r\n \r\n // store objects in list \r\n this.reader.initCollisionWatch(collider_object.id, {\r\n collision_is_active: false,\r\n targets: target_objects,\r\n threshold: block['threshold']\r\n })\r\n },\r\n\r\n onDragOverBlock: function (self, block, conn) {\r\n // loop through block connections\r\n // search uniquely for conditionLogicPort first\r\n let condition = 'true', hasOutputFlowConn = false\r\n for (let l = 0; l < conn.length; l++) {\r\n\r\n if (conn[l][\"target\"][\"port\"] == \"conditionLogicPort\") {\r\n condition = this.generateConditionCode(conn[l][\"source\"][\"node\"]) \r\n }\r\n\r\n if (conn[l][\"source\"][\"node\"] == block[\"id\"]) {\r\n hasOutputFlowConn = true\r\n }\r\n \r\n }\r\n // test if event block has output connections\r\n if (hasOutputFlowConn == false) return\r\n // set target\r\n let target_object = null\r\n let targetObjConnection = null\r\n for (let m = 0; m < conn.length; m++) {\r\n\r\n if (conn[m][\"target\"][\"port\"] != \"targetedObjectPort\") continue\r\n\r\n targetObjConnection = conn[m]\r\n \r\n target_object = this.page.getItemById(conn[m][\"source\"][\"port\"])\r\n\r\n break\r\n\r\n }\r\n\r\n if (target_object == null) return\r\n\r\n for (let i = 0; i < conn.length; i++) {\r\n\r\n if (conn[i][\"target\"][\"port\"] != \"objectPort\") continue\r\n \r\n var dragged_obj = this.page.getItemById(conn[i][\"source\"][\"port\"])\r\n // make object glow\r\n this.glowObject(this, dragged_obj, condition, block['id'], block['glow'])\r\n\r\n if (dragged_obj == null) return\r\n\r\n dragged_obj.lockMovementX = false\r\n dragged_obj.lockMovementY = false\r\n\r\n dragged_obj.on('moving', function() {\r\n\r\n if(!dragged_obj.intersectsWithObject(target_object, undefined, undefined, block['threshold']) || dragged_obj.dragEventTriggered) return\r\n\r\n conn[i]['name1'] = dragged_obj['name']\r\n conn[i]['name2'] = target_object['name']\r\n\r\n self.appendLogMsg(self.reader.$t('reader.inspect.onDragOver', {\r\n name1: self.getObjectBlockName(dragged_obj),\r\n name2: self.getObjectBlockName(target_object), \r\n }), true)\r\n\r\n const isExecuting = self.executeOnEventCode(block, conn, conn[i], true)\r\n\r\n if (isExecuting == false) return\r\n // check if layout_obj is already evented\r\n if (block[\"once\"] == true) {\r\n // dragged_obj.evented = false\r\n dragged_obj.dragEventTriggered = true\r\n }\r\n // highlight target object block\r\n self.highlightBlock({\r\n block: self.getBlock(targetObjConnection[\"source\"][\"node\"]),\r\n hasTimeout: true,\r\n color: '#9a67ea'\r\n })\r\n // highlight target object connection\r\n self.highlightConnection({\r\n conn: targetObjConnection,\r\n hasTimeout: true\r\n })\r\n });\r\n }\r\n },\r\n\r\n onDragOverOnceBlock: function (self, block, conn) {\r\n block[\"once\"] = true\r\n this.onDragOverBlock(self, block, conn)\r\n },\r\n\r\n onTextInputBlock: function (self, block, conn) {\r\n // loop through block connections\r\n // search uniquely for conditionLogicPort first\r\n let hasOutputFlowConn = false\r\n for (let l = 0; l < conn.length; l++) {\r\n if (conn[l][\"source\"][\"node\"] != block[\"id\"]) continue\r\n hasOutputFlowConn = true\r\n break\r\n }\r\n\r\n // test if event block has output connections\r\n if (hasOutputFlowConn == false) return\r\n var layout_obj = {}\r\n\r\n for (let i = 0; i < conn.length; i++) { \r\n if (conn[i][\"target\"][\"port\"] != \"objectPort\") continue\r\n\r\n layout_obj[i] = this.page.getItemById(conn[i][\"source\"][\"port\"])\r\n \r\n if (layout_obj[i.toString()] == null) return\r\n // add event listerner to trigger the event\r\n layout_obj[i].on('editing:exited', function () { \r\n self.reader.exitTextEditing()\r\n\r\n if(layout_obj[i].inputTriggered || layout_obj[i].showplaceholder) return\r\n conn[i]['name'] = layout_obj[i]['name'] \r\n const isExecuting = self.executeOnEventCode(block, conn, conn[i], true)\r\n\r\n if (isExecuting == false) return\r\n\r\n if (block[\"once\"] == true) {\r\n layout_obj[i].inputTriggered = true\r\n }\r\n })\r\n }\r\n },\r\n\r\n onTextInputOnceBlock: function (self, block, conn) {\r\n block[\"once\"] = true\r\n this.onTextInputBlock(self, block, conn)\r\n },\r\n\r\n generateOnCompleteCode: function(block, conn, eventId) {\r\n // console.log('generateOnCompleteCode', block)\r\n if (this.reader === undefined) return\r\n \r\n for (let i = 0; i < conn.length; i++) {\r\n \r\n if (conn[i][\"source\"][\"node\"] != block[\"id\"]) continue\r\n\r\n var nextBlock = this.getBlock(conn[i][\"target\"][\"node\"])\r\n\r\n\r\n if (nextBlock == null) continue\r\n\r\n if (block[\"pop\"] == true) nextBlock[\"pop\"] = true\r\n\r\n nextBlock[\"depth\"] = block[\"depth\"] + 1\r\n\r\n this.highlightConnection({\r\n conn: conn[i],\r\n hasTimeout: true\r\n })\r\n\r\n this.executeScript(\r\n this,\r\n nextBlock,\r\n this.getBlockConnections(nextBlock[\"id\"]),\r\n eventId\r\n )\r\n }\r\n },\r\n\r\n executeOnEventCode: function(block, conn, objectConn, testCondition) {\r\n // check if this event is already running\r\n // console.log('executeOnEventCode', block)\r\n if (this.checkIfEventIsActive(block[\"id\"])) return false\r\n \r\n if (this.reader === undefined) return false\r\n\r\n if (testCondition) {\r\n // loop through block connections\r\n // search uniquely for conditionLogicPort first\r\n let condition = 'true'\r\n for (let m = 0; m < conn.length; m++) {\r\n if (conn[m][\"target\"][\"port\"] != \"conditionLogicPort\") continue\r\n condition = this.generateConditionCode(conn[m][\"source\"][\"node\"])\r\n break\r\n }\r\n // test if condition is true or false\r\n // if false, return and do nothing\r\n if (this.parseBoolStr(condition) == false) return false\r\n\r\n // var triggeredObject = null\r\n if (block[\"cssClass\"] == 'onPageStartBlock') {\r\n this.appendLogMsg(\r\n this.reader.$t('reader.inspect.onPageStart', {\r\n page: this.reader.pageSelected + 1,\r\n }),\r\n true\r\n )\r\n // } else {\r\n // // necessary for 'self' object block\r\n // console.log(objectConn)\r\n // triggeredObject = this.page.getItemById(objectConn[\"source\"][\"port\"])\r\n }\r\n \r\n if (block[\"cssClass\"] == 'onClickBlock' || block[\"cssClass\"] == 'onClickOnceBlock') {\r\n // this.appendLogMsg(\r\n // this.reader.$t('reader.inspect.onClick', {\r\n // name: objectConn[\"name\"]\r\n // }),\r\n // true\r\n // )\r\n let obj_name\r\n\r\n if(objectConn.name == undefined){\r\n\r\n obj_name = objectConn[\"source\"][\"port\"]\r\n\r\n }else{\r\n\r\n var clicked_object = this.page.getItemById(objectConn[\"source\"][\"port\"])\r\n\r\n if (clicked_object) {\r\n obj_name = clicked_object['name']\r\n }\r\n }\r\n\r\n this.appendLogMsg(\r\n this.reader.$t('reader.inspect.onClick', {\r\n name: obj_name\r\n }),\r\n true\r\n )\r\n \r\n \r\n }\r\n\r\n if (block[\"cssClass\"] == 'onDragOverBlock' || block[\"cssClass\"] == 'onDragOverOnceBlock') {\r\n\r\n let obj_name1, obj_name2\r\n if(objectConn['name1'] == undefined){\r\n obj_name1 = objectConn[\"source\"][\"port\"]\r\n }else{\r\n obj_name1 = objectConn[\"name1\"]\r\n }\r\n\r\n if(objectConn['name2'] == undefined){\r\n obj_name2 = objectConn[\"source\"][\"port\"]\r\n }else{\r\n obj_name2 = objectConn[\"name2\"]\r\n }\r\n\r\n this.appendLogMsg(\r\n this.reader.$t('reader.inspect.onDragOver', {\r\n name1: obj_name1,\r\n name2: obj_name2\r\n }),\r\n true\r\n )\r\n }\r\n\r\n if (block[\"cssClass\"] == 'onTextInputBlock' || block[\"cssClass\"] == 'onTextInputOnceBlock') {\r\n // this.appendLogMsg(\r\n // this.reader.$t('reader.inspect.onInput', {\r\n // name: objectConn[\"name\"]\r\n // }),\r\n // true\r\n // )\r\n let obj_name\r\n if(objectConn['name'] == undefined){\r\n obj_name = objectConn[\"source\"][\"port\"]\r\n }else{\r\n obj_name = this.page.getItemById(objectConn[\"source\"][\"port\"])[\"name\"]\r\n }\r\n this.appendLogMsg(\r\n this.reader.$t('reader.inspect.onInput', {\r\n name: obj_name\r\n }),\r\n true\r\n ) \r\n }\r\n }\r\n\r\n if (objectConn) {\r\n // highlight object block\r\n this.highlightBlock({\r\n block: this.getBlock(objectConn[\"source\"][\"node\"]),\r\n hasTimeout: true,\r\n color: '#9a67ea'\r\n })\r\n // highlight object connection\r\n this.highlightConnection({\r\n conn: objectConn,\r\n hasTimeout: true\r\n })\r\n }\r\n // highlight Event block\r\n this.highlightBlock({\r\n block: block,\r\n hasTimeout: true\r\n })\r\n\r\n // loop through connections\r\n // search for flow connections only\r\n for (let o = 0; o < conn.length; o++) {\r\n \r\n if (conn[o][\"target\"][\"port\"] == \"conditionLogicPort\") continue\r\n \r\n if (conn[o][\"target\"][\"port\"] == \"objectPort\") continue\r\n\r\n if (conn[o][\"target\"][\"port\"] == \"targetedObjectPort\") continue\r\n\r\n var functionBlock = this.getBlock(conn[o][\"target\"][\"node\"])\r\n \r\n if (functionBlock == null) continue\r\n\r\n functionBlock['pop'] = true\r\n\r\n var connections = this.getBlockConnections(functionBlock[\"id\"])\r\n functionBlock['depth'] = 1\r\n \r\n this.highlightConnection({\r\n conn: conn[o],\r\n hasTimeout: true\r\n })\r\n this.executeScript(this, functionBlock, connections, block['id'])\r\n }\r\n\r\n return true\r\n },\r\n\r\n executeScript: function (self, block, conn, eventId) {\r\n let onCompleteTrigger = false\r\n // if (this.reader.eventStatus[eventId]) {\r\n // console.log(this.page.getItemById(this.reader.eventStatus[eventId][\"triggerObjId\"]))\r\n\r\n // }\r\n \r\n block['eventCode'] = eventId\r\n // first check if block has an object port\r\n let block_has_objectPort = false\r\n if (this.blocksWithObjectPort.includes(block[\"cssClass\"])) block_has_objectPort = true\r\n\r\n if (block_has_objectPort) {\r\n for (let i = 0; i < conn.length; i++) {\r\n\r\n if (conn[i][\"target\"][\"port\"] != \"objectPort\") continue\r\n \r\n if (conn[i][\"source\"][\"port\"] !== 'self') {\r\n block['obj_id'] = conn[i][\"source\"][\"port\"]\r\n } else if (this.reader.eventStatus[eventId][\"triggerObjId\"]) {\r\n block['obj_id'] = this.reader.eventStatus[eventId][\"triggerObjId\"]\r\n } else {\r\n continue\r\n }\r\n \r\n // highlight object block\r\n this.highlightBlock({\r\n block: this.getBlock(conn[i][\"source\"][\"node\"]),\r\n hasTimeout: true,\r\n color: \"#9a67ea\"\r\n })\r\n // highlight object block\r\n this.highlightConnection({\r\n conn: conn[i],\r\n hasTimeout: true\r\n })\r\n // hightlight block\r\n this.highlightBlock({\r\n block: block,\r\n hasTimeout: false\r\n })\r\n \r\n this[block['cssClass']](this, block, function() {\r\n\r\n if (self.reader === undefined) return\r\n\r\n if ($nuxt.$store.state.inspectMode) {\r\n if (self.reader.eventGraphIsReady) {\r\n // remove hightlight box\r\n self.stopHighlightInspectBlock(block[\"id\"], self.highlightBlocksList)\r\n }\r\n }\r\n\r\n if (onCompleteTrigger) return\r\n\r\n onCompleteTrigger = true\r\n // check if output connections exists\r\n const outPutConn = self.getBlockOutputConnections(block['id'])\r\n\r\n if (outPutConn.length == 0) {\r\n if (self.checkIfEventCodeIsCompleted(block) == false) onCompleteTrigger = false\r\n return\r\n }\r\n\r\n self.generateOnCompleteCode(block, conn, eventId)\r\n })\r\n }\r\n return\r\n }\r\n\r\n // also check if block is setvarval block\r\n if (this.setVarValBlocks.includes(block[\"cssClass\"])) {\r\n\r\n // TextVariableEqualsTextObject => set nameB to the object text\r\n if (block[\"cssClass\"] == \"textVariableEqualsTextObjectBlock\"){\r\n for (let m = 0; m < conn.length; m++) {\r\n if (conn[m][\"target\"][\"port\"] != \"objectPort\") continue\r\n var layout_obj = this.page.getItemById(conn[m][\"source\"][\"port\"])\r\n block['nameB'] = layout_obj.text\r\n }\r\n }\r\n\r\n this.highlightBlock({\r\n block: block,\r\n hasTimeout: true\r\n })\r\n\r\n this.setVarVal(this, block, function() {\r\n if (onCompleteTrigger) return\r\n\r\n onCompleteTrigger = true\r\n\r\n // check if output connections exists\r\n const outPutConn = self.getBlockOutputConnections(block['id'])\r\n\r\n if (outPutConn.length == 0) {\r\n self.checkIfEventCodeIsCompleted(block)\r\n return\r\n }\r\n\r\n self.generateOnCompleteCode(block, conn, eventId)\r\n })\r\n\r\n return\r\n }\r\n\r\n // check for logic block\r\n let block_has_logicPort = false\r\n if (this.blockWithLogicPort.includes(block[\"cssClass\"])) block_has_logicPort = true\r\n \r\n\r\n if (block_has_logicPort) {\r\n this[block['cssClass']](this, block, conn, eventId)\r\n return\r\n }\r\n\r\n this.highlightBlock({\r\n block: block,\r\n hasTimeout: false\r\n })\r\n\r\n // else, block has only a flow port (e.g playSoundEffect)\r\n this[block['cssClass']](this, block, function() {\r\n \r\n if ($nuxt.$store.state.inspectMode) {\r\n if (self.reader.eventGraphIsReady) {\r\n // remove hightlight box\r\n self.stopHighlightInspectBlock(block[\"id\"], self.highlightBlocksList)\r\n }\r\n }\r\n \r\n if (onCompleteTrigger) return\r\n \r\n onCompleteTrigger = true\r\n\r\n // check if output connections exists\r\n const outPutConn = self.getBlockOutputConnections(block['id'])\r\n\r\n if (outPutConn.length == 0) {\r\n self.checkIfEventCodeIsCompleted(block)\r\n return\r\n }\r\n\r\n self.generateOnCompleteCode(block, conn, eventId)\r\n })\r\n },\r\n\r\n branchBlock: function (self, block, conn, eventId) {\r\n let condition = 'false'\r\n // first get the condition result\r\n for (let l = 0; l < conn.length; l++) {\r\n if (conn[l][\"target\"][\"port\"] != \"conditionLogicPort\") continue\r\n condition = this.generateConditionCode(conn[l][\"source\"][\"node\"])\r\n break\r\n }\r\n\r\n const conditionResult = this.parseBoolStr(condition)\r\n\r\n for (let i = 0; i < conn.length; i++) {\r\n var targetBlock = this.getBlock(conn[i][\"target\"][\"node\"])\r\n var sourceBlock = this.getBlock(conn[i][\"source\"][\"node\"])\r\n targetBlock[\"depth\"] = block[\"depth\"] + 1\r\n // test if condition is true or false\r\n if (\r\n conditionResult == true &&\r\n conn[i]['source']['port'] == \"trueOutputBranchPort\" &&\r\n sourceBlock['id'] == block['id']\r\n ) {\r\n this.highlightConnection({\r\n conn: conn[i],\r\n hasTimeout: true\r\n })\r\n this.executeScript(self, targetBlock, this.getBlockConnections(targetBlock['id']), eventId)\r\n } else if (\r\n conditionResult == false &&\r\n conn[i]['source']['port'] == \"falseOutputBranchPort\" &&\r\n sourceBlock['id'] == block['id']\r\n ) {\r\n this.highlightConnection({\r\n conn: conn[i],\r\n hasTimeout: true\r\n })\r\n this.executeScript(self, targetBlock, this.getBlockConnections(targetBlock['id']), eventId)\r\n }\r\n }\r\n },\r\n\r\n numberComparisonBlock: function (self, block, conn, eventId) {\r\n if (block[\"nameA\"] == \"none\") return\r\n\r\n for (let l = 0; l < conn.length; l++) {\r\n\r\n var targetBlock = this.getBlock(conn[l][\"target\"][\"node\"])\r\n var sourceBlock = this.getBlock(conn[l][\"source\"][\"node\"])\r\n\r\n let nameB = this.isValueAVariableField(block[\"nameB\"])\r\n if (!this.isNumber(nameB, true)) return\r\n // var nameB = this.transformStringValue(block[\"nameB\"])\r\n targetBlock[\"depth\"] = block[\"depth\"] + 1\r\n\r\n // if (this.reader.global_variables[block[\"nameB\"]] == undefined) {\r\n // block[\"nameB\"] = this.transformStringValue(block[\"nameB\"])\r\n // } else {\r\n // block[\"nameB\"] = this.reader.global_variables[block[\"nameB\"].value]\r\n // }\r\n\r\n if (\r\n parseFloat(this.reader.global_variables[block[\"nameA\"]][\"value\"]) > parseFloat(nameB.value) &&\r\n conn[l]['source']['port'] == \"greaterOutputBranchPort\" &&\r\n sourceBlock['id'] == block['id']\r\n ) {\r\n this.highlightConnection({\r\n conn: conn[l],\r\n hasTimeout: true\r\n })\r\n this.executeScript(self, targetBlock, this.getBlockConnections(targetBlock['id']), eventId)\r\n } else if (\r\n parseFloat(this.reader.global_variables[block[\"nameA\"]][\"value\"]) == parseFloat(nameB.value) &&\r\n conn[l]['source']['port'] == \"equalsOutputBranchPort\" &&\r\n sourceBlock['id'] == block['id']\r\n ) {\r\n this.highlightConnection({\r\n conn: conn[l],\r\n hasTimeout: true\r\n })\r\n this.executeScript(self, targetBlock, this.getBlockConnections(targetBlock['id']), eventId)\r\n } else if (\r\n parseFloat(this.reader.global_variables[block[\"nameA\"]][\"value\"]) < parseFloat(nameB.value) &&\r\n conn[l]['source']['port'] == \"smallerOutputBranchPort\" &&\r\n sourceBlock['id'] == block['id']\r\n ) {\r\n this.highlightConnection({\r\n conn: conn[l],\r\n hasTimeout: true\r\n })\r\n this.executeScript(self, targetBlock, this.getBlockConnections(targetBlock['id']), eventId)\r\n }\r\n }\r\n },\r\n\r\n textComparisonBlock: function (self, block, conn, eventId) {\r\n // console.log('textcomparison block')\r\n if (block[\"nameA\"] == \"none\") return\r\n // console.log(\"rawr\")\r\n\r\n let includes_port_connected = false\r\n for (let m = 0; m < conn.length; m++) {\r\n if (conn[m]['source']['port'] == \"includesOutputBranchPort\") {\r\n includes_port_connected = true\r\n break\r\n }\r\n }\r\n\r\n for (let l = 0; l < conn.length; l++) {\r\n\r\n var targetBlock = this.getBlock(conn[l][\"target\"][\"node\"])\r\n var sourceBlock = this.getBlock(conn[l][\"source\"][\"node\"])\r\n var nameB = this.transformStringValue(block[\"nameB\"])\r\n targetBlock[\"depth\"] = block[\"depth\"] + 1\r\n \r\n // if (this.reader.global_variables.hasOwnProperty(block[\"nameB\"])) {\r\n // nameB = this.reader.global_variables[this.transformStringValue(nameB)]['value']\r\n // }\r\n \r\n var is_exact = this.reader.global_variables[block[\"nameA\"]][\"value\"] == nameB\r\n var is_includes = this.reader.global_variables[block[\"nameA\"]][\"value\"] && this.reader.global_variables[block[\"nameA\"]][\"value\"].includes(nameB) && includes_port_connected\r\n // console.log('is_exact', is_exact)\r\n // console.log('is_includes', is_includes)\r\n // console.log(conn[l]['source']['port'])\r\n // console.log(sourceBlock['id'] == block['id'])\r\n\r\n if (\r\n is_exact &&\r\n conn[l]['source']['port'] == \"equalsOutputBranchPort\" &&\r\n sourceBlock['id'] == block['id']\r\n ) {\r\n this.highlightConnection({\r\n conn: conn[l],\r\n hasTimeout: true\r\n })\r\n this.executeScript(self, targetBlock, this.getBlockConnections(targetBlock['id']), eventId)\r\n } else if (\r\n is_includes &&\r\n conn[l]['source']['port'] == \"includesOutputBranchPort\" &&\r\n sourceBlock['id'] == block['id']\r\n ) {\r\n this.highlightConnection({\r\n conn: conn[l],\r\n hasTimeout: true\r\n })\r\n this.executeScript(self, targetBlock, this.getBlockConnections(targetBlock['id']), eventId)\r\n } else if (\r\n conn[l]['source']['port'] == \"elseOutputBranchPort\" &&\r\n sourceBlock['id'] == block['id'] &&\r\n !is_includes && !is_exact\r\n ) {\r\n this.highlightConnection({\r\n conn: conn[l],\r\n hasTimeout: true\r\n })\r\n this.executeScript(self, targetBlock, this.getBlockConnections(targetBlock['id']), eventId)\r\n }\r\n }\r\n },\r\n\r\n highlightBlock: function(options) {\r\n if (!$nuxt.$store.state.inspectMode) return\r\n\r\n if (!this.reader.eventGraphIsReady) return\r\n\r\n this.startHighlightInspectBlock(this, options.block, this.highlightBlocksList, options.color)\r\n\r\n if (options.hasTimeout == false) return\r\n\r\n if (options.duration == undefined) options.duration = 600\r\n \r\n this.reader.timeouts.push(setTimeout(() => {\r\n this.reader.timeouts.pop()\r\n // remove block highlight\r\n this.stopHighlightInspectBlock(options.block[\"id\"], this.highlightBlocksList)\r\n }, options.duration));\r\n },\r\n\r\n highlightConnection: function(options) {\r\n if (!$nuxt.$store.state.inspectMode) return\r\n\r\n if (!this.reader.eventGraphIsReady) return\r\n\r\n this.startHighlightInspectConnection(options.conn, this.highlightBlocksList)\r\n\r\n if (options.hasTimeout == false) return\r\n\r\n if (options.duration == undefined) options.duration = 600\r\n \r\n this.reader.timeouts.push(setTimeout(() => {\r\n this.reader.timeouts.pop()\r\n // remove block highlight\r\n this.stopHighlightInspectConnection(options.conn[\"id\"], this.highlightBlocksList)\r\n }, options.duration));\r\n \r\n },\r\n\r\n\r\n startHighlightInspectBlock: function(self, figure, highlightList, color) {\r\n try {\r\n if (!figure) return\r\n\r\n if (highlightList[figure[\"id\"]]) {\r\n highlightList[figure[\"id\"]].array.push(true)\r\n return\r\n }\r\n\r\n const f = this.reader.eventPage.getFigure(figure[\"id\"])\r\n\r\n if (!f) return\r\n\r\n if (color == undefined) color = \"#FFFFFF\"\r\n\r\n const rect = new draw2d.shape.basic.Rectangle({\r\n bgColor: null,\r\n stroke: 7,\r\n color: color,\r\n dasharray: '-'\r\n })\r\n\r\n rect.show = async function (canvas) {\r\n rect.groupId = figure[\"id\"]\r\n await rect.setCanvas(canvas)\r\n rect.shape[0].style.transition = \"stroke-width 0.3s linear\"\r\n rect.shape[0].style.animation = \"dash 1000s linear\"\r\n \r\n await rect.shape.toFront()\r\n rect.shape[0].style.strokeDashoffset = 50000 \r\n }\r\n\r\n rect.hide = function (callback) {\r\n\r\n rect.groupId = figure[\"id\"]\r\n \r\n rect.shape[0].style.strokeWidth = 0\r\n \r\n self.reader.timeouts.push(setTimeout(() => {\r\n self.reader.timeouts.pop()\r\n rect.setCanvas(null)\r\n callback() \r\n }, 300))\r\n }\r\n\r\n rect.show(this.reader.eventPage)\r\n rect.setPosition(f.getAbsolutePosition().translate(-7, -7))\r\n rect.setDimension(f.getWidth(), f.getHeight())\r\n\r\n highlightList[figure[\"id\"]] = {\r\n el: rect,\r\n array: [true]\r\n }\r\n } catch (e) {\r\n console.log(e)\r\n this.reader.sendError({\r\n method: 'readerLauncher/startHighlightInspectBlock', \r\n message: e.toString(),\r\n traceback: e.traceback,\r\n })\r\n }\r\n },\r\n\r\n stopHighlightInspectBlock: function(id, highlightList) {\r\n try {\r\n if (highlightList[id] == undefined) return\r\n\r\n highlightList[id].array.pop()\r\n\r\n if (highlightList[id].array > 0) return\r\n\r\n let rect = highlightList[id].el\r\n\r\n let self = this.reader.eventPage\r\n rect.hide(function() {\r\n self.remove(rect, true)\r\n })\r\n\r\n delete highlightList[id]\r\n } catch (e) {\r\n console.log(e)\r\n this.reader.sendError({\r\n method: 'readerLauncher/stopHighlightInspectBlock', \r\n message: e.toString(),\r\n traceback: e.traceback,\r\n })\r\n }\r\n },\r\n\r\n startHighlightInspectConnection: async function(conn, highlightList) {\r\n try {\r\n if (!conn) return\r\n\r\n if (highlightList[conn[\"id\"]]) {\r\n highlightList[conn[\"id\"]].array.push(true)\r\n return\r\n }\r\n\r\n // const c = this.getFigure(conn[\"id\"])\r\n let c = null\r\n for (var i = 0; i < this.reader.eventPage.lines.data.length; i++) {\r\n if (this.reader.eventPage.lines.data[i][\"id\"] != conn[\"id\"]) continue\r\n\r\n c = this.reader.eventPage.lines.data[i]\r\n\r\n break\r\n \r\n }\r\n\r\n if (!c) return\r\n\r\n c.shape[1][0].style.transition = \"stroke-dashoffset 1000s linear, stroke-width 0.3s linear, stroke-dasharray 0.3s linear\"\r\n c.shape[1][0].style.strokeWidth = 7\r\n c.shape[1][0].style.strokeDasharray = \"7, 11\"\r\n \r\n await this.reader.$nextTick()\r\n\r\n if (c.shape == null) return\r\n\r\n c.shape[1][0].style.strokeDashoffset = -50000 \r\n // }, 10)\r\n\r\n highlightList[conn[\"id\"]] = {\r\n el: c.shape[1][0],\r\n array: [true]\r\n }\r\n } catch (e) {\r\n console.log(e)\r\n this.reader.sendError({\r\n method: 'readerLauncher/startHighlightInspectConnection', \r\n message: e.toString(),\r\n traceback: e.traceback,\r\n })\r\n }\r\n },\r\n\r\n stopHighlightInspectConnection: function(id, highlightList) {\r\n try {\r\n if (highlightList[id] == undefined) return\r\n\r\n highlightList[id].array.pop()\r\n\r\n if (highlightList[id].array > 0) return\r\n\r\n let conn = highlightList[id].el\r\n\r\n conn.style.transition = \"stroke-width 0.3s linear, stroke-dasharray 0.3s linear\"\r\n conn.style.strokeDashoffset = 0\r\n conn.style.strokeWidth = 2\r\n conn.style.strokeDasharray = \"0, 0\"\r\n\r\n delete highlightList[id]\r\n } catch (e) {\r\n console.log(e)\r\n this.reader.sendError({\r\n method: 'readerLauncher/stopHighlightInspectConnection', \r\n message: e.toString(),\r\n traceback: e.traceback,\r\n })\r\n }\r\n },\r\n\r\n appendLogMsg: async function(msg, isEvent, isGoToPage, isSpeech, isError) {\r\n // post message in log if inspectmode == true\r\n if (!this.reader || !this.reader.inspectMode) return;\r\n\r\n let container = document.getElementById(\"inspectLogContainer\")\r\n let scrollDown = false\r\n\r\n if (\r\n container.offsetHeight + container.scrollTop ==\r\n container.scrollHeight\r\n ) {\r\n scrollDown = true\r\n } else scrollDown = false\r\n\r\n this.reader.inspectLog.push({\r\n msg: msg,\r\n isSpeech: isSpeech,\r\n isEvent: isEvent,\r\n isError: isError,\r\n isGoToPage: isGoToPage,\r\n time: new Date()\r\n })\r\n\r\n if(!scrollDown) return\r\n \r\n await this.reader.$nextTick()\r\n\r\n container.scrollTop = container.scrollHeight\r\n \r\n }\r\n\r\n}","const apiFactory = axios => ({\r\n //DJANGO REST AUTH\r\n registerUser(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/rest-auth/registration/',\r\n data: data\r\n })\r\n },\r\n passwordReset(email) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/rest-auth/password/reset/',\r\n data: email\r\n })\r\n },\r\n\r\n passwordResetConfirm(data) {\r\n // uid, token, new_password1, new_password2\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/rest-auth/password/reset/confirm/',\r\n data: data\r\n })\r\n },\r\n passwordChange(data) {\r\n // new_password1, new_password2, old password\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/rest-auth/password/change/',\r\n data: data\r\n })\r\n },\r\n refreshToken(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/rest-auth/token/refresh/',\r\n data: data\r\n })\r\n },\r\n localLogin(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/rest-auth/login/',\r\n data: data\r\n })\r\n },\r\n autoLogin(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/autologin/',\r\n data: data\r\n })\r\n },\r\n resetStudentLoginLink(username, data){\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/accounts/' + username +'/reset_qr_code_token/',\r\n data: data\r\n })\r\n },\r\n getAllStudentLogins(slug) {\r\n return axios.$get('api/v1/classrooms/' + slug + '/get_student_logins/')\r\n },\r\n facebookLogin(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/rest-auth/facebook/',\r\n data: data\r\n })\r\n },\r\n googleLogin(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/rest-auth/google/',\r\n data: data\r\n })\r\n },\r\n cleverGetToken(data) {\r\n if (data.uri) {\r\n var uri = '&uri=' + data.uri\r\n }else{\r\n var uri = ''\r\n }\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/rest-auth/clever/get_token/?' + data.code + uri,\r\n data: data\r\n })\r\n },\r\n cleverLogin(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/rest-auth/clever/',\r\n data: data\r\n })\r\n },\r\n importCleverClassroom(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/import_clever_classroom/',\r\n data: data\r\n })\r\n },\r\n classlinkGetToken(data) {\r\n if (data.uri) {\r\n var uri = '&uri=' + data.uri\r\n }else{\r\n var uri = ''\r\n }\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/rest-auth/classlink/get_token/?' + data.code + uri,\r\n data: data\r\n })\r\n },\r\n classlinkLogin(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/rest-auth/classlink/',\r\n data: data\r\n })\r\n },\r\n importClasslinkClassroom(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/import_classlink_classroom/',\r\n data: data\r\n })\r\n },\r\n resendVerifyEmail(email) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/rest-auth/email/verify/',\r\n data: email\r\n })\r\n },\r\n verifyEmail(token) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/rest-auth/registration/verify-email/',\r\n data: token\r\n })\r\n },\r\n\r\n //SUBSCRIPTION\r\n getInvoices(username) {\r\n return axios.$get('api/v1/stripe/invoices/' + username + '/')\r\n },\r\n getSubscription() {\r\n return axios.$get('api/v1/stripe/subscription/')\r\n },\r\n getUserSettings(username) {\r\n return axios.$get('api/v1/accounts/' + username + '/user_settings/')\r\n },\r\n setSubscription(data) {\r\n // plan-id and stripe token\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/stripe/subscription/',\r\n data: data\r\n })\r\n },\r\n cancelSubscription() {\r\n return axios({\r\n method: 'delete',\r\n url: 'api/v1/stripe/subscription/'\r\n })\r\n },\r\n reactivateSubscription() {\r\n let data = {\r\n reactivate: true\r\n }\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/stripe/subscription/',\r\n data: data\r\n })\r\n },\r\n checkCoupon(code) {\r\n return axios.$get('api/v1/stripe/check_coupon/' + code + '/')\r\n },\r\n //CLUBS\r\n getClubs() {\r\n return axios.$get('api/v1/clubs/')\r\n },\r\n\r\n //TRAININGS\r\n getTrainings() {\r\n return axios.$get('api/v1/trainings/')\r\n },\r\n\r\n // //NEW ASSIGNMENT REPLACING CURRICULUMS\r\n // getMyLessons(page, username, status){\r\n // var params = ''\r\n // params = '&user=' + username\r\n // if(!page){\r\n // page = 1\r\n // }\r\n // return axios.$get('api/v1/assignments/show_my_lessons/?page=' + page + params)\r\n // },\r\n getPastMyAssignments(page, username) {\r\n var params = ''\r\n params = '&user=' + username\r\n if(!page){\r\n page = 1\r\n }\r\n return axios.$get('api/v1/assignments/show_my_past_assignments/?page=' + page + params)\r\n },\r\n // previously setCurriculumAsAssignment / add_as_assignment\r\n cloneAssignment(slug, data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/assignments/' + slug + '/clone_assignment/',\r\n data: data\r\n })\r\n },\r\n\r\n\r\n \r\n //END\r\n\r\n // //CURRICULUMS\r\n // getCurriculum(slug) {\r\n // return axios.$get('api/v1/curriculums/' + slug + '/')\r\n // },\r\n // getCurriculums(grade, subject) {\r\n \r\n // let query = ''\r\n\r\n // if (grade) {\r\n // query = '&grade=' + grade\r\n // }\r\n // if (subject) {\r\n // query = query + '&subject=' + subject\r\n // }\r\n\r\n // return axios.$get('api/v1/curriculums/?published_time__isnull=False' + query)\r\n // },\r\n // getRelatedCurriculums(grade, exclude) {\r\n // let query = ''\r\n // if (grade) {\r\n // query = '&grade=' + grade\r\n // }\r\n // if (exclude) {\r\n // query = query + '&exclude=' + exclude\r\n // }\r\n // return axios.$get('api/v1/curriculums/get_related_curriculums/?' + query)\r\n\r\n // },\r\n // setCurriculumAsAssignment(slug, data) {\r\n // return axios({\r\n // method: 'post',\r\n // url: 'api/v1/curriculums/' + slug + '/add_as_assignment/',\r\n // data: data\r\n // })\r\n // },\r\n\r\n\r\n\r\n \r\n // //EDIT CURRICULUMS\r\n // getMyCurriculums() {\r\n // return axios.$get('api/v1/curriculums/my_curriculums/')\r\n // },\r\n // createCurriculum(data) {\r\n // return axios({\r\n // method: 'post',\r\n // url: 'api/v1/curriculums/',\r\n // data: data\r\n // })\r\n // },\r\n // editCurriculum(slug, data) {\r\n // return axios({\r\n // method: 'patch',\r\n // url: 'api/v1/curriculums/' + slug + '/',\r\n // data: data\r\n // })\r\n // },\r\n // editCurriculumStandards(slug, data) {\r\n // return axios({\r\n // method: 'post',\r\n // url: 'api/v1/curriculums/' + slug + '/save_standards/',\r\n // data: data\r\n // })\r\n // },\r\n // editCurriculumVocab(slug, data) {\r\n // return axios({\r\n // method: 'post',\r\n // url: 'api/v1/curriculums/' + slug + '/save_vocab/',\r\n // data: data\r\n // })\r\n // },\r\n \r\n //LIST STANDARDS\r\n getAASL(page) {\r\n return axios.$get('api/v1/standards/AASL/?page=' + page)\r\n },\r\n getCCELA(page) {\r\n return axios.$get('api/v1/standards/CCELA/?page=' + page)\r\n },\r\n getCSTA(page) {\r\n return axios.$get('api/v1/standards/CSTA/?page=' + page)\r\n },\r\n getISTE(page) {\r\n return axios.$get('api/v1/standards/ISTE/?page=' + page)\r\n },\r\n getVocab(page) {\r\n return axios.$get('api/v1/vocab/?page=' + page)\r\n },\r\n getHelperText(page) {\r\n return axios.$get('api/v1/helpertext/?page=' + page)\r\n },\r\n\r\n //EVENTS\r\n getEvent(slug) {\r\n return axios.$get('api/v1/events/' + slug + '/')\r\n },\r\n\r\n //CLASSES\r\n getBanners() {\r\n return axios.$get('api/v1/banners/')\r\n },\r\n selectClassBanner(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/class_banner_select/',\r\n data: data\r\n })\r\n },\r\n getClassbyClasscode(classcode, invite_url, username) {\r\n let params = ''\r\n if (invite_url){\r\n params = '?invite=true'\r\n if (username){\r\n params = params + '&username=' + username\r\n }\r\n }\r\n return axios.$get('api/v1/get_classroom/' + classcode + '/' + params)\r\n },\r\n setClassbyClasscode(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/connect_classroom/',\r\n data: data\r\n })\r\n },\r\n getStudentClassrooms(username, page, active) {\r\n const data = {\r\n \"username\": username\r\n }\r\n // used only for transfer dialog of story to different classroom/assignment\r\n if (active) data.active = true\r\n var params = ''\r\n if (page) {\r\n params = '?page=' + page\r\n }\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/classrooms/student_classroom_list/' + params,\r\n data: data\r\n })\r\n },\r\n getActiveShortListClassrooms(data) {\r\n // Classroom List returns ('slug', 'name', 'active_assignments_count')\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/classrooms/active_short_list/',\r\n data: data\r\n })\r\n },\r\n getClassrooms(username, page) {\r\n var params = ''\r\n params = '?teacher__username=' + username\r\n if (page) {\r\n params = params + '&page=' + page\r\n }\r\n return axios.$get('api/v1/classrooms/' + params)\r\n },\r\n getClassroomByGrade(grade, page) {\r\n var params = ''\r\n params = '?grade=' + grade\r\n if (page) {\r\n params = params + '&page=' + page\r\n }\r\n return axios.$get('api/v1/classrooms/' + params)\r\n\r\n // work in progress\r\n // return axios.$get('api/v1/classrooms/public_classrooms_list/' + params)\r\n },\r\n getClassroomBySubject(subject, page) {\r\n var params = ''\r\n params = '?subject=' + subject\r\n if (page) {\r\n params = params + '&page=' + page\r\n }\r\n return axios.$get('api/v1/classrooms/' + params)\r\n // work in progress\r\n // return axios.$get('api/v1/classrooms/public_classrooms_list/' + params)\r\n },\r\n getCoteachingClassrooms(username) {\r\n var params = ''\r\n params = '?coteacher=' + username\r\n return axios.$get('api/v1/classrooms/' + params)\r\n },\r\n getClassroom(slug) {\r\n return axios.$get('api/v1/classrooms/' + slug + '/')\r\n },\r\n\r\n createClassroom(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/classrooms/',\r\n data: data\r\n })\r\n },\r\n editClassroom(slug, data) {\r\n return axios({\r\n method: 'patch',\r\n url: 'api/v1/classrooms/' + slug + '/',\r\n data: data\r\n })\r\n },\r\n deleteClassroom(slug) {\r\n return axios({\r\n method: 'delete',\r\n url: 'api/v1/classrooms/' + slug + '/'\r\n })\r\n },\r\n archiveClassroom(slug) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/classrooms/' + slug + '/archive/'\r\n })\r\n },\r\n unarchiveClassroom(slug) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/classrooms/' + slug + '/unarchive/'\r\n })\r\n },\r\n setPasswordForStudents(slug, password, teacher) {\r\n const data = {\r\n password: password,\r\n teacher: teacher\r\n }\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/classrooms/' + slug + '/set_password_for_students/',\r\n data: data\r\n })\r\n },\r\n getGoogleClassrooms(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/get_google_classroom/',\r\n data: data\r\n })\r\n },\r\n importGoogleClassroom(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/import_google_classroom/',\r\n data: data\r\n })\r\n },\r\n createStudent(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/create_student/',\r\n data: data\r\n })\r\n },\r\n removeStudent(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/remove_student/',\r\n data: data\r\n })\r\n },\r\n setUserForGuestStory(storySlug, data){\r\n // data => username \r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/products/' + storySlug + '/set_user_for_guest_story/',\r\n data: data\r\n })\r\n\r\n },\r\n deleteOldGuestStories(){\r\n return axios.$get('api/v1/products/delete_old_guest_stories/')\r\n },\r\n transferStory(data) {\r\n // data => product_slug and classroom_slug\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/actions/transfer_story/',\r\n data: data\r\n })\r\n },\r\n\r\n // PUBLIC LIBRARY\r\n getLibrary(slug) {\r\n return axios.$get('api/v1/library/' + slug + '/')\r\n },\r\n getLibraryAssignmentStories(slug) {\r\n return axios.$get('api/v1/products/?status=p&short=True&assignment__slug=' + slug)\r\n },\r\n getStudentRoster(slug, page) {\r\n var query = ''\r\n if (page) {\r\n query = query + '?page=' + page\r\n }\r\n return axios.$get('api/v1/classrooms/' + slug + '/get_student_roster/' + query)\r\n },\r\n getStudentRosterProfile(slug, page) {\r\n var query = ''\r\n if (page) {\r\n query = query + '?page=' + page\r\n }\r\n return axios.$get('api/v1/classrooms/' + slug + '/get_student_roster_profile/' + query)\r\n },\r\n getStudentRosterOnline(slug, page) {\r\n var query = ''\r\n if (page) {\r\n query = query + '?page=' + page\r\n }\r\n return axios.$get('api/v1/classrooms/' + slug + '/get_online_student_roster/' + query, {\r\n progress: false\r\n })\r\n },\r\n\r\n //ASSIGNMENTS\r\n getClassroomAssignments(classSlug, page) {\r\n const data = {\r\n \"class_slug\": classSlug\r\n }\r\n if (!page) {\r\n page = 1\r\n }\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/assignments/assignments_for_classroom/?page=' + page,\r\n data: data\r\n })\r\n },\r\n getAssignmentDropdown(slug) {\r\n return axios.$get('api/v1/assignments/' + slug + '/detail_dropdown_milestones/')\r\n },\r\n getAssignment(slug) {\r\n return axios.$get('api/v1/assignments/' + slug + '/')\r\n },\r\n getStudentClassroomAssignments(classSlug, username, page) {\r\n const data = {\r\n \"class_slug\": classSlug,\r\n \"username\": username\r\n }\r\n if (!page) {\r\n page = 1\r\n }\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/assignments/student_assignments_for_classroom/?page=' + page,\r\n data: data\r\n })\r\n },\r\n getStudentClassroomAssignmentsName(classSlug, username, page) {\r\n const data = {\r\n \"class_slug\": classSlug,\r\n \"username\": username\r\n }\r\n if (!page) {\r\n page = 1\r\n }\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/assignments/student_assignments_names_for_classroom/?page=' + page,\r\n data: data\r\n })\r\n },\r\n\r\n\r\n getStoryBasic(slug) {\r\n return axios.$get('api/v1/products/' + slug + '/basic/')\r\n },\r\n\r\n createAssignment(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/assignments/',\r\n data: data\r\n })\r\n },\r\n editAssignment(slug, data) {\r\n return axios({\r\n method: 'patch',\r\n url: 'api/v1/assignments/' + slug + '/',\r\n data: data\r\n })\r\n },\r\n deleteAssignment(slug) {\r\n return axios({\r\n method: 'delete',\r\n url: 'api/v1/assignments/' + slug + '/'\r\n })\r\n },\r\n\r\n submitToLessons(slug) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/assignments/' + slug + '/submit_to_lessons/'\r\n })\r\n },\r\n getAssignmentStats(slug) {\r\n return axios.$get('api/v1/assignment_student_stats/' + slug + '/')\r\n },\r\n\r\n getCurrentMilestoneIndex(storySlug) {\r\n return axios.$get(\r\n 'api/v1/products/' + storySlug + '/current_milestone_index/'\r\n )\r\n },\r\n\r\n\r\n //ASSIGNMENT STATUS\r\n getLibraryAssignmentStatus(slug){\r\n return axios.$get('api/v1/assignmentstatus/' + slug + '/library/')\r\n },\r\n editAssignmentStatus(slug, data) {\r\n return axios({\r\n method: 'patch',\r\n url: 'api/v1/assignmentstatus/' + slug + '/',\r\n data: data\r\n })\r\n },\r\n closeAssignmentStatus(slug) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/assignmentstatus/' + slug + '/close/'\r\n })\r\n },\r\n reopenAssignmentStatus(slug) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/assignmentstatus/' + slug + '/reopen/'\r\n })\r\n },\r\n deleteAssignmentStatus(slug) {\r\n return axios({\r\n method: 'delete',\r\n url: 'api/v1/assignmentstatus/' + slug + '/'\r\n })\r\n },\r\n\r\n getAssignmentStatusUserStories(assignment_status_slug, page, username, created_by){\r\n \r\n var params = ''\r\n\r\n params = '&user=' + username\r\n if (created_by) {\r\n // options: me, not_me\r\n let created_by_params = '&created_by=' + created_by\r\n params += created_by_params\r\n }\r\n\r\n return axios.$get('api/v1/assignmentstatus/'+ assignment_status_slug + '/user_stories/?page=' + page + params)\r\n },\r\n getAssignmentStatusStories(assignment_status_slug, status, page, ) {\r\n if (!page) {\r\n page = 1\r\n }\r\n return axios.$get(\r\n 'api/v1/assignmentstatus/' + assignment_status_slug + '/get_stories/?status=' + status + '&page=' + page\r\n )\r\n },\r\n getAssignmentStatusPublicStories(assignment_status_slug, page, ) {\r\n if (!page) {\r\n page = 1\r\n }\r\n return axios.$get(\r\n 'api/v1/assignmentstatus/' + assignment_status_slug + '/get_public_stories/?page=' + page\r\n )\r\n },\r\n\r\n //SCHOOLS\r\n createSchool(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/schools/',\r\n data: data\r\n })\r\n },\r\n editSchool(slug, data) {\r\n return axios({\r\n method: 'patch',\r\n url: 'api/v1/schools/' + slug + '/',\r\n data: data\r\n })\r\n },\r\n deleteSchool(slug) {\r\n return axios({\r\n method: 'delete',\r\n url: 'api/v1/schools/' + slug + '/'\r\n })\r\n },\r\n getSchool(slug) {\r\n return axios.$get('api/v1/schools/' + slug + '/')\r\n },\r\n getSchoolTeachers(slug) {\r\n return axios.$get('api/v1/schools/' + slug + '/get_teachers/')\r\n },\r\n getSchoolInvitations(slug) {\r\n return axios.$get('api/v1/schools/' + slug + '/get_invites/')\r\n },\r\n inviteTeacher(slug, data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/schools/' + slug + '/invite_teacher/',\r\n data: data\r\n })\r\n },\r\n editInvite(id, data) {\r\n return axios({\r\n method: 'patch',\r\n url: 'api/v1/invitations/' + id + '/',\r\n data: data\r\n })\r\n },\r\n sendTeacherInvite(slug, data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/schools/' + slug + '/send_invite/',\r\n data: data\r\n })\r\n },\r\n removeTeacher(slug, data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/schools/' + slug + '/remove_teacher/',\r\n data: data\r\n })\r\n },\r\n checkSchoolcode(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/schools/check_schoolcode/',\r\n data: data\r\n })\r\n },\r\n connectSchool(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/schools/connect_school/',\r\n data: data\r\n })\r\n },\r\n getPurchaseOrders(school_slug) {\r\n return axios.$get('api/v1/pos/?school__slug=' + school_slug)\r\n },\r\n getQuote(slug) {\r\n return axios.$get('api/v1/quotes/' + slug + '/')\r\n },\r\n createQuote(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/quotes/',\r\n data: data\r\n })\r\n },\r\n editQuote(id, data) {\r\n return axios({\r\n method: 'patch',\r\n url: 'api/v1/quotes/' + id + '/',\r\n data: data\r\n })\r\n },\r\n //FEEDBACK\r\n getNumFeedbacksforStories(data) {\r\n // data is list of story slugs\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/feedback/num_for_stories/',\r\n data: data\r\n })\r\n },\r\n getStoryFeedback(story_slug) {\r\n let data = {\r\n \"slug\": story_slug\r\n }\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/feedback/get_feedbacks_by_page/',\r\n data: data\r\n })\r\n // var query = '?product__slug=' + story_slug\r\n // if (page) {\r\n // query = query + '&page=' + page\r\n // }\r\n // return axios.$get('api/v1/feedback/' + query)\r\n },\r\n createFeedback(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/feedback/',\r\n data: data\r\n })\r\n },\r\n editFeedback(id, data) {\r\n return axios({\r\n method: 'patch',\r\n url: 'api/v1/feedback/' + id + '/',\r\n data: data\r\n })\r\n },\r\n deleteFeedback(id) {\r\n return axios({\r\n method: 'delete',\r\n url: 'api/v1/feedback/' + id + '/'\r\n })\r\n },\r\n\r\n //CHAT\r\n getChatHistory(story_slug) {\r\n return axios.$get('api/v1/rooms/' + story_slug + '/get_chat_history/')\r\n },\r\n\r\n //COMMENT\r\n getStoryComment(story_slug, page) {\r\n var query = '?product__slug=' + story_slug\r\n if (page) {\r\n query = query + '&page=' + page\r\n }\r\n return axios.$get('api/v1/comment/' + query)\r\n },\r\n getComment(comment_id, page) {\r\n var query = ''\r\n if (page) {\r\n query = query + '?page=' + page\r\n }\r\n return axios.$get('api/v1/comment/' + comment_id + '/' + query)\r\n },\r\n getStoryCommentBy(story_slug, editor, page) {\r\n var query = 'product__slug=' + story_slug + '&commenter__username=' + editor\r\n if (page) {\r\n query = query + '&page=' + page\r\n }\r\n return axios.$get('api/v1/comment/' + query)\r\n },\r\n createComment(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/comment/',\r\n data: data\r\n })\r\n },\r\n editComment(id, data) {\r\n return axios({\r\n method: 'patch',\r\n url: 'api/v1/comment/' + id + '/',\r\n data: data\r\n })\r\n },\r\n deleteComment(id) {\r\n return axios({\r\n method: 'delete',\r\n url: 'api/v1/comment/' + id + '/'\r\n })\r\n },\r\n\r\n //ASSET FOLDER\r\n getAssetFolders(username, page) {\r\n var query = '?user__username=' + username\r\n if (page) {\r\n query = query + '&page=' + page\r\n }\r\n return axios.$get('api/v1/assets/assetfolders/' + query)\r\n },\r\n getAssetFolder(folder_id, page) {\r\n var query = ''\r\n if (page) {\r\n query = query + '?page=' + page\r\n }\r\n return axios.$get('api/v1/assets/assetfolders/' + folder_id + '/' + query)\r\n },\r\n createAssetFolder(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/assets/assetfolders/',\r\n data: data\r\n })\r\n },\r\n editAssetFolder(id, data) {\r\n return axios({\r\n method: 'patch',\r\n url: 'api/v1/assets/assetfolders/' + id + '/',\r\n data: data\r\n })\r\n },\r\n deleteAssetFolder(id) {\r\n return axios({\r\n method: 'delete',\r\n url: 'api/v1/assets/assetfolders/' + id + '/'\r\n })\r\n },\r\n addAssetToFolder(folder_id, data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/assets/assetfolders/' + folder_id + '/' + 'add_asset_to_folder/',\r\n data: data\r\n })\r\n\r\n },\r\n\r\n\r\n //USER\r\n checkUsername(username) {\r\n const data = {\r\n username: username\r\n }\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/accounts/check_username/',\r\n data: data\r\n })\r\n },\r\n checkEmail(email) {\r\n const data = {\r\n email: email\r\n }\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/accounts/check_email/',\r\n data: data\r\n })\r\n },\r\n getUsers(params) {\r\n var query = ''\r\n if (params) {\r\n query = '?' + params\r\n }\r\n return axios.$get('api/v1/accounts/' + query)\r\n },\r\n getUser(username) {\r\n if (username) {\r\n return axios.$get('api/v1/accounts/' + username + '/')\r\n }\r\n },\r\n editUser(username, data) {\r\n return axios({\r\n method: 'patch',\r\n url: 'api/v1/accounts/' + username + '/',\r\n data: data\r\n })\r\n },\r\n editUserSettings(id, data) {\r\n return axios({\r\n method: 'patch',\r\n url: 'api/v1/usersettings/' + id + '/',\r\n data: data\r\n })\r\n },\r\n addEmail(username, data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/accounts/' + username + '/add_email/',\r\n data: data\r\n })\r\n },\r\n editUserPk(pk, data) {\r\n return axios({\r\n method: 'patch',\r\n url: 'api/v1/accountsPk/' + pk + '/',\r\n data: data\r\n })\r\n },\r\n deleteUser(username) {\r\n return axios({\r\n method: 'delete',\r\n url: 'api/v1/accounts/' + username + '/'\r\n })\r\n },\r\n\r\n // FEED\r\n getNotificationFeed(feed_length) {\r\n var params = ''\r\n if (feed_length) {\r\n params = '&feed_length=' + feed_length\r\n }\r\n return axios.$get('api/v1/list_news_feed/?notification=true' + params)\r\n },\r\n\r\n // STORIES\r\n createStory(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/studio/create/',\r\n data: data\r\n })\r\n },\r\n editStory(slug, data) {\r\n return axios({\r\n method: 'patch',\r\n url: 'api/v1/products/' + slug + '/',\r\n data: data\r\n })\r\n },\r\n sendThumbnail(slug, data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/products/' + slug + '/send_thumb/',\r\n data: data\r\n })\r\n },\r\n deleteStory(slug) {\r\n return axios({\r\n method: 'delete',\r\n url: 'api/v1/products/' + slug + '/'\r\n })\r\n },\r\n getMyUsedLessons(page, username) {\r\n var params = ''\r\n if(username !== undefined) {\r\n params = '&user=' + username\r\n }\r\n return axios.$get('api/v1/assignments/get_my_used_lessons/?page=' + page + params)\r\n },\r\n getMyLessons(page, username) {\r\n var params = ''\r\n if(username !== undefined) {\r\n params = '&user=' + username\r\n }\r\n return axios.$get('api/v1/assignments/get_my_lessons/?page=' + page + params)\r\n },\r\n getPublishedLessons(page, q) {\r\n // console.log('Query in getPublishedLessons:', q);\r\n // Append the query string only if it's provided and not empty\r\n const queryString = q ? `&${q}` : '';\r\n return axios.$get(`api/v1/assignments/published_lessons/?page=${page}${queryString}`);\r\n },\r\n getSimilarPublishedLessons(slug){\r\n return axios.$get('api/v1/assignments/' + slug + '/similar_published_lessons/')\r\n },\r\n getLesson(slug) {\r\n return axios.$get('api/v1/assignments/' + slug + '/read_lesson/')\r\n },\r\n assignLessonToClassroom(slug, data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/assignments/' + slug + '/assign_to_classroom/',\r\n data: data\r\n })\r\n },\r\n\r\n getUserStories(page, username, is_student, status, assignment, created_by) {\r\n var params = ''\r\n\r\n params = '&user=' + username\r\n if (is_student) {\r\n let student_params = '&is_student=' + is_student\r\n params += student_params\r\n }\r\n\r\n if (status) {\r\n // options: draft, public\r\n let status_params = '&status=' + status\r\n params += status_params\r\n }\r\n if (assignment) {\r\n let assignment_params = '&assignment=' + assignment\r\n params += assignment_params\r\n }\r\n if (created_by) {\r\n // options: me, not_me\r\n let created_by_params = '&created_by=' + created_by\r\n params += created_by_params\r\n }\r\n\r\n return axios.$get('api/v1/products/user_stories/?page=' + page + params)\r\n },\r\n getReadStory(slug) {\r\n return axios.$get('api/v1/productsread/' + slug + '/')\r\n },\r\n getReviewStory(slug) {\r\n return axios.$get('api/v1/productsreview/' + slug + '/')\r\n },\r\n getFeaturedStories() {\r\n return axios.$get('api/v1/featured_stories/')\r\n },\r\n getPublishedStories(page, search) {\r\n var searchQ = ''\r\n if (search) {\r\n searchQ = '&q=' + search\r\n }\r\n return axios.$get('api/v1/products/published_stories/?page=' + page + searchQ)\r\n },\r\n // ASSETS\r\n getAssetsList(page, category, search, group){\r\n var searchQ = ''\r\n if (search) {\r\n searchQ = '&q=' + search\r\n }\r\n let categoryQ = ''\r\n if(category){\r\n categoryQ = '&category=' + category\r\n }\r\n let groupQ = ''\r\n if(group){\r\n groupQ = '&group=' + group\r\n }\r\n\r\n return axios.$get('api/v1/assets/studio_assets/?page=' + page + categoryQ + searchQ + groupQ)\r\n },\r\n getAssetsSVGList(page){\r\n return axios.$get('api/v1/assets/studio_svgs/?page=' + page)\r\n },\r\n getFeaturedAssets() {\r\n return axios.$get('api/v1/assets/featured_assets/')\r\n },\r\n getAssetsInCollection(col_id) {\r\n return axios.$get('api/v1/assets/get_col_assets/' + col_id + '/')\r\n },\r\n getAssetsDetailsInCollection(col_id) {\r\n return axios.$get('api/v1/assets/get_col_assets_details/' + col_id + '/')\r\n },\r\n getAssetsFromAsset(slug) {\r\n return axios.$get('api/v1/assets/get_col_assets_from_asset/' + slug + '/')\r\n },\r\n getSVGCollectionFromAsset(slug) {\r\n return axios.$get('api/v1/assets/get_col_svg_from_asset/' + slug + '/')\r\n },\r\n\r\n getAssetSvgInCollection(col_id) {\r\n return axios.$get('api/v1/assets/get_col_assetsvgs/' + col_id + '/')\r\n },\r\n getAssetCollections(username) {\r\n return axios.$get('api/v1/assets/asset_collections/' + username + '/')\r\n },\r\n getSVGCollections(username) {\r\n return axios.$get('api/v1/assets/svg_collections/' + username + '/')\r\n },\r\n\r\n filterSoundsList(options){\r\n let params_list = []\r\n let params = ''\r\n \r\n if (options.category){\r\n params_list.push('category=' + options.category)\r\n }\r\n if (options.genre){\r\n params_list.push('genre=' + options.genre)\r\n }\r\n if (options.mood){\r\n params_list.push('mood=' + options.mood)\r\n }\r\n if(options.instrument){\r\n params_list.push('has_instrument=' + options.instrument)\r\n }\r\n if(options.collection_id){\r\n params_list.push('collection__id=' + options.collection_id)\r\n }\r\n if (params_list.length > 0){\r\n params = params_list.join('&')\r\n }\r\n return axios.$get('api/v1/assets/get_sounds/?' + params)\r\n\r\n },\r\n getSoundEffectCollectionsList(genre){\r\n return axios.$get('api/v1/assets/get_sound_effect_collections/?genre=' + genre)\r\n },\r\n\r\n\r\n \r\n getSoundsInCollection(col_id) {\r\n return axios.$get('api/v1/assets/get_col_sounds/' + col_id + '/')\r\n },\r\n getFeaturedSounds() {\r\n return axios.$get('api/v1/assets/featured_sounds/')\r\n },\r\n getSoundCollectionsByArtist(username) {\r\n return axios.$get('api/v1/assets/sound_collections_by_artist/' + username + '/')\r\n },\r\n\r\n \r\n //MESSAGES\r\n getDisplayMessages() {\r\n return axios.$get('api/v1/messages/?display=true')\r\n },\r\n removeMessage(id) {\r\n return axios({\r\n method: 'patch',\r\n url: 'api/v1/messages/' + id + '/',\r\n data: {\r\n display: false\r\n }\r\n })\r\n },\r\n getSuggestedUsers(pagesize) {\r\n //default pagesize is 12\r\n const params = ''\r\n if (pagesize) {\r\n params = '?page_size=' + pagesize\r\n }\r\n return axios.$get('api/v1/suggested_users/' + params)\r\n },\r\n // PROFILE\r\n getUserProfile(username) {\r\n return axios.$get('api/v1/accounts/' + username + '/')\r\n },\r\n editUserProfile(username, data) {\r\n return axios({\r\n method: 'patch',\r\n url: 'api/v1/profile/' + username + '/',\r\n data: data\r\n })\r\n },\r\n getAvatars(page) {\r\n return axios.$get('api/v1/avatars/?page=' + page)\r\n },\r\n\r\n changeAvatar(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/avatar_select/',\r\n data: data\r\n })\r\n },\r\n getFollowers(username) {\r\n return axios({\r\n method: 'get',\r\n url: 'api/v1/accounts/' + username + '/get_followers/'\r\n })\r\n },\r\n getFollowing(username) {\r\n return axios({\r\n method: 'get',\r\n url: 'api/v1/accounts/' + username + '/get_following/'\r\n })\r\n },\r\n // BADGES\r\n getBadges() {\r\n return axios.$get('api/v1/badges/?category=wr')\r\n },\r\n\r\n // ACTIONS\r\n\r\n getVersion() {\r\n return axios.$get('api/v1/actions/getversion')\r\n },\r\n like(data) {\r\n // data = {object_id, type}\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/actions/like/',\r\n data: data\r\n })\r\n },\r\n follow(username) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/actions/follow/',\r\n data: {\r\n username: username\r\n }\r\n })\r\n },\r\n report(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/actions/report/',\r\n data: data\r\n })\r\n },\r\n remixStory(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/actions/remix/',\r\n data: data\r\n })\r\n },\r\n sendStoryLog(data) {\r\n return axios.$post('api/v1/actions/send_log/', data, {\r\n progress: false\r\n })\r\n },\r\n hit(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/actions/hit/',\r\n data: data,\r\n options: {\r\n progress: false\r\n }\r\n })\r\n },\r\n updateNotifications(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/actions/update_notification/',\r\n data: data\r\n })\r\n },\r\n updateTutorial(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/actions/update_notification/?rand=' + Math.random(),\r\n data: data\r\n })\r\n },\r\n getTags(model) {\r\n if (!model) {\r\n model = 'product'\r\n }\r\n return axios.$get('api/v1/actions/get_tags?model=' + model)\r\n },\r\n getCurrency() {\r\n return axios.$get('api/v1/actions/get_currency/')\r\n },\r\n\r\n // FORMS\r\n serverStatus() {\r\n return axios.$get('api/v1/server_status/')\r\n },\r\n contactForm(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/contact/',\r\n data: data\r\n })\r\n },\r\n errorForm(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/error/',\r\n data: data\r\n })\r\n },\r\n subscribeForm(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/subscribe/',\r\n data: data\r\n })\r\n },\r\n\r\n // ROOMS\r\n addMember(slug, data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/rooms/' + slug + '/add_member/',\r\n data: data\r\n })\r\n },\r\n removeMember(slug, data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/rooms/' + slug + '/remove_member/',\r\n data: data\r\n })\r\n },\r\n getAllRoomMembers(slug, page) {\r\n // returns list of all members in the room\r\n return axios.$get('api/v1/rooms/' + slug + '/get_all_members/?page=' + page)\r\n },\r\n changeMember(slug, data) {\r\n // username, data\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/rooms/' + slug + '/change_member/',\r\n data: data\r\n })\r\n },\r\n\r\n //STUDIO\r\n getEditStory(slug) {\r\n return axios.$get('api/v1/studio/edit/' + slug + '/')\r\n },\r\n deleteRecordSound(id) {\r\n return axios({\r\n method: 'delete',\r\n url: 'api/v1/assets/recordsounds/' + id + '/'\r\n })\r\n },\r\n addRecordSound(data) {\r\n return axios({\r\n method: 'post',\r\n url: 'api/v1/assets/recordsounds/',\r\n data: data\r\n })\r\n },\r\n getPageTemplatesList(category, page) {\r\n let params = ''\r\n if(!page){\r\n page = 1\r\n }\r\n if (category) {\r\n params = '&category=' + category\r\n }\r\n return axios.$get('api/v1/pagetemplates/?page=' + page + params)\r\n },\r\n getPageTemplate(slug) {\r\n return axios.$get('api/v1/pagetemplates/' + slug + '/')\r\n },\r\n\r\n getTutorialsList(category, page) {\r\n let params = ''\r\n if(!page){\r\n page = 1\r\n }\r\n if (category) {\r\n params = '&category=' + category\r\n }\r\n return axios.$get('api/v1/tutorials/?page=' + page + params)\r\n },\r\n getTutorial(slug) {\r\n return axios.$get('api/v1/tutorials/' + slug + '/')\r\n },\r\n\r\n searchGifs(searchTerm, apiKey){\r\n return axios.$get(`https://api.giphy.com/v1/gifs/search?api_key=${apiKey}&q=${searchTerm}&rating=g`)\r\n }\r\n\r\n})\r\n\r\n/*\r\n ** Executed by ~/.nuxt/index.js with context given\r\n ** This method can be asynchronous\r\n */\r\nexport default ({\r\n app\r\n}, inject) => {\r\n // Inject `api` key\r\n // -> app.$api\r\n // -> this.$api in vue components\r\n // -> this.$api in store actions/mutations\r\n // app.$axios.defaults.xsrfHeaderName = 'X-CSRFToken'\r\n // app.$axios.defaults.xsrfCookieName = 'csrftoken'\r\n const api = apiFactory(app.$axios)\r\n inject('api', api)\r\n}\r\n","import Vue from 'vue'\r\nimport VueLazyload from 'vue-lazyload'\r\n\r\nVue.use(VueLazyload, {\r\n // set observer to true\r\n observer: true,\r\n lazyComponent: true,\r\n\r\n // optional\r\n observerOptions: {\r\n rootMargin: '0px',\r\n threshold: 0.2\r\n }\r\n})\r\n\r\n// // or with options\r\n// Vue.use(VueLazyload, {\r\n// preLoad: 1.3,\r\n// error: 'dist/error.png',\r\n// loading: 'dist/loading.gif',\r\n// attempt: 1\r\n// })\r\n","/**\n * Mixin component with base and common properties and functions.\n */\n\n/**\n * Base properties common for the audio-visual components\n */\nconst props = {\n /**\n * prop: 'audio-src'\n * Audio element src attribute. When provided creates audio element\n */\n audioSrc: {\n type: String,\n default: null\n },\n /**\n * prop: 'ref-link'\n * Refrence to Audio element. When provided, then local audio element\n * is not created and use refrence to the element. Component will\n * search only for its parent refs.\n */\n refLink: {\n type: String,\n default: null\n },\n /**\n * prop: 'audio-controls'\n * Audio element controls attribute. When provided should\n * display audio element with controls\n */\n audioControls: {\n type: Boolean,\n default: true\n },\n /**\n * prop: 'cors-anonym'\n * CORS requests for this element will not have the credentials flag set.\n * Set crossOrigin property of audio element to 'anonymous'.\n * Default: null\n */\n corsAnonym: {\n type: Boolean,\n default: false\n },\n /**\n * prop: 'audio-class'\n * Audio element css class name.\n */\n audioClass: {\n type: String,\n default: null\n },\n /**\n * prop: 'canv-width'\n * Canvas element width. Default 300\n */\n canvWidth: {\n type: Number,\n default: 300\n },\n /**\n * prop: 'canv-height'\n * Canvas element height. Default 80\n */\n canvHeight: {\n type: Number,\n default: 80\n },\n /**\n * prop: 'canv-class'\n * Canvas element css class name.\n */\n canvClass: {\n type: String,\n default: null\n },\n /**\n * prop: 'canv-top'\n * Canvas element position on top relatively to audio element.\n * Default: false\n */\n canvTop: {\n type: Boolean,\n default: false\n },\n /**\n * prop: 'canv-fill-color'\n * Canvas fill background color. Can be string RGB color or canvas gradients array.\n * Default is transperent.\n */\n canvFillColor: {\n type: [String, Array],\n default: null\n }\n}\n\nconst methods = {\n /**\n * Create audio and canvas elements and insert in the HTML template.\n * Using document.createElement to avoid Vue virtual DOM re-rendering\n * which can lead to infinit loops.\n */\n createHTMLElements: function() {\n const canv = document.createElement('canvas')\n const canvDiv = document.createElement('div')\n let audioDiv = null\n let audio = null\n\n if (this.refLink) {\n audio = this.$parent.$refs[this.refLink]\n } else {\n audio = document.createElement('audio')\n audio.setAttribute('id', 'recordAudio')\n canvDiv.style.backgroundColor = '#d4ebf2'\n audioDiv = document.createElement('div')\n audio.setAttribute('src', this.audioSrc)\n if (this.audioControls) audio.setAttribute('controls', true)\n if (this.audioClass) audio.setAttribute('class', this.audioClass)\n if (this.corsAnonym) audio.crossOrigin = 'anonymous'\n audioDiv.appendChild(audio)\n this.$el.appendChild(audioDiv)\n }\n\n if (this.canvClass) canv.setAttribute('class', this.canvClass)\n if (this.canvWidth) canv.setAttribute('width', this.canvWidth)\n if (this.canvHeight) canv.setAttribute('height', this.canvHeight)\n canvDiv.appendChild(canv)\n\n if (this.canvTop) {\n this.$el.insertBefore(canvDiv, audioDiv)\n } else {\n this.$el.appendChild(canvDiv)\n }\n this.ctxWrapper = canv\n this.ctx = canv.getContext('2d')\n\n this.audio = audio\n },\n /**\n * Set audio context analyser.\n */\n setAnalyser: function() {\n let src = null\n let ctx = null\n if (this.refLink) {\n if (this.$avAudioRefs[this.refLink]) {\n src = this.$avAudioRefs[this.refLink].src\n ctx = this.$avAudioRefs[this.refLink].ctx\n this.analyser = ctx.createAnalyser()\n } else {\n ctx = new AudioContext()\n this.analyser = ctx.createAnalyser()\n src = ctx.createMediaElementSource(this.audio)\n this.$avAudioRefs[this.refLink] = { src: src, ctx: ctx }\n }\n } else {\n ctx = new AudioContext()\n this.analyser = ctx.createAnalyser()\n src = ctx.createMediaElementSource(this.audio)\n }\n\n src.connect(this.analyser)\n this.analyser.fftSize = this.fftSize\n this.analyser.connect(ctx.destination)\n\n this.audioCtx = ctx\n },\n /**\n * Canvas gradient. Vertical, from top down\n */\n fillGradient: function(colorsArray) {\n const w = this.canvWidth\n const h = this.canvHeight\n const gradient = this.ctx.createLinearGradient(w / 2, 0, w / 2, h)\n let offset = 0\n colorsArray.forEach(color => {\n gradient.addColorStop(offset, color)\n offset += 1 / colorsArray.length\n })\n return gradient\n }\n}\n\nexport default {\n props,\n render: h => h('div'),\n mounted() {\n this.createHTMLElements()\n this.setAnalyser()\n this.mainLoop()\n },\n beforeDestroy() {\n if (this.audioCtx) {\n this.audioCtx.close()\n }\n },\n methods\n}\n","import BaseMixin from './AvBase'\n/**\n * Component props Object\n */\nconst props = {\n /**\n * prop: 'bar-width'\n * Width of the bar in pixels.\n * Default: 5\n */\n barWidth: {\n type: Number,\n default: 5\n },\n /**\n * prop: 'bar-space'\n * Space between bars.\n * Default: 1\n */\n barSpace: {\n type: Number,\n default: 1\n },\n /**\n * prop: 'bar-color'\n * Bar fill color. Can be string RGB color or canvas gradients array.\n */\n barColor: {\n type: [String, Array],\n default: '#0A0AFF'\n },\n /**\n * prop: 'caps-height'\n * Create caps on bars with given height in pixels.\n * If zero caps then skip creating bars.\n * Default: 0\n */\n capsHeight: {\n type: Number,\n default: 0\n },\n /**\n * prop: 'caps-drop-speed'\n * Caps drop down animation speed.\n * Default: 0.9\n */\n capsDropSpeed: {\n type: Number,\n default: 0.9\n },\n /**\n * prop: 'caps-color'\n * Caps rectangles RGB color.\n */\n capsColor: {\n type: String,\n default: '#A0A0FF'\n },\n /**\n * prop: 'brick-height'\n * Draw bar as bricks with set height.\n */\n brickHeight: {\n type: Number,\n default: 0\n },\n /**\n * prop: 'brick-space'\n * Space between bricks.\n */\n brickSpace: {\n type: Number,\n default: 1\n },\n /**\n * prop: 'symmetric'\n * Draw bars symmetric to canvas vertical center\n * Default: false\n */\n symmetric: {\n type: Boolean,\n default: false\n },\n /**\n * prop: 'fft-size'\n * Represents the window size in samples that is used when performing\n * a Fast Fourier Transform (FFT) to get frequency domain data.\n * Must be power of 2 between 2^5 and 2^15\n * Default: 1024\n */\n fftSize: {\n type: Number,\n default: 1024\n }\n}\n\n/**\n * Component AvBars\n */\nconst AvBars = {\n name: 'av-bars',\n mixins: [BaseMixin],\n props,\n data() {\n return {\n audio: null,\n analyser: null,\n ctx: null,\n audioCtx: null,\n caps: Array.apply(null, Array(this.fftSize / 2)).map(() => 0)\n }\n },\n methods: {\n /**\n * Main loop. Draws visualization.\n */\n mainLoop: function() {\n const frqBits = this.analyser.frequencyBinCount\n const data = new Uint8Array(frqBits)\n const barWidth =\n this.barWidth >= this.canvWidth ? this.canvWidth : this.barWidth\n const step = Math.round(\n ((barWidth + this.barSpace) / frqBits) * this.canvWidth\n )\n const barFill = Array.isArray(this.barColor)\n ? this.fillGradient(this.barColor)\n : this.barColor\n let x = 0\n\n this.analyser.getByteFrequencyData(data)\n this._fillCanvasBG()\n\n data.forEach((_, index) => {\n if (index % step) return\n const bits = Math.round(\n data.slice(index, index + step).reduce((v, t) => t + v, 0) / step\n )\n const barHeight = (bits / 255) * this.canvHeight\n if (this.capsHeight) {\n this._drawCap(index, barWidth, x, bits)\n }\n this.ctx.fillStyle = barFill\n this._drawBar(barWidth, barHeight, x)\n x += barWidth + this.barSpace\n })\n requestAnimationFrame(this.mainLoop)\n },\n /**\n * Canvas background fill\n * @private\n */\n _fillCanvasBG: function() {\n const w = this.canvWidth\n const h = this.canvHeight\n this.ctx.clearRect(0, 0, w, h)\n if (this.canvFillColor) {\n this.ctx.fillStyle = Array.isArray(this.canvFillColor)\n ? this.fillGradient(this.canvFillColor)\n : this.canvFillColor\n this.ctx.fillRect(0, 0, w, h)\n }\n },\n /**\n * Draw bar. Solid bar or brick bar.\n * @private\n */\n _drawBar: function(barWidth, barHeight, barX) {\n if (this.brickHeight) {\n this._drawBrickBar(barWidth, barHeight, barX)\n } else {\n this.ctx.fillRect(\n barX,\n this.canvHeight - barHeight - this._symAlign(barHeight),\n barWidth,\n barHeight\n )\n }\n },\n /**\n * Draw bricks bar.\n * @private\n */\n _drawBrickBar: function(barWidth, barHeight, barX) {\n for (let b = 0; b < barHeight; b += this.brickHeight + this.brickSpace) {\n this.ctx.fillRect(\n barX,\n this.canvHeight - barHeight + b - this._symAlign(barHeight),\n barWidth,\n this.brickHeight\n )\n }\n },\n /**\n * Draw cap for each bar and animate caps falling down.\n * @private\n */\n _drawCap: function(index, barwidth, barX, barY) {\n const cap =\n this.caps[index] <= barY ? barY : this.caps[index] - this.capsDropSpeed\n const y = (cap / 255.0) * this.canvHeight\n const capY = this.canvHeight - y - this.capsHeight - this._symAlign(y)\n this.ctx.fillStyle = this.capsColor\n this.ctx.fillRect(barX, capY, barwidth, this.capsHeight)\n if (this.symmetric) {\n this.ctx.fillRect(\n barX,\n this.canvHeight - capY - this.capsHeight,\n barwidth,\n this.capsHeight\n )\n }\n this.caps[index] = cap\n },\n /**\n * Shift for symmetric alignment\n * @private\n */\n _symAlign: function(barHeight) {\n return this.symmetric ? (this.canvHeight - barHeight) / 2 : 0\n }\n }\n}\n\nexport default AvBars\n","import BaseMixin from './AvBase'\n\n/**\n * Component props\n */\nconst props = {\n /**\n * prop: 'line-width'\n * Draw line width in px\n */\n lineWidth: {\n type: Number,\n default: 2\n },\n /**\n * prop: 'line-color'\n * Draw line color or gradient array\n */\n lineColor: {\n type: [String, Array],\n default: '#9F9'\n },\n /**\n * prop: 'fft-size'\n * Represents the window size in samples that is used when performing\n * a Fast Fourier Transform (FFT) to get frequency domain data.\n * Must be power of 2 between 2^5 and 2^15\n * Default: 128\n */\n fftSize: {\n type: Number,\n default: 128\n }\n}\n\n/**\n * Component AvLine\n */\nconst AvLine = {\n name: 'av-line',\n mixins: [BaseMixin],\n props,\n data() {\n return {\n audio: null,\n analyser: null,\n ctx: null,\n audioCtx: null\n }\n },\n methods: {\n /**\n * Main loop. Draws visualization.\n */\n mainLoop: function() {\n const frqBits = this.analyser.frequencyBinCount\n const step = this.canvWidth / 2.0 / frqBits\n const data = new Uint8Array(frqBits)\n let x = 0\n\n this._setCanvas()\n this.analyser.getByteFrequencyData(data)\n\n this.ctx.lineWidth = this.lineWidth\n this.ctx.strokeStyle = Array.isArray(this.lineColor)\n ? this.fillGradient(this.lineColor)\n : this.lineColor\n this.ctx.beginPath()\n\n data.reverse()\n this.ctx.moveTo(x, this.canvHeight / 2)\n x = this._drawLine(data, x, step)\n data.reverse()\n x = this._drawLine(data, x, step)\n this.ctx.lineTo(this.canvWidth, this.canvHeight / 2)\n this.ctx.stroke()\n\n requestAnimationFrame(this.mainLoop)\n },\n /**\n * Canvas clear background fill\n * @private\n */\n _setCanvas: function() {\n const w = this.canvWidth\n const h = this.canvHeight\n const canvColor = this.canvFillColor\n const gradient = this.ctx.createLinearGradient(w / 2, 0, w / 2, h)\n let offset = 0\n this.ctx.clearRect(0, 0, w, h)\n\n if (!canvColor) return\n\n if (Array.isArray(canvColor)) {\n canvColor.forEach(color => {\n gradient.addColorStop(offset, color)\n offset += 1 / canvColor.length\n })\n this.ctx.fillStyle = gradient\n } else {\n this.ctx.fillStyle = canvColor\n }\n this.ctx.fillRect(0, 0, w, h)\n },\n /**\n * Draw line and return last X\n * @private\n */\n _drawLine: function(data, x, step) {\n const h = this.canvHeight\n let y = 0\n data.forEach((v, i) => {\n // (h / 2) - v / 255 * (h / 2)\n y = (h * (255 - v)) / 510\n if (i % 2) y = h - y\n this.ctx.lineTo(x, y)\n x += step\n })\n return x\n }\n }\n}\n\nexport default AvLine\n","import BaseMixin from './AvBase'\n\n/**\n * Component props\n */\nconst props = {\n /**\n * prop: 'fft-size'\n * Represents the window size in samples that is used when performing\n * a Fast Fourier Transform (FFT) to get frequency domain data.\n * Must be power of 2 between 2^5 and 2^15\n * Default: 1024\n */\n fftSize: {\n type: Number,\n default: 1024\n },\n /**\n * prop: 'canv-width'\n * Canvas element width. Default 100\n */\n canvWidth: {\n type: Number,\n default: 100\n },\n /**\n * prop: 'canv-height'\n * Canvas element height. Default 100\n */\n canvHeight: {\n type: Number,\n default: 100\n },\n /**\n * prop: 'radius'\n * Set cercle radius. If zero will be calculated from canvas\n * width: (canv-width / 2) * 0.7\n * Default: 0\n */\n radius: {\n type: Number,\n default: 0\n },\n /**\n * prop: 'line-width'\n * Frequency bit line width to draw.\n */\n lineWidth: {\n type: Number,\n default: 1\n },\n /**\n * prop: 'line-space'\n * Space between lines to draw.\n */\n lineSpace: {\n type: Number,\n default: 1\n },\n /**\n * prop: 'outline-color'\n * Outline (contour) style RGB color.\n * Default: #00f\n */\n outlineColor: {\n type: String,\n default: '#0000FF'\n },\n /**\n * prop: 'outline-width'\n * Outline (contour) line width. Float value.\n * Default: 0.3\n */\n outlineWidth: {\n type: Number,\n default: 0.3\n },\n /**\n * prop: 'bar-width'\n * Frequency graph bar width.\n */\n barWidth: {\n type: Number,\n default: 1\n },\n /**\n * prop: 'bar-length'\n * Frequency graph bar length.\n * Default is a difference between radius and canvas width.\n */\n barLength: {\n type: Number,\n default: 0\n },\n /**\n * prop: 'bar-color'\n * Bar style RGB color or radient gradient when array.\n * Default: [ #FFFFFF, #0000FF ]\n */\n barColor: {\n type: [String, Array],\n default: () => ['#FFFFFF', '#0000FF']\n },\n /**\n * prop: 'progress'\n * Draw play progress meter.\n * Default: false\n */\n progress: {\n type: Boolean,\n default: true\n },\n /**\n * prop: 'progress-width'\n * Progress meter width.\n * Default: 1\n */\n progressWidth: {\n type: Number,\n default: 1\n },\n /**\n * prop: 'progress-color'\n * Progress meter color.\n * Default: 1\n */\n progressColor: {\n type: String,\n default: '#0000FF'\n },\n /**\n * prop: 'progress-clockwise'\n * Progress meter arc draw direction. Default clockwise\n * Default: true\n */\n progressClockwise: {\n type: Boolean,\n default: false\n },\n /**\n * prop: 'outline-meter-space'\n * Space between outline and progress meter.\n * Default: 2\n */\n outlineMeterSpace: {\n type: Number,\n default: 3\n },\n /**\n * prop: 'playtime'\n * Draw playtime text in the center of the circle.\n * Default: false\n */\n playtime: {\n type: Boolean,\n default: false\n },\n /**\n * prop: 'playtime-font'\n * Played time print font.\n * Default: '14px Monaco'\n */\n playtimeFont: {\n type: String,\n default: '14px Monaco'\n },\n /**\n * prop: 'playtime-color'\n * Played time font color.\n * Default: '#00f'\n */\n playtimeColor: {\n type: String,\n default: '#00f'\n },\n /**\n * prop: 'rotate-graph'\n * Rotate graph clockwise enable.\n * Default: false\n */\n rotateGraph: {\n type: Boolean,\n default: false\n },\n /**\n * prop: 'rotate-speed'\n * Rotate graph speed.\n * Default: 0.001\n */\n rotateSpeed: {\n type: Number,\n default: 0.001\n }\n}\n\n/**\n * Component AvCircle\n */\nconst AvCircle = {\n name: 'av-circle',\n mixins: [BaseMixin],\n props,\n data() {\n return {\n rotate: 1.5,\n audio: null,\n analyser: null,\n ctx: null,\n audioCtx: null\n }\n },\n methods: {\n /**\n * Main loop. Draws visualization.\n */\n mainLoop: function() {\n const cx = this.canvWidth / 2 // center X\n const cy = this.canvHeight / 2 // center Y\n const r = this.radius\n ? this.radius\n : Math.round((this.canvWidth / 2) * 0.7)\n const lineWidth = this.lineWidth\n const lineSpace = this.lineSpace\n const arcStep = Math.ceil(lineWidth + lineSpace)\n const frqBits = this.analyser.frequencyBinCount\n const data = new Uint8Array(frqBits)\n const step = ((lineWidth + lineSpace) / data.length) * (2 * Math.PI)\n const barLen =\n this.barLength > 0 ? this.barLength : this.canvWidth / 2 - r\n let angle = Math.PI * this._rotate() // start from top\n\n this._setCanvas()\n this.analyser.getByteFrequencyData(data)\n\n // contour outline\n if (this.outlineWidth > 0) {\n this._drawOutline(r, cx, cy)\n }\n\n // draw play progress meter\n if (this.progress) {\n this._drawProgress(r, cx, cy)\n }\n\n // draw played time\n if (this.playtime) {\n this._drawPlaytime(cx, cy)\n }\n\n // circle bar lines\n this.ctx.lineWidth = this.barWidth\n this.ctx.strokeStyle = this._setBarColor(cx, cy)\n\n data.forEach((_, index) => {\n angle += step\n if (index % arcStep) {\n return\n }\n const bits = Math.round(\n data.slice(index, index + arcStep).reduce((v, t) => t + v, 0) /\n arcStep\n )\n\n const blen = r + (bits / 255.0) * barLen\n this.ctx.beginPath()\n this.ctx.moveTo(r * Math.cos(angle) + cx, r * Math.sin(angle) + cy)\n this.ctx.lineTo(\n blen * Math.cos(angle) + cx,\n blen * Math.sin(angle) + cy\n )\n this.ctx.stroke()\n })\n\n requestAnimationFrame(this.mainLoop)\n },\n /**\n * Canvas clear background fill\n * @private\n */\n _setCanvas: function() {\n this.ctx.clearRect(0, 0, this.canvWidth, this.canvHeight)\n\n if (!this.canvFillColor) return\n\n this.ctx.fillStyle = Array.isArray(this.canvFillColor)\n ? this.fillGradient(this.canvFillColor)\n : this.canvFillColor\n this.ctx.fillRect(0, 0, this.canvWidth, this.canvHeight)\n },\n /**\n * Draw play progress meter\n */\n _drawProgress: function(r, cx, cy) {\n const elapsed =\n (this.audio.currentTime / this.audio.duration) * 2 * Math.PI\n const angleEnd = Math.PI * 1.5 + elapsed\n\n if (!elapsed) return\n\n this.ctx.lineWidth = this.progressWidth\n this.ctx.strokeStyle = this.progressColor\n\n this.ctx.beginPath()\n this.ctx.arc(\n cx,\n cy,\n r - this.outlineWidth - this.outlineMeterSpace,\n 1.5 * Math.PI,\n angleEnd,\n this.progressClockwise\n )\n this.ctx.stroke()\n },\n /**\n * Draw outline circle\n */\n _drawOutline: function(r, cx, cy) {\n this.ctx.beginPath()\n this.ctx.strokeStyle = this.outlineColor\n this.ctx.lineWidth = this.outlineWidth\n this.ctx.arc(cx, cy, r, 0, 2 * Math.PI)\n this.ctx.stroke()\n },\n /**\n * Draw played time\n */\n _drawPlaytime: function(cx, cy) {\n const m = Math.floor(this.audio.currentTime / 60)\n const sec = Math.floor(this.audio.currentTime) % 60\n const s = sec < 10 ? `0${sec}` : `${sec}`\n const text = `${m}:${s}`\n const tsizew = Math.ceil(this.ctx.measureText(text).width)\n\n this.ctx.font = this.playtimeFont\n this.ctx.fillStyle = this.playtimeColor\n this.ctx.fillText(\n text,\n cx - Math.round(tsizew / 2),\n cy + 0.25 * parseInt(this.playtimeFont)\n )\n },\n /**\n * If rotate is enabled will return rotated angle\n */\n _rotate: function() {\n if (this.rotateGraph) {\n this.rotate = this.rotate === 3.5 ? 1.5 : this.rotate + this.rotateSpeed\n } else {\n this.rotate = 1.5\n }\n return this.rotate\n },\n /**\n * Set bars color.\n */\n _setBarColor: function(cx, cy) {\n if (!Array.isArray(this.barColor)) {\n return this.barColor\n }\n const gradient = this.ctx.createRadialGradient(\n cx,\n cy,\n this.canvWidth / 2,\n cx,\n cy,\n 0\n )\n let offset = 0\n\n this.barColor.forEach(color => {\n gradient.addColorStop(offset, color)\n offset += 1 / this.barColor.length\n })\n return gradient\n }\n }\n}\n\nexport default AvCircle\n","import axios from 'axios'\nimport BaseMixin from './AvBase'\n\n/**\n * Component props\n */\nconst props = {\n /**\n * prop: 'canv-width'\n * Canvas element width. Default 500\n */\n canvWidth: {\n type: Number,\n default: 500\n },\n /**\n * prop: 'canv-height'\n * Canvas element height. Default 80\n */\n canvHeight: {\n type: Number,\n default: 80\n },\n /**\n * prop: 'played-line-width'\n * Waveform line width for played segment of audio\n * Default: 0.5\n */\n playedLineWidth: {\n type: Number,\n default: 0.5\n },\n /**\n * prop: 'played-line-color'\n * Waveform line color for played segment of audio\n * Default: navy\n */\n playedLineColor: {\n type: String,\n default: 'navy'\n },\n /**\n * prop: 'noplayed-line-width'\n * Waveform line width for not yet played segment of audio\n * Default: 0.5\n */\n noplayedLineWidth: {\n type: Number,\n default: 0.5\n },\n /**\n * prop: 'noplayed-line-color'\n * Waveform line color for not yet played segment of audio\n * Default: lime\n */\n noplayedLineColor: {\n type: String,\n default: 'lime'\n },\n /**\n * prop: 'playtime'\n * Display played time next to progress slider.\n * Default: true\n */\n playtime: {\n type: Boolean,\n default: true\n },\n /**\n * prop: 'playtime-with-ms'\n * Display milliseconds in played when true.\n * For example: 02:55.054\n * Default: true\n */\n playtimeWithMs: {\n type: Boolean,\n default: true\n },\n /**\n * prop: 'playtime-font-size'\n * Played time print font size in pixels.\n * Default: 12\n */\n playtimeFontSize: {\n type: Number,\n default: 12\n },\n /**\n * prop: 'playtime-font-family'\n * Played time print font family.\n * Default: monospace\n */\n playtimeFontFamily: {\n type: String,\n default: 'monospace'\n },\n /**\n * prop: 'playtime-font-color'\n * Played time print font RGB color string.\n * Default: grey\n */\n playtimeFontColor: {\n type: String,\n default: 'grey'\n },\n /**\n * prop: 'playtime-text-bottom'\n * Position playtime text bottom.\n * Default on top.\n * Default: false\n */\n playtimeTextBottom: {\n type: Boolean,\n default: false\n },\n /**\n * prop: 'playtime-slider'\n * Draw played slider\n * Default: true\n */\n playtimeSlider: {\n type: Boolean,\n default: true\n },\n /**\n * prop: 'playtime-slider-color'\n * Played slider color\n * Default: red\n */\n playtimeSliderColor: {\n type: String,\n default: 'red'\n },\n /**\n * prop: 'playtime-slider-width'\n * Played slider width\n * Default: 1\n */\n playtimeSliderWidth: {\n type: Number,\n default: 1\n },\n /**\n * prop: 'playtime-clickable'\n * Allow click on waveform to change playtime.\n * Default: true\n */\n playtimeClickable: {\n type: Boolean,\n default: true\n }\n}\n\n/**\n * Component AvLine\n */\nconst AvWaveform = {\n name: 'av-waveform',\n mixins: [BaseMixin],\n props,\n data() {\n return {\n ctxWrapper: null,\n ctx: null,\n audio: null,\n duration: null,\n peaks: []\n }\n },\n mounted() {\n const conf = {\n responseType: 'arraybuffer',\n onDownloadProgress: this.downloadProgress\n }\n // axios\n // .get(this.audio.src + '?nocache=' + new Date().getTime() + '/', conf)\n // .then(response => {\n // this.decode(response)\n // })\n // .catch(err => {\n // console.error(`Failed to get file '${this.audio.src}'`)\n // console.log(err)\n\n // console.log(err.response.status)\n // // response data\n // const data = err.response.data\n // console.log(err.response.data)\n // })\n\n fetch(this.audio.src, {\n headers: {\n 'Content-Type': 'audio/mpeg'\n },\n responseType: 'arraybuffer'\n })\n .then(response => {\n return response.arrayBuffer()\n })\n .then(response => {\n this.decode(response)\n })\n },\n methods: {\n // Stub set analyser method from Mixin AvBase\n // as there is no need of analyser in that component\n // this method is called from mixin mounted()\n setAnalyser: function() {\n /* istanbul ignore next */\n return null\n },\n // Stub mainLoop method from Mixin AvBase as\n // here different init method will be used.\n // This method is called from mixin mounted()\n mainLoop: function() {\n /* istanbul ignore next */\n return null\n },\n /**\n * Decode audio source response array buffer\n */\n decode: function(response) {\n /* istanbul ignore next */\n const ctx = new AudioContext()\n /* istanbul ignore next */\n // ctx\n // .decodeAudioData(response)\n // .then(audioBuffer => {\n // console.log('rawr')\n // this.setPeaks(audioBuffer)\n // })\n // .catch(err => {\n // console.error('Failed to decode audio data.')\n // console.log(err)\n // })\n\n ctx.decodeAudioData(\n response,\n audioBuffer => {\n this.setPeaks(audioBuffer)\n },\n error => console.error(error)\n )\n },\n /**\n * Set peaks array for waveform.\n * For now use only one channel\n */\n setPeaks: function(buffer) {\n const peaks = []\n let min = 0\n let max = 0\n let top = 0\n let bottom = 0\n const segSize = Math.ceil(buffer.length / this.canvWidth)\n const width = this.canvWidth\n const height = this.canvHeight\n this.$emit('duration', buffer.duration)\n this.duration = buffer.duration\n\n for (let c = 0; c < buffer.numberOfChannels; c++) {\n const data = buffer.getChannelData(c)\n for (let s = 0; s < width; s++) {\n const start = ~~(s * segSize)\n const end = ~~(start + segSize)\n min = 0\n max = 0\n for (let i = start; i < end; i++) {\n min = data[i] < min ? data[i] : min\n max = data[i] > max ? data[i] : max\n }\n // merge multi channel data\n if (peaks[s]) {\n peaks[s][0] = peaks[s][0] < max ? max : peaks[s][0]\n peaks[s][1] = peaks[s][1] > min ? min : peaks[s][1]\n }\n peaks[s] = [max, min]\n }\n }\n // set peaks relativelly to canvas dimensions\n for (let i = 0; i < peaks.length; i++) {\n max = peaks[i][0]\n min = peaks[i][1]\n top = height / 2 - (max * height) / 2\n bottom = height / 2 - (min * height) / 2\n peaks[i] = [top, bottom === top ? top + 1 : bottom]\n }\n this.peaks = peaks\n\n if (this.playtimeClickable) {\n this.ctxWrapper.addEventListener('click', e => this.updateTime(e))\n }\n this.waveform()\n },\n /**\n * Draw wave form.\n */\n waveform: function() {\n const peaks = this.peaks\n const time = this.audio.currentTime\n const playX = this.playX(time)\n let x = 0\n this.ctx.clearRect(0, 0, this.canvWidth, this.canvHeight)\n x = this.draw(\n peaks.slice(0, playX),\n this.playedLineWidth,\n this.playedLineColor,\n x\n )\n this.draw(\n peaks.slice(playX),\n this.noplayedLineWidth,\n this.noplayedLineColor,\n x\n )\n this.drawSlider(time)\n this.drawTime(time)\n\n requestAnimationFrame(this.waveform)\n },\n /**\n * Draw segment.\n */\n draw: function(data, lineWidth, color, x) {\n this.ctx.lineWidth = lineWidth\n this.ctx.strokeStyle = color\n this.ctx.beginPath()\n data.forEach(v => {\n this.ctx.moveTo(x, v[0])\n this.ctx.lineTo(x, v[1])\n x++\n })\n this.ctx.stroke()\n return x\n },\n /**\n * Formatted string of current play time.\n * @param {Number} Current play time\n * @return {String}\n */\n timeFormat: function(timeSec) {\n let frmStr = ''\n const time = parseFloat(timeSec)\n if (isNaN(time)) {\n return frmStr\n }\n\n const min = ~~(time / 60)\n const sec = ~~(time % 60)\n const ms = ~~((time % 1) * 1000)\n\n frmStr = min < 10 ? `0${min}:` : `${min}:`\n frmStr += `0${sec}`.substr(-2)\n if (this.playtimeWithMs) {\n frmStr += '.' + `00${ms}`.substr(-3)\n }\n\n return frmStr\n },\n /**\n * Draw play time next to slider.\n * @param {Number} Played time sec.millisec.\n * @return {Void}\n */\n drawTime: function(time) {\n const timeStr = this.timeFormat(time)\n const offset = 3\n const textWidth = ~~this.ctx.measureText(timeStr).width\n const playX = this.playX(time)\n const textX =\n playX > this.canvWidth - textWidth - offset\n ? playX - textWidth - offset\n : playX + offset\n const textY = this.playtimeTextBottom\n ? this.canvHeight - this.playtimeFontSize + offset\n : this.playtimeFontSize + offset\n this.ctx.fillStyle = this.playtimeFontColor\n this.ctx.font = `${this.playtimeFontSize}px ${this.playtimeFontFamily}`\n this.ctx.fillText(timeStr, textX, textY)\n },\n /**\n * Draw played slider.\n * @param {Number} Played time sec.millisec.\n * @return {Void}\n */\n drawSlider: function(time) {\n const playX = this.playX(time)\n this.ctx.lineWidth = this.playtimeSliderWidth\n this.ctx.strokeStyle = this.playtimeSliderColor\n this.ctx.beginPath()\n this.ctx.moveTo(playX, 0)\n this.ctx.lineTo(playX, this.canvHeight)\n this.ctx.stroke()\n },\n /**\n * Get x coodrinate for play time.\n * @param {Number}\n * @return {Number}\n */\n playX: function(time) {\n return ~~((time / this.duration) * this.canvWidth)\n },\n /**\n * Audio playback update time callback.\n * @param event\n */\n updateTime: function(e) {\n this.audio.currentTime = (e.offsetX / this.canvWidth) * this.duration\n },\n /**\n * Audio source download progress\n */\n downloadProgress: function(ev) {\n const progressX = Math.round((ev.loaded / ev.total) * this.canvWidth)\n this.ctx.clearRect(0, 0, this.canvWidth, this.canvHeight)\n this.ctx.beginPath()\n this.ctx.strokeStyle = this.noplayedLineColor\n this.ctx.moveTo(0, this.canvHeight / 2)\n this.ctx.lineTo(progressX, this.canvHeight / 2)\n this.ctx.stroke()\n }\n }\n}\nexport default AvWaveform\n","import AvBars from './components/AvBars'\nimport AvLine from './components/AvLine'\nimport AvCircle from './components/AvCircle'\nimport AvWaveform from './components/AvWaveform'\n\nconst AVPlugin = {}\n\nAVPlugin.install = function(Vue) {\n // browsers compatibility\n window.AudioContext =\n window.AudioContext ||\n window.webkitAudioContext ||\n window.mozAudioContext ||\n window.msAudioContext\n window.requestAnimationFrame =\n window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.msRequestAnimationFrame\n // Components\n Vue.component(AvBars.name, AvBars)\n Vue.component(AvLine.name, AvLine)\n Vue.component(AvCircle.name, AvCircle)\n Vue.component(AvWaveform.name, AvWaveform)\n Vue.prototype.$avAudioRefs = {}\n}\n\nexport default AVPlugin\n","import Vue from 'vue'\r\n// const AudioVisual = require('vue-audio-visual')\r\n\r\n// import AVPlugin from 'vue-audio-visual'\r\nimport AVPlugin from '@/modules/vue-audio-visual'\r\n\r\nVue.use(AVPlugin)\r\n","export default function ({ route, redirect }) {\r\n // Normalize the route path by removing the trailing slash (except if it's just '/')\r\n let normalizedPath = route.path;\r\n if (normalizedPath.length > 1 && normalizedPath.endsWith('/')) {\r\n normalizedPath = normalizedPath.slice(0, -1);\r\n }\r\n\r\n // Define your custom redirect rules.\r\n // Each rule uses a regex (that accepts an optional trailing slash) and a replacement.\r\n const redirects = [\r\n {\r\n // For review URLs: e.g. /review/abc or /review/abc/ → /studio/edit/abc\r\n from: /^\\/review\\/(.+?)\\/?$/,\r\n to: \"/studio/edit/$1\"\r\n },\r\n {\r\n // For curriculums: e.g. /curriculums or /curriculums/ → /lessons\r\n from: /^\\/curriculums\\/?$/,\r\n to: \"/lessons\"\r\n },\r\n {\r\n // For stories:\r\n // This rule matches:\r\n // - \"/stories\" or \"/stories/\" \r\n // - \"/stories/slug\" or \"/stories/slug/\"\r\n // and always redirects to the /projects version (without a trailing slash)\r\n from: /^\\/stories(\\/.*)?\\/?$/,\r\n to: \"/projects$1\"\r\n },\r\n ];\r\n\r\n // Check if one of the rules applies.\r\n let newLocation = normalizedPath;\r\n let ruleFound = false;\r\n for (const rule of redirects) {\r\n if (rule.from.test(normalizedPath)) {\r\n newLocation = normalizedPath.replace(rule.from, rule.to);\r\n ruleFound = true;\r\n break;\r\n }\r\n }\r\n\r\n // Ensure the new location does NOT have a trailing slash (unless it is the root '/').\r\n if (newLocation !== '/' && newLocation.endsWith('/')) {\r\n newLocation = newLocation.slice(0, -1);\r\n }\r\n\r\n // If a rule was matched and the new location differs from the normalized path, redirect.\r\n if (ruleFound && newLocation !== normalizedPath) {\r\n return redirect(301, newLocation);\r\n }\r\n\r\n // Global catch: if no custom rule was triggered but the route originally ended with a slash,\r\n // redirect to the version without a trailing slash.\r\n if (!ruleFound && route.path.length > 1 && route.path.endsWith('/')) {\r\n return redirect(301, normalizedPath);\r\n }\r\n}\r\n","// style-loader: Adds some css to the DOM by adding a