{"version":3,"sources":["wwwroot/scripts/youli.trip.program.js","wwwroot/scripts/youli.trip.itinerary.js","wwwroot/scripts/youli.trip.invitees.js","wwwroot/scripts/youli.trip.js","wwwroot/scripts/vendor/imagesloaded.pkgd.js","wwwroot/scripts/vendor/isotope.pkgd.min.js","wwwroot/scripts/vendor/bootstrap-editable.js","wwwroot/scripts/youli.editable-fullname.js","wwwroot/scripts/youli.trip.schedule.response.js","wwwroot/scripts/youli.trip.tasks.js","wwwroot/scripts/vendor/jquery.multistatecheck.js","wwwroot/scripts/youli.tripdates.js","wwwroot/scripts/youli.updateavatarinline.js","wwwroot/scripts/youli.s3resourceupload.js"],"names":["YouLi","Trip","Program","ProgramItems","ItemHeight","ProgramSelectedDate","ProgramFilteredIds","SaveDone","TargetElementForResponse","undefined","GoToDate","selectedDate","FilterItems","$","removeClass","find","addClass","itemsToShow","grep","n","i","startDateTime","moment","StartDateTime","endDateTime","EndDateTime","selectedDateMoment","isSame","isBetween","map","ScheduleItemId","$programGrid","isotope","filter","indexOf","this","attr","UpdateMenuNav","StyleName","length","CurrentSection","scrollerNavLeft","position","left","currentLeft","lastItem","lastItemRight","outerWidth","toggleClass","css","containerWidth","width","RefreshLayout","window","height","$cachedWindowWidth","RefreshItemExpandVisibility","data","element","each","toggle","ShowItemDetails","gridItemElement","clone","appendTo","empty","remove","$currentlySelectedItem","multiStateCheck","states","onAfterChangeState","e","Schedule","Response","MultiStateCheckUpdateAndTakeAction","target","val","programItemId","document","on","revert","ProgramItemDialogGoToNext","$nextItem","first","next","ProgramItemDialogGoToPrev","$prevItem","prev","last","popover","trigger","template","closest","hide","modal","is","keyCode","imagesLoaded","itemSelector","percentPosition","masonry","newLeft","Math","min","resize","ShowInviteesAllTab","Common","UI","ShowLoading","itemElement","inviteeId","ajax","url","type","dataType","contentType","complete","response","HideLoading","status","responseJSON","success","ShowStandardDialog","html","responseText","Itinerary","ItineraryItems","ScheduleItemsOnMap","ItinerarySelectedDate","OutstandingResponseItineraryItemId","IdentifyItem","itineraryItemId","fadeTo","HighlightFlag","idsToShow","elementsToShow","elementsToHide","show","children","isOffsetFromLeft","isCutoffOnRight","DoItemResponse","responseValue","targetElement","RequestedFrom","InviteeId","ResponseValue","ApplyToGang","JSON","stringify","location","href","errorMessage","openPanelIds","id","get","join","collapse","UpdateResponseFooter","runOnce","checkTripUpdates","AddItineraryItemToCalendar","calendarType","itineraryItemElement","item","itemDescription","Utils","StripHTML","Description","newLineConst","eventDescription","Location","CurrentInviteeMagicLink","event","title","Name","start","Date","StartDateTimeUTC","end","EndDateTimeUTC","address","description","AddToCalendar","currentDisplayedResponse","has","hasClass","text","parent","off","InviteeHasRespondedYes","Maps","InitialiseItinerary","Invitees","RefreshFiltersForCategory","category","tripId","previewMode","refreshFiltersURL","encodeURIComponent","fetch","then","ok","Error","json","inviteesListFiltersHtml","catch","error","console","SearchInvitees","inviteesListHtml","InitialDate","SkipToItinerary","ShowCompleted","InviteeHasResponded","IsTemplate","ShowImageErrorReport","PaymentStyle","PricingMode","CheckoutFlowPageURL","IsAnonymousAccess","RequireResponseLastName","RequireConsent","PreviousSection","StylesNameSalesPageDrSheri","RespondedRecently","CheckoutSuccessfulRecently","GangPlaceholdersDialogOnLoad","FooterUpdatesPaused","PaymentsListUpdateCount","DelaysForPaymentsListUpdate","FooterUpdateTimeout","TripHasMobileAppEnabled","IsCurrentUserTripPlanner","IsCurrentUserTripOwner","AffixTop","affixTop","doScroll","StripBlankLinkTargets","removeAttr","log","GoToSection","section","scrollOverride","updatePreviousSection","replace","select","gaData","GetGAData","dataLayer","push","ecommerce","selectedSectionMenuItem","hash","substr","selectedContent","scrollTarget","scrollOverrideTargetName","animate","scrollTop","offset","top","RoomingMap","ClearZoom","Payments","CheckForPaymentButtonUpdate","ExpressInterestFormSuccess","result","formSubmitBtn","errors","HideInputLoading","ClearClientSideErrors","FormatClientSideErrors","reload","ExpressInterestFormFailure","xhr","GoToInviteeSection","GoToResourceSection","UpdateCurrentInviteeName","name","UpdateCurrentInviteeMiniBio","minibio","TrimMiniBioDisplay","UpdateCurrentInviteeAvatar","avatarURL","SetupMapEvents","script","createElement","setAttribute","getElementById","append","AddTripToCalendar","AddToCalendarForSpeakeasy","startDateTimeUTC","endDateTimeUTC","calLink","getAddToCalendarURL","click","AdjustFooterForFloatingFooter","outerHeight","hasFocus","lastTripItemUpdateDate","updateUrl","setTimeout","SetupUpdatePaymentsListTimer","RefreshPaymentsList","costPaymentsListHtml","contentCostPaymentDetailsHtml","RefreshPaymentMethod","installmentsTableHtml","costPaymentMethodsHtml","savedPaymentDialogHtml","AffixWindowResizeInitialised","bio","bioLength","innerWidth","TrimToSize","SetupFixNavbarOnTop","FixNavbarOnTop","pageYOffset","ToggleMainMenu","SetupInviteeSectionMenu","UpdateDateTimeAnswer","container","datePicker","timePicker","date","format","ViewProfileForInvitee","tripid","preview","cache","ShowRequestMeetingBookingDialog","itemContainer","meetingBlockId","profileContainer","recipientInviteeId","slotBookingName","RequestMeetingBooking","$form","validator","unobtrusive","parse","validate","valid","customMessageElement","customMessageText","itineraryTabIsHidden","inviteesTabIsHidden","scheduleItemId","meetingBlockHtml","UpdateItineraryContent","contentItineraryHtml","UpdateInviteesContent","inviteesDetailsHtmlString","ShowDeclineMeetingRequestDialog","DeclineMeetingRequest","UndoDeclinedMeetingRequest","undoButton","ShowButtonLoading","HideButtonLoading","ShowScheduleMeetingBookingSlot","displayTime","slotId","meetingBlockSelectorElement","HideScheduleMeetingBookingSlot","ShowEditMeetingBookingSlot","slotDetailsElement","editActionsElement","ShowRescheduleMeetingBookingSlot","ShowCancelMeetingBookingSlotDialog","slotContainerElement","reschedulerElement","meetingBlockBookingId","meetingBlockReschedulerHtml","HideEditMeetingBookingSlot","cancelMeetingButtonElement","slotDisplayTime","CancelMeetingBookingSlot","viewedProfileId","SetMeetingBookingSlotAvailability","dataset","SlotId","Status","MeetingBlockBookingId","ScheduleMeetingBookingSlot","scheduleMeetingButtonElement","UpdateTaskContent","taskTabIsHidden","Tasks","FilterTasks","UpdateProgramContent","programTabIsHidden","inviteeTabIsHidden","UpdateMenuContent","RefreshMenuAffix","ResizeSalesPageMenuWithLogo","menuItemLinks","GetClientWidth","display","firstLi","UpdateSalesPageBannerPosition","parseInt","affix","bottom","options","IsYouLiMobileApp","IsYouLiBundler","IsMobile","UpgradeSubscription","GoToUpgradePage","pathname","search","userAffiliateCode","statusText","TripDates","Initialise","substring","viewInviteeId","URLSearchParams","SendPaymentReceipt","preventDefault","itemToList","itemStartDate","itemId","update","submit","inviteeid","switchToInviteeId","updateLink","assign","triggerElement","max","Cookies","set","expires","numberInGroup","inviteeFullName","gangDetailsHtmlString","gangMemberHtmlString","which","GetParameterFromURL","images","querySelectorAll","forEach","img","addEventListener","src","classList","brokenImageUrls","image","contains","hasAttribute","getAttribute","naturalWidth","naturalHeight","add","croppingNote","global","factory","define","amd","module","exports","EvEmitter","proto","prototype","eventName","listener","events","_events","listeners","once","onceEvents","_onceEvents","index","splice","emitEvent","args","onceListeners","isOnce","apply","allOff","removeAllListeners","require","jQuery","extend","a","b","prop","ImagesLoaded","elem","onAlways","elements","obj","ary","Array","isArray","makeArray","getImages","jqDeferred","Deferred","check","bind","Object","create","addElementImages","nodeName","addImage","background","addElementBackgroundImages","nodeType","elementNodeTypes","childImgs","child","1","9","11","LoadingImage","Background","Image","style","getComputedStyle","reURL","matches","exec","backgroundImage","addBackground","loadingImage","_this","onProgress","message","progress","progressedCount","hasAnyBroken","isLoaded","notify","debug","isComplete","jqMethod","getIsImageComplete","confirm","proxyImage","handleEvent","method","onload","unbindEvents","onerror","removeEventListener","makeJQueryPlugin","fn","callback","promise","t","jQueryBridget","s","option","isPlainObject","o","u","h","d","charAt","l","r","call","arguments","_init","bridget","slice","getSize","parseFloat","isNaN","padding","borderStyle","borderWidth","boxSizing","body","documentElement","appendChild","isBoxSizeOuter","removeChild","querySelector","innerHeight","offsetWidth","offsetHeight","isBorderBox","f","c","m","p","paddingLeft","paddingRight","y","paddingTop","paddingBottom","g","marginLeft","marginRight","v","marginTop","marginBottom","_","borderLeftWidth","borderRightWidth","I","borderTopWidth","borderBottomWidth","z","x","S","matchesSelector","Element","fizzyUIUtils","modulo","removeFrom","getParent","parentNode","getQueryElement","filterFindElements","HTMLElement","debounceMethod","clearTimeout","docReady","readyState","toDashed","toLowerCase","htmlInit","concat","className","Outlayer","Item","layout","_create","transition","transform","WebkitTransition","transitionDuration","transitionProperty","transitionDelay","constructor","_transn","ingProperties","clean","onEnd","size","getPosition","_getOption","layoutPosition","getXValue","getYValue","_transitionTo","setPosition","isTransitioning","getTranslate","to","onTransitionEnd","isCleaning","goTo","moveTo","_nonTransition","_removeStyles","from","enableTransition","staggerDelay","onwebkitTransitionEnd","ontransitionend","onotransitionend","-webkit-transform","propertyName","disableTransition","removeTransitionStyles","stagger","removeElem","reveal","isHidden","getHideRevealTransitionEndProperty","onRevealTransitionEnd","hiddenStyle","visibleStyle","opacity","onHideTransitionEnd","destroy","right","$element","defaults","outlayerGUID","namespace","containerStyle","initLayout","originLeft","originTop","resizeContainer","compatOptions","horizontal","layoutInstant","reloadItems","stamps","stamp","bindResize","items","_itemize","_filterFindItemElements","getItemElements","_resetLayout","_manageStamps","_isLayoutInited","layoutItems","_getMeasurement","_getItemsForLayout","_layoutItems","_postLayout","isIgnored","_emitCompleteOnItems","_getItemLayoutPosition","isInstant","isLayoutInstant","_processLayoutQueue","updateStagger","_positionItem","match","_getContainerSize","_setContainerMeasure","dispatchEvent","Event","ignore","getItem","unignore","_find","unstamp","_getBoundingRect","_manageStamp","getBoundingClientRect","_boundingRect","_getElementOffset","isResizeBound","unbindResize","onresize","needsResizeLayout","addItems","appended","prepended","revealItemElements","getItems","hideItemElements","removeData","ms","Isotope","itemGUID","sortData","updateSortData","random","getSortData","_sorters","LayoutMode","filteredItems","needsVerticalResizeLayout","getColumnWidth","getSegmentSize","getRowHeight","getFirstItemSize","modes","Masonry","fitWidth","measureColumns","colYs","cols","maxY","horizontalColIndex","getContainerWidth","columnWidth","gutter","horizontalOrder","col","_getTopColPosition","_getTopColGroup","_getColGroupY","_getHorizontalColPosition","floor","_getContainerFitWidth","isFitWidth","horizontalAlignment","String","trim","layoutMode","isJQueryFiltering","sortAscending","_getSorters","sortHistory","_initLayoutMode","_updateItemsSortData","arrange","_layout","_getIsInstant","_filter","_bindArrangeComplete","_isInstant","_noTransition","_hideReveal","_sort","needReveal","needHide","_getFilterTest","split","textContent","sortDataParsers","sortBy","_getIsSameSortBy","sort","_mode","_filterRevealAdded","insert","shuffle","getFilteredItemElements","EditableForm","div","editableform","$div","scope","initInput","input","value","str2value","prerender","initTemplate","initButtons","$btn","buttons","showbuttons","render","$loading","loading","showLoading","isSaving","triggerHandler","$tpl","when","proxy","autosubmit","cancel","$input","defaultValue","value2input","showForm","postrender","w","activate","msg","lines","$group","$block","errorGroupClass","errorBlockClass","stopPropagation","newValue","input2value","savenochange","value2str","submitValue","value2submit","save","done","res","hasOwnProperty","fail","pk","editableutils","tryParseJson","params","send","ajaxOptions","key","setValue","convertStr","$this","Constructor","engine","inherit","Child","Parent","F","superclass","setCursorPosition","pos","setSelectionRange","createTextRange","range","moveEnd","moveStart","safe","Function","sliceObj","keys","caseSensitive","keyLower","newObj","getConfigData","k","objectKeys","TypeError","escape","str","itemsByValue","sourceData","valueProp","idKey","isValArray","that","itemValue","createInput","TypeConstructor","mode","editabletypes","datefield","dateuifield","dateui","supportsTransitions","toUpperCase","Popup","init","Inline","containerName","containerDataName","innerCss","containerClass","editableContainer","splitOptions","formOptions","initContainer","delayedHide","$target","exclude_classes","parents","closeOthers","containerOptions","tip","$tip","renderForm","nochange","reason","rendering","rendered","closeAll","innerShow","innerHide","setContainerOption","innerDestroy","el","$el","ec","onblur","placement","autohide","anim","special","destroyed","handler","insertAfter","Editable","editable","selector","initLive","highlight","doAutotext","isValueByText","html2value","disabled","autotext","disable","enable","emptyclass","value2htmlFinal","value2html","handleEmpty","isEmpty","toggleDisabled","emptytext","unsavedclass","sent","$e","bgColor","eq","config","$elems","isEmptyObject","values","noop","AbstractInput","tpl","$clear","focus","clear","setClass","inputclass","setAttr","abstractinput","List","deferred","onSourceReady","renderList","resolve","sourceError","source","isFunction","sourceCache","cacheID","doPrepend","callbacks","err_callbacks","sourceOptions","prepend","prependData","","count","iterateItem","list","Text","renderClear","toggleClear","after","keyup","inArray","len","visible","placeholder","Textarea","keydown","ctrlKey","rows","textarea","Select","fillItems","label","Checklist","$label","separator","reg","RegExp","j","checked","checklist","Password","password","Email","email","Url","Tel","tel","NumberInput","step","number","Range","siblings","Time","time","select2","tags","term","query","results","convertSource","isMultiple","multiple","isRemote","idFunc","formatSelection","viewseparator","getSeparator","initSelection","customId","customText","isInitial","Combodate","combodate","day","month","year","hour","minute","second","ampm","$widget","getTemplate","initCombos","getValue","change","smartDays","fillCombo","token","$c","$combo","fillCommon","relTime","firstItem","header","relativeTime","langData","_relativeTime","reverse","fillDay","twoDigit","daysCount","$month","$year","daysInMonth","leadZero","fillMonth","longNames","shortNames","fillYear","maxYear","minYear","yearDescending","fillHour","h12","fillMinute","minuteStep","fillSecond","secondStep","fillAmpm","ampmL","dt","notSelected","def","$ampm","isValid","roundTime","getNearest","$select","delta","opt","distance","optValue","abs","errorClass","borderColor","shift","viewformat","pInitInput","emptyInputClass","stdtypes","classes","DEFAULTS","content","autoToken","autoPlace","test","actualWidth","actualHeight","$parent","orgPlacement","docScroll","parentWidth","parentHeight","parentLeft","calculatedOffset","getCalculatedOffset","applyPlacement","UTCDate","UTC","Datepicker","_process_options","isInline","isInput","component","hasInput","picker","DPGlobal","_buildEvents","_attachEvents","rtl","viewMode","startView","calendarWeeks","_allow_update","setStartDate","startDate","setEndDate","endDate","setDaysOfWeekDisabled","daysOfWeekDisabled","fillDow","fillMonths","showMode","opts","_o","lang","language","dates","minViewMode","weekStart","weekEnd","parseFormat","Infinity","parseDate","_secondaryEvents","_applyEvents","evs","ev","_unapplyEvents","place","mousedown","_detachEvents","_attachSecondaryEvents","_detachSecondaryEvents","_trigger","altdate","local_date","getTime","getTimezoneOffset","altformat","formatDate","detach","forceParse","datepicker","getDate","getUTCDate","setDate","setUTCDate","formatted","getFormattedDate","updateNavArrows","zIndex","fromArgs","viewDate","fill","dowCnt","cell","daysMin","monthsShort","setRange","valueOf","getClassNames","cls","getUTCFullYear","getUTCMonth","currentDate","today","todayHighlight","getFullYear","getMonth","getUTCDay","tooltip","startYear","startMonth","endYear","endMonth","months","todayBtn","clearBtn","prevMonth","getDaysInMonth","nextMonth","clsName","ws","th","yth","calWeek","before","beforeShowDay","enabled","unique","currentYear","yearCont","visibility","dir","navStep","moveMonth","moveYear","_setDate","autoclose","setUTCMonth","setUTCFullYear","new_month","new_date","mag","dateWithinRange","newDate","newViewDate","dateChanged","keyboardNavigation","shiftKey","DateRangePicker","inputs","jquery","dateUpdated","pickers","updateDates","updateRanges","old","internal_return","elopts","prefix","out","opts_from_el","locopts","locale_opts","opts_from_locale","ropts","toArray","en","days","daysShort","navFnc","isLeapYear","validParts","nonpunctuation","separators","parts","part_re","part","filtered","parsed","setters_order","setters_map","yyyy","yy","fparts","cnt","D","DD","M","MM","toString","dd","mm","seps","headTemplate","contTemplate","footTemplate","noConflict","bdatepicker","initPicker","dpg","parsedFormat","parsedViewFormat","currentTarget","DateField","DateTime","datetimepicker","formatType","toUTC","fromUTC","datetime","DateTimeField","datetimefield","Fullname","firstname","lastname","building","fullname","doItemResponse","applyToGang","onDoItemResponse","costsTabIsHiddeen","CurrentInviteeId","RespondingInviteeId","programItemElem","newParticipantsList","newContentItineraryHtml","InitialiseResponseChecks","newPaymentDetailsHtml","newCostSummaryHtml","newPaymentInfoHtml","InitialiseUI","checkElement","suppressApplyToGangPrompt","isGang","invoiceMode","TaskRespondFormSuccess","ErrorMessage","summaryContainer","contentTasksHtml","tripHeadingTitle","tripContentHeadingHtml","currentInviteeProfileHtml","RefreshInviteesTab","showInvitees","BillToEmail","currentInviteeEmail","fadeOut","TaskRespondFormFailure","tabHTML","showInviteeTab","taskItemId","load","textStatus","XMLHttpRequest","plugin","settings","currentState","indexCurrentState","nextState","UpdateEndDate","ToggleEstimatedDateFields","isInit","selectionMode","subtract","hasTime","startTime","endTime","updateAvatarInline","self","HiddenValueSelector","ImageFieldSelector","FileInputFieldSelector","SuccessHandler","S3RefreshURL","TargetImageFieldWidth","TargetImageFieldHeight","ValidFileTypes","UploadSuccess","newSrc","AddParametersToURL","S3FileUpload","NewFileKey","CropType","ModalImageFieldHeight","ModalImageFieldWidth","HideAvatarLoading","UploadError","thrownError","uploadAttemptsCount","KeyPrefix","newKeyPrefix","newUUID","Uuid","Policy","policy","PolicySignature","policySignature","SingleFileSelected","UploadComplete","alert","Init","files","ShowAvatarLoading","YouLiS3ResourceUpload","queueElement","resourceDisplayName","UploadUrl","SuccessURL","ACL","AccessKey","FileTypeDescription","FileTypeErrorText","MaxFileSize","progressHandler","lengthComputable","percentComplete","round","loaded","total","completeHandler","successHandler","errorHandler","selectedFile","overrideSuccessHandler","overrideErrorHandler","overrideCompleteHandler","overrideProgressHandler","Validation","IsValidFileType","UploadFile","redirect","FormData","dataString","MimeType","GetFileExtension","passedInElement","myXhr","ajaxSettings","upload","eval","processData"],"mappings":"AAAA,IAAAA,MAAAA,UACAA,MAAAC,KAAAD,MAAAC,KAAAD,MAAAC,QACAD,MAAAC,KAAAC,QAAAF,MAAAC,KAAAC,QAAAF,MAAAC,KAAAC,WAEA,SAAAF,GAsSAA,EAAAC,MAAAD,EAAAC,KApSA,SAAAC,GAIAF,EAAAC,KAAAC,QAAAC,aAAA,KACAH,EAAAC,KAAAC,QAAAE,WAAA,IACAJ,EAAAC,KAAAC,QAAAG,oBAAA,GACAL,EAAAC,KAAAC,QAAAI,sBACAN,EAAAC,KAAAC,QAAAK,UAAA,EACAP,EAAAC,KAAAC,QAAAM,8BAAAC,EAEAT,EAAAC,KAAAC,QAAAQ,SAAA,SAAAC,GACAX,EAAAC,KAAAC,QAAAG,oBAAAM,EACAX,EAAAC,KAAAC,QAAAU,eAGAZ,EAAAC,KAAAC,QAAAU,YAAA,WAGAC,EAAA,kDAAAC,YAAA,UAEAD,EAAA,+CAAAE,KAAA,iBAAAf,EAAAC,KAAAC,QAAAG,oBAAA,MACAW,SAAA,UAGA,IAAAC,EAAAJ,EAAAK,KAAAlB,EAAAC,KAAAC,QAAAC,aAAA,SAAAgB,EAAAC,GACA,IAAAC,EAAAC,OAAAH,EAAAI,eACAC,EAAAF,OAAAH,EAAAM,aACAC,EAAAJ,OAAAtB,EAAAC,KAAAC,QAAAG,qBAEA,OAAA,OAAAc,EAAAM,YACAJ,EAAAM,OAAAD,EAAA,QAEAA,EAAAE,UAAAP,EAAAG,EAAA,OAAA,QAGAxB,EAAAC,KAAAC,QAAAI,mBAAAO,EAAAgB,IAAAZ,EAAA,SAAAE,EAAAC,GACA,OAAAD,EAAAW,iBAGAC,EAAAC,SACAC,OAAA,WAEA,MAAA,QAAAjC,EAAAC,KAAAC,QAAAG,qBAGAL,EAAAC,KAAAC,QAAAI,mBAAA4B,QAAArB,EAAAsB,MAAApB,KAAA,0BAAAqB,KAAA,aAAA,MAKApC,EAAAC,KAAAC,QAAAmC,cAAA,WAEA,GAAArC,EAAAC,KAAAqC,UACA,OAAA,EAGA,GAAAzB,EAAA,0CAAA0B,OAAA,GACA,WAAAvC,EAAAC,KAAAuC,eAAA,CACA,IAAAC,EAAA5B,EAAA,uCAAA6B,WAAAC,KACAC,EAAA/B,EAAA,6CAAA6B,WAAAC,KACAE,EAAAhC,EAAA,wDACAiC,EAAAD,EAAAH,WAAAC,KAAAE,EAAAE,aAEAlC,EAAA,6CAAAmC,YAAA,WAAAJ,GAAA,GACA/B,EAAA,8CAAAmC,YAAA,WAAAF,EAAAL,GAGA5B,EAAA,0CAAAoC,IAAA,YAAA,OACA,IAAAC,EAAArC,EAAA,8BAAAsC,QACAtC,EAAA,0CAAAoC,IAAA,YAAAC,EAAA,QAKAlD,EAAAC,KAAAC,QAAAkD,cAAA,WACApD,EAAAC,KAAAqC,YAIAzB,EAAAwC,QAAAF,QAAA,IACAtC,EAAA,iBAAAyC,OAAAtD,EAAAC,KAAAC,QAAAE,YAAA6C,IAAA,aAAAjD,EAAAC,KAAAC,QAAAE,YAGAS,EAAA,iBAAAyC,OAAA,QAAAL,IAAA,aAAAjD,EAAAC,KAAAC,QAAAE,YAGAmD,EAAA1C,EAAAwC,QAAAF,QAEAK,8BAEAzB,EAAA0B,KAAA,YACA1B,EAAAC,QAAA,YAKAwB,4BAAA,SAAAE,GACA7C,EAAA,iBAAA8C,KAAA,SAAAD,GAEA7C,EAAAsB,MAAApB,KAAA,cAAA6C,OAAA/C,EAAAsB,MAAAmB,SAAAzC,EAAAsB,MAAApB,KAAA,0BAAAuC,aAIAO,gBAAA,SAAAC,GACAjD,EAAAiD,GAAA/C,KAAA,0BAAAgD,QAAAC,SAAAnD,EAAA,kCAAAoD,SAAAlD,KAAA,cAAAmD,SACAC,EAAAtD,EAAAiD,GAGAjD,EAAA,+DAAAuD,iBACAC,QAAA,YAAA,WACAC,mBAAA,SAAAC,GAGAvE,EAAAC,KAAAuE,SAAAC,SAAAC,mCAAAH,EAAAI,QADA,EACA,WAEA,QAAA9D,EAAA,gBAAA+D,OAGA/D,EAAA,wCAAAgE,cAAA,8CAAAzC,KAAA,aAAAvB,EAAA0D,EAAAI,QAAAvC,KAAA,qBAQAvB,EAAAiE,UAAAC,GAAA,iBAAA,qBAAA,SAAAR,GACAvE,EAAAC,KAAAC,QAAAK,UAAA,IAGAM,EAAAiE,UAAAC,GAAA,kBAAA,qBAAA,SAAAR,IACAvE,EAAAC,KAAAC,QAAAK,UAAAP,EAAAC,KAAAC,QAAAM,2BAEAK,EAAAb,EAAAC,KAAAC,QAAAM,0BAAAiD,KAAA,mBAAAuB,SACAhF,EAAAC,KAAAC,QAAAM,8BAAAC,KAIA,IAAAsB,EAAA,KACAwB,EAAA,KACAY,EAAA,KAEAc,EAAA,WACA,IAAAC,EAAAf,EAAAgB,QAAAC,OACA,GAAAF,EAAA3C,SACA2C,EAAArE,EAAA,oBAAAsE,SAEAtB,gBAAAqB,IAGAG,EAAA,WACA,IAAAC,EAAAnB,EAAAgB,QAAAI,OACA,GAAAD,EAAA/C,SACA+C,EAAAzE,EAAA,oBAAA2E,QAEA3B,gBAAAyB,IAGAzE,EAAA,WAEA2C,8BAEAD,EAAA1C,EAAAwC,QAAAF,QAEAtC,EAAA,wBAAA4E,SACAC,QAAA,SACAC,SAAA,uJAGA9E,EAAA,mBAAAkE,GAAA,QAAA,WACAlE,EAAAwC,QAAAF,QAAA,KACAtC,EAAAsB,MAAAyD,QAAA,iBAAAtC,OAAA,QAAAL,IAAA,aAAA,SACApC,EAAAsB,MAAAyD,QAAA,iBAAA7E,KAAA,cAAA8E,OACA9D,EAAAC,QAAA,YAGA6B,gBAAAhD,EAAAsB,MAAAyD,QAAA,eAEA/E,EAAA,sBAAAiF,MAAA,WAIAjF,EAAAiE,UAAAC,GAAA,QAAA,2BAAA,WACAE,MAGApE,EAAAiE,UAAAC,GAAA,QAAA,2BAAA,WACAM,MAGAxE,EAAAiE,UAAAC,GAAA,UAAA,SAAAR,GACA1D,EAAA,sBAAAkF,GAAA,cACA,IAAAxB,EAAAyB,QACAX,IAEA,IAAAd,EAAAyB,SACAf,OAKA,KAAAjF,EAAAC,KAAAqC,YACAP,EAAAlB,EAAA,SAAAoF,aAAA,WACAlE,EAAAC,SACAkE,aAAA,aACAC,iBAAA,EACAC,gBAQAvF,EAAAiE,UAAAC,GAAA,QAAA,qBAAA,WACA/E,EAAAC,KAAAC,QAAAG,oBAAAQ,EAAAsB,MAAAsB,KAAA,QACAzD,EAAAC,KAAAC,QAAAU,gBAGAC,EAAAiE,UAAAC,GAAA,QAAA,iDAAA,WACA/E,EAAAC,KAAAC,QAAAG,oBAAAQ,EAAAsB,MAAAsB,KAAA,QACAzD,EAAAC,KAAAC,QAAAU,gBAGAC,EAAAiE,UAAAC,GAAA,QAAA,4DAAA,WACA,IAAAlC,EAAAhC,EAAA,wDACAiC,EAAAD,EAAAH,WAAAC,KAAAE,EAAAE,aAGAsD,EAFAxF,EAAA,6CAAA6B,WAAAC,KAGAG,GAAAjC,EAAA,uCAAA6B,WAAAC,OACA0D,EAAAC,KAAAC,IAAAF,EAtOA,IAsOA,GACAxF,EAAA,6CAAAoC,IAAA,OAAAoD,IAGArG,EAAAC,KAAAC,QAAAmC,kBAGAxB,EAAAiE,UAAAC,GAAA,QAAA,2DAAA,WACA,IAAAnC,EAAA/B,EAAA,6CAAA6B,WAAAC,KACA0D,EAAAzD,EACAA,EAAA,IACAyD,EAAAC,KAAAC,IAAAF,EAjPA,IAiPA,GACAxF,EAAA,6CAAAoC,IAAA,OAAAoD,IAGArG,EAAAC,KAAAC,QAAAmC,kBAIAxB,EAAAwC,QAAAmD,OAAA,WACAxG,EAAAC,KAAAC,QAAAmC,gBAEAkB,GAAA1C,EAAAwC,QAAAF,SACAnD,EAAAC,KAAAC,QAAAkD,kBAGApD,EAAAC,KAAAC,QAAAkD,gBAEAvC,EAAAiE,UAAAC,GAAA,QAAA,+CAAA,WAGA,GAAA/E,EAAAC,KAAAwG,mBAAA,CAEAzG,EAAA0G,OAAAC,GAAAC,cAEA,IAAAC,EAAAhG,EAAAsB,MAAAyD,QAAA,0BACAf,EAAAhE,EAAAgG,GAAApD,KAAA,MACAqD,EAAAjG,EAAA,cAAA+D,MAEA/D,EAAAkG,MACAC,uCAAAnC,eAAAiC,IACAG,KAAA,MACAC,SAAA,OACAC,YAAA,kCACAC,SAAA,SAAAC,GACArH,EAAA0G,OAAAC,GAAAW,cACA,MAAAD,EAAAE,aAAA9G,GAAA4G,EAAAG,cAAA,GAAAH,EAAAG,aAAAC,QACAzH,EAAA0G,OAAAC,GAAAe,mBAAA,oCAGA7G,EAAA,4BAAA8G,KAAAN,EAAAO,cACA/G,EAAA,oBAAAiF,MAAA,iBA3RA,CAmSA9F,EAAAC,KAAAC,SAAAF,EAAAC,KAAAC,SArSA,CAuSAF,WC3SA,IAAAA,MAAAA,UACAA,MAAAC,KAAAD,MAAAC,KAAAD,MAAAC,QACAD,MAAAC,KAAA4H,UAAA7H,MAAAC,KAAA4H,UAAA7H,MAAAC,KAAA4H,aAEA,SAAA7H,GAiXAA,EAAAC,MAAAD,EAAAC,KADAD,EAAAC,KAAA4H,WAAA7H,EAAAC,KAAA4H,UA1WA7H,EAAAC,KAAA4H,UAAAC,eAAA,KACA9H,EAAAC,KAAA4H,UAAAE,mBAAA,KACA/H,EAAAC,KAAA4H,UAAAG,sBAAA,GACAhI,EAAAC,KAAA4H,UAAAI,wCAAAxH,EAEAT,EAAAC,KAAA4H,UAAAnH,SAAA,SAAAC,GACAX,EAAAC,KAAA4H,UAAAG,sBAAArH,EACAX,EAAAC,KAAA4H,UAAAjH,eAGAZ,EAAAC,KAAA4H,UAAAK,aAAA,SAAAC,GAEAtH,EAAA,mBAAAsH,EAAA,MAAAC,OAAA,IAAA,GAAA,WACAvH,EAAA,mBAAAsH,EAAA,MAAAC,OAAA,IAAA,MAOApI,EAAAC,KAAA4H,UAAAjH,YAAA,WASA,GANAC,EAAA,oDAAAC,YAAA,UAEAD,EAAA,iDAAAE,KAAA,iBAAAf,EAAAC,KAAA4H,UAAAG,sBAAA,MACAhH,SAAA,UAGA,cAAAhB,EAAAC,KAAA4H,UAAAG,sBAAA,CAEA,IAAA/G,EAAAJ,EAAAK,KAAAlB,EAAAC,KAAA4H,UAAAC,eAAA,SAAA3G,EAAAC,GACA,OAAAD,EAAAkH,gBAGAC,EAAAzH,EAAAgB,IAAAZ,EAAA,SAAAE,EAAAC,GACA,OAAAD,EAAAW,iBAGAyG,EAAA1H,EAAA,kDAAAoB,OAAA,SAAAb,EAAAmD,GACA,OAAA+D,EAAApG,QAAArB,EAAAsB,MAAAC,KAAA,aAAA,IAGAoG,EAAA3H,EAAA,kDAAAoB,OAAA,SAAAb,EAAAmD,GACA,OAAA,GAAA+D,EAAApG,QAAArB,EAAAsB,MAAAC,KAAA,cAGAvB,EAAA0H,GAAAE,OACA5H,EAAA2H,GAAA3C,OAEA,GAAA0C,EAAAhG,OACA1B,EAAA,8BAAA4H,OAEA5H,EAAA,8BAAAgF,WAIA,OAAA7F,EAAAC,KAAA4H,UAAAG,uBACAnH,EAAA,8BAAAgF,OACAhF,EAAA,kDAAA4H,SAIAxH,EAAAJ,EAAAK,KAAAlB,EAAAC,KAAA4H,UAAAC,eAAA,SAAA3G,EAAAC,GACA,IAAAC,EAAAC,OAAAH,EAAAI,eACAC,EAAAF,OAAAH,EAAAM,aACAC,EAAAJ,OAAAtB,EAAAC,KAAA4H,UAAAG,uBAEA,OAAA,OAAA7G,EAAAM,YACAJ,EAAAM,OAAAD,EAAA,QAEAA,EAAAE,UAAAP,EAAAG,EAAA,OAAA,QAGA8G,EAAAzH,EAAAgB,IAAAZ,EAAA,SAAAE,EAAAC,GACA,OAAAD,EAAAW,iBAGAyG,EAAA1H,EAAA,kDAAAoB,OAAA,SAAAb,EAAAmD,GACA,OAAA+D,EAAApG,QAAArB,EAAAsB,MAAAC,KAAA,aAAA,IAGAoG,EAAA3H,EAAA,kDAAAoB,OAAA,SAAAb,EAAAmD,GACA,OAAA,GAAA+D,EAAApG,QAAArB,EAAAsB,MAAAC,KAAA,cAGAvB,EAAA0H,GAAAE,OAEA5H,EAAA2H,GAAA3C,OAEA,GAAA0C,EAAAhG,OACA1B,EAAA,8BAAA4H,OAEA5H,EAAA,8BAAAgF,QAMAhF,EAAA,4CAAA4H,OACA5H,EAAA,4CAAA+C,OAAA/C,EAAA,2CAAA6H,SAAA,YAAAnG,OAAA,GACA1B,EAAA,qCAAA4H,OACA5H,EAAA,qCAAA+C,OAAA/C,EAAA,oCAAA6H,SAAA,YAAAnG,OAAA,IAGAvC,EAAAC,KAAA4H,UAAAxF,cAAA,WAEA,GAAAxB,EAAA,4CAAA0B,OAAA,GACA,aAAAvC,EAAAC,KAAAuC,eAAA,CACA,IAAAC,EAAA5B,EAAA,yCAAA6B,WAAAC,KACAC,EAAA/B,EAAA,+CAAA6B,WAAAC,KACAE,EAAAhC,EAAA,0DAGA8H,EAAA/F,EAAA,EACAgG,EAHA/F,EAAAH,WAAAC,KAAAE,EAAAE,cAGAN,EAEA5B,EAAA,+CAAAmC,YAAA,YAAA2F,GACA9H,EAAA,gDAAAmC,YAAA,YAAA4F,GAEAD,GAAAC,EACA/H,EAAA,yCAAAoC,IAAA,aAAA,WAGApC,EAAA,yCAAAoC,IAAA,aAAA,UAIApC,EAAA,4CAAAoC,IAAA,YAAA,OACA,IAAAC,EAAArC,EAAA,8BAAAsC,QACAtC,EAAA,4CAAAoC,IAAA,YAAAC,EAAA,QAKAlD,EAAAC,KAAA4H,UAAAgB,eAAA,SAAAV,EAAAW,GAEA,IAAAC,EAAArF,QAGA,IAAAD,GACAuF,cAAA,YACAlH,eAAAqG,EACAc,UAAApI,EAAA,cAAA+D,MACAsE,cAAAJ,EACAK,aAAA,GAGAtI,EAAAkG,MACAC,IAAA,+BACAC,KAAA,OACAC,SAAA,OACAC,YAAA,kCACA1D,KAAA2F,KAAAC,UAAA5F,GACA2D,SAAA,SAAAC,GACA,QAAA5G,GAAA4G,EAAAG,cAAAH,EAAAG,aAAAR,IACAhH,EAAA0G,OAAAC,GAAAW,cACAjE,OAAAiG,SAAAC,KAAAlC,EAAAG,aAAAR,SAEA,GAAA,MAAAK,EAAAE,aAAA9G,GAAA4G,EAAAG,cAAA,GAAAH,EAAAG,aAAAC,QAAA,CACAzH,EAAA0G,OAAAC,GAAAW,cAGAzG,EAAAkI,GAAAtF,KAAA,mBAAAuB,SAEA,IAAAwE,EAAA,qBACAnC,EAAAG,aAAAgC,eACAA,EAAAnC,EAAAG,aAAAgC,cACAxJ,EAAA0G,OAAAC,GAAAe,mBAAA8B,EAAA,aAEA,CAEA,IAAAC,EAAA5I,EAAA,kDAAAgB,IAAA,WAAA,OAAAM,KAAAuH,KAAAC,MACA9I,EAAA,sBAAA8G,KAAAN,EAAAO,cACA/G,EAAA,4BAAAC,YAAA,MACA2I,EAAAlH,OAAA,IACA1B,EAAA,IAAA4I,EAAAG,KAAA,OAAA5I,SAAA,MACAH,EAAA,IAAA4I,EAAAG,KAAA,OAAAC,SAAA,SAGAhJ,EAAA,2BAAAC,YAAA,UACAd,EAAAC,KAAA4H,UAAAjH,cACAZ,EAAAC,KAAA4H,UAAAxF,gBAEArC,EAAAC,KAAA6J,qBAAAC,SAAA,EAAAC,kBAAA,QAOAhK,EAAAC,KAAA4H,UAAAoC,2BAAA,SAAAvG,EAAAwG,GACA,MAAAC,EAAAtJ,EAAA6C,GAAAkC,QAAA,mBACAuC,EAAAtH,EAAAsJ,GAAA1G,KAAA,MAEA2G,EAAApK,EAAAC,KAAA4H,UAAAC,eAAA/G,KAAAqJ,GACAA,EAAAtI,gBAAAqG,GAGA,GAAAiC,EAAA,CACA,MAAAC,EAAArK,EAAA0G,OAAA4D,MAAAC,UAAAH,EAAAI,aACAC,EAAA,WAAAP,EAAA,MAAA,KACAQ,eAAAN,EAAAO,WAAAF,IAAAA,kBAAAzK,EAAAC,KAAA2K,0BAAAH,IAAAA,IAAAJ,IAWA,OATAQ,OACAC,MAAAV,EAAAW,KACAC,MAAA,IAAAC,KAAAb,EAAAc,iBAAA,KACAC,IAAA,IAAAF,KAAAb,EAAAgB,eAAA,KACAC,QAAAjB,EAAAO,SACAW,YAAAZ,GAGA1K,EAAAC,KAAAsL,cAAA7H,EAAAwG,EAAAW,QACA,EAGA,OAAA,GAGAhK,EAAA,WAsCA,IAAA2K,EAnCA3K,EAAAiE,UAAAC,GAAA,QAAA,mDAAA,WAEA/E,EAAAC,KAAA4H,UAAAnH,SAAAG,EAAAsB,MAAAsB,KAAA,WAGA5C,EAAAiE,UAAAC,GAAA,QAAA,8DAAA,WACA,IAAAlC,EAAAhC,EAAA,0DACAiC,EAAAD,EAAAH,WAAAC,KAAAE,EAAAE,aAGAsD,EAFAxF,EAAA,+CAAA6B,WAAAC,KAGAG,GAAAjC,EAAA,yCAAA6B,WAAAC,OACA0D,EAAAC,KAAAC,IAAAF,EA5OA,IA4OA,GACAxF,EAAA,+CAAAoC,IAAA,OAAAoD,IAGArG,EAAAC,KAAA4H,UAAAxF,kBAGAxB,EAAAiE,UAAAC,GAAA,QAAA,6DAAA,WACA,IAAAnC,EAAA/B,EAAA,+CAAA6B,WAAAC,KACA0D,EAAAzD,EACAA,EAAA,IACAyD,EAAAC,KAAAC,IAAAF,EAvPA,IAuPA,GACAxF,EAAA,+CAAAoC,IAAA,OAAAoD,IAGArG,EAAAC,KAAA4H,UAAAxF,kBAIAxB,EAAAwC,QAAAmD,OAAA,WACAxG,EAAAC,KAAA4H,UAAAxF,kBAKAxB,EAAAiE,UAAAC,GAAA,UAAA,0BAAA,SAAAR,GAEAiH,IAAAA,EAAAzF,GAAAxB,EAAAI,SACA,IAAA6G,EAAAC,IAAAlH,EAAAI,QAAApC,QAEA1B,EAAA,+CAAAoC,IAAA,UAAA,UAIApC,EAAAiE,UAAAC,GAAA,QAAA,kCAAA,WAEAlE,EAAAsB,MAAAuJ,SAAA,aACA7K,EAAA,6CAAAgJ,SAAA,QAEAhJ,EAAA,sEAAAG,SAAA,aACAH,EAAAsB,MAAApB,KAAA,SAAA4K,KAAA,UACA9K,EAAAsB,MAAArB,YAAA,cAGAD,EAAA,6CAAAgJ,SAAA,QAEAhJ,EAAA,sEAAAC,YAAA,aACAD,EAAAsB,MAAApB,KAAA,SAAA4K,KAAA,YACA9K,EAAAsB,MAAAnB,SAAA,eAOAH,EAAAiE,UAAAC,GAAA,QAAA,sFAAA,WACAlE,EAAA,qBAAAoC,IAAA,UAAA,QACApC,EAAAsB,MAAApB,KAAA,qBAAAkC,IAAA,UAAA,SACAuI,EAAA3K,EAAAsB,MAAAyJ,WAGA,QAAA/K,EAAA,gBAAA+D,OAIA/D,EAAAiE,UACA+G,IAAA,QAAA,iDACA9G,GAAA,QAAA,gDAAA,WAEA,IAAAoF,EAAAtJ,EAAAsB,MAAAyD,QAAA,6BACAuC,EAAAtH,EAAAsJ,GAAA1G,KAAA,MACAqF,EAAAjI,EAAAsB,MAAAsB,KAAA,kBAEA5C,EAAA,qBAAAoC,IAAA,UAAA,QAEAjD,EAAAC,KAAA6L,uBAOA9L,EAAAC,KAAA4H,UAAAgB,eAAAV,EAAAW,IANAjI,EAAA,kCAAA+D,IAAAuD,GACAtH,EAAA,wCAAA+D,IAAAkE,GACAjI,EAAA,+BAAA4H,OACA5H,EAAA,sBAAAiF,MAAA,WASAjF,EAAAiE,UAAAC,GAAA,QAAA,iDAAA,WAGA,GAAA/E,EAAAC,KAAAwG,mBAAA,CAEAzG,EAAA0G,OAAAC,GAAAC,cAEA,IAAAuD,EAAAtJ,EAAAsB,MAAAyD,QAAA,6BACAuC,EAAAtH,EAAAsJ,GAAA1G,KAAA,MACAqD,EAAAjG,EAAA,cAAA+D,MAEA/D,EAAAkG,MACAC,uCAAAmB,eAAArB,IACAG,KAAA,MACAC,SAAA,OACAC,YAAA,kCACAC,SAAA,SAAAC,GACArH,EAAA0G,OAAAC,GAAAW,cACA,MAAAD,EAAAE,aAAA9G,GAAA4G,EAAAG,cAAA,GAAAH,EAAAG,aAAAC,QACAzH,EAAA0G,OAAAC,GAAAe,mBAAA,oCAGA7G,EAAA,4BAAA8G,KAAAN,EAAAO,cACA/G,EAAA,oBAAAiF,MAAA,eAQAjF,EAAA,mCAAA6E,QAAA,SAGA1F,EAAAC,KAAA8L,MAAA/L,EAAAC,KAAA4H,UAAAE,oBAAA/H,EAAAC,KAAA4H,UAAAE,mBAAAxF,OAAA,GACAvC,EAAAC,KAAA8L,KAAAC,wBA3WA,CAkXAhM,WCtXA,IAAAA,MAAAA,UACAA,MAAAC,KAAAD,MAAAC,KAAAD,MAAAC,QACAD,MAAAC,KAAAgM,SAAAjM,MAAAC,KAAAgM,SAAAjM,MAAAC,KAAAgM,YAEA,SAAAjM,GAyGAA,EAAAC,MAAAD,EAAAC,KADAD,EAAAC,KAAAgM,UAAAjM,EAAAC,KAAAgM,SApGAC,0BAAA,SAAAC,GACAnM,EAAA0G,OAAAC,GAAAC,cAEA,MAAAwF,EAAAvL,EAAA,WAAA+D,MACAkC,EAAAjG,EAAA,cAAA+D,MACAyH,EAAAxL,EAAA,gBAAA+D,MAGA,IAAA0H,kDAAAF,eAAAtF,cAFAyF,mBAAAJ,cAEAE,IAEAG,MAAAF,GACAG,KAAApF,IAGA,GAFArH,EAAA0G,OAAAC,GAAAW,eAEAD,EAAAqF,GACA,MAAA,IAAAC,MAAA,oCAEA,OAAAtF,EAAAuF,SAEAH,KAAAhJ,IACA5C,EAAA,wBAAA8G,KAAAlE,EAAAoJ,2BAEAC,MAAAC,IACAC,QAAAD,MAAA,SAAAA,MAIAE,eAAA,WACAjN,EAAA0G,OAAAC,GAAAC,cAEA,MAAAwF,EAAAvL,EAAA,WAAA+D,MACAkC,EAAAjG,EAAA,cAAA+D,MACAyH,EAAAxL,EAAA,gBAAA+D,MAEAuH,EAAA,GAAAtL,EAAA,yBAAA0B,OAAAgK,mBAAA1L,EAAA,yBAAA+D,OAAA,GAIA,IAAA0H,8CAAAF,eAAAtF,aAAAuF,gBAFAE,mBAAA1L,EAAA,2BAAA+D,mBAEAuH,IAGA,GAAAtL,EAAA,2BAAA0B,SAGA+J,kBAFA,GAAAzL,EAAA,wBAAA0B,OAAAgK,mBAAA1L,EAAA,wBAAA+D,OAAA,qBACA2H,mBAAA1L,EAAA,2BAAA+D,UAIA,GAAA/D,EAAA,2BAAA0B,SAGA+J,kBAFA,GAAAzL,EAAA,wBAAA0B,OAAAgK,mBAAA1L,EAAA,wBAAA+D,OAAA,qBACA2H,mBAAA1L,EAAA,2BAAA+D,UAIA,GAAA/D,EAAA,2BAAA0B,SAGA+J,kBAFA,GAAAzL,EAAA,wBAAA0B,OAAAgK,mBAAA1L,EAAA,wBAAA+D,OAAA,qBACA2H,mBAAA1L,EAAA,2BAAA+D,UAIA4H,MAAAF,GACAG,KAAApF,IAGA,GAFArH,EAAA0G,OAAAC,GAAAW,eAEAD,EAAAqF,GACA,MAAA,IAAAC,MAAA,oCAEA,OAAAtF,EAAAuF,SAEAH,KAAAhJ,IACA5C,EAAA,gCAAA8G,KAAAlE,EAAAyJ,oBAEAJ,MAAAC,IACAC,QAAAD,MAAA,SAAAA,MAKAlM,EAAA,WAEAA,EAAAiE,UAAAC,GAAA,SAAA,wBAAA,WACA,IAAAlE,EAAAsB,MAAAyC,MACA/D,EAAA,wBAAA8G,KAAA,IAGAuE,0BAAArL,EAAAsB,MAAAyC,OAEAqI,mBAGApM,EAAAiE,UAAAC,GAAA,WAAA,0BAAA,SAAAR,GACA,IAAAA,EAAAyB,SACAiH,mBAGApM,EAAAiE,UAAAC,GAAA,QAAA,gBAAA,WACAkI,qBAnGA,CA0GAjN,WC9GA,IAAAA,MAAAA,UACAA,MAAAC,KAAAD,MAAAC,KAAAD,MAAAC,QAEA,SAAAD,GA6+CAA,EAAAC,MAAAD,EAAAC,KAx+CAD,EAAAC,KAAAuC,eAAA,UACAxC,EAAAC,KAAAkN,YAAA,GACAnN,EAAAC,KAAAmN,iBAAA,EACApN,EAAAC,KAAAwG,oBAAA,EACAzG,EAAAC,KAAAoN,eAAA,EACArN,EAAAC,KAAAqN,qBAAA,EACAtN,EAAAC,KAAAsN,YAAA,EACAvN,EAAAC,KAAAuN,sBAAA,EAEAxN,EAAAC,KAAAwN,aAAA,GACAzN,EAAAC,KAAAyN,YAAA,GACA1N,EAAAC,KAAA0N,oBAAA,GACA3N,EAAAC,KAAA2N,mBAAA,EAEA5N,EAAAC,KAAA4N,yBAAA,EACA7N,EAAAC,KAAA6N,gBAAA,EACA9N,EAAAC,KAAA8N,gBAAA,UACA/N,EAAAC,KAAA2K,wBAAA,GACA5K,EAAAC,KAAA+N,2BAAA,GACAhO,EAAAC,KAAAgO,mBAAA,EACAjO,EAAAC,KAAAiO,4BAAA,EACAlO,EAAAC,KAAAkO,8BAAA,EAEAnO,EAAAC,KAAAmO,qBAAA,EACApO,EAAAC,KAAAoO,wBAAA,EACArO,EAAAC,KAAAqO,6BAAA,IAAA,IAAA,KACAtO,EAAAC,KAAAsO,oBAAA,IACAvO,EAAAC,KAAAqC,UAAA,GACAtC,EAAAC,KAAAuO,yBAAA,EACAxO,EAAAC,KAAAwO,0BAAA,EACAzO,EAAAC,KAAAyO,wBAAA,EAEA1O,EAAAC,KAAA0O,SAAA,MACA,IAAAC,EAAA,GAOA,OALA5O,EAAAC,KAAAqC,WAAAtC,EAAAC,KAAA+N,6BACAa,UAAA,EACAD,EAAA,KAGAA,IAGA5O,EAAAC,KAAA6O,sBAAA,WAEAjO,EAAA,2BAAAG,SAAA,wBACAH,EAAA,iDAAAkO,WAAA,UACA/B,QAAAgC,IAAA,gBAGAhP,EAAAC,KAAAgP,YAAA,SAAAC,EAAAxL,EAAAmL,EAAAM,EAAAC,GAAA,GAkBA,GAVA,mBAJAF,EAAAA,EAAAG,QAAA,OAAA,MAIAxO,EAAA,+BAAA6K,SAAA,YACA7K,EAAA,2BAAA0B,OAAA,IAAA1B,EAAA,2BAAA6K,SAAA,UACAwD,EAAA,aAGAI,OAAA,WAKA,GAAAzO,EAAA,iBAAAqO,GAAA3M,OAAA,CAIA,GAAA,kBAAA2M,GAAA,kBAAAlP,EAAAC,KAAAuC,iBAEA,IAAA3B,EAAA,aAAA+D,OAAA,SAAA/D,EAAA,aAAA+D,OAAA,CACA,IAAA2K,EAAAvP,EAAA0G,OAAA8I,UAAA,aACAC,UAAAC,MAAAC,UAAA,OACAF,UAAAC,KAAAH,GAIAvP,EAAAC,KAAAuC,eAAA0M,EAGArO,EAAA,sCAAAC,YAAA,UACA,IAAA8O,EAAA/O,EAAA,mCAAAE,KAAA,kBAAAmO,EAAA,MACArO,EAAA+O,GAAA5O,SAAA,UAEAqC,OAAAiG,SAAAuG,KAAAX,QAGAzO,GAAAI,EAAA6C,GAAAD,KAAA,4BAAA5C,EAAA6C,GAAAD,KAAA,iCAAAhD,GAAAI,EAAA6C,GAAAD,KAAA,4BAAA2L,KACApP,EAAAC,KAAA8N,gBAAA1K,OAAAiG,SAAAuG,KAAAC,OAAA,IAIAjP,EAAA,uBAAAG,SAAA,UACA,IAAA+O,EAAAlP,EAAA,iBAAAqO,GAIA,GAHArO,EAAAkP,GAAAjP,YAAA,UAGA,GAAAD,EAAA6C,GAAAD,KAAA,WAAAoL,EAAA,CAEA,IAAAmB,EAAAnP,EAAAkP,GACA,GAAAlP,EAAA6C,GAAAD,KAAA,oBAAA0L,EAAA,CACA,IAAAc,EAAApP,EAAA6C,GAAAD,KAAA,oBAAA0L,EACAa,EAAAnP,EAAAoP,GAGApP,EAAA,cAAAqP,SACAC,UAAAH,EAAAI,SAAAC,IAAArQ,EAAAC,KAAA0O,YACA,KAIA,aAAAO,GACAlP,EAAAC,KAAA4H,UAAAjH,cACAZ,EAAAC,KAAA4H,UAAAxF,iBAEA,WAAA6M,GACAlP,EAAAC,KAAAC,QAAAkD,gBACApD,EAAAC,KAAAC,QAAAmC,iBAEA,cAAA6M,EACAlP,EAAAC,KAAAqQ,WAAAC,YAEA,kBAAArB,GACAlP,EAAAC,KAAAuQ,SAAAC,gCAIAzQ,EAAAC,KAAAyQ,2BAAA,SAAAC,GACA3Q,EAAAC,KAAAC,QAAAK,UAAA,EAEA,IAAAqQ,EAAA/P,EAAA,QAAAE,KAAA,wBAEA4P,EAAAE,QACA7Q,EAAA0G,OAAAC,GAAAmK,iBAAAF,GACA5Q,EAAA0G,OAAAC,GAAAW,cACAtH,EAAA0G,OAAAC,GAAAoK,wBACA/Q,EAAA0G,OAAAC,GAAAqK,uBAAAL,EAAAE,UAGA7Q,EAAA0G,OAAAC,GAAAoK,wBACAJ,EAAA3J,KACA3D,OAAAiG,SAAAC,KAAAoH,EAAA3J,IACA2J,EAAAM,QACA3H,SAAA2H,WAEAjR,EAAA0G,OAAAC,GAAAmK,iBAAAF,GACA5Q,EAAA0G,OAAAC,GAAAW,iBAKAtH,EAAAC,KAAAiR,2BAAA,SAAAC,EAAA5J,EAAAwF,GACA,IAAA6D,EAAA/P,EAAA,QAAAE,KAAA,wBACAf,EAAA0G,OAAAC,GAAAmK,iBAAAF,GAEA5Q,EAAA0G,OAAAC,GAAAqK,uBAAAjE,EAAAoE,GAEAtQ,EAAA,sBAAAqP,SAAAC,UAAA,GAAA,MAGAnQ,EAAAC,KAAAmR,mBAAA,SAAAlC,GAGArO,EAAA,6CAAAC,YAAA,UACA,IAAA8O,EAAA/O,EAAA,2BAAAE,KAAA,kBAAAmO,EAAA,MACArO,EAAA+O,GAAA5O,SAAA,UAGAH,EAAA,uBAAAG,SAAA,UACA,IAAA+O,EAAAlP,EAAA,qBAAAqO,EAAA,uBACArO,EAAAkP,GAAAjP,YAAA,WAIAd,EAAAC,KAAAoR,oBAAA,SAAAnC,GAGArO,EAAA,8CAAAC,YAAA,UACA,IAAA8O,EAAA/O,EAAA,4BAAAE,KAAA,kBAAAmO,EAAA,MACArO,EAAA+O,GAAA5O,SAAA,UAGAH,EAAA,wBAAAG,SAAA,UACA,IAAA+O,EAAAlP,EAAA,sBAAAqO,EAAA,wBACArO,EAAAkP,GAAAjP,YAAA,WAIAd,EAAAC,KAAAqR,yBAAA,SAAAC,GACA1Q,EAAA,qDAAAE,KAAA,SAAA4G,KAAA4J,GACA1Q,EAAA,cAAAE,KAAA,SAAA4G,KAAA4J,IAGAvR,EAAAC,KAAAuR,4BAAA,SAAAC,GACA5Q,EAAA,qDAAAE,KAAA,QAAA4G,KAAA8J,GACA5Q,EAAA,cAAAE,KAAA,QAAA4G,KAAA8J,GACA5Q,EAAA,cAAAE,KAAA,QAAA0C,KAAA,UAAAgO,GACAzR,EAAAC,KAAAyR,sBAIA1R,EAAAC,KAAA0R,2BAAA,SAAAC,GACA/Q,EAAA,qDAAAE,KAAA,OAAAqB,KAAA,MAAAwP,GACA/Q,EAAA,cAAAE,KAAA,OAAAqB,KAAA,MAAAwP,IAGA5R,EAAAC,KAAA4R,eAAA,WACAhR,EAAAiE,UAAA+G,IAAA,QAAA,0BACAhL,EAAAiE,UAAAC,GAAA,QAAA,yBAAA,WAEA,IAAA+M,EAAAhN,SAAAiN,cAAA,UACAD,EAAAE,aAAA,MAAA,qIACAF,EAAAE,aAAA,QAAA,IACAlN,SAAAmN,eAAA,cAAAC,OAAAJ,GAGAjR,EAAAiE,UAAA+G,IAAA,QAAA,6BAIA7L,EAAAC,KAAAkS,kBAAA,SAAAzO,EAAAwG,GACA,IAAAW,GACAC,MAAAjK,EAAA,aAAA+D,MACAoG,MAAA,IAAAC,KAAApK,EAAA,yBAAA+D,MAAA,KACAuG,IAAA,IAAAF,KAAApK,EAAA,uBAAA+D,MAAA,KACAyG,QAAAxK,EAAA,wBAAA+D,MACA0G,YAAA,4FAAAtL,EAAAC,KAAA2K,yBAGA,OADA5K,EAAAC,KAAAsL,cAAA7H,EAAAwG,EAAAW,IACA,GAGA7K,EAAAC,KAAAmS,0BAAA,SAAA1O,EAAAwG,EAAAY,EAAAuH,EAAAC,GACA,IAAAzH,GACAC,MAAAA,EACAE,MAAA,IAAAC,KAAAoH,EAAA,KACAlH,IAAA,IAAAF,KAAAqH,EAAA,KACAjH,QAAA,GACAC,YAAA,SAAAtL,EAAAC,KAAA2K,wBAAA,qCAGA,OADA5K,EAAAC,KAAAsL,cAAA7H,EAAAwG,EAAAW,IACA,GAGA7K,EAAAC,KAAAsL,cAAA,SAAA7H,EAAAwG,EAAAW,GAEAA,EAAAC,MAAAD,EAAAC,MAAAuE,QADA,iCACA,IAEA,MAAAkD,EAAAC,qBAAA/O,KAAAoH,EAAA5D,KAAAiD,IACA,OAAAqI,GACA1R,EAAA6C,GAAAtB,KAAA,OAAAmQ,GACA1R,EAAA6C,GAAAtB,KAAA,UAAA,IACAvB,EAAA6C,GAAA+O,SACA,IAGAzF,QAAAD,MAAA,4CACA,IAMA/M,EAAAC,KAAAyS,8BAAA,WAEA7R,EAAA,WAAAoC,IAAA,gBAAApC,EAAA,iCAAA8R,gBAIA3S,EAAAC,KAAA6J,qBAAA,SAAAC,EAAAC,GAIA,GAAA,QAAAnJ,EAAA,0BAAA+D,MAKA,GAAAmF,GAAAjF,SAAA8N,WAAA,CAQA,IAAAxG,EAAAvL,EAAA,WAAA+D,MACAkC,EAAAjG,EAAA,cAAA+D,MACAyH,EAAAxL,EAAA,gBAAA+D,MACAiO,EAAAhS,EAAA,2BAAA+D,MAEAkO,EAAA,qCAAA1G,EAAA,cAAAtF,EAAA,YAAAuF,EACArC,IACA8I,GAAA,mBAAAD,GAEAhS,EAAAkG,MACAC,IAAA8L,EACA7L,KAAA,MACAC,SAAA,OACAC,YAAA,kCACAC,SAAA,SAAAC,GACA,MAAAA,EAAAE,aAAA9G,GAAA4G,EAAAG,cAAA,GAAAH,EAAAG,aAAAC,QACAzH,EAAA0G,OAAAC,GAAAe,mBAAA,4DAKA1H,EAAAC,KAAAmO,sBACAvN,EAAA,mBAAA8G,KAAAN,EAAAO,cACA5H,EAAAC,KAAAyS,yCA9BAK,WAAA,WACA/S,EAAAC,KAAA6J,sBAAA,GAAA,IACA9J,EAAAC,KAAAsO,sBAoCAvO,EAAAC,KAAA+S,6BAAA,WACAhT,EAAAC,KAAAoO,wBAAA,EACAxN,EAAA,oCAAA0B,OAAA,GACAwQ,WAAA,WACA/S,EAAAC,KAAAgT,uBACAjT,EAAAC,KAAAqO,4BAAAtO,EAAAC,KAAAoO,2BAIArO,EAAAC,KAAAgT,oBAAA,WAEA,IAIAH,EAAA,mCAJAjS,EAAA,WAAA+D,MAIA,cAHA/D,EAAA,cAAA+D,MAGA,YAFA/D,EAAA,gBAAA+D,MAIA/D,EAAAkG,MACAC,IAAA8L,EACA7L,KAAA,MACAC,SAAA,OACAC,YAAA,kCACAC,SAAA,SAAAC,GACA,MAAAA,EAAAE,aAAA9G,GAAA4G,EAAAG,cAAA,GAAAH,EAAAG,aAAAC,QACAzH,EAAA0G,OAAAC,GAAAe,mBAAA,6DAIA1H,EAAAC,KAAAoO,0BAEAxN,EAAA,2BAAA8G,KAAAN,EAAAG,aAAA0L,sBAEA7L,EAAAG,aAAA2L,+BAAAtS,EAAA,sCAAA0B,OAAA,GACA1B,EAAA,sCAAA8G,KAAAN,EAAAG,aAAA2L,+BACAnT,EAAAC,KAAAuQ,SAAA4C,sBAAA,KAGAvS,EAAA,iDAAA0B,OAAA,GACA1B,EAAA,iDAAA8G,KAAAN,EAAAG,aAAA6L,uBAGAxS,EAAA,8BAAA8G,KAAAN,EAAAG,aAAA8L,wBACAtT,EAAAC,KAAAuQ,SAAA4C,sBAAA,GAEAvS,EAAA,4CAAA8G,KAAAN,EAAAG,aAAA+L,yBAIA1S,EAAA,oCAAA0B,OAAA,GAAAvC,EAAAC,KAAAoO,wBAAArO,EAAAC,KAAAqO,4BAAA/L,QACAwQ,WAAA,WACA/S,EAAAC,KAAAgT,uBACAjT,EAAAC,KAAAqO,4BAAAtO,EAAAC,KAAAoO,+BAQArO,EAAAC,KAAAuT,8BAAA,EAEAxT,EAAAC,KAAAyR,mBAAA,WAEA,IAAA+B,EAAA5S,EAAA,aAAA4C,KAAA,WACAiQ,EAAArQ,OAAAsQ,WAAA,IAAA,GAAA,IACAF,EAAAzT,EAAA0G,OAAA4D,MAAAsJ,WAAAH,EAAAC,GAAA,GACA7S,EAAA,aAAA8G,KAAA8L,IAGAzT,EAAAC,KAAA4T,oBAAA,WAEAhT,EAAA,cAAA,QAAAb,EAAAC,KAAAqC,WAAAtC,EAAAC,KAAA+N,6BACAnN,EAAAwC,QAAAwI,IAAA,UACAxI,OAAAsQ,YAAA,KACA3T,EAAAC,KAAA6T,iBACAjT,EAAAwC,QAAA0B,GAAA,SAAA,WACA/E,EAAAC,KAAA6T,oBAIAjT,EAAA,6BAAAoC,IAAA,MAAA,MAIAjD,EAAAC,KAAA6T,eAAA,WACAzQ,OAAA0Q,YAAA,GACAlT,EAAA,6BAAAoC,IAAA,MAAA,QAEApC,EAAA,6BAAAoC,IAAA,MAAA,SAIAjD,EAAAC,KAAA+T,eAAA,WACA,GAAAnT,EAAA,8BAAAE,KAAA,mBAAAwB,QACA1B,EAAA,8BAAAG,SAAA,UAEA,GAAAH,EAAA,kCAAAE,KAAA,qCAAAwB,SACA1B,EAAA,kCAAAG,SAAA,UACAH,EAAA,+BAAAoC,IAAA,aAAA,SAIAjD,EAAAC,KAAAgU,wBAAA,WAEApT,EAAA,4DAAAgL,IAAA,oBAAA9G,GAAA,mBAAA,WACA,IAAAmK,EAAArO,EAAAsB,MAAAsB,KAAA,WAEAzD,EAAAC,KAAAmR,mBAAAlC,MAIAlP,EAAAC,KAAAiU,qBAAA,SAAAxQ,GACA,IAAAyQ,EAAAzQ,EAAAkC,QAAA,wBACAwO,EAAAvT,EAAA,cAAAsT,GAAA1Q,KAAA,kBACA4Q,EAAAxT,EAAA,cAAAsT,GAAA1Q,KAAA,kBACA2Q,GAAA,MAAAA,EAAAE,QAAAD,GAAA,MAAAA,EAAAC,OAIAzT,EAAA,6BAAAsT,GAAAvP,IACAwP,EAAAE,OAAAC,OAAA,UAAAF,EAAAC,OAAAC,OAAA,YAJA1T,EAAA,6BAAAsT,GAAAvP,IAAA,KAQA5E,EAAAC,KAAAuU,sBAAA,SAAA1N,EAAA+H,GAAA,GAIA,IAAApL,GACAgR,OAJA5T,EAAA,WAAA+D,MAKAkC,UAAAA,EACA4N,QALA7T,EAAA,gBAAA+D,OAQA5E,EAAA0G,OAAAC,GAAAC,cACA/F,EAAAkG,MACAC,IAAA,oBACAC,KAAA,OACAC,SAAA,OACAC,YAAA,kCACA1D,KAAA2F,KAAAC,UAAA5F,GACAkR,OAAA,EACAvN,SAAA,SAAAC,GACArH,EAAA0G,OAAAC,GAAAW,mBACA7G,GAAA4G,EAAAG,cAAAH,EAAAG,aAAAR,IACA3D,OAAAiG,SAAAC,KAAAlC,EAAAG,aAAAR,IAEA,MAAAK,EAAAE,aAAA9G,GAAA4G,EAAAG,cAAA,GAAAH,EAAAG,aAAAC,QACAzH,EAAA0G,OAAAC,GAAAe,mBAAA,4CAGA7G,EAAA,yBAAA8G,KAAAN,EAAAO,cACA5H,EAAAC,KAAAgP,YAAA,mBAAAxO,EAAAoO,GAAA,GAAA,QAMA7O,EAAAC,KAAA2U,gCAAA,SAAAlR,GACA,MAAAmR,EAAAhU,EAAA6C,GAAAkC,QAAA,mBACAkP,EAAAjU,EAAAgU,GAAApR,KAAA,MACAsR,EAAAlU,EAAA6C,GAAAkC,QAAA,6BACAoP,EAAAnU,EAAAkU,GAAAtR,KAAA,sBACAwR,EAAApU,EAAA,sBAAA8K,OAEA9K,EAAA,uDAAA+D,IAAAkQ,GACAjU,EAAA,kEAAA+D,IAAAoQ,GACAnU,EAAA,8CAAA8K,KAAAsJ,GAEApU,EAAA,gCAAAiF,MAAA,SAGA9F,EAAAC,KAAAiV,sBAAA,WAEA,IAAAC,EAAAtU,EAAA,4BAKA,GAHAA,EAAAuU,UAAAC,YAAAC,MAAAH,GACAA,EAAAI,YAEAJ,EAAAK,QACA,OAGA3U,EAAA,gCAAAiF,MAAA,QAEA9F,EAAA0G,OAAAC,GAAAC,cAEA,MAAA6O,EAAA5U,EAAA,mDAEAiU,EAAAjU,EAAA,uDAAA+D,MACAoQ,EAAAnU,EAAA,kEAAA+D,MACA8Q,EAAAD,EAAA7Q,MAEA+Q,EAAA9U,EAAA,2BAAA6K,SAAA,UACAkK,EAAA/U,EAAA,0BAAA6K,SAAA,UAEAmJ,EAAAhU,oDAAAiU,OAEA,IAAArR,GACAoS,eAAAf,EACAE,mBAAAA,EACAU,kBAAAA,GAGA7U,EAAAkG,MACAC,IAAA,8BACAC,KAAA,OACAC,SAAA,OACAC,YAAA,kCACA1D,KAAA2F,KAAAC,UAAA5F,GACA2D,SAAA,SAAAC,GAEA,GADArH,EAAA0G,OAAAC,GAAAW,mBACA7G,GAAA4G,EAAAG,cAAAH,EAAAG,aAAAR,IACA3D,OAAAiG,SAAAC,KAAAlC,EAAAG,aAAAR,SAEA,GAAA,MAAAK,EAAAE,aAAA9G,GAAA4G,EAAAG,cAAA,GAAAH,EAAAG,aAAAC,QAAA,CACA,IAAA+B,EAAA,qBACAnC,EAAAG,aAAAgC,eACAA,EAAAnC,EAAAG,aAAAgC,cACAxJ,EAAA0G,OAAAC,GAAAe,mBAAA8B,EAAA,cAGA3I,EAAAgU,GAAAlN,KAAAN,EAAAG,aAAAsO,kBAEA9V,EAAAC,KAAA8V,uBAAAJ,EAAAtO,EAAAG,aAAAwO,sBACAhW,EAAAC,KAAAgW,sBAAAL,EAAAvO,EAAAG,aAAA0O,2BAGAT,EAAA7Q,IAAA,QAOA5E,EAAAC,KAAAkW,gCAAA,SAAAzS,GACA,MAAAmR,EAAAhU,EAAA6C,GAAAkC,QAAA,mBACAkP,EAAAjU,EAAAgU,GAAApR,KAAA,MACAsR,EAAAlU,EAAA6C,GAAAkC,QAAA,6BACAoP,EAAAnU,EAAAkU,GAAAtR,KAAA,sBACAwR,EAAApU,EAAA,sBAAA8K,OAEA9K,EAAA,uDAAA+D,IAAAkQ,GACAjU,EAAA,kEAAA+D,IAAAoQ,GACAnU,EAAA,8CAAA8K,KAAAsJ,GAEApU,EAAA,gCAAAiF,MAAA,SAGA9F,EAAAC,KAAAmW,sBAAA,WAEA,IAAAjB,EAAAtU,EAAA,uBAKA,GAHAA,EAAAuU,UAAAC,YAAAC,MAAAH,GACAA,EAAAI,YAEAJ,EAAAK,QACA,OAGA3U,EAAA,gCAAAiF,MAAA,QAEA9F,EAAA0G,OAAAC,GAAAC,cAEA,MAAAkO,EAAAjU,EAAA,uDAAA+D,MACAoQ,EAAAnU,EAAA,kEAAA+D,MACA8Q,EAAA7U,EAAA,mDAAA+D,MAEA+Q,EAAA9U,EAAA,2BAAA6K,SAAA,UACAkK,EAAA/U,EAAA,0BAAA6K,SAAA,UAEAmJ,EAAAhU,oDAAAiU,OAEA,IAAArR,GACAoS,eAAAf,EACAE,mBAAAA,EACAU,kBAAAA,GAGA7U,EAAAkG,MACAC,IAAA,8BACAC,KAAA,OACAC,SAAA,OACAC,YAAA,kCACA1D,KAAA2F,KAAAC,UAAA5F,GACA2D,SAAA,SAAAC,GAEA,GADArH,EAAA0G,OAAAC,GAAAW,mBACA7G,GAAA4G,EAAAG,cAAAH,EAAAG,aAAAR,IACA3D,OAAAiG,SAAAC,KAAAlC,EAAAG,aAAAR,SAEA,GAAA,MAAAK,EAAAE,aAAA9G,GAAA4G,EAAAG,cAAA,GAAAH,EAAAG,aAAAC,QAAA,CACA,IAAA+B,EAAA,qBACAnC,EAAAG,aAAAgC,eACAA,EAAAnC,EAAAG,aAAAgC,cACAxJ,EAAA0G,OAAAC,GAAAe,mBAAA8B,EAAA,cAGA3I,EAAAgU,GAAAlN,KAAAN,EAAAG,aAAAsO,kBAEA9V,EAAAC,KAAA8V,uBAAAJ,EAAAtO,EAAAG,aAAAwO,sBACAhW,EAAAC,KAAAgW,sBAAAL,EAAAvO,EAAAG,aAAA0O,+BAOAlW,EAAAC,KAAAoW,2BAAA,SAAA3S,GAEA,MAAAmR,EAAAhU,EAAA6C,GAAAkC,QAAA,mBACAkP,EAAAjU,EAAAgU,GAAApR,KAAA,MACAsR,EAAAlU,EAAA6C,GAAAkC,QAAA,6BACAoP,EAAAnU,EAAAkU,GAAAtR,KAAA,sBAEAkS,EAAA9U,EAAA,2BAAA6K,SAAA,UACAkK,EAAA/U,EAAA,0BAAA6K,SAAA,UAEA,IAAAjI,GACAoS,eAAAf,EACAE,mBAAAA,GAGA,MAAAsB,EAAAzV,EAAA,0BACAb,EAAA0G,OAAAC,GAAA4P,kBAAAD,GAEAzV,EAAAkG,MACAC,IAAA,mCACAC,KAAA,OACAC,SAAA,OACAC,YAAA,kCACA1D,KAAA2F,KAAAC,UAAA5F,GACA2D,SAAA,SAAAC,GAGA,GAFArH,EAAA0G,OAAAC,GAAA6P,kBAAAF,QAEA7V,GAAA4G,EAAAG,cAAAH,EAAAG,aAAAR,IACA3D,OAAAiG,SAAAC,KAAAlC,EAAAG,aAAAR,SAEA,GAAA,MAAAK,EAAAE,aAAA9G,GAAA4G,EAAAG,cAAA,GAAAH,EAAAG,aAAAC,QAAA,CACA,IAAA+B,EAAA,qBACAnC,EAAAG,aAAAgC,eACAA,EAAAnC,EAAAG,aAAAgC,cACAxJ,EAAA0G,OAAAC,GAAAe,mBAAA8B,EAAA,cAGA3I,EAAAgU,GAAAlN,KAAAN,EAAAG,aAAAsO,kBAEA9V,EAAAC,KAAA8V,uBAAAJ,EAAAtO,EAAAG,aAAAwO,sBACAhW,EAAAC,KAAAgW,sBAAAL,EAAAvO,EAAAG,aAAA0O,+BAOAlW,EAAAC,KAAAwW,+BAAA,SAAA/S,GACA,MAAAgT,EAAA7V,EAAA6C,GAAAiI,OACAgL,EAAA9V,EAAA6C,GAAAD,KAAA,WAEA5C,EAAA,oCAAAG,SAAA,UACA,MAAA4V,EAAA/V,EAAA6C,GAAAkC,QAAA,gCACA/E,EAAA+V,GAAA7V,KAAA,oCAAAA,KAAA,wCAAA4G,KAAA+O,GACA7V,EAAA+V,GAAA7V,KAAA,oCAAAA,KAAA,qBAAA0C,KAAA,UAAAkT,GACA9V,EAAA+V,GAAA7V,KAAA,oCAAAD,YAAA,WAGAd,EAAAC,KAAA4W,+BAAA,SAAAnT,GACA,EAAAkC,QAAA,oCAAA5E,SAAA,UACAH,EAAA,oCAAAC,YAAA,WAGAd,EAAAC,KAAA6W,2BAAA,SAAApT,GACA7C,EAAA6C,GAAAkC,QAAA,YAAA5E,SAAA,UAGA,MAAA+V,EAAAlW,EAAA6C,GAAAkC,QAAA,iBACAoR,EAAAnW,EAAAkW,GAAAhW,KAAA,iBACAF,EAAAmW,GAAAjW,KAAA,mBAAAD,YAAA,UACAD,EAAAmW,GAAAjW,KAAA,uBAAAD,YAAA,UACAD,EAAAmW,GAAAjW,KAAA,iBAAAC,SAAA,UAEAH,EAAAmW,GAAAjW,KAAA,uBAAA8K,IAAA,SACAhL,EAAAmW,GAAAjW,KAAA,uBAAAgE,GAAA,QAAA,WACA/E,EAAAC,KAAAgX,iCAAApW,EAAAsB,SAGAtB,EAAAmW,GAAAjW,KAAA,mBAAA8K,IAAA,SACAhL,EAAAmW,GAAAjW,KAAA,mBAAAgE,GAAA,QAAA,WACA/E,EAAAC,KAAAiX,mCAAArW,EAAAsB,SAGAtB,EAAAmW,GAAAlW,YAAA,WAGAd,EAAAC,KAAAgX,iCAAA,SAAAvT,GACA,MAAAyT,EAAAtW,EAAA6C,GAAAkC,QAAA,8CACAoR,EAAAnW,EAAA6C,GAAAkC,QAAA,iBACAwR,EAAAvW,EAAAsW,GAAApW,KAAA,wBAEAsW,EAAAxW,EAAA6C,GAAAkC,QAAA,YAAAnC,KAAA,cAEAzD,EAAA0G,OAAAC,GAAAC,cAEA/F,EAAAkG,MACAC,8DAAAqQ,IACApQ,KAAA,MACAE,YAAA,kCACAC,SAAA,SAAAC,GAEA,GADArH,EAAA0G,OAAAC,GAAAW,mBACA7G,GAAA4G,EAAAG,cAAAH,EAAAG,aAAAR,IACA3D,OAAAiG,SAAAC,KAAAlC,EAAAG,aAAAR,SAEA,GAAA,MAAAK,EAAAE,aAAA9G,GAAA4G,EAAAG,cAAA,GAAAH,EAAAG,aAAAC,QAAA,CACA,IAAA+B,EAAA,qBACAnC,EAAAG,aAAAgC,eACAA,EAAAnC,EAAAG,aAAAgC,cACAxJ,EAAA0G,OAAAC,GAAAe,mBAAA8B,EAAA,cAGA3I,EAAAuW,GAAAzP,KAAAN,EAAAG,aAAA8P,6BAGAzW,EAAAmW,GAAAjW,KAAA,mBAAAC,SAAA,UACAH,EAAAmW,GAAAjW,KAAA,uBAAAC,SAAA,UACAH,EAAAmW,GAAAjW,KAAA,iBAAAD,YAAA,UAEAD,EAAAmW,GAAAjW,KAAA,iBAAA8K,IAAA,SACAhL,EAAAmW,GAAAjW,KAAA,iBAAAgE,GAAA,QAAA,WACA/E,EAAAC,KAAAsX,2BAAA1W,EAAAsB,SAGAtB,EAAAuW,GAAAtW,YAAA,UACAD,EAAA,oCAAAC,YAAA,cAMAd,EAAAC,KAAAsX,2BAAA,SAAA7T,GACA7C,EAAA6C,GAAAkC,QAAA,iBAAA7E,KAAA,YAAAD,YAAA,UACAD,EAAA6C,GAAAkC,QAAA,iBAAA7E,KAAA,iBAAAC,SAAA,UAEAH,EAAA6C,GAAAkC,QAAA,8CAAA7E,KAAA,wBAAA4G,KAAA,IAAA3G,SAAA,WAGAhB,EAAAC,KAAAiX,mCAAA,SAAAM,GACA,MAAAH,EAAAxW,EAAA2W,GAAA5R,QAAA,YAAAnC,KAAA,cACAwR,EAAApU,EAAA2W,GAAA5R,QAAA,YAAAnC,KAAA,sBACAgU,EAAA5W,EAAA2W,GAAA5R,QAAA,iBAAA7E,KAAA,sBAAA4K,OAEA9K,EAAA,4DAAA+D,IAAAyS,GACAxW,EAAA,mDAAA8K,KAAA8L,GACA5W,EAAA,6CAAA8K,KAAAsJ,GAEApU,EAAA,kDAAAgL,IAAA,SACAhL,EAAA,kDAAAkE,GAAA,QAAA,WACA/E,EAAAC,KAAAyX,6BAGA7W,EAAA,+BAAAiF,MAAA,SAGA9F,EAAAC,KAAAyX,yBAAA,WAEA7W,EAAA,+BAAAiF,MAAA,QAEA,MAAAuR,EAAAxW,EAAA,4DAAA+D,MAEA,IAAA+Q,EAAA9U,EAAA,2BAAA6K,SAAA,UACAkK,EAAA/U,EAAA,0BAAA6K,SAAA,UAEA,GAAA2L,EAAA,CAEArX,EAAA0G,OAAAC,GAAAC,cAEA,IAAAnD,GACA4T,sBAAAA,GAGAxW,EAAAkG,MACAC,IAAA,6BACAC,KAAA,OACAC,SAAA,OACAC,YAAA,kCACA1D,KAAA2F,KAAAC,UAAA5F,GACA2D,SAAA,SAAAC,GAEA,GADArH,EAAA0G,OAAAC,GAAAW,mBACA7G,GAAA4G,EAAAG,cAAAH,EAAAG,aAAAR,IACA3D,OAAAiG,SAAAC,KAAAlC,EAAAG,aAAAR,SAEA,GAAA,MAAAK,EAAAE,aAAA9G,GAAA4G,EAAAG,cAAA,GAAAH,EAAAG,aAAAC,QAAA,CACA,IAAA+B,EAAA,qBACAnC,EAAAG,aAAAgC,eACAA,EAAAnC,EAAAG,aAAAgC,cACAxJ,EAAA0G,OAAAC,GAAAe,mBAAA8B,EAAA,cAOA,GAJAxJ,EAAAC,KAAA8V,uBAAAJ,EAAAtO,EAAAG,aAAAwO,sBACAhW,EAAAC,KAAAgW,sBAAAL,EAAAvO,EAAAG,aAAA0O,2BAGArV,EAAA,6BAAA0B,OAAA,IAAA1B,EAAA,6BAAA6K,SAAA,UAAA,CACA,IAAAiM,EAAA9W,EAAA,6BAAA4C,KAAA,sBACAzD,EAAAC,KAAAuU,sBAAAmD,SASA3X,EAAAC,KAAA2X,kCAAA,SAAAlU,GAEA,IAAAmS,EAAAnS,EAAAmU,QAAAhC,eACAc,EAAAjT,EAAAmU,QAAAlB,OACApP,EAAA7D,EAAAmU,QAAAtQ,OACAuN,EAAApR,EAAAmU,QAAAR,sBAEA,IAAA1B,EAAA9U,EAAA,2BAAA6K,SAAA,UAEA1L,EAAA0G,OAAAC,GAAAC,cAEA,IAAAnD,GACA3B,eAAA+T,EACAiC,OAAAnB,EACAoB,OAAAxQ,EACAyQ,sBAAAlD,GAGAjU,EAAAkG,MACAC,IAAA,sCACAC,KAAA,OACAC,SAAA,OACAC,YAAA,kCACA1D,KAAA2F,KAAAC,UAAA5F,GACA2D,SAAA,SAAAC,GAEA,GADArH,EAAA0G,OAAAC,GAAAW,mBACA7G,GAAA4G,EAAAG,cAAAH,EAAAG,aAAAR,IACA3D,OAAAiG,SAAAC,KAAAlC,EAAAG,aAAAR,SAEA,GAAA,MAAAK,EAAAE,aAAA9G,GAAA4G,EAAAG,cAAA,GAAAH,EAAAG,aAAAC,QAAA,CACA,IAAA+B,EAAA,qBACA,MAAAnC,EAAAG,cAAAH,EAAAG,aAAAqJ,SACArH,EAAAnC,EAAAG,aAAAqJ,QACA7Q,EAAA0G,OAAAC,GAAAe,mBAAA8B,EAAA,cAMA,GAHAxJ,EAAAC,KAAA8V,uBAAAJ,EAAAtO,EAAAG,aAAAwO,sBAGAnV,EAAA,6BAAA0B,OAAA,IAAA1B,EAAA,6BAAA6K,SAAA,UAAA,CACA,IAAAiM,EAAA9W,EAAA,6BAAA4C,KAAA,sBACAzD,EAAAC,KAAAuU,sBAAAmD,QAQA3X,EAAAC,KAAAgY,2BAAA,SAAAC,GAEA,MAAArD,EAAAhU,EAAAqX,GAAAtS,QAAA,mBACAkP,EAAAjU,EAAAgU,GAAApR,KAAA,MACA4T,EAAAxW,EAAAqX,GAAAzU,KAAA,cACAkT,EAAA9V,EAAAqX,GAAAzU,KAAA,WAEA,IAAAkS,EAAA9U,EAAA,2BAAA6K,SAAA,UACAkK,EAAA/U,EAAA,0BAAA6K,SAAA,UAEA,GAAAiL,GAAAU,EAAA,CAIArX,EAAA0G,OAAAC,GAAAC,cAEA,IAAAnD,GACAoS,eAAAf,EACAuC,sBAAAA,EACAV,OAAAA,GAGA9V,EAAAkG,MACAC,IAAA,mCACAC,KAAA,OACAC,SAAA,OACAC,YAAA,kCACA1D,KAAA2F,KAAAC,UAAA5F,GACA2D,SAAA,SAAAC,GAEA,GADArH,EAAA0G,OAAAC,GAAAW,mBACA7G,GAAA4G,EAAAG,cAAAH,EAAAG,aAAAR,IACA3D,OAAAiG,SAAAC,KAAAlC,EAAAG,aAAAR,SAEA,GAAA,MAAAK,EAAAE,aAAA9G,GAAA4G,EAAAG,cAAA,GAAAH,EAAAG,aAAAC,QAAA,CACA,IAAA+B,EAAA,qBACAnC,EAAAG,aAAAgC,eACAA,EAAAnC,EAAAG,aAAAgC,cACAxJ,EAAA0G,OAAAC,GAAAe,mBAAA8B,EAAA,cAOA,GAJAxJ,EAAAC,KAAA8V,uBAAAJ,EAAAtO,EAAAG,aAAAwO,sBACAhW,EAAAC,KAAAgW,sBAAAL,EAAAvO,EAAAG,aAAA0O,2BAGArV,EAAA,6BAAA0B,OAAA,IAAA1B,EAAA,6BAAA6K,SAAA,UAAA,CACA,IAAAiM,EAAA9W,EAAA,6BAAA4C,KAAA,sBACAzD,EAAAC,KAAAuU,sBAAAmD,SAQA3X,EAAAC,KAAA8V,uBAAA,SAAAJ,EAAAhO,GAEA,IAAA8B,EAAA5I,EAAA,kDAAAgB,IAAA,WAAA,OAAAM,KAAAuH,KAAAC,MACA9I,EAAA,sBAAA8G,KAAAA,GACA9G,EAAA,4BAAAC,YAAA,MACA2I,EAAAlH,OAAA,IACA1B,EAAA,IAAA4I,EAAAG,KAAA,OAAA5I,SAAA,MACAH,EAAA,IAAA4I,EAAAG,KAAA,OAAAC,SAAA,SAGA8L,GACA9U,EAAA,2BAAAC,YAAA,UAEAd,EAAAC,KAAA4H,UAAAjH,cACAZ,EAAAC,KAAA4H,UAAAxF,iBAGArC,EAAAC,KAAAkY,kBAAA,SAAAC,EAAAzQ,GACA9G,EAAA,kBAAA8G,KAAAA,GAEAyQ,GACAvX,EAAA,uBAAAC,YAAA,UAEAd,EAAAC,KAAAoY,MAAAC,eAGAtY,EAAAC,KAAAsY,qBAAA,SAAAC,EAAA7Q,GAEA9G,EAAA,oBAAA8G,KAAAA,GAEA9G,EAAA,yBAAAmC,YAAA,SAAAwV,GAEAxY,EAAAC,KAAAC,QAAAkD,gBACApD,EAAAC,KAAAC,QAAAmC,iBAGArC,EAAAC,KAAAgW,sBAAA,SAAAwC,EAAA9Q,GAEA9G,EAAA,qBAAA8G,KAAAA,GAEA8Q,GACA5X,EAAA,2BAAAC,YAAA,UAEAd,EAAAC,KAAAgU,2BAGAjU,EAAAC,KAAAyY,kBAAA,SAAA9I,EAAAjI,GAGA9G,EAAA,kCAAA0B,OAAA,EACA1B,EAAA,kCAAA8G,KAAAA,GAEA9G,EAAA,8BAAA8G,KAAAA,GAGA9G,EAAA,sCAAAC,YAAA,UACAD,EAAA,sCAAAE,KAAA,kBAAA6O,EAAA,MAAA5O,SAAA,UAEAhB,EAAAC,KAAA0Y,oBAGA3Y,EAAAC,KAAA2Y,4BAAA,WAEA,GAAA,GAAA/X,EAAA,0BAAA0B,OACA,OAEA,MAAAsW,EAAAhY,EAAA,oGAEA,GAAAb,EAAA0G,OAAAC,GAAAmS,iBAAA,IAAA,CACAjY,EAAA,MAAAgY,GAAA5V,KAAA8V,QAAA,UACAlY,EAAA,QAAAgY,GAAA5V,KAAA8V,QAAA,UAEA,IAAAC,EAAAnY,EAAA,yCACAA,EAAAmY,GAAAtW,WAAA2N,IAAA,IACAxP,EAAA,MAAAgY,GAAA5V,KAAA8V,QAAA,SAGAlY,EAAAmY,GAAAtW,WAAA2N,IAAA,GAAA,QAAAxP,EAAAgY,GAAA9X,KAAA,OAAAoE,QAAAlC,IAAA,aACApC,EAAA,QAAAgY,GAAA5V,KAAA8V,QAAA,SACAlY,EAAA,MAAAgY,GAAA5V,KAAA8V,QAAA,iBAKAlY,EAAA,QAAAgY,GAAA5V,KAAA8V,QAAA,SACAlY,EAAA,MAAAgY,GAAA5V,KAAA8V,QAAA,UAGA/Y,EAAAC,KAAAgZ,iCAIAjZ,EAAAC,KAAAgZ,8BAAA,WACApY,EAAA,+BAAAoC,IAAA,aAAAiW,SAAArY,EAAA,kCAAAoC,IAAA,aAGAjD,EAAAC,KAAA0Y,iBAAA,WACA9X,EAAA,+CAAAsY,OACA/I,QACAC,IAAA,WACA,OAAAxP,EAAA,8BAAAuP,SAAAC,KAEA+I,OAAAvY,EAAA,QAAAkC,aAAA,IAAA,EAAA,OAEAgC,GAAA,mBAAA,WAEA/E,EAAAC,KAAAuT,+BAEA3S,EAAAwC,QAAA0B,GAAA,SAAA,WACAlE,EAAA,+CAAA4C,KAAA,YAAA4V,QAAAjJ,OAAAgJ,OAAAvY,EAAA,QAAAkC,aAAA,IAAA,EAAA,MAEA/C,EAAAC,KAAAuT,8BAAA,MAKA3S,EAAA,WA8FA,GA5FAb,EAAAC,KAAAqC,WAAAtC,EAAAC,KAAA+N,6BACAnN,EAAA,0BAAAkE,GAAA,OAAA,WACA/E,EAAAC,KAAA2Y,gCAGA/X,EAAAwC,QAAA0B,GAAA,SAAA,WACA/E,EAAAC,KAAA2Y,iCAIA5Y,EAAAC,KAAA+T,iBAEA,GAAAnT,EAAA,+BAAA0B,QACA1B,EAAA,+BAAAiF,MAAA,QAEAjF,EAAA,gBAAA+C,SAAA5D,EAAA0G,OAAA4D,MAAAgP,oBAAAtZ,EAAA0G,OAAA4D,MAAAiP,mBAEA1Y,EAAAiE,UAAA+G,IAAA,QAAA,gBAAA9G,GAAA,QAAA,eAAA,WACA,GAAA/E,EAAAC,KAAAuO,wBACA,SAAAxO,EAAA0G,OAAA4D,MAAAkP,YAAAxZ,EAAA0G,OAAA4D,MAAAiP,oBAIA1Y,EAAA,2BAAAiF,MAAA,SACA,GAGA,GAAA9F,EAAAC,KAAAyO,uBAAA,CACA,IAAAtC,EAAAvL,EAAA,WAAA+D,MACAD,EAAA,SAEA3E,EAAAyZ,oBAAAC,gBAAA,GAAA,6LAAA,GAAA,IAAA,EAAArW,OAAAiG,SAAAqQ,SAAAtW,OAAAiG,SAAAsQ,OAAAxN,EAAAzH,QACA3E,EAAAC,KAAAwO,0BACAzO,EAAA0G,OAAAC,GAAAe,mBAAA,0QAAA,8BAAA,KAAA,UAAA,IAEA,OAAA,IAIA1H,EAAAC,KAAA4T,sBACA7T,EAAAC,KAAAyR,qBAEA7Q,EAAAwC,QAAAmD,OAAA,WACAxG,EAAAC,KAAA4T,sBACA7T,EAAAC,KAAAyR,uBAGA7Q,EAAAiE,UAAAC,GAAA,QAAA,qBAAA,WACA,IAAAqH,EAAAvL,EAAAsB,MAAAsB,KAAA,WACAqD,EAAAjG,EAAAsB,MAAAsB,KAAA,cACA,IAAAoW,EAAAhZ,EAAAsB,MAAAsB,KAAA,kBAGAuD,sCAAAoF,eAAAtF,iBAFAjG,EAAAsB,MAAAsB,KAAA,qCAEAoW,IACA7Z,EAAA0G,OAAAC,GAAAC,cACA/F,EAAAkG,MACAC,IAAAA,EACAC,KAAA,MACAE,YAAA,mBACAC,SAAA,SAAAC,GACArH,EAAA0G,QACA1G,EAAA0G,OAAAC,GAAAW,cAGA,KAAAD,EAAAE,QAAA,SAAAF,EAAAyS,WACA9Z,EAAA0G,OAAAC,GAAAe,mBAAA,oDAGA7G,EAAA,mBAAA8G,KAAAN,EAAAO,cACA/G,EAAA,oBAAAiF,MAAA,cAMA9F,EAAAC,KAAAC,QAAAmC,iBAEArC,EAAA0G,OAAA4D,MAAAgP,oBAAAtZ,EAAA0G,OAAA4D,MAAAiP,mBACAvZ,EAAAC,KAAA6O,wBAGA9O,EAAAC,KAAA0Y,mBAEA3Y,EAAA+Z,UAAAC,aAEA,KAAAha,EAAAC,KAAAkN,cACAnN,EAAAC,KAAAqC,YAAAtC,EAAAC,KAAA+N,4BACAhO,EAAAC,KAAAC,QAAAQ,SAAAV,EAAAC,KAAAkN,aAEAnN,EAAAC,KAAA4H,UAAAnH,SAAAV,EAAAC,KAAAkN,cAGA9J,OAAAiG,SAAAuG,KAAA,CACA,IAAAX,EAAA7L,OAAAiG,SAAAuG,KAAAoK,UAAA,GAEA,GAAA,eAAA/K,EAAA,CAEA,MAAAgL,EADA,IAAAC,gBAAA9W,OAAAiG,SAAAsQ,QACAjQ,IAAA,eAEAuQ,EACAla,EAAAC,KAAAuU,sBAAA0F,GAAA,GAEAla,EAAAC,KAAAuU,sBAAA3T,EAAA,cAAA+D,OAAA,QAGA5E,EAAAC,KAAAgP,YAAAC,QAGAlP,EAAAC,KAAAmN,iBACApN,EAAAC,KAAAgP,YAAA,aA+SA,GA5SAjP,EAAAC,KAAAgO,kBAGApN,EAAA,cAAAqP,SACAC,UAAAtP,EAAA,0DAAAuP,SAAAC,IAAArQ,EAAAC,KAAA0O,YACA,KAEA3O,EAAAC,KAAAiO,2BAGArN,EAAA,cAAAqP,SACAC,UAAAtP,EAAA,2BAAAuP,SAAAC,IAAArQ,EAAAC,KAAA0O,YACA,KACA3O,EAAAC,KAAAkO,8BAEAtN,EAAA,2BAAAiF,MAAA,QAIAjF,EAAAiE,UAAAC,GAAA,QAAA,0BAAA,WACA/E,EAAA0G,OAAA0T,mBAAAvZ,EAAA,WAAA+D,MAAA/D,EAAA,cAAA+D,SAGA/D,EAAAiE,UAAAC,GAAA,QAAA,6CAAA,WACAlE,EAAA,sBAAAiF,MAAA,UAGAjF,EAAAiE,UAAAC,GAAA,gBAAA,qBAAA,SAAAR,GAGA,GAAAvE,EAAAC,KAAA2N,mBAAA,aAAA5N,EAAAC,KAAAyN,aAAA,qBAAA1N,EAAAC,KAAAwN,aAEA,OADApK,OAAAiG,SAAAC,KAAAvJ,EAAAC,KAAA0N,oBACApJ,EAAA8V,iBA8BA,GAzBA,GAFAxZ,EAAA,4DAAA0B,OAGA1B,EAAA,6DAAAG,SAAA,WAGAH,EAAA,6DAAAC,YAAA,UAEAD,EAAA,qDAAAoD,QACApD,EAAA,4DAAA8C,KAAA,SAAAyG,GAEA,IAAAD,EAAAtJ,EAAAsB,MAAAyD,QAAA,6BACAuC,EAAAtH,EAAAsJ,GAAA1G,KAAA,MAEA6W,EAAAzZ,EAAAK,KAAAlB,EAAAC,KAAA4H,UAAAC,eAAA,SAAAsC,GACA,OAAAA,EAAAtI,gBAAAqG,IAGA,GAAA,GAAAmS,EAAA/X,OAAA,CACA,IAAAgY,EAAAjZ,OAAAgZ,EAAA/Y,eAEAV,EAAA,qDAAAqR,OAAA,OAAAoI,EAAA,GAAAvP,KAAA,uBAAAwP,EAAAhG,OAAA,cAAA,eAMA,GAAA1T,EAAA,oBAAA0B,OAAA,CACA,IAAAiY,EAAA3Z,EAAA,kCAAA+D,MACA4V,GACA3Z,EAAA,qBAAA+D,IAAA4V,GAGA,IAAAC,EAAA,WACA5Z,EAAA,qCAAA8C,KAAA,WACA9C,EAAA,kCAAA+D,IAAA/D,EAAAsB,MAAAyC,OACA/D,EAAA,wCAAA+D,IAAA,UAIA6V,IAEA5Z,EAAA,qBAAAkE,GAAA,SAAA,WACA0V,SAKA5Z,EAAAiE,UAAAC,GAAA,gBAAA,qBAAA,WAEAlE,EAAA,kCAAA+D,IAAA,MAGA/D,EAAAiE,UAAAC,GAAA,QAAA,2CAAA,WACAlE,EAAA,2BAAA6Z,WAGA7Z,EAAAiE,UAAA+G,IAAA,QAAA,mBACAhL,EAAAiE,UAAAC,GAAA,QAAA,kBAAA,WAEA,MAAAtB,GACAgR,OAAA5T,EAAA,WAAA+D,MACA+V,UAAA9Z,EAAA,cAAA+D,MACAgW,kBAAA/Z,EAAAsB,MAAAsB,KAAA,cAEAoX,EAAAha,EAAAsB,MAAAsB,KAAA,QACAzD,EAAA0G,OAAAC,GAAAC,cACA/F,EAAAkG,MACAC,IAAA,+BACAC,KAAA,OACAC,SAAA,OACAC,YAAA,kCACA1D,KAAA2F,KAAAC,UAAA5F,GACA2D,SAAA,SAAAC,GACAhE,OAAAiG,SAAAwR,OAAAD,QAKAha,EAAAiE,UAAA+G,IAAA,QAAA,kCACAhL,EAAAiE,UAAAC,GAAA,QAAA,iCAAA,WAEA/E,EAAAC,KAAA2X,kCAAAzV,QAGAtB,EAAAiE,UAAA+G,IAAA,QAAA,sBACAhL,EAAAiE,UAAAC,GAAA,QAAA,qBAAA,WAEA,MAAA+B,EAAAjG,EAAAsB,MAAAsB,KAAA,sBACAzD,EAAAC,KAAAuU,sBAAA1N,GAAA,KAGAjG,EAAAiE,UAAA+G,IAAA,QAAA,oBACAhL,EAAAiE,UAAAC,GAAA,QAAA,mBAAA,WAEA/E,EAAAC,KAAA2U,gCAAA/T,EAAAsB,SAGAtB,EAAAiE,UAAA+G,IAAA,QAAA,iDACAhL,EAAAiE,UAAAC,GAAA,QAAA,gDAAA,WAEA/E,EAAAC,KAAAiV,0BAGArU,EAAAiE,UAAA+G,IAAA,QAAA,oBACAhL,EAAAiE,UAAAC,GAAA,QAAA,mBAAA,WAEA/E,EAAAC,KAAAkW,gCAAAtV,EAAAsB,SAGAtB,EAAAiE,UAAA+G,IAAA,QAAA,8DACAhL,EAAAiE,UAAAC,GAAA,QAAA,6DAAA,WAEA/E,EAAAC,KAAAmW,0BAGAvV,EAAAiE,UAAA+G,IAAA,QAAA,0BACAhL,EAAAiE,UAAAC,GAAA,QAAA,yBAAA,WAEA/E,EAAAC,KAAAoW,2BAAAxV,EAAAsB,SAGAtB,EAAAiE,UAAA+G,IAAA,QAAA,uDACAhL,EAAAiE,UAAAC,GAAA,QAAA,sDAAA,WAEA/E,EAAAC,KAAAwW,+BAAA5V,EAAAsB,SAGAtB,EAAAiE,UAAA+G,IAAA,QAAA,qBACAhL,EAAAiE,UAAAC,GAAA,QAAA,oBAAA,WAEA/E,EAAAC,KAAAgY,2BAAApX,EAAAsB,SAGAtB,EAAAiE,UAAA+G,IAAA,QAAA,mBACAhL,EAAAiE,UAAAC,GAAA,QAAA,kBAAA,WAEA/E,EAAAC,KAAA4W,+BAAAhW,EAAAsB,SAGAtB,EAAAiE,UAAA+G,IAAA,QAAA,yDACAhL,EAAAiE,UAAAC,GAAA,QAAA,wDAAA,WAEA/E,EAAAC,KAAA6W,2BAAAjW,EAAAsB,SAIAtB,EAAAiE,UAAA+G,IAAA,QAAA,8BACAhL,EAAAiE,UAAAC,GAAA,QAAA,6BAAA,WACA,IAAAmK,EAAArO,EAAAsB,MAAAsB,KAAA,WAEAsX,EAAAla,EAAAsB,MACAmE,KAAA0U,IAAAna,EAAA,QAAAsP,YAAAtP,EAAA,QAAAsP,aACAtP,EAAA,8BAAAuP,SAAAC,IAEAxP,EAAA,cAAAqP,SACAC,UAAAtP,EAAA,8BAAAuP,SAAAC,KACA,OAAA,WACArQ,EAAAC,KAAAgP,YAAAC,EAAArO,EAAAsB,MAAA4Y,EAAAtX,KAAA,UAAAsX,EAAAtX,KAAA,oBACA5C,EAAA,+CAAAsY,MAAA,oBAKAnZ,EAAAC,KAAAgP,YAAAC,EAAArO,EAAAsB,OACAtB,EAAA,+CAAAsY,MAAA,oBAKAtY,EAAAiE,UAAAC,GAAA,QAAA,yCAAA,WACAlE,EAAA,0CAAA4C,KAAA,eACA5C,EAAA,cAAAqP,SACAC,UAAAtP,EAAA,kCAAAuP,SAAAC,KACA,OAKArQ,EAAAC,KAAAgU,0BAGApT,EAAA,6DAAAkE,GAAA,mBAAA,WACA,IAAAmK,EAAArO,EAAAsB,MAAAsB,KAAA,WAEAzD,EAAAC,KAAAoR,oBAAAnC,KAIArO,EAAA,2CAAAkE,GAAA,QAAA,gBAAA,WACA,IAAAqH,EAAAvL,EAAA,WAAA+D,MAEAqW,QAAAC,IAAA9O,EAAA,kBAAA,QAAA+O,QADA,EAAA,KAEAta,EAAA,iCAAAG,SAAA,UAEAhB,EAAAC,KAAAyS,kCAOA7R,EAAAiE,UAAAC,GAAA,SAAA,iBAAA,WACA,MAAAtB,GACAgR,OAAA5T,EAAA,WAAA+D,MACAwW,cAAAva,EAAA,kBAAA+D,MACAyW,mBAAAxa,EAAA,sBAAA+D,SAAA/D,EAAA,qBAAA+D,SAEA5E,EAAA0G,OAAAC,GAAAC,cACA/F,EAAAkG,MACAC,IAAA,iCACAC,KAAA,OACAC,SAAA,OACAC,YAAA,kCACA1D,KAAA2F,KAAAC,UAAA5F,GACA2D,SAAA,SAAAC,GAEA,GADArH,EAAA0G,OAAAC,GAAAW,cACA,MAAAD,EAAAE,aAAA9G,GAAA4G,EAAAG,cAAA,GAAAH,EAAAG,aAAAC,QACAzH,EAAA0G,OAAAC,GAAAe,mBAAA,0BAEA,CACA7G,EAAA,gBAAA8G,KAAAN,EAAAG,aAAA8T,uBACAza,EAAA,sBAAA8G,KAAAN,EAAAG,aAAA+T,sBAGA1a,EAAA,kCAAAmC,YAAA,SAAA,GAAAnC,EAAA,sBAAA0B,QAEA,IAAA4S,EAAAtU,EAAA,oBACAA,EAAAuU,UAAAC,YAAAC,MAAAH,SAMAtU,EAAAiE,UAAAC,GAAA,WAAA,wDAAA,SAAAR,GAEA,KAAAA,EAAAiX,OACAjX,EAAA8V,mBAIAra,EAAAC,KAAAyS,gCAGA1S,EAAAC,KAAA+S,+BAEAnS,EAAA,oBAAAgL,IAAA,YAAA,oCACAhL,EAAA,oBAAAkE,GAAA,YAAA,mCAAA,SAAAR,GACAvE,EAAAC,KAAAiU,qBAAA/R,QAGAtB,EAAA,oBAAAgL,IAAA,YAAA,oCACAhL,EAAA,oBAAAkE,GAAA,YAAA,mCAAA,SAAAR,GACAvE,EAAAC,KAAAiU,qBAAA/R,QAGAnC,EAAAC,KAAA4R,iBAEA7R,EAAA0G,OAAA4D,MAAAmR,oBAAA,wBAEA1I,WAAA,WACA/S,EAAAC,KAAA6J,sBAAA,GAAA,IACA9J,EAAAC,KAAAsO,qBAGAvO,EAAAC,KAAAuN,qBAAA,CAEA,MAAAkO,EAAA5W,SAAA6W,iBAAA,OAGAD,EAAAE,QAAAC,IACAA,EAAAC,iBAAA,OAAAjR,IACAmC,QAAAgC,IAAA,kBAAAnE,EAAAlG,OAAAoX,IAAA,WACAlR,EAAAlG,OAAAqX,UAAA9X,OAAA,oBAKAwX,EAAAE,QAAAC,IACAA,EAAAE,IAAA7Z,QAAA,yCACA2Z,EAAAE,IAAAF,EAAAE,IAAA1M,QAAA,sCAAA,0DAMA0D,WAAA,WACA,MAAAkJ,KAzFA,IAAAC,EA2FAR,EAAAE,QAAAC,IACAA,EAAAG,UAAAG,SAAA,WAAAN,EAAAO,aAAA,YAAA,SAAAP,EAAAQ,aAAA,YA3FA,KADAH,EA6FAL,GA5FAS,cAAA,IAAAJ,EAAAK,gBAAA,IAAAL,EAAA9U,WA4FAyU,EAAAQ,aAAA,SACArP,QAAAgC,IAAA,kBAAA6M,EAAAE,IAAA,cACAF,EAAAG,UAAAQ,IAAA,gBACAP,EAAAvM,KAAAmM,EAAAQ,aAAA,WASA,MAAAI,EAAA,4GACAR,EAAA1Z,OAAA,EACAvC,EAAA0G,OAAAC,GAAAe,gIAAA+U,IAAA,gBAEAzc,EAAA0G,OAAAC,GAAAe,sEAAA+U,IAAA,eAAA,KAAA,YACA,QAz+CA,CA8+CAzc,WCn+CA,SAAA0c,EAAAC,GAGA,mBAAAC,QAAAA,OAAAC,IAEAD,OAAA,wBAAAD,GACA,iBAAAG,QAAAA,OAAAC,QAEAD,OAAAC,QAAAJ,IAGAD,EAAAM,UAAAL,IAXA,CAcA,oBAAAtZ,OAAAA,OAAAlB,KAAA,WAIA,SAAA6a,KAEA,IAAAC,EAAAD,EAAAE,UAoFA,OAlFAD,EAAAlY,GAAA,SAAAoY,EAAAC,GACA,GAAAD,GAAAC,EAAA,CAIA,IAAAC,EAAAlb,KAAAmb,QAAAnb,KAAAmb,YAEAC,EAAAF,EAAAF,GAAAE,EAAAF,OAMA,OAJA,GAAAI,EAAArb,QAAAkb,IACAG,EAAA7N,KAAA0N,GAGAjb,OAGA8a,EAAAO,KAAA,SAAAL,EAAAC,GACA,GAAAD,GAAAC,EAAA,CAIAjb,KAAA4C,GAAAoY,EAAAC,GAGA,IAAAK,EAAAtb,KAAAub,YAAAvb,KAAAub,gBAMA,OAJAD,EAAAN,GAAAM,EAAAN,QAEAC,IAAA,EAEAjb,OAGA8a,EAAApR,IAAA,SAAAsR,EAAAC,GACA,IAAAG,EAAApb,KAAAmb,SAAAnb,KAAAmb,QAAAH,GACA,GAAAI,GAAAA,EAAAhb,OAAA,CAGA,IAAAob,EAAAJ,EAAArb,QAAAkb,GAKA,OAJA,GAAAO,GACAJ,EAAAK,OAAAD,EAAA,GAGAxb,OAGA8a,EAAAY,UAAA,SAAAV,EAAAW,GACA,IAAAP,EAAApb,KAAAmb,SAAAnb,KAAAmb,QAAAH,GACA,GAAAI,GAAAA,EAAAhb,OAAA,CAGA,IAAAnB,EAAA,EACAgc,EAAAG,EAAAnc,GACA0c,EAAAA,MAIA,IAFA,IAAAC,EAAA5b,KAAAub,aAAAvb,KAAAub,YAAAP,GAEAC,GAAA,CACA,IAAAY,EAAAD,GAAAA,EAAAX,GACAY,IAGA7b,KAAA0J,IAAAsR,EAAAC,UAEAW,EAAAX,IAGAA,EAAAa,MAAA9b,KAAA2b,GAGAV,EAAAG,EADAnc,GAAA4c,EAAA,EAAA,GAIA,OAAA7b,OAGA8a,EAAAiB,OACAjB,EAAAkB,mBAAA,kBACAhc,KAAAmb,eACAnb,KAAAub,aAGAV,IAUA,SAAA3Z,EAAAsZ,GAAA,aAKA,mBAAAC,QAAAA,OAAAC,IAEAD,QACA,yBACA,SAAAI,GACA,OAAAL,EAAAtZ,EAAA2Z,KAEA,iBAAAF,QAAAA,OAAAC,QAEAD,OAAAC,QAAAJ,EACAtZ,EACA+a,QAAA,eAIA/a,EAAA4C,aAAA0W,EACAtZ,EACAA,EAAA2Z,WAtBA,CA0BA,oBAAA3Z,OAAAA,OAAAlB,KAIA,SAAAkB,EAAA2Z,GAIA,IAAAnc,EAAAwC,EAAAgb,OACArR,EAAA3J,EAAA2J,QAKA,SAAAsR,EAAAC,EAAAC,GACA,IAAA,IAAAC,KAAAD,EACAD,EAAAE,GAAAD,EAAAC,GAEA,OAAAF,EA4BA,SAAAG,EAAAC,EAAAtF,EAAAuF,GAEA,KAAAzc,gBAAAuc,GACA,OAAA,IAAAA,EAAAC,EAAAtF,EAAAuF,GAGA,iBAAAD,IACAA,EAAA7Z,SAAA6W,iBAAAgD,IAGAxc,KAAA0c,SAlCA,SAAAC,GACA,IAAAC,KACA,GAAAC,MAAAC,QAAAH,GAEAC,EAAAD,OACA,GAAA,iBAAAA,EAAAvc,OAEA,IAAA,IAAAnB,EAAA,EAAAA,EAAA0d,EAAAvc,OAAAnB,IACA2d,EAAArP,KAAAoP,EAAA1d,SAIA2d,EAAArP,KAAAoP,GAEA,OAAAC,EAoBAG,CAAAP,GACAxc,KAAAkX,QAAAiF,KAAAnc,KAAAkX,SAEA,mBAAAA,EACAuF,EAAAvF,EAEAiF,EAAAnc,KAAAkX,QAAAA,GAGAuF,GACAzc,KAAA4C,GAAA,SAAA6Z,GAGAzc,KAAAgd,YAEAte,IAEAsB,KAAAid,WAAA,IAAAve,EAAAwe,UAIAtM,WAAA,WACA5Q,KAAAmd,SACAC,KAAApd,OAGAuc,EAAAxB,UAAAsC,OAAAC,OAAAzC,EAAAE,WAEAwB,EAAAxB,UAAA7D,WAEAqF,EAAAxB,UAAAiC,UAAA,WACAhd,KAAAuZ,UAGAvZ,KAAA0c,SAAAjD,QAAAzZ,KAAAud,iBAAAvd,OAMAuc,EAAAxB,UAAAwC,iBAAA,SAAAf,GAEA,OAAAA,EAAAgB,UACAxd,KAAAyd,SAAAjB,IAGA,IAAAxc,KAAAkX,QAAAwG,YACA1d,KAAA2d,2BAAAnB,GAKA,IAAAoB,EAAApB,EAAAoB,SACA,GAAAA,GAAAC,EAAAD,GAAA,CAKA,IAFA,IAAAE,EAAAtB,EAAAhD,iBAAA,OAEAva,EAAA,EAAAA,EAAA6e,EAAA1d,OAAAnB,IAAA,CACA,IAAAya,EAAAoE,EAAA7e,GACAe,KAAAyd,SAAA/D,GAIA,GAAA,iBAAA1Z,KAAAkX,QAAAwG,WAAA,CACA,IAAAnX,EAAAiW,EAAAhD,iBAAAxZ,KAAAkX,QAAAwG,YACA,IAAAze,EAAA,EAAAA,EAAAsH,EAAAnG,OAAAnB,IAAA,CACA,IAAA8e,EAAAxX,EAAAtH,GACAe,KAAA2d,2BAAAI,OAKA,IAAAF,GACAG,GAAA,EACAC,GAAA,EACAC,IAAA,GAwFA,SAAAC,EAAAzE,GACA1Z,KAAA0Z,IAAAA,EA+DA,SAAA0E,EAAAvZ,EAAAtD,GACAvB,KAAA6E,IAAAA,EACA7E,KAAAuB,QAAAA,EACAvB,KAAA0Z,IAAA,IAAA2E,MAgDA,OAxMA9B,EAAAxB,UAAA4C,2BAAA,SAAAnB,GACA,IAAA8B,EAAAC,iBAAA/B,GACA,GAAA8B,EAOA,IAFA,IAAAE,EAAA,0BACAC,EAAAD,EAAAE,KAAAJ,EAAAK,iBACA,OAAAF,GAAA,CACA,IAAA5Z,EAAA4Z,GAAAA,EAAA,GACA5Z,GACA7E,KAAA4e,cAAA/Z,EAAA2X,GAEAiC,EAAAD,EAAAE,KAAAJ,EAAAK,mBAOApC,EAAAxB,UAAA0C,SAAA,SAAA/D,GACA,IAAAmF,EAAA,IAAAV,EAAAzE,GACA1Z,KAAAuZ,OAAAhM,KAAAsR,IAGAtC,EAAAxB,UAAA6D,cAAA,SAAA/Z,EAAA2X,GACA,IAAAkB,EAAA,IAAAU,EAAAvZ,EAAA2X,GACAxc,KAAAuZ,OAAAhM,KAAAmQ,IAGAnB,EAAAxB,UAAAoC,MAAA,WACA,IAAA2B,EAAA9e,KASA,SAAA+e,EAAAhF,EAAAyC,EAAAwC,GAEApO,WAAA,WACAkO,EAAAG,SAAAlF,EAAAyC,EAAAwC,KAXAhf,KAAAkf,gBAAA,EACAlf,KAAAmf,cAAA,EAEAnf,KAAAuZ,OAAAnZ,OAYAJ,KAAAuZ,OAAAE,QAAA,SAAAoF,GACAA,EAAAxD,KAAA,WAAA0D,GACAF,EAAA1B,UAbAnd,KAAAiF,YAiBAsX,EAAAxB,UAAAkE,SAAA,SAAAlF,EAAAyC,EAAAwC,GACAhf,KAAAkf,kBACAlf,KAAAmf,aAAAnf,KAAAmf,eAAApF,EAAAqF,SAEApf,KAAA0b,UAAA,YAAA1b,KAAA+Z,EAAAyC,IACAxc,KAAAid,YAAAjd,KAAAid,WAAAoC,QACArf,KAAAid,WAAAoC,OAAArf,KAAA+Z,GAGA/Z,KAAAkf,iBAAAlf,KAAAuZ,OAAAnZ,QACAJ,KAAAiF,WAGAjF,KAAAkX,QAAAoI,OAAAzU,GACAA,EAAAgC,IAAA,aAAAmS,EAAAjF,EAAAyC,IAIAD,EAAAxB,UAAA9V,SAAA,WACA,IAAA+V,EAAAhb,KAAAmf,aAAA,OAAA,OAIA,GAHAnf,KAAAuf,YAAA,EACAvf,KAAA0b,UAAAV,GAAAhb,OACAA,KAAA0b,UAAA,UAAA1b,OACAA,KAAAid,WAAA,CACA,IAAAuC,EAAAxf,KAAAmf,aAAA,SAAA,UACAnf,KAAAid,WAAAuC,GAAAxf,QAUAme,EAAApD,UAAAsC,OAAAC,OAAAzC,EAAAE,WAEAoD,EAAApD,UAAAoC,MAAA,WAGAnd,KAAAyf,qBAGAzf,KAAA0f,QAAA,IAAA1f,KAAA0Z,IAAAS,aAAA,iBAKAna,KAAA2f,WAAA,IAAAtB,MACAre,KAAA2f,WAAAhG,iBAAA,OAAA3Z,MACAA,KAAA2f,WAAAhG,iBAAA,QAAA3Z,MAEAA,KAAA0Z,IAAAC,iBAAA,OAAA3Z,MACAA,KAAA0Z,IAAAC,iBAAA,QAAA3Z,MACAA,KAAA2f,WAAA/F,IAAA5Z,KAAA0Z,IAAAE,MAGAuE,EAAApD,UAAA0E,mBAAA,WACA,OAAAzf,KAAA0Z,IAAAzU,eAAA3G,IAAA0B,KAAA0Z,IAAAS,cAGAgE,EAAApD,UAAA2E,QAAA,SAAAN,EAAAJ,GACAhf,KAAAof,SAAAA,EACApf,KAAA0b,UAAA,YAAA1b,KAAAA,KAAA0Z,IAAAsF,KAMAb,EAAApD,UAAA6E,YAAA,SAAAlX,GACA,IAAAmX,EAAA,KAAAnX,EAAA5D,KACA9E,KAAA6f,IACA7f,KAAA6f,GAAAnX,IAIAyV,EAAApD,UAAA+E,OAAA,WACA9f,KAAA0f,SAAA,EAAA,UACA1f,KAAA+f,gBAGA5B,EAAApD,UAAAiF,QAAA,WACAhgB,KAAA0f,SAAA,EAAA,WACA1f,KAAA+f,gBAGA5B,EAAApD,UAAAgF,aAAA,WACA/f,KAAA2f,WAAAM,oBAAA,OAAAjgB,MACAA,KAAA2f,WAAAM,oBAAA,QAAAjgB,MACAA,KAAA0Z,IAAAuG,oBAAA,OAAAjgB,MACAA,KAAA0Z,IAAAuG,oBAAA,QAAAjgB,OAYAoe,EAAArD,UAAAsC,OAAAC,OAAAa,EAAApD,WAEAqD,EAAArD,UAAAoC,MAAA,WACAnd,KAAA0Z,IAAAC,iBAAA,OAAA3Z,MACAA,KAAA0Z,IAAAC,iBAAA,QAAA3Z,MACAA,KAAA0Z,IAAAE,IAAA5Z,KAAA6E,IAEA7E,KAAAyf,uBAEAzf,KAAA0f,QAAA,IAAA1f,KAAA0Z,IAAAS,aAAA,gBACAna,KAAA+f,iBAIA3B,EAAArD,UAAAgF,aAAA,WACA/f,KAAA0Z,IAAAuG,oBAAA,OAAAjgB,MACAA,KAAA0Z,IAAAuG,oBAAA,QAAAjgB,OAGAoe,EAAArD,UAAA2E,QAAA,SAAAN,EAAAJ,GACAhf,KAAAof,SAAAA,EACApf,KAAA0b,UAAA,YAAA1b,KAAAA,KAAAuB,QAAAyd,KAKAzC,EAAA2D,iBAAA,SAAAhE,IACAA,EAAAA,GAAAhb,EAAAgb,WAKAxd,EAAAwd,GAEAiE,GAAArc,aAAA,SAAAoT,EAAAkJ,GAEA,OADA,IAAA7D,EAAAvc,KAAAkX,EAAAkJ,GACAnD,WAAAoD,QAAA3hB,EAAAsB,UAIAuc,EAAA2D,mBAIA3D,IC/dA,SAAA+D,EAAAle,GAAA,mBAAAqY,QAAAA,OAAAC,IAAAD,OAAA,iCAAA,UAAA,SAAAxb,GAAA,OAAAmD,EAAAke,EAAArhB,KAAA,iBAAA0b,QAAAA,OAAAC,QAAAD,OAAAC,QAAAxY,EAAAke,EAAArE,QAAA,WAAAqE,EAAAC,cAAAne,EAAAke,EAAAA,EAAApE,QAAA,CAAAhb,OAAA,SAAAof,EAAAle,GAAA,aAAA,SAAAnD,EAAAA,EAAAuhB,EAAApE,IAAAA,EAAAA,GAAAha,GAAAke,EAAApE,UAAAsE,EAAAzF,UAAA0F,SAAAD,EAAAzF,UAAA0F,OAAA,SAAAH,GAAAlE,EAAAsE,cAAAJ,KAAAtgB,KAAAkX,QAAAkF,EAAAD,QAAA,EAAAnc,KAAAkX,QAAAoJ,MAAAlE,EAAA+D,GAAAlhB,GAAA,SAAAqhB,GAAA,MAAA,iBAAAA,EAAA,SAAAA,EAAAle,EAAAue,GAAA,IAAA3hB,EAAAwhB,EAAA,OAAAvhB,EAAA,KAAAmD,EAAA,KAAA,OAAAke,EAAA9e,KAAA,SAAA8e,EAAAM,GAAA,IAAAC,EAAAzE,EAAA9a,KAAAsf,EAAA3hB,GAAA,GAAA4hB,EAAA,CAAA,IAAAC,EAAAD,EAAAze,GAAA,GAAA0e,GAAA,KAAA1e,EAAA2e,OAAA,GAAA,CAAA,IAAAC,EAAAF,EAAAhF,MAAA+E,EAAAF,GAAA3hB,OAAA,IAAAA,EAAAgiB,EAAAhiB,OAAAiiB,EAAAT,EAAA,+BAAAS,EAAAhiB,EAAA,+CAAAuhB,UAAA,IAAAxhB,EAAAA,EAAAshB,EAAAM,CAAA5gB,KAAAsgB,EAAAthB,EAAAkiB,KAAAC,UAAA,KAAA,SAAAb,EAAAle,GAAAke,EAAA9e,KAAA,SAAA8e,EAAAK,GAAA,IAAA3hB,EAAAod,EAAA9a,KAAAqf,EAAA1hB,GAAAD,GAAAA,EAAAyhB,OAAAre,GAAApD,EAAAoiB,UAAApiB,EAAA,IAAAwhB,EAAAG,EAAAve,GAAAga,EAAA9a,KAAAqf,EAAA1hB,EAAAD,MAAA6hB,CAAA7gB,KAAAsgB,GAAAtgB,OAAA2gB,EAAAvE,IAAA,SAAAuE,EAAAL,IAAAA,GAAAA,GAAAA,EAAAe,UAAAf,EAAAe,QAAApiB,GAAA,IAAAD,EAAA6d,MAAA9B,UAAAuG,MAAAd,EAAAF,EAAAzV,QAAAoW,OAAA,IAAAT,EAAA,aAAA,SAAAF,GAAAE,EAAA5V,MAAA0V,IAAA,OAAAK,EAAAve,GAAAke,EAAApE,QAAAjd,IAAA,SAAAqhB,EAAAle,GAAA,mBAAAqY,QAAAA,OAAAC,IAAAD,OAAA,wBAAArY,GAAA,iBAAAuY,QAAAA,OAAAC,QAAAD,OAAAC,QAAAxY,IAAAke,EAAAzF,UAAAzY,IAAA,CAAA,oBAAAlB,OAAAA,OAAAlB,KAAA,WAAA,SAAAsgB,KAAA,IAAAle,EAAAke,EAAAvF,UAAA,OAAA3Y,EAAAQ,GAAA,SAAA0d,EAAAle,GAAA,GAAAke,GAAAle,EAAA,CAAA,IAAAnD,EAAAe,KAAAmb,QAAAnb,KAAAmb,YAAAwF,EAAA1hB,EAAAqhB,GAAArhB,EAAAqhB,OAAA,OAAA,GAAAK,EAAA5gB,QAAAqC,IAAAue,EAAApT,KAAAnL,GAAApC,OAAAoC,EAAAiZ,KAAA,SAAAiF,EAAAle,GAAA,GAAAke,GAAAle,EAAA,CAAApC,KAAA4C,GAAA0d,EAAAle,GAAA,IAAAnD,EAAAe,KAAAub,YAAAvb,KAAAub,gBAAA,OAAAtc,EAAAqhB,GAAArhB,EAAAqhB,QAAAle,IAAA,EAAApC,OAAAoC,EAAAsH,IAAA,SAAA4W,EAAAle,GAAA,IAAAnD,EAAAe,KAAAmb,SAAAnb,KAAAmb,QAAAmF,GAAA,GAAArhB,GAAAA,EAAAmB,OAAA,CAAA,IAAAugB,EAAA1hB,EAAAc,QAAAqC,GAAA,OAAA,GAAAue,GAAA1hB,EAAAwc,OAAAkF,EAAA,GAAA3gB,OAAAoC,EAAAsZ,UAAA,SAAA4E,EAAAle,GAAA,IAAAnD,EAAAe,KAAAmb,SAAAnb,KAAAmb,QAAAmF,GAAA,GAAArhB,GAAAA,EAAAmB,OAAA,CAAAnB,EAAAA,EAAAqiB,MAAA,GAAAlf,EAAAA,MAAA,IAAA,IAAAue,EAAA3gB,KAAAub,aAAAvb,KAAAub,YAAA+E,GAAAthB,EAAA,EAAAA,EAAAC,EAAAmB,OAAApB,IAAA,CAAA,IAAAwhB,EAAAvhB,EAAAD,GAAA2hB,GAAAA,EAAAH,KAAAxgB,KAAA0J,IAAA4W,EAAAE,UAAAG,EAAAH,IAAAA,EAAA1E,MAAA9b,KAAAoC,GAAA,OAAApC,OAAAoC,EAAA2Z,OAAA,kBAAA/b,KAAAmb,eAAAnb,KAAAub,aAAA+E,IAAA,SAAAA,EAAAle,GAAA,aAAA,mBAAAqY,QAAAA,OAAAC,IAAAD,OAAA,uBAAA,WAAA,OAAArY,MAAA,iBAAAuY,QAAAA,OAAAC,QAAAD,OAAAC,QAAAxY,IAAAke,EAAAiB,QAAAnf,IAAA,CAAAlB,OAAA,WAAA,aAAA,SAAAof,EAAAA,GAAA,IAAAle,EAAAof,WAAAlB,GAAA,OAAA,GAAAA,EAAAvgB,QAAA,OAAA0hB,MAAArf,IAAAA,EAAA,SAAAue,EAAAL,GAAA,IAAAle,EAAAmc,iBAAA+B,GAAA,OAAAle,GAAAga,EAAA,kBAAAha,EAAA,4FAAAA,EAAA,SAAApD,IAAA,IAAA8hB,EAAA,CAAAA,GAAA,EAAA,IAAA1e,EAAAO,SAAAiN,cAAA,OAAAxN,EAAAkc,MAAAtd,MAAA,QAAAoB,EAAAkc,MAAAoD,QAAA,kBAAAtf,EAAAkc,MAAAqD,YAAA,QAAAvf,EAAAkc,MAAAsD,YAAA,kBAAAxf,EAAAkc,MAAAuD,UAAA,aAAA,IAAA5iB,EAAA0D,SAAAmf,MAAAnf,SAAAof,gBAAA9iB,EAAA+iB,YAAA5f,GAAA,IAAApD,EAAA2hB,EAAAve,GAAAoe,EAAAyB,eAAAhB,EAAA,KAAAX,EAAAthB,EAAAgC,OAAA/B,EAAAijB,YAAA9f,IAAA,SAAAoe,EAAApe,GAAA,GAAApD,IAAA,iBAAAoD,IAAAA,EAAAO,SAAAwf,cAAA/f,IAAAA,GAAA,iBAAAA,GAAAA,EAAAwb,SAAA,CAAA,IAAA4C,EAAAG,EAAAve,GAAA,GAAA,QAAAoe,EAAA5J,QAAA,OAAA,WAAA,IAAA,IAAA0J,GAAAtf,MAAA,EAAAG,OAAA,EAAAqQ,WAAA,EAAA4Q,YAAA,EAAAxhB,WAAA,EAAA4P,YAAA,GAAApO,EAAA,EAAAA,EAAAye,EAAAze,IAAAke,EAAAM,EAAAxe,IAAA,EAAA,OAAAke,EAAArhB,GAAA,IAAAmd,KAAAA,EAAApb,MAAAoB,EAAAigB,YAAAjG,EAAAjb,OAAAiB,EAAAkgB,aAAA,IAAA,IAAAxB,EAAA1E,EAAAmG,YAAA,cAAA/B,EAAAqB,UAAAb,EAAA,EAAAA,EAAAH,EAAAG,IAAA,CAAA,IAAAwB,EAAA5B,EAAAI,GAAAyB,EAAAjC,EAAAgC,GAAAE,EAAAlB,WAAAiB,GAAArG,EAAAoG,GAAAf,MAAAiB,GAAA,EAAAA,EAAA,IAAAC,EAAAvG,EAAAwG,YAAAxG,EAAAyG,aAAAC,EAAA1G,EAAA2G,WAAA3G,EAAA4G,cAAAC,EAAA7G,EAAA8G,WAAA9G,EAAA+G,YAAAC,EAAAhH,EAAAiH,UAAAjH,EAAAkH,aAAAC,EAAAnH,EAAAoH,gBAAApH,EAAAqH,iBAAAC,EAAAtH,EAAAuH,eAAAvH,EAAAwH,kBAAAC,EAAA/C,GAAAG,EAAA6C,EAAAxD,EAAAE,EAAAxf,QAAA,IAAA8iB,IAAA1H,EAAApb,MAAA8iB,GAAAD,EAAA,EAAAlB,EAAAY,IAAA,IAAAQ,EAAAzD,EAAAE,EAAArf,QAAA,OAAA,IAAA4iB,IAAA3H,EAAAjb,OAAA4iB,GAAAF,EAAA,EAAAf,EAAAY,IAAAtH,EAAA5K,WAAA4K,EAAApb,OAAA2hB,EAAAY,GAAAnH,EAAAgG,YAAAhG,EAAAjb,QAAA2hB,EAAAY,GAAAtH,EAAAxb,WAAAwb,EAAApb,MAAAiiB,EAAA7G,EAAA5L,YAAA4L,EAAAjb,OAAAiiB,EAAAhH,GAAA,IAAA6E,EAAA7E,EAAA,oBAAAvR,QAAA,aAAA,SAAAyV,GAAAzV,QAAAD,MAAA0V,IAAAM,GAAA,cAAA,eAAA,aAAA,gBAAA,aAAA,cAAA,YAAA,eAAA,kBAAA,mBAAA,iBAAA,qBAAAC,EAAAD,EAAAxgB,OAAA0gB,GAAA,EAAA,OAAAN,IAAA,SAAAF,EAAAle,GAAA,aAAA,mBAAAqY,QAAAA,OAAAC,IAAAD,OAAA,6CAAArY,GAAA,iBAAAuY,QAAAA,OAAAC,QAAAD,OAAAC,QAAAxY,IAAAke,EAAA0D,gBAAA5hB,IAAA,CAAAlB,OAAA,WAAA,aAAA,IAAAof,EAAA,WAAA,IAAAA,EAAApf,OAAA+iB,QAAAlJ,UAAA,GAAAuF,EAAA7B,QAAA,MAAA,UAAA,GAAA6B,EAAA0D,gBAAA,MAAA,kBAAA,IAAA,IAAA5hB,GAAA,SAAA,MAAA,KAAA,KAAAnD,EAAA,EAAAA,EAAAmD,EAAAhC,OAAAnB,IAAA,CAAA,IAAAD,EAAAoD,EAAAnD,GAAA,kBAAA,GAAAqhB,EAAAthB,GAAA,OAAAA,GAAA,GAAA,OAAA,SAAAoD,EAAAnD,GAAA,OAAAmD,EAAAke,GAAArhB,MAAA,SAAAqhB,EAAAle,GAAA,mBAAAqY,QAAAA,OAAAC,IAAAD,OAAA,wBAAA,8CAAA,SAAAxb,GAAA,OAAAmD,EAAAke,EAAArhB,KAAA,iBAAA0b,QAAAA,OAAAC,QAAAD,OAAAC,QAAAxY,EAAAke,EAAArE,QAAA,8BAAAqE,EAAA4D,aAAA9hB,EAAAke,EAAAA,EAAA0D,iBAAA,CAAA9iB,OAAA,SAAAof,EAAAle,GAAA,IAAAnD,GAAAkd,OAAA,SAAAmE,EAAAle,GAAA,IAAA,IAAAnD,KAAAmD,EAAAke,EAAArhB,GAAAmD,EAAAnD,GAAA,OAAAqhB,GAAA6D,OAAA,SAAA7D,EAAAle,GAAA,OAAAke,EAAAle,EAAAA,GAAAA,GAAA2a,UAAA,SAAAuD,GAAA,IAAAle,KAAA,GAAAya,MAAAC,QAAAwD,GAAAle,EAAAke,OAAA,GAAAA,GAAA,iBAAAA,GAAA,iBAAAA,EAAAlgB,OAAA,IAAA,IAAAnB,EAAA,EAAAA,EAAAqhB,EAAAlgB,OAAAnB,IAAAmD,EAAAmL,KAAA+S,EAAArhB,SAAAmD,EAAAmL,KAAA+S,GAAA,OAAAle,GAAAgiB,WAAA,SAAA9D,EAAAle,GAAA,IAAAnD,EAAAqhB,EAAAvgB,QAAAqC,IAAA,GAAAnD,GAAAqhB,EAAA7E,OAAAxc,EAAA,IAAAolB,UAAA,SAAA/D,EAAArhB,GAAA,KAAAqhB,EAAAgE,YAAAhE,GAAA3d,SAAAmf,MAAA,GAAAxB,EAAAA,EAAAgE,WAAAliB,EAAAke,EAAArhB,GAAA,OAAAqhB,GAAAiE,gBAAA,SAAAjE,GAAA,MAAA,iBAAAA,EAAA3d,SAAAwf,cAAA7B,GAAAA,GAAAV,YAAA,SAAAU,GAAA,IAAAle,EAAA,KAAAke,EAAAxb,KAAA9E,KAAAoC,IAAApC,KAAAoC,GAAAke,IAAAkE,mBAAA,SAAAlE,EAAAK,GAAA,IAAA3hB,KAAA,OAAAshB,EAAArhB,EAAA8d,UAAAuD,IAAA7G,QAAA,SAAA6G,GAAA,GAAAA,aAAAmE,YAAA,CAAA,IAAA9D,EAAA,YAAA3hB,EAAAuO,KAAA+S,GAAAle,EAAAke,EAAAK,IAAA3hB,EAAAuO,KAAA+S,GAAA,IAAA,IAAArhB,EAAAqhB,EAAA9G,iBAAAmH,GAAAH,EAAA,EAAAA,EAAAvhB,EAAAmB,OAAAogB,IAAAxhB,EAAAuO,KAAAtO,EAAAuhB,OAAAxhB,GAAA0lB,eAAA,SAAApE,EAAAle,EAAAnD,GAAA,IAAA0hB,EAAAL,EAAAvF,UAAA3Y,GAAApD,EAAAoD,EAAA,UAAAke,EAAAvF,UAAA3Y,GAAA,WAAA,IAAAke,EAAAtgB,KAAAhB,GAAAshB,GAAAqE,aAAArE,GAAA,IAAAle,EAAA+e,UAAAX,EAAAxgB,KAAAA,KAAAhB,GAAA4R,WAAA,WAAA+P,EAAA7E,MAAA0E,EAAApe,UAAAoe,EAAAxhB,IAAAC,GAAA,OAAA2lB,SAAA,SAAAtE,GAAA,IAAAle,EAAAO,SAAAkiB,WAAA,YAAAziB,GAAA,eAAAA,EAAAwO,WAAA0P,GAAA3d,SAAAgX,iBAAA,mBAAA2G,IAAAwE,SAAA,SAAAxE,GAAA,OAAAA,EAAApT,QAAA,cAAA,SAAAoT,EAAAle,EAAAnD,GAAA,OAAAmD,EAAA,IAAAnD,IAAA8lB,gBAAApE,EAAAL,EAAAzV,QAAA,OAAA5L,EAAA+lB,SAAA,SAAA5iB,EAAApD,GAAAC,EAAA2lB,SAAA,WAAA,IAAApE,EAAAvhB,EAAA6lB,SAAA9lB,GAAAiiB,EAAA,QAAAT,EAAApE,EAAAzZ,SAAA6W,iBAAA,IAAAyH,EAAA,KAAAL,EAAAje,SAAA6W,iBAAA,OAAAgH,GAAAK,EAAA5hB,EAAA8d,UAAAX,GAAA6I,OAAAhmB,EAAA8d,UAAA6D,IAAAE,EAAAG,EAAA,WAAAD,EAAAV,EAAApE,OAAA2E,EAAApH,QAAA,SAAA6G,GAAA,IAAArhB,EAAAuhB,EAAAF,EAAApG,aAAA+G,IAAAX,EAAApG,aAAA4G,GAAA,IAAA7hB,EAAAuhB,GAAAvZ,KAAAkM,MAAAqN,GAAA,MAAApE,GAAA,YAAAuE,GAAAA,EAAA/V,MAAA,iBAAAqW,EAAA,OAAAX,EAAA4E,UAAA,KAAA9I,IAAA,IAAAwE,EAAA,IAAAxe,EAAAke,EAAArhB,GAAA+hB,GAAAA,EAAA1f,KAAAgf,EAAAthB,EAAA4hB,QAAA3hB,IAAA,SAAAqhB,EAAAle,GAAA,mBAAAqY,QAAAA,OAAAC,IAAAD,OAAA,iBAAA,wBAAA,qBAAArY,GAAA,iBAAAuY,QAAAA,OAAAC,QAAAD,OAAAC,QAAAxY,EAAA6Z,QAAA,cAAAA,QAAA,cAAAqE,EAAA6E,YAAA7E,EAAA6E,SAAAC,KAAAhjB,EAAAke,EAAAzF,UAAAyF,EAAAiB,UAAA,CAAArgB,OAAA,SAAAof,EAAAle,GAAA,aAAA,SAAAue,EAAAL,EAAAle,GAAAke,IAAAtgB,KAAAuB,QAAA+e,EAAAtgB,KAAAqlB,OAAAjjB,EAAApC,KAAAO,UAAAujB,EAAA,EAAAhB,EAAA,GAAA9iB,KAAAslB,WAAA,IAAA9E,EAAA7d,SAAAof,gBAAAzD,MAAA2C,EAAA,iBAAAT,EAAA+E,WAAA,aAAA,mBAAAnJ,EAAA,iBAAAoE,EAAAgF,UAAA,YAAA,kBAAA5E,GAAA6E,iBAAA,sBAAAF,WAAA,iBAAAtE,GAAAJ,GAAA2E,UAAApJ,EAAAmJ,WAAAtE,EAAAyE,mBAAAzE,EAAA,WAAA0E,mBAAA1E,EAAA,WAAA2E,gBAAA3E,EAAA,SAAAH,EAAAH,EAAA5F,UAAAsC,OAAAC,OAAAgD,EAAAvF,WAAA+F,EAAA+E,YAAAlF,EAAAG,EAAAwE,QAAA,WAAAtlB,KAAA8lB,SAAAC,iBAAAC,SAAAC,UAAAjmB,KAAAc,KAAAP,SAAA,cAAAugB,EAAAlB,YAAA,SAAAU,GAAA,IAAAle,EAAA,KAAAke,EAAAxb,KAAA9E,KAAAoC,IAAApC,KAAAoC,GAAAke,IAAAQ,EAAAS,QAAA,WAAAvhB,KAAAkmB,KAAA9jB,EAAApC,KAAAuB,UAAAuf,EAAAhgB,IAAA,SAAAwf,GAAA,IAAAle,EAAApC,KAAAuB,QAAA+c,MAAA,IAAA,IAAArf,KAAAqhB,EAAA,CAAAle,EAAAye,EAAA5hB,IAAAA,GAAAqhB,EAAArhB,KAAA6hB,EAAAqF,YAAA,WAAA,IAAA7F,EAAA/B,iBAAAve,KAAAuB,SAAAa,EAAApC,KAAAqlB,OAAAe,WAAA,cAAAnnB,EAAAe,KAAAqlB,OAAAe,WAAA,aAAAzF,EAAAL,EAAAle,EAAA,OAAA,SAAApD,EAAAshB,EAAArhB,EAAA,MAAA,UAAAuhB,EAAAxgB,KAAAqlB,OAAAa,KAAAjF,GAAA,GAAAN,EAAA5gB,QAAA,KAAAyhB,WAAAb,GAAA,IAAAH,EAAAxf,MAAA+V,SAAA4J,EAAA,IAAAvE,GAAA,GAAApd,EAAAe,QAAA,KAAAyhB,WAAAxiB,GAAA,IAAAwhB,EAAArf,OAAA4V,SAAA/X,EAAA,IAAAiiB,EAAAQ,MAAAR,GAAA,EAAAA,EAAA7E,EAAAqF,MAAArF,GAAA,EAAAA,EAAA6E,GAAA7e,EAAAoe,EAAAoC,YAAApC,EAAAqC,aAAAzG,GAAAnd,EAAAuhB,EAAAuC,WAAAvC,EAAAwC,cAAAhjB,KAAAO,SAAAujB,EAAA7C,EAAAjhB,KAAAO,SAAAuiB,EAAA1G,GAAA0E,EAAAuF,eAAA,WAAA,IAAA/F,EAAAtgB,KAAAqlB,OAAAa,KAAA9jB,KAAAnD,EAAAe,KAAAqlB,OAAAe,WAAA,cAAAzF,EAAA3gB,KAAAqlB,OAAAe,WAAA,aAAApnB,EAAAC,EAAA,cAAA,eAAAuhB,EAAAvhB,EAAA,OAAA,QAAAgiB,EAAAhiB,EAAA,QAAA,OAAAmd,EAAApc,KAAAO,SAAAujB,EAAAxD,EAAAthB,GAAAoD,EAAAoe,GAAAxgB,KAAAsmB,UAAAlK,GAAAha,EAAA6e,GAAA,GAAA,IAAAL,EAAAD,EAAA,aAAA,gBAAAE,EAAAF,EAAA,MAAA,SAAAG,EAAAH,EAAA,SAAA,MAAAK,EAAAhhB,KAAAO,SAAAuiB,EAAAxC,EAAAM,GAAAxe,EAAAye,GAAA7gB,KAAAumB,UAAAvF,GAAA5e,EAAA0e,GAAA,GAAA9gB,KAAAc,IAAAsB,GAAApC,KAAA0b,UAAA,UAAA1b,QAAA8gB,EAAAwF,UAAA,SAAAhG,GAAA,IAAAle,EAAApC,KAAAqlB,OAAAe,WAAA,cAAA,OAAApmB,KAAAqlB,OAAAnO,QAAAlT,kBAAA5B,EAAAke,EAAAtgB,KAAAqlB,OAAAa,KAAAllB,MAAA,IAAA,IAAAsf,EAAA,MAAAQ,EAAAyF,UAAA,SAAAjG,GAAA,IAAAle,EAAApC,KAAAqlB,OAAAe,WAAA,cAAA,OAAApmB,KAAAqlB,OAAAnO,QAAAlT,iBAAA5B,EAAAke,EAAAtgB,KAAAqlB,OAAAa,KAAA/kB,OAAA,IAAA,IAAAmf,EAAA,MAAAQ,EAAA0F,cAAA,SAAAlG,EAAAle,GAAApC,KAAAmmB,cAAA,IAAAlnB,EAAAe,KAAAO,SAAAujB,EAAAnD,EAAA3gB,KAAAO,SAAAuiB,EAAA9jB,EAAA+X,SAAAuJ,EAAA,IAAAE,EAAAzJ,SAAA3U,EAAA,IAAA6e,EAAAjiB,IAAAgB,KAAAO,SAAAujB,GAAAtD,IAAAxgB,KAAAO,SAAAuiB,EAAA,GAAA9iB,KAAAymB,YAAAnG,EAAAle,IAAA6e,GAAAjhB,KAAA0mB,gBAAA,CAAA,IAAAtK,EAAAkE,EAAArhB,EAAA2hB,EAAAxe,EAAAue,EAAAE,KAAAA,EAAA2E,UAAAxlB,KAAA2mB,aAAAvK,EAAAwE,GAAA5gB,KAAAulB,YAAAqB,GAAA/F,EAAAgG,iBAAArB,UAAAxlB,KAAAqmB,gBAAAS,YAAA,SAAA9mB,KAAAqmB,kBAAAvF,EAAA6F,aAAA,SAAArG,EAAAle,GAAA,IAAAnD,EAAAe,KAAAqlB,OAAAe,WAAA,cAAAzF,EAAA3gB,KAAAqlB,OAAAe,WAAA,aAAA,MAAA,gBAAA9F,EAAArhB,EAAAqhB,GAAAA,GAAA,QAAAle,EAAAue,EAAAve,GAAAA,GAAA,UAAA0e,EAAAiG,KAAA,SAAAzG,EAAAle,GAAApC,KAAAymB,YAAAnG,EAAAle,GAAApC,KAAAqmB,kBAAAvF,EAAAkG,OAAAlG,EAAA0F,cAAA1F,EAAA2F,YAAA,SAAAnG,EAAAle,GAAApC,KAAAO,SAAAujB,EAAA/M,SAAAuJ,EAAA,IAAAtgB,KAAAO,SAAAuiB,EAAA/L,SAAA3U,EAAA,KAAA0e,EAAAmG,eAAA,SAAA3G,GAAA,IAAA,IAAAle,KAAApC,KAAAc,IAAAwf,EAAAsG,IAAAtG,EAAAwG,YAAA9mB,KAAAknB,cAAA5G,EAAAsG,IAAAtG,EAAAuG,gBAAAvG,EAAAuG,gBAAAzkB,GAAA8e,KAAAlhB,OAAA8gB,EAAAyE,WAAA,SAAAjF,GAAA,GAAAkB,WAAAxhB,KAAAqlB,OAAAnO,QAAAwO,oBAAA,CAAA,IAAAtjB,EAAApC,KAAA8lB,QAAA,IAAA,IAAA7mB,KAAAqhB,EAAAuG,gBAAAzkB,EAAA6jB,MAAAhnB,GAAAqhB,EAAAuG,gBAAA5nB,GAAA,IAAAA,KAAAqhB,EAAAsG,GAAAxkB,EAAA2jB,cAAA9mB,IAAA,EAAAqhB,EAAAwG,aAAA1kB,EAAA4jB,MAAA/mB,IAAA,GAAA,GAAAqhB,EAAA6G,KAAA,CAAAnnB,KAAAc,IAAAwf,EAAA6G,MAAAnnB,KAAAuB,QAAA+gB,aAAA,KAAAtiB,KAAAonB,iBAAA9G,EAAAsG,IAAA5mB,KAAAc,IAAAwf,EAAAsG,IAAA5mB,KAAA0mB,iBAAA,OAAA1mB,KAAAinB,eAAA3G,IAAA,IAAAU,EAAA,WAAA,SAAAV,GAAA,OAAAA,EAAApT,QAAA,WAAA,SAAAoT,GAAA,MAAA,IAAAA,EAAAyE,gBAAA/lB,CAAAod,GAAA0E,EAAAsG,iBAAA,WAAA,IAAApnB,KAAA0mB,gBAAA,CAAA,IAAApG,EAAAtgB,KAAAqlB,OAAAnO,QAAAwO,mBAAApF,EAAA,iBAAAA,EAAAA,EAAA,KAAAA,EAAAtgB,KAAAc,KAAA6kB,mBAAA3E,EAAA0E,mBAAApF,EAAAsF,gBAAA5lB,KAAAqnB,cAAA,IAAArnB,KAAAuB,QAAAoY,iBAAAiH,EAAA5gB,MAAA,KAAA8gB,EAAAwG,sBAAA,SAAAhH,GAAAtgB,KAAAunB,gBAAAjH,IAAAQ,EAAA0G,iBAAA,SAAAlH,GAAAtgB,KAAAunB,gBAAAjH,IAAA,IAAAkC,GAAAiF,oBAAA,aAAA3G,EAAAyG,gBAAA,SAAAjH,GAAA,GAAAA,EAAA9d,SAAAxC,KAAAuB,QAAA,CAAA,IAAAa,EAAApC,KAAA8lB,QAAAnF,EAAA6B,EAAAlC,EAAAoH,eAAApH,EAAAoH,aAAA,UAAAtlB,EAAA2jB,cAAApF,GAAA,SAAAL,GAAA,IAAA,IAAAle,KAAAke,EAAA,OAAA,EAAA,OAAA,EAAArhB,CAAAmD,EAAA2jB,gBAAA/lB,KAAA2nB,oBAAAhH,KAAAve,EAAA4jB,QAAAhmB,KAAAuB,QAAA+c,MAAAgC,EAAAoH,cAAA,UAAAtlB,EAAA4jB,MAAArF,IAAAA,KAAAve,EAAA6jB,MAAA7jB,EAAA6jB,MAAAtF,GAAAO,KAAAlhB,aAAAoC,EAAA6jB,MAAAtF,GAAA3gB,KAAA0b,UAAA,iBAAA1b,SAAA8gB,EAAA6G,kBAAA,WAAA3nB,KAAA4nB,yBAAA5nB,KAAAuB,QAAA0e,oBAAAW,EAAA5gB,MAAA,GAAAA,KAAA0mB,iBAAA,GAAA5F,EAAAoG,cAAA,SAAA5G,GAAA,IAAAle,KAAA,IAAA,IAAAnD,KAAAqhB,EAAAle,EAAAnD,GAAA,GAAAe,KAAAc,IAAAsB,IAAA,IAAAqgB,GAAAkD,mBAAA,GAAAD,mBAAA,GAAAE,gBAAA,IAAA,OAAA9E,EAAA8G,uBAAA,WAAA5nB,KAAAc,IAAA2hB,IAAA3B,EAAA+G,QAAA,SAAAvH,GAAAA,EAAAmB,MAAAnB,GAAA,EAAAA,EAAAtgB,KAAAqnB,aAAA/G,EAAA,MAAAQ,EAAAgH,WAAA,WAAA9nB,KAAAuB,QAAA+iB,WAAApC,YAAAliB,KAAAuB,SAAAvB,KAAAc,KAAA8V,QAAA,KAAA5W,KAAA0b,UAAA,UAAA1b,QAAA8gB,EAAA/e,OAAA,WAAA,OAAAkf,GAAAO,WAAAxhB,KAAAqlB,OAAAnO,QAAAwO,qBAAA1lB,KAAAqb,KAAA,gBAAA,WAAArb,KAAA8nB,oBAAA9nB,KAAA0D,aAAA1D,KAAA8nB,cAAAhH,EAAAiH,OAAA,kBAAA/nB,KAAAgoB,SAAAhoB,KAAAc,KAAA8V,QAAA,KAAA,IAAA0J,EAAAtgB,KAAAqlB,OAAAnO,QAAA9U,KAAAA,EAAApC,KAAAioB,mCAAA,iBAAAjoB,KAAAkoB,sBAAAloB,KAAAulB,YAAA4B,KAAA7G,EAAA6H,YAAAvB,GAAAtG,EAAA8H,aAAAtB,YAAA,EAAAD,gBAAAzkB,KAAA0e,EAAAoH,sBAAA,WAAAloB,KAAAgoB,UAAAhoB,KAAA0b,UAAA,WAAAoF,EAAAmH,mCAAA,SAAA3H,GAAA,IAAAle,EAAApC,KAAAqlB,OAAAnO,QAAAoJ,GAAA,GAAAle,EAAAimB,QAAA,MAAA,UAAA,IAAA,IAAAppB,KAAAmD,EAAA,OAAAnD,GAAA6hB,EAAApd,KAAA,WAAA1D,KAAAgoB,UAAA,EAAAhoB,KAAAc,KAAA8V,QAAA,KAAA,IAAA0J,EAAAtgB,KAAAqlB,OAAAnO,QAAA9U,KAAAA,EAAApC,KAAAioB,mCAAA,gBAAAjoB,KAAAsoB,oBAAAtoB,KAAAulB,YAAA4B,KAAA7G,EAAA8H,aAAAxB,GAAAtG,EAAA6H,YAAArB,YAAA,EAAAD,gBAAAzkB,KAAA0e,EAAAwH,oBAAA,WAAAtoB,KAAAgoB,WAAAhoB,KAAAc,KAAA8V,QAAA,SAAA5W,KAAA0b,UAAA,UAAAoF,EAAAyH,QAAA,WAAAvoB,KAAAc,KAAAP,SAAA,GAAAC,KAAA,GAAAgoB,MAAA,GAAAta,IAAA,GAAA+I,OAAA,GAAAsO,WAAA,GAAAC,UAAA,MAAA7E,IAAA,SAAAL,EAAAle,GAAA,aAAA,mBAAAqY,QAAAA,OAAAC,IAAAD,OAAA,qBAAA,wBAAA,oBAAA,uBAAA,UAAA,SAAAxb,EAAA0hB,EAAA3hB,EAAAwhB,GAAA,OAAApe,EAAAke,EAAArhB,EAAA0hB,EAAA3hB,EAAAwhB,KAAA,iBAAA7F,QAAAA,OAAAC,QAAAD,OAAAC,QAAAxY,EAAAke,EAAArE,QAAA,cAAAA,QAAA,YAAAA,QAAA,kBAAAA,QAAA,WAAAqE,EAAA6E,SAAA/iB,EAAAke,EAAAA,EAAAzF,UAAAyF,EAAAiB,QAAAjB,EAAA4D,aAAA5D,EAAA6E,SAAAC,MAAA,CAAAlkB,OAAA,SAAAof,EAAAle,EAAAnD,EAAA0hB,EAAA3hB,GAAA,aAAA,SAAAwhB,EAAAF,EAAAle,GAAA,IAAAnD,EAAA0hB,EAAA4D,gBAAAjE,GAAA,GAAArhB,EAAA,CAAAe,KAAAuB,QAAAtC,EAAA4hB,IAAA7gB,KAAAyoB,SAAA5H,EAAA7gB,KAAAuB,UAAAvB,KAAAkX,QAAAyJ,EAAAxE,UAAAnc,KAAA6lB,YAAA6C,UAAA1oB,KAAAygB,OAAAre,GAAA,IAAApD,IAAAgiB,EAAAhhB,KAAAuB,QAAAonB,aAAA3pB,EAAAwjB,EAAAxjB,GAAAgB,KAAAA,KAAAslB,UAAAtlB,KAAAomB,WAAA,eAAApmB,KAAAqlB,cAAAzE,GAAAA,EAAAhW,MAAA,mBAAA5K,KAAA6lB,YAAA+C,UAAA,MAAA3pB,GAAAqhB,IAAA,SAAAW,EAAAX,GAAA,SAAAle,IAAAke,EAAAxE,MAAA9b,KAAAmhB,WAAA,OAAA/e,EAAA2Y,UAAAsC,OAAAC,OAAAgD,EAAAvF,WAAA3Y,EAAA2Y,UAAA8K,YAAAzjB,EAAAA,EAAA,IAAAwe,EAAAN,EAAAzV,QAAAgW,EAAAP,EAAApE,OAAA4E,EAAA,aAAAE,EAAA,EAAAwB,KAAAhC,EAAAoI,UAAA,WAAApI,EAAA4E,KAAApmB,EAAAwhB,EAAAkI,UAAAG,gBAAAtoB,SAAA,YAAAuoB,YAAA,EAAAC,YAAA,EAAAC,WAAA,EAAA3kB,QAAA,EAAA4kB,iBAAA,EAAAvD,mBAAA,OAAAyC,aAAAE,QAAA,EAAA7C,UAAA,gBAAA4C,cAAAC,QAAA,EAAA7C,UAAA,aAAA,IAAA/C,EAAAjC,EAAAzF,UAAA4F,EAAAxE,OAAAsG,EAAArgB,EAAA2Y,WAAA0H,EAAAhC,OAAA,SAAAH,GAAAK,EAAAxE,OAAAnc,KAAAkX,QAAAoJ,IAAAmC,EAAA2D,WAAA,SAAA9F,GAAA,IAAAle,EAAApC,KAAA6lB,YAAAqD,cAAA5I,GAAA,OAAAle,QAAA,IAAApC,KAAAkX,QAAA9U,GAAApC,KAAAkX,QAAA9U,GAAApC,KAAAkX,QAAAoJ,IAAAE,EAAA0I,eAAAJ,WAAA,eAAAK,WAAA,eAAAC,cAAA,kBAAAL,WAAA,eAAAC,UAAA,cAAA3kB,OAAA,gBAAA4kB,gBAAA,uBAAAxG,EAAA6C,QAAA,WAAAtlB,KAAAqpB,cAAArpB,KAAAspB,UAAAtpB,KAAAupB,MAAAvpB,KAAAkX,QAAAqS,OAAA5I,EAAAxE,OAAAnc,KAAAuB,QAAA+c,MAAAte,KAAAkX,QAAA2R,gBAAA7oB,KAAAomB,WAAA,WAAApmB,KAAAwpB,cAAA/G,EAAA4G,YAAA,WAAArpB,KAAAypB,MAAAzpB,KAAA0pB,SAAA1pB,KAAAuB,QAAAgF,WAAAkc,EAAAiH,SAAA,SAAApJ,GAAA,IAAA,IAAAle,EAAApC,KAAA2pB,wBAAArJ,GAAArhB,EAAAe,KAAA6lB,YAAAT,KAAAzE,KAAA3hB,EAAA,EAAAA,EAAAoD,EAAAhC,OAAApB,IAAA,CAAA,IAAAiiB,EAAA,IAAAhiB,EAAAmD,EAAApD,GAAAgB,MAAA2gB,EAAApT,KAAA0T,GAAA,OAAAN,GAAA8B,EAAAkH,wBAAA,SAAArJ,GAAA,OAAAK,EAAA6D,mBAAAlE,EAAAtgB,KAAAkX,QAAAnT,eAAA0e,EAAAmH,gBAAA,WAAA,OAAA5pB,KAAAypB,MAAA/pB,IAAA,SAAA4gB,GAAA,OAAAA,EAAA/e,WAAAkhB,EAAA4C,OAAA,WAAArlB,KAAA6pB,eAAA7pB,KAAA8pB,gBAAA,IAAAxJ,EAAAtgB,KAAAomB,WAAA,iBAAAhkB,OAAA,IAAAke,EAAAA,GAAAtgB,KAAA+pB,gBAAA/pB,KAAAgqB,YAAAhqB,KAAAypB,MAAArnB,GAAApC,KAAA+pB,iBAAA,GAAAtH,EAAArB,MAAAqB,EAAA4C,OAAA5C,EAAAoH,aAAA,WAAA7pB,KAAAuhB,WAAAkB,EAAAlB,QAAA,WAAAvhB,KAAAkmB,KAAAjnB,EAAAe,KAAAuB,UAAAkhB,EAAAwH,gBAAA,SAAA3J,EAAAle,GAAA,IAAAue,EAAA3hB,EAAAgB,KAAAkX,QAAAoJ,GAAAthB,GAAA,iBAAAA,EAAA2hB,EAAA3gB,KAAAuB,QAAA4gB,cAAAnjB,GAAAA,aAAAylB,cAAA9D,EAAA3hB,GAAAgB,KAAAsgB,GAAAK,EAAA1hB,EAAA0hB,GAAAve,GAAApD,GAAAgB,KAAAsgB,GAAA,GAAAmC,EAAAuH,YAAA,SAAA1J,EAAAle,GAAAke,EAAAtgB,KAAAkqB,mBAAA5J,GAAAtgB,KAAAmqB,aAAA7J,EAAAle,GAAApC,KAAAoqB,eAAA3H,EAAAyH,mBAAA,SAAA5J,GAAA,OAAAA,EAAAxgB,OAAA,SAAAwgB,GAAA,OAAAA,EAAA+J,aAAA5H,EAAA0H,aAAA,SAAA7J,EAAAle,GAAA,GAAApC,KAAAsqB,qBAAA,SAAAhK,GAAAA,GAAAA,EAAAlgB,OAAA,CAAA,IAAAnB,KAAAqhB,EAAA7G,QAAA,SAAA6G,GAAA,IAAAK,EAAA3gB,KAAAuqB,uBAAAjK,GAAAK,EAAA1Y,KAAAqY,EAAAK,EAAA6J,UAAApoB,GAAAke,EAAAmK,gBAAAxrB,EAAAsO,KAAAoT,IAAA3gB,MAAAA,KAAA0qB,oBAAAzrB,KAAAwjB,EAAA8H,uBAAA,WAAA,OAAAzG,EAAA,EAAAhB,EAAA,IAAAL,EAAAiI,oBAAA,SAAApK,GAAAtgB,KAAA2qB,gBAAArK,EAAA7G,QAAA,SAAA6G,EAAAle,GAAApC,KAAA4qB,cAAAtK,EAAArY,KAAAqY,EAAAwD,EAAAxD,EAAAwC,EAAAxC,EAAAkK,UAAApoB,IAAApC,OAAAyiB,EAAAkI,cAAA,WAAA,IAAArK,EAAAtgB,KAAAkX,QAAA2Q,QAAA,OAAA,OAAAvH,QAAA,IAAAA,OAAAtgB,KAAA6nB,QAAA,IAAA7nB,KAAA6nB,QAAA,SAAAvH,GAAA,GAAA,iBAAAA,EAAA,OAAAA,EAAA,IAAAle,EAAAke,EAAAuK,MAAA,qBAAA5rB,EAAAmD,GAAAA,EAAA,GAAAue,EAAAve,GAAAA,EAAA,GAAA,OAAAnD,EAAAmB,QAAAnB,EAAAuiB,WAAAviB,KAAAyjB,EAAA/B,IAAA,GAAA,EAAAvE,CAAAkE,GAAAtgB,KAAA6nB,UAAApF,EAAAmI,cAAA,SAAAtK,EAAAle,EAAAnD,EAAA0hB,EAAA3hB,GAAA2hB,EAAAL,EAAAyG,KAAA3kB,EAAAnD,IAAAqhB,EAAAuH,QAAA7oB,EAAAgB,KAAA6nB,SAAAvH,EAAA0G,OAAA5kB,EAAAnD,KAAAwjB,EAAA2H,YAAA,WAAApqB,KAAAipB,mBAAAxG,EAAAwG,gBAAA,WAAA,GAAAjpB,KAAAomB,WAAA,mBAAA,CAAA,IAAAhkB,EAAApC,KAAA8qB,oBAAA1oB,IAAApC,KAAA+qB,qBAAA3oB,EAAApB,OAAA,GAAAhB,KAAA+qB,qBAAA3oB,EAAAjB,QAAA,MAAAshB,EAAAqI,kBAAAhK,EAAA2B,EAAAsI,qBAAA,SAAAzK,EAAAle,GAAA,QAAA,IAAAke,EAAA,CAAA,IAAArhB,EAAAe,KAAAkmB,KAAAjnB,EAAAsjB,cAAAjC,GAAAle,EAAAnD,EAAA2jB,YAAA3jB,EAAA4jB,aAAA5jB,EAAAukB,gBAAAvkB,EAAAwkB,iBAAAxkB,EAAA+jB,cAAA/jB,EAAA8jB,WAAA9jB,EAAA0kB,eAAA1kB,EAAA2kB,mBAAAtD,EAAAnc,KAAA0U,IAAAyH,EAAA,GAAAtgB,KAAAuB,QAAA+c,MAAAlc,EAAA,QAAA,UAAAke,EAAA,OAAAmC,EAAA6H,qBAAA,SAAAhK,EAAAle,GAAA,SAAAnD,IAAAD,EAAAgsB,cAAA1K,EAAA,WAAA,MAAAle,IAAA,SAAAue,MAAAM,GAAAT,GAAAvhB,IAAA,IAAAD,EAAAgB,KAAAwgB,EAAApe,EAAAhC,OAAA,GAAAgC,GAAAoe,EAAA,CAAA,IAAAS,EAAA,EAAA7e,EAAAqX,QAAA,SAAArX,GAAAA,EAAAiZ,KAAAiF,EAAAK,UAAA1hB,KAAAwjB,EAAAuI,cAAA,SAAA1K,EAAAle,EAAAnD,GAAA,IAAA0hB,EAAAve,GAAAA,GAAA6iB,OAAAhmB,GAAAA,EAAA,GAAAe,KAAA0b,UAAA4E,EAAAK,GAAAE,EAAA,GAAA7gB,KAAAyoB,SAAAzoB,KAAAyoB,UAAA5H,EAAA7gB,KAAAuB,SAAAa,EAAA,CAAA,IAAApD,EAAA6hB,EAAAoK,MAAA7oB,GAAApD,EAAA8F,KAAAwb,EAAAtgB,KAAAyoB,SAAAllB,QAAAvE,EAAAC,QAAAe,KAAAyoB,SAAAllB,QAAA+c,EAAArhB,IAAAwjB,EAAAyI,OAAA,SAAA5K,GAAA,IAAAle,EAAApC,KAAAmrB,QAAA7K,GAAAle,IAAAA,EAAAioB,WAAA,IAAA5H,EAAA2I,SAAA,SAAA9K,GAAA,IAAAle,EAAApC,KAAAmrB,QAAA7K,GAAAle,UAAAA,EAAAioB,WAAA5H,EAAA8G,MAAA,SAAAjJ,IAAAA,EAAAtgB,KAAAqrB,MAAA/K,MAAAtgB,KAAAspB,OAAAtpB,KAAAspB,OAAArE,OAAA3E,GAAAA,EAAA7G,QAAAzZ,KAAAkrB,OAAAlrB,QAAAyiB,EAAA6I,QAAA,SAAAhL,IAAAA,EAAAtgB,KAAAqrB,MAAA/K,KAAAA,EAAA7G,QAAA,SAAA6G,GAAAK,EAAAyD,WAAApkB,KAAAspB,OAAAhJ,GAAAtgB,KAAAorB,SAAA9K,IAAAtgB,OAAAyiB,EAAA4I,MAAA,SAAA/K,GAAA,GAAAA,EAAA,MAAA,iBAAAA,IAAAA,EAAAtgB,KAAAuB,QAAAiY,iBAAA8G,IAAAK,EAAA5D,UAAAuD,IAAAmC,EAAAqH,cAAA,WAAA9pB,KAAAspB,QAAAtpB,KAAAspB,OAAAlpB,SAAAJ,KAAAurB,mBAAAvrB,KAAAspB,OAAA7P,QAAAzZ,KAAAwrB,aAAAxrB,QAAAyiB,EAAA8I,iBAAA,WAAA,IAAAjL,EAAAtgB,KAAAuB,QAAAkqB,wBAAArpB,EAAApC,KAAAkmB,KAAAlmB,KAAA0rB,eAAAlrB,KAAA8f,EAAA9f,KAAA4B,EAAAwgB,YAAAxgB,EAAAohB,gBAAAtV,IAAAoS,EAAApS,IAAA9L,EAAA2gB,WAAA3gB,EAAAuhB,eAAA6E,MAAAlI,EAAAkI,OAAApmB,EAAAygB,aAAAzgB,EAAAqhB,kBAAAxM,OAAAqJ,EAAArJ,QAAA7U,EAAA4gB,cAAA5gB,EAAAwhB,qBAAAnB,EAAA+I,aAAA1K,EAAA2B,EAAAkJ,kBAAA,SAAArL,GAAA,IAAAle,EAAAke,EAAAmL,wBAAA9K,EAAA3gB,KAAA0rB,cAAA1sB,EAAAC,EAAAqhB,GAAA,OAAA9f,KAAA4B,EAAA5B,KAAAmgB,EAAAngB,KAAAxB,EAAAkkB,WAAAhV,IAAA9L,EAAA8L,IAAAyS,EAAAzS,IAAAlP,EAAAqkB,UAAAmF,MAAA7H,EAAA6H,MAAApmB,EAAAomB,MAAAxpB,EAAAmkB,YAAAlM,OAAA0J,EAAA1J,OAAA7U,EAAA6U,OAAAjY,EAAAskB,eAAAb,EAAA7C,YAAAe,EAAAf,YAAA6C,EAAA+G,WAAA,WAAAlJ,EAAA3G,iBAAA,SAAA3Z,MAAAA,KAAA4rB,eAAA,GAAAnJ,EAAAoJ,aAAA,WAAAvL,EAAAL,oBAAA,SAAAjgB,MAAAA,KAAA4rB,eAAA,GAAAnJ,EAAAqJ,SAAA,WAAA9rB,KAAAqE,UAAAsc,EAAA+D,eAAAlE,EAAA,WAAA,KAAAiC,EAAApe,OAAA,WAAArE,KAAA4rB,eAAA5rB,KAAA+rB,qBAAA/rB,KAAAqlB,UAAA5C,EAAAsJ,kBAAA,WAAA,IAAAzL,EAAArhB,EAAAe,KAAAuB,SAAA,OAAAvB,KAAAkmB,MAAA5F,GAAAA,EAAA9O,aAAAxR,KAAAkmB,KAAA1U,YAAAiR,EAAAuJ,SAAA,SAAA1L,GAAA,IAAAle,EAAApC,KAAA0pB,SAAApJ,GAAA,OAAAle,EAAAhC,SAAAJ,KAAAypB,MAAAzpB,KAAAypB,MAAAxE,OAAA7iB,IAAAA,GAAAqgB,EAAAwJ,SAAA,SAAA3L,GAAA,IAAAle,EAAApC,KAAAgsB,SAAA1L,GAAAle,EAAAhC,SAAAJ,KAAAgqB,YAAA5nB,GAAA,GAAApC,KAAA+nB,OAAA3lB,KAAAqgB,EAAAyJ,UAAA,SAAA5L,GAAA,IAAAle,EAAApC,KAAA0pB,SAAApJ,GAAA,GAAAle,EAAAhC,OAAA,CAAA,IAAAnB,EAAAe,KAAAypB,MAAAnI,MAAA,GAAAthB,KAAAypB,MAAArnB,EAAA6iB,OAAAhmB,GAAAe,KAAA6pB,eAAA7pB,KAAA8pB,gBAAA9pB,KAAAgqB,YAAA5nB,GAAA,GAAApC,KAAA+nB,OAAA3lB,GAAApC,KAAAgqB,YAAA/qB,KAAAwjB,EAAAsF,OAAA,SAAAzH,GAAA,GAAAtgB,KAAAsqB,qBAAA,SAAAhK,GAAAA,GAAAA,EAAAlgB,OAAA,CAAA,IAAAgC,EAAApC,KAAA2qB,gBAAArK,EAAA7G,QAAA,SAAA6G,EAAArhB,GAAAqhB,EAAAuH,QAAA5oB,EAAAmD,GAAAke,EAAAyH,aAAAtF,EAAA/e,KAAA,SAAA4c,GAAA,GAAAtgB,KAAAsqB,qBAAA,OAAAhK,GAAAA,GAAAA,EAAAlgB,OAAA,CAAA,IAAAgC,EAAApC,KAAA2qB,gBAAArK,EAAA7G,QAAA,SAAA6G,EAAArhB,GAAAqhB,EAAAuH,QAAA5oB,EAAAmD,GAAAke,EAAA5c,WAAA+e,EAAA0J,mBAAA,SAAA7L,GAAA,IAAAle,EAAApC,KAAAosB,SAAA9L,GAAAtgB,KAAA+nB,OAAA3lB,IAAAqgB,EAAA4J,iBAAA,SAAA/L,GAAA,IAAAle,EAAApC,KAAAosB,SAAA9L,GAAAtgB,KAAA0D,KAAAtB,IAAAqgB,EAAA0I,QAAA,SAAA7K,GAAA,IAAA,IAAAle,EAAA,EAAAA,EAAApC,KAAAypB,MAAArpB,OAAAgC,IAAA,CAAA,IAAAnD,EAAAe,KAAAypB,MAAArnB,GAAA,GAAAnD,EAAAsC,SAAA+e,EAAA,OAAArhB,IAAAwjB,EAAA2J,SAAA,SAAA9L,GAAA,IAAAle,KAAA,OAAAke,EAAAK,EAAA5D,UAAAuD,IAAA7G,QAAA,SAAA6G,GAAA,IAAArhB,EAAAe,KAAAmrB,QAAA7K,GAAArhB,GAAAmD,EAAAmL,KAAAtO,IAAAe,MAAAoC,GAAAqgB,EAAA1gB,OAAA,SAAAue,GAAA,IAAAle,EAAApC,KAAAosB,SAAA9L,GAAAtgB,KAAAsqB,qBAAA,SAAAloB,GAAAA,GAAAA,EAAAhC,QAAAgC,EAAAqX,QAAA,SAAA6G,GAAAA,EAAAve,SAAA4e,EAAAyD,WAAApkB,KAAAypB,MAAAnJ,IAAAtgB,OAAAyiB,EAAA8F,QAAA,WAAA,IAAAjI,EAAAtgB,KAAAuB,QAAA+c,MAAAgC,EAAAnf,OAAA,GAAAmf,EAAA/f,SAAA,GAAA+f,EAAAtf,MAAA,GAAAhB,KAAAypB,MAAAhQ,QAAA,SAAA6G,GAAAA,EAAAiI,YAAAvoB,KAAA6rB,eAAA,IAAAzpB,EAAApC,KAAAuB,QAAAonB,oBAAAnG,EAAApgB,UAAApC,KAAAuB,QAAAonB,aAAA9H,GAAAA,EAAAyL,WAAAtsB,KAAAuB,QAAAvB,KAAA6lB,YAAA+C,YAAApI,EAAAlf,KAAA,SAAAgf,GAAA,IAAAle,GAAAke,EAAAK,EAAA4D,gBAAAjE,KAAAA,EAAAqI,aAAA,OAAAvmB,GAAAogB,EAAApgB,IAAAoe,EAAAlD,OAAA,SAAAgD,EAAAle,GAAA,IAAAnD,EAAAgiB,EAAAT,GAAA,OAAAvhB,EAAAypB,SAAA/H,EAAAxE,UAAAqE,EAAAkI,UAAA/H,EAAAxE,OAAAld,EAAAypB,SAAAtmB,GAAAnD,EAAAiqB,cAAAvI,EAAAxE,UAAAqE,EAAA0I,eAAAjqB,EAAA2pB,UAAAtI,EAAArhB,EAAAqC,KAAAkf,EAAAlf,KAAArC,EAAAmmB,KAAAnE,EAAAjiB,GAAA2hB,EAAAqE,SAAA/lB,EAAAqhB,GAAAO,GAAAA,EAAAQ,SAAAR,EAAAQ,QAAAf,EAAArhB,GAAAA,GAAA,IAAAyjB,GAAA6J,GAAA,EAAA/L,EAAA,KAAA,OAAAA,EAAA4E,KAAApmB,EAAAwhB,IAAA,SAAAF,EAAAle,GAAA,mBAAAqY,QAAAA,OAAAC,IAAAD,OAAA,0BAAA,qBAAArY,GAAA,iBAAAuY,QAAAA,OAAAC,QAAAD,OAAAC,QAAAxY,EAAA6Z,QAAA,cAAAqE,EAAAkM,QAAAlM,EAAAkM,YAAAlM,EAAAkM,QAAApH,KAAAhjB,EAAAke,EAAA6E,WAAA,CAAAjkB,OAAA,SAAAof,GAAA,aAAA,SAAAle,IAAAke,EAAA8E,KAAAtJ,MAAA9b,KAAAmhB,WAAA,IAAAliB,EAAAmD,EAAA2Y,UAAAsC,OAAAC,OAAAgD,EAAA8E,KAAArK,WAAA4F,EAAA1hB,EAAAqmB,QAAArmB,EAAAqmB,QAAA,WAAAtlB,KAAAuH,GAAAvH,KAAAqlB,OAAAoH,WAAA9L,EAAAO,KAAAlhB,MAAAA,KAAA0sB,aAAAztB,EAAA0tB,eAAA,WAAA,IAAA3sB,KAAAqqB,UAAA,CAAArqB,KAAA0sB,SAAAnlB,GAAAvH,KAAAuH,GAAAvH,KAAA0sB,SAAA,kBAAA1sB,KAAAuH,GAAAvH,KAAA0sB,SAAAE,OAAAzoB,KAAAyoB,SAAA,IAAAtM,EAAAtgB,KAAAqlB,OAAAnO,QAAA2V,YAAAzqB,EAAApC,KAAAqlB,OAAAyH,SAAA,IAAA,IAAA7tB,KAAAqhB,EAAA,CAAA,IAAAK,EAAAve,EAAAnD,GAAAe,KAAA0sB,SAAAztB,GAAA0hB,EAAA3gB,KAAAuB,QAAAvB,SAAA,IAAAhB,EAAAC,EAAAspB,QAAA,OAAAtpB,EAAAspB,QAAA,WAAAvpB,EAAA8c,MAAA9b,KAAAmhB,WAAAnhB,KAAAc,KAAA8V,QAAA,MAAAxU,IAAA,SAAAke,EAAAle,GAAA,mBAAAqY,QAAAA,OAAAC,IAAAD,OAAA,iCAAA,oBAAA,qBAAArY,GAAA,iBAAAuY,QAAAA,OAAAC,QAAAD,OAAAC,QAAAxY,EAAA6Z,QAAA,YAAAA,QAAA,cAAAqE,EAAAkM,QAAAlM,EAAAkM,YAAAlM,EAAAkM,QAAAO,WAAA3qB,EAAAke,EAAAiB,QAAAjB,EAAA6E,WAAA,CAAAjkB,OAAA,SAAAof,EAAAle,GAAA,aAAA,SAAAnD,EAAAqhB,GAAAtgB,KAAAH,QAAAygB,EAAAA,IAAAtgB,KAAAkX,QAAAoJ,EAAApJ,QAAAlX,KAAA4oB,WAAA5oB,KAAAuB,QAAA+e,EAAA/e,QAAAvB,KAAAypB,MAAAnJ,EAAA0M,cAAAhtB,KAAAkmB,KAAA5F,EAAA4F,MAAA,IAAAvF,EAAA1hB,EAAA8b,UAAA,OAAA,eAAA,yBAAA,eAAA,oBAAA,oBAAA,oBAAA,cAAAtB,QAAA,SAAA6G,GAAAK,EAAAL,GAAA,WAAA,OAAAle,EAAA2Y,UAAAuF,GAAAxE,MAAA9b,KAAAH,QAAAshB,cAAAR,EAAAsM,0BAAA,WAAA,IAAA7qB,EAAAke,EAAAtgB,KAAAH,QAAA0B,SAAA,OAAAvB,KAAAH,QAAAqmB,MAAA9jB,GAAAA,EAAAggB,aAAApiB,KAAAH,QAAAqmB,KAAA9D,aAAAzB,EAAAsJ,gBAAA,WAAAjqB,KAAAH,QAAAoqB,gBAAAnO,MAAA9b,KAAAmhB,YAAAR,EAAAuM,eAAA,WAAAltB,KAAAmtB,eAAA,SAAA,UAAAxM,EAAAyM,aAAA,WAAAptB,KAAAmtB,eAAA,MAAA,WAAAxM,EAAAwM,eAAA,SAAA7M,EAAAle,GAAA,IAAAnD,EAAAqhB,EAAAle,EAAAue,EAAA,QAAAve,EAAA,GAAApC,KAAAiqB,gBAAAhrB,EAAA0hB,IAAA3gB,KAAAf,GAAA,CAAA,IAAAD,EAAAgB,KAAAqtB,mBAAArtB,KAAAf,GAAAD,GAAAA,EAAA2hB,IAAA3gB,KAAAH,QAAAqmB,KAAA,QAAA9jB,KAAAue,EAAA0M,iBAAA,WAAA,IAAAjrB,EAAApC,KAAAH,QAAAmtB,cAAA,GAAA,OAAA5qB,GAAAA,EAAAb,SAAA+e,EAAAle,EAAAb,UAAAof,EAAA0E,OAAA,WAAArlB,KAAAH,QAAAwlB,OAAAvJ,MAAA9b,KAAAH,QAAAshB,YAAAR,EAAAY,QAAA,WAAAvhB,KAAAH,QAAA0hB,UAAAvhB,KAAAkmB,KAAAlmB,KAAAH,QAAAqmB,MAAAjnB,EAAAquB,SAAAruB,EAAAqe,OAAA,SAAAgD,EAAAle,GAAA,SAAApD,IAAAC,EAAA6c,MAAA9b,KAAAmhB,WAAA,OAAAniB,EAAA+b,UAAAsC,OAAAC,OAAAqD,GAAA3hB,EAAA+b,UAAA8K,YAAA7mB,EAAAoD,IAAApD,EAAAkY,QAAA9U,GAAApD,EAAA+b,UAAA6N,UAAAtI,EAAArhB,EAAAquB,MAAAhN,GAAAthB,EAAAA,GAAAC,IAAA,SAAAqhB,EAAAle,GAAA,mBAAAqY,QAAAA,OAAAC,IAAAD,OAAA,0BAAA,oBAAA,qBAAArY,GAAA,iBAAAuY,QAAAA,OAAAC,QAAAD,OAAAC,QAAAxY,EAAA6Z,QAAA,YAAAA,QAAA,aAAAqE,EAAAiN,QAAAnrB,EAAAke,EAAA6E,SAAA7E,EAAAiB,SAAA,CAAArgB,OAAA,SAAAof,EAAAle,GAAA,IAAAnD,EAAAqhB,EAAAhD,OAAA,WAAAre,EAAAiqB,cAAAsE,SAAA,aAAA,IAAA7M,EAAA1hB,EAAA8b,UAAA,OAAA4F,EAAAkJ,aAAA,WAAA7pB,KAAAuhB,UAAAvhB,KAAAiqB,gBAAA,cAAA,cAAAjqB,KAAAiqB,gBAAA,SAAA,cAAAjqB,KAAAytB,iBAAAztB,KAAA0tB,SAAA,IAAA,IAAApN,EAAA,EAAAA,EAAAtgB,KAAA2tB,KAAArN,IAAAtgB,KAAA0tB,MAAAngB,KAAA,GAAAvN,KAAA4tB,KAAA,EAAA5tB,KAAA6tB,mBAAA,GAAAlN,EAAA8M,eAAA,WAAA,GAAAztB,KAAA8tB,qBAAA9tB,KAAA+tB,YAAA,CAAA,IAAAzN,EAAAtgB,KAAAypB,MAAA,GAAAxqB,EAAAqhB,GAAAA,EAAA/e,QAAAvB,KAAA+tB,YAAA9uB,GAAAmD,EAAAnD,GAAA2B,YAAAZ,KAAAe,eAAA,IAAA4f,EAAA3gB,KAAA+tB,aAAA/tB,KAAAguB,OAAAhvB,EAAAgB,KAAAe,eAAAf,KAAAguB,OAAAxN,EAAAxhB,EAAA2hB,EAAAM,EAAAN,EAAA3hB,EAAA2hB,EAAAH,EAAArc,KAAA8c,GAAAA,EAAA,EAAA,QAAA,SAAAT,GAAAxgB,KAAA2tB,KAAAxpB,KAAA0U,IAAA2H,EAAA,IAAAG,EAAAmN,kBAAA,WAAA,IAAA7uB,EAAAe,KAAAomB,WAAA,YAAApmB,KAAAuB,QAAA+iB,WAAAtkB,KAAAuB,QAAAof,EAAAve,EAAAnD,GAAAe,KAAAe,eAAA4f,GAAAA,EAAAnP,YAAAmP,EAAA4J,uBAAA,SAAAjK,GAAAA,EAAAiB,UAAA,IAAAnf,EAAAke,EAAA4F,KAAAtlB,WAAAZ,KAAA+tB,YAAApN,EAAAxc,KAAA/B,GAAAA,EAAA,EAAA,QAAA,QAAAke,EAAA4F,KAAAtlB,WAAAZ,KAAA+tB,aAAApN,EAAAxc,KAAAC,IAAAuc,EAAA3gB,KAAA2tB,MAAA,IAAA,IAAAnN,EAAAxgB,KAAAA,KAAAkX,QAAA+W,gBAAA,4BAAA,sBAAAtN,EAAAL,GAAAW,GAAA6C,EAAA9jB,KAAA+tB,YAAAvN,EAAA0N,IAAApL,EAAAtC,EAAAsC,GAAA1G,EAAAoE,EAAAsC,EAAAxC,EAAA4F,KAAA1V,YAAAoQ,EAAAD,EAAAH,EAAA0N,IAAArN,EAAAL,EAAA0N,IAAArN,EAAAD,EAAAC,IAAA7gB,KAAA0tB,MAAA7M,GAAAzE,EAAA,OAAA6E,GAAAN,EAAAwN,mBAAA,SAAA7N,GAAA,IAAAle,EAAApC,KAAAouB,gBAAA9N,GAAArhB,EAAAkF,KAAAC,IAAA0X,MAAA3X,KAAA/B,GAAA,OAAA8rB,IAAA9rB,EAAArC,QAAAd,GAAA6jB,EAAA7jB,IAAA0hB,EAAAyN,gBAAA,SAAA9N,GAAA,GAAAA,EAAA,EAAA,OAAAtgB,KAAA0tB,MAAA,IAAA,IAAAtrB,KAAAnD,EAAAe,KAAA2tB,KAAA,EAAArN,EAAAK,EAAA,EAAAA,EAAA1hB,EAAA0hB,IAAAve,EAAAue,GAAA3gB,KAAAquB,cAAA1N,EAAAL,GAAA,OAAAle,GAAAue,EAAA0N,cAAA,SAAA/N,EAAAle,GAAA,GAAAA,EAAA,EAAA,OAAApC,KAAA0tB,MAAApN,GAAA,IAAArhB,EAAAe,KAAA0tB,MAAApM,MAAAhB,EAAAA,EAAAle,GAAA,OAAA+B,KAAA0U,IAAAiD,MAAA3X,KAAAlF,IAAA0hB,EAAA2N,0BAAA,SAAAhO,EAAAle,GAAA,IAAAnD,EAAAe,KAAA6tB,mBAAA7tB,KAAA2tB,KAAA1uB,EAAAqhB,EAAA,GAAArhB,EAAAqhB,EAAAtgB,KAAA2tB,KAAA,EAAA1uB,EAAA,IAAAD,EAAAoD,EAAA8jB,KAAAtlB,YAAAwB,EAAA8jB,KAAA1V,YAAA,OAAAxQ,KAAA6tB,mBAAA7uB,EAAAC,EAAAqhB,EAAAtgB,KAAA6tB,oBAAAK,IAAAjvB,EAAA6jB,EAAA9iB,KAAAquB,cAAApvB,EAAAqhB,KAAAK,EAAA6K,aAAA,SAAAlL,GAAA,IAAArhB,EAAAmD,EAAAke,GAAAK,EAAA3gB,KAAA2rB,kBAAArL,GAAAE,EAAAxgB,KAAAomB,WAAA,cAAAzF,EAAAngB,KAAAmgB,EAAA6H,MAAAvH,EAAAT,EAAAvhB,EAAA2B,WAAAwb,EAAAjY,KAAAoqB,MAAA/N,EAAAxgB,KAAA+tB,aAAA3R,EAAAjY,KAAA0U,IAAA,EAAAuD,GAAA,IAAAwE,EAAAzc,KAAAoqB,MAAAtN,EAAAjhB,KAAA+tB,aAAAnN,GAAAK,EAAAjhB,KAAA+tB,YAAA,EAAA,EAAAnN,EAAAzc,KAAAC,IAAApE,KAAA2tB,KAAA,EAAA/M,GAAA,IAAA,IAAAE,GAAA9gB,KAAAomB,WAAA,aAAAzF,EAAAzS,IAAAyS,EAAA1J,QAAAhY,EAAAuR,YAAAwQ,EAAA5E,EAAA4E,GAAAJ,EAAAI,IAAAhhB,KAAA0tB,MAAA1M,GAAA7c,KAAA0U,IAAAiI,EAAA9gB,KAAA0tB,MAAA1M,KAAAL,EAAAmK,kBAAA,WAAA9qB,KAAA4tB,KAAAzpB,KAAA0U,IAAAiD,MAAA3X,KAAAnE,KAAA0tB,OAAA,IAAApN,GAAAnf,OAAAnB,KAAA4tB,MAAA,OAAA5tB,KAAAomB,WAAA,cAAA9F,EAAAtf,MAAAhB,KAAAwuB,yBAAAlO,GAAAK,EAAA6N,sBAAA,WAAA,IAAA,IAAAlO,EAAA,EAAAle,EAAApC,KAAA2tB,OAAAvrB,GAAA,IAAApC,KAAA0tB,MAAAtrB,IAAAke,IAAA,OAAAtgB,KAAA2tB,KAAArN,GAAAtgB,KAAA+tB,YAAA/tB,KAAAguB,QAAArN,EAAAoL,kBAAA,WAAA,IAAAzL,EAAAtgB,KAAAe,eAAA,OAAAf,KAAA8tB,oBAAAxN,GAAAtgB,KAAAe,gBAAA9B,IAAA,SAAAqhB,EAAAle,GAAA,mBAAAqY,QAAAA,OAAAC,IAAAD,OAAA,0CAAA,iBAAA,0BAAArY,GAAA,iBAAAuY,QAAAA,OAAAC,QAAAD,OAAAC,QAAAxY,EAAA6Z,QAAA,kBAAAA,QAAA,mBAAA7Z,EAAAke,EAAAkM,QAAAO,WAAAzM,EAAAiN,SAAA,CAAArsB,OAAA,SAAAof,EAAAle,GAAA,aAAA,IAAAnD,EAAAqhB,EAAAhD,OAAA,WAAAqD,EAAA1hB,EAAA8b,UAAA/b,GAAA2sB,mBAAA,EAAAtG,QAAA,EAAA4E,iBAAA,GAAA,IAAA,IAAAzJ,KAAApe,EAAA2Y,UAAA/b,EAAAwhB,KAAAG,EAAAH,GAAApe,EAAA2Y,UAAAyF,IAAA,IAAAS,EAAAN,EAAA8M,eAAA9M,EAAA8M,eAAA,WAAAztB,KAAAypB,MAAAzpB,KAAAH,QAAAmtB,cAAA/L,EAAAC,KAAAlhB,OAAA,IAAAoc,EAAAuE,EAAAyF,WAAA,OAAAzF,EAAAyF,WAAA,SAAA9F,GAAA,MAAA,YAAAA,OAAA,IAAAtgB,KAAAkX,QAAAuX,WAAAzuB,KAAAkX,QAAAuX,WAAAzuB,KAAAkX,QAAAsW,SAAApR,EAAAN,MAAA9b,KAAAH,QAAAshB,YAAAliB,IAAA,SAAAqhB,EAAAle,GAAA,mBAAAqY,QAAAA,OAAAC,IAAAD,OAAA,2CAAA,kBAAArY,GAAA,iBAAAwY,QAAAD,OAAAC,QAAAxY,EAAA6Z,QAAA,mBAAA7Z,EAAAke,EAAAkM,QAAAO,YAAA,CAAA7rB,OAAA,SAAAof,GAAA,aAAA,IAAAle,EAAAke,EAAAhD,OAAA,WAAAre,EAAAmD,EAAA2Y,UAAA,OAAA9b,EAAA4qB,aAAA,WAAA7pB,KAAA8jB,EAAA,EAAA9jB,KAAA8iB,EAAA,EAAA9iB,KAAA4tB,KAAA,EAAA5tB,KAAAiqB,gBAAA,SAAA,eAAAhrB,EAAAsrB,uBAAA,SAAAjK,GAAAA,EAAAiB,UAAA,IAAAnf,EAAAke,EAAA4F,KAAAtlB,WAAAZ,KAAAguB,OAAA/uB,EAAAe,KAAAH,QAAAqmB,KAAA1U,WAAAxR,KAAAguB,OAAA,IAAAhuB,KAAA8jB,GAAA1hB,EAAApC,KAAA8jB,EAAA7kB,IAAAe,KAAA8jB,EAAA,EAAA9jB,KAAA8iB,EAAA9iB,KAAA4tB,MAAA,IAAAjN,GAAAmD,EAAA9jB,KAAA8jB,EAAAhB,EAAA9iB,KAAA8iB,GAAA,OAAA9iB,KAAA4tB,KAAAzpB,KAAA0U,IAAA7Y,KAAA4tB,KAAA5tB,KAAA8iB,EAAAxC,EAAA4F,KAAA1V,aAAAxQ,KAAA8jB,GAAA1hB,EAAAue,GAAA1hB,EAAA6rB,kBAAA,WAAA,OAAA3pB,OAAAnB,KAAA4tB,OAAAxrB,IAAA,SAAAke,EAAAle,GAAA,mBAAAqY,QAAAA,OAAAC,IAAAD,OAAA,2CAAA,kBAAArY,GAAA,iBAAAuY,QAAAA,OAAAC,QAAAD,OAAAC,QAAAxY,EAAA6Z,QAAA,mBAAA7Z,EAAAke,EAAAkM,QAAAO,YAAA,CAAA7rB,OAAA,SAAAof,GAAA,aAAA,IAAAle,EAAAke,EAAAhD,OAAA,YAAAoR,oBAAA,IAAAzvB,EAAAmD,EAAA2Y,UAAA,OAAA9b,EAAA4qB,aAAA,WAAA7pB,KAAA8iB,EAAA,GAAA7jB,EAAAsrB,uBAAA,SAAAjK,GAAAA,EAAAiB,UAAA,IAAAnf,GAAApC,KAAAH,QAAAqmB,KAAA1U,WAAA8O,EAAA4F,KAAAtlB,YAAAZ,KAAAkX,QAAAwX,oBAAAzvB,EAAAe,KAAA8iB,EAAA,OAAA9iB,KAAA8iB,GAAAxC,EAAA4F,KAAA1V,aAAAsT,EAAA1hB,EAAA0gB,EAAA7jB,IAAAA,EAAA6rB,kBAAA,WAAA,OAAA3pB,OAAAnB,KAAA8iB,IAAA1gB,IAAA,SAAAke,EAAAle,GAAA,mBAAAqY,QAAAA,OAAAC,IAAAD,QAAA,oBAAA,oBAAA,6CAAA,uBAAA,yBAAA,gCAAA,yCAAA,0CAAA,2CAAA,SAAAxb,EAAA0hB,EAAA3hB,EAAAwhB,EAAAS,EAAA7E,GAAA,OAAAha,EAAAke,EAAArhB,EAAA0hB,EAAA3hB,EAAAwhB,EAAAS,EAAA7E,KAAA,iBAAAzB,QAAAA,OAAAC,QAAAD,OAAAC,QAAAxY,EAAAke,EAAArE,QAAA,YAAAA,QAAA,YAAAA,QAAA,6BAAAA,QAAA,kBAAAA,QAAA,0BAAAA,QAAA,iCAAAA,QAAA,0CAAAA,QAAA,2CAAAA,QAAA,4CAAAqE,EAAAkM,QAAApqB,EAAAke,EAAAA,EAAA6E,SAAA7E,EAAAiB,QAAAjB,EAAA0D,gBAAA1D,EAAA4D,aAAA5D,EAAAkM,QAAApH,KAAA9E,EAAAkM,QAAAO,YAAA,CAAA7rB,OAAA,SAAAof,EAAAle,EAAAnD,EAAA0hB,EAAA3hB,EAAAwhB,EAAAS,GACA,IAAAL,EAAAN,EAAApE,OAAA2E,EAAA8N,OAAA5T,UAAA6T,KAAA,SAAAtO,GAAA,OAAAA,EAAAsO,QAAA,SAAAtO,GAAA,OAAAA,EAAApT,QAAA,aAAA,KAAA4T,EAAA1e,EAAAkb,OAAA,WAAAuR,WAAA,UAAAC,mBAAA,EAAAC,eAAA,IAAAjO,EAAAsE,KAAA5E,EAAAM,EAAAiM,WAAA9L,EAAA,IAAAD,EAAAF,EAAA/F,UAAAiG,EAAAsE,QAAA,WAAA,IAAA,IAAAhF,KAAAtgB,KAAAysB,SAAA,EAAAzsB,KAAA8sB,YAAA9sB,KAAAgvB,cAAA5sB,EAAA2Y,UAAAuK,QAAApE,KAAAlhB,MAAAA,KAAAstB,SAAAttB,KAAAgtB,cAAAhtB,KAAAypB,MAAAzpB,KAAAivB,aAAA,kBAAAhO,EAAAqM,MAAAttB,KAAAkvB,gBAAA5O,IAAAU,EAAAqI,YAAA,WAAArpB,KAAAysB,SAAA,EAAArqB,EAAA2Y,UAAAsO,YAAAnI,KAAAlhB,OAAAghB,EAAA0I,SAAA,WAAA,IAAA,IAAApJ,EAAAle,EAAA2Y,UAAA2O,SAAA5N,MAAA9b,KAAAmhB,WAAAliB,EAAA,EAAAA,EAAAqhB,EAAAlgB,OAAAnB,IAAA,CAAAqhB,EAAArhB,GAAAsI,GAAAvH,KAAAysB,WAAA,OAAAzsB,KAAAmvB,qBAAA7O,GAAAA,GAAAU,EAAAkO,gBAAA,SAAA5O,GAAA,IAAAle,EAAA6e,EAAAqM,MAAAhN,GAAArhB,EAAAe,KAAAkX,QAAAoJ,OAAAtgB,KAAAkX,QAAAoJ,GAAAle,EAAA8U,QAAAlY,EAAAmd,OAAA/Z,EAAA8U,QAAAjY,GAAAA,EAAAe,KAAAstB,MAAAhN,GAAA,IAAAle,EAAApC,OAAAghB,EAAAqE,OAAA,WAAA,OAAArlB,KAAA+pB,iBAAA/pB,KAAAomB,WAAA,mBAAApmB,KAAAovB,eAAApvB,KAAAqvB,WAAArO,EAAAqO,QAAA,WAAA,IAAA/O,EAAAtgB,KAAAsvB,gBAAAtvB,KAAA6pB,eAAA7pB,KAAA8pB,gBAAA9pB,KAAAgqB,YAAAhqB,KAAAgtB,cAAA1M,GAAAtgB,KAAA+pB,iBAAA,GAAA/I,EAAAoO,QAAA,SAAA9O,GAAAtgB,KAAAygB,OAAAH,GAAAtgB,KAAAsvB,gBAAA,IAAAltB,EAAApC,KAAAuvB,QAAAvvB,KAAAypB,OAAAzpB,KAAAgtB,cAAA5qB,EAAAqc,QAAAze,KAAAwvB,uBAAAxvB,KAAAyvB,WAAAzvB,KAAA0vB,cAAA1vB,KAAA2vB,aAAAvtB,IAAApC,KAAA2vB,YAAAvtB,GAAApC,KAAA4vB,QAAA5vB,KAAAqvB,WAAArO,EAAAI,MAAAJ,EAAAoO,QAAApO,EAAA2O,YAAA,SAAArP,GAAAtgB,KAAA+nB,OAAAzH,EAAAuP,YAAA7vB,KAAA0D,KAAA4c,EAAAwP,WAAA9O,EAAAsO,cAAA,WAAA,IAAAhP,EAAAtgB,KAAAomB,WAAA,iBAAAhkB,OAAA,IAAAke,EAAAA,GAAAtgB,KAAA+pB,gBAAA,OAAA/pB,KAAAyvB,WAAArtB,EAAAA,GAAA4e,EAAAwO,qBAAA,WAAA,SAAAlP,IAAAle,GAAAnD,GAAA0hB,GAAA3hB,EAAAgsB,cAAA,kBAAA,MAAAhsB,EAAAguB,gBAAA,IAAA5qB,EAAAnD,EAAA0hB,EAAA3hB,EAAAgB,KAAAA,KAAAqb,KAAA,iBAAA,WAAAjZ,GAAA,EAAAke,MAAAtgB,KAAAqb,KAAA,eAAA,WAAApc,GAAA,EAAAqhB,MAAAtgB,KAAAqb,KAAA,iBAAA,WAAAsF,GAAA,EAAAL,OAAAU,EAAAuO,QAAA,SAAAjP,GAAA,IAAAle,EAAApC,KAAAkX,QAAApX,OAAAsC,EAAAA,GAAA,IAAA,IAAA,IAAAnD,KAAA0hB,KAAA3hB,KAAAwhB,EAAAxgB,KAAA+vB,eAAA3tB,GAAA6e,EAAA,EAAAA,EAAAX,EAAAlgB,OAAA6gB,IAAA,CAAA,IAAA7E,EAAAkE,EAAAW,GAAA,IAAA7E,EAAAiO,UAAA,CAAA,IAAAzJ,EAAAJ,EAAApE,GAAAwE,GAAA3hB,EAAAsO,KAAA6O,GAAAwE,GAAAxE,EAAA4L,SAAArH,EAAApT,KAAA6O,GAAAwE,GAAAxE,EAAA4L,UAAAhpB,EAAAuO,KAAA6O,IAAA,OAAAqC,QAAAxf,EAAA4wB,WAAAlP,EAAAmP,SAAA9wB,IAAAgiB,EAAA+O,eAAA,SAAAzP,GACA,OAAAM,GAAA5gB,KAAAkX,QAAA4X,kBAAA,SAAA1sB,GAAA,OAAAwe,EAAAxe,EAAAb,SAAAqC,GAAA0c,IAAA,mBAAAA,EAAA,SAAAle,GAAA,OAAAke,EAAAle,EAAAb,UAAA,SAAAa,GAAA,OAAAue,EAAAve,EAAAb,QAAA+e,KACAU,EAAA2L,eAAA,SAAArM,GAAA,IAAAle,EAAAke,GAAAA,EAAAthB,EAAA+d,UAAAuD,GAAAle,EAAApC,KAAAosB,SAAA9L,IAAAle,EAAApC,KAAAypB,MAAAzpB,KAAAgvB,cAAAhvB,KAAAmvB,qBAAA/sB,IAAA4e,EAAAgO,YAAA,WAAA,IAAA1O,EAAAtgB,KAAAkX,QAAA2V,YAAA,IAAA,IAAAzqB,KAAAke,EAAA,CAAA,IAAArhB,EAAAqhB,EAAAle,GAAApC,KAAA8sB,SAAA1qB,GAAAogB,EAAAvjB,KAAA+hB,EAAAmO,qBAAA,SAAA7O,GAAA,IAAA,IAAAle,EAAAke,GAAAA,EAAAlgB,OAAAnB,EAAA,EAAAmD,GAAAnD,EAAAmD,EAAAnD,IAAA,CAAAqhB,EAAArhB,GAAA0tB,mBAAA,IAAAnK,EAAA,WAAA,OAAA,SAAAlC,GAAA,GAAA,iBAAAA,EAAA,OAAAA,EAAA,IAAArhB,EAAA4hB,EAAAP,GAAA0P,MAAA,KAAArP,EAAA1hB,EAAA,GAAAD,EAAA2hB,EAAAkK,MAAA,cAAA5J,EAAA,SAAAX,EAAAle,GAAA,OAAAke,EAAA,SAAAle,GAAA,OAAAA,EAAA8X,aAAAoG,IAAA,SAAAA,GAAA,IAAArhB,EAAAqhB,EAAA6B,cAAA/f,GAAA,OAAAnD,GAAAA,EAAAgxB,aAAA7tB,CAAApD,GAAAA,EAAA,GAAA2hB,GAAAvE,EAAA0E,EAAAoP,gBAAAjxB,EAAA,IAAA,OAAAmd,EAAA,SAAAkE,GAAA,OAAAA,GAAAlE,EAAA6E,EAAAX,KAAA,SAAAA,GAAA,OAAAA,GAAAW,EAAAX,KAAA,GAAAQ,EAAAoP,iBAAAnZ,SAAA,SAAAuJ,GAAA,OAAAvJ,SAAAuJ,EAAA,KAAAkB,WAAA,SAAAlB,GAAA,OAAAkB,WAAAlB,KAAAU,EAAA4O,MAAA,WAAA,GAAA5vB,KAAAkX,QAAAiZ,OAAA,CAAA,IAAA7P,EAAAthB,EAAA+d,UAAA/c,KAAAkX,QAAAiZ,QAAAnwB,KAAAowB,iBAAA9P,KAAAtgB,KAAAivB,YAAA3O,EAAA2E,OAAAjlB,KAAAivB,cAAA,IAAA7sB,EAFA,SAAAke,EAAAle,GAAA,OAAA,SAAAnD,EAAA0hB,GAAA,IAAA,IAAA3hB,EAAA,EAAAA,EAAAshB,EAAAlgB,OAAApB,IAAA,CAAA,IAAAwhB,EAAAF,EAAAthB,GAAAiiB,EAAAhiB,EAAAytB,SAAAlM,GAAApE,EAAAuE,EAAA+L,SAAAlM,GAAA,GAAAS,EAAA7E,GAAA6E,EAAA7E,EAAA,CAAA,IAAAwE,OAAA,IAAAxe,EAAAoe,GAAApe,EAAAoe,GAAApe,EAAA,OAAA6e,EAAA7E,EAAA,GAAA,IAAAwE,EAAA,GAAA,IAAA,OAAA,GAEAxE,CAAApc,KAAAivB,YAAAjvB,KAAAkX,QAAA6X,eAAA/uB,KAAAgtB,cAAAqD,KAAAjuB,KAAA4e,EAAAoP,iBAAA,SAAA9P,GAAA,IAAA,IAAAle,EAAA,EAAAA,EAAAke,EAAAlgB,OAAAgC,IAAA,GAAAke,EAAAle,IAAApC,KAAAivB,YAAA7sB,GAAA,OAAA,EAAA,OAAA,GAAA4e,EAAAsP,MAAA,WAAA,IAAAhQ,EAAAtgB,KAAAkX,QAAA2X,WAAAzsB,EAAApC,KAAAstB,MAAAhN,GAAA,IAAAle,EAAA,MAAA,IAAAoI,MAAA,mBAAA8V,GAAA,OAAAle,EAAA8U,QAAAlX,KAAAkX,QAAAoJ,GAAAle,GAAA4e,EAAA6I,aAAA,WAAAznB,EAAA2Y,UAAA8O,aAAA3I,KAAAlhB,MAAAA,KAAAswB,QAAAzG,gBAAA7I,EAAAuJ,uBAAA,SAAAjK,GAAA,OAAAtgB,KAAAswB,QAAA/F,uBAAAjK,IAAAU,EAAAwK,aAAA,SAAAlL,GAAAtgB,KAAAswB,QAAA9E,aAAAlL,IAAAU,EAAA8J,kBAAA,WAAA,OAAA9qB,KAAAswB,QAAAxF,qBAAA9J,EAAA+K,kBAAA,WAAA,OAAA/rB,KAAAswB,QAAAvE,qBAAA/K,EAAAiL,SAAA,SAAA3L,GAAA,IAAAle,EAAApC,KAAAgsB,SAAA1L,GAAA,GAAAle,EAAAhC,OAAA,CAAA,IAAAnB,EAAAe,KAAAuwB,mBAAAnuB,GAAApC,KAAAgtB,cAAAhtB,KAAAgtB,cAAA/H,OAAAhmB,KAAA+hB,EAAAkL,UAAA,SAAA5L,GAAA,IAAAle,EAAApC,KAAA0pB,SAAApJ,GAAA,GAAAle,EAAAhC,OAAA,CAAAJ,KAAA6pB,eAAA7pB,KAAA8pB,gBAAA,IAAA7qB,EAAAe,KAAAuwB,mBAAAnuB,GAAApC,KAAAgqB,YAAAhqB,KAAAgtB,eAAAhtB,KAAAgtB,cAAA/tB,EAAAgmB,OAAAjlB,KAAAgtB,eAAAhtB,KAAAypB,MAAArnB,EAAA6iB,OAAAjlB,KAAAypB,SAAAzI,EAAAuP,mBAAA,SAAAjQ,GAAA,IAAAle,EAAApC,KAAAuvB,QAAAjP,GAAA,OAAAtgB,KAAA0D,KAAAtB,EAAA0tB,UAAA9vB,KAAA+nB,OAAA3lB,EAAAqc,SAAAze,KAAAgqB,YAAA5nB,EAAAqc,SAAA,GAAArc,EAAAqc,SAAAuC,EAAAwP,OAAA,SAAAlQ,GAAA,IAAAle,EAAApC,KAAAgsB,SAAA1L,GAAA,GAAAle,EAAAhC,OAAA,CAAA,IAAAnB,EAAA0hB,EAAA3hB,EAAAoD,EAAAhC,OAAA,IAAAnB,EAAA,EAAAA,EAAAD,EAAAC,IAAA0hB,EAAAve,EAAAnD,GAAAe,KAAAuB,QAAAygB,YAAArB,EAAApf,SAAA,IAAAif,EAAAxgB,KAAAuvB,QAAAntB,GAAAqc,QAAA,IAAAxf,EAAA,EAAAA,EAAAD,EAAAC,IAAAmD,EAAAnD,GAAAwrB,iBAAA,EAAA,IAAAzqB,KAAAovB,UAAAnwB,EAAA,EAAAA,EAAAD,EAAAC,WAAAmD,EAAAnD,GAAAwrB,gBAAAzqB,KAAA+nB,OAAAvH,KAAA,IAAAiC,EAAAzB,EAAAjf,OAAA,OAAAif,EAAAjf,OAAA,SAAAue,GAAAA,EAAAthB,EAAA+d,UAAAuD,GAAA,IAAAle,EAAApC,KAAAosB,SAAA9L,GAAAmC,EAAAvB,KAAAlhB,KAAAsgB,GAAA,IAAA,IAAArhB,EAAAmD,GAAAA,EAAAhC,OAAAugB,EAAA,EAAA1hB,GAAA0hB,EAAA1hB,EAAA0hB,IAAA,CAAA,IAAAH,EAAApe,EAAAue,GAAA3hB,EAAAolB,WAAApkB,KAAAgtB,cAAAxM,KAAAQ,EAAAyP,QAAA,WAAA,IAAA,IAAAnQ,EAAA,EAAAA,EAAAtgB,KAAAypB,MAAArpB,OAAAkgB,IAAA,CAAAtgB,KAAAypB,MAAAnJ,GAAAoM,SAAAE,OAAAzoB,KAAAyoB,SAAA5sB,KAAAkX,QAAAiZ,OAAA,SAAAnwB,KAAA4vB,QAAA5vB,KAAAqvB,WAAArO,EAAA0O,cAAA,SAAApP,EAAAle,GAAA,IAAAnD,EAAAe,KAAAkX,QAAAwO,mBAAA1lB,KAAAkX,QAAAwO,mBAAA,EAAA,IAAA/E,EAAAL,EAAAxE,MAAA9b,KAAAoC,GAAA,OAAApC,KAAAkX,QAAAwO,mBAAAzmB,EAAA0hB,GAAAK,EAAA0P,wBAAA,WAAA,OAAA1wB,KAAAgtB,cAAAttB,IAAA,SAAA4gB,GAAA,OAAAA,EAAA/e,WAAAuf,ICAA,SAAApiB,GACA,aAEA,IAAAiyB,EAAA,SAAAC,EAAA1Z,GACAlX,KAAAkX,QAAAxY,EAAAyd,UAAAzd,EAAAyhB,GAAA0Q,aAAAnI,SAAAxR,GACAlX,KAAA8wB,KAAApyB,EAAAkyB,GACA5wB,KAAAkX,QAAA6Z,QACA/wB,KAAAkX,QAAA6Z,MAAA/wB,OAKA2wB,EAAA5V,WACA8K,YAAA8K,EACAK,UAAA,WAEAhxB,KAAAixB,MAAAjxB,KAAAkX,QAAA+Z,MAIAjxB,KAAAkxB,MAAAlxB,KAAAixB,MAAAE,UAAAnxB,KAAAkX,QAAAga,OAGAlxB,KAAAixB,MAAAG,aAEAC,aAAA,WACArxB,KAAAgT,MAAAtU,EAAAA,EAAAyhB,GAAA0Q,aAAArtB,WAEA8tB,YAAA,WACA,IAAAC,EAAAvxB,KAAAgT,MAAApU,KAAA,qBACA2yB,EAAAxhB,OAAArR,EAAAyhB,GAAA0Q,aAAAW,SACA,WAAAxxB,KAAAkX,QAAAua,aACAF,EAAA1yB,SAAA,4BAQA6yB,OAAA,WAEA1xB,KAAA2xB,SAAAjzB,EAAAA,EAAAyhB,GAAA0Q,aAAAe,SACA5xB,KAAA8wB,KAAAhvB,QAAAiO,OAAA/P,KAAA2xB,UAGA3xB,KAAAqxB,eACArxB,KAAAkX,QAAAua,YACAzxB,KAAAsxB,cAEAtxB,KAAAgT,MAAApU,KAAA,qBAAAmD,SAIA/B,KAAA6xB,cAIA7xB,KAAA8xB,UAAA,EAOA9xB,KAAA8wB,KAAAiB,eAAA,aAGA/xB,KAAAgxB,YAGAhxB,KAAAgT,MAAApU,KAAA,sBAAAmR,OAAA/P,KAAAixB,MAAAe,MAGAhyB,KAAA8wB,KAAA/gB,OAAA/P,KAAAgT,OAGAtU,EAAAuzB,KAAAjyB,KAAAixB,MAAAS,UACApnB,KAAA5L,EAAAwzB,MAAA,WASA,GAPAlyB,KAAAkX,QAAAua,aACAzxB,KAAAixB,MAAAkB,aAIAnyB,KAAAgT,MAAApU,KAAA,oBAAA0R,MAAA5R,EAAAwzB,MAAAlyB,KAAAoyB,OAAApyB,OAEAA,KAAAixB,MAAArmB,MACA5K,KAAA4K,MAAA5K,KAAAixB,MAAArmB,OACA5K,KAAAgT,MAAApU,KAAA,oBAAAqB,KAAA,YAAA,GACAD,KAAAixB,MAAAoB,OAAApyB,KAAA,YAAA,GAEAD,KAAAgT,MAAAuF,OAAA,SAAAnW,GAAAA,EAAA8V,uBACA,CACAlY,KAAA4K,OAAA,GACA5K,KAAAixB,MAAAoB,OAAAzlB,WAAA,YACA5M,KAAAgT,MAAApU,KAAA,oBAAAgO,WAAA,YACA,IAAAskB,EAAA,OAAAlxB,KAAAkxB,YAAA5yB,IAAA0B,KAAAkxB,OAAA,KAAAlxB,KAAAkxB,MAAAlxB,KAAAkX,QAAAob,aAAAtyB,KAAAkxB,MACAlxB,KAAAixB,MAAAsB,YAAArB,GAEAlxB,KAAAgT,MAAAuF,OAAA7Z,EAAAwzB,MAAAlyB,KAAAuY,OAAAvY,OAQAA,KAAA8wB,KAAAiB,eAAA,YAEA/xB,KAAAwyB,WAGAxyB,KAAAixB,MAAAwB,YACAzyB,KAAAixB,MAAAwB,cAEAzyB,QAEAoyB,OAAA,WAMApyB,KAAA8wB,KAAAiB,eAAA,WAEAF,YAAA,WACA,IAAAa,EAAA7R,EACA7gB,KAAAgT,OAEA0f,EAAA1yB,KAAAgT,MAAApS,aACAigB,EAAA7gB,KAAAgT,MAAAxC,cACAkiB,GACA1yB,KAAA2xB,SAAA3wB,MAAA0xB,GAEA7R,GACA7gB,KAAA2xB,SAAAxwB,OAAA0f,GAEA7gB,KAAAgT,MAAAtP,SAGAgvB,EAAA1yB,KAAA2xB,SAAAloB,SAAAzI,UAEAhB,KAAA2xB,SAAA3wB,MAAA0xB,GAGA1yB,KAAA2xB,SAAArrB,QAGAksB,SAAA,SAAAG,GACA3yB,KAAA2xB,SAAAjuB,OACA1D,KAAAgT,MAAA1M,QACA,IAAAqsB,GACA3yB,KAAAixB,MAAA0B,WAOA3yB,KAAA8wB,KAAAiB,eAAA,SAGAnnB,MAAA,SAAAgoB,GACA,IAEAC,EAFAC,EAAA9yB,KAAAgT,MAAApU,KAAA,kBACAm0B,EAAA/yB,KAAAgT,MAAApU,KAAA,yBAGA,IAAA,IAAAg0B,EACAE,EAAAn0B,YAAAD,EAAAyhB,GAAA0Q,aAAAmC,iBACAD,EAAAp0B,YAAAD,EAAAyhB,GAAA0Q,aAAAoC,iBAAAnxB,QAAA4B,WACA,CAEA,GAAAkvB,EAAA,CACAC,GAAA,GAAAD,GAAA5C,MAAA,MACA,IAAA,IAAA/wB,EAAA,EAAAA,EAAA4zB,EAAAzyB,OAAAnB,IACA4zB,EAAA5zB,GAAAP,EAAA,SAAA8K,KAAAqpB,EAAA5zB,IAAAuG,OAEAotB,EAAAC,EAAAprB,KAAA,QAEAqrB,EAAAj0B,SAAAH,EAAAyhB,GAAA0Q,aAAAmC,iBACAD,EAAAl0B,SAAAH,EAAAyhB,GAAA0Q,aAAAoC,iBAAAztB,KAAAotB,GAAAtsB,SAIAiS,OAAA,SAAAnW,GACAA,EAAA8wB,kBACA9wB,EAAA8V,iBAGA,IAAAib,EAAAnzB,KAAAixB,MAAAmC,cAIAxoB,EAAA5K,KAAAoT,SAAA+f,GACA,GAAA,WAAAz0B,EAAAoG,KAAA8F,SAAAtM,IAAAsM,EAAAuoB,UAGA,GAFAA,EAAAvoB,EAAAuoB,SACAnzB,KAAAixB,MAAAsB,YAAAY,GACA,iBAAAvoB,EAAAgoB,IAGA,OAFA5yB,KAAA4K,MAAAA,EAAAgoB,UACA5yB,KAAAwyB,gBAGA,GAAA5nB,EAGA,OAFA5K,KAAA4K,MAAAA,QACA5K,KAAAwyB,WAMA,GAAAxyB,KAAAkX,QAAAmc,cAAArzB,KAAAixB,MAAAqC,UAAAH,IAAAnzB,KAAAixB,MAAAqC,UAAAtzB,KAAAkxB,OAAA,CAYA,IAAAqC,EAAAvzB,KAAAixB,MAAAuC,aAAAL,GAEAnzB,KAAA8xB,UAAA,EAGApzB,EAAAuzB,KAAAjyB,KAAAyzB,KAAAF,IACAG,KAAAh1B,EAAAwzB,MAAA,SAAAhtB,GACAlF,KAAA8xB,UAAA,EAGA,IAAA6B,EAAA,mBAAA3zB,KAAAkX,QAAA5R,QAAAtF,KAAAkX,QAAA5R,QAAA4b,KAAAlhB,KAAAkX,QAAA6Z,MAAA7rB,EAAAiuB,GAAA,KAGA,OAAA,IAAAQ,GACA3zB,KAAA4K,OAAA,QACA5K,KAAAwyB,UAAA,IAKA,iBAAAmB,GACA3zB,KAAA4K,MAAA+oB,QACA3zB,KAAAwyB,aAMAmB,GAAA,iBAAAA,GAAAA,EAAAC,eAAA,cACAT,EAAAQ,EAAAR,UAIAnzB,KAAA4K,OAAA,GACA5K,KAAAkxB,MAAAiC,OAeAnzB,KAAA8wB,KAAAiB,eAAA,QAAAoB,SAAAA,EAAAI,YAAAA,EAAAruB,SAAAA,MACAlF,OACA6zB,KAAAn1B,EAAAwzB,MAAA,SAAAljB,GAGA,IAAA4jB,EAFA5yB,KAAA8xB,UAAA,EAIAc,EADA,mBAAA5yB,KAAAkX,QAAAtM,MACA5K,KAAAkX,QAAAtM,MAAAsW,KAAAlhB,KAAAkX,QAAA6Z,MAAA/hB,EAAAmkB,GAEA,iBAAAnkB,EAAAA,EAAAA,EAAAvJ,cAAAuJ,EAAA2I,YAAA,iBAGA3X,KAAA4K,MAAAgoB,GACA5yB,KAAAwyB,YACAxyB,YApEAA,KAAA8wB,KAAAiB,eAAA,aAuEA0B,KAAA,SAAAF,GAEAvzB,KAAAkX,QAAA4c,GAAAp1B,EAAAyhB,GAAA4T,cAAAC,aAAAh0B,KAAAkX,QAAA4c,IAAA,GAEA,IAOAG,EAPAH,EAAA,mBAAA9zB,KAAAkX,QAAA4c,GAAA9zB,KAAAkX,QAAA4c,GAAA5S,KAAAlhB,KAAAkX,QAAA6Z,OAAA/wB,KAAAkX,QAAA4c,GASA,MAHA,mBAAA9zB,KAAAkX,QAAArS,KAAA7E,KAAAkX,QAAArS,MAAA,WAAA7E,KAAAkX,QAAAgd,MAAA,SAAAl0B,KAAAkX,QAAAgd,MAAA,OAAAJ,QAAAx1B,IAAAw1B,IAsBA,OAlBA9zB,KAAA6xB,cAGAoC,GACA7kB,KAAApP,KAAAkX,QAAA9H,MAAA,GACA8hB,MAAAqC,EACAO,GAAAA,GAIA,mBAAA9zB,KAAAkX,QAAA+c,OACAA,EAAAj0B,KAAAkX,QAAA+c,OAAA/S,KAAAlhB,KAAAkX,QAAA6Z,MAAAkD,IAGAj0B,KAAAkX,QAAA+c,OAAAv1B,EAAAyhB,GAAA4T,cAAAC,aAAAh0B,KAAAkX,QAAA+c,QAAA,GACAv1B,EAAAyd,OAAA8X,EAAAj0B,KAAAkX,QAAA+c,SAGA,mBAAAj0B,KAAAkX,QAAArS,IACA7E,KAAAkX,QAAArS,IAAAqc,KAAAlhB,KAAAkX,QAAA6Z,MAAAkD,GAGAv1B,EAAAkG,KAAAlG,EAAAyd,QACAtX,IAAA7E,KAAAkX,QAAArS,IACAvD,KAAA2yB,EACAnvB,KAAA,QACA9E,KAAAkX,QAAAid,eAKA/gB,SAAA,SAAA8d,GAIA,QAHA5yB,IAAA4yB,IACAA,EAAAlxB,KAAAkxB,OAEA,mBAAAlxB,KAAAkX,QAAA9D,SACA,OAAApT,KAAAkX,QAAA9D,SAAA8N,KAAAlhB,KAAAkX,QAAA6Z,MAAAG,IAIAzQ,OAAA,SAAA2T,EAAAlD,GACAkD,KAAAp0B,KAAAkX,UACAlX,KAAAkX,QAAAkd,GAAAlD,GAGA,UAAAkD,GACAp0B,KAAAq0B,SAAAnD,IAMAmD,SAAA,SAAAnD,EAAAoD,GAEAt0B,KAAAkxB,MADAoD,EACAt0B,KAAAixB,MAAAE,UAAAD,GAEAA,EAIAlxB,KAAAgT,OAAAhT,KAAAgT,MAAApP,GAAA,aACA5D,KAAAixB,MAAAsB,YAAAvyB,KAAAkxB,SAqBAxyB,EAAAyhB,GAAA0Q,aAAA,SAAApQ,GACA,IAAA9E,EAAAwF,UACA,OAAAnhB,KAAAwB,KAAA,WACA,IAAA+yB,EAAA71B,EAAAsB,MACAsB,EAAAizB,EAAAjzB,KAAA,gBACA4V,EAAA,iBAAAuJ,GAAAA,EACAnf,GACAizB,EAAAjzB,KAAA,eAAAA,EAAA,IAAAqvB,EAAA3wB,KAAAkX,IAGA,iBAAAuJ,GACAnf,EAAAmf,GAAA3E,MAAAxa,EAAAub,MAAA9B,UAAAuG,MAAAJ,KAAAvF,EAAA,OAMAjd,EAAAyhB,GAAA0Q,aAAA2D,YAAA7D,EAGAjyB,EAAAyhB,GAAA0Q,aAAAnI,UAUA5jB,KAAA,OAyBAD,IAAA,KAeAovB,OAAA,KAQA7kB,KAAA,KASA0kB,GAAA,KASA5C,MAAA,KASAoB,aAAA,KASA4B,KAAA,OAgBA9gB,SAAA,KAiBA9N,QAAA,KAmBAsF,MAAA,KAeAupB,YAAA,KAUA1C,aAAA,EAWAV,MAAA,KASAsC,cAAA,GAOA30B,EAAAyhB,GAAA0Q,aAAArtB,SAAA,2MAQA9E,EAAAyhB,GAAA0Q,aAAAe,QAAA,2CAGAlzB,EAAAyhB,GAAA0Q,aAAAW,QAAA,yHAIA9yB,EAAAyhB,GAAA0Q,aAAAmC,gBAAA,KAGAt0B,EAAAyhB,GAAA0Q,aAAAoC,gBAAA,iBAGAv0B,EAAAyhB,GAAA0Q,aAAA4D,OAAA,SAhnBA,CAinBAvzB,OAAAgb,QAKA,SAAAxd,GACA,aAGAA,EAAAyhB,GAAA4T,eAIAW,QAAA,SAAAC,EAAAC,GACA,IAAAC,EAAA,aACAA,EAAA9Z,UAAA6Z,EAAA7Z,UACA4Z,EAAA5Z,UAAA,IAAA8Z,EACAF,EAAA5Z,UAAA8K,YAAA8O,EACAA,EAAAG,WAAAF,EAAA7Z,WAOAga,kBAAA,SAAAvY,EAAAwY,GACA,GAAAxY,EAAAyY,kBACAzY,EAAAyY,kBAAAD,EAAAA,QACA,GAAAxY,EAAA0Y,gBAAA,CACA,IAAAC,EAAA3Y,EAAA0Y,kBACAC,EAAAztB,UAAA,GACAytB,EAAAC,QAAA,YAAAJ,GACAG,EAAAE,UAAA,YAAAL,GACAG,EAAAhoB,WAUA6mB,aAAA,SAAAxT,EAAA8U,GACA,GAAA,iBAAA9U,GAAAA,EAAApgB,QAAAogB,EAAAqK,MAAA,oBACA,GAAAyK,EACA,IAEA9U,EAAA,IAAA+U,SAAA,UAAA/U,EAAA,GAEA,MAAApe,IAAA,QACA,OAAAoe,OAIAA,EAAA,IAAA+U,SAAA,UAAA/U,EAAA,GAIA,OAAAA,GAMAgV,SAAA,SAAA7Y,EAAA8Y,EAAAC,GACA,IAAAtB,EAAAuB,EAAAC,KAEA,IAAAl3B,EAAAoe,QAAA2Y,KAAAA,EAAAr1B,OACA,OAAAw1B,EAGA,IAAA,IAAA32B,EAAA,EAAAA,EAAAw2B,EAAAr1B,OAAAnB,IACAm1B,EAAAqB,EAAAx2B,GACA0d,EAAAiX,eAAAQ,KACAwB,EAAAxB,GAAAzX,EAAAyX,KAGA,IAAAsB,IAOAC,EAAAvB,EAAArP,cACApI,EAAAiX,eAAA+B,KACAC,EAAAxB,GAAAzX,EAAAgZ,KAIA,OAAAC,GAMAC,cAAA,SAAApN,GACA,IAAAnnB,KAMA,OALA5C,EAAA8C,KAAAinB,EAAAnnB,OAAA,SAAAw0B,EAAA1S,IACA,iBAAAA,GAAAA,GAAA,iBAAAA,IAAAA,EAAAyC,cAAAxI,QAAA+F,EAAAyC,cAAAhJ,UACAvb,EAAAw0B,GAAA1S,KAGA9hB,GAMAy0B,WAAA,SAAApV,GACA,GAAAtD,OAAAoY,KACA,OAAApY,OAAAoY,KAAA9U,GAEA,GAAAA,IAAAtD,OAAAsD,GACA,MAAA,IAAAqV,UAAA,sCAEA,IAAArT,EAAAmT,KACA,IAAAnT,KAAAhC,EACAtD,OAAAtC,UAAA6Y,eAAA1S,KAAAP,EAAAgC,IACAmT,EAAAvoB,KAAAoV,GAGA,OAAAmT,GAQAG,OAAA,SAAAC,GACA,OAAAx3B,EAAA,SAAA8K,KAAA0sB,GAAA1wB,QAMA2wB,aAAA,SAAAjF,EAAAkF,EAAAC,GACA,IAAAD,GAAA,OAAAlF,EACA,SAGA,GAAA,mBAAA,EAAA,CACA,IAAAoF,EAAAD,GAAA,QACAA,EAAA,SAAAj0B,GAAA,OAAAA,EAAAk0B,IAGA,IAAAC,EAAA73B,EAAAoe,QAAAoU,GACA1iB,KACAgoB,EAAAx2B,KAqBA,OAnBAtB,EAAA8C,KAAA40B,EAAA,SAAAn3B,EAAA0hB,GACA,GAAAA,EAAApa,SACAiI,EAAAA,EAAAyW,OAAAuR,EAAAL,aAAAjF,EAAAvQ,EAAApa,SAAA8vB,SAGA,GAAAE,EACA73B,EAAAK,KAAAmyB,EAAA,SAAA9N,GAAA,OAAAA,IAAAzC,GAAA,iBAAAA,EAAA0V,EAAA1V,GAAAA,KAAAvgB,QACAoO,EAAAjB,KAAAoT,OAEA,CACA,IAAA8V,EAAA9V,GAAA,iBAAAA,EAAA0V,EAAA1V,GAAAA,EACAuQ,GAAAuF,GACAjoB,EAAAjB,KAAAoT,MAOAnS,GAMAkoB,YAAA,SAAAxf,GACA,IAAAyf,EACA7xB,EAAAoS,EAAApS,KAsCA,MAlCA,SAAAA,IAEA,WAAAoS,EAAA0f,KACAl4B,EAAAyhB,GAAA0W,cAAAC,UACAhyB,EAAA,YACApG,EAAAyhB,GAAA0W,cAAAE,cACAjyB,EAAA,eAIApG,EAAAyhB,GAAA0W,cAAA1kB,KACArN,EAAA,OACApG,EAAAyhB,GAAA0W,cAAAG,SACAlyB,EAAA,UAKA,SAAAA,GAAApG,EAAAyhB,GAAA0W,cAAA1kB,OACArN,EAAA,cAKA,aAAAA,GAAA,WAAAoS,EAAA0f,OACA9xB,EAAA,iBAIA,cAAAA,GAAApG,EAAAyhB,GAAA0W,cAAA/xB,KACAA,EAAA,YAIA,mBAAApG,EAAAyhB,GAAA0W,cAAA/xB,GAGA,IAFA6xB,EAAAj4B,EAAAyhB,GAAA0W,cAAA/xB,IACA9E,KAAAw1B,SAAAte,EAAAlX,KAAA+1B,WAAAY,EAAAjO,aAIAhqB,EAAAkM,MAAA,iBAAA9F,IACA,IAKAmyB,oBAAA,WACA,IACAzW,GADA7d,SAAAmf,MAAAnf,SAAAof,iBACAzD,MACAqE,EAAA,aACAS,GAAA,MAAA,SAAA,QAAA,IAAA,MAEA,GAAA,iBAAA5C,EAAAmC,GACA,OAAA,EAIAA,EAAAA,EAAA5B,OAAA,GAAAmW,cAAAvU,EAAAhV,OAAA,GACA,IAAA,IAAA1O,EAAA,EAAAA,EAAAmkB,EAAAhjB,OAAAnB,IACA,GAAA,iBAAAuhB,EAAA4C,EAAAnkB,GAAA0jB,GACA,OAAA,EAGA,OAAA,IAjPA,CAqPAzhB,OAAAgb,QAWA,SAAAxd,GACA,aAEA,IAAAy4B,EAAA,SAAA51B,EAAA2V,GACAlX,KAAAo3B,KAAA71B,EAAA2V,IAGAmgB,EAAA,SAAA91B,EAAA2V,GACAlX,KAAAo3B,KAAA71B,EAAA2V,IAIAigB,EAAApc,WACAuc,cAAA,KACAC,kBAAA,KACAC,SAAA,KACAC,eAAA,oCACA/O,YAEA0O,KAAA,SAAA71B,EAAA2V,GACAlX,KAAAyoB,SAAA/pB,EAAA6C,GAEAvB,KAAAkX,QAAAxY,EAAAyd,UAAAzd,EAAAyhB,GAAAuX,kBAAAhP,SAAAxR,GACAlX,KAAA23B,eAGA33B,KAAA43B,YAAA7G,MAAA/wB,KAAAyoB,SAAA,GAEAzoB,KAAA63B,gBAGA73B,KAAA83B,aAAA,EAGA93B,KAAAyoB,SAAA7lB,GAAA,YAAAlE,EAAAwzB,MAAA,WACAlyB,KAAAuoB,WACAvoB,OAGAtB,EAAAiE,UAAArB,KAAA,gCAEA5C,EAAAiE,UAAAC,GAAA,iBAAA,SAAAR,GACA,KAAAA,EAAAiX,OACA3a,EAAA,kBAAAg5B,kBAAA,UAOAh5B,EAAAiE,UAAAC,GAAA,iBAAA,SAAAR,GACA,IAAAnD,EAAA84B,EAAAr5B,EAAA0D,EAAAI,QACAw1B,GAAA,sBACA,wBACA,cACA,kBACA,0CACA,0CAIA,GAAAt5B,EAAAsb,SAAArX,SAAAof,gBAAA3f,EAAAI,UAOAu1B,EAAAn0B,GAAAjB,UAAA,CAKA,IAAA1D,EAAA,EAAAA,EAAA+4B,EAAA53B,OAAAnB,IACA,GAAA84B,EAAAn0B,GAAAo0B,EAAA/4B,KAAA84B,EAAAE,QAAAD,EAAA/4B,IAAAmB,OACA,OAKA+2B,EAAApc,UAAAmd,YAAA91B,EAAAI,WAGA9D,EAAAiE,UAAArB,KAAA,8BAAA,KAKAq2B,aAAA,WAIA,GAHA33B,KAAAm4B,oBACAn4B,KAAA43B,gBAEAl5B,EAAAyhB,GAAAngB,KAAAs3B,eACA,MAAA,IAAA9sB,MAAAxK,KAAAs3B,cAAA,wDAIA,IAAA,IAAAxB,KAAA91B,KAAAkX,QACA4e,KAAA91B,KAAA0oB,SACA1oB,KAAAm4B,iBAAArC,GAAA91B,KAAAkX,QAAA4e,GAEA91B,KAAA43B,YAAA9B,GAAA91B,KAAAkX,QAAA4e,IASAsC,IAAA,WACA,OAAAp4B,KAAAgS,YAAAhS,KAAAgS,YAAAqmB,KAAA,MAIArmB,UAAA,WACA,IAAAA,EAEA,OAAAhS,KAAAu3B,oBACAvlB,EAAAhS,KAAAyoB,SAAAnnB,KAAAtB,KAAAu3B,oBACAvlB,EAIAA,EAAAhS,KAAAyoB,SAAAnnB,KAAAtB,KAAAs3B,gBAKApW,KAAA,WACAlhB,KAAAyoB,SAAAzoB,KAAAs3B,eAAAxb,MAAA9b,KAAAyoB,SAAAtH,YAGA0W,cAAA,WACA73B,KAAAkhB,KAAAlhB,KAAAm4B,mBAGAG,WAAA,WACAt4B,KAAAgT,MACA6d,aAAA7wB,KAAA43B,aACAh1B,IACA6wB,KAAA/0B,EAAAwzB,MAAAlyB,KAAAyzB,KAAAzzB,MACAu4B,SAAA75B,EAAAwzB,MAAA,WAAAlyB,KAAA0D,KAAA,aAAA1D,MACAoyB,OAAA1zB,EAAAwzB,MAAA,WAAAlyB,KAAA0D,KAAA,WAAA1D,MACAsG,KAAA5H,EAAAwzB,MAAA,WACAlyB,KAAA83B,aACA93B,KAAA0D,KAAA1D,KAAA83B,YAAAU,QACAx4B,KAAA83B,aAAA,GAEA93B,KAAAymB,eAEAzmB,MACAy4B,UAAA/5B,EAAAwzB,MAAAlyB,KAAAymB,YAAAzmB,MACAqE,OAAA3F,EAAAwzB,MAAAlyB,KAAAymB,YAAAzmB,MACA04B,SAAAh6B,EAAAwzB,MAAA,WAgBAlyB,KAAAyoB,SAAAsJ,eAAA,QAAArzB,EAAAsB,KAAAkX,QAAA6Z,OAAAzvB,KAAA,cACAtB,QAEA6wB,aAAA,WASAvqB,KAAA,SAAAqyB,GACA34B,KAAAyoB,SAAA5pB,SAAA,kBACA,IAAA85B,GAEA34B,KAAAk4B,YAAAl4B,KAAAyoB,SAAA,IAIAzoB,KAAA44B,YACA54B,KAAAo4B,MAAAv5B,SAAAmB,KAAAy3B,gBAYAz3B,KAAAgT,MAKAhT,KAAAgT,MAAAtU,EAAA,SAGAsB,KAAAo4B,MAAAx0B,GAAA5D,KAAAw3B,UAEAx3B,KAAAo4B,MAAAroB,OAAA/P,KAAAgT,OAEAhT,KAAAo4B,MAAAx5B,KAAAoB,KAAAw3B,UAAAznB,OAAA/P,KAAAgT,OAIAhT,KAAAs4B,cAQA50B,KAAA,SAAA80B,GACAx4B,KAAAo4B,OAAAp4B,KAAAo4B,MAAAx0B,GAAA,aAAA5D,KAAAyoB,SAAAlf,SAAA,mBAKAvJ,KAAAgT,MAAA1R,KAAA,gBAAAwwB,SACA9xB,KAAA83B,aAAAU,OAAAA,IAGAx4B,KAAA83B,aAAA,EAGA93B,KAAAyoB,SAAA9pB,YAAA,iBACAqB,KAAA64B,YAkBA74B,KAAAyoB,SAAAsJ,eAAA,SAAAyG,GAAA,aAIAI,UAAA,aAKAC,UAAA,aASAp3B,OAAA,SAAAk3B,GACA34B,KAAAgS,aAAAhS,KAAAo4B,OAAAp4B,KAAAo4B,MAAAx0B,GAAA,YACA5D,KAAA0D,OAEA1D,KAAAsG,KAAAqyB,IAQAlS,YAAA,aAIAgN,KAAA,SAAArxB,EAAA6xB,GAoBAj0B,KAAAyoB,SAAAsJ,eAAA,OAAAkC,GAGAj0B,KAAA0D,KAAA,SAUA+c,OAAA,SAAA2T,EAAAlD,GACAlxB,KAAAkX,QAAAkd,GAAAlD,EACAkD,KAAAp0B,KAAAm4B,kBACAn4B,KAAAm4B,iBAAA/D,GAAAlD,EACAlxB,KAAA84B,mBAAA1E,EAAAlD,KAEAlxB,KAAA43B,YAAAxD,GAAAlD,EACAlxB,KAAAgT,OACAhT,KAAAgT,MAAA6d,aAAA,SAAAuD,EAAAlD,KAKA4H,mBAAA,SAAA1E,EAAAlD,GACAlxB,KAAAkhB,KAAA,SAAAkT,EAAAlD,IAOA3I,QAAA,WACAvoB,KAAA0D,OACA1D,KAAA+4B,eACA/4B,KAAAyoB,SAAA/e,IAAA,aACA1J,KAAAyoB,SAAA6D,WAAA,sBAIAyM,aAAA,aAQAb,YAAA,SAAA32B,GACA7C,EAAA,kBAAA8C,KAAA,SAAAvC,EAAA+5B,GAEA,GAAAA,IAAAz3B,IAAA7C,EAAAs6B,GAAAp6B,KAAA2C,GAAAnB,OAAA,CAKA,IAAA64B,EAAAv6B,EAAAs6B,GACAE,EAAAD,EAAA33B,KAAA,qBAEA43B,IAIA,WAAAA,EAAAhiB,QAAAiiB,OACAF,EAAA33B,KAAA,qBAAAoC,KAAA,UACA,WAAAw1B,EAAAhiB,QAAAiiB,QACAF,EAAA33B,KAAA,qBAAA82B,MAAAx5B,KAAA,QAAA2Z,cAUAoa,SAAA,WACA3yB,KAAAo4B,KAAAp4B,KAAAo4B,MAAAx0B,GAAA,aAAA5D,KAAAgT,OACAhT,KAAAgT,MAAA1R,KAAA,gBAAA2vB,MAAA0B,aAmBAj0B,EAAAyhB,GAAAuX,kBAAA,SAAAjX,GACA,IAAA9E,EAAAwF,UACA,OAAAnhB,KAAAwB,KAAA,WACA,IAAA+yB,EAAA71B,EAAAsB,MAEAsB,EAAAizB,EAAAjzB,KADA,qBAEA4V,EAAA,iBAAAuJ,GAAAA,EACA+T,EAAA,WAAAtd,EAAA0f,KAAAS,EAAAF,EAEA71B,GACAizB,EAAAjzB,KANA,oBAMAA,EAAA,IAAAkzB,EAAAx0B,KAAAkX,IAGA,iBAAAuJ,GACAnf,EAAAmf,GAAA3E,MAAAxa,EAAAub,MAAA9B,UAAAuG,MAAAJ,KAAAvF,EAAA,OAMAjd,EAAAyhB,GAAAuX,kBAAAP,MAAAA,EACAz4B,EAAAyhB,GAAAuX,kBAAAL,OAAAA,EAGA34B,EAAAyhB,GAAAuX,kBAAAhP,UASAwI,MAAA,KAQAkI,UAAA,MASAC,UAAA,EAUAF,OAAA,SAQAG,MAAA,EAUA1C,KAAA,SAOA1a,OAAAxT,MAAA6wB,QAAAC,WACAz3B,OAAA,SAAA4e,GACAA,EAAA8Y,SACA9Y,EAAA8Y,YApfA,CAyfAv4B,OAAAgb,QAMA,SAAAxd,GACA,aAIAA,EAAAyd,OAAAzd,EAAAyhB,GAAAuX,kBAAAL,OAAAtc,UAAArc,EAAAyhB,GAAAuX,kBAAAP,MAAApc,WACAuc,cAAA,eACAE,SAAA,mBACAC,eAAA,qCAEAI,cAAA,WAEA73B,KAAAq4B,KAAA35B,EAAA,iBAGAsB,KAAAkX,QAAAoiB,OACAt5B,KAAAkX,QAAAoiB,KAAA,IAIA3B,aAAA,WAEA33B,KAAAm4B,oBACAn4B,KAAA43B,YAAA53B,KAAAkX,SAGAkhB,IAAA,WACA,OAAAp4B,KAAAq4B,MAGAO,UAAA,WACA54B,KAAAyoB,SAAA/kB,OACA1D,KAAAo4B,MAAAsB,YAAA15B,KAAAyoB,UAAAniB,QAGAuyB,UAAA,WACA74B,KAAAq4B,KAAA30B,KAAA1D,KAAAkX,QAAAoiB,KAAA56B,EAAAwzB,MAAA,WACAlyB,KAAAyoB,SAAAniB,OACAtG,KAAA+4B,gBACA/4B,QAGA+4B,aAAA,WACA/4B,KAAAo4B,OACAp4B,KAAAo4B,MAAAt2B,QAAAC,YA5CA,CAiDAb,OAAAgb,QAOA,SAAAxd,GACA,aAEA,IAAAi7B,EAAA,SAAAp4B,EAAA2V,GACAlX,KAAAyoB,SAAA/pB,EAAA6C,GAEAvB,KAAAkX,QAAAxY,EAAAyd,UAAAzd,EAAAyhB,GAAAyZ,SAAAlR,SAAAxR,EAAAxY,EAAAyhB,GAAA4T,cAAA8B,cAAA71B,KAAAyoB,WACAzoB,KAAAkX,QAAA2iB,SACA75B,KAAA85B,WAEA95B,KAAAo3B,OAIAp3B,KAAAkX,QAAA6iB,YAAAr7B,EAAAyhB,GAAA4T,cAAAkD,wBACAj3B,KAAAkX,QAAA6iB,WAAA,IAIAJ,EAAA5e,WACA8K,YAAA8T,EACAvC,KAAA,WACA,IACA4C,EADAC,GAAA,EAUA,GANAj6B,KAAAkX,QAAA9H,KAAApP,KAAAkX,QAAA9H,MAAApP,KAAAyoB,SAAAxoB,KAAA,MAIAD,KAAAkX,QAAA6Z,MAAA/wB,KAAAyoB,SAAA,GACAzoB,KAAAixB,MAAAvyB,EAAAyhB,GAAA4T,cAAA2C,YAAA12B,KAAAkX,SACAlX,KAAAixB,MAAA,CA8DA,YAzDA3yB,IAAA0B,KAAAkX,QAAAga,OAAA,OAAAlxB,KAAAkX,QAAAga,OACAlxB,KAAAkxB,MAAAlxB,KAAAixB,MAAAiJ,WAAAx7B,EAAAkwB,KAAA5uB,KAAAyoB,SAAAjjB,SACAy0B,GAAA,IAOAj6B,KAAAkX,QAAAga,MAAAxyB,EAAAyhB,GAAA4T,cAAAC,aAAAh0B,KAAAkX,QAAAga,OAAA,GACA,iBAAAlxB,KAAAkX,QAAAga,MACAlxB,KAAAkxB,MAAAlxB,KAAAixB,MAAAE,UAAAnxB,KAAAkX,QAAAga,OAEAlxB,KAAAkxB,MAAAlxB,KAAAkX,QAAAga,OAKAlxB,KAAAyoB,SAAA5pB,SAAA,YAGA,aAAAmB,KAAAixB,MAAAnsB,MACA9E,KAAAyoB,SAAA5pB,SAAA,wBAIA,WAAAmB,KAAAkX,QAAAzV,QACAzB,KAAAyoB,SAAA5pB,SAAA,kBACAmB,KAAAyoB,SAAA7lB,GAAA5C,KAAAkX,QAAAzV,OAAA,YAAA/C,EAAAwzB,MAAA,SAAA9vB,GASA,GAPApC,KAAAkX,QAAAijB,UACA/3B,EAAA8V,iBAMA,eAAAlY,KAAAkX,QAAAzV,OAEAzB,KAAAsG,WACA,CAEA,IAAAqyB,EAAA,UAAA34B,KAAAkX,QAAAzV,OACAzB,KAAAyB,OAAAk3B,KAEA34B,QAEAA,KAAAyoB,SAAAxoB,KAAA,YAAA,GAKA,mBAAAD,KAAAkX,QAAAN,UACA5W,KAAAkX,QAAAkjB,SAAA,UAIAp6B,KAAAkX,QAAAkjB,UACA,IAAA,SACAJ,GAAA,EACA,MACA,IAAA,OAEAA,GAAAt7B,EAAAkwB,KAAA5uB,KAAAyoB,SAAAjf,QAAApJ,QAAA,OAAAJ,KAAAkxB,YAAA5yB,IAAA0B,KAAAkxB,QAAA+I,EACA,MACA,QACAD,GAAA,EAIAt7B,EAAAuzB,MAAA+H,GAAAh6B,KAAA0xB,UAAApnB,KAAA5L,EAAAwzB,MAAA,WACAlyB,KAAAkX,QAAAijB,SACAn6B,KAAAq6B,UAEAr6B,KAAAs6B,SAgBAt6B,KAAAyoB,SAAAsJ,eAAA,OAAA/xB,OACAA,SAMA85B,SAAA,WAEA,IAAAD,EAAA75B,KAAAkX,QAAA2iB,SAEA75B,KAAAkX,QAAA2iB,UAAA,EACA75B,KAAAkX,QAAAkjB,SAAA,QAEAp6B,KAAAyoB,SAAA7lB,GAAA5C,KAAAkX,QAAAzV,OAAA,YAAAo4B,EAAAn7B,EAAAwzB,MAAA,SAAA9vB,GACA,IAAA21B,EAAAr5B,EAAA0D,EAAAI,QACAu1B,EAAAz2B,KAAA,cAGAy2B,EAAAxuB,SAAAvJ,KAAAkX,QAAAqjB,aACAxC,EAAAj2B,QAEAi2B,EAAA6B,SAAA55B,KAAAkX,SAAA3T,QAAAnB,KAEApC,QAUA0xB,OAAA,SAAAxsB,GAEA,IAAA,IAAAlF,KAAAkX,QAAAN,QAKA,OAAA5W,KAAAixB,MAAAuJ,gBACAx6B,KAAAixB,MAAAwJ,WAAAz6B,KAAAkxB,MAAAlxB,KAAAyoB,SAAA,GAAAzoB,KAAAkX,QAAAN,QAAA1R,GAEA,mBAAAlF,KAAAkX,QAAAN,QACA5W,KAAAkX,QAAAN,QAAAsK,KAAAlhB,KAAAyoB,SAAA,GAAAzoB,KAAAkxB,MAAAhsB,GAGAlF,KAAAixB,MAAAwJ,WAAAz6B,KAAAkxB,MAAAlxB,KAAAyoB,SAAA,KAQA6R,OAAA,WACAt6B,KAAAkX,QAAAijB,UAAA,EACAn6B,KAAAyoB,SAAA9pB,YAAA,qBACAqB,KAAA06B,YAAA16B,KAAA26B,SACA,WAAA36B,KAAAkX,QAAAzV,QACA,OAAAzB,KAAAyoB,SAAAxoB,KAAA,aACAD,KAAAyoB,SAAA7b,WAAA,aASAytB,QAAA,WACAr6B,KAAAkX,QAAAijB,UAAA,EACAn6B,KAAA0D,OACA1D,KAAAyoB,SAAA5pB,SAAA,qBACAmB,KAAA06B,YAAA16B,KAAA26B,SAEA36B,KAAAyoB,SAAAxoB,KAAA,YAAA,IAOA26B,eAAA,WACA56B,KAAAkX,QAAAijB,SACAn6B,KAAAs6B,SAEAt6B,KAAAq6B,WAaA5Z,OAAA,SAAA2T,EAAAlD,GAEA,GAAAkD,GAAA,iBAAAA,EACA11B,EAAA8C,KAAA4yB,EAAA11B,EAAAwzB,MAAA,SAAA4D,EAAA1S,GACApjB,KAAAygB,OAAA/hB,EAAAkwB,KAAAkH,GAAA1S,IACApjB,WAHA,CAWA,GAHAA,KAAAkX,QAAAkd,GAAAlD,EAGA,aAAAkD,EACA,OAAAlD,EAAAlxB,KAAAq6B,UAAAr6B,KAAAs6B,SAIA,UAAAlG,GACAp0B,KAAAq0B,SAAAnD,GAIAlxB,KAAAgS,WACAhS,KAAAgS,UAAAyO,OAAA2T,EAAAlD,GAIAlxB,KAAAixB,MAAAxQ,QACAzgB,KAAAixB,MAAAxQ,OAAA2T,EAAAlD,KAQAwJ,YAAA,SAAAC,IAEA,IAAA36B,KAAAkX,QAAAN,eASAtY,IAAAq8B,EACA36B,KAAA26B,QAAAA,EAKA,mBAAA36B,KAAAixB,MAAA,QACAjxB,KAAA26B,QAAA36B,KAAAixB,MAAA0J,QAAA36B,KAAAyoB,UAEAzoB,KAAA26B,QAAA,KAAAj8B,EAAAkwB,KAAA5uB,KAAAyoB,SAAAjjB,QAKAxF,KAAAkX,QAAAijB,SAWAn6B,KAAA26B,UACA36B,KAAAyoB,SAAA3mB,QACA9B,KAAAkX,QAAAqjB,YACAv6B,KAAAyoB,SAAA9pB,YAAAqB,KAAAkX,QAAAqjB,aAbAv6B,KAAA26B,SACA36B,KAAAyoB,SAAAjjB,KAAAxF,KAAAkX,QAAA2jB,WACA76B,KAAAkX,QAAAqjB,YACAv6B,KAAAyoB,SAAA5pB,SAAAmB,KAAAkX,QAAAqjB,aAEAv6B,KAAAkX,QAAAqjB,YACAv6B,KAAAyoB,SAAA9pB,YAAAqB,KAAAkX,QAAAqjB,cAkBAj0B,KAAA,SAAAqyB,GACA,IAAA34B,KAAAkX,QAAAijB,SAAA,CAKA,GAAAn6B,KAAAgS,WASA,GAAAhS,KAAAgS,UAAAomB,MAAAx0B,GAAA,YACA,WAVA,CACA,IAAAu0B,EAAAz5B,EAAAyd,UAAAnc,KAAAkX,SACAga,MAAAlxB,KAAAkxB,MACAD,MAAAjxB,KAAAixB,QAEAjxB,KAAAyoB,SAAAiP,kBAAAS,GAEAn4B,KAAAyoB,SAAA7lB,GAAA,gBAAAlE,EAAAwzB,MAAAlyB,KAAAyzB,KAAAzzB,OACAA,KAAAgS,UAAAhS,KAAAyoB,SAAAnnB,KAAA,qBAMAtB,KAAAgS,UAAA1L,KAAAqyB,KAOAj1B,KAAA,WACA1D,KAAAgS,WACAhS,KAAAgS,UAAAtO,QASAjC,OAAA,SAAAk3B,GACA34B,KAAAgS,WAAAhS,KAAAgS,UAAAomB,MAAAx0B,GAAA,YACA5D,KAAA0D,OAEA1D,KAAAsG,KAAAqyB,IAOAlF,KAAA,SAAArxB,EAAA6xB,GAEA,GAAAj0B,KAAAkX,QAAA4jB,aAAA,CAQA,IAAAC,GAAA,GAIAA,GADAA,GADAA,GADAA,EAAAA,GAAA,mBAAA/6B,KAAAkX,QAAArS,OACA,IAAA7E,KAAAkX,QAAAN,eACAtY,IAAA21B,EAAA/uB,WACAlF,KAAAkX,QAAAmc,cAAArzB,KAAAixB,MAAAqC,UAAAtzB,KAAAkxB,SAAAlxB,KAAAixB,MAAAqC,UAAAW,EAAAd,WAGAnzB,KAAAyoB,SAAA9pB,YAAAqB,KAAAkX,QAAA4jB,cAEA96B,KAAAyoB,SAAA5pB,SAAAmB,KAAAkX,QAAA4jB,cAKA,GAAA96B,KAAAkX,QAAA6iB,UAAA,CACA,IAAAiB,EAAAh7B,KAAAyoB,SACAwS,EAAAD,EAAAl6B,IAAA,oBAEAk6B,EAAAl6B,IAAA,mBAAAd,KAAAkX,QAAA6iB,WACAnpB,WAAA,WACA,gBAAAqqB,IACAA,EAAA,IAEAD,EAAAl6B,IAAA,mBAAAm6B,GACAD,EAAAn8B,SAAA,0BACA+R,WAAA,WACAoqB,EAAAr8B,YAAA,2BACA,OACA,IAIAqB,KAAAq0B,SAAAJ,EAAAd,UAAA,EAAAc,EAAA/uB,WAkBAkO,SAAA,WACA,GAAA,mBAAApT,KAAAkX,QAAA9D,SACA,OAAApT,KAAAkX,QAAA9D,SAAA8N,KAAAlhB,KAAAA,KAAAkxB,QAUAmD,SAAA,SAAAnD,EAAAoD,EAAApvB,GAEAlF,KAAAkxB,MADAoD,EACAt0B,KAAAixB,MAAAE,UAAAD,GAEAA,EAEAlxB,KAAAgS,WACAhS,KAAAgS,UAAAyO,OAAA,QAAAzgB,KAAAkxB,OAEAxyB,EAAAuzB,KAAAjyB,KAAA0xB,OAAAxsB,IACAoF,KAAA5L,EAAAwzB,MAAA,WACAlyB,KAAA06B,eACA16B,QAOA2yB,SAAA,WACA3yB,KAAAgS,WACAhS,KAAAgS,UAAA2gB,YAQApK,QAAA,WACAvoB,KAAAq6B,UAEAr6B,KAAAgS,WACAhS,KAAAgS,UAAAuW,UAGAvoB,KAAAixB,MAAA1I,UAEA,WAAAvoB,KAAAkX,QAAAzV,SACAzB,KAAAyoB,SAAA9pB,YAAA,kBACAqB,KAAAyoB,SAAA/e,IAAA1J,KAAAkX,QAAAzV,OAAA,cAGAzB,KAAAyoB,SAAA/e,IAAA,iBAEA1J,KAAAyoB,SAAA9pB,YAAA,4CACAqB,KAAAyoB,SAAA6D,WAAA,cAmBA5tB,EAAAyhB,GAAAyZ,SAAA,SAAAnZ,GAEA,IAAAjS,KAAAmN,EAAAwF,UACA,OAAAV,GAcA,IAAA,WAOA,OANAzgB,KAAAwB,KAAA,WACA,IAAAoJ,EAAAtJ,EAAA5C,EAAAsB,MAAAsB,KAjBA,YAkBAA,IAAAsJ,EAAAtJ,EAAA8R,cACA5E,EAAAlN,EAAA4V,QAAA9H,MAAAxE,KAGA4D,EAsBA,IAAA,WAWA,OAVA,IAAA2S,UAAA/gB,SAAA,IAAA+gB,UAAA,GACA3S,EAAAxO,KAAAk7B,GAAA,GAAA55B,KA9CA,YA8CA4vB,MAEAlxB,KAAAwB,KAAA,WACA,IAAAF,EAAA5C,EAAAsB,MAAAsB,KAjDA,YAkDAA,QAAAhD,IAAAgD,EAAA4vB,OAAA,OAAA5vB,EAAA4vB,QACA1iB,EAAAlN,EAAA4V,QAAA9H,MAAA9N,EAAA2vB,MAAAuC,aAAAlyB,EAAA4vB,UAIA1iB,EAkBA,IAAA,SACA,IAAA2sB,EAAAha,UAAA,OACAia,EAAAp7B,KACA0O,EAAA1O,KAAA45B,SAAA,YAGA,GAAAl7B,EAAA28B,cAAA3sB,GAAA,CACA,IAAAylB,KAGA,GAAA,IAAAiH,EAAAh7B,OAAA,CACA,IAAAw5B,EAAAwB,EAAA95B,KAAA,YAEA2yB,GACA7kB,KAAAwqB,EAAA1iB,QAAA9H,MAAA,GACA8hB,MAAA0I,EAAA3I,MAAAuC,aAAAoG,EAAA1I,OACA4C,GAAA,mBAAA8F,EAAA1iB,QAAA4c,GACA8F,EAAA1iB,QAAA4c,GAAA5S,KAAA0Y,EAAA1iB,QAAA6Z,OACA6I,EAAA1iB,QAAA4c,IAIA,mBAAA8F,EAAA1iB,QAAA+c,OACAA,EAAA2F,EAAA1iB,QAAA+c,OAAA/S,KAAA0Y,EAAA1iB,QAAA6Z,MAAAkD,IAGA2F,EAAA1iB,QAAA+c,OAAAv1B,EAAAyhB,GAAA4T,cAAAC,aAAA4F,EAAA1iB,QAAA+c,QAAA,GACAv1B,EAAAyd,OAAA8X,EAAA2F,EAAA1iB,QAAA+c,SAGAE,GACAtvB,IAAA+0B,EAAA1iB,QAAArS,IACAvD,KAAA2yB,EACAnvB,KAAA,QAIAq2B,EAAA71B,QAAA61B,EAAA71B,SAAAs0B,EAAA1iB,QAAA5R,QACA61B,EAAAvwB,MAAAuwB,EAAAvwB,OAAAgvB,EAAA1iB,QAAAtM,UAGA,CACA,IAAA0wB,EAAAt7B,KAAA45B,SAAA,YAEAzF,GACAtvB,IAAAs2B,EAAAt2B,IACAvD,KAAAg6B,EACAx2B,KAAA,QAKAqvB,EAAA7uB,QAAA,mBAAA61B,EAAA71B,QAAA,SAAAJ,GACAi2B,EAAA71B,QAAA4b,KAAAka,EAAAl2B,EAAAi2B,IACAz8B,EAAA68B,KAGApH,EAAAvpB,MAAA,mBAAAuwB,EAAAvwB,MAAA,WACAuwB,EAAAvwB,MAAAkR,MAAAsf,EAAAja,YACAziB,EAAA68B,KAGAJ,EAAAhH,aACAz1B,EAAAyd,OAAAgY,EAAAgH,EAAAhH,aAIAgH,EAAA75B,MACA5C,EAAAyd,OAAAgY,EAAA7yB,KAAA65B,EAAA75B,MAIA5C,EAAAkG,KAAAuvB,OAEA,mBAAAgH,EAAAvwB,OACAuwB,EAAAvwB,MAAAsW,KAAAka,EAAA1sB,GAGA,OAAA1O,KAIA,OAAAA,KAAAwB,KAAA,WACA,IAAA+yB,EAAA71B,EAAAsB,MACAsB,EAAAizB,EAAAjzB,KA7JA,YA8JA4V,EAAA,iBAAAuJ,GAAAA,EAKAvJ,GAAAA,EAAA2iB,SACAv4B,EAAA,IAAAq4B,EAAA35B,KAAAkX,IAIA5V,GACAizB,EAAAjzB,KAzKA,WAyKAA,EAAA,IAAAq4B,EAAA35B,KAAAkX,IAGA,iBAAAuJ,GACAnf,EAAAmf,GAAA3E,MAAAxa,EAAAub,MAAA9B,UAAAuG,MAAAJ,KAAAvF,EAAA,QAMAjd,EAAAyhB,GAAAyZ,SAAAlR,UAQA5jB,KAAA,OAQAq1B,UAAA,EAiBA14B,OAAA,QAQAo5B,UAAA,QAWAT,SAAA,OAoBAlJ,MAAA,KAqCAta,QAAA,KASA2jB,WAAA,iBAUAO,aAAA,mBA6BAjB,SAAA,KASAE,UAAA,WAh1BA,CAm1BA74B,OAAAgb,QASA,SAAAxd,GACA,aAGAA,EAAAyhB,GAAA0W,iBAEA,IAAA2E,EAAA,aAEAA,EAAAzgB,WAMAqc,KAAA,SAAAtyB,EAAAoS,EAAAwR,GACA1oB,KAAA8E,KAAAA,EACA9E,KAAAkX,QAAAxY,EAAAyd,UAAAuM,EAAAxR,IAMAka,UAAA,WACApxB,KAAAgyB,KAAAtzB,EAAAsB,KAAAkX,QAAAukB,KACAz7B,KAAAqyB,OAAAryB,KAAAgyB,KACAhyB,KAAA07B,OAAA,KACA17B,KAAA4K,MAAA,MASA8mB,OAAA,aAWA+I,WAAA,SAAAvJ,EAAA3vB,GACA7C,EAAA6C,GAAAvB,KAAAkX,QAAA+e,OAAA,OAAA,QAAAv3B,EAAAkwB,KAAAsC,KAUAgJ,WAAA,SAAA10B,GACA,OAAA9G,EAAA,SAAA8G,KAAAA,GAAAgE,QAUA8pB,UAAA,SAAApC,GACA,OAAAA,GAUAC,UAAA,SAAA+E,GACA,OAAAA,GAUA1C,aAAA,SAAAtC,GACA,OAAAA,GASAqB,YAAA,SAAArB,GACAlxB,KAAAqyB,OAAA5vB,IAAAyuB,IAQAkC,YAAA,WACA,OAAApzB,KAAAqyB,OAAA5vB,OAQAkwB,SAAA,WACA3yB,KAAAqyB,OAAAzuB,GAAA,aACA5D,KAAAqyB,OAAAsJ,SASAC,MAAA,WACA57B,KAAAqyB,OAAA5vB,IAAA,OAMAwzB,OAAA,SAAAC,GACA,OAAAx3B,EAAA,SAAA8K,KAAA0sB,GAAA1wB,QAMA2sB,WAAA,aAOA5J,QAAA,aAIAsT,SAAA,WACA77B,KAAAkX,QAAA4kB,YACA97B,KAAAqyB,OAAAxzB,SAAAmB,KAAAkX,QAAA4kB,aAIAC,QAAA,SAAA97B,QACA3B,IAAA0B,KAAAkX,QAAAjX,IAAA,OAAAD,KAAAkX,QAAAjX,IACAD,KAAAqyB,OAAApyB,KAAAA,EAAAD,KAAAkX,QAAAjX,KAIAwgB,OAAA,SAAA2T,EAAAlD,GACAlxB,KAAAkX,QAAAkd,GAAAlD,IAKAsK,EAAA9S,UAQA+S,IAAA,GAQAK,WAAA,KAYA7F,QAAA,EAIAlF,MAAA,KAGAU,aAAA,GAGA/yB,EAAAyd,OAAAzd,EAAAyhB,GAAA0W,eAAAmF,cAAAR,IAlNA,CAoNAt6B,OAAAgb,QAQA,SAAAxd,GACA,aAEA,IAAAu9B,EAAA,SAAA/kB,KAIAxY,EAAAyhB,GAAA4T,cAAAW,QAAAuH,EAAAv9B,EAAAyhB,GAAA0W,cAAAmF,eAEAt9B,EAAAyd,OAAA8f,EAAAlhB,WACA2W,OAAA,WACA,IAAAwK,EAAAx9B,EAAAwe,WAWA,OATAld,KAAA4K,MAAA,KACA5K,KAAAm8B,cAAA,WACAn8B,KAAAo8B,aACAF,EAAAG,WACA,WACAr8B,KAAA4K,MAAA5K,KAAAkX,QAAAolB,YACAJ,EAAAG,YAGAH,EAAA7b,WAGA6Z,WAAA,SAAA10B,GACA,OAAA,MAGAi1B,WAAA,SAAAvJ,EAAA3vB,EAAAqV,EAAA1R,GACA,IAAAg3B,EAAAx9B,EAAAwe,WACA5X,EAAA,WACA,mBAAAsR,EAEAA,EAAAsK,KAAA3f,EAAA2vB,EAAAlxB,KAAAo2B,WAAAlxB,GAEAlF,KAAAw6B,gBAAAtJ,EAAA3vB,GAEA26B,EAAAG,WAUA,OANA,OAAAnL,EACA5rB,EAAA4b,KAAAlhB,MAEAA,KAAAm8B,cAAA72B,EAAA,WAAA42B,EAAAG,YAGAH,EAAA7b,WAKA8b,cAAA,SAAA72B,EAAAsF,GAEA,IAAA2xB,EAUA,GATA79B,EAAA89B,WAAAx8B,KAAAkX,QAAAqlB,SACAA,EAAAv8B,KAAAkX,QAAAqlB,OAAArb,KAAAlhB,KAAAkX,QAAA6Z,OACA/wB,KAAAo2B,WAAA,MAGAmG,EAAAv8B,KAAAkX,QAAAqlB,OAIAv8B,KAAAkX,QAAAulB,aAAA/9B,EAAAoe,QAAA9c,KAAAo2B,YACA9wB,EAAA4b,KAAAlhB,UADA,CAMA,IACAu8B,EAAA79B,EAAAyhB,GAAA4T,cAAAC,aAAAuI,GAAA,GACA,MAAAn6B,GAEA,YADAwI,EAAAsW,KAAAlhB,MAKA,GAAA,iBAAAu8B,EAAA,CAEA,GAAAv8B,KAAAkX,QAAAulB,YAAA,CACA,IACAjqB,EADAkqB,EAAAH,EASA,GANA79B,EAAAiE,UAAArB,KAAAo7B,IACAh+B,EAAAiE,UAAArB,KAAAo7B,OAKA,KAHAlqB,EAAA9T,EAAAiE,UAAArB,KAAAo7B,IAGA9K,SAAApf,EAAA4jB,WAIA,OAHAp2B,KAAAo2B,WAAA5jB,EAAA4jB,WACAp2B,KAAA28B,iBACAr3B,EAAA4b,KAAAlhB,MAEA,IAAA,IAAAwS,EAAAof,QASA,OARApf,EAAAoqB,UAAArvB,KAAA7O,EAAAwzB,MAAA,WACAlyB,KAAAo2B,WAAA5jB,EAAA4jB,WACAp2B,KAAA28B,YACAr3B,EAAA4b,KAAAlhB,OACAA,YAGAwS,EAAAqqB,cAAAtvB,KAAA7O,EAAAwzB,MAAAtnB,EAAA5K,OAGAwS,EAAAof,SAAA,EACApf,EAAAoqB,aACApqB,EAAAqqB,iBAKA,IAAA1I,EAAAz1B,EAAAyd,QACAtX,IAAA03B,EACAz3B,KAAA,MACA0N,OAAA,EACAzN,SAAA,OACAO,QAAA5G,EAAAwzB,MAAA,SAAA5wB,GACAkR,IACAA,EAAAof,SAAA,GAEA5xB,KAAAo2B,WAAAp2B,KAAA+c,UAAAzb,GACA5C,EAAAoe,QAAA9c,KAAAo2B,aACA5jB,IAEAA,EAAA4jB,WAAAp2B,KAAAo2B,WAEA13B,EAAA8C,KAAAgR,EAAAoqB,UAAA,WAAA58B,KAAAkhB,UAEAlhB,KAAA28B,YACAr3B,EAAA4b,KAAAlhB,QAEA4K,EAAAsW,KAAAlhB,MACAwS,GAEA9T,EAAA8C,KAAAgR,EAAAqqB,cAAA,WAAA78B,KAAAkhB,WAGAlhB,MACA4K,MAAAlM,EAAAwzB,MAAA,WACAtnB,EAAAsW,KAAAlhB,MACAwS,IACAA,EAAAof,SAAA,EAEAlzB,EAAA8C,KAAAgR,EAAAqqB,cAAA,WAAA78B,KAAAkhB,WAEAlhB,OACAA,KAAAkX,QAAA4lB,eAGAp+B,EAAAkG,KAAAuvB,QAGAn0B,KAAAo2B,WAAAp2B,KAAA+c,UAAAwf,GAEA79B,EAAAoe,QAAA9c,KAAAo2B,aACAp2B,KAAA28B,YACAr3B,EAAA4b,KAAAlhB,OAEA4K,EAAAsW,KAAAlhB,QAKA28B,UAAA,WACA,OAAA38B,KAAAkX,QAAA6lB,cAAAz+B,IAAA0B,KAAAkX,QAAA6lB,UAIAr+B,EAAAoe,QAAA9c,KAAAg9B,eAEAt+B,EAAA89B,WAAAx8B,KAAAkX,QAAA6lB,WACA/8B,KAAAkX,QAAA6lB,QAAA/8B,KAAAkX,QAAA6lB,QAAA7b,KAAAlhB,KAAAkX,QAAA6Z,QAIA/wB,KAAAkX,QAAA6lB,QAAAr+B,EAAAyhB,GAAA4T,cAAAC,aAAAh0B,KAAAkX,QAAA6lB,SAAA,GAGA,iBAAA/8B,KAAAkX,QAAA6lB,UACA/8B,KAAAkX,QAAA6lB,SAAAE,GAAAj9B,KAAAkX,QAAA6lB,UAGA/8B,KAAAg9B,YAAAh9B,KAAA+c,UAAA/c,KAAAkX,QAAA6lB,UAGAr+B,EAAAoe,QAAA9c,KAAAg9B,cAAAt+B,EAAAoe,QAAA9c,KAAAo2B,cACAp2B,KAAAo2B,WAAAp2B,KAAAg9B,YAAA/X,OAAAjlB,KAAAo2B,eAOAgG,WAAA,aAOA5B,gBAAA,SAAAtJ,EAAA3vB,KAOAwb,UAAA,SAAAzb,GACA,IAAA47B,EAAAvgB,EAAA1U,EAAAk1B,EAAA3uB,KACA,IAAAlN,GAAA,iBAAAA,EACA,OAAA,KAGA,GAAA5C,EAAAoe,QAAAxb,GAAA,CAKA67B,EAAA,SAAArH,EAAA1S,GAEA,GADAzG,GAAAuU,MAAA4E,EAAAtsB,KAAA4Z,GACA8Z,KAAA,EACA,OAAA,GAIA,IAAA,IAAAj+B,EAAA,EAAAA,EAAAqC,EAAAlB,OAAAnB,IAEA,iBADAgJ,EAAA3G,EAAArC,KAEAi+B,EAAA,EACAx+B,EAAA8C,KAAAyG,EAAAk1B,GAEA,IAAAD,EACA1uB,EAAAjB,KAAAoP,GAEAugB,EAAA,IAEAj1B,EAAA1B,WACA0B,EAAA1B,SAAAvG,KAAA+c,UAAA9U,EAAA1B,WAEAiI,EAAAjB,KAAAtF,KAIAuG,EAAAjB,MAAA2jB,MAAAjpB,EAAAuB,KAAAvB,SAIAvJ,EAAA8C,KAAAF,EAAA,SAAAw0B,EAAA1S,GACA5U,EAAAjB,MAAA2jB,MAAA4E,EAAAtsB,KAAA4Z,MAGA,OAAA5U,GAGAiS,OAAA,SAAA2T,EAAAlD,GACAlxB,KAAAkX,QAAAkd,GAAAlD,EACA,WAAAkD,IACAp0B,KAAAo2B,WAAA,MAEA,YAAAhC,IACAp0B,KAAAg9B,YAAA,SAMAf,EAAAvT,SAAAhqB,EAAAyd,UAAAzd,EAAAyhB,GAAA0W,cAAAmF,cAAAtT,UAkBA6T,OAAA,KAQAQ,SAAA,EAQAT,YAAA,0BAUAG,aAAA,EAUAK,cAAA,OAGAp+B,EAAAyhB,GAAA0W,cAAAuG,KAAAnB,EAtUA,CAwUA/6B,OAAAgb,QAmBA,SAAAxd,GACA,aAEA,IAAA2+B,EAAA,SAAAnmB,GACAlX,KAAAo3B,KAAA,OAAAlgB,EAAAmmB,EAAA3U,WAGAhqB,EAAAyhB,GAAA4T,cAAAW,QAAA2I,EAAA3+B,EAAAyhB,GAAA0W,cAAAmF,eAEAt9B,EAAAyd,OAAAkhB,EAAAtiB,WACA2W,OAAA,WACA1xB,KAAAs9B,cACAt9B,KAAA67B,WACA77B,KAAA+7B,QAAA,gBAGApJ,SAAA,WACA3yB,KAAAqyB,OAAAzuB,GAAA,cACA5D,KAAAqyB,OAAAsJ,QACAj9B,EAAAyhB,GAAA4T,cAAAgB,kBAAA/0B,KAAAqyB,OAAA7qB,IAAA,GAAAxH,KAAAqyB,OAAA5vB,MAAArC,QACAJ,KAAAu9B,aACAv9B,KAAAu9B,gBAMAD,YAAA,WACAt9B,KAAAkX,QAAA0kB,QACA57B,KAAA07B,OAAAh9B,EAAA,0CACAsB,KAAAqyB,OAAAmL,MAAAx9B,KAAA07B,QACA56B,IAAA,gBAAA,IACA28B,MAAA/+B,EAAAwzB,MAAA,SAAA9vB,GAEA,KAAA1D,EAAAg/B,QAAAt7B,EAAAyB,SAAA,GAAA,GAAA,EAAA,GAAA,KAAA,CAIA8gB,aAAA3kB,KAAAsgB,GACA,IAAAkW,EAAAx2B,KACAA,KAAAsgB,EAAA1P,WAAA,WACA4lB,EAAA+G,YAAAn7B,IACA,OAEApC,OACAyJ,SAAA3I,IAAA,WAAA,YAEAd,KAAA07B,OAAAprB,MAAA5R,EAAAwzB,MAAAlyB,KAAA47B,MAAA57B,SAIAyyB,WAAA,aAeA8K,YAAA,SAAAn7B,GACA,GAAApC,KAAA07B,OAAA,CAIA,IAAAiC,EAAA39B,KAAAqyB,OAAA5vB,MAAArC,OACAw9B,EAAA59B,KAAA07B,OAAA93B,GAAA,YAEA+5B,IAAAC,GACA59B,KAAA07B,OAAAp1B,QAGAq3B,GAAAC,GACA59B,KAAA07B,OAAAh4B,SAIAk4B,MAAA,WACA57B,KAAA07B,OAAAh4B,OACA1D,KAAAqyB,OAAA5vB,IAAA,IAAAk5B,WAIA0B,EAAA3U,SAAAhqB,EAAAyd,UAAAzd,EAAAyhB,GAAA0W,cAAAmF,cAAAtT,UAKA+S,IAAA,sBAQAoC,YAAA,KASAjC,OAAA,IAGAl9B,EAAAyhB,GAAA0W,cAAArtB,KAAA6zB,EAlHA,CAoHAn8B,OAAAgb,QAoBA,SAAAxd,GACA,aAEA,IAAAo/B,EAAA,SAAA5mB,GACAlX,KAAAo3B,KAAA,WAAAlgB,EAAA4mB,EAAApV,WAGAhqB,EAAAyhB,GAAA4T,cAAAW,QAAAoJ,EAAAp/B,EAAAyhB,GAAA0W,cAAAmF,eAEAt9B,EAAAyd,OAAA2hB,EAAA/iB,WACA2W,OAAA,WACA1xB,KAAA67B,WACA77B,KAAA+7B,QAAA,eACA/7B,KAAA+7B,QAAA,QAGA/7B,KAAAqyB,OAAA0L,QAAA,SAAA37B,GACAA,EAAA47B,SAAA,KAAA57B,EAAAiX,OACA3a,EAAAsB,MAAAyD,QAAA,QAAA8U,YAsCAoa,SAAA,WACAj0B,EAAAyhB,GAAA0W,cAAArtB,KAAAuR,UAAA4X,SAAAzR,KAAAlhB,SAIA89B,EAAApV,SAAAhqB,EAAAyd,UAAAzd,EAAAyhB,GAAA0W,cAAAmF,cAAAtT,UAKA+S,IAAA,wBAKAK,WAAA,cAQA+B,YAAA,KAQAI,KAAA,IAGAv/B,EAAAyhB,GAAA0W,cAAAqH,SAAAJ,EA1FA,CA4FA58B,OAAAgb,QAuBA,SAAAxd,GACA,aAEA,IAAAy/B,EAAA,SAAAjnB,GACAlX,KAAAo3B,KAAA,SAAAlgB,EAAAinB,EAAAzV,WAGAhqB,EAAAyhB,GAAA4T,cAAAW,QAAAyJ,EAAAz/B,EAAAyhB,GAAA0W,cAAAuG,MAEA1+B,EAAAyd,OAAAgiB,EAAApjB,WACAqhB,WAAA,WACAp8B,KAAAqyB,OAAAvwB,QAEA,IAAAs8B,EAAA,SAAAnF,EAAA33B,GACA,IAAArB,EACA,GAAAvB,EAAAoe,QAAAxb,GACA,IAAA,IAAArC,EAAA,EAAAA,EAAAqC,EAAAlB,OAAAnB,IACAgB,KACAqB,EAAArC,GAAAsH,UACAtG,EAAAo+B,MAAA/8B,EAAArC,GAAAuK,KACAyvB,EAAAlpB,OAAAquB,EAAA1/B,EAAA,aAAAuB,GAAAqB,EAAArC,GAAAsH,aAEAtG,EAAAixB,MAAA5vB,EAAArC,GAAAiyB,MACA5vB,EAAArC,GAAAk7B,WACAl6B,EAAAk6B,UAAA,GAEAlB,EAAAlpB,OAAArR,EAAA,WAAAuB,GAAAuJ,KAAAlI,EAAArC,GAAAuK,QAIA,OAAAyvB,GAGAmF,EAAAp+B,KAAAqyB,OAAAryB,KAAAo2B,YAEAp2B,KAAA67B,WAGA77B,KAAAqyB,OAAAzvB,GAAA,mBAAA,SAAAR,GACA,KAAAA,EAAAiX,OACA3a,EAAAsB,MAAAyD,QAAA,QAAA8U,YAKAiiB,gBAAA,SAAAtJ,EAAA3vB,GACA,IAAAiI,EAAA,GACAigB,EAAA/qB,EAAAyhB,GAAA4T,cAAAoC,aAAAjF,EAAAlxB,KAAAo2B,YAEA3M,EAAArpB,SACAoJ,EAAAigB,EAAA,GAAAjgB,MAIA9K,EAAAyhB,GAAA0W,cAAAmF,cAAAjhB,UAAA0f,WAAAvZ,KAAAlhB,KAAAwJ,EAAAjI,IAGA4wB,WAAA,WACAnyB,KAAAqyB,OAAA3oB,IAAA,oBAAA9G,GAAA,kBAAA,WACAlE,EAAAsB,MAAAyD,QAAA,QAAA8U,cAKA4lB,EAAAzV,SAAAhqB,EAAAyd,UAAAzd,EAAAyhB,GAAA0W,cAAAuG,KAAA1U,UAKA+S,IAAA,sBAGA/8B,EAAAyhB,GAAA0W,cAAA1pB,OAAAgxB,EAxEA,CA0EAj9B,OAAAgb,QAwBA,SAAAxd,GACA,aAEA,IAAA4/B,EAAA,SAAApnB,GACAlX,KAAAo3B,KAAA,YAAAlgB,EAAAonB,EAAA5V,WAGAhqB,EAAAyhB,GAAA4T,cAAAW,QAAA4J,EAAA5/B,EAAAyhB,GAAA0W,cAAAuG,MAEA1+B,EAAAyd,OAAAmiB,EAAAvjB,WACAqhB,WAAA,WACA,IAAAmC,EAIA,GAFAv+B,KAAAgyB,KAAAlwB,QAEApD,EAAAoe,QAAA9c,KAAAo2B,YAAA,CAIA,IAAA,IAAAn3B,EAAA,EAAAA,EAAAe,KAAAo2B,WAAAh2B,OAAAnB,IACAs/B,EAAA7/B,EAAA,WAAAqR,OAAArR,EAAA,WACAoG,KAAA,WACAosB,MAAAlxB,KAAAo2B,WAAAn3B,GAAAiyB,SAEAnhB,OAAArR,EAAA,UAAA8K,KAAA,IAAAxJ,KAAAo2B,WAAAn3B,GAAAuK,OAEA9K,EAAA,SAAAqR,OAAAwuB,GAAA18B,SAAA7B,KAAAgyB,MAGAhyB,KAAAqyB,OAAAryB,KAAAgyB,KAAApzB,KAAA,0BACAoB,KAAA67B,aAGAvI,UAAA,SAAApC,GACA,OAAAxyB,EAAAoe,QAAAoU,GAAAA,EAAAb,OAAA5oB,KAAA/I,EAAAkwB,KAAA5uB,KAAAkX,QAAAsnB,YAAA,IAIArN,UAAA,SAAA+E,GACA,IAAAuI,EAAAvN,EAAA,KASA,MARA,iBAAAgF,GAAAA,EAAA91B,QACAq+B,EAAA,IAAAC,OAAA,OAAAhgC,EAAAkwB,KAAA5uB,KAAAkX,QAAAsnB,WAAA,QACAtN,EAAAgF,EAAAlG,MAAAyO,IAEAvN,EADAxyB,EAAAoe,QAAAoZ,GACAA,GAEAA,GAEAhF,GAIAqB,YAAA,SAAArB,GACAlxB,KAAAqyB,OAAA/V,KAAA,WAAA,GACA5d,EAAAoe,QAAAoU,IAAAA,EAAA9wB,QACAJ,KAAAqyB,OAAA7wB,KAAA,SAAAvC,EAAA+5B,GACA,IAAAC,EAAAv6B,EAAAs6B,GAEAt6B,EAAA8C,KAAA0vB,EAAA,SAAAyN,EAAAl8B,GAEAw2B,EAAAx2B,OAAAA,GAEAw2B,EAAA3c,KAAA,WAAA,QAOA8W,YAAA,WACA,IAAAwL,KAIA,OAHA5+B,KAAAqyB,OAAAvyB,OAAA,YAAA0B,KAAA,SAAAvC,EAAA+5B,GACA4F,EAAArxB,KAAA7O,EAAAs6B,GAAAv2B,SAEAm8B,GAIApE,gBAAA,SAAAtJ,EAAA3vB,GACA,IAAAiE,KACAo5B,EAAAlgC,EAAAyhB,GAAA4T,cAAAoC,aAAAjF,EAAAlxB,KAAAo2B,YACAH,EAAAj2B,KAAAkX,QAAA+e,OAEA2I,EAAAx+B,QACA1B,EAAA8C,KAAAo9B,EAAA,SAAA3/B,EAAAmkB,GACA,IAAA5Z,EAAAysB,EAAAv3B,EAAAyhB,GAAA4T,cAAAkC,OAAA7S,EAAA5Z,MAAA4Z,EAAA5Z,KACAhE,EAAA+H,KAAA/D,KAEA9K,EAAA6C,GAAAiE,KAAAA,EAAAiC,KAAA,UAEA/I,EAAA6C,GAAAO,SAIA6wB,SAAA,WACA3yB,KAAAqyB,OAAArvB,QAAA24B,SAGAxJ,WAAA,WACAnyB,KAAAqyB,OAAAzvB,GAAA,UAAA,SAAAR,GACA,KAAAA,EAAAiX,OACA3a,EAAAsB,MAAAyD,QAAA,QAAA8U,cAMA+lB,EAAA5V,SAAAhqB,EAAAyd,UAAAzd,EAAAyhB,GAAA0W,cAAAuG,KAAA1U,UAKA+S,IAAA,yCAOAK,WAAA,KASA0C,UAAA,MAGA9/B,EAAAyhB,GAAA0W,cAAAgI,UAAAP,EAnIA,CAqIAp9B,OAAAgb,QA2CA,SAAAxd,GACA,aAEA,IAAAogC,EAAA,SAAA5nB,GACAlX,KAAAo3B,KAAA,WAAAlgB,EAAA4nB,EAAApW,WAEAhqB,EAAAyhB,GAAA4T,cAAAW,QAAAoK,EAAApgC,EAAAyhB,GAAA0W,cAAArtB,MACA9K,EAAAyd,OAAA2iB,EAAA/jB,WAEA0f,WAAA,SAAAvJ,EAAA3vB,GACA2vB,EACAxyB,EAAA6C,GAAAiI,KAAA,YAEA9K,EAAA6C,GAAAO,SAIAo4B,WAAA,SAAA10B,GACA,OAAA,QAGAs5B,EAAApW,SAAAhqB,EAAAyd,UAAAzd,EAAAyhB,GAAA0W,cAAArtB,KAAAkf,UACA+S,IAAA,4BAEA/8B,EAAAyhB,GAAA0W,cAAAkI,SAAAD,EAxBA,CAyBA59B,OAAAgb,QAMA,SAAAxd,GACA,aAEA,IAAAsgC,EAAA,SAAA9nB,GACAlX,KAAAo3B,KAAA,QAAAlgB,EAAA8nB,EAAAtW,WAEAhqB,EAAAyhB,GAAA4T,cAAAW,QAAAsK,EAAAtgC,EAAAyhB,GAAA0W,cAAArtB,MACAw1B,EAAAtW,SAAAhqB,EAAAyd,UAAAzd,EAAAyhB,GAAA0W,cAAArtB,KAAAkf,UACA+S,IAAA,yBAEA/8B,EAAAyhB,GAAA0W,cAAAoI,MAAAD,EAVA,CAWA99B,OAAAgb,QAMA,SAAAxd,GACA,aAEA,IAAAwgC,EAAA,SAAAhoB,GACAlX,KAAAo3B,KAAA,MAAAlgB,EAAAgoB,EAAAxW,WAEAhqB,EAAAyhB,GAAA4T,cAAAW,QAAAwK,EAAAxgC,EAAAyhB,GAAA0W,cAAArtB,MACA01B,EAAAxW,SAAAhqB,EAAAyd,UAAAzd,EAAAyhB,GAAA0W,cAAArtB,KAAAkf,UACA+S,IAAA,uBAEA/8B,EAAAyhB,GAAA0W,cAAAhyB,IAAAq6B,EAVA,CAWAh+B,OAAAgb,QAMA,SAAAxd,GACA,aAEA,IAAAygC,EAAA,SAAAjoB,GACAlX,KAAAo3B,KAAA,MAAAlgB,EAAAioB,EAAAzW,WAEAhqB,EAAAyhB,GAAA4T,cAAAW,QAAAyK,EAAAzgC,EAAAyhB,GAAA0W,cAAArtB,MACA21B,EAAAzW,SAAAhqB,EAAAyd,UAAAzd,EAAAyhB,GAAA0W,cAAArtB,KAAAkf,UACA+S,IAAA,uBAEA/8B,EAAAyhB,GAAA0W,cAAAuI,IAAAD,EAVA,CAWAj+B,OAAAgb,QAMA,SAAAxd,GACA,aAEA,IAAA2gC,EAAA,SAAAnoB,GACAlX,KAAAo3B,KAAA,SAAAlgB,EAAAmoB,EAAA3W,WAEAhqB,EAAAyhB,GAAA4T,cAAAW,QAAA2K,EAAA3gC,EAAAyhB,GAAA0W,cAAArtB,MACA9K,EAAAyd,OAAAkjB,EAAAtkB,WACA2W,OAAA,WACA2N,EAAAvK,WAAApD,OAAAxQ,KAAAlhB,MACAA,KAAA+7B,QAAA,OACA/7B,KAAA+7B,QAAA,OACA/7B,KAAA+7B,QAAA,SAEAtJ,WAAA,WACAzyB,KAAA07B,QAEA17B,KAAA07B,OAAA56B,KAAA0nB,MAAA,QAYA6W,EAAA3W,SAAAhqB,EAAAyd,UAAAzd,EAAAyhB,GAAA0W,cAAArtB,KAAAkf,UACA+S,IAAA,wBACAK,WAAA,aACA13B,IAAA,KACAyU,IAAA,KACAymB,KAAA,OAEA5gC,EAAAyhB,GAAA0W,cAAA0I,OAAAF,EApCA,CAqCAn+B,OAAAgb,QAMA,SAAAxd,GACA,aAEA,IAAA8gC,EAAA,SAAAtoB,GACAlX,KAAAo3B,KAAA,QAAAlgB,EAAAsoB,EAAA9W,WAEAhqB,EAAAyhB,GAAA4T,cAAAW,QAAA8K,EAAA9gC,EAAAyhB,GAAA0W,cAAA0I,QACA7gC,EAAAyd,OAAAqjB,EAAAzkB,WACA2W,OAAA,WACA1xB,KAAAqyB,OAAAryB,KAAAgyB,KAAAlyB,OAAA,SAEAE,KAAA67B,WACA77B,KAAA+7B,QAAA,OACA/7B,KAAA+7B,QAAA,OACA/7B,KAAA+7B,QAAA,QAEA/7B,KAAAqyB,OAAAzvB,GAAA,QAAA,WACAlE,EAAAsB,MAAAy/B,SAAA,UAAAj2B,KAAA9K,EAAAsB,MAAAyC,UAGAkwB,SAAA,WACA3yB,KAAAqyB,OAAAsJ,WAGA6D,EAAA9W,SAAAhqB,EAAAyd,UAAAzd,EAAAyhB,GAAA0W,cAAA0I,OAAA7W,UACA+S,IAAA,mFACAK,WAAA,iBAEAp9B,EAAAyhB,GAAA0W,cAAA1B,MAAAqK,EA5BA,CA6BAt+B,OAAAgb,QAKA,SAAAxd,GACA,aAEA,IAAAghC,EAAA,SAAAxoB,GACAlX,KAAAo3B,KAAA,OAAAlgB,EAAAwoB,EAAAhX,WAGAhqB,EAAAyhB,GAAA4T,cAAAW,QAAAgL,EAAAhhC,EAAAyhB,GAAA0W,cAAAmF,eACAt9B,EAAAyd,OAAAujB,EAAA3kB,WACA2W,OAAA,WACA1xB,KAAA67B,cAGA6D,EAAAhX,SAAAhqB,EAAAyd,UAAAzd,EAAAyhB,GAAA0W,cAAAmF,cAAAtT,UACA+S,IAAA,wBAEA/8B,EAAAyhB,GAAA0W,cAAA8I,KAAAD,EAhBA,CAiBAx+B,OAAAgb,QAmFA,SAAAxd,GACA,aAEA,IAAA81B,EAAA,SAAAtd,GAaA,GAZAlX,KAAAo3B,KAAA,UAAAlgB,EAAAsd,EAAA9L,UAEAxR,EAAA0oB,QAAA1oB,EAAA0oB,YAEA5/B,KAAAo2B,WAAA,KAGAlf,EAAA2mB,cACA3mB,EAAA0oB,QAAA/B,YAAA3mB,EAAA2mB,cAIA3mB,EAAA0oB,QAAAC,MAAA3oB,EAAAqlB,OAAA,CACA,IAAAA,EAAArlB,EAAAqlB,OAEA79B,EAAA89B,WAAAtlB,EAAAqlB,UACAA,EAAArlB,EAAAqlB,OAAArb,KAAAhK,EAAA6Z,QAGA,iBAAAwL,GACArlB,EAAA0oB,QAAAh7B,KAAAsS,EAAA0oB,QAAAh7B,SAEAsS,EAAA0oB,QAAAh7B,KAAAtD,OACA4V,EAAA0oB,QAAAh7B,KAAAtD,KAAA,SAAAw+B,GAAA,OAAAC,MAAAD,KAEA5oB,EAAA0oB,QAAAh7B,KAAAo7B,UACA9oB,EAAA0oB,QAAAh7B,KAAAo7B,QAAA,SAAA1+B,GAAA,OAAA0+B,QAAA1+B,KAEA4V,EAAA0oB,QAAAh7B,KAAAC,IAAA03B,IAGAv8B,KAAAo2B,WAAAp2B,KAAAigC,cAAA1D,GACArlB,EAAA0oB,QAAAt+B,KAAAtB,KAAAo2B,YAcA,GATAp2B,KAAAkX,QAAA0oB,QAAAlhC,EAAAyd,UAAAqY,EAAA9L,SAAAkX,QAAA1oB,EAAA0oB,SAGA5/B,KAAAkgC,WAAAlgC,KAAAkX,QAAA0oB,QAAAC,MAAA7/B,KAAAkX,QAAA0oB,QAAAO,SACAngC,KAAAogC,SAAA,SAAApgC,KAAAkX,QAAA0oB,QAIA5/B,KAAAqgC,OAAArgC,KAAAkX,QAAA0oB,QAAAr4B,GACA,mBAAAvH,KAAA,OAAA,CACA,IAAAs2B,EAAAt2B,KAAAqgC,QAAA,KACArgC,KAAAqgC,OAAA,SAAAj+B,GAAA,OAAAA,EAAAk0B,IAIAt2B,KAAAsgC,gBAAAtgC,KAAAkX,QAAA0oB,QAAAU,gBACA,mBAAAtgC,KAAA,kBACAA,KAAAsgC,gBAAA,SAAAl+B,GAAA,OAAAA,EAAAoH,QAIA9K,EAAAyhB,GAAA4T,cAAAW,QAAAF,EAAA91B,EAAAyhB,GAAA0W,cAAAmF,eAEAt9B,EAAAyd,OAAAqY,EAAAzZ,WACA2W,OAAA,WACA1xB,KAAA67B,WAQA77B,KAAAogC,UAEApgC,KAAAqyB,OAAAzvB,GAAA,iBAAAlE,EAAAwzB,MAAA,SAAA9vB,GACApC,KAAAo2B,WAAAh0B,EAAAqnB,MAAAuW,SACAhgC,OAIAA,KAAAkgC,YACAlgC,KAAAqyB,OAAAzvB,GAAA,SAAA,WACAlE,EAAAsB,MAAAyD,QAAA,QAAAgG,SAAAsoB,eAAA,aAKA0I,WAAA,SAAAvJ,EAAA3vB,GACA,IAAAD,EAAAkI,EAAA,GACAgtB,EAAAx2B,KAEAA,KAAAkX,QAAA0oB,QAAAC,KACAv+B,EAAA4vB,EAEAlxB,KAAAo2B,aACA90B,EAAA5C,EAAAyhB,GAAA4T,cAAAoC,aAAAjF,EAAAlxB,KAAAo2B,WAAAp2B,KAAAqgC,SAOA3hC,EAAAoe,QAAAxb,IAEAkI,KACA9K,EAAA8C,KAAAF,EAAA,SAAAw0B,EAAA1S,GACA5Z,EAAA+D,KAAA6V,GAAA,iBAAAA,EAAAoT,EAAA8J,gBAAAld,GAAAA,MAEA9hB,IACAkI,EAAAgtB,EAAA8J,gBAAAh/B,IAGAkI,EAAA9K,EAAAoe,QAAAtT,GAAAA,EAAA/B,KAAAzH,KAAAkX,QAAAqpB,eAAA/2B,EAGAgrB,EAAAM,WAAA2F,WAAAvZ,KAAAlhB,KAAAwJ,EAAAjI,IAGA24B,WAAA,SAAA10B,GACA,OAAAxF,KAAAkX,QAAA0oB,QAAAC,KAAA7/B,KAAAmxB,UAAA3rB,EAAAxF,KAAAkX,QAAAqpB,eAAA,MAGAhO,YAAA,SAAArB,GAqBA,GAnBAxyB,EAAAoe,QAAAoU,KACAA,EAAAA,EAAAzpB,KAAAzH,KAAAwgC,iBAIAxgC,KAAAqyB,OAAA/wB,KAAA,WAKAtB,KAAAqyB,OAAA5vB,IAAAyuB,GAAA3tB,QAAA,UAAA,IAJAvD,KAAAqyB,OAAA5vB,IAAAyuB,GACAlxB,KAAAqyB,OAAAuN,QAAA5/B,KAAAkX,QAAA0oB,UAYA5/B,KAAAogC,WAAApgC,KAAAkgC,aAAAlgC,KAAAkX,QAAA0oB,QAAAa,cAAA,CAIA,IAAAC,EAAA1gC,KAAAkX,QAAA0oB,QAAAr4B,GACAo5B,EAAA3gC,KAAAkX,QAAA0oB,QAAAU,gBAEA,IAAAI,IAAAC,EAAA,CACA,IAAA1H,EAAAv6B,EAAAsB,KAAAkX,QAAA6Z,OACA,IAAAkI,EAAA33B,KAAA,YAAAq5B,QAAA,CACA,IAAAr5B,GAAAiG,GAAA2pB,EAAA1nB,KAAAyvB,EAAAzvB,QACAxJ,KAAAqyB,OAAAuN,QAAA,OAAAt+B,OAMA8xB,YAAA,WACA,OAAApzB,KAAAqyB,OAAAuN,QAAA,QAGAzO,UAAA,SAAA+E,EAAAsI,GACA,GAAA,iBAAAtI,IAAAl2B,KAAAkgC,WACA,OAAAhK,EAKA,IAAAzzB,EAAAxD,EAAA+hB,EAEA,GAJAwd,EAAAA,GAAAx+B,KAAAwgC,eAIA,OAAAtK,GAAAA,EAAA91B,OAAA,EACA,OAAA,KAGA,IAAAnB,EAAA,EAAA+hB,GADAve,EAAAyzB,EAAAlG,MAAAwO,IACAp+B,OAAAnB,EAAA+hB,EAAA/hB,GAAA,EACAwD,EAAAxD,GAAAP,EAAAkwB,KAAAnsB,EAAAxD,IAGA,OAAAwD,GAGA0vB,WAAA,WACAnyB,KAAAqyB,OAAAzvB,GAAA,SAAA,SAAAR,EAAAw+B,GACAA,GACAliC,EAAAsB,MAAAyD,QAAA,QAAA8U,YAKAioB,aAAA,WACA,OAAAxgC,KAAAkX,QAAA0oB,QAAApB,WAAA9/B,EAAAyhB,GAAAyf,QAAAlX,SAAA8V,WAOAyB,cAAA,SAAA1D,GACA,GAAA79B,EAAAoe,QAAAyf,IAAAA,EAAAn8B,aAAA9B,IAAAi+B,EAAA,GAAArL,MACA,IAAA,IAAAjyB,EAAA,EAAAA,EAAAs9B,EAAAn8B,OAAAnB,SACAX,IAAAi+B,EAAAt9B,GAAAiyB,QACAqL,EAAAt9B,GAAAsI,GAAAg1B,EAAAt9B,GAAAiyB,aACAqL,EAAAt9B,GAAAiyB,OAIA,OAAAqL,GAGAhU,QAAA,WACAvoB,KAAAqyB,OAAA/wB,KAAA,YACAtB,KAAAqyB,OAAAuN,QAAA,cAMApL,EAAA9L,SAAAhqB,EAAAyd,UAAAzd,EAAAyhB,GAAA0W,cAAAmF,cAAAtT,UAKA+S,IAAA,wBAQAmE,QAAA,KAQA/B,YAAA,KAUAtB,OAAA,KAQAgE,cAAA,OAGA7hC,EAAAyhB,GAAA0W,cAAA+I,QAAApL,EAxQA,CA0QAtzB,OAAAgb,QAuBA,SAAAxd,GAEA,IAAAmiC,EAAA,SAAAt/B,EAAA2V,GACAlX,KAAAyoB,SAAA/pB,EAAA6C,GACAvB,KAAAyoB,SAAA7kB,GAAA,UAIA5D,KAAAkX,QAAAxY,EAAAyd,UAAAzd,EAAAyhB,GAAA2gB,UAAApY,SAAAxR,EAAAlX,KAAAyoB,SAAAnnB,QACAtB,KAAAo3B,QAJA14B,EAAAkM,MAAA,iDAOAi2B,EAAA9lB,WACA8K,YAAAgb,EACAzJ,KAAA,WACAp3B,KAAAN,KAEAqhC,KAAA,IAAA,QACAC,OAAA,IAAA,SACAC,MAAA,IAAA,QACAC,MAAA,OAAA,SACAC,QAAA,IAAA,WACAC,QAAA,IAAA,WACAC,MAAA,OAAA,KAGArhC,KAAAshC,QAAA5iC,EAAA,mCAAA8G,KAAAxF,KAAAuhC,eAEAvhC,KAAAwhC,aAGAxhC,KAAAshC,QAAA1+B,GAAA,SAAA,SAAAlE,EAAAwzB,MAAA,SAAA9vB,GACApC,KAAAyoB,SAAAhmB,IAAAzC,KAAAyhC,YAAAC,SAEA1hC,KAAAkX,QAAAyqB,YACAjjC,EAAA0D,EAAAI,QAAAoB,GAAA,WAAAlF,EAAA0D,EAAAI,QAAAoB,GAAA,WACA5D,KAAA4hC,UAAA,QAGA5hC,OAEAA,KAAAshC,QAAA1iC,KAAA,UAAAkC,IAAA,QAAA,QAGAd,KAAAyoB,SAAA/kB,OAAA85B,MAAAx9B,KAAAshC,SAGAthC,KAAAq0B,SAAAr0B,KAAAyoB,SAAAhmB,OAAAzC,KAAAkX,QAAAga,QAMAqQ,YAAA,WACA,IAAA9F,EAAAz7B,KAAAkX,QAAA1T,SAsBA,OAnBA9E,EAAA8C,KAAAxB,KAAAN,IAAA,SAAAo2B,EAAA1S,GACAA,EAAAA,EAAA,GACA,IAAAnC,EAAA,IAAAyd,OAAAtb,EAAA,KACAye,EAAAze,EAAAhjB,OAAA,EAAAgjB,EAAAtL,UAAA,EAAA,GAAAsL,EAEAqY,EAAAA,EAAAvuB,QAAA+T,EAAA,IAAA4gB,EAAA,OAIApG,EAAAA,EAAAvuB,QAAA,KAAA,UAGAxO,EAAA8C,KAAAxB,KAAAN,IAAA,SAAAo2B,EAAA1S,GAEA,IAAAye,GADAze,EAAAA,EAAA,IACAhjB,OAAA,EAAAgjB,EAAAtL,UAAA,EAAA,GAAAsL,EAEAqY,EAAAA,EAAAvuB,QAAA,IAAA20B,EAAA,IAAA,kBAAA/L,EAAA,iBAGA2F,GAMA+F,WAAA,WACA,IAAA,IAAA1L,KAAA91B,KAAAN,IAAA,CACA,IAAAoiC,EAAA9hC,KAAAshC,QAAA1iC,KAAA,IAAAk3B,GAEA91B,KAAA,IAAA81B,GAAAgM,EAAA1hC,OAAA0hC,EAAA,KAEA9hC,KAAA4hC,UAAA9L,KAOA8L,UAAA,SAAA9L,GACA,IAAAiM,EAAA/hC,KAAA,IAAA81B,GACA,GAAAiM,EAAA,CAKA,IACAtY,EAAAzpB,KADA,OAAA81B,EAAA/U,OAAA,GAAAmW,cAAApB,EAAAxU,MAAA,MAEA4P,EAAA6Q,EAAAt/B,MAEAs/B,EAAAjgC,QACA,IAAA,IAAA7C,EAAA,EAAAA,EAAAwqB,EAAArpB,OAAAnB,IACA8iC,EAAAhyB,OAAA,kBAAA0Z,EAAAxqB,GAAA,GAAA,KAAAwqB,EAAAxqB,GAAA,GAAA,aAGA8iC,EAAAt/B,IAAAyuB,KAMA8Q,WAAA,SAAA5N,GACA,IACA6N,EADA3G,KAGA,GAAA,SAAAt7B,KAAAkX,QAAAgrB,UAAA,CAGA,IAAAC,EAAA,mBADAF,EAAA9iC,OAAAijC,cAAAjjC,OAAAkjC,WAAAC,eACAlO,GAAA6N,EAAA7N,GAAA,GAAA,EAAAA,GAAA,GAAA6N,EAAA7N,GAEA+N,EAAAA,EAAAnS,MAAA,KAAAuS,UAAA,GACAjH,EAAA/tB,MAAA,GAAA40B,QACA,UAAAniC,KAAAkX,QAAAgrB,WACA5G,EAAA/tB,MAAA,GAAA,KAEA,OAAA+tB,GAOAkH,QAAA,WACA,IAAApzB,EAAAnQ,EAAAwqB,EAAAzpB,KAAAgiC,WAAA,KACAS,GAAA,IAAAziC,KAAAkX,QAAA1T,SAAAzD,QAAA,MACA2iC,EAAA,GAIA,GAAA1iC,KAAAkX,QAAAyqB,WAAA3hC,KAAA2iC,QAAA3iC,KAAA4iC,MAAA,CACA,IAAA5B,EAAAjqB,SAAA/W,KAAA2iC,OAAAlgC,MAAA,IACAw+B,EAAAlqB,SAAA/W,KAAA4iC,MAAAngC,MAAA,IAEAgf,MAAAuf,IAAAvf,MAAAwf,KACAyB,EAAAvjC,QAAA8hC,EAAAD,IAAA6B,eAIA,IAAA5jC,EAAA,EAAAA,GAAAyjC,EAAAzjC,IACAmQ,EAAAqzB,EAAAziC,KAAA8iC,SAAA7jC,GAAAA,EACAwqB,EAAAlc,MAAAtO,EAAAmQ,IAEA,OAAAqa,GAMAsZ,UAAA,WACA,IAAA3zB,EAAAnQ,EAAAwqB,EAAAzpB,KAAAgiC,WAAA,KACAgB,GAAA,IAAAhjC,KAAAkX,QAAA1T,SAAAzD,QAAA,QACAkjC,GAAA,IAAAjjC,KAAAkX,QAAA1T,SAAAzD,QAAA,OACA0iC,GAAA,IAAAziC,KAAAkX,QAAA1T,SAAAzD,QAAA,MAEA,IAAAd,EAAA,EAAAA,GAAA,GAAAA,IAGAmQ,EAFA4zB,EAEA7jC,SAAAgT,KAAA,GAAA6uB,MAAA/hC,GAAAmT,OAAA,QACA6wB,EACA9jC,SAAAgT,KAAA,GAAA6uB,MAAA/hC,GAAAmT,OAAA,OACAqwB,EACAziC,KAAA8iC,SAAA7jC,EAAA,GAEAA,EAAA,EAEAwqB,EAAAlc,MAAAtO,EAAAmQ,IAEA,OAAAqa,GAMAyZ,SAAA,WACA,IAAA9zB,EAAAnQ,EAAAwqB,KACAuZ,GAAA,IAAAhjC,KAAAkX,QAAA1T,SAAAzD,QAAA,QAEA,IAAAd,EAAAe,KAAAkX,QAAAisB,QAAAlkC,GAAAe,KAAAkX,QAAAksB,QAAAnkC,IACAmQ,EAAA4zB,EAAA/jC,GAAAA,EAAA,IAAA6Y,UAAA,GACA2R,EAAAzpB,KAAAkX,QAAAmsB,eAAA,OAAA,YAAApkC,EAAAmQ,IAKA,OAFAqa,EAAAzpB,KAAAgiC,WAAA,KAAA/c,OAAAwE,IAQA6Z,SAAA,WACA,IAAAl0B,EAAAnQ,EAAAwqB,EAAAzpB,KAAAgiC,WAAA,KACAuB,GAAA,IAAAvjC,KAAAkX,QAAA1T,SAAAzD,QAAA,KAEA0iC,GADAziC,KAAAkX,QAAA1T,SAAAzD,QAAA,MACA,IAAAC,KAAAkX,QAAA1T,SAAAuhB,cAAAhlB,QAAA,OAEA8Y,EAAA0qB,EAAA,GAAA,GAEA,IAAAtkC,EAHAskC,EAAA,EAAA,EAGAtkC,GAAA4Z,EAAA5Z,IACAmQ,EAAAqzB,EAAAziC,KAAA8iC,SAAA7jC,GAAAA,EACAwqB,EAAAlc,MAAAtO,EAAAmQ,IAEA,OAAAqa,GAMA+Z,WAAA,WACA,IAAAp0B,EAAAnQ,EAAAwqB,EAAAzpB,KAAAgiC,WAAA,KACAS,GAAA,IAAAziC,KAAAkX,QAAA1T,SAAAzD,QAAA,MAEA,IAAAd,EAAA,EAAAA,GAAA,GAAAA,GAAAe,KAAAkX,QAAAusB,WACAr0B,EAAAqzB,EAAAziC,KAAA8iC,SAAA7jC,GAAAA,EACAwqB,EAAAlc,MAAAtO,EAAAmQ,IAEA,OAAAqa,GAMAia,WAAA,WACA,IAAAt0B,EAAAnQ,EAAAwqB,EAAAzpB,KAAAgiC,WAAA,KACAS,GAAA,IAAAziC,KAAAkX,QAAA1T,SAAAzD,QAAA,MAEA,IAAAd,EAAA,EAAAA,GAAA,GAAAA,GAAAe,KAAAkX,QAAAysB,WACAv0B,EAAAqzB,EAAAziC,KAAA8iC,SAAA7jC,GAAAA,EACAwqB,EAAAlc,MAAAtO,EAAAmQ,IAEA,OAAAqa,GAMAma,SAAA,WACA,IAAAC,GAAA,IAAA7jC,KAAAkX,QAAA1T,SAAAzD,QAAA,KACAC,KAAAkX,QAAA1T,SAAAzD,QAAA,KAKA,QAHA,KAAA8jC,EAAA,KAAA,OACA,KAAAA,EAAA,KAAA,QAUApC,SAAA,SAAArvB,GACA,IAAA0xB,EAAAxI,KACA9E,EAAAx2B,KACA+jC,GAAA,EAkBA,OAfArlC,EAAA8C,KAAAxB,KAAAN,IAAA,SAAAo2B,EAAA1S,GACA,GAAA,SAAA0S,EAAA,CAGA,IAAAkO,EAAA,QAAAlO,EAAA,EAAA,EAIA,OAFAwF,EAAAxF,GAAAU,EAAA,IAAAV,GAAA/e,SAAAyf,EAAA,IAAAV,GAAArzB,MAAA,IAAAuhC,EAEAviB,MAAA6Z,EAAAxF,KACAiO,GAAA,GACA,QAFA,KAOAA,EACA,IAIA/jC,KAAAikC,QAEA,KAAA3I,EAAA4F,KACA5F,EAAA4F,KAAA,OAAAlhC,KAAAikC,MAAAxhC,MAAA,EAAA,GAEA64B,EAAA4F,KAAA,OAAAlhC,KAAAikC,MAAAxhC,MAAA64B,EAAA4F,KAAA5F,EAAA4F,KAAA,IAIA4C,EAAA3kC,QAAAm8B,EAAA2F,KAAA3F,EAAA0F,MAAA1F,EAAAyF,IAAAzF,EAAA4F,KAAA5F,EAAA6F,OAAA7F,EAAA8F,SAGAphC,KAAA+5B,UAAA+J,GAGA,QADA1xB,OAAA9T,IAAA8T,EAAApS,KAAAkX,QAAA9E,OAAAA,GAEA0xB,EAAAI,UAAAJ,EAAA,KAEAA,EAAAI,UAAAJ,EAAA1xB,OAAAA,GAAA,KAIAiiB,SAAA,SAAAnD,GACA,GAAAA,EAAA,CAIA,IAAA4S,EAAA,iBAAA5S,EAAA/xB,OAAA+xB,EAAAlxB,KAAAkX,QAAA9E,QAAAjT,OAAA+xB,GACAsF,EAAAx2B,KACAs7B,KAkBAwI,EAAAI,YAEAxlC,EAAA8C,KAAAxB,KAAAN,IAAA,SAAAo2B,EAAA1S,GACA,SAAA0S,IAGAwF,EAAAxF,GAAAgO,EAAA1gB,EAAA,SAGApjB,KAAAikC,QAEA3I,EAAA4F,MAAA,IACA5F,EAAA+F,KAAA,KACA/F,EAAA4F,KAAA,KACA5F,EAAA4F,MAAA,MAGA5F,EAAA+F,KAAA,KACA,IAAA/F,EAAA4F,OACA5F,EAAA4F,KAAA,MAKAxiC,EAAA8C,KAAA85B,EAAA,SAAAxF,EAAA1S,GAEAoT,EAAA,IAAAV,KAEA,WAAAA,GAAAU,EAAAtf,QAAAusB,WAAA,GAAAjN,EAAAtf,QAAAitB,YACA/gB,EAAAghB,EAAA5N,EAAA,IAAAV,GAAA1S,IAGA,WAAA0S,GAAAU,EAAAtf,QAAAysB,WAAA,GAAAnN,EAAAtf,QAAAitB,YACA/gB,EAAAghB,EAAA5N,EAAA,IAAAV,GAAA1S,IAGAoT,EAAA,IAAAV,GAAArzB,IAAA2gB,MAKApjB,KAAAkX,QAAAyqB,WACA3hC,KAAA4hC,UAAA,OAGA5hC,KAAAyoB,SAAAhmB,IAAAqhC,EAAA1xB,OAAApS,KAAAkX,QAAA9E,SAAAsvB,UA5DA,SAAA0C,EAAAC,EAAAnT,GACA,IAAAoT,KAWA,OAVAD,EAAA99B,SAAA,UAAA/E,KAAA,SAAAvC,EAAAslC,GACA,IACAC,EADAC,EAAA/lC,EAAA6lC,GAAAtkC,KAAA,SAGA,KAAAwkC,IACAD,EAAArgC,KAAAugC,IAAAD,EAAAvT,SACA,IAAAoT,EAAAE,UAAAA,EAAAF,EAAAE,YACAF,GAAApT,MAAAuT,EAAAD,SAAAA,OAGAF,EAAApT,QAuDA6I,UAAA,SAAA+J,GACAA,EAAAI,UAWAlkC,KAAAkX,QAAAytB,WACA3kC,KAAAshC,QAAA3iC,YAAAqB,KAAAkX,QAAAytB,YAEA3kC,KAAAshC,QAAA1iC,KAAA,UAAAkC,IAAA,eAAAd,KAAA4kC,aAbA5kC,KAAAkX,QAAAytB,WACA3kC,KAAAshC,QAAAziC,SAAAmB,KAAAkX,QAAAytB,aAGA3kC,KAAA4kC,cACA5kC,KAAA4kC,YAAA5kC,KAAAshC,QAAA1iC,KAAA,UAAAkC,IAAA,iBAEAd,KAAAshC,QAAA1iC,KAAA,UAAAkC,IAAA,eAAA,SAWAgiC,SAAA,SAAA1f,GACA,OAAAA,GAAA,EAAA,IAAAA,EAAAA,GAGAmF,QAAA,WACAvoB,KAAAshC,QAAAv/B,SACA/B,KAAAyoB,SAAA6D,WAAA,aAAAhmB,SAMA5H,EAAAyhB,GAAA2gB,UAAA,SAAArgB,GACA,IAAAK,EAAAnF,EAAAkB,MAAAf,MAAA,KAAAqF,WAIA,OAHAxF,EAAAkpB,QAGA,aAAApkB,GAAAzgB,KAAAI,SAAA0gB,EAAA9gB,KAAAk7B,GAAA,GAAA55B,KAAA,cACAwf,EAAA2gB,SAAA3lB,MAAAgF,EAAAnF,GAGA3b,KAAAwB,KAAA,WACA,IAAA+yB,EAAA71B,EAAAsB,MACAsB,EAAAizB,EAAAjzB,KAAA,aACA4V,EAAA,iBAAAuJ,GAAAA,EACAnf,GACAizB,EAAAjzB,KAAA,YAAAA,EAAA,IAAAu/B,EAAA7gC,KAAAkX,IAEA,iBAAAuJ,GAAA,mBAAAnf,EAAAmf,IACAnf,EAAAmf,GAAA3E,MAAAxa,EAAAqa,MAKAjd,EAAAyhB,GAAA2gB,UAAApY,UAEAtW,OAAA,mBAEA5O,SAAA,0BAEA0tB,MAAA,KACAkS,QAAA,KACAD,QAAA,KACAE,gBAAA,EACAI,WAAA,EACAE,WAAA,EACAzB,UAAA,QACAyC,WAAA,KACAR,WAAA,EACAxC,WAAA,GA7cA,CAgdAzgC,OAAAgb,QAyCA,SAAAxd,GACA,aAEA,IAAA81B,EAAA,SAAAtd,GACAlX,KAAAo3B,KAAA,YAAAlgB,EAAAsd,EAAA9L,UAGA1oB,KAAAkX,QAAA4tB,aACA9kC,KAAAkX,QAAA4tB,WAAA9kC,KAAAkX,QAAA9E,QAIA8E,EAAA4pB,UAAApiC,EAAAyhB,GAAA4T,cAAAC,aAAA9c,EAAA4pB,WAAA,GAGA9gC,KAAAkX,QAAA4pB,UAAApiC,EAAAyd,UAAAqY,EAAA9L,SAAAoY,UAAA5pB,EAAA4pB,WACA1uB,OAAApS,KAAAkX,QAAA9E,OACA5O,SAAAxD,KAAAkX,QAAA1T,YAIA9E,EAAAyhB,GAAA4T,cAAAW,QAAAF,EAAA91B,EAAAyhB,GAAA0W,cAAAmF,eAEAt9B,EAAAyd,OAAAqY,EAAAzZ,WACA2W,OAAA,WACA1xB,KAAAqyB,OAAAyO,UAAA9gC,KAAAkX,QAAA4pB,WAEA,QAAApiC,EAAAyhB,GAAA0Q,aAAA4D,QACAz0B,KAAAqyB,OAAAoN,WAAA7gC,KAAA,UAAAC,SAAA,gBAGAmB,KAAAkX,QAAA4kB,YACA97B,KAAAqyB,OAAAoN,WAAA7gC,KAAA,UAAAC,SAAAmB,KAAAkX,QAAA4kB,aAgBArB,WAAA,SAAAvJ,EAAA3vB,GACA,IAAAiI,EAAA0nB,EAAAA,EAAA9e,OAAApS,KAAAkX,QAAA4tB,YAAA,GAEAtQ,EAAAM,WAAA2F,WAAAvZ,KAAAlhB,KAAAwJ,EAAAjI,IAGA24B,WAAA,SAAA10B,GACA,OAAAA,EAAArG,OAAAqG,EAAAxF,KAAAkX,QAAA4tB,YAAA,MAGAxR,UAAA,SAAApC,GACA,OAAAA,EAAAA,EAAA9e,OAAApS,KAAAkX,QAAA9E,QAAA,IAGA+e,UAAA,SAAA+E,GACA,OAAAA,EAAA/2B,OAAA+2B,EAAAl2B,KAAAkX,QAAA9E,QAAA,MAGAohB,aAAA,SAAAtC,GACA,OAAAlxB,KAAAszB,UAAApC,IAGAqB,YAAA,SAAArB,GACAlxB,KAAAqyB,OAAAyO,UAAA,WAAA5P,IAGAkC,YAAA,WACA,OAAApzB,KAAAqyB,OAAAyO,UAAA,WAAA,OAGAnO,SAAA,WACA3yB,KAAAqyB,OAAAoN,SAAA,cAAA7gC,KAAA,UAAAs8B,GAAA,GAAAS,SAUAxJ,WAAA,eAMAqC,EAAA9L,SAAAhqB,EAAAyd,UAAAzd,EAAAyhB,GAAA0W,cAAAmF,cAAAtT,UAKA+S,IAAA,sBAKAK,WAAA,KASA1pB,OAAA,aASA0yB,WAAA,KAQAthC,SAAA,iBASAs9B,UAAA,OAcApiC,EAAAyhB,GAAA0W,cAAAiK,UAAAtM,EA1JA,CA4JAtzB,OAAAgb,QAKA,SAAAxd,GACA,aAGA,IAAAqmC,EAAArmC,EAAAyhB,GAAA0Q,aAAA2D,YAAAzZ,UAAAiW,UAEAtyB,EAAAyd,OAAAzd,EAAAyhB,GAAA0Q,aAAA2D,YAAAzZ,WACAsW,aAAA,WACArxB,KAAAgT,MAAAtU,EAAAA,EAAAyhB,GAAA0Q,aAAArtB,UACAxD,KAAAgT,MAAApU,KAAA,kBAAAC,SAAA,cACAmB,KAAAgT,MAAApU,KAAA,yBAAAC,SAAA,eAEAmyB,UAAA,WACA+T,EAAAjpB,MAAA9b,MAGA,IAAAglC,EAAA,OAAAhlC,KAAAixB,MAAA/Z,QAAA4kB,aAAA,IAAA97B,KAAAixB,MAAA/Z,QAAA4kB,WAIAmJ,EAAA,4EAAAjV,MAAA,MACAtxB,EAAAg/B,QAAA19B,KAAAixB,MAAAnsB,KAAAmgC,KACAjlC,KAAAixB,MAAAoB,OAAAxzB,SAAA,gBACAmmC,IACAhlC,KAAAixB,MAAA/Z,QAAA4kB,WAPA,WAQA97B,KAAAixB,MAAAoB,OAAAxzB,SARA,cAeA,IAFA,IAAA0yB,EAAAvxB,KAAAgT,MAAApU,KAAA,qBACAsmC,EAAAF,GAdA,YAcAhlC,KAAAixB,MAAA/Z,QAAA4kB,WAAA9L,MAAA,KACA/wB,EAAA,EAAAA,EAAAimC,EAAA9kC,OAAAnB,IAOA,aAAAimC,EAAAjmC,GAAA8lB,eACAwM,EAAA3yB,KAAA,UAAAD,YAAA,UAAAE,SAAA,aAOAH,EAAAyhB,GAAA0Q,aAAAW,QACA,+OAQA9yB,EAAAyhB,GAAA0Q,aAAAmC,gBAAA,YACAt0B,EAAAyhB,GAAA0Q,aAAAoC,gBAAA,KAEAv0B,EAAAyhB,GAAA0Q,aAAA4D,OAAA,MA3DA,CA4DAvzB,OAAAgb,QAMA,SAAAxd,GACA,aAGAA,EAAAyd,OAAAzd,EAAAyhB,GAAAuX,kBAAAP,MAAApc,WACAuc,cAAA,UACAC,kBAAA,aACAC,SAAA,mBACA9O,SAAAhqB,EAAAyhB,GAAA7c,QAAAkxB,YAAA2Q,SAEAtN,cAAA,WASA,IAAAvX,EARA5hB,EAAAyd,OAAAnc,KAAAm4B,kBACA50B,QAAA,SACAs2B,UAAA,EACAuL,QAAA,IACA5hC,SAAAxD,KAAA0oB,SAAAllB,WAKAxD,KAAAyoB,SAAAnnB,KAAA,cACAgf,EAAAtgB,KAAAyoB,SAAAnnB,KAAA,YACAtB,KAAAyoB,SAAA6D,WAAA,aAGAtsB,KAAAkhB,KAAAlhB,KAAAm4B,kBAEA7X,GAEAtgB,KAAAyoB,SAAAnnB,KAAA,WAAAgf,IAKAsY,UAAA,WACA54B,KAAAkhB,KAAA,SAIA2X,UAAA,WACA74B,KAAAkhB,KAAA,SAIA6X,aAAA,WACA/4B,KAAAkhB,KAAA,YAGA4X,mBAAA,SAAA1E,EAAAlD,GACAlxB,KAAAgS,YAAAkF,QAAAkd,GAAAlD,GAOAzK,YAAA,YAEA,WAkHA,IAAA4R,EAAAr4B,KAAAo4B,MAEAgB,EAAA,mBAAAp5B,KAAAkX,QAAAkiB,UACAp5B,KAAAkX,QAAAkiB,UAAAlY,KAAAlhB,KAAAq4B,EAAA,GAAAr4B,KAAAyoB,SAAA,IACAzoB,KAAAkX,QAAAkiB,UAEAiM,EAAA,eACAC,EAAAD,EAAAE,KAAAnM,GACAkM,IACAlM,EAAAA,EAAAlsB,QAAAm4B,EAAA,KAAA,OAIA,IAAArQ,EAAAh1B,KAAAmmB,cACAqf,EAAAnN,EAAA,GAAAhW,YACAojB,EAAApN,EAAA,GAAA/V,aAEA,GAAAgjB,EAAA,CACA,IAAAI,EAAA1lC,KAAAyoB,SAAAhf,SAEAk8B,EAAAvM,EACAwM,EAAAjjC,SAAAof,gBAAA/T,WAAArL,SAAAmf,KAAA9T,UACA63B,EAAA,QAAA7lC,KAAAkX,QAAAlF,UAAA9Q,OAAAsQ,WAAAk0B,EAAA9kC,aACAklC,EAAA,QAAA9lC,KAAAkX,QAAAlF,UAAA9Q,OAAAkhB,YAAAsjB,EAAAl1B,cACAu1B,EAAA,QAAA/lC,KAAAkX,QAAAlF,UAAA,EAAA0zB,EAAAz3B,SAAAzN,KAEA44B,EAAA,UAAAA,GAAApE,EAAA9mB,IAAA8mB,EAAA7zB,OAAAskC,EAAAG,EAAAE,EAAA,MACA,OAAA1M,GAAApE,EAAA9mB,IAAA03B,EAAAH,EAAA,EAAA,SACA,SAAArM,GAAApE,EAAAxM,MAAAgd,EAAAK,EAAA,OACA,QAAAzM,GAAApE,EAAAx0B,KAAAglC,EAAAO,EAAA,QACA3M,EAEAf,EACA15B,YAAAgnC,GACA9mC,SAAAu6B,GAIA,IAAA4M,EAAAhmC,KAAAimC,oBAAA7M,EAAApE,EAAAwQ,EAAAC,GAEAzlC,KAAAkmC,eAAAF,EAAA5M,KAGAlY,KAAAlhB,KAAAgS,gBAvNA,CA4NA9Q,OAAAgb,QAsBA,SAAAxd,GAEA,SAAAynC,IACA,OAAA,IAAAr9B,KAAAA,KAAAs9B,IAAAtqB,MAAAhT,KAAAqY,YASA,IAAAklB,EAAA,SAAA9kC,EAAA2V,GAGAlX,KAAAsmC,iBAAApvB,GAEAlX,KAAAuB,QAAA7C,EAAA6C,GACAvB,KAAAumC,UAAA,EACAvmC,KAAAwmC,QAAAxmC,KAAAuB,QAAAqC,GAAA,SACA5D,KAAAymC,YAAAzmC,KAAAuB,QAAAqC,GAAA,UAAA5D,KAAAuB,QAAA3C,KAAA,iBACAoB,KAAA0mC,SAAA1mC,KAAAymC,WAAAzmC,KAAAuB,QAAA3C,KAAA,SAAAwB,OACAJ,KAAAymC,WAAA,IAAAzmC,KAAAymC,UAAArmC,SACAJ,KAAAymC,WAAA,GAEAzmC,KAAA2mC,OAAAjoC,EAAAkoC,EAAApjC,UACAxD,KAAA6mC,eACA7mC,KAAA8mC,gBAEA9mC,KAAAumC,SACAvmC,KAAA2mC,OAAA9nC,SAAA,qBAAAgD,SAAA7B,KAAAuB,SAEAvB,KAAA2mC,OAAA9nC,SAAA,qCAGAmB,KAAA2gB,EAAAomB,MACA/mC,KAAA2mC,OAAA9nC,SAAA,kBACAmB,KAAA2mC,OAAA/nC,KAAA,oBACAiC,YAAA,qCAIAb,KAAAgnC,SAAAhnC,KAAA2gB,EAAAsmB,UAEAjnC,KAAA2gB,EAAAumB,eACAlnC,KAAA2mC,OAAA/nC,KAAA,kBACAqB,KAAA,UAAA,SAAAhB,EAAAwD,GACA,OAAAsU,SAAAtU,GAAA,IAGAzC,KAAAmnC,eAAA,EAEAnnC,KAAAonC,aAAApnC,KAAA2gB,EAAA0mB,WACArnC,KAAAsnC,WAAAtnC,KAAA2gB,EAAA4mB,SACAvnC,KAAAwnC,sBAAAxnC,KAAA2gB,EAAA8mB,oBAEAznC,KAAA0nC,UACA1nC,KAAA2nC,aAEA3nC,KAAAmnC,eAAA,EAEAnnC,KAAAsY,SACAtY,KAAA4nC,WAEA5nC,KAAAumC,UACAvmC,KAAAsG,QAIA+/B,EAAAtrB,WACA8K,YAAAwgB,EAEAC,iBAAA,SAAAuB,GAEA7nC,KAAA8nC,GAAAppC,EAAAyd,UAAAnc,KAAA8nC,GAAAD,GAEA,IAAAlnB,EAAA3gB,KAAA2gB,EAAAjiB,EAAAyd,UAAAnc,KAAA8nC,IAIAC,EAAApnB,EAAAqnB,SAQA,OAPAC,EAAAF,KACAA,EAAAA,EAAA/X,MAAA,KAAA,GACAiY,EAAAF,KACAA,EAAArf,EAAAsf,WAEArnB,EAAAqnB,SAAAD,EAEApnB,EAAAsmB,WACA,KAAA,EACA,IAAA,SACAtmB,EAAAsmB,UAAA,EACA,MACA,KAAA,EACA,IAAA,OACAtmB,EAAAsmB,UAAA,EACA,MACA,QACAtmB,EAAAsmB,UAAA,EAGA,OAAAtmB,EAAAunB,aACA,KAAA,EACA,IAAA,SACAvnB,EAAAunB,YAAA,EACA,MACA,KAAA,EACA,IAAA,QACAvnB,EAAAunB,YAAA,EACA,MACA,QACAvnB,EAAAunB,YAAA,EAGAvnB,EAAAsmB,UAAA9iC,KAAA0U,IAAA8H,EAAAsmB,UAAAtmB,EAAAunB,aAEAvnB,EAAAwnB,WAAA,EACAxnB,EAAAynB,SAAAznB,EAAAwnB,UAAA,GAAA,EAEA,IAAA/1B,EAAAw0B,EAAAyB,YAAA1nB,EAAAvO,QACAuO,EAAA0mB,aAAAiB,EAAAA,IACA3nB,EAAA0mB,UAAAT,EAAA2B,UAAA5nB,EAAA0mB,UAAAj1B,EAAAuO,EAAAqnB,WAEArnB,EAAA4mB,UAAAe,EAAAA,IACA3nB,EAAA4mB,QAAAX,EAAA2B,UAAA5nB,EAAA4mB,QAAAn1B,EAAAuO,EAAAqnB,WAGArnB,EAAA8mB,mBAAA9mB,EAAA8mB,uBACA/oC,EAAAoe,QAAA6D,EAAA8mB,sBACA9mB,EAAA8mB,mBAAA9mB,EAAA8mB,mBAAAzX,MAAA,WACArP,EAAA8mB,mBAAA/oC,EAAAgB,IAAAihB,EAAA8mB,mBAAA,SAAA3mB,GACA,OAAA/J,SAAA+J,EAAA,OAGA3F,WACAqtB,oBACAC,aAAA,SAAAC,GACA,IAAA,IAAA1P,EAAA2P,EAAA1pC,EAAA,EAAAA,EAAAypC,EAAAtoC,OAAAnB,IACA+5B,EAAA0P,EAAAzpC,GAAA,GACA0pC,EAAAD,EAAAzpC,GAAA,GACA+5B,EAAAp2B,GAAA+lC,IAGAC,eAAA,SAAAF,GACA,IAAA,IAAA1P,EAAA2P,EAAA1pC,EAAA,EAAAA,EAAAypC,EAAAtoC,OAAAnB,IACA+5B,EAAA0P,EAAAzpC,GAAA,GACA0pC,EAAAD,EAAAzpC,GAAA,GACA+5B,EAAAtvB,IAAAi/B,IAGA9B,aAAA,WACA7mC,KAAAwmC,QACAxmC,KAAAmb,UACAnb,KAAAuB,SACAo6B,MAAAj9B,EAAAwzB,MAAAlyB,KAAAsG,KAAAtG,MACAy9B,MAAA/+B,EAAAwzB,MAAAlyB,KAAAsY,OAAAtY,MACA+9B,QAAAr/B,EAAAwzB,MAAAlyB,KAAA+9B,QAAA/9B,SAIAA,KAAAymC,WAAAzmC,KAAA0mC,SACA1mC,KAAAmb,UAEAnb,KAAAuB,QAAA3C,KAAA,UACA+8B,MAAAj9B,EAAAwzB,MAAAlyB,KAAAsG,KAAAtG,MACAy9B,MAAA/+B,EAAAwzB,MAAAlyB,KAAAsY,OAAAtY,MACA+9B,QAAAr/B,EAAAwzB,MAAAlyB,KAAA+9B,QAAA/9B,SAEAA,KAAAymC,WACAn2B,MAAA5R,EAAAwzB,MAAAlyB,KAAAsG,KAAAtG,SAIAA,KAAAuB,QAAAqC,GAAA,OACA5D,KAAAumC,UAAA,EAGAvmC,KAAAmb,UACAnb,KAAAuB,SACA+O,MAAA5R,EAAAwzB,MAAAlyB,KAAAsG,KAAAtG,SAKAA,KAAAwoC,mBACAxoC,KAAA2mC,QACAr2B,MAAA5R,EAAAwzB,MAAAlyB,KAAAsQ,MAAAtQ,SAEAtB,EAAAwC,SACAmD,OAAA3F,EAAAwzB,MAAAlyB,KAAA6oC,MAAA7oC,SAEAtB,EAAAiE,WACAmmC,UAAApqC,EAAAwzB,MAAA,SAAA9vB,GAGApC,KAAAuB,QAAAqC,GAAAxB,EAAAI,SACAxC,KAAAuB,QAAA3C,KAAAwD,EAAAI,QAAA0jB,QACAlmB,KAAA2mC,OAAA/iC,GAAAxB,EAAAI,SACAxC,KAAA2mC,OAAA/nC,KAAAwD,EAAAI,QAAA0jB,QAEAlmB,KAAA0D,QAEA1D,UAIA8mC,cAAA,WACA9mC,KAAA+oC,gBACA/oC,KAAAyoC,aAAAzoC,KAAAmb,UAEA4tB,cAAA,WACA/oC,KAAA4oC,eAAA5oC,KAAAmb,UAEA6tB,uBAAA,WACAhpC,KAAAipC,yBACAjpC,KAAAyoC,aAAAzoC,KAAAwoC,mBAEAS,uBAAA,WACAjpC,KAAA4oC,eAAA5oC,KAAAwoC,mBAEAU,SAAA,SAAAxgC,EAAAygC,GACA,IAAAh3B,EAAAg3B,GAAAnpC,KAAAmS,KACAi3B,EAAA,IAAAtgC,KAAAqJ,EAAAk3B,UAAA,IAAAl3B,EAAAm3B,qBAEAtpC,KAAAuB,QAAAgC,SACAuB,KAAA4D,EACAyJ,KAAAi3B,EACAh3B,OAAA1T,EAAAwzB,MAAA,SAAAqX,GACA,IAAAn3B,EAAAm3B,GAAAvpC,KAAA2gB,EAAAvO,OACA,OAAAw0B,EAAA4C,WAAAr3B,EAAAC,EAAApS,KAAA2gB,EAAAqnB,WACAhoC,SAIAsG,KAAA,SAAAlE,GACApC,KAAAumC,UACAvmC,KAAA2mC,OAAA9kC,SAAA,QACA7B,KAAA2mC,OAAArgC,OACAtG,KAAAmB,OAAAnB,KAAAymC,UAAAzmC,KAAAymC,UAAAj2B,cAAAxQ,KAAAuB,QAAAiP,cACAxQ,KAAA6oC,QACA7oC,KAAAgpC,yBACA5mC,GACAA,EAAA8V,iBAEAlY,KAAAkpC,SAAA,SAGAxlC,KAAA,SAAAtB,GACApC,KAAAumC,UACAvmC,KAAA2mC,OAAA/iC,GAAA,cACA5D,KAAA2mC,OAAAjjC,OAAA+lC,SACAzpC,KAAAipC,yBACAjpC,KAAAgnC,SAAAhnC,KAAA2gB,EAAAsmB,UACAjnC,KAAA4nC,WAGA5nC,KAAA2gB,EAAA+oB,aAEA1pC,KAAAwmC,SAAAxmC,KAAAuB,QAAAkB,OACAzC,KAAA0mC,UAAA1mC,KAAAuB,QAAA3C,KAAA,SAAA6D,QAGAzC,KAAAq0B,WACAr0B,KAAAkpC,SAAA,UAGAnnC,OAAA,WACA/B,KAAA0D,OACA1D,KAAA+oC,gBACA/oC,KAAAipC,yBACAjpC,KAAA2mC,OAAA5kC,gBACA/B,KAAAuB,QAAAD,OAAAqoC,WACA3pC,KAAAwmC,gBACAxmC,KAAAuB,QAAAD,OAAA6Q,MAIAy3B,QAAA,WACA,IAAA9oB,EAAA9gB,KAAA6pC,aACA,OAAA,IAAA/gC,KAAAgY,EAAAuoB,UAAA,IAAAvoB,EAAAwoB,sBAGAO,WAAA,WACA,OAAA7pC,KAAAmS,MAGA23B,QAAA,SAAAhpB,GACA9gB,KAAA+pC,WAAA,IAAAjhC,KAAAgY,EAAAuoB,UAAA,IAAAvoB,EAAAwoB,uBAGAS,WAAA,SAAAjpB,GACA9gB,KAAAmS,KAAA2O,EACA9gB,KAAAq0B,YAGAA,SAAA,WACA,IAAA2V,EAAAhqC,KAAAiqC,mBACAjqC,KAAAwmC,QAKAxmC,KAAAuB,QAAAkB,IAAAunC,GAJAhqC,KAAAymC,WACAzmC,KAAAuB,QAAA3C,KAAA,SAAA6D,IAAAunC,IAOAC,iBAAA,SAAA73B,GAGA,YAFA9T,IAAA8T,IACAA,EAAApS,KAAA2gB,EAAAvO,QACAw0B,EAAA4C,WAAAxpC,KAAAmS,KAAAC,EAAApS,KAAA2gB,EAAAqnB,WAGAZ,aAAA,SAAAC,GACArnC,KAAAsmC,kBAAAe,UAAAA,IACArnC,KAAAsY,SACAtY,KAAAkqC,mBAGA5C,WAAA,SAAAC,GACAvnC,KAAAsmC,kBAAAiB,QAAAA,IACAvnC,KAAAsY,SACAtY,KAAAkqC,mBAGA1C,sBAAA,SAAAC,GACAznC,KAAAsmC,kBAAAmB,mBAAAA,IACAznC,KAAAsY,SACAtY,KAAAkqC,mBAGArB,MAAA,WACA,IAAA7oC,KAAAumC,SAAA,CACA,IAAA4D,EAAApzB,SAAA/W,KAAAuB,QAAA02B,UAAAn4B,OAAA,WACA,MAAA,QAAApB,EAAAsB,MAAAc,IAAA,aACAkC,QAAAlC,IAAA,YAAA,GACAmN,EAAAjO,KAAAymC,UAAAzmC,KAAAymC,UAAAh9B,SAAAwE,SAAAjO,KAAAuB,QAAA0M,SACA9M,EAAAnB,KAAAymC,UAAAzmC,KAAAymC,UAAAj2B,aAAA,GAAAxQ,KAAAuB,QAAAiP,aAAA,GACAxQ,KAAA2mC,OAAA7lC,KACAoN,IAAAD,EAAAC,IAAA/M,EACAX,KAAAyN,EAAAzN,KACA2pC,OAAAA,MAIAhD,eAAA,EACA7uB,OAAA,WACA,GAAAtY,KAAAmnC,cAAA,CAEA,IAAAh1B,EAAAi4B,GAAA,EACAjpB,WAAAA,UAAA/gB,SAAA,iBAAA+gB,UAAA,IAAAA,UAAA,aAAArY,OACAqJ,EAAAgP,UAAA,GACAipB,GAAA,IAEAj4B,EAAAnS,KAAAwmC,QAAAxmC,KAAAuB,QAAAkB,MAAAzC,KAAAuB,QAAAD,KAAA,SAAAtB,KAAAuB,QAAA3C,KAAA,SAAA6D,aACAzC,KAAAuB,QAAAD,OAAA6Q,MAGAnS,KAAAmS,KAAAy0B,EAAA2B,UAAAp2B,EAAAnS,KAAA2gB,EAAAvO,OAAApS,KAAA2gB,EAAAqnB,UAEAoC,GAAApqC,KAAAq0B,WAEAr0B,KAAAmS,KAAAnS,KAAA2gB,EAAA0mB,UACArnC,KAAAqqC,SAAA,IAAAvhC,KAAA9I,KAAA2gB,EAAA0mB,WACArnC,KAAAmS,KAAAnS,KAAA2gB,EAAA4mB,QACAvnC,KAAAqqC,SAAA,IAAAvhC,KAAA9I,KAAA2gB,EAAA4mB,SAEAvnC,KAAAqqC,SAAA,IAAAvhC,KAAA9I,KAAAmS,MAEAnS,KAAAsqC,SAGA5C,QAAA,WACA,IAAA6C,EAAAvqC,KAAA2gB,EAAAwnB,UACA3iC,EAAA,OACA,GAAAxF,KAAA2gB,EAAAumB,cAAA,CACA,IAAAsD,EAAA,6BACAhlC,GAAAglC,EACAxqC,KAAA2mC,OAAA/nC,KAAA,yCAAAm+B,QAAAyN,GAEA,KAAAD,EAAAvqC,KAAA2gB,EAAAwnB,UAAA,GACA3iC,GAAA,mBAAAyiC,EAAAjoC,KAAA2gB,EAAAqnB,UAAAyC,QAAAF,IAAA,GAAA,QAEA/kC,GAAA,QACAxF,KAAA2mC,OAAA/nC,KAAA,0BAAAmR,OAAAvK,IAGAmiC,WAAA,WAGA,IAFA,IAAAniC,EAAA,GACAvG,EAAA,EACAA,EAAA,IACAuG,GAAA,uBAAAyiC,EAAAjoC,KAAA2gB,EAAAqnB,UAAA0C,YAAAzrC,KAAA,UAEAe,KAAA2mC,OAAA/nC,KAAA,yBAAA4G,KAAAA,IAGAmlC,SAAA,SAAAxV,GACAA,GAAAA,EAAA/0B,OAGAJ,KAAAm1B,MAAAz2B,EAAAgB,IAAAy1B,EAAA,SAAArU,GAAA,OAAAA,EAAA8pB,mBAFA5qC,KAAAm1B,MAGAn1B,KAAAsqC,QAGAO,cAAA,SAAA14B,GACA,IAAA24B,KACA7J,EAAAjhC,KAAAqqC,SAAAU,iBACA/J,EAAAhhC,KAAAqqC,SAAAW,cACAC,EAAAjrC,KAAAmS,KAAAy4B,UACAM,EAAA,IAAApiC,KA4BA,OA3BAqJ,EAAA44B,iBAAA9J,GAAA9uB,EAAA44B,kBAAA9J,GAAA9uB,EAAA64B,cAAAhK,EACA8J,EAAAv9B,KAAA,QACA4E,EAAA44B,iBAAA9J,GAAA9uB,EAAA44B,kBAAA9J,GAAA9uB,EAAA64B,cAAAhK,IACA8J,EAAAv9B,KAAA,OAGAvN,KAAA2gB,EAAAwqB,gBACAh5B,EAAA44B,kBAAAG,EAAAE,eACAj5B,EAAA64B,eAAAE,EAAAG,YACAl5B,EAAA03B,cAAAqB,EAAAtB,WACAkB,EAAAv9B,KAAA,SAEA09B,GAAA94B,EAAAy4B,WAAAK,GACAH,EAAAv9B,KAAA,WAEA4E,EAAAy4B,UAAA5qC,KAAA2gB,EAAA0mB,WAAAl1B,EAAAy4B,UAAA5qC,KAAA2gB,EAAA4mB,UACA,IAAA7oC,EAAAg/B,QAAAvrB,EAAAm5B,YAAAtrC,KAAA2gB,EAAA8mB,sBACAqD,EAAAv9B,KAAA,YAEAvN,KAAAm1B,QACAhjB,EAAAnS,KAAAm1B,MAAA,IAAAhjB,EAAAnS,KAAAm1B,MAAAn1B,KAAAm1B,MAAA/0B,OAAA,IACA0qC,EAAAv9B,KAAA,UAEA,GAAA7O,EAAAg/B,QAAAvrB,EAAAy4B,UAAA5qC,KAAAm1B,QACA2V,EAAAv9B,KAAA,aAGAu9B,GAGAR,KAAA,WACA,IAQAiB,EARAzqB,EAAA,IAAAhY,KAAA9I,KAAAqqC,UACApJ,EAAAngB,EAAAiqB,iBACA/J,EAAAlgB,EAAAkqB,cACAQ,EAAAxrC,KAAA2gB,EAAA0mB,aAAAiB,EAAAA,EAAAtoC,KAAA2gB,EAAA0mB,UAAA0D,kBAAAzC,EAAAA,EACAmD,EAAAzrC,KAAA2gB,EAAA0mB,aAAAiB,EAAAA,EAAAtoC,KAAA2gB,EAAA0mB,UAAA2D,eAAA1C,EAAAA,EACAoD,EAAA1rC,KAAA2gB,EAAA4mB,UAAAe,EAAAA,EAAAtoC,KAAA2gB,EAAA4mB,QAAAwD,iBAAAzC,EAAAA,EACAqD,EAAA3rC,KAAA2gB,EAAA4mB,UAAAe,EAAAA,EAAAtoC,KAAA2gB,EAAA4mB,QAAAyD,cAAA1C,EAAAA,EACAtoC,KAAAmS,MAAAnS,KAAAmS,KAAAy4B,UAEA5qC,KAAA2mC,OAAA/nC,KAAA,+CACA4K,KAAAy+B,EAAAjoC,KAAA2gB,EAAAqnB,UAAA4D,OAAA5K,GAAA,IAAAC,GACAjhC,KAAA2mC,OAAA/nC,KAAA,kBACA4K,KAAAy+B,EAAAjoC,KAAA2gB,EAAAqnB,UAAAkD,OACAzpC,QAAA,IAAAzB,KAAA2gB,EAAAkrB,UACA7rC,KAAA2mC,OAAA/nC,KAAA,kBACA4K,KAAAy+B,EAAAjoC,KAAA2gB,EAAAqnB,UAAApM,OACAn6B,QAAA,IAAAzB,KAAA2gB,EAAAmrB,UACA9rC,KAAAkqC,kBACAlqC,KAAA2nC,aACA,IAAAoE,EAAA5F,EAAAlF,EAAAD,EAAA,EAAA,GAAA,EAAA,EAAA,EAAA,GACAD,EAAA6F,EAAAoF,eAAAD,EAAAhB,iBAAAgB,EAAAf,eACAe,EAAAhC,WAAAhJ,GACAgL,EAAAhC,WAAAhJ,GAAAgL,EAAAT,YAAAtrC,KAAA2gB,EAAAwnB,UAAA,GAAA,GACA,IAAA8D,EAAA,IAAAnjC,KAAAijC,GACAE,EAAAlC,WAAAkC,EAAApC,aAAA,IACAoC,EAAAA,EAAArB,UAGA,IAFA,IACAsB,EADA1mC,KAEAumC,EAAAnB,UAAAqB,GAAA,CACA,GAAAF,EAAAT,aAAAtrC,KAAA2gB,EAAAwnB,YACA3iC,EAAA+H,KAAA,QACAvN,KAAA2gB,EAAAumB,eAAA,CAGA,IAEAiF,EAAA,IAAArjC,MAAAijC,GAAA/rC,KAAA2gB,EAAAwnB,UAAA4D,EAAAT,YAAA,GAAA,EAAA,OAEAc,EAAA,IAAAtjC,MAAAqjC,GAAA,GAAAA,EAAAb,aAAA,EAAA,OAEAe,EAAA,IAAAvjC,OAAAujC,EAAAlG,EAAAiG,EAAArB,iBAAA,EAAA,KAAA,GAAAsB,EAAAf,aAAA,EAAA,OAEAgB,GAAAF,EAAAC,GAAA,MAAA,EAAA,EACA7mC,EAAA+H,KAAA,kBAAA++B,EAAA,UAIAJ,EAAAlsC,KAAA6qC,cAAAkB,IACAx+B,KAAA,OAEA,IAAAg/B,EAAAvsC,KAAA2gB,EAAA6rB,cAAAT,QACAztC,IAAAiuC,EACAA,KACA,kBAAA,EACAA,GAAAE,QAAAF,GACA,iBAAA,IACAA,GAAArH,QAAAqH,KACA,IAAAA,EAAAE,SACAP,EAAA3+B,KAAA,YACAg/B,EAAArH,UACAgH,EAAAA,EAAAjnB,OAAAsnB,EAAArH,QAAAlV,MAAA,SACAuc,EAAAhB,UACAA,EAAAgB,EAAAhB,SAEAW,EAAAxtC,EAAAguC,OAAAR,GACA1mC,EAAA+H,KAAA,cAAA2+B,EAAAzkC,KAAA,KAAA,KAAA8jC,EAAA,WAAAA,EAAA,IAAA,IAAA,IAAAQ,EAAAlC,aAAA,SACAkC,EAAAT,aAAAtrC,KAAA2gB,EAAAynB,SACA5iC,EAAA+H,KAAA,SAEAw+B,EAAAhC,WAAAgC,EAAAlC,aAAA,GAEA7pC,KAAA2mC,OAAA/nC,KAAA,0BAAAkD,QAAAiO,OAAAvK,EAAAiC,KAAA,KACA,IAAAklC,EAAA3sC,KAAAmS,MAAAnS,KAAAmS,KAAA44B,iBAEAa,EAAA5rC,KAAA2mC,OAAA/nC,KAAA,sBACAA,KAAA,YACA4K,KAAAy3B,GACAj4B,MACApK,KAAA,QAAAD,YAAA,UACAguC,GAAAA,GAAA1L,GACA2K,EAAA1Q,GAAAl7B,KAAAmS,KAAA64B,eAAAnsC,SAAA,WAEAoiC,EAAAuK,GAAAvK,EAAAyK,IACAE,EAAA/sC,SAAA,YAEAoiC,GAAAuK,GACAI,EAAAtqB,MAAA,EAAAmqB,GAAA5sC,SAAA,YAEAoiC,GAAAyK,GACAE,EAAAtqB,MAAAqqB,EAAA,GAAA9sC,SAAA,YAGA2G,EAAA,GACAy7B,EAAA,GAAAlqB,SAAAkqB,EAAA,GAAA,IACA,IAAA2L,EAAA5sC,KAAA2mC,OAAA/nC,KAAA,qBACAA,KAAA,YACA4K,KAAAy3B,EAAA,KAAAA,EAAA,IACAj4B,MACApK,KAAA,MACAqiC,GAAA,EACA,IAAA,IAAAhiC,GAAA,EAAAA,EAAA,GAAAA,IACAuG,GAAA,sBAAA,GAAAvG,EAAA,OAAA,IAAAA,EAAA,OAAA,KAAA0tC,GAAA1L,EAAA,UAAA,KAAAA,EAAAuK,GAAAvK,EAAAyK,EAAA,YAAA,IAAA,KAAAzK,EAAA,UACAA,GAAA,EAEA2L,EAAApnC,KAAAA,IAGA0kC,gBAAA,WACA,GAAAlqC,KAAAmnC,cAAA,CAEA,IAAArmB,EAAA,IAAAhY,KAAA9I,KAAAqqC,UACApJ,EAAAngB,EAAAiqB,iBACA/J,EAAAlgB,EAAAkqB,cACA,OAAAhrC,KAAAgnC,UACA,KAAA,EACAhnC,KAAA2gB,EAAA0mB,aAAAiB,EAAAA,GAAArH,GAAAjhC,KAAA2gB,EAAA0mB,UAAA0D,kBAAA/J,GAAAhhC,KAAA2gB,EAAA0mB,UAAA2D,cACAhrC,KAAA2mC,OAAA/nC,KAAA,SAAAkC,KAAA+rC,WAAA,WAEA7sC,KAAA2mC,OAAA/nC,KAAA,SAAAkC,KAAA+rC,WAAA,YAEA7sC,KAAA2gB,EAAA4mB,UAAAe,EAAAA,GAAArH,GAAAjhC,KAAA2gB,EAAA4mB,QAAAwD,kBAAA/J,GAAAhhC,KAAA2gB,EAAA4mB,QAAAyD,cACAhrC,KAAA2mC,OAAA/nC,KAAA,SAAAkC,KAAA+rC,WAAA,WAEA7sC,KAAA2mC,OAAA/nC,KAAA,SAAAkC,KAAA+rC,WAAA,YAEA,MACA,KAAA,EACA,KAAA,EACA7sC,KAAA2gB,EAAA0mB,aAAAiB,EAAAA,GAAArH,GAAAjhC,KAAA2gB,EAAA0mB,UAAA0D,iBACA/qC,KAAA2mC,OAAA/nC,KAAA,SAAAkC,KAAA+rC,WAAA,WAEA7sC,KAAA2mC,OAAA/nC,KAAA,SAAAkC,KAAA+rC,WAAA,YAEA7sC,KAAA2gB,EAAA4mB,UAAAe,EAAAA,GAAArH,GAAAjhC,KAAA2gB,EAAA4mB,QAAAwD,iBACA/qC,KAAA2mC,OAAA/nC,KAAA,SAAAkC,KAAA+rC,WAAA,WAEA7sC,KAAA2mC,OAAA/nC,KAAA,SAAAkC,KAAA+rC,WAAA,eAMAv8B,MAAA,SAAAlO,GACAA,EAAA8V,iBACA,IAAA1V,EAAA9D,EAAA0D,EAAAI,QAAAiB,QAAA,gBACA,GAAA,GAAAjB,EAAApC,OACA,OAAAoC,EAAA,GAAAgb,SAAAuH,eACA,IAAA,KACA,OAAAviB,EAAA,GAAA0iB,WACA,IAAA,oBACAllB,KAAA4nC,SAAA,GACA,MACA,IAAA,OACA,IAAA,OACA,IAAAkF,EAAAlG,EAAAtZ,MAAAttB,KAAAgnC,UAAA+F,SAAA,QAAAvqC,EAAA,GAAA0iB,WAAA,EAAA,GACA,OAAAllB,KAAAgnC,UACA,KAAA,EACAhnC,KAAAqqC,SAAArqC,KAAAgtC,UAAAhtC,KAAAqqC,SAAAyC,GACA,MACA,KAAA,EACA,KAAA,EACA9sC,KAAAqqC,SAAArqC,KAAAitC,SAAAjtC,KAAAqqC,SAAAyC,GAGA9sC,KAAAsqC,OACA,MACA,IAAA,QACA,IAAAn4B,EAAA,IAAArJ,KACAqJ,EAAAg0B,EAAAh0B,EAAAi5B,cAAAj5B,EAAAk5B,WAAAl5B,EAAAy3B,UAAA,EAAA,EAAA,GAEA5pC,KAAA4nC,UAAA,GACA,IAAAvuB,EAAA,UAAArZ,KAAA2gB,EAAAkrB,SAAA,KAAA,OACA7rC,KAAAktC,SAAA/6B,EAAAkH,GACA,MACA,IAAA,QACA,IAAA9X,EACAvB,KAAAwmC,QACAjlC,EAAAvB,KAAAuB,QACAvB,KAAAymC,YACAllC,EAAAvB,KAAAuB,QAAA3C,KAAA,UACA2C,GACAA,EAAAkB,IAAA,IAAAi/B,SACA1hC,KAAAkpC,SAAA,cACAlpC,KAAAsY,SACAtY,KAAA2gB,EAAAwsB,WACAntC,KAAA0D,OAGA,MACA,IAAA,OACA,IAAAlB,EAAAoB,GAAA,aAAA,CAEA,GADA5D,KAAAqqC,SAAAN,WAAA,GACAvnC,EAAAoB,GAAA,UAAA,CACA,IAAAm9B,EAAA,EACAC,EAAAx+B,EAAAiH,SAAA7K,KAAA,QAAA4c,MAAAhZ,GACAy+B,EAAAjhC,KAAAqqC,SAAAU,iBACA/qC,KAAAqqC,SAAA+C,YAAApM,GACAhhC,KAAAkpC,SAAA,cAAAlpC,KAAAqqC,UACA,IAAArqC,KAAA2gB,EAAAunB,aACAloC,KAAAktC,SAAA/G,EAAAlF,EAAAD,EAAAD,EAAA,EAAA,EAAA,EAAA,QAEA,CACAE,EAAAlqB,SAAAvU,EAAAgH,OAAA,KAAA,EACAu3B,EAAA,EACAC,EAAA,EACAhhC,KAAAqqC,SAAAgD,eAAApM,GACAjhC,KAAAkpC,SAAA,aAAAlpC,KAAAqqC,UACA,IAAArqC,KAAA2gB,EAAAunB,aACAloC,KAAAktC,SAAA/G,EAAAlF,EAAAD,EAAAD,EAAA,EAAA,EAAA,EAAA,IAGA/gC,KAAA4nC,UAAA,GACA5nC,KAAAsqC,OAEA,MACA,IAAA,KACA,GAAA9nC,EAAAoB,GAAA,UAAApB,EAAAoB,GAAA,aAAA,CACAm9B,EAAAhqB,SAAAvU,EAAAgH,OAAA,KAAA,EACAy3B,EAAAjhC,KAAAqqC,SAAAU,iBACA/J,EAAAhhC,KAAAqqC,SAAAW,cACAxoC,EAAAoB,GAAA,QACA,IAAAo9B,GACAA,EAAA,GACAC,GAAA,GAEAD,GAAA,EAEAx+B,EAAAoB,GAAA,UACA,IAAAo9B,GACAA,EAAA,EACAC,GAAA,GAEAD,GAAA,GAGAhhC,KAAAktC,SAAA/G,EAAAlF,EAAAD,EAAAD,EAAA,EAAA,EAAA,EAAA,OAOAmM,SAAA,SAAA/6B,EAAAkH,GAQA,IAAA9X,EAPA8X,GAAA,QAAAA,IACArZ,KAAAmS,KAAA,IAAArJ,KAAAqJ,IACAkH,GAAA,QAAAA,IACArZ,KAAAqqC,SAAA,IAAAvhC,KAAAqJ,IACAnS,KAAAsqC,OACAtqC,KAAAq0B,WACAr0B,KAAAkpC,SAAA,cAEAlpC,KAAAwmC,QACAjlC,EAAAvB,KAAAuB,QACAvB,KAAAymC,YACAllC,EAAAvB,KAAAuB,QAAA3C,KAAA,UAEA2C,IACAA,EAAAmgC,UACA1hC,KAAA2gB,EAAAwsB,WAAA9zB,GAAA,QAAAA,GACArZ,KAAA0D,SAKAspC,UAAA,SAAA76B,EAAA26B,GACA,IAAAA,EAAA,OAAA36B,EACA,IAIAm7B,EAAA/H,EAJAgI,EAAA,IAAAzkC,KAAAqJ,EAAAy4B,WACA7J,EAAAwM,EAAA1D,aACA7I,EAAAuM,EAAAvC,cACAwC,EAAArpC,KAAAugC,IAAAoI,GAGA,GADAA,EAAAA,EAAA,EAAA,GAAA,EACA,GAAAU,EACAjI,GAAA,GAAAuH,EAGA,WAAA,OAAAS,EAAAvC,eAAAhK,GAGA,WAAA,OAAAuM,EAAAvC,eAAAsC,GACAA,EAAAtM,EAAA8L,EACAS,EAAAH,YAAAE,IAEAA,EAAA,GAAAA,EAAA,MACAA,GAAAA,EAAA,IAAA,QACA,CAEA,IAAA,IAAAruC,EAAA,EAAAA,EAAAuuC,EAAAvuC,IAEAsuC,EAAAvtC,KAAAgtC,UAAAO,EAAAT,GAEAQ,EAAAC,EAAAvC,cACAuC,EAAAxD,WAAAhJ,GACAwE,EAAA,WAAA,OAAA+H,GAAAC,EAAAvC,eAIA,KAAAzF,KACAgI,EAAAxD,aAAAhJ,GACAwM,EAAAH,YAAAE,GAEA,OAAAC,GAGAN,SAAA,SAAA96B,EAAA26B,GACA,OAAA9sC,KAAAgtC,UAAA76B,EAAA,GAAA26B,IAGAW,gBAAA,SAAAt7B,GACA,OAAAA,GAAAnS,KAAA2gB,EAAA0mB,WAAAl1B,GAAAnS,KAAA2gB,EAAA4mB,SAGAxJ,QAAA,SAAA37B,GACA,GAAApC,KAAA2mC,OAAA/iC,GAAA,kBACA,IAAAxB,EAAAyB,SACA7D,KAAAsG,WAFA,CAKA,IACAwmC,EACAY,EAAAC,EAkEApsC,EApEAqsC,GAAA,EAGA,OAAAxrC,EAAAyB,SACA,KAAA,GACA7D,KAAA0D,OACAtB,EAAA8V,iBACA,MACA,KAAA,GACA,KAAA,GACA,IAAAlY,KAAA2gB,EAAAktB,mBAAA,MACAf,EAAA,IAAA1qC,EAAAyB,SAAA,EAAA,EACAzB,EAAA47B,SACA0P,EAAA1tC,KAAAitC,SAAAjtC,KAAAmS,KAAA26B,GACAa,EAAA3tC,KAAAitC,SAAAjtC,KAAAqqC,SAAAyC,IACA1qC,EAAA0rC,UACAJ,EAAA1tC,KAAAgtC,UAAAhtC,KAAAmS,KAAA26B,GACAa,EAAA3tC,KAAAgtC,UAAAhtC,KAAAqqC,SAAAyC,MAEAY,EAAA,IAAA5kC,KAAA9I,KAAAmS,OACA43B,WAAA/pC,KAAAmS,KAAA03B,aAAAiD,IACAa,EAAA,IAAA7kC,KAAA9I,KAAAqqC,WACAN,WAAA/pC,KAAAqqC,SAAAR,aAAAiD,IAEA9sC,KAAAytC,gBAAAC,KACA1tC,KAAAmS,KAAAu7B,EACA1tC,KAAAqqC,SAAAsD,EACA3tC,KAAAq0B,WACAr0B,KAAAsY,SACAlW,EAAA8V,iBACA01B,GAAA,GAEA,MACA,KAAA,GACA,KAAA,GACA,IAAA5tC,KAAA2gB,EAAAktB,mBAAA,MACAf,EAAA,IAAA1qC,EAAAyB,SAAA,EAAA,EACAzB,EAAA47B,SACA0P,EAAA1tC,KAAAitC,SAAAjtC,KAAAmS,KAAA26B,GACAa,EAAA3tC,KAAAitC,SAAAjtC,KAAAqqC,SAAAyC,IACA1qC,EAAA0rC,UACAJ,EAAA1tC,KAAAgtC,UAAAhtC,KAAAmS,KAAA26B,GACAa,EAAA3tC,KAAAgtC,UAAAhtC,KAAAqqC,SAAAyC,MAEAY,EAAA,IAAA5kC,KAAA9I,KAAAmS,OACA43B,WAAA/pC,KAAAmS,KAAA03B,aAAA,EAAAiD,IACAa,EAAA,IAAA7kC,KAAA9I,KAAAqqC,WACAN,WAAA/pC,KAAAqqC,SAAAR,aAAA,EAAAiD,IAEA9sC,KAAAytC,gBAAAC,KACA1tC,KAAAmS,KAAAu7B,EACA1tC,KAAAqqC,SAAAsD,EACA3tC,KAAAq0B,WACAr0B,KAAAsY,SACAlW,EAAA8V,iBACA01B,GAAA,GAEA,MACA,KAAA,GACA5tC,KAAA0D,OACAtB,EAAA8V,iBACA,MACA,KAAA,EACAlY,KAAA0D,OAGA,GAAAkqC,EACA5tC,KAAAkpC,SAAA,cAEAlpC,KAAAwmC,QACAjlC,EAAAvB,KAAAuB,QACAvB,KAAAymC,YACAllC,EAAAvB,KAAAuB,QAAA3C,KAAA,UAEA2C,GACAA,EAAAmgC,WAKAkG,SAAA,SAAAkF,GACAA,IACA9sC,KAAAgnC,SAAA7iC,KAAA0U,IAAA7Y,KAAA2gB,EAAAunB,YAAA/jC,KAAAC,IAAA,EAAApE,KAAAgnC,SAAA8F,KAYA9sC,KAAA2mC,OAAA/nC,KAAA,QAAA8E,OAAA5D,OAAA,eAAA8mC,EAAAtZ,MAAAttB,KAAAgnC,UAAAkF,SAAAprC,IAAA,UAAA,SACAd,KAAAkqC,oBAIA,IAAA6D,EAAA,SAAAxsC,EAAA2V,GACAlX,KAAAuB,QAAA7C,EAAA6C,GACAvB,KAAAguC,OAAAtvC,EAAAgB,IAAAwX,EAAA82B,OAAA,SAAA/uC,GAAA,OAAAA,EAAAgvC,OAAAhvC,EAAA,GAAAA,WACAiY,EAAA82B,OAEAtvC,EAAAsB,KAAAguC,QACArE,WAAAzyB,GACAkG,KAAA,aAAA1e,EAAAwzB,MAAAlyB,KAAAkuC,YAAAluC,OAEAA,KAAAmuC,QAAAzvC,EAAAgB,IAAAM,KAAAguC,OAAA,SAAA/uC,GAAA,OAAAP,EAAAO,GAAAqC,KAAA,gBACAtB,KAAAouC,eAEAL,EAAAhzB,WACAqzB,YAAA,WACApuC,KAAAioC,MAAAvpC,EAAAgB,IAAAM,KAAAmuC,QAAA,SAAAlvC,GAAA,OAAAA,EAAAkT,OACAnS,KAAAquC,gBAEAA,aAAA,WACA,IAAAlZ,EAAAz2B,EAAAgB,IAAAM,KAAAioC,MAAA,SAAAnnB,GAAA,OAAAA,EAAA8pB,YACAlsC,EAAA8C,KAAAxB,KAAAmuC,QAAA,SAAAlvC,EAAA0jB,GACAA,EAAAgoB,SAAAxV,MAGA+Y,YAAA,SAAA9rC,GACA,IACAmrC,EADA7uC,EAAA0D,EAAAI,QAAAlB,KAAA,cACAuoC,aACA5qC,EAAAP,EAAAg/B,QAAAt7B,EAAAI,OAAAxC,KAAAguC,QACAhtB,EAAAhhB,KAAAguC,OAAA5tC,OACA,IAAA,GAAAnB,EAAA,CAEA,GAAAsuC,EAAAvtC,KAAAioC,MAAAhpC,GAEA,KAAAA,GAAA,GAAAsuC,EAAAvtC,KAAAioC,MAAAhpC,IACAe,KAAAmuC,QAAAlvC,KAAA8qC,WAAAwD,QAGA,GAAAA,EAAAvtC,KAAAioC,MAAAhpC,GAEA,KAAAA,EAAA+hB,GAAAusB,EAAAvtC,KAAAioC,MAAAhpC,IACAe,KAAAmuC,QAAAlvC,KAAA8qC,WAAAwD,GAGAvtC,KAAAouC,gBAEArsC,OAAA,WACArD,EAAAgB,IAAAM,KAAAmuC,QAAA,SAAAxrB,GAAAA,EAAA5gB,kBACA/B,KAAAuB,QAAAD,OAAAqoC,aAoCA,IAAA2E,EAAA5vC,EAAAyhB,GAAAwpB,WACAA,EAAAjrC,EAAAyhB,GAAAwpB,WAAA,SAAAlpB,GACA,IAEA8tB,EAFA5yB,EAAAkB,MAAAf,MAAA,KAAAqF,WA+BA,OA9BAxF,EAAAkpB,QAGA7kC,KAAAwB,KAAA,WACA,IAAA+yB,EAAA71B,EAAAsB,MACAsB,EAAAizB,EAAAjzB,KAAA,cACA4V,EAAA,iBAAAuJ,GAAAA,EACA,IAAAnf,EAAA,CACA,IAAAktC,EA3CA,SAAAxV,EAAAyV,GAEA,IAAAntC,EAAA5C,EAAAs6B,GAAA13B,OACAotC,KACAxhC,EAAA,IAAAwxB,OAAA,IAAA+P,EAAA1pB,cAAA,WAEA,IAAA,IAAAqP,KADAqa,EAAA,IAAA/P,OAAA,IAAA+P,EAAA1pB,eACAzjB,EACAmtC,EAAAlJ,KAAAnR,KAEAsa,EADAta,EAAAlnB,QAAAA,EAAA,SAAAqW,EAAAnH,GAAA,OAAAA,EAAA2I,iBACAzjB,EAAA8yB,IAEA,OAAAsa,EAgCAC,CAAA3uC,KAAA,QAGA4uC,EAhCA,SAAA7G,GAEA,IAAA2G,KAGA,GAAAzG,EAAAF,KACAA,EAAAA,EAAA/X,MAAA,KAAA,GACAiY,EAAAF,IAFA,CAKA,IAAAjnB,EAAAmnB,EAAAF,GAKA,OAJArpC,EAAA8C,KAAAqtC,EAAA,SAAA5vC,EAAA62B,GACAA,KAAAhV,IACA4tB,EAAA5Y,GAAAhV,EAAAgV,MAEA4Y,GAiBAI,CADApwC,EAAAyd,UAAAuM,EAAA8lB,EAAAt3B,GACA8wB,UAEAH,EAAAnpC,EAAAyd,UAAAuM,EAAAkmB,EAAAJ,EAAAt3B,GACA,GAAAqd,EAAA3wB,GAAA,qBAAAikC,EAAAmG,OAAA,CACA,IAAAe,GACAf,OAAAnG,EAAAmG,QAAAzZ,EAAA31B,KAAA,SAAAowC,WAEAza,EAAAjzB,KAAA,aAAAA,EAAA,IAAAysC,EAAA/tC,KAAAtB,EAAAyd,OAAA0rB,EAAAkH,UAGAxa,EAAAjzB,KAAA,aAAAA,EAAA,IAAA+kC,EAAArmC,KAAA6nC,IAGA,GAAA,iBAAApnB,GAAA,mBAAAnf,EAAAmf,SAEAniB,KADAiwC,EAAAjtC,EAAAmf,GAAA3E,MAAAxa,EAAAqa,IAEA,OAAA,SAGArd,IAAAiwC,EACAA,EAEAvuC,MAGA0oB,EAAAhqB,EAAAyhB,GAAAwpB,WAAAjhB,UACAykB,WAAA,EACAX,cAAA9tC,EAAA68B,KACA2L,eAAA,EACA4E,UAAA,EACArE,sBACAF,QAAAe,EAAAA,EACAoB,YAAA,EACAt3B,OAAA,aACAy7B,oBAAA,EACA7F,SAAA,KACAE,YAAA,EACAnB,KAAA,EACAM,WAAAiB,EAAAA,EACArB,UAAA,EACA4E,UAAA,EACAV,gBAAA,EACAhD,UAAA,GAEA0G,EAAAnwC,EAAAyhB,GAAAwpB,WAAAkF,aACA,SACA,MACA,aAEAnwC,EAAAyhB,GAAAwpB,WAAAnV,YAAA6R,EACA,IAAA4B,EAAAvpC,EAAAyhB,GAAAwpB,WAAA1B,OACAgH,IACAC,MAAA,SAAA,SAAA,UAAA,YAAA,WAAA,SAAA,WAAA,UACAC,WAAA,MAAA,MAAA,MAAA,MAAA,MAAA,MAAA,MAAA,OACA1E,SAAA,KAAA,KAAA,KAAA,KAAA,KAAA,KAAA,KAAA,MACAmB,QAAA,UAAA,WAAA,QAAA,QAAA,MAAA,OAAA,OAAA,SAAA,YAAA,UAAA,WAAA,YACAlB,aAAA,MAAA,MAAA,MAAA,MAAA,MAAA,MAAA,MAAA,MAAA,MAAA,MAAA,MAAA,OACAQ,MAAA,QACAtP,MAAA,UAIAgL,GACAtZ,QAEA4e,QAAA,OACAkD,OAAA,QACArC,QAAA,IAGAb,QAAA,SACAkD,OAAA,WACArC,QAAA,IAGAb,QAAA,QACAkD,OAAA,WACArC,QAAA,KAEAsC,WAAA,SAAApO,GACA,OAAAA,EAAA,GAAA,GAAAA,EAAA,KAAA,GAAAA,EAAA,KAAA,GAEA+K,eAAA,SAAA/K,EAAAD,GACA,OAAA,GAAA4F,EAAAyI,WAAApO,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,IAAAD,IAEAsO,WAAA,6BACAC,eAAA,yCACAlH,YAAA,SAAAj2B,GAGA,IAAAo9B,EAAAp9B,EAAAlF,QAAAlN,KAAAsvC,WAAA,MAAAtf,MAAA,MACAyf,EAAAr9B,EAAAyY,MAAA7qB,KAAAsvC,YACA,IAAAE,IAAAA,EAAApvC,SAAAqvC,GAAA,IAAAA,EAAArvC,OACA,MAAA,IAAAoK,MAAA,wBAEA,OAAAglC,WAAAA,EAAAC,MAAAA,IAEAlH,UAAA,SAAAp2B,EAAAC,EAAA41B,GACA,GAAA71B,aAAArJ,KAAA,OAAAqJ,EAGA,GAFA,iBAAAC,IACAA,EAAAw0B,EAAAyB,YAAAj2B,IACA,0CAAAmzB,KAAApzB,GAAA,CACA,IAEA26B,EAFA4C,EAAA,qBACAD,EAAAt9B,EAAA0Y,MAAA,uBAEA1Y,EAAA,IAAArJ,KACA,IAAA,IAAA7J,EAAA,EAAAA,EAAAwwC,EAAArvC,OAAAnB,IAGA,OAFA0wC,EAAAD,EAAAhxB,KAAA+wB,EAAAxwC,IACA6tC,EAAA/1B,SAAA44B,EAAA,IACAA,EAAA,IACA,IAAA,IACAx9B,EAAA43B,WAAA53B,EAAA03B,aAAAiD,GACA,MACA,IAAA,IACA36B,EAAAk0B,EAAAtrB,UAAAiyB,UAAA9rB,KAAAmlB,EAAAtrB,UAAA5I,EAAA26B,GACA,MACA,IAAA,IACA36B,EAAA43B,WAAA53B,EAAA03B,aAAA,EAAAiD,GACA,MACA,IAAA,IACA36B,EAAAk0B,EAAAtrB,UAAAkyB,SAAA/rB,KAAAmlB,EAAAtrB,UAAA5I,EAAA26B,GAIA,OAAA3G,EAAAh0B,EAAA44B,iBAAA54B,EAAA64B,cAAA74B,EAAA03B,aAAA,EAAA,EAAA,GAEA4F,EAAAt9B,GAAAA,EAAA0Y,MAAA7qB,KAAAuvC,oBACAp9B,EAAA,IAAArJ,KADA,IAkBArG,EAAAmtC,EAAAD,EAhBAE,KACAC,GAAA,OAAA,KAAA,IAAA,KAAA,IAAA,KAAA,IAAA,MACAC,GACAC,KAAA,SAAAlvB,EAAAsC,GAAA,OAAAtC,EAAAusB,eAAAjqB,IACA6sB,GAAA,SAAAnvB,EAAAsC,GAAA,OAAAtC,EAAAusB,eAAA,IAAAjqB,IACAV,EAAA,SAAA5B,EAAAsC,GAEA,IADAA,GAAA,EACAA,EAAA,GAAAA,GAAA,GAGA,IAFAA,GAAA,GACAtC,EAAAssB,YAAAhqB,GACAtC,EAAAkqB,eAAA5nB,GACAtC,EAAAipB,WAAAjpB,EAAA+oB,aAAA,GACA,OAAA/oB,GAEAA,EAAA,SAAAA,EAAAsC,GAAA,OAAAtC,EAAAipB,WAAA3mB,KAGA2sB,EAAA,EAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,EACAA,EAAA,GAAAA,EAAA,EACA59B,EAAAg0B,EAAAh0B,EAAAi5B,cAAAj5B,EAAAk5B,WAAAl5B,EAAAy3B,UAAA,EAAA,EAAA,GACA,IAAAsG,EAAA99B,EAAAq9B,MAAAnuB,QAQA,GANAmuB,EAAArvC,QAAA8vC,EAAA9vC,SACA8vC,EAAAxxC,EAAAwxC,GAAApwC,OAAA,SAAAb,EAAA0jB,GACA,OAAA,IAAAjkB,EAAAg/B,QAAA/a,EAAAmtB,KACAd,WAGAS,EAAArvC,QAAA8vC,EAAA9vC,OAAA,CACAnB,EAAA,EAAA,IAAA,IAAAkxC,EAAAD,EAAA9vC,OAAAnB,EAAAkxC,EAAAlxC,IAAA,CAGA,GAFAwD,EAAAsU,SAAA04B,EAAAxwC,GAAA,IACA0wC,EAAAO,EAAAjxC,GACAwiB,MAAAhf,GACA,OAAAktC,GACA,IAAA,KACAC,EAAAlxC,EAAAupC,EAAAD,GAAA4D,QAAA9rC,OAAA,WACA,IAAA4iB,EAAA1iB,KAAAshB,MAAA,EAAAmuB,EAAAxwC,GAAAmB,QAEA,OAAAsiB,GADA+sB,EAAAxwC,GAAAqiB,MAAA,EAAAoB,EAAAtiB,UAGAqC,EAAA/D,EAAAg/B,QAAAkS,EAAA,GAAA3H,EAAAD,GAAA4D,QAAA,EACA,MACA,IAAA,IACAgE,EAAAlxC,EAAAupC,EAAAD,GAAA0C,aAAA5qC,OAAA,WACA,IAAA4iB,EAAA1iB,KAAAshB,MAAA,EAAAmuB,EAAAxwC,GAAAmB,QAEA,OAAAsiB,GADA+sB,EAAAxwC,GAAAqiB,MAAA,EAAAoB,EAAAtiB,UAGAqC,EAAA/D,EAAAg/B,QAAAkS,EAAA,GAAA3H,EAAAD,GAAA0C,aAAA,EAIAmF,EAAAF,GAAAltC,EAEA,IAAA+d,EAAA,IAAAvhB,EAAA,EAAAA,EAAA6wC,EAAA1vC,OAAAnB,KACAuhB,EAAAsvB,EAAA7wC,MACA4wC,IAAApuB,MAAAouB,EAAArvB,KACAuvB,EAAAvvB,GAAArO,EAAA09B,EAAArvB,IAGA,OAAArO,GAEAq3B,WAAA,SAAAr3B,EAAAC,EAAA41B,GACA,iBAAA51B,IACAA,EAAAw0B,EAAAyB,YAAAj2B,IACA,IAAA3P,GACAqe,EAAA3O,EAAA03B,aACAuG,EAAAnI,EAAAD,GAAAmH,UAAAh9B,EAAAm5B,aACA+E,GAAApI,EAAAD,GAAAkH,KAAA/8B,EAAAm5B,aACA5oB,EAAAvQ,EAAA64B,cAAA,EACAsF,EAAArI,EAAAD,GAAA0C,YAAAv4B,EAAA64B,eACAuF,GAAAtI,EAAAD,GAAA4D,OAAAz5B,EAAA64B,eACAiF,GAAA99B,EAAA44B,iBAAAyF,WAAA14B,UAAA,GACAk4B,KAAA79B,EAAA44B,kBAEAtoC,EAAAguC,IAAAhuC,EAAAqe,EAAA,GAAA,IAAA,IAAAre,EAAAqe,EACAre,EAAAiuC,IAAAjuC,EAAAigB,EAAA,GAAA,IAAA,IAAAjgB,EAAAigB,EACAvQ,KAEA,IAFA,IACAw+B,EAAAjyC,EAAAyd,UAAA/J,EAAAo9B,YACAvwC,EAAA,EAAAkxC,EAAA/9B,EAAAq9B,MAAArvC,OAAAnB,GAAAkxC,EAAAlxC,IACA0xC,EAAAvwC,QACA+R,EAAA5E,KAAAojC,EAAA9L,SACA1yB,EAAA5E,KAAA9K,EAAA2P,EAAAq9B,MAAAxwC,KAEA,OAAAkT,EAAA1K,KAAA,KAEAmpC,aAAA,+KAOAC,aAAA,gDACAC,aAAA,2GAEAlK,EAAApjC,SAAA,wFAGAojC,EAAAgK,aACA,kBACAhK,EAAAkK,aACA,+EAIAlK,EAAAgK,aACAhK,EAAAiK,aACAjK,EAAAkK,aACA,8EAIAlK,EAAAgK,aACAhK,EAAAiK,aACAjK,EAAAkK,aACA,uBAIApyC,EAAAyhB,GAAAwpB,WAAA/C,SAAAA,EAMAloC,EAAAyhB,GAAAwpB,WAAAoH,WAAA,WAEA,OADAryC,EAAAyhB,GAAAwpB,WAAA2E,EACAtuC,MAOAtB,EAAAiE,UAAAC,GACA,sDACA,8BACA,SAAAR,GACA,IAAAmyB,EAAA71B,EAAAsB,MACAu0B,EAAAjzB,KAAA,gBACAc,EAAA8V,iBAEAyxB,EAAAzoB,KAAAqT,EAAA,WAGA71B,EAAA,WAGAirC,EAAAzoB,KAAAxiB,EAAA,yCA9sCA,CAitCAwC,OAAAgb,QA2BA,SAAAxd,GACA,aAGAA,EAAAyhB,GAAA6wB,YAAAtyC,EAAAyhB,GAAAwpB,WAAAoH,aACAryC,EAAAyhB,GAAAwpB,aACAjrC,EAAAyhB,GAAAwpB,WAAAjrC,EAAAyhB,GAAA6wB,aAGA,IAAAloC,EAAA,SAAAoO,GACAlX,KAAAo3B,KAAA,OAAAlgB,EAAApO,EAAA4f,UACA1oB,KAAAixC,WAAA/5B,EAAApO,EAAA4f,WAGAhqB,EAAAyhB,GAAA4T,cAAAW,QAAA5rB,EAAApK,EAAAyhB,GAAA0W,cAAAmF,eAEAt9B,EAAAyd,OAAArT,EAAAiS,WACAk2B,WAAA,SAAA/5B,EAAAwR,GAIA1oB,KAAAkX,QAAA4tB,aACA9kC,KAAAkX,QAAA4tB,WAAA9kC,KAAAkX,QAAA9E,QAIA8E,EAAAyyB,WAAAjrC,EAAAyhB,GAAA4T,cAAAC,aAAA9c,EAAAyyB,YAAA,GAIA3pC,KAAAkX,QAAAyyB,WAAAjrC,EAAAyd,UAAAuM,EAAAihB,WAAAzyB,EAAAyyB,YACAv3B,OAAApS,KAAAkX,QAAA4tB,aAIA9kC,KAAAkX,QAAAyyB,WAAA3B,SAAAhoC,KAAAkX,QAAAyyB,WAAA3B,UAAA,KAGAhoC,KAAAkxC,IAAAxyC,EAAAyhB,GAAA6wB,YAAApK,SAGA5mC,KAAAmxC,aAAAnxC,KAAAkxC,IAAA7I,YAAAroC,KAAAkX,QAAA9E,QACApS,KAAAoxC,iBAAApxC,KAAAkxC,IAAA7I,YAAAroC,KAAAkX,QAAA4tB,aAGApT,OAAA,WACA1xB,KAAAqyB,OAAA2e,YAAAhxC,KAAAkX,QAAAyyB,YAGA3pC,KAAAkX,QAAA0kB,QACA57B,KAAA07B,OAAAh9B,EAAA,oBAAA8G,KAAAxF,KAAAkX,QAAA0kB,OAAAtrB,MAAA5R,EAAAwzB,MAAA,SAAA9vB,GACAA,EAAA8V,iBACA9V,EAAA8wB,kBACAlzB,KAAA47B,SACA57B,OAEAA,KAAAgyB,KAAAvoB,SAAAsG,OAAArR,EAAA,gCAAAqR,OAAA/P,KAAA07B,WAIAjB,WAAA,SAAAvJ,EAAA3vB,GACA,IAAAiI,EAAA0nB,EAAAlxB,KAAAkxC,IAAA1H,WAAAtY,EAAAlxB,KAAAoxC,iBAAApxC,KAAAkX,QAAAyyB,WAAA3B,UAAA,GACAl/B,EAAAgsB,WAAA2F,WAAAvZ,KAAAlhB,KAAAwJ,EAAAjI,IAGA24B,WAAA,SAAA10B,GACA,OAAAxF,KAAAuoC,UAAA/iC,EAAAxF,KAAAoxC,mBAGA9d,UAAA,SAAApC,GACA,OAAAA,EAAAlxB,KAAAkxC,IAAA1H,WAAAtY,EAAAlxB,KAAAmxC,aAAAnxC,KAAAkX,QAAAyyB,WAAA3B,UAAA,IAGA7W,UAAA,SAAA+E,GACA,OAAAl2B,KAAAuoC,UAAArS,EAAAl2B,KAAAmxC,eAGA3d,aAAA,SAAAtC,GACA,OAAAlxB,KAAAszB,UAAApC,IAGAqB,YAAA,SAAArB,GACAlxB,KAAAqyB,OAAA2e,YAAA,SAAA9f,IAGAkC,YAAA,WACA,OAAApzB,KAAAqyB,OAAA/wB,KAAA,cAAA6Q,MAGAwgB,SAAA,aAGAiJ,MAAA,WACA57B,KAAAqyB,OAAA/wB,KAAA,cAAA6Q,KAAA,KACAnS,KAAAqyB,OAAAzzB,KAAA,WAAAD,YAAA,UACAqB,KAAAkX,QAAAua,aACAzxB,KAAAqyB,OAAA5uB,QAAA,QAAA8U,UAIA4Z,WAAA,WACAnyB,KAAAqyB,OAAAzvB,GAAA,UAAA,OAAA,SAAAR,GACA,IAAA1D,EAAA0D,EAAAivC,eAAAztC,GAAA,UAAAlF,EAAA0D,EAAAivC,eAAAztC,GAAA,QAAA,CAGA,IAAAoP,EAAAtU,EAAAsB,MAAAyD,QAAA,QACAmN,WAAA,WACAoC,EAAAuF,UACA,SAkBAgwB,UAAA,SAAArS,EAAA9jB,GACA,IAAAD,EAAA,KAUA,OATA+jB,IACA/jB,EAAAnS,KAAAkxC,IAAA3I,UAAArS,EAAA9jB,EAAApS,KAAAkX,QAAAyyB,WAAA3B,UACA,iBAAA9R,GAEAA,IADAl2B,KAAAkxC,IAAA1H,WAAAr3B,EAAAC,EAAApS,KAAAkX,QAAAyyB,WAAA3B,YAEA71B,EAAA,OAIAA,KAKArJ,EAAA4f,SAAAhqB,EAAAyd,UAAAzd,EAAAyhB,GAAA0W,cAAAmF,cAAAtT,UAKA+S,IAAA,yCAKAK,WAAA,KASA1pB,OAAA,aASA0yB,WAAA,KAcA6E,YACAxB,UAAA,EACAlB,UAAA,EACAiB,YAAA,EACAiF,WAAA,GAUAvR,MAAA,kBAGAl9B,EAAAyhB,GAAA0W,cAAA1kB,KAAArJ,EAzMA,CA2MA5H,OAAAgb,QAYA,SAAAxd,GACA,aAEA,IAAA4yC,EAAA,SAAAp6B,GACAlX,KAAAo3B,KAAA,YAAAlgB,EAAAo6B,EAAA5oB,UACA1oB,KAAAixC,WAAA/5B,EAAAo6B,EAAA5oB,WAGAhqB,EAAAyhB,GAAA4T,cAAAW,QAAA4c,EAAA5yC,EAAAyhB,GAAA0W,cAAA1kB,MAEAzT,EAAAyd,OAAAm1B,EAAAv2B,WACA2W,OAAA,WACA1xB,KAAAqyB,OAAAryB,KAAAgyB,KAAApzB,KAAA,SACAoB,KAAA67B,WACA77B,KAAA+7B,QAAA,eAGA/7B,KAAAgyB,KAAAgf,YAAAhxC,KAAAkX,QAAAyyB,YAGA3pC,KAAAqyB,OAAA3oB,IAAA,iBAGA1J,KAAAqyB,OAAAoL,MAAA/+B,EAAAwzB,MAAA,WACAlyB,KAAAgyB,KAAA1F,WAAA,QACAtsB,KAAAgyB,KAAAgf,YAAA,WACAhxC,QAIAuyB,YAAA,SAAArB,GACAlxB,KAAAqyB,OAAA5vB,IAAAyuB,EAAAlxB,KAAAkxC,IAAA1H,WAAAtY,EAAAlxB,KAAAoxC,iBAAApxC,KAAAkX,QAAAyyB,WAAA3B,UAAA,IACAhoC,KAAAgyB,KAAAgf,YAAA,WAGA5d,YAAA,WACA,OAAApzB,KAAAk6B,WAAAl6B,KAAAqyB,OAAA5vB,QAGAkwB,SAAA,WACAj0B,EAAAyhB,GAAA0W,cAAArtB,KAAAuR,UAAA4X,SAAAzR,KAAAlhB,OAGAmyB,WAAA,eAKAmf,EAAA5oB,SAAAhqB,EAAAyd,UAAAzd,EAAAyhB,GAAA0W,cAAA1kB,KAAAuW,UAIA+S,IAAA,+GAKAK,WAAA,cAGA6N,YACAxB,UAAA,EACAlB,UAAA,EACAiB,YAAA,EACAiF,WAAA,KAIAzuC,EAAAyhB,GAAA0W,cAAAC,UAAAwa,EApEA,CAsEApwC,OAAAgb,QA+BA,SAAAxd,GACA,aAEA,IAAA6yC,EAAA,SAAAr6B,GACAlX,KAAAo3B,KAAA,WAAAlgB,EAAAq6B,EAAA7oB,UACA1oB,KAAAixC,WAAA/5B,EAAAq6B,EAAA7oB,WAGAhqB,EAAAyhB,GAAA4T,cAAAW,QAAA6c,EAAA7yC,EAAAyhB,GAAA0W,cAAAmF,eAEAt9B,EAAAyd,OAAAo1B,EAAAx2B,WACAk2B,WAAA,SAAA/5B,EAAAwR,GAIA1oB,KAAAkX,QAAA4tB,aACA9kC,KAAAkX,QAAA4tB,WAAA9kC,KAAAkX,QAAA9E,QAIA8E,EAAAs6B,eAAA9yC,EAAAyhB,GAAA4T,cAAAC,aAAA9c,EAAAs6B,gBAAA,GAIAxxC,KAAAkX,QAAAs6B,eAAA9yC,EAAAyd,UAAAuM,EAAA8oB,eAAAt6B,EAAAs6B,gBACAp/B,OAAApS,KAAAkX,QAAA4tB,aAIA9kC,KAAAkX,QAAAs6B,eAAAxJ,SAAAhoC,KAAAkX,QAAAs6B,eAAAxJ,UAAA,KAGAhoC,KAAAkxC,IAAAxyC,EAAAyhB,GAAAqxB,eAAA5K,SAGA5mC,KAAAmxC,aAAAnxC,KAAAkxC,IAAA7I,YAAAroC,KAAAkX,QAAA9E,OAAApS,KAAAkX,QAAAu6B,YACAzxC,KAAAoxC,iBAAApxC,KAAAkxC,IAAA7I,YAAAroC,KAAAkX,QAAA4tB,WAAA9kC,KAAAkX,QAAAu6B,aAGA/f,OAAA,WACA1xB,KAAAqyB,OAAAmf,eAAAxxC,KAAAkX,QAAAs6B,gBAIAxxC,KAAAqyB,OAAAzvB,GAAA,aAAA,SAAAR,GACA,IAAAogB,EAAA9jB,EAAAsB,MAAAyD,QAAA,QAAAgG,SAEAmH,WAAA,WACA4R,EAAAuP,eAAA,WACA,KAIA/xB,KAAAkX,QAAA0kB,QACA57B,KAAA07B,OAAAh9B,EAAA,oBAAA8G,KAAAxF,KAAAkX,QAAA0kB,OAAAtrB,MAAA5R,EAAAwzB,MAAA,SAAA9vB,GACAA,EAAA8V,iBACA9V,EAAA8wB,kBACAlzB,KAAA47B,SACA57B,OAEAA,KAAAgyB,KAAAvoB,SAAAsG,OAAArR,EAAA,gCAAAqR,OAAA/P,KAAA07B,WAIAjB,WAAA,SAAAvJ,EAAA3vB,GAEA,IAAAiI,EAAA0nB,EAAAlxB,KAAAkxC,IAAA1H,WAAAxpC,KAAA0xC,MAAAxgB,GAAAlxB,KAAAoxC,iBAAApxC,KAAAkX,QAAAs6B,eAAAxJ,SAAAhoC,KAAAkX,QAAAu6B,YAAA,GACA,IAAAlwC,EAGA,OAAAiI,EAFA+nC,EAAAzc,WAAA2F,WAAAvZ,KAAAlhB,KAAAwJ,EAAAjI,IAMA24B,WAAA,SAAA10B,GAEA,IAAA0rB,EAAAlxB,KAAAuoC,UAAA/iC,EAAAxF,KAAAoxC,kBACA,OAAAlgB,EAAAlxB,KAAA2xC,QAAAzgB,GAAA,MAGAoC,UAAA,SAAApC,GAEA,OAAAA,EAAAlxB,KAAAkxC,IAAA1H,WAAAxpC,KAAA0xC,MAAAxgB,GAAAlxB,KAAAmxC,aAAAnxC,KAAAkX,QAAAs6B,eAAAxJ,SAAAhoC,KAAAkX,QAAAu6B,YAAA,IAGAtgB,UAAA,SAAA+E,GAEA,IAAAhF,EAAAlxB,KAAAuoC,UAAArS,EAAAl2B,KAAAmxC,cACA,OAAAjgB,EAAAlxB,KAAA2xC,QAAAzgB,GAAA,MAGAsC,aAAA,SAAAtC,GACA,OAAAlxB,KAAAszB,UAAApC,IAGAqB,YAAA,SAAArB,GACAA,GACAlxB,KAAAqyB,OAAA/wB,KAAA,kBAAAwoC,QAAA5Y,IAIAkC,YAAA,WAEA,IAAA0Q,EAAA9jC,KAAAqyB,OAAA/wB,KAAA,kBACA,OAAAwiC,EAAA3xB,KAAA2xB,EAAA8F,UAAA,MAGAjX,SAAA,aAGAiJ,MAAA,WACA57B,KAAAqyB,OAAA/wB,KAAA,kBAAA6Q,KAAA,KACAnS,KAAAqyB,OAAAzzB,KAAA,WAAAD,YAAA,UACAqB,KAAAkX,QAAAua,aACAzxB,KAAAqyB,OAAA5uB,QAAA,QAAA8U,UAIA4Z,WAAA,WACAnyB,KAAAqyB,OAAAzvB,GAAA,UAAA,UAAA,SAAAR,GACA,IAAA4Q,EAAAtU,EAAAsB,MAAAyD,QAAA,QACAmN,WAAA,WACAoC,EAAAuF,UACA,QAKAm5B,MAAA,SAAAxgB,GACA,OAAAA,EAAA,IAAApoB,KAAAooB,EAAA0Z,UAAA,IAAA1Z,EAAAoY,qBAAApY,GAIAygB,QAAA,SAAAzgB,GACA,OAAAA,EAAA,IAAApoB,KAAAooB,EAAA0Z,UAAA,IAAA1Z,EAAAoY,qBAAApY,GAQAqX,UAAA,SAAArS,EAAA9jB,GACA,IAAAD,EAAA,KAUA,OATA+jB,IACA/jB,EAAAnS,KAAAkxC,IAAA3I,UAAArS,EAAA9jB,EAAApS,KAAAkX,QAAAs6B,eAAAxJ,SAAAhoC,KAAAkX,QAAAu6B,YACA,iBAAAvb,GAEAA,IADAl2B,KAAAkxC,IAAA1H,WAAAr3B,EAAAC,EAAApS,KAAAkX,QAAAs6B,eAAAxJ,SAAAhoC,KAAAkX,QAAAu6B,cAEAt/B,EAAA,OAIAA,KAKAo/B,EAAA7oB,SAAAhqB,EAAAyd,UAAAzd,EAAAyhB,GAAA0W,cAAAmF,cAAAtT,UAKA+S,IAAA,yCAKAK,WAAA,KASA1pB,OAAA,mBACAq/B,WAAA,WASA3M,WAAA,KASA0M,gBACArG,gBAAA,EACAgC,WAAA,GAUAvR,MAAA,kBAGAl9B,EAAAyhB,GAAA0W,cAAA+a,SAAAL,EAnNA,CAqNArwC,OAAAgb,QAUA,SAAAxd,GACA,aAEA,IAAAmzC,EAAA,SAAA36B,GACAlX,KAAAo3B,KAAA,gBAAAlgB,EAAA26B,EAAAnpB,UACA1oB,KAAAixC,WAAA/5B,EAAA26B,EAAAnpB,WAGAhqB,EAAAyhB,GAAA4T,cAAAW,QAAAmd,EAAAnzC,EAAAyhB,GAAA0W,cAAA+a,UAEAlzC,EAAAyd,OAAA01B,EAAA92B,WACA2W,OAAA,WACA1xB,KAAAqyB,OAAAryB,KAAAgyB,KAAApzB,KAAA,SACAoB,KAAA67B,WACA77B,KAAA+7B,QAAA,eAEA/7B,KAAAgyB,KAAAwf,eAAAxxC,KAAAkX,QAAAs6B,gBAGAxxC,KAAAqyB,OAAA3oB,IAAA,iBAGA1J,KAAAqyB,OAAAoL,MAAA/+B,EAAAwzB,MAAA,WACAlyB,KAAAgyB,KAAA1F,WAAA,QACAtsB,KAAAgyB,KAAAwf,eAAA,WACAxxC,QAIAuyB,YAAA,SAAArB,GACAlxB,KAAAqyB,OAAA5vB,IAAAzC,KAAAy6B,WAAAvJ,IACAlxB,KAAAgyB,KAAAwf,eAAA,WAGApe,YAAA,WACA,OAAApzB,KAAAk6B,WAAAl6B,KAAAqyB,OAAA5vB,QAGAkwB,SAAA,WACAj0B,EAAAyhB,GAAA0W,cAAArtB,KAAAuR,UAAA4X,SAAAzR,KAAAlhB,OAGAmyB,WAAA,eAKA0f,EAAAnpB,SAAAhqB,EAAAyd,UAAAzd,EAAAyhB,GAAA0W,cAAA+a,SAAAlpB,UAIA+S,IAAA,+GAKAK,WAAA,eAGA0V,gBACArG,gBAAA,EACAgC,WAAA,KAIAzuC,EAAAyhB,GAAA0W,cAAAib,cAAAD,EAjEA,CAmEA3wC,OAAAgb,QChoNA,SAAAxd,GACA,aAEA,IAAAqzC,EAAA,SAAA76B,GACAlX,KAAAo3B,KAAA,WAAAlgB,EAAA66B,EAAArpB,WAIAhqB,EAAAyhB,GAAA4T,cAAAW,QAAAqd,EAAArzC,EAAAyhB,GAAA0W,cAAAmF,eAEAt9B,EAAAyd,OAAA41B,EAAAh3B,WAMA2W,OAAA,WACA1xB,KAAAqyB,OAAAryB,KAAAgyB,KAAApzB,KAAA,UAQA67B,WAAA,SAAAvJ,EAAA3vB,GACA,GAAA2vB,EAAA,CAIA,IAAA1rB,EAAA9G,EAAA,SAAA8K,KAAA0nB,EAAA8gB,WAAAxsC,OAAA,IAAA9G,EAAA,SAAA8K,KAAA0nB,EAAA+gB,UAAAzsC,OACA9G,EAAA6C,GAAAiE,KAAAA,QAJA9G,EAAA6C,GAAAO,SAYAo4B,WAAA,SAAA10B,GAaA,OAAA,MASA8tB,UAAA,SAAApC,GACA,IAAAgF,EAAA,GACA,GAAAhF,EACA,IAAA,IAAA4E,KAAA5E,EACAgF,EAAAA,EAAAJ,EAAA,IAAA5E,EAAA4E,GAAA,IAGA,OAAAI,GAQA/E,UAAA,SAAA+E,GAKA,OAAAA,GASA3D,YAAA,SAAArB,GACAA,IAGAlxB,KAAAqyB,OAAAvyB,OAAA,sBAAA2C,IAAAyuB,EAAA8gB,WACAhyC,KAAAqyB,OAAAvyB,OAAA,qBAAA2C,IAAAyuB,EAAA+gB,YAQA7e,YAAA,WACA,OACA4e,UAAAhyC,KAAAqyB,OAAAvyB,OAAA,sBAAA2C,MACAwvC,SAAAjyC,KAAAqyB,OAAAvyB,OAAA,qBAAA2C,MACAyvC,SAAAlyC,KAAAqyB,OAAAvyB,OAAA,qBAAA2C,QASAkwB,SAAA,WACA3yB,KAAAqyB,OAAAvyB,OAAA,sBAAA67B,SAQAxJ,WAAA,WACAnyB,KAAAqyB,OAAA0L,QAAA,SAAA37B,GACA,KAAAA,EAAAiX,OACA3a,EAAAsB,MAAAyD,QAAA,QAAA8U,cAMAw5B,EAAArpB,SAAAhqB,EAAAyd,UAAAzd,EAAAyhB,GAAA0W,cAAAmF,cAAAtT,UACA+S,IAAA,uUAGAK,WAAA,sBAGAp9B,EAAAyhB,GAAA0W,cAAAsb,SAAAJ,EA7IA,CA+IA7wC,OAAAgb,QCrKA,IAAAre,MAAAA,UACAA,MAAAC,KAAAD,MAAAC,KAAAD,MAAAC,QACAD,MAAAC,KAAAuE,SAAAxE,MAAAC,KAAAuE,SAAAxE,MAAAC,KAAAuE,YACAxE,MAAAC,KAAAuE,SAAAC,SAAAzE,MAAAC,KAAAuE,SAAAC,SAAAzE,MAAAC,KAAAuE,SAAAC,YAEA,SAAAzE,GAwMAA,EAAAC,MAAAD,EAAAC,KADAD,EAAAC,KAAAuE,UAAAxE,EAAAC,KAAAuE,SApMA,SAAAC,GAEA,IAAA8vC,GACA/5B,OAAA,GACA1T,UAAA,GACAgC,cAAA,GACApF,QAAA,GACA8wC,YAAA,GACAjyB,SAAA,MAiDA,SAAAkyB,EAAAj6B,EAAA1T,EAAAgC,EAAApF,EAAA8wC,EAAAjyB,GACA,IAAAxZ,EAAArF,EACAiS,EAAA9U,EAAA,2BAAA6K,SAAA,UACAgpC,EAAA7zC,EAAA,gCAAA6K,SAAA,UAEAjI,GACA3B,eAAA0Y,EACAm6B,iBAAA9zC,EAAA,cAAA+D,MACAgwC,oBAAA9tC,EACAoC,cAAAJ,EACAK,YAAAqrC,GAGA3zC,EAAA,kCAAA2Z,EAAA,KAAAxZ,SAAA,WAAAD,KAAA,4CAAAqB,KAAA,WAAA,IAEAvB,EAAAkG,MACAC,IAAA,+BACAC,KAAA,OACAC,SAAA,OACAC,YAAA,kCACA1D,KAAA2F,KAAAC,UAAA5F,GACA2D,SAAA,SAAAC,GAGA,GAFAxG,EAAA,kCAAA2Z,EAAA,KAAA1Z,YAAA,WAAAC,KAAA,4CAAAgO,WAAA,iBAEAtO,GAAA4G,EAAAG,cAAAH,EAAAG,aAAAR,IACAhH,EAAA0G,OAAAC,GAAAW,cACAjE,OAAAiG,SAAAC,KAAAlC,EAAAG,aAAAR,SACA,GAAA,MAAAK,EAAAE,aAAA9G,GAAA4G,EAAAG,cAAA,GAAAH,EAAAG,aAAAC,QAAA,CACAzH,EAAA0G,OAAAC,GAAAW,cAGAzG,EAAAkI,GAAAtF,KAAA,mBAAAuB,SAEA,IAAAwE,EAAA,qBACAnC,EAAAG,aAAAgC,eACAA,EAAAnC,EAAAG,aAAAgC,cACAxJ,EAAA0G,OAAAC,GAAAe,mBAAA8B,EAAA,aACA,CAGA3I,EAAA,qDAAA2Z,EAAA,MAAApY,KAAA,aAAAvB,EAAAkI,GAAA3G,KAAA,eAGA,IAAAyyC,EAAAh0C,EAAA,kCAAA2Z,EAAA,KACAq6B,EAAA9zC,KAAA,sBAAA4G,KAAAN,EAAAG,aAAAstC,qBAEA,kBAAAhsC,EACA+rC,EAAAjpC,SAAA5K,SAAA,qBAEA6zC,EAAAjpC,SAAA9K,YAAA,qBAEA,MAAAgI,EACA+rC,EAAAjpC,SAAA5K,SAAA,aAEA6zC,EAAAjpC,SAAA9K,YAAA,aAGAd,EAAAC,KAAA8V,uBAAAJ,EAAAtO,EAAAG,aAAAutC,yBAEA/0C,EAAAC,KAAAuE,SAAAC,SAAAuwC,2BAGAn0C,EAAA,uBAAA+D,IAAA,IACA/D,EAAA,2BAAA8G,KAAAN,EAAAG,aAAAytC,uBACAp0C,EAAA,sCAAA8G,KAAAN,EAAAG,aAAA0tC,oBAGAr0C,EAAA,6CAAA0B,OAAA,GAAA8E,EAAAG,aAAA2tC,mBAAA5yC,OAAA,GACA1B,EAAA,6CAAA8G,KAAAN,EAAAG,aAAA2tC,oBAEAn1C,EAAAC,KAAAuQ,SAAA4C,sBAAA,GACAshC,GACA7zC,EAAA,gCAAAC,YAAA,UAEAd,EAAAC,KAAAuQ,SAAA4kC,eAEAp1C,EAAAC,KAAA6J,qBAAAC,SAAA,EAAAC,kBAAA,GAEAhK,EAAAC,KAAAC,QAAAK,UAAA,EAEAgiB,GACAA,QA/HAviB,EAAAC,KAAAuE,SAAAC,SAAAC,mCAAA,SAAA2wC,EAAAb,EAAAjyB,EAAA+yB,GACA,GAAA,QAAAz0C,EAAA,gBAAA+D,MAAA,CACA,IAAA4V,EAAA3Z,EAAAw0C,GAAA5xC,KAAA,MACA,GAAA,WAAA5C,EAAAw0C,GAAAjzC,KAAA,cACA0G,EAAA,WAIA,IAAAA,EAAA,KAEA,GAAA9I,EAAAC,KAAA6L,uBAOA,CACA,IAAAhF,EAAAjG,EAAA,cAAA+D,MACA4vC,IACA1tC,EAAAjG,EAAAw0C,GAAA5xC,KAAA,eACAzD,EAAAC,KAAAuE,SAAAC,SAAAoE,eAAA2R,EAAA1T,EAAAgC,EAAAusC,EAAAb,EAAAjyB,EAAA+yB,QAVAz0C,EAAA,kCAAA+D,IAAA4V,GACA3Z,EAAA,wCAAA+D,IAAAkE,GACAjI,EAAA,+BAAA4H,OACAzI,EAAAC,KAAAC,QAAAM,yBAAA60C,EACAx0C,EAAA,sBAAAiF,MAAA,UAWA9F,EAAAC,KAAAuE,SAAAC,SAAAoE,eAAA,SAAA2R,EAAA1T,EAAAgC,EAAApF,EAAA8wC,EAAAjyB,EAAA+yB,GAAA,GACA,MAAAC,EAAA10C,EAAA,kBAAA+D,MACA4wC,EAAA30C,EAAA,8BAAA+D,MACA2vC,EAAA/5B,OAAAA,EACA+5B,EAAA7wC,QAAAA,EACA6wC,EAAAztC,UAAAA,EACAytC,EAAAhyB,SAAAA,EACAgyB,EAAAzrC,cAAAA,EACAyrC,EAAAC,YAAAA,EAEA,QAAA1rC,GACA,SAAAysC,EAAAruB,eACAouB,GACA,4BAAAE,EAGAf,EAAAj6B,EAAA1T,EAAAgC,EAAApF,EAAA8wC,EAAAjyB,GAFA1hB,EAAA,2BAAAiF,MAAA,SA+FA9F,EAAAC,KAAAuE,SAAAC,SAAAuwC,yBAAA,WACAn0C,EAAA,2DAAAuD,iBACAC,QAAA,YAAA,WACAC,mBAAA,SAAAC,GAGAvE,EAAAC,KAAAuE,SAAAC,SAAAC,mCAAAH,EAAAI,QADA,EACA,WAGA9D,EAAA0D,EAAAI,QAAAi9B,SAAA,wBAAAn8B,QAAA,QACAsN,WAAA,WACAlS,EAAA0D,EAAAI,QAAAi9B,SAAA,wBAAAn8B,QAAA,SACA,UAIA9B,KAAA,WACA,QAAA9C,EAAA,gBAAA+D,OACA/D,EAAAsB,MAAAC,KAAA,WAAA,OAKAvB,EAAA,WAEAb,EAAAC,KAAAuE,SAAAC,SAAAuwC,2BAEAn0C,EAAA,2BAAAkE,GAAA,QAAA,cAAA,WACA0vC,EACAF,EAAA/5B,OACA+5B,EAAAztC,UACAytC,EAAAzrC,cACAyrC,EAAA7wC,QACA6wC,EAAAC,YACAD,EAAAhyB,UAEA1hB,EAAA,2BAAAiF,MAAA,UAGAjF,EAAA,2BAAAkE,GAAA,QAAA,eAAA,WACA,YAAAlE,EAAA0zC,EAAA7wC,SAAAtB,KAAA,cACAvB,EAAA0zC,EAAA7wC,SAAAtB,KAAA,aAAA,aAEAvB,EAAA0zC,EAAA7wC,SAAAtB,KAAA,aAAA,eA7LA,CAmMApC,EAAAC,KAAAuE,SAAAC,UAAAzE,EAAAC,KAAAuE,SAAAC,UAtMA,CAyMAzE,WC9MA,IAAAA,MAAAA,UACAA,MAAAC,KAAAD,MAAAC,KAAAD,MAAAC,QACAD,MAAAC,KAAAoY,MAAArY,MAAAC,KAAAoY,MAAArY,MAAAC,KAAAoY,SAEA,SAAArY,GAmJAA,EAAAC,MAAAD,EAAAC,KAjJA,SAAAoY,GAEArY,EAAAC,KAAAoY,MAAAC,YAAA,WACAtY,EAAAC,KAAAoN,cACAxM,EAAA,sDAAA4H,OAGA5H,EAAA,sDAAAgF,OAEAhF,EAAA,wBAAA8K,KAAA3L,EAAAC,KAAAoN,cAAA,OAAA,SAGArN,EAAAC,KAAAoY,MAAAo9B,uBAAA,SAAA9kC,GAEA,IAAAC,EAAA/P,EAAA,QAAAE,KAAA,yBAGA,GAFAf,EAAA0G,OAAAC,GAAA6P,kBAAA5F,GAEAD,EAAAE,OAAA,CACAhQ,EAAA8C,KAAAgN,EAAAE,OAAA,SAAA0lB,EAAA3xB,GACA,IAAAuP,EAAAtT,EAAA,yBAAA01B,EAAA,MACApiB,EAAArT,YAAA,0BAAAE,SAAA,0BACAmT,EAAAxM,KAAA/C,EAAAA,EAAArC,OAAA,GAAAmzC,cAEA70C,EAAA,2BAAA+E,QAAA,eAAA5E,SAAA,aAAAF,YAAA,iBAIA,IAAA60C,EAAA90C,EAAA,iCACA0+B,EAAAoW,EAAA50C,KAAA,MAEAw+B,GAAAA,EAAAh9B,QAAAoO,EAAAE,SACA0uB,EAAAt7B,QACA0xC,EAAA30C,SAAA,6BAAAF,YAAA,4BAEAD,EAAA8C,KAAAgN,EAAAE,OAAA,WACAhQ,EAAA,UAAA8G,KAAAxF,KAAAA,KAAAI,OAAA,GAAAmzC,cAAA1xC,SAAAu7B,MAIA1+B,EAAA,oBAAAqP,SAAAC,UAAA,GAAA,SAEA,CAEA,IAAA1G,EAAA5I,EAAA,+BAAAgB,IAAA,WAAA,OAAAM,KAAAuH,KAAAC,MAEA9I,EAAA,kBAAA8G,KAAAgJ,EAAAilC,kBACA/0C,EAAA,uBAAA8G,KAAAgJ,EAAAklC,kBACAh1C,EAAA,yBAAA8G,KAAAgJ,EAAAmlC,wBAEAj1C,EAAA,6BAAA0B,OAAA,IAAA1B,EAAA,6BAAA6K,SAAA,YACA7K,EAAA,yBAAA8G,KAAAgJ,EAAAolC,2BACAl1C,EAAA,6BAAAC,YAAA,WAGAk1C,EAAArlC,EAAAuF,0BAAAvF,EAAAslC,mBAEAx1C,GAAAT,EAAAC,KAAAuQ,WACAxQ,EAAAC,KAAAuQ,SAAA0lC,YAAAvlC,EAAAwlC,qBAEA1sC,EAAAlH,OAAA,GACA1B,EAAA,IAAA4I,EAAAG,KAAA,OAAAC,SAAA,QAEA7J,EAAAC,KAAAoY,MAAAC,cACAzX,EAAA,oBAAAiF,MAAA,QACAjF,EAAA,uBAAAmC,YAAA,SAAA,SAAAhD,EAAAC,KAAAuC,gBAEAuQ,WAAA,WAEA/S,EAAAC,KAAAoN,cAOAxM,EAAA,eAAAC,YAAA,cANAD,EAAA,eAAAu1C,QAAA,IAAA,WACAv1C,EAAA,eAAAC,YAAA,iBAOA,KAEAd,EAAAC,KAAA6J,qBAAAC,SAAA,EAAAC,kBAAA,KAKAhK,EAAAC,KAAAoY,MAAAg+B,uBAAA,SAAAllC,EAAA5J,EAAAwF,GACA,IAAA6D,EAAA/P,EAAA,QAAAE,KAAA,yBACAf,EAAA0G,OAAAC,GAAA6P,kBAAA5F,GAGA,IAAA+kC,EAAA90C,EAAA,iCACA0+B,EAAAoW,EAAA50C,KAAA,MACAw+B,GAAAA,EAAAh9B,SACAg9B,EAAAt7B,QACA0xC,EAAA30C,SAAA,6BAAAF,YAAA,4BAEAD,EAAA,UAAA8G,KAAAoF,GAAA/I,SAAAu7B,IAGA1+B,EAAA,oBAAAqP,SAAAC,UAAA,GAAA,MAGA,IAAA6lC,EAAA,SAAAM,EAAAC,GACAA,IAEA11C,EAAA,yBAAAC,YAAA,UAEAD,EAAA,qBAAA8G,KAAA2uC,GAEAt2C,EAAAC,KAAAgU,4BAIApT,EAAA,WAGAA,EAAAiE,UAAAC,GAAA,mBAAA,oBAAA,WAEA,IAAAyxC,EAAA31C,EAAAsB,MAAAsB,KAAA,gBACAqD,EAAAjG,EAAA,cAAA+D,MACAyH,EAAAxL,EAAA,gBAAA+D,MAEA5E,EAAA0G,OAAAC,GAAAC,cACA/F,EAAA,4BAAA41C,KAAA,gCAAAD,EAAA,cAAA1vC,EAAA,YAAAuF,EAAA,SAAAzE,EAAA8uC,EAAAC,GACA32C,EAAA0G,OAAAC,GAAAW,cACA,SAAAovC,EACA12C,EAAA0G,OAAAC,GAAAe,mBAAA,2CAGA7G,EAAA,oBAAAiF,MAAA,YAKAjF,EAAAiE,UAAAC,GAAA,QAAA,eAAA,WAEA/E,EAAAC,KAAAoN,eAAArN,EAAAC,KAAAoN,cACArN,EAAAC,KAAAoY,MAAAC,gBAIAtY,EAAAC,KAAAoY,MAAAC,gBA5IA,CAgJAtY,EAAAC,KAAAoY,OAAArY,EAAAC,KAAAoY,OAlJA,CAoJArY,WCxJA,SAAAa,GAEAA,EAAAuD,gBAAA,SAAAV,EAAA2V,GAEA,IAAAwR,GACAxmB,QAAA,UAAA,YAAA,WACAC,mBAAA,cAGAsyC,EAAAz0C,KAEAy0C,EAAAC,YAEA,IAAAjsB,EAAA/pB,EAAA6C,GACAA,EAAAA,EAEAkzC,EAAArd,KAAA,WACAqd,EAAAC,SAAAh2C,EAAAyd,UAAAuM,EAAAxR,GAEAuR,EAAA/e,IAAA,SAAA9G,GAAA,QAAA,SAAAR,GAEA,IAAA1D,EAAAsB,MAAAC,KAAA,YAAA,CAgBA,IAAA00C,EAAAj2C,EAAAsB,MAAAC,KAAA,cACA20C,EAAA19B,EAAAhV,OAAAnC,QAAA40C,GACAE,EAAAD,GAAA19B,EAAAhV,OAAA9B,OAAA,EAAA,EAAAw0C,EAAA,EACAl2C,EAAAsB,MAAAC,KAAA,aAAAiX,EAAAhV,OAAA2yC,SAEAv2C,IAAA4Y,EAAA/U,oBACA+U,EAAA/U,mBAAAC,OAMAqyC,EAAA5xC,OAAA,WACA,IAAA4lB,EAAAxoB,KAAA,YAAA,CAGA4K,QAAAgC,IAAA,aAaA,IAAA8nC,EAAAlsB,EAAAxoB,KAAA,cAEA40C,EADA39B,EAAAhV,OAAAnC,QAAA40C,GACA,EACAlsB,EAAAxoB,KAAA,aAAAiX,EAAAhV,OAAA2yC,MAGAJ,EAAArd,QAGA14B,EAAAyhB,GAAAle,gBAAA,SAAAiV,GAEA,OAAAlX,KAAAwB,KAAA,WACA,QAAAlD,GAAAI,EAAAsB,MAAAsB,KAAA,mBAAA,CACA,IAAAmzC,EAAA,IAAA/1C,EAAAuD,gBAAAjC,KAAAkX,GACAxY,EAAAsB,MAAAsB,KAAA,kBAAAmzC,OAhFA,CAoFAv4B,QCpFA,IAAAre,MAAAA,UACAA,MAAA+Z,UAAA/Z,MAAA+Z,UAAA/Z,MAAA+Z,aAEA,SAAA/Z,IACA,SAAA+Z,GAGA,SAAAk9B,IAEA,IAAAzN,EAAA3oC,EAAA,cAAA,uBAAA4C,KAAA,kBACAimC,EAAA7oC,EAAA,cAAA,qBAAA4C,KAAA,kBAEA+lC,GAAAE,GACA,MAAAF,EAAAl1B,SACA,IAAAzT,EAAA,sBAAA+D,OAAA,MAAA8kC,EAAAp1B,QAAArJ,KAAAqK,MAAAk0B,EAAAl1B,QAAArJ,KAAAqK,MAAAo0B,EAAAp1B,UACAo1B,EAAAp1B,KAAAk1B,EAAAl1B,QA+DA,SAAA4iC,EAAAC,GACA,IAAAC,EAAAv2C,EAAA,gCAAA+D,MAKA,GAHAuyC,GACAt2C,EAAA,oBAAA4H,OAEA,SAAA2uC,EAAA,CAEAv2C,EAAA,cAAA4H,OACA5H,EAAA,eAAAgF,OACAhF,EAAA,yBAAA8K,KAAA,uCAGA,IAAA+9B,EAAApoC,OAAAT,EAAA,sBAAA+D,MAAA,cACA,IAAAtD,OACAooC,GAAAA,EAAArD,UAIAqD,GAAA,IAAApoC,QAAA+1C,SAAA,EAAA,UACAx2C,EAAA,0BAAA8K,KAAA,OACA9K,EAAA,uBAAAuB,KAAA,sBAAA,kFAIAvB,EAAA,0BAAA8K,KAAA,MACA9K,EAAA,uBAAAuB,KAAA,sBAAA,0FAVAvB,EAAA,0BAAA8K,KAAA,OACA9K,EAAA,uBAAAuB,KAAA,sBAAA,qFAcAvB,EAAA,cAAAgF,OACAhF,EAAA,eAAA4H,OACA5H,EAAA,yBAAA8K,KAAA,yCAEA9K,EAAA,0BAAA8K,KAAA,OACA9K,EAAA,uBAAAuB,KAAA,sBAAA,kGA3FApC,EAAA+Z,UAAAC,WAAA,WACAnZ,EAAAiE,UAAA+G,IAAA,UAAA,qBACAhL,EAAAiE,UAAAC,GAAA,UAAA,oBAAA,SAAAR,GAEA6P,WAAAvT,EAAA,cAAA,qBAAA4C,KAAA,kBACA,MAAA2Q,WAAAE,SACA,IAAAzT,EAAA,wBAAA+D,OACAwP,WAAAE,KAAAzT,EAAA,wBAAA+D,OAEAwP,WAAAE,KAAA,SAMAzT,EAAAiE,UAAAC,GAAA,YAAA,oBAAA,WACAkyC,IACAC,MAGAr2C,EAAAiE,UAAAC,GAAA,YAAA,sBAAA,WACAkyC,IACAC,MAGAr2C,EAAAiE,UAAA+G,IAAA,QAAA,yBAAA9G,GAAA,QAAA,wBAAA,WAGAlE,EAAA,gCAAA+D,IAAA,SAAA/D,EAAA,gCAAA+D,MAAA,SAAA,SAEAsyC,MAEAA,GAAA,GAEAr2C,EAAAiE,UAAAC,GAAA,SAAA,yBAAA,WAEA,IAAAuyC,EAAAz2C,EAAA,0BAAAkF,GAAA,YACAlF,EAAA,iBAAAmC,YAAA,UAAAs0C,KAIAz2C,EAAA,uBAAAkE,GAAA,YAAA,cAAA,SAAAR,GAEA,IAAAgzC,EAAA12C,EAAA,cAAA,uBAAA4C,KAAA,kBACA+zC,EAAA32C,EAAA,cAAA,qBAAA4C,KAAA,kBAEA8zC,GAAAC,GACA,OAAAD,EAAAjjC,QAAA,OAAAkjC,EAAAljC,QACAkjC,EAAAljC,KAAAijC,EAAAjjC,WAnEA,CAmHAtU,EAAA+Z,WAAA/Z,EAAA+Z,WApHA,CAqHA/Z,WCxHA,SAAAa,GAEAA,EAAAyhB,GAAAm1B,mBAAA,SAAAp+B,GAEA,IAAAq+B,EAAA72C,EAAAsB,MAEA00C,EAAAh2C,EAAAyd,QACAq5B,oBAAA,YACAC,mBAAA,GACAC,uBAAA,GACAC,oBAAAr3C,EACAs3C,aAAA,GACAC,sBAAA,IACAC,uBAAA,IACAC,oBAAAz3C,GACA4Y,GAIA,SAAA8+B,EAAA10C,EAAAizC,EAAAvlC,GAEA,IAAAinC,EAAAp4C,MAAA0G,OAAA4D,MAAA+tC,mBAAA,gCAAA9rC,mBAAAvM,MAAA0G,OAAA4xC,aAAAC,YAAA,iBAAA1B,EAAA2B,UAAA,QAAA3B,EAAA4B,sBAAA,GAAA,MAAA5B,EAAA4B,uBAAA,MAAA5B,EAAA6B,sBACAx8B,EAAA,IAAAsE,MACAtE,EAAAH,IAAAq8B,EACAl8B,EAAA+F,OAAA,WACAy1B,EAAA32C,KAAA,oBAAAqB,KAAA,MAAAg2C,GACAp4C,MAAA0G,OAAAC,GAAAgyC,kBAAA9B,EAAAgB,wBACA73C,MAAA0G,OAAAC,GAAA6P,kBAAA,uBAEA3V,EAAAg2C,EAAAc,qBAAA/yC,IAAA2H,mBAAAvM,MAAA0G,OAAA4xC,aAAAC,aAEAb,EAAA32C,KAAA,SAAA6D,IAAA,IAKA,SAAAg0C,EAAAznC,EAAAmlB,EAAAuiB,GAEA,KAAA1nC,EAAA5J,QAAA,GAAAmwC,EAAAoB,oBAEAj4C,EAAAkG,MACAC,IAAA6vC,EAAAkB,aACA9wC,KAAA,MACAC,SAAA,OACAC,YAAA,kCACAC,SAAA,SAAAC,GACA,KAAAA,EAAAE,aAAA9G,GAAA4G,EAAAG,cAAA,GAAAH,EAAAG,aAAAC,QACAzH,MAAA0G,OAAAC,GAAAe,mBAAA,6DAGA1H,MAAA0G,OAAA4xC,aAAAS,UAAA1xC,EAAAG,aAAAwxC,aAAA3xC,EAAAG,aAAAyxC,QACAj5C,MAAA0G,OAAA4xC,aAAAY,KAAA7xC,EAAAG,aAAAyxC,QACAj5C,MAAA0G,OAAA4xC,aAAAa,OAAA9xC,EAAAG,aAAA4xC,OACAp5C,MAAA0G,OAAA4xC,aAAAe,gBAAAhyC,EAAAG,aAAA8xC,gBAGA5B,EAAAoB,sBACA94C,MAAA0G,OAAA4xC,aAAAiB,mBAAA7B,EAAApzB,cAAA,sBAAAuyB,EAAAqB,eAAAC,EAAAS,EAAAY,QAOAC,MAAA,sDAAAZ,EAAA,KACAnB,EAAAoB,sBACApB,EAAA32C,KAAA,SAAA6D,IAAA,IACA5E,MAAA0G,OAAAC,GAAAgyC,kBAAA9B,EAAAgB,wBACA73C,MAAA0G,OAAAC,GAAA6P,kBAAA,uBAIA,SAAAgjC,EAAA/1C,EAAAizC,EAAAvlC,IAyCA,OAhGAumC,EAAAoB,oBAAA,EA0DAj4C,EAAA,WACAb,MAAA0G,OAAAC,GAAA+yC,OAEAhC,EAAA7rC,IAAA,SAAA,sBAAA9G,GAAA,SAAA,qBAAA,SAAAR,GACApC,KAAAw3C,MAAAp3C,QAAA,IACAvC,MAAA0G,OAAAC,GAAAizC,kBAAA/C,EAAAgB,wBACA73C,MAAA0G,OAAAC,GAAA4P,kBAAA,sBAGA1V,EAAAkG,MACAC,IAAA6vC,EAAAkB,aACA9wC,KAAA,MACAC,SAAA,OACAC,YAAA,kCACAC,SAAA,SAAAC,GACA,KAAAA,EAAAE,aAAA9G,GAAA4G,EAAAG,cAAA,GAAAH,EAAAG,aAAAC,QACAzH,MAAA0G,OAAAC,GAAAe,mBAAA,6DAGA1H,MAAA0G,OAAA4xC,aAAAS,UAAA1xC,EAAAG,aAAAwxC,aAAA3xC,EAAAG,aAAAyxC,QACAj5C,MAAA0G,OAAA4xC,aAAAY,KAAA7xC,EAAAG,aAAAyxC,QACAj5C,MAAA0G,OAAA4xC,aAAAa,OAAA9xC,EAAAG,aAAA4xC,OACAp5C,MAAA0G,OAAA4xC,aAAAe,gBAAAhyC,EAAAG,aAAA8xC,gBAEA5B,EAAAoB,oBAAA,EAEA94C,MAAA0G,OAAA4xC,aAAAiB,mBAAAh1C,EAAAI,OAAAkyC,EAAAqB,eAAAC,EAAAS,EAAAY,KACAx5C,MAAA0G,OAAAC,GAAAgyC,kBAAA9B,EAAAgB,wBACA73C,MAAA0G,OAAAC,GAAA6P,kBAAA,gCAUArU,MAjHA,CAoHAkc,QCpHA,IAAAw7B,sBAAA,SAAAxgC,EAAAygC,GAEA33C,KAAA23C,aAAAA,EAEA33C,KAAA43C,oBAAA,GACA53C,KAAAgF,YAAA,GACAhF,KAAA22C,oBAAA,EAEA32C,KAAAkX,QAAAxY,EAAAyd,QACA07B,UAAA,GACAC,WAAA,GACAlB,UAAA,GACAmB,IAAA,GACAhB,KAAA,GACAiB,UAAA,GACAhB,OAAA,GACAE,gBAAA,GACAd,WAAA,GACA6B,oBAAA,QACAC,kBAAA,GACAC,YAAA,IACApC,gBAAA,YAAA,aAAA,YAAA,kBAAA,qBAAA,0EACA,2BAAA,oEAAA,aAAA,gCAAA,gCACA7+B,GAEAlX,KAAAo4C,gBAAA,SAAAh2C,GAEA,GAAAA,EAAAi2C,iBAAA,CACA,IAAAC,EAAAn0C,KAAAo0C,MAAA,IAAAn2C,EAAAo2C,OAAAp2C,EAAAq2C,OAFAz4C,KAGA23C,aAAA/4C,KAAA,kBAAAkC,IAAA,QAAAw3C,EAAA,KAAAr4C,KAAA,gBAAAq4C,GAHAt4C,KAIA23C,aAAA/4C,KAAA,uBAAA4K,KAAA8uC,EAAA,UAJAt4C,KAOA23C,aAAA/4C,KAAA,uBAAA4K,KAAA,sBAIAxJ,KAAA04C,gBAAA,SAAA1pC,EAAA5J,GACAmwC,KAAAoC,aAAA/4C,KAAA,aAAAC,SAAA,WAGAmB,KAAA24C,eAAA,SAAAnqC,EAAApJ,EAAA4J,GACAA,GAAA,KAAAA,EAAA5J,QACAkyC,MAAA,YAIAt3C,KAAA44C,aAAA,SAAA5pC,EAAA5J,EAAAwF,GACA0sC,MAAA,sDAAA1sC,EAAA,OAIA8sC,sBAAA38B,UAAAq8B,mBAAA,SAAAyB,EAAAC,EAAAC,EAAAC,EAAAC,GAEA,GAAAJ,EAAA,CACA,GAAAA,EAAA3yB,KAAAlmB,KAAAkX,QAAAihC,YAEA,OADAb,MAAA,oBAAAt3C,KAAAkX,QAAAihC,YAAA,IAAA,eACA,EAEA,GAAAn4C,KAAAkX,QAAA6+B,eAAA31C,OAAA,IAAAvC,MAAAq7C,WAAAC,gBAAAN,EAAA74C,KAAAkX,QAAA6+B,gBAQA,OANA/1C,KAAAkX,QAAAghC,kBAAA93C,OAAA,EACAk3C,MAAAt3C,KAAAkX,QAAAghC,mBAGAZ,MAAA,wBAAAt3C,KAAAkX,QAAA+gC,sBAEA,EAGAj4C,KAAAo5C,WAAAP,EAAAC,EAAAC,EAAAC,EAAAC,GAGA,OAAA,GAGAvB,sBAAA38B,UAAAq+B,WAAA,SAAAP,aAAAC,uBAAAC,qBAAAC,wBAAAC,yBAEA,IAAA1D,KAAAv1C,KAEAq5C,SAAA,GAEA,oBAAAC,WAEAD,SAAAr5C,KAAAkX,QAAA4gC,YAGA,IAAAyB,WAAA,IAAAD,SAEAt5C,KAAAkX,QAAAk/B,WAAAp2C,KAAAkX,QAAA0/B,UAAAiC,aAAAzpC,KACApP,KAAA43C,oBAAAiB,aAAAzpC,KACApP,KAAAgF,YAAAnH,MAAA0G,OAAA4D,MAAAqxC,SAAA37C,MAAA0G,OAAA4D,MAAAsxC,iBAAAZ,aAAAzpC,OAEAmqC,WAAAxpC,OAAA,MAAA/P,KAAAkX,QAAAk/B,YACAmD,WAAAxpC,OAAA,MAAA/P,KAAAkX,QAAA6gC,KACAwB,WAAAxpC,OAAA,eAAAlS,MAAA0G,OAAA4D,MAAAqxC,SAAA37C,MAAA0G,OAAA4D,MAAAsxC,iBAAAZ,aAAAzpC,QACAmqC,WAAAxpC,OAAA,kBAAA/P,KAAAkX,QAAA6/B,MACAwC,WAAAxpC,OAAA,iBAAA/P,KAAAkX,QAAA8gC,WACAuB,WAAAxpC,OAAA,SAAA/P,KAAAkX,QAAA8/B,QACAuC,WAAAxpC,OAAA,YAAA/P,KAAAkX,QAAAggC,iBACAqC,WAAAxpC,OAAA,0BAAAspC,UACAE,WAAAxpC,OAAA,OAAA8oC,mBAEAv6C,IAAAi3C,KAAAoC,eACApC,KAAAoC,aAAA/4C,KAAA,kBAAAkC,IAAA,QAAA,MAAAb,KAAA,gBAAA,GACAs1C,KAAAoC,aAAA/4C,KAAA,aAAAD,YAAA,WAGAD,EAAAkG,MACAC,IAAA7E,KAAAkX,QAAA2gC,UACA/yC,KAAA,OACAkK,IAAA,WACA,IAEA0qC,EAFAC,EAAAj7C,EAAAk7C,aAAA5qC,MAMA,OALA2qC,EAAAE,QACAF,EAAAE,OAAAlgC,iBAAA,YAAA+/B,EAEAnE,KAAAoC,aADA,SAAAv1C,QAAA9D,IAAA26C,wBAAAA,wBAAA72C,EAAAs3C,GAAAnE,KAAA6C,gBAAAh2C,EAAAs3C,MACA,GAEAC,GAGAr0C,QAAA,SAAAkJ,OAAApJ,OAAA4J,UACA1Q,IAAAw6C,uBACAgB,KAAAhB,uBAAAtqC,OAAApJ,OAAA4J,IAAAumC,KAAAoC,aAAApC,KAAAr+B,QAAAk/B,WAAAb,KAAAqC,oBAAArC,KAAAvwC,cAGAuwC,KAAAoD,eAAAnqC,OAAApJ,OAAA4J,MAGApE,MAAA,SAAAoE,IAAA5J,OAAAwF,YACAtM,IAAAy6C,qBACAe,KAAAf,qBAAA/pC,IAAA5J,OAAAwF,MAAA2qC,OAGAA,KAAAqD,aAAA5pC,IAAA5J,OAAAwF,QAGA3F,SAAA,SAAA+J,IAAA5J,aACA9G,IAAA06C,wBACAc,KAAAd,wBAAAhqC,IAAA5J,OAAAmwC,KAAAoC,eAGApC,KAAAmD,gBAAA1pC,IAAA5J,SAIA9D,KAAAi4C,WAEA/mC,OAAA,EACAxN,aAAA,EACA+0C,aAAA","file":"site-trip.min.js","sourcesContent":["var YouLi = YouLi ? YouLi : {};\r\nYouLi.Trip = YouLi.Trip ? YouLi.Trip : {};\r\nYouLi.Trip.Program = YouLi.Trip.Program ? YouLi.Trip.Program : {};\r\n\r\n(function (YouLi) {\r\n (function (Trip) {\r\n (function (Program) {\r\n\r\n var scrollerAdvanceAmount = 120;\r\n\r\n YouLi.Trip.Program.ProgramItems = null;\r\n YouLi.Trip.Program.ItemHeight = 530;\r\n YouLi.Trip.Program.ProgramSelectedDate = \"\";\r\n YouLi.Trip.Program.ProgramFilteredIds = [];\r\n YouLi.Trip.Program.SaveDone = false;\r\n YouLi.Trip.Program.TargetElementForResponse = undefined;\r\n\r\n YouLi.Trip.Program.GoToDate = function (selectedDate) {\r\n YouLi.Trip.Program.ProgramSelectedDate = selectedDate;\r\n YouLi.Trip.Program.FilterItems();\r\n }\r\n\r\n YouLi.Trip.Program.FilterItems = function () {\r\n\r\n // Update the activated menu\r\n $(\"#content-trip-program .trip-dates-menu .nav li\").removeClass(\"active\");\r\n\r\n var element = $(\"#content-trip-program .trip-dates-menu .nav\").find(\"li[data-date='\" + YouLi.Trip.Program.ProgramSelectedDate + \"']\");\r\n element.addClass(\"active\");\r\n\r\n // find the IDs to show and hide\r\n var itemsToShow = $.grep(YouLi.Trip.Program.ProgramItems, function (n, i) {\r\n var startDateTime = moment(n.StartDateTime);\r\n var endDateTime = moment(n.EndDateTime);\r\n var selectedDateMoment = moment(YouLi.Trip.Program.ProgramSelectedDate);\r\n\r\n if (n.EndDateTime === null)\r\n return startDateTime.isSame(selectedDateMoment, 'date');\r\n\r\n return selectedDateMoment.isBetween(startDateTime, endDateTime, 'date', '[]');\r\n });\r\n\r\n YouLi.Trip.Program.ProgramFilteredIds = $.map(itemsToShow, function (n, i) {\r\n return n.ScheduleItemId;\r\n });\r\n\r\n $programGrid.isotope({\r\n filter: function () {\r\n // _this_ is the item element. Get text of element's .number\r\n if (YouLi.Trip.Program.ProgramSelectedDate === \"all\")\r\n return true;\r\n // return true to show, false to hide\r\n return YouLi.Trip.Program.ProgramFilteredIds.indexOf($(this).find(\".program-item-contents\").attr('data-id')) > -1;\r\n }\r\n });\r\n }\r\n\r\n YouLi.Trip.Program.UpdateMenuNav = function () {\r\n\r\n if (YouLi.Trip.StyleName) {\r\n return 0;\r\n }\r\n\r\n if ($(\"#content-trip-program .trip-dates-menu\").length > 0) {\r\n if (YouLi.Trip.CurrentSection == \"program\") {\r\n var scrollerNavLeft = $(\"#content-trip-program .scroller-nav\").position().left;\r\n var currentLeft = $(\"#content-trip-program .trip-dates-menu li\").position().left;\r\n var lastItem = $(\"#content-trip-program .trip-dates-menu li:last-child\");\r\n var lastItemRight = lastItem.position().left + lastItem.outerWidth();\r\n\r\n $(\"#content-trip-program .scroller-nav .left\").toggleClass(\"disabled\", currentLeft >= 0);\r\n $(\"#content-trip-program .scroller-nav .right\").toggleClass(\"disabled\", lastItemRight < scrollerNavLeft);\r\n\r\n // Fix the max width of program menu\r\n $(\"#content-trip-program .trip-dates-menu\").css(\"max-width\", \"0px\");\r\n var containerWidth = $(\".content-trip-details-main\").width();\r\n $(\"#content-trip-program .trip-dates-menu\").css(\"max-width\", containerWidth + \"px\");\r\n }\r\n }\r\n }\r\n\r\n YouLi.Trip.Program.RefreshLayout = function () {\r\n if (YouLi.Trip.StyleName) {\r\n return;\r\n }\r\n // Reset height of all items first\r\n if ($(window).width() > 767) {\r\n $(\".program-item\").height(YouLi.Trip.Program.ItemHeight).css(\"max-height\", YouLi.Trip.Program.ItemHeight);\r\n }\r\n else {\r\n $(\".program-item\").height(\"auto\").css(\"max-height\", YouLi.Trip.Program.ItemHeight)\r\n }\r\n\r\n $cachedWindowWidth = $(window).width();\r\n\r\n RefreshItemExpandVisibility();\r\n\r\n if ($programGrid.data('isotope')) {\r\n $programGrid.isotope('layout');\r\n }\r\n\r\n }\r\n\r\n RefreshItemExpandVisibility = function (element) {\r\n $(\".program-item\").each(function (element) {\r\n // update the visibility of the show more for this item\r\n $(this).find(\".show-more\").toggle($(this).height() < $(this).find(\".program-item-contents\").height());\r\n });\r\n }\r\n\r\n ShowItemDetails = function (gridItemElement) {\r\n $(gridItemElement).find(\".program-item-contents\").clone().appendTo($(\"#ProgramItemDialog .modal-body\").empty()).find(\".show-more\").remove();\r\n $currentlySelectedItem = $(gridItemElement);\r\n\r\n // (re-)init optional checkbox in popup\r\n $(\"#ProgramItemDialog .multistate-check-schedule-item-response\").multiStateCheck({\r\n states: [\"unchecked\", \"checked\"],\r\n onAfterChangeState: function (e) {\r\n\r\n const applyToGang = true;\r\n YouLi.Trip.Schedule.Response.MultiStateCheckUpdateAndTakeAction(e.target, applyToGang, function () {\r\n\r\n if ($(\"#PreviewMode\").val() != \"True\") {\r\n // update the grid version of this item's checkbox, too\r\n // update any other response checkboxes for the item (ie., if there are any showing in \r\n $(\".grid .program-item-contents[data-id=\" + programItemId + \"] .multistate-check-schedule-item-response\").attr(\"data-state\", $(e.target).attr(\"data-state\"));\r\n }\r\n\r\n });\r\n }\r\n });\r\n }\r\n\r\n $(document).on(\"shown.bs.modal\", \"#ResponseDialogYes\", function (e) {\r\n YouLi.Trip.Program.SaveDone = false;\r\n });\r\n\r\n $(document).on('hidden.bs.modal', \"#ResponseDialogYes\", function (e) {\r\n if (!YouLi.Trip.Program.SaveDone && YouLi.Trip.Program.TargetElementForResponse) {\r\n // reset the multistate check to the previous value\r\n $(YouLi.Trip.Program.TargetElementForResponse).data(\"multiStateCheck\").revert();\r\n YouLi.Trip.Program.TargetElementForResponse = undefined;\r\n }\r\n });\r\n\r\n var $programGrid = null;\r\n var $cachedWindowWidth = null;\r\n var $currentlySelectedItem = null;\r\n\r\n var ProgramItemDialogGoToNext = function () {\r\n var $nextItem = $currentlySelectedItem.first().next();\r\n if ($nextItem.length == 0) {\r\n $nextItem = $(\".grid .grid-item\").first();\r\n }\r\n ShowItemDetails($nextItem);\r\n };\r\n\r\n var ProgramItemDialogGoToPrev = function () {\r\n var $prevItem = $currentlySelectedItem.first().prev();\r\n if ($prevItem.length == 0) {\r\n $prevItem = $(\".grid .grid-item\").last();\r\n }\r\n ShowItemDetails($prevItem);\r\n };\r\n\r\n $(function () {\r\n\r\n RefreshItemExpandVisibility();\r\n\r\n $cachedWindowWidth = $(window).width();\r\n\r\n $('.action-done-popover').popover({\r\n trigger: \"manual\",\r\n template: '<div class=\"popover notification\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'\r\n });\r\n\r\n $(\".open-full-link\").on(\"click\", function () {\r\n if ($(window).width() < 767) {\r\n $(this).closest(\".program-item\").height(\"auto\").css(\"max-height\", \"unset\");\r\n $(this).closest(\".program-item\").find(\".show-more\").hide();\r\n $programGrid.isotope('layout');\r\n }\r\n else {\r\n ShowItemDetails($(this).closest(\".grid-item\"));\r\n\r\n $(\"#ProgramItemDialog\").modal(\"show\");\r\n }\r\n });\r\n\r\n $(document).on(\"click\", \"#ProgramItemDialog .next\", function () {\r\n ProgramItemDialogGoToNext();\r\n });\r\n\r\n $(document).on(\"click\", \"#ProgramItemDialog .prev\", function () {\r\n ProgramItemDialogGoToPrev();\r\n });\r\n\r\n $(document).on(\"keydown\", function (e) {\r\n if ($(\"#ProgramItemDialog\").is(\":visible\")) {\r\n if (e.keyCode == 37) {\r\n ProgramItemDialogGoToPrev();\r\n }\r\n else if (e.keyCode == 39) {\r\n ProgramItemDialogGoToNext();\r\n }\r\n }\r\n });\r\n\r\n if (YouLi.Trip.StyleName === \"\") {\r\n $programGrid = $('.grid').imagesLoaded(function () {\r\n $programGrid.isotope({\r\n itemSelector: '.grid-item',\r\n percentPosition: true,\r\n masonry: {\r\n // use element for option\r\n //columnWidth: '.grid-sizer'\r\n }\r\n });\r\n });\r\n }\r\n\r\n $(document).on('click', '.program-item-date', function () {\r\n YouLi.Trip.Program.ProgramSelectedDate = $(this).data(\"date\");\r\n YouLi.Trip.Program.FilterItems();\r\n });\r\n\r\n $(document).on('click', '#content-trip-program .trip-dates-menu .nav li', function () {\r\n YouLi.Trip.Program.ProgramSelectedDate = $(this).data(\"date\");\r\n YouLi.Trip.Program.FilterItems();\r\n });\r\n\r\n $(document).on(\"click\", \"#content-trip-program .scroller-nav .right:not(.disabled)\", function () {\r\n var lastItem = $(\"#content-trip-program .trip-dates-menu li:last-child\");\r\n var lastItemRight = lastItem.position().left + lastItem.outerWidth();\r\n var currentLeft = $(\"#content-trip-program .trip-dates-menu li\").position().left;\r\n\r\n var newLeft = currentLeft;\r\n if (lastItemRight >= $(\"#content-trip-program .scroller-nav\").position().left) {\r\n newLeft = Math.min(newLeft - scrollerAdvanceAmount, 0);\r\n $(\"#content-trip-program .trip-dates-menu li\").css(\"left\", newLeft);\r\n }\r\n\r\n YouLi.Trip.Program.UpdateMenuNav();\r\n\r\n });\r\n $(document).on(\"click\", \"#content-trip-program .scroller-nav .left:not(.disabled)\", function () {\r\n var currentLeft = $(\"#content-trip-program .trip-dates-menu li\").position().left;\r\n var newLeft = currentLeft;\r\n if (currentLeft < 0) {\r\n newLeft = Math.min(newLeft + scrollerAdvanceAmount, 0);\r\n $(\"#content-trip-program .trip-dates-menu li\").css(\"left\", newLeft);\r\n }\r\n\r\n YouLi.Trip.Program.UpdateMenuNav();\r\n\r\n });\r\n\r\n $(window).resize(function () {\r\n YouLi.Trip.Program.UpdateMenuNav();\r\n\r\n if ($cachedWindowWidth != $(window).width()) {\r\n YouLi.Trip.Program.RefreshLayout();\r\n }\r\n });\r\n YouLi.Trip.Program.RefreshLayout();\r\n\r\n $(document).on(\"click\", \"#content-trip-program .invitees-avatars-list\", function () {\r\n\r\n // only allow this if the All Invitees tab is visible to this invitee\r\n if (YouLi.Trip.ShowInviteesAllTab) {\r\n\r\n YouLi.Common.UI.ShowLoading();\r\n\r\n let itemElement = $(this).closest(\".program-item-contents\");\r\n let programItemId = $(itemElement).data(\"id\");\r\n let inviteeId = $(\"#InviteeId\").val();\r\n\r\n $.ajax({\r\n url: `/trip/itineraryparticipants/?id=${programItemId}&inviteeid=${inviteeId}`,\r\n type: \"GET\",\r\n dataType: \"json\",\r\n contentType: \"application/json; charset=utf-8\",\r\n complete: function (response) {\r\n YouLi.Common.UI.HideLoading();\r\n if (response.status === 500 || (response.responseJSON != undefined && response.responseJSON.success == false)) {\r\n YouLi.Common.UI.ShowStandardDialog(\"An error occurred when loading.\");\r\n }\r\n else {\r\n $(\"#invitees-dialog-content\").html(response.responseText);\r\n $('#invitees-dialog').modal('show');\r\n }\r\n }\r\n });\r\n }\r\n });\r\n });\r\n\r\n }(YouLi.Trip.Program ? YouLi.Trip.Program : {}));\r\n }(YouLi.Trip ? YouLi.Trip : {}));\r\n}(YouLi ? YouLi : {}));\r\n","var YouLi = YouLi ? YouLi : {};\r\nYouLi.Trip = YouLi.Trip ? YouLi.Trip : {};\r\nYouLi.Trip.Itinerary = YouLi.Trip.Itinerary ? YouLi.Trip.Itinerary : {};\r\n\r\n(function (YouLi) {\r\n (function (Trip) {\r\n (function (Itinerary) {\r\n\r\n var scrollerAdvanceAmount = 120;\r\n\r\n YouLi.Trip.Itinerary.ItineraryItems = null;\r\n YouLi.Trip.Itinerary.ScheduleItemsOnMap = null;\r\n YouLi.Trip.Itinerary.ItinerarySelectedDate = \"\";\r\n YouLi.Trip.Itinerary.OutstandingResponseItineraryItemId = undefined;\r\n\r\n YouLi.Trip.Itinerary.GoToDate = function (selectedDate) {\r\n YouLi.Trip.Itinerary.ItinerarySelectedDate = selectedDate;\r\n YouLi.Trip.Itinerary.FilterItems();\r\n }\r\n\r\n YouLi.Trip.Itinerary.IdentifyItem = function (itineraryItemId) {\r\n // $(\".panel[data-id='\" + itineraryItemId + \"']\").addClass(\"highlighted\");\r\n $(\".panel[data-id='\" + itineraryItemId + \"']\").fadeTo(500, 0.3, function () {\r\n $(\".panel[data-id='\" + itineraryItemId + \"']\").fadeTo(500, 1);\r\n });\r\n //setTimeout(function () {\r\n // $(\".panel[data-id='\" + itineraryItemId + \"']\").removeClass(\"highlighted\");\r\n //}, 2000);\r\n }\r\n\r\n YouLi.Trip.Itinerary.FilterItems = function () {\r\n\r\n // Update the activated menu\r\n $(\"#content-trip-itinerary .trip-dates-menu .nav li\").removeClass(\"active\");\r\n\r\n var element = $(\"#content-trip-itinerary .trip-dates-menu .nav\").find(\"li[data-date='\" + YouLi.Trip.Itinerary.ItinerarySelectedDate + \"']\");\r\n element.addClass(\"active\");\r\n\r\n // Update the itinerary list\r\n if (YouLi.Trip.Itinerary.ItinerarySelectedDate == \"highlights\") {\r\n // show only highlighted\r\n var itemsToShow = $.grep(YouLi.Trip.Itinerary.ItineraryItems, function (n, i) {\r\n return n.HighlightFlag;\r\n });\r\n\r\n var idsToShow = $.map(itemsToShow, function (n, i) {\r\n return n.ScheduleItemId;\r\n });\r\n\r\n var elementsToShow = $('.itinerary-accordion .itinerary-accordion-item').filter(function (i, e) {\r\n return idsToShow.indexOf($(this).attr('data-id')) > -1\r\n });\r\n\r\n var elementsToHide = $('.itinerary-accordion .itinerary-accordion-item').filter(function (i, e) {\r\n return idsToShow.indexOf($(this).attr('data-id')) == -1\r\n });\r\n\r\n $(elementsToShow).show();\r\n $(elementsToHide).hide();\r\n\r\n if (elementsToShow.length == 0) {\r\n $(\".nothing-scheduled-message\").show();\r\n } else {\r\n $(\".nothing-scheduled-message\").hide();\r\n }\r\n\r\n }\r\n else if (YouLi.Trip.Itinerary.ItinerarySelectedDate == \"all\") {\r\n $(\".nothing-scheduled-message\").hide();\r\n $('.itinerary-accordion .itinerary-accordion-item').show();\r\n }\r\n else {\r\n // find the IDs to show and hide\r\n var itemsToShow = $.grep(YouLi.Trip.Itinerary.ItineraryItems, function (n, i) {\r\n var startDateTime = moment(n.StartDateTime);\r\n var endDateTime = moment(n.EndDateTime);\r\n var selectedDateMoment = moment(YouLi.Trip.Itinerary.ItinerarySelectedDate);\r\n\r\n if (n.EndDateTime === null)\r\n return startDateTime.isSame(selectedDateMoment, 'date');\r\n\r\n return selectedDateMoment.isBetween(startDateTime, endDateTime, 'date', '[]');\r\n });\r\n\r\n var idsToShow = $.map(itemsToShow, function (n, i) {\r\n return n.ScheduleItemId;\r\n });\r\n\r\n var elementsToShow = $('.itinerary-accordion .itinerary-accordion-item').filter(function (i, e) {\r\n return idsToShow.indexOf($(this).attr('data-id')) > -1\r\n });\r\n\r\n var elementsToHide = $('.itinerary-accordion .itinerary-accordion-item').filter(function (i, e) {\r\n return idsToShow.indexOf($(this).attr('data-id')) == -1\r\n });\r\n\r\n $(elementsToShow).show();\r\n\r\n $(elementsToHide).hide();\r\n\r\n if (elementsToShow.length == 0) {\r\n $(\".nothing-scheduled-message\").show();\r\n } else {\r\n $(\".nothing-scheduled-message\").hide();\r\n }\r\n\r\n }\r\n\r\n // Show or hide some sections\r\n $('#content-trip-itinerary #cancelled-items').show();\r\n $('#content-trip-itinerary #cancelled-items').toggle($('#content-trip-itinerary #list-cancelled').children(':visible').length > 0)\r\n $('#content-trip-itinerary #no-items').show();\r\n $('#content-trip-itinerary #no-items').toggle($('#content-trip-itinerary #list-no').children(':visible').length > 0)\r\n }\r\n\r\n YouLi.Trip.Itinerary.UpdateMenuNav = function () {\r\n\r\n if ($(\"#content-trip-itinerary .trip-dates-menu\").length > 0) {\r\n if (YouLi.Trip.CurrentSection == \"itinerary\") {\r\n var scrollerNavLeft = $(\"#content-trip-itinerary .scroller-nav\").position().left;\r\n var currentLeft = $(\"#content-trip-itinerary .trip-dates-menu li\").position().left;\r\n var lastItem = $(\"#content-trip-itinerary .trip-dates-menu li:last-child\");\r\n var lastItemRight = lastItem.position().left + lastItem.outerWidth();\r\n\r\n var isOffsetFromLeft = currentLeft < 0;\r\n var isCutoffOnRight = lastItemRight >= scrollerNavLeft;\r\n\r\n $(\"#content-trip-itinerary .scroller-nav .left\").toggleClass(\"disabled\", !isOffsetFromLeft);\r\n $(\"#content-trip-itinerary .scroller-nav .right\").toggleClass(\"disabled\", !isCutoffOnRight);\r\n\r\n if (isOffsetFromLeft || isCutoffOnRight) {\r\n $(\"#content-trip-itinerary .scroller-nav\").css(\"visibility\", \"visible\");\r\n }\r\n else {\r\n $(\"#content-trip-itinerary .scroller-nav\").css(\"visibility\", \"hidden\");\r\n }\r\n\r\n // Fix the max width of itinerary menu\r\n $(\"#content-trip-itinerary .trip-dates-menu\").css(\"max-width\", \"0px\");\r\n var containerWidth = $(\".content-trip-details-main\").width();\r\n $(\"#content-trip-itinerary .trip-dates-menu\").css(\"max-width\", containerWidth + \"px\");\r\n }\r\n }\r\n }\r\n\r\n YouLi.Trip.Itinerary.DoItemResponse = function (itineraryItemId, responseValue) {\r\n\r\n let targetElement = element;\r\n\r\n // If it's an item that just takes a response, then do that now\r\n var data = {\r\n RequestedFrom: \"itinerary\",\r\n ScheduleItemId: itineraryItemId,\r\n InviteeId: $(\"#InviteeId\").val(),\r\n ResponseValue: responseValue,\r\n ApplyToGang: true\r\n };\r\n\r\n $.ajax({\r\n url: '/trip/inviteeschedulerespond',\r\n type: \"POST\",\r\n dataType: \"json\",\r\n contentType: \"application/json; charset=utf-8\",\r\n data: JSON.stringify(data),\r\n complete: function (response) {\r\n if (response.responseJSON != undefined && response.responseJSON.url) {\r\n YouLi.Common.UI.HideLoading();\r\n window.location.href = response.responseJSON.url;\r\n }\r\n else if (response.status === 500 || (response.responseJSON != undefined && response.responseJSON.success == false)) {\r\n YouLi.Common.UI.HideLoading();\r\n\r\n // reset the multistate check to the previous value\r\n $(targetElement).data(\"multiStateCheck\").revert();\r\n\r\n var errorMessage = \"An error occurred.\";\r\n if (response.responseJSON.errorMessage)\r\n errorMessage = response.responseJSON.errorMessage;\r\n YouLi.Common.UI.ShowStandardDialog(errorMessage, \"Error\");\r\n }\r\n else {\r\n // get and restore collapsible panel states \r\n var openPanelIds = $(\"#itinerary-content .panel-collapse.collapse.in\").map(function () { return this.id; }).get();\r\n $('#itinerary-content').html(response.responseText);\r\n $(\".panel-collapse.collapse\").removeClass(\"in\");\r\n if (openPanelIds.length > 0) {\r\n $('#' + openPanelIds.join(',#')).addClass(\"in\"); // do this before calling collapse() as we don't want this animated here\r\n $('#' + openPanelIds.join(',#')).collapse(\"show\");\r\n }\r\n\r\n $(\"#content-trip-itinerary\").removeClass(\"hidden\");\r\n YouLi.Trip.Itinerary.FilterItems();\r\n YouLi.Trip.Itinerary.UpdateMenuNav();\r\n\r\n YouLi.Trip.UpdateResponseFooter(runOnce = true, checkTripUpdates = false);\r\n }\r\n }\r\n\r\n });\r\n }\r\n\r\n YouLi.Trip.Itinerary.AddItineraryItemToCalendar = function (element, calendarType) {\r\n const itineraryItemElement = $(element).closest(\".item-container\");\r\n const itineraryItemId = $(itineraryItemElement).data(\"id\");\r\n\r\n const item = YouLi.Trip.Itinerary.ItineraryItems.find((item) => {\r\n return item.ScheduleItemId == itineraryItemId;\r\n });\r\n\r\n if (item) {\r\n const itemDescription = YouLi.Common.Utils.StripHTML(item.Description);\r\n const newLineConst = calendarType == \"outlook\" ? \"\\\\n\" : \"\\n\";\r\n const eventDescription = `Location: ${item.Location}${newLineConst}${newLineConst}View Details: ${YouLi.Trip.CurrentInviteeMagicLink}${newLineConst}${newLineConst}${itemDescription}`;\r\n\r\n event = {\r\n title: item.Name,\r\n start: new Date(item.StartDateTimeUTC + \"Z\"),\r\n end: new Date(item.EndDateTimeUTC + \"Z\"),\r\n address: item.Location,\r\n description: eventDescription\r\n };\r\n\r\n YouLi.Trip.AddToCalendar(element, calendarType, event);\r\n return false;\r\n }\r\n\r\n return false;\r\n };\r\n\r\n $(function () {\r\n\r\n // Itinerary date menu functionality\r\n $(document).on(\"click\", \"#content-trip-itinerary .trip-dates-menu .nav li\", function () {\r\n\r\n YouLi.Trip.Itinerary.GoToDate($(this).data(\"date\"));\r\n });\r\n\r\n $(document).on(\"click\", \"#content-trip-itinerary .scroller-nav .right:not(.disabled)\", function () {\r\n var lastItem = $(\"#content-trip-itinerary .trip-dates-menu li:last-child\");\r\n var lastItemRight = lastItem.position().left + lastItem.outerWidth();\r\n var currentLeft = $(\"#content-trip-itinerary .trip-dates-menu li\").position().left;\r\n\r\n var newLeft = currentLeft;\r\n if (lastItemRight >= $(\"#content-trip-itinerary .scroller-nav\").position().left) {\r\n newLeft = Math.min(newLeft - scrollerAdvanceAmount, 0);\r\n $(\"#content-trip-itinerary .trip-dates-menu li\").css(\"left\", newLeft);\r\n }\r\n\r\n YouLi.Trip.Itinerary.UpdateMenuNav();\r\n\r\n });\r\n $(document).on(\"click\", \"#content-trip-itinerary .scroller-nav .left:not(.disabled)\", function () {\r\n var currentLeft = $(\"#content-trip-itinerary .trip-dates-menu li\").position().left;\r\n var newLeft = currentLeft;\r\n if (currentLeft < 0) {\r\n newLeft = Math.min(newLeft + scrollerAdvanceAmount, 0);\r\n $(\"#content-trip-itinerary .trip-dates-menu li\").css(\"left\", newLeft);\r\n }\r\n\r\n YouLi.Trip.Itinerary.UpdateMenuNav();\r\n\r\n });\r\n\r\n $(window).resize(function () {\r\n YouLi.Trip.Itinerary.UpdateMenuNav();\r\n });\r\n\r\n var currentDisplayedResponse;\r\n\r\n $(document).on('mouseup', \"#content-trip-itinerary\", function (e) {\r\n // hide response popover when click elsewhere\r\n if (currentDisplayedResponse && !currentDisplayedResponse.is(e.target) // if the target of the click isn't the container...\r\n && currentDisplayedResponse.has(e.target).length === 0) // ... nor a descendant of the container\r\n {\r\n $(\".itinerary-accordion-item .response-popover\").css(\"display\", \"none\");\r\n }\r\n });\r\n\r\n $(document).on(\"click\", \"#content-trip-itinerary #expand\", function () {\r\n\r\n if ($(this).hasClass(\"expanded\")) {\r\n $(\".itinerary-accordion-item .panel-collapse\").collapse('hide');\r\n // manually add collapsed class as for some reason it's not doing it for me\r\n $(\".itinerary-accordion-item .panel-heading a[data-toggle='collapse']\").addClass('collapsed');\r\n $(this).find(\".text\").text(\"Expand\");\r\n $(this).removeClass(\"expanded\");\r\n }\r\n else {\r\n $(\".itinerary-accordion-item .panel-collapse\").collapse('show');\r\n // manually add collapsed class as for some reason it's not doing it for me\r\n $(\".itinerary-accordion-item .panel-heading a[data-toggle='collapse']\").removeClass('collapsed');\r\n $(this).find(\".text\").text(\"Collapse\");\r\n $(this).addClass(\"expanded\");\r\n }\r\n\r\n });\r\n\r\n\r\n // Response functionality\r\n $(document).on(\"click\", \".itinerary-accordion-item .response:not(.locked):not(.response-not-required) .check\", function () {\r\n $(\".response-popover\").css(\"display\", \"none\"); // hide all others\r\n $(this).find(\".response-popover\").css(\"display\", \"block\");\r\n currentDisplayedResponse = $(this).parent();\r\n });\r\n\r\n var previewMode = $(\"#PreviewMode\").val() == \"True\";\r\n\r\n if (!previewMode) {\r\n\r\n $(document)\r\n .off(\"click\", \".itinerary-accordion-item .itinerary-response\")\r\n .on(\"click\", \".itinerary-accordion-item .itinerary-response\", function () {\r\n\r\n var itineraryItemElement = $(this).closest(\".itinerary-accordion-item\");\r\n var itineraryItemId = $(itineraryItemElement).data(\"id\");\r\n var responseValue = $(this).data(\"response-value\");\r\n\r\n $(\".response-popover\").css(\"display\", \"none\"); // hide response popup(s)\r\n\r\n if (!YouLi.Trip.InviteeHasRespondedYes) {\r\n $(\"#ResponseItineraryItemIncluded\").val(itineraryItemId);\r\n $(\"#ResponseItineraryItemIncludedAnswer\").val(responseValue);\r\n $(\"#ResponseDialogYesExtraNote\").show();\r\n $(\"#ResponseDialogYes\").modal('show');\r\n }\r\n else {\r\n YouLi.Trip.Itinerary.DoItemResponse(itineraryItemId, responseValue);\r\n }\r\n\r\n });\r\n }\r\n\r\n $(document).on(\"click\", \"#content-trip-itinerary .invitees-avatars-list\", function () {\r\n\r\n // only allow this if the All Invitees tab is visible to this invitee\r\n if (YouLi.Trip.ShowInviteesAllTab) {\r\n\r\n YouLi.Common.UI.ShowLoading();\r\n\r\n let itineraryItemElement = $(this).closest(\".itinerary-accordion-item\");\r\n let itineraryItemId = $(itineraryItemElement).data(\"id\");\r\n let inviteeId = $(\"#InviteeId\").val();\r\n\r\n $.ajax({\r\n url: `/trip/itineraryparticipants/?id=${itineraryItemId}&inviteeid=${inviteeId}`,\r\n type: \"GET\",\r\n dataType: \"json\",\r\n contentType: \"application/json; charset=utf-8\",\r\n complete: function (response) {\r\n YouLi.Common.UI.HideLoading();\r\n if (response.status === 500 || (response.responseJSON != undefined && response.responseJSON.success == false)) {\r\n YouLi.Common.UI.ShowStandardDialog(\"An error occurred when loading.\");\r\n }\r\n else {\r\n $(\"#invitees-dialog-content\").html(response.responseText);\r\n $('#invitees-dialog').modal('show');\r\n }\r\n }\r\n });\r\n }\r\n });\r\n\r\n // initially always have everything expanded\r\n $(\"#content-trip-itinerary #expand\").trigger(\"click\");\r\n\r\n // set up the map with markers\r\n if (YouLi.Trip.Maps && YouLi.Trip.Itinerary.ScheduleItemsOnMap && YouLi.Trip.Itinerary.ScheduleItemsOnMap.length > 0) {\r\n YouLi.Trip.Maps.InitialiseItinerary();\r\n }\r\n\r\n });\r\n\r\n }(YouLi.Trip.Itinerary ? YouLi.Trip.Itinerary : {}));\r\n }(YouLi.Trip ? YouLi.Trip : {}));\r\n}(YouLi ? YouLi : {}));\r\n","var YouLi = YouLi ? YouLi : {};\r\nYouLi.Trip = YouLi.Trip ? YouLi.Trip : {};\r\nYouLi.Trip.Invitees = YouLi.Trip.Invitees ? YouLi.Trip.Invitees : {};\r\n\r\n(function (YouLi) {\r\n (function (Trip) {\r\n (function (Invitees) {\r\n\r\n RefreshFiltersForCategory = function (category) {\r\n YouLi.Common.UI.ShowLoading();\r\n\r\n const tripId = $(\"#TripId\").val();\r\n const inviteeId = $(\"#InviteeId\").val();\r\n const previewMode = $(\"#PreviewMode\").val();\r\n const categoryVal = encodeURIComponent(category);\r\n\r\n let refreshFiltersURL = `/trip/updateinviteefiltersforcategory?tripid=${tripId}&inviteeId=${inviteeId}&category=${categoryVal}&preview=${previewMode}`;\r\n\r\n fetch(refreshFiltersURL)\r\n .then(response => {\r\n YouLi.Common.UI.HideLoading();\r\n\r\n if (!response.ok) {\r\n throw new Error('An error occurred when filtering');\r\n }\r\n return response.json();\r\n })\r\n .then(data => {\r\n $(\"#InviteesListFilters\").html(data.inviteesListFiltersHtml);\r\n })\r\n .catch((error) => {\r\n console.error('Error:', error);\r\n });\r\n };\r\n\r\n SearchInvitees = function () {\r\n YouLi.Common.UI.ShowLoading();\r\n\r\n const tripId = $(\"#TripId\").val();\r\n const inviteeId = $(\"#InviteeId\").val();\r\n const previewMode = $(\"#PreviewMode\").val();\r\n \r\n const category = $(\"#InviteesListCategory\").length == 1 ? encodeURIComponent($(\"#InviteesListCategory\").val()) : \"\";\r\n\r\n const searchTerm = encodeURIComponent($(\"#InviteesListSearchTerm\").val());\r\n\r\n let refreshFiltersURL = `/trip/updateinviteeslistforsearch?tripid=${tripId}&inviteeId=${inviteeId}&preview=${previewMode}&searchTerm=${searchTerm}&category=${category}`;\r\n\r\n // Add filters if and only if they have been setup\r\n if ($(\"#Filter1TaskItemFieldId\").length == 1) {\r\n const filter1Val = $(\"#InviteesListFilter1\").length == 1 ? encodeURIComponent($(\"#InviteesListFilter1\").val()) : \"\";\r\n const filter1FieldId = encodeURIComponent($(\"#Filter1TaskItemFieldId\").val());\r\n refreshFiltersURL += `&filter1Val=${filter1Val}&filter1FieldId=${filter1FieldId}`;\r\n }\r\n\r\n if ($(\"#Filter2TaskItemFieldId\").length == 1) {\r\n const filter2Val = $(\"#InviteesListFilter2\").length == 1 ? encodeURIComponent($(\"#InviteesListFilter2\").val()) : \"\";\r\n const filter2FieldId = encodeURIComponent($(\"#Filter2TaskItemFieldId\").val());\r\n refreshFiltersURL += `&filter2Val=${filter2Val}&filter2FieldId=${filter2FieldId}`;\r\n }\r\n\r\n if ($(\"#Filter3TaskItemFieldId\").length == 1) {\r\n const filter3Val = $(\"#InviteesListFilter3\").length == 1 ? encodeURIComponent($(\"#InviteesListFilter3\").val()) : \"\";\r\n const filter3FieldId = encodeURIComponent($(\"#Filter3TaskItemFieldId\").val());\r\n refreshFiltersURL += `&filter3Val=${filter3Val}&filter3FieldId=${filter3FieldId}`;\r\n }\r\n\r\n fetch(refreshFiltersURL)\r\n .then(response => {\r\n YouLi.Common.UI.HideLoading();\r\n\r\n if (!response.ok) {\r\n throw new Error('An error occurred when filtering');\r\n }\r\n return response.json();\r\n })\r\n .then(data => {\r\n $(\"#invitees-section-going-list\").html(data.inviteesListHtml);\r\n })\r\n .catch((error) => {\r\n console.error('Error:', error);\r\n });\r\n\r\n };\r\n \r\n $(function () {\r\n\r\n $(document).on(\"change\", \"#InviteesListCategory\", function () {\r\n if ($(this).val() == \"\") {\r\n $(\"#InviteesListFilters\").html(\"\"); // remove the filters when no category is selected\r\n }\r\n else {\r\n RefreshFiltersForCategory($(this).val()); \r\n }\r\n SearchInvitees();\r\n });\r\n\r\n $(document).on(\"keypress\", \"#InviteesListSearchTerm\", function (e) {\r\n if (e.keyCode == 13)\r\n SearchInvitees();\r\n });\r\n\r\n $(document).on(\"click\", \"#SearchButton\", function () {\r\n SearchInvitees();\r\n });\r\n });\r\n\r\n\r\n }(YouLi.Trip.Invitees ? YouLi.Trip.Invitees : {}));\r\n }(YouLi.Trip ? YouLi.Trip : {}));\r\n}(YouLi ? YouLi : {}));\r\n","var YouLi = YouLi ? YouLi : {};\r\nYouLi.Trip = YouLi.Trip ? YouLi.Trip : {};\r\n\r\n(function (YouLi) {\r\n (function (Trip) {\r\n\r\n var Map = null;\r\n var Geocoder = null;\r\n YouLi.Trip.CurrentSection = \"program\";\r\n YouLi.Trip.InitialDate = \"\";\r\n YouLi.Trip.SkipToItinerary = false;\r\n YouLi.Trip.ShowInviteesAllTab = false;\r\n YouLi.Trip.ShowCompleted = false;\r\n YouLi.Trip.InviteeHasResponded = false;\r\n YouLi.Trip.IsTemplate = false;\r\n YouLi.Trip.ShowImageErrorReport = false;\r\n\r\n YouLi.Trip.PaymentStyle = \"\";\r\n YouLi.Trip.PricingMode = \"\";\r\n YouLi.Trip.CheckoutFlowPageURL = \"\";\r\n YouLi.Trip.IsAnonymousAccess = false;\r\n\r\n YouLi.Trip.RequireResponseLastName = false;\r\n YouLi.Trip.RequireConsent = false;\r\n YouLi.Trip.PreviousSection = \"program\";\r\n YouLi.Trip.CurrentInviteeMagicLink = \"\";\r\n YouLi.Trip.StylesNameSalesPageDrSheri = \"\";\r\n YouLi.Trip.RespondedRecently = false;\r\n YouLi.Trip.CheckoutSuccessfulRecently = false;\r\n YouLi.Trip.GangPlaceholdersDialogOnLoad = false;\r\n\r\n YouLi.Trip.FooterUpdatesPaused = false;\r\n YouLi.Trip.PaymentsListUpdateCount = 0;\r\n YouLi.Trip.DelaysForPaymentsListUpdate = [3000, 3000, 60000];\r\n YouLi.Trip.FooterUpdateTimeout = 30000;\r\n YouLi.Trip.StyleName = \"\";\r\n YouLi.Trip.TripHasMobileAppEnabled = false;\r\n YouLi.Trip.IsCurrentUserTripPlanner = false;\r\n YouLi.Trip.IsCurrentUserTripOwner = false;\r\n\r\n YouLi.Trip.AffixTop = () => {\r\n var affixTop = 54; // allow for the sticky planner menu - no big deal if this actually could be zero\r\n\r\n if (YouLi.Trip.StyleName == YouLi.Trip.StylesNameSalesPageDrSheri) {\r\n doScroll = true;\r\n affixTop = 100;\r\n }\r\n\r\n return affixTop;\r\n };\r\n\r\n YouLi.Trip.StripBlankLinkTargets = function () {\r\n // first, add a class to any links within elements that have the exclusion class on them (this makes the removal easier)\r\n $('.keep-target-on-links a').addClass('keep-target-on-links');\r\n $('a[target=\"_blank\"]:not(.keep-target-on-links)').removeAttr('target');\r\n console.log(\"Testing 124\")\r\n };\r\n\r\n YouLi.Trip.GoToSection = function (section, element, doScroll, scrollOverride, updatePreviousSection = true) {\r\n // Remove trailing question mark or marks, if any.\r\n // This is to avoid a situation where there's a trailing question mark because of the '? cm_dontconvertlink' to stop Campaign Monitor from converting and expiring our links\r\n // utm_content=InviteeMagicLink#paymentdetails?\r\n section = section.replace(/\\?+$/, '');\r\n\r\n // First, check that we are allowing them to even go to this section based on a few business rules\r\n // (e.g. for trips with Rooming Map, if the trip package room isn't selected yet, we're not showing payment details yet)\r\n if (section == \"paymentdetails\" && $(\".content-tab-paymentdetails\").hasClass(\"hidden\")) {\r\n if ($(\".content-tab-roomingmap\").length > 0 && !$(\".content-tab-roomingmap\").hasClass(\"hidden\")) {\r\n section = \"roomingmap\"; // if we are NOT showing payment deatils, go to the default section\r\n }\r\n else {\r\n select = \"program\"; // if we are NOT showing payment deatils, go to the default section\r\n }\r\n }\r\n\r\n // Next, check that we have this section\r\n if ($(\"#content-trip-\" + section).length == 0)\r\n return;\r\n\r\n //Google tag manager \r\n if (section == \"paymentdetails\" && YouLi.Trip.CurrentSection != \"paymentdetails\") {\r\n\r\n if ($(\"#IsBooked\").val() == \"\" || $(\"#IsBooked\").val() == \"False\") {\r\n var gaData = YouLi.Common.GetGAData(\"view_cart\");\r\n dataLayer.push({ ecommerce: null });\r\n dataLayer.push(gaData);\r\n }\r\n }\r\n\r\n YouLi.Trip.CurrentSection = section;\r\n\r\n // update the activated menu\r\n $(\".content-trip-details-menu .nav li\").removeClass(\"active\");\r\n var selectedSectionMenuItem = $(\".content-trip-details-menu .nav\").find(\"[data-section='\" + section + \"']\");\r\n $(selectedSectionMenuItem).addClass(\"active\");\r\n\r\n window.location.hash = section;\r\n\r\n // only update the previous section if either a data value has been provided and set to true, or if it hasn't been provided then base it on the function parameter\r\n if (($(element).data(\"update-previous-section\") != undefined && $(element).data(\"update-previous-section\")) || ($(element).data(\"update-previous-section\") == undefined && updatePreviousSection)) {\r\n YouLi.Trip.PreviousSection = window.location.hash.substr(1);\r\n }\r\n\r\n // update the content\r\n $(\".content-trip-inner\").addClass(\"hidden\");\r\n var selectedContent = $(\"#content-trip-\" + section);\r\n $(selectedContent).removeClass(\"hidden\");\r\n\r\n // Scroll if the source element specified to\r\n if ($(element).data(\"scroll\") == true || doScroll) {\r\n // scroll the top of the content into view, or to a specific element based on the scrollOverride\r\n let scrollTarget = $(selectedContent);\r\n if ($(element).data(\"scroll-override\") || scrollOverride) {\r\n var scrollOverrideTargetName = $(element).data(\"scroll-override\") || scrollOverride;\r\n scrollTarget = $(scrollOverrideTargetName);\r\n }\r\n\r\n $('html, body').animate({\r\n scrollTop: scrollTarget.offset().top - YouLi.Trip.AffixTop()\r\n }, 1000);\r\n }\r\n\r\n // run initialise on certain tabs as required\r\n if (section == \"itinerary\") {\r\n YouLi.Trip.Itinerary.FilterItems();\r\n YouLi.Trip.Itinerary.UpdateMenuNav();\r\n }\r\n else if (section == \"program\") {\r\n YouLi.Trip.Program.RefreshLayout();\r\n YouLi.Trip.Program.UpdateMenuNav();\r\n }\r\n else if (section == \"roomingmap\") {\r\n YouLi.Trip.RoomingMap.ClearZoom();\r\n }\r\n else if (section == \"paymentdetails\") {\r\n YouLi.Trip.Payments.CheckForPaymentButtonUpdate();\r\n }\r\n }\r\n\r\n YouLi.Trip.ExpressInterestFormSuccess = function (result) {\r\n YouLi.Trip.Program.SaveDone = true; // set this in case we have that flow happening\r\n\r\n var formSubmitBtn = $(\"form\").find(\"input[type='submit']\");\r\n\r\n if (result.errors) {\r\n YouLi.Common.UI.HideInputLoading(formSubmitBtn);\r\n YouLi.Common.UI.HideLoading();\r\n YouLi.Common.UI.ClearClientSideErrors();\r\n YouLi.Common.UI.FormatClientSideErrors(result.errors);\r\n\r\n } else {\r\n YouLi.Common.UI.ClearClientSideErrors();\r\n if (result.url) {\r\n window.location.href = result.url;\r\n if (result.reload)\r\n location.reload();\r\n } else {\r\n YouLi.Common.UI.HideInputLoading(formSubmitBtn);\r\n YouLi.Common.UI.HideLoading();\r\n }\r\n }\r\n };\r\n\r\n YouLi.Trip.ExpressInterestFormFailure = function (xhr, status, error) {\r\n var formSubmitBtn = $(\"form\").find(\"input[type='submit']\");\r\n YouLi.Common.UI.HideInputLoading(formSubmitBtn);\r\n\r\n YouLi.Common.UI.FormatClientSideErrors(error, xhr);\r\n\r\n $('#ResponseDialogYes').animate({ scrollTop: 0 }, 800);\r\n };\r\n\r\n YouLi.Trip.GoToInviteeSection = function (section) {\r\n\r\n // update the activated menu\r\n $(\".invitees-section-links .content-list-tab\").removeClass(\"active\");\r\n var selectedSectionMenuItem = $(\".invitees-section-links\").find(\"[data-section='\" + section + \"']\");\r\n $(selectedSectionMenuItem).addClass(\"active\");\r\n\r\n // update the content\r\n $(\".invitees-list-main\").addClass(\"hidden\");\r\n var selectedContent = $(\"#invitees-section-\" + section + \".invitees-list-main\");\r\n $(selectedContent).removeClass(\"hidden\");\r\n\r\n }\r\n\r\n YouLi.Trip.GoToResourceSection = function (section) {\r\n\r\n // update the activated menu\r\n $(\".resources-section-links .content-list-tab\").removeClass(\"active\");\r\n var selectedSectionMenuItem = $(\".resources-section-links\").find(\"[data-section='\" + section + \"']\");\r\n $(selectedSectionMenuItem).addClass(\"active\");\r\n\r\n // update the content\r\n $(\".resources-list-main\").addClass(\"hidden\");\r\n var selectedContent = $(\"#resources-section-\" + section + \".resources-list-main\");\r\n $(selectedContent).removeClass(\"hidden\");\r\n\r\n }\r\n\r\n YouLi.Trip.UpdateCurrentInviteeName = function (name) {\r\n $('.invitees-list ul li[data-current-invitee=\"true\"]').find(\".name\").html(name);\r\n $('.title-bar').find(\".name\").html(name);\r\n }\r\n\r\n YouLi.Trip.UpdateCurrentInviteeMiniBio = function (minibio) {\r\n $('.invitees-list ul li[data-current-invitee=\"true\"]').find(\".bio\").html(minibio);\r\n $('.title-bar').find(\".bio\").html(minibio);\r\n $('.title-bar').find(\".bio\").data('content', minibio);\r\n YouLi.Trip.TrimMiniBioDisplay();\r\n\r\n }\r\n\r\n YouLi.Trip.UpdateCurrentInviteeAvatar = function (avatarURL) {\r\n $('.invitees-list ul li[data-current-invitee=\"true\"]').find(\"img\").attr(\"src\", avatarURL);\r\n $('.title-bar').find(\"img\").attr(\"src\", avatarURL);\r\n }\r\n\r\n YouLi.Trip.SetupMapEvents = function () {\r\n $(document).off(\"click\", \"#TripLocationMapStatic\");\r\n $(document).on(\"click\", \"#TripLocationMapStatic\", function () {\r\n\r\n var script = document.createElement(\"script\");\r\n script.setAttribute(\"src\", \"https://maps.googleapis.com/maps/api/js?key=AIzaSyCxwsk9jvdqzM9JSUbRhYfJiptxIAlDGCk&v=3&callback=YouLi.Trip.Maps.SetupLocationMap\");\r\n script.setAttribute(\"defer\", \"\");\r\n document.getElementById(\"MapScripts\").append(script);\r\n\r\n // unbind this event again (just in case the this setup function gets run again)\r\n $(document).off(\"click\", \"#TripLocationMapStatic\");\r\n });\r\n }\r\n\r\n YouLi.Trip.AddTripToCalendar = function (element, calendarType) {\r\n let event = {\r\n title: $(\"#TripName\").val(),\r\n start: new Date($(\"#TripStartDateTimeUTC\").val() + \"Z\"),\r\n end: new Date($(\"#TripEndDateTimeUTC\").val() + \"Z\"),\r\n address: $(\"#TripPrimaryLocation\").val(),\r\n description: \"Please be sure to complete any tasks before the event and check for updates on schedule: \" + YouLi.Trip.CurrentInviteeMagicLink\r\n };\r\n YouLi.Trip.AddToCalendar(element, calendarType, event);\r\n return false;\r\n };\r\n\r\n YouLi.Trip.AddToCalendarForSpeakeasy = function (element, calendarType, title, startDateTimeUTC, endDateTimeUTC) {\r\n let event = {\r\n title: title,\r\n start: new Date(startDateTimeUTC + \"Z\"),\r\n end: new Date(endDateTimeUTC + \"Z\"),\r\n address: '',\r\n description: \"Go to \" + YouLi.Trip.CurrentInviteeMagicLink + \" and click the Join Event button.\"\r\n };\r\n YouLi.Trip.AddToCalendar(element, calendarType, event);\r\n return false;\r\n }\r\n\r\n YouLi.Trip.AddToCalendar = function (element, calendarType, event) {\r\n const forbiddenChars = /[^a-zA-Z0-9 -!\\.,:;\\|^$()\\/\\\\]/;\r\n event.title = event.title.replace(forbiddenChars, '');\r\n\r\n const calLink = getAddToCalendarURL({ data: event, type: calendarType });\r\n if (calLink) {\r\n $(element).attr(\"href\", calLink);\r\n $(element).attr(\"onclick\", \"\"); // clear out this click event now we've worked out the proper link\r\n $(element).click();\r\n return false;\r\n }\r\n else {\r\n console.error(\"YouLi.Trip.AddToCalendar: Invalid event\");\r\n return false;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n YouLi.Trip.AdjustFooterForFloatingFooter = function () {\r\n\r\n $(\".footer\").css(\"margin-bottom\", $(\".content-trip-response-footer\").outerHeight())\r\n\r\n }\r\n\r\n YouLi.Trip.UpdateResponseFooter = function (runOnce, checkTripUpdates) {\r\n\r\n // Only update the footer if we're not already alerting them to the need to refresh. If we're already alerting them to push, we don't\r\n // need to check again for footer updates\r\n if ($(\"#ShowingRefreshMessage\").val() == \"true\")\r\n return;\r\n\r\n // If the page isn't currently active (and is not a run-once forced update), we want to pause the update, and just set a new timeout to check again. \r\n // DEV NOTE: in Chrome (and probably other browsers), having focus on the DevTools window WILL take focus away from the document\r\n if (!runOnce && !document.hasFocus()) {\r\n setTimeout(function () {\r\n YouLi.Trip.UpdateResponseFooter(false, true);\r\n }, YouLi.Trip.FooterUpdateTimeout);\r\n\r\n return;\r\n }\r\n\r\n var tripId = $(\"#TripId\").val();\r\n var inviteeId = $(\"#InviteeId\").val();\r\n var previewMode = $(\"#PreviewMode\").val();\r\n var lastTripItemUpdateDate = $(\"#LastTripItemUpdateDate\").val();\r\n\r\n var updateUrl = '/trip/updateresponsefooter?tripid=' + tripId + \"&inviteeid=\" + inviteeId + \"&preview=\" + previewMode\r\n if (checkTripUpdates)\r\n updateUrl += \"&lastUpdateTime=\" + lastTripItemUpdateDate;\r\n\r\n $.ajax({\r\n url: updateUrl,\r\n type: \"GET\",\r\n dataType: \"json\",\r\n contentType: \"application/json; charset=utf-8\",\r\n complete: function (response) {\r\n if (response.status === 500 || (response.responseJSON != undefined && response.responseJSON.success == false)) {\r\n YouLi.Common.UI.ShowStandardDialog(\"An error occurred. Please refresh the page to try again.\");\r\n }\r\n else {\r\n\r\n // If we have not explicitly paused footer updates (e.g. while on Costs tab), then update it now\r\n if (!YouLi.Trip.FooterUpdatesPaused) {\r\n $(\"#ResponseFooter\").html(response.responseText);\r\n YouLi.Trip.AdjustFooterForFloatingFooter();\r\n }\r\n }\r\n }\r\n\r\n });\r\n }\r\n\r\n YouLi.Trip.SetupUpdatePaymentsListTimer = function () {\r\n YouLi.Trip.PaymentsListUpdateCount = 0;\r\n if ($(\".cost-line-item-paid.in-progress\").length > 0) {\r\n setTimeout(function () {\r\n YouLi.Trip.RefreshPaymentsList();\r\n }, YouLi.Trip.DelaysForPaymentsListUpdate[YouLi.Trip.PaymentsListUpdateCount]);\r\n }\r\n };\r\n\r\n YouLi.Trip.RefreshPaymentsList = function () {\r\n\r\n var tripId = $(\"#TripId\").val();\r\n var inviteeId = $(\"#InviteeId\").val();\r\n var previewMode = $(\"#PreviewMode\").val();\r\n\r\n var updateUrl = '/trip/updatepaymentslist?tripid=' + tripId + \"&inviteeid=\" + inviteeId + \"&preview=\" + previewMode\r\n\r\n $.ajax({\r\n url: updateUrl,\r\n type: \"GET\",\r\n dataType: \"json\",\r\n contentType: \"application/json; charset=utf-8\",\r\n complete: function (response) {\r\n if (response.status === 500 || (response.responseJSON != undefined && response.responseJSON.success == false)) {\r\n YouLi.Common.UI.ShowStandardDialog(\"An error occurred. Please refresh the page to try again.\");\r\n }\r\n else {\r\n\r\n YouLi.Trip.PaymentsListUpdateCount++;\r\n\r\n $(\"#ContentCostPaymentList\").html(response.responseJSON.costPaymentsListHtml);\r\n\r\n if (response.responseJSON.contentCostPaymentDetailsHtml && $(\".content-trip-paymentdetails-costs\").length > 0) {\r\n $(\".content-trip-paymentdetails-costs\").html(response.responseJSON.contentCostPaymentDetailsHtml);\r\n YouLi.Trip.Payments.RefreshPaymentMethod(true);\r\n }\r\n else {\r\n if ($(\".cost-installments-selection:not(.individual)\").length > 0) {\r\n $(\".cost-installments-selection:not(.individual)\").html(response.responseJSON.installmentsTableHtml);\r\n }\r\n\r\n $(\"#ContentCostPaymentMethods\").html(response.responseJSON.costPaymentMethodsHtml);\r\n YouLi.Trip.Payments.RefreshPaymentMethod(true);\r\n\r\n $('#SavedPaymentMethodConfirmationContainer').html(response.responseJSON.savedPaymentDialogHtml);\r\n }\r\n\r\n // If there are still in-progress payments AND we have defined a timeout for another check, then set the timeout\r\n if ($(\".cost-line-item-paid.in-progress\").length > 0 && YouLi.Trip.PaymentsListUpdateCount < YouLi.Trip.DelaysForPaymentsListUpdate.length) {\r\n setTimeout(function () {\r\n YouLi.Trip.RefreshPaymentsList();\r\n }, YouLi.Trip.DelaysForPaymentsListUpdate[YouLi.Trip.PaymentsListUpdateCount]);\r\n }\r\n }\r\n }\r\n\r\n });\r\n }\r\n\r\n YouLi.Trip.AffixWindowResizeInitialised = false;\r\n\r\n YouLi.Trip.TrimMiniBioDisplay = function () {\r\n\r\n let bio = $('.mini-bio').data('content');\r\n let bioLength = window.innerWidth < 768 ? 50 : 200;\r\n bio = YouLi.Common.Utils.TrimToSize(bio, bioLength, true);\r\n $('.mini-bio').html(bio);\r\n };\r\n\r\n YouLi.Trip.SetupFixNavbarOnTop = function () {\r\n // set up scroll behaviour for the dr-sheri sales page\r\n if (!($('.anonymous').length) && YouLi.Trip.StyleName == YouLi.Trip.StylesNameSalesPageDrSheri) {\r\n $(window).off(\"scroll\");\r\n if (window.innerWidth <= 767) {\r\n YouLi.Trip.FixNavbarOnTop();\r\n $(window).on(\"scroll\", function () {\r\n YouLi.Trip.FixNavbarOnTop();\r\n });\r\n }\r\n else\r\n $('.content-trip-details-top').css(\"top\", 54)\r\n }\r\n };\r\n\r\n YouLi.Trip.FixNavbarOnTop = function () {\r\n if (window.pageYOffset > 55) {\r\n $('.content-trip-details-top').css(\"top\", \"55px\");\r\n } else {\r\n $('.content-trip-details-top').css(\"top\", \"96px\");;\r\n }\r\n };\r\n\r\n YouLi.Trip.ToggleMainMenu = function () {\r\n if ($('.content-trip-details-menu').find('li:not(.hidden)').length == 2) {\r\n $('.content-trip-details-menu').addClass('hidden');\r\n }\r\n if ($('.content-trip-details-menu-top').find('li:not(.hidden):not(.sign-up-btn)').length == 2) {\r\n $('.content-trip-details-menu-top').addClass('hidden');\r\n $('.content-trip-heading-image').css('margin-top', '0px');\r\n }\r\n };\r\n\r\n YouLi.Trip.SetupInviteeSectionMenu = function () {\r\n // invitees menu functionality\r\n $(\".invitees-section-links .content-list-tab:not(.disabled)\").off(\"click touchstart\").on(\"click touchstart\", function () {\r\n var section = $(this).data(\"section\");\r\n\r\n YouLi.Trip.GoToInviteeSection(section);\r\n });\r\n };\r\n\r\n YouLi.Trip.UpdateDateTimeAnswer = function (element) {\r\n var container = element.closest(\".date-time-container\");\r\n var datePicker = $('.datepicker', container).data(\"DateTimePicker\");\r\n var timePicker = $('.timepicker', container).data(\"DateTimePicker\");\r\n if (!datePicker || datePicker.date() == null || !timePicker || timePicker.date() == null) {\r\n $(\".combined-date-time-answer\", container).val(\"\");\r\n }\r\n else {\r\n $(\".combined-date-time-answer\", container).val(\r\n datePicker.date().format(\"D/M/Y \") + timePicker.date().format(\"hh:mm A\"));\r\n }\r\n };\r\n\r\n YouLi.Trip.ViewProfileForInvitee = function (inviteeId, doScroll = false) {\r\n const tripId = $(\"#TripId\").val();\r\n const previewMode = $(\"#PreviewMode\").val();\r\n\r\n var data = {\r\n tripid: tripId,\r\n inviteeId: inviteeId,\r\n preview: previewMode\r\n };\r\n\r\n YouLi.Common.UI.ShowLoading();\r\n $.ajax({\r\n url: \"/Trip/ViewProfile\",\r\n type: \"POST\",\r\n dataType: \"json\",\r\n contentType: \"application/json; charset=utf-8\",\r\n data: JSON.stringify(data),\r\n cache: false,\r\n complete: function (response) {\r\n YouLi.Common.UI.HideLoading();\r\n if (response.responseJSON != undefined && response.responseJSON.url) {\r\n window.location.href = response.responseJSON.url;\r\n }\r\n else if (response.status === 500 || (response.responseJSON != undefined && response.responseJSON.success == false)) { // || response.statusText == \"error\") {\r\n YouLi.Common.UI.ShowStandardDialog(\"An error occurred when loading profile.\");\r\n }\r\n else {\r\n $(\"#view-profile-content\").html(response.responseText);\r\n YouLi.Trip.GoToSection(\"viewprofile\", undefined, doScroll, false, /* updatePreviousSection = */ false);\r\n }\r\n }\r\n });\r\n }\r\n\r\n YouLi.Trip.ShowRequestMeetingBookingDialog = function (element) {\r\n const itemContainer = $(element).closest(\".item-container\");\r\n const meetingBlockId = $(itemContainer).data(\"id\");\r\n const profileContainer = $(element).closest(\"#content-trip-viewprofile\");\r\n const recipientInviteeId = $(profileContainer).data(\"profile-invitee-id\");\r\n const slotBookingName = $(\".view-profile-name\").text();\r\n\r\n $(\"#MeetingBookingRequestDialog #RequestMeetingBlockId\").val(meetingBlockId);\r\n $(\"#MeetingBookingRequestDialog #RequestMeetingRecipientInviteeId\").val(recipientInviteeId);\r\n $(\"#MeetingBookingRequestDialog .invitee-name\").text(slotBookingName);\r\n\r\n $(\"#MeetingBookingRequestDialog\").modal(\"show\");\r\n };\r\n\r\n YouLi.Trip.RequestMeetingBooking = function () {\r\n\r\n var $form = $('#RequestMeetingBlockForm');\r\n\r\n $.validator.unobtrusive.parse($form);\r\n $form.validate();\r\n\r\n if (!$form.valid()) {\r\n return;\r\n }\r\n\r\n $(\"#MeetingBookingRequestDialog\").modal(\"hide\");\r\n\r\n YouLi.Common.UI.ShowLoading();\r\n\r\n const customMessageElement = $(\"#MeetingBookingRequestDialog #CustomMessageText\");\r\n\r\n const meetingBlockId = $(\"#MeetingBookingRequestDialog #RequestMeetingBlockId\").val();\r\n const recipientInviteeId = $(\"#MeetingBookingRequestDialog #RequestMeetingRecipientInviteeId\").val();\r\n const customMessageText = customMessageElement.val();\r\n\r\n const itineraryTabIsHidden = $(\"#content-trip-itinerary\").hasClass(\"hidden\");\r\n const inviteesTabIsHidden = $(\"#content-trip-invitees\").hasClass(\"hidden\");\r\n\r\n const itemContainer = $(`.profile-meeting-block.item-container[data-id='${meetingBlockId}']`);\r\n\r\n var data = {\r\n scheduleItemId: meetingBlockId,\r\n recipientInviteeId: recipientInviteeId,\r\n customMessageText: customMessageText\r\n };\r\n\r\n $.ajax({\r\n url: '/trip/requestmeetingbooking',\r\n type: \"POST\",\r\n dataType: \"json\",\r\n contentType: \"application/json; charset=utf-8\",\r\n data: JSON.stringify(data),\r\n complete: function (response) {\r\n YouLi.Common.UI.HideLoading();\r\n if (response.responseJSON != undefined && response.responseJSON.url) {\r\n window.location.href = response.responseJSON.url;\r\n }\r\n else if (response.status === 500 || (response.responseJSON != undefined && response.responseJSON.success == false)) {\r\n var errorMessage = \"An error occurred.\";\r\n if (response.responseJSON.errorMessage)\r\n errorMessage = response.responseJSON.errorMessage;\r\n YouLi.Common.UI.ShowStandardDialog(errorMessage, \"Error\");\r\n }\r\n else {\r\n $(itemContainer).html(response.responseJSON.meetingBlockHtml);\r\n\r\n YouLi.Trip.UpdateItineraryContent(itineraryTabIsHidden, response.responseJSON.contentItineraryHtml);\r\n YouLi.Trip.UpdateInviteesContent(inviteesTabIsHidden, response.responseJSON.inviteesDetailsHtmlString);\r\n\r\n // Clear the message text for next time\r\n customMessageElement.val(\"\");\r\n }\r\n }\r\n\r\n });\r\n }\r\n\r\n YouLi.Trip.ShowDeclineMeetingRequestDialog = function (element) {\r\n const itemContainer = $(element).closest(\".item-container\");\r\n const meetingBlockId = $(itemContainer).data(\"id\");\r\n const profileContainer = $(element).closest(\"#content-trip-viewprofile\");\r\n const recipientInviteeId = $(profileContainer).data(\"profile-invitee-id\");\r\n const slotBookingName = $(\".view-profile-name\").text();\r\n\r\n $(\"#DeclineMeetingRequestDialog #RequestMeetingBlockId\").val(meetingBlockId);\r\n $(\"#DeclineMeetingRequestDialog #RequestMeetingRecipientInviteeId\").val(recipientInviteeId);\r\n $(\"#DeclineMeetingRequestDialog .invitee-name\").text(slotBookingName);\r\n\r\n $(\"#DeclineMeetingRequestDialog\").modal(\"show\");\r\n };\r\n\r\n YouLi.Trip.DeclineMeetingRequest = function () {\r\n\r\n var $form = $('#DeclineRequestForm');\r\n\r\n $.validator.unobtrusive.parse($form);\r\n $form.validate();\r\n\r\n if (!$form.valid()) {\r\n return;\r\n }\r\n\r\n $(\"#DeclineMeetingRequestDialog\").modal(\"hide\");\r\n\r\n YouLi.Common.UI.ShowLoading();\r\n\r\n const meetingBlockId = $(\"#DeclineMeetingRequestDialog #RequestMeetingBlockId\").val();\r\n const recipientInviteeId = $(\"#DeclineMeetingRequestDialog #RequestMeetingRecipientInviteeId\").val();\r\n const customMessageText = $(\"#DeclineMeetingRequestDialog #CustomMessageText\").val();\r\n\r\n const itineraryTabIsHidden = $(\"#content-trip-itinerary\").hasClass(\"hidden\");\r\n const inviteesTabIsHidden = $(\"#content-trip-invitees\").hasClass(\"hidden\");\r\n\r\n const itemContainer = $(`.profile-meeting-block.item-container[data-id='${meetingBlockId}']`);\r\n\r\n var data = {\r\n scheduleItemId: meetingBlockId,\r\n recipientInviteeId: recipientInviteeId,\r\n customMessageText: customMessageText\r\n };\r\n\r\n $.ajax({\r\n url: '/trip/DeclineMeetingRequest',\r\n type: \"POST\",\r\n dataType: \"json\",\r\n contentType: \"application/json; charset=utf-8\",\r\n data: JSON.stringify(data),\r\n complete: function (response) {\r\n YouLi.Common.UI.HideLoading();\r\n if (response.responseJSON != undefined && response.responseJSON.url) {\r\n window.location.href = response.responseJSON.url;\r\n }\r\n else if (response.status === 500 || (response.responseJSON != undefined && response.responseJSON.success == false)) {\r\n var errorMessage = \"An error occurred.\";\r\n if (response.responseJSON.errorMessage)\r\n errorMessage = response.responseJSON.errorMessage;\r\n YouLi.Common.UI.ShowStandardDialog(errorMessage, \"Error\");\r\n }\r\n else {\r\n $(itemContainer).html(response.responseJSON.meetingBlockHtml);\r\n\r\n YouLi.Trip.UpdateItineraryContent(itineraryTabIsHidden, response.responseJSON.contentItineraryHtml);\r\n YouLi.Trip.UpdateInviteesContent(inviteesTabIsHidden, response.responseJSON.inviteesDetailsHtmlString);\r\n }\r\n }\r\n\r\n });\r\n }\r\n\r\n YouLi.Trip.UndoDeclinedMeetingRequest = function (element) {\r\n\r\n const itemContainer = $(element).closest(\".item-container\");\r\n const meetingBlockId = $(itemContainer).data(\"id\");\r\n const profileContainer = $(element).closest(\"#content-trip-viewprofile\");\r\n const recipientInviteeId = $(profileContainer).data(\"profile-invitee-id\");\r\n\r\n const itineraryTabIsHidden = $(\"#content-trip-itinerary\").hasClass(\"hidden\");\r\n const inviteesTabIsHidden = $(\"#content-trip-invitees\").hasClass(\"hidden\");\r\n\r\n var data = {\r\n scheduleItemId: meetingBlockId,\r\n recipientInviteeId: recipientInviteeId\r\n };\r\n\r\n const undoButton = $(\".undo-declined-request\");\r\n YouLi.Common.UI.ShowButtonLoading(undoButton);\r\n\r\n $.ajax({\r\n url: '/trip/UndoDeclinedMeetingRequest',\r\n type: \"POST\",\r\n dataType: \"json\",\r\n contentType: \"application/json; charset=utf-8\",\r\n data: JSON.stringify(data),\r\n complete: function (response) {\r\n YouLi.Common.UI.HideButtonLoading(undoButton);\r\n\r\n if (response.responseJSON != undefined && response.responseJSON.url) {\r\n window.location.href = response.responseJSON.url;\r\n }\r\n else if (response.status === 500 || (response.responseJSON != undefined && response.responseJSON.success == false)) {\r\n var errorMessage = \"An error occurred.\";\r\n if (response.responseJSON.errorMessage)\r\n errorMessage = response.responseJSON.errorMessage;\r\n YouLi.Common.UI.ShowStandardDialog(errorMessage, \"Error\");\r\n }\r\n else {\r\n $(itemContainer).html(response.responseJSON.meetingBlockHtml);\r\n\r\n YouLi.Trip.UpdateItineraryContent(itineraryTabIsHidden, response.responseJSON.contentItineraryHtml);\r\n YouLi.Trip.UpdateInviteesContent(inviteesTabIsHidden, response.responseJSON.inviteesDetailsHtmlString);\r\n }\r\n }\r\n\r\n });\r\n }\r\n\r\n YouLi.Trip.ShowScheduleMeetingBookingSlot = function (element) {\r\n const displayTime = $(element).text();\r\n const slotId = $(element).data(\"slot-id\");\r\n\r\n $(\".meeting-block-slots--selectable\").addClass(\"hidden\"); // TODO: animate??\r\n const meetingBlockSelectorElement = $(element).closest(\".meeting-block-slot-selector\");\r\n $(meetingBlockSelectorElement).find(\".meeting-block-slots--list--slot\").find(\"#MeetingBlockSlotScheduleSlotDisplay\").html(displayTime);\r\n $(meetingBlockSelectorElement).find(\".meeting-block-slots--list--slot\").find(\".schedule-meeting\").data(\"slot-id\", slotId);\r\n $(meetingBlockSelectorElement).find(\".meeting-block-slots--list--slot\").removeClass(\"hidden\");\r\n }\r\n\r\n YouLi.Trip.HideScheduleMeetingBookingSlot = function (element) {\r\n (element).closest(\".meeting-block-slots--list--slot\").addClass(\"hidden\");\r\n $(\".meeting-block-slots--selectable\").removeClass(\"hidden\"); // TODO: animate??\r\n }\r\n\r\n YouLi.Trip.ShowEditMeetingBookingSlot = function (element) {\r\n $(element).closest(\".actions\").addClass(\"hidden\");\r\n\r\n // hide/show appropriate buttons for the initial stage of this flow\r\n const slotDetailsElement = $(element).closest(\".slot-details\")\r\n const editActionsElement = $(slotDetailsElement).find(\".edit-actions\");\r\n $(editActionsElement).find(\".cancel-meeting\").removeClass(\"hidden\");\r\n $(editActionsElement).find(\".reschedule-meeting\").removeClass(\"hidden\");\r\n $(editActionsElement).find(\".keep-meeting\").addClass(\"hidden\");\r\n\r\n $(editActionsElement).find(\".reschedule-meeting\").off(\"click\");\r\n $(editActionsElement).find(\".reschedule-meeting\").on(\"click\", function () {\r\n YouLi.Trip.ShowRescheduleMeetingBookingSlot($(this));\r\n });\r\n\r\n $(editActionsElement).find(\".cancel-meeting\").off(\"click\");\r\n $(editActionsElement).find(\".cancel-meeting\").on(\"click\", function () {\r\n YouLi.Trip.ShowCancelMeetingBookingSlotDialog($(this));\r\n });\r\n\r\n $(editActionsElement).removeClass(\"hidden\");\r\n }\r\n\r\n YouLi.Trip.ShowRescheduleMeetingBookingSlot = function (element) {\r\n const slotContainerElement = $(element).closest(\".meeting-block-slots--list--slot-container\");\r\n const editActionsElement = $(element).closest(\".edit-actions\");\r\n const reschedulerElement = $(slotContainerElement).find(\".reschedule-selector\");\r\n\r\n const meetingBlockBookingId = $(element).closest(\".actions\").data(\"booking-id\");\r\n\r\n YouLi.Common.UI.ShowLoading();\r\n\r\n $.ajax({\r\n url: `/trip/getmeetingblockrescheduler?meetingBlockBookingId=${meetingBlockBookingId}`,\r\n type: \"GET\",\r\n contentType: \"application/json; charset=utf-8\",\r\n complete: function (response) {\r\n YouLi.Common.UI.HideLoading();\r\n if (response.responseJSON != undefined && response.responseJSON.url) {\r\n window.location.href = response.responseJSON.url;\r\n }\r\n else if (response.status === 500 || (response.responseJSON != undefined && response.responseJSON.success == false)) {\r\n var errorMessage = \"An error occurred.\";\r\n if (response.responseJSON.errorMessage)\r\n errorMessage = response.responseJSON.errorMessage;\r\n YouLi.Common.UI.ShowStandardDialog(errorMessage, \"Error\");\r\n }\r\n else {\r\n $(reschedulerElement).html(response.responseJSON.meetingBlockReschedulerHtml);\r\n\r\n // hide/show appropriate buttons for the \"reschedule\" stage of this flow\r\n $(editActionsElement).find(\".cancel-meeting\").addClass(\"hidden\");\r\n $(editActionsElement).find(\".reschedule-meeting\").addClass(\"hidden\");\r\n $(editActionsElement).find(\".keep-meeting\").removeClass(\"hidden\");\r\n\r\n $(editActionsElement).find(\".keep-meeting\").off(\"click\");\r\n $(editActionsElement).find(\".keep-meeting\").on(\"click\", function () {\r\n YouLi.Trip.HideEditMeetingBookingSlot($(this));\r\n });\r\n\r\n $(reschedulerElement).removeClass(\"hidden\");\r\n $(\".meeting-block-slots--selectable\").removeClass(\"hidden\");\r\n }\r\n }\r\n });\r\n }\r\n\r\n YouLi.Trip.HideEditMeetingBookingSlot = function (element) {\r\n $(element).closest(\".slot-details\").find(\".actions\").removeClass(\"hidden\");\r\n $(element).closest(\".slot-details\").find(\".edit-actions\").addClass(\"hidden\");\r\n\r\n $(element).closest(\".meeting-block-slots--list--slot-container\").find(\".reschedule-selector\").html(\"\").addClass(\"hidden\");\r\n }\r\n\r\n YouLi.Trip.ShowCancelMeetingBookingSlotDialog = function (cancelMeetingButtonElement) {\r\n const meetingBlockBookingId = $(cancelMeetingButtonElement).closest(\".actions\").data(\"booking-id\");\r\n const slotBookingName = $(cancelMeetingButtonElement).closest(\".actions\").data(\"booking-name-other\");\r\n const slotDisplayTime = $(cancelMeetingButtonElement).closest(\".slot-details\").find(\".slot-display-time\").text();\r\n\r\n $(\"#MeetingBookingCancelDialog #CancelMeetingBlockBookingId\").val(meetingBlockBookingId);\r\n $(\"#MeetingBookingCancelDialog .meeting-block-name\").text(slotDisplayTime);\r\n $(\"#MeetingBookingCancelDialog .invitee-name\").text(slotBookingName);\r\n\r\n $(\"#MeetingBookingCancelDialog .do-cancel-meeting\").off(\"click\");\r\n $(\"#MeetingBookingCancelDialog .do-cancel-meeting\").on(\"click\", function () {\r\n YouLi.Trip.CancelMeetingBookingSlot();\r\n });\r\n\r\n $(\"#MeetingBookingCancelDialog\").modal(\"show\");\r\n }\r\n\r\n YouLi.Trip.CancelMeetingBookingSlot = function () {\r\n\r\n $(\"#MeetingBookingCancelDialog\").modal(\"hide\");\r\n\r\n const meetingBlockBookingId = $(\"#MeetingBookingCancelDialog #CancelMeetingBlockBookingId\").val();\r\n\r\n let itineraryTabIsHidden = $(\"#content-trip-itinerary\").hasClass(\"hidden\");\r\n let inviteesTabIsHidden = $(\"#content-trip-invitees\").hasClass(\"hidden\");\r\n\r\n if (meetingBlockBookingId) {\r\n\r\n YouLi.Common.UI.ShowLoading();\r\n\r\n var data = {\r\n meetingBlockBookingId: meetingBlockBookingId,\r\n };\r\n\r\n $.ajax({\r\n url: '/trip/cancelmeetingbooking',\r\n type: \"POST\",\r\n dataType: \"json\",\r\n contentType: \"application/json; charset=utf-8\",\r\n data: JSON.stringify(data),\r\n complete: function (response) {\r\n YouLi.Common.UI.HideLoading();\r\n if (response.responseJSON != undefined && response.responseJSON.url) {\r\n window.location.href = response.responseJSON.url;\r\n }\r\n else if (response.status === 500 || (response.responseJSON != undefined && response.responseJSON.success == false)) {\r\n var errorMessage = \"An error occurred.\";\r\n if (response.responseJSON.errorMessage)\r\n errorMessage = response.responseJSON.errorMessage;\r\n YouLi.Common.UI.ShowStandardDialog(errorMessage, \"Error\");\r\n }\r\n else {\r\n YouLi.Trip.UpdateItineraryContent(itineraryTabIsHidden, response.responseJSON.contentItineraryHtml);\r\n YouLi.Trip.UpdateInviteesContent(inviteesTabIsHidden, response.responseJSON.inviteesDetailsHtmlString);\r\n\r\n // refresh the current profile (if that is what's currently showing)\r\n if ($('#content-trip-viewprofile').length > 0 && !$(\"#content-trip-viewprofile\").hasClass(\"hidden\")) {\r\n var viewedProfileId = $(\"#content-trip-viewprofile\").data(\"profile-invitee-id\");\r\n YouLi.Trip.ViewProfileForInvitee(viewedProfileId);\r\n }\r\n }\r\n }\r\n\r\n });\r\n }\r\n }\r\n\r\n YouLi.Trip.SetMeetingBookingSlotAvailability = function (element) {\r\n\r\n var scheduleItemId = element.dataset.scheduleItemId;\r\n var slotId = element.dataset.slotId;\r\n var status = element.dataset.status;\r\n var meetingBlockId = element.dataset.meetingBlockBookingId;\r\n\r\n let itineraryTabIsHidden = $(\"#content-trip-itinerary\").hasClass(\"hidden\");\r\n\r\n YouLi.Common.UI.ShowLoading();\r\n\r\n var data = {\r\n ScheduleItemId: scheduleItemId,\r\n SlotId: slotId,\r\n Status: status,\r\n MeetingBlockBookingId: meetingBlockId\r\n };\r\n\r\n $.ajax({\r\n url: '/trip/SetMeetingBookingAvailability',\r\n type: \"POST\",\r\n dataType: \"json\",\r\n contentType: \"application/json; charset=utf-8\",\r\n data: JSON.stringify(data),\r\n complete: function (response) {\r\n YouLi.Common.UI.HideLoading();\r\n if (response.responseJSON != undefined && response.responseJSON.url) {\r\n window.location.href = response.responseJSON.url;\r\n }\r\n else if (response.status === 500 || (response.responseJSON != undefined && response.responseJSON.success == false)) {\r\n var errorMessage = \"An error occurred.\";\r\n if (response.responseJSON != null && response.responseJSON.errors)\r\n errorMessage = response.responseJSON.errors;\r\n YouLi.Common.UI.ShowStandardDialog(errorMessage, \"Error\");\r\n }\r\n else {\r\n YouLi.Trip.UpdateItineraryContent(itineraryTabIsHidden, response.responseJSON.contentItineraryHtml);\r\n\r\n // refresh the current profile (if that is what's currently showing)\r\n if ($('#content-trip-viewprofile').length > 0 && !$(\"#content-trip-viewprofile\").hasClass(\"hidden\")) {\r\n var viewedProfileId = $(\"#content-trip-viewprofile\").data(\"profile-invitee-id\");\r\n YouLi.Trip.ViewProfileForInvitee(viewedProfileId);\r\n }\r\n }\r\n }\r\n\r\n });\r\n }\r\n\r\n YouLi.Trip.ScheduleMeetingBookingSlot = function (scheduleMeetingButtonElement) {\r\n\r\n const itemContainer = $(scheduleMeetingButtonElement).closest(\".item-container\");\r\n const meetingBlockId = $(itemContainer).data(\"id\");\r\n const meetingBlockBookingId = $(scheduleMeetingButtonElement).data(\"booking-id\");\r\n const slotId = $(scheduleMeetingButtonElement).data(\"slot-id\");\r\n\r\n let itineraryTabIsHidden = $(\"#content-trip-itinerary\").hasClass(\"hidden\");\r\n let inviteesTabIsHidden = $(\"#content-trip-invitees\").hasClass(\"hidden\");\r\n\r\n if (!(slotId && meetingBlockBookingId)) {\r\n return;\r\n }\r\n\r\n YouLi.Common.UI.ShowLoading();\r\n\r\n var data = {\r\n scheduleItemId: meetingBlockId,\r\n meetingBlockBookingId: meetingBlockBookingId,\r\n slotId: slotId\r\n };\r\n\r\n $.ajax({\r\n url: '/trip/schedulemeetingbookingslot',\r\n type: \"POST\",\r\n dataType: \"json\",\r\n contentType: \"application/json; charset=utf-8\",\r\n data: JSON.stringify(data),\r\n complete: function (response) {\r\n YouLi.Common.UI.HideLoading();\r\n if (response.responseJSON != undefined && response.responseJSON.url) {\r\n window.location.href = response.responseJSON.url;\r\n }\r\n else if (response.status === 500 || (response.responseJSON != undefined && response.responseJSON.success == false)) {\r\n var errorMessage = \"An error occurred.\";\r\n if (response.responseJSON.errorMessage)\r\n errorMessage = response.responseJSON.errorMessage;\r\n YouLi.Common.UI.ShowStandardDialog(errorMessage, \"Error\");\r\n }\r\n else {\r\n YouLi.Trip.UpdateItineraryContent(itineraryTabIsHidden, response.responseJSON.contentItineraryHtml);\r\n YouLi.Trip.UpdateInviteesContent(inviteesTabIsHidden, response.responseJSON.inviteesDetailsHtmlString);\r\n\r\n // refresh the current profile (if that is what's currently showing)\r\n if ($('#content-trip-viewprofile').length > 0 && !$(\"#content-trip-viewprofile\").hasClass(\"hidden\")) {\r\n var viewedProfileId = $(\"#content-trip-viewprofile\").data(\"profile-invitee-id\");\r\n YouLi.Trip.ViewProfileForInvitee(viewedProfileId);\r\n }\r\n }\r\n }\r\n\r\n });\r\n };\r\n\r\n YouLi.Trip.UpdateItineraryContent = function (itineraryTabIsHidden, html) {\r\n // get and restore collapsible panel states \r\n var openPanelIds = $(\"#itinerary-content .panel-collapse.collapse.in\").map(function () { return this.id; }).get();\r\n $('#itinerary-content').html(html);\r\n $(\".panel-collapse.collapse\").removeClass(\"in\");\r\n if (openPanelIds.length > 0) {\r\n $('#' + openPanelIds.join(',#')).addClass(\"in\"); // do this before calling collapse() as we don't want this animated here\r\n $('#' + openPanelIds.join(',#')).collapse(\"show\");\r\n }\r\n\r\n if (!itineraryTabIsHidden)\r\n $(\"#content-trip-itinerary\").removeClass(\"hidden\");\r\n\r\n YouLi.Trip.Itinerary.FilterItems();\r\n YouLi.Trip.Itinerary.UpdateMenuNav();\r\n }\r\n\r\n YouLi.Trip.UpdateTaskContent = function (taskTabIsHidden, html) {\r\n $('#tasks-content').html(html);\r\n\r\n if (!taskTabIsHidden)\r\n $(\"#content-trip-tasks\").removeClass(\"hidden\");\r\n\r\n YouLi.Trip.Tasks.FilterTasks();\r\n }\r\n\r\n YouLi.Trip.UpdateProgramContent = function (programTabIsHidden, html) {\r\n\r\n $('#program-content').html(html);\r\n\r\n $(\"#content-trip-program\").toggleClass(\"hidden\", programTabIsHidden);\r\n\r\n YouLi.Trip.Program.RefreshLayout();\r\n YouLi.Trip.Program.UpdateMenuNav();\r\n }\r\n\r\n YouLi.Trip.UpdateInviteesContent = function (inviteeTabIsHidden, html) {\r\n\r\n $('#invitees-content').html(html);\r\n\r\n if (!inviteeTabIsHidden)\r\n $(\"#content-trip-itinerary\").removeClass(\"hidden\");\r\n\r\n YouLi.Trip.SetupInviteeSectionMenu();\r\n }\r\n\r\n YouLi.Trip.UpdateMenuContent = function (selectedSectionMenuItem, html) {\r\n\r\n // update either the \"top\" menu or the normal one, depending on which is in use\r\n if ($(\".content-trip-details-menu-top\").length > 0)\r\n $(\".content-trip-details-menu-top\").html(html);\r\n else\r\n $(\".content-trip-details-menu\").html(html);\r\n\r\n // update the activated menu back to what it was\r\n $(\".content-trip-details-menu .nav li\").removeClass(\"active\");\r\n $(\".content-trip-details-menu .nav li\").find(\"[data-section='\" + selectedSectionMenuItem + \"']\").addClass(\"active\");\r\n\r\n YouLi.Trip.RefreshMenuAffix();\r\n }\r\n\r\n YouLi.Trip.ResizeSalesPageMenuWithLogo = function () {\r\n\r\n if ($(\"#SalesPageMenuWithLogo\").length == 0)\r\n return;\r\n\r\n const menuItemLinks = $(\".sales-page-dr-sheri .content-trip-details-top .content-trip-details-menu-top.traveller ul.nav a\");\r\n\r\n if (YouLi.Common.UI.GetClientWidth() > 767) {\r\n $(\"svg\", menuItemLinks).css({ \"display\": 'block' })\r\n $(\".text\", menuItemLinks).css({ \"display\": \"block\" })\r\n\r\n let firstLi = $(\"#SalesPageMenuWithLogo li:first-child\");\r\n if ($(firstLi).position().top > 0) {\r\n $(\"svg\", menuItemLinks).css({ \"display\": \"none\" });\r\n\r\n // If the menu STILL runs onto a second line (checking top again now), revert to the icons as well\r\n if ($(firstLi).position().top > 0 && $(menuItemLinks).find(\"svg\").first().css('display') == 'none') {\r\n $(\".text\", menuItemLinks).css({ \"display\": \"none\" });\r\n $(\"svg\", menuItemLinks).css({ \"display\": 'block' })\r\n }\r\n }\r\n\r\n } else {\r\n $(\".text\", menuItemLinks).css({ \"display\": \"none\" })\r\n $(\"svg\", menuItemLinks).css({ \"display\": 'block' })\r\n }\r\n\r\n YouLi.Trip.UpdateSalesPageBannerPosition();\r\n\r\n };\r\n\r\n YouLi.Trip.UpdateSalesPageBannerPosition = function () {\r\n $('.content-trip-heading-image').css('margin-top', parseInt($('.content-trip-details-menu-top').css(\"height\")));\r\n }\r\n\r\n YouLi.Trip.RefreshMenuAffix = function () {\r\n $('.content-trip-details-menu.traveller ul.nav').affix({\r\n offset: {\r\n top: function () {\r\n return $(\".content-trip-details-menu\").offset().top;\r\n },\r\n bottom: $(\"html\").outerWidth() < 767 ? 0 : 1000\r\n }\r\n }).on(\"affixed.bs.affix\", function () {\r\n\r\n if (!YouLi.Trip.AffixWindowResizeInitialised) {\r\n\r\n $(window).on(\"resize\", function () {\r\n $('.content-trip-details-menu.traveller ul.nav').data('bs.affix').options.offset.bottom = $(\"html\").outerWidth() < 767 ? 0 : 1000;\r\n });\r\n YouLi.Trip.AffixWindowResizeInitialised = true;\r\n }\r\n });\r\n }\r\n\r\n $(function () {\r\n\r\n if (YouLi.Trip.StyleName == YouLi.Trip.StylesNameSalesPageDrSheri) {\r\n $(\"#SalesPageMenuLogo img\").on(\"load\", function () {\r\n YouLi.Trip.ResizeSalesPageMenuWithLogo(); // call initially after loading the logo\r\n });\r\n\r\n $(window).on(\"resize\", function () {\r\n YouLi.Trip.ResizeSalesPageMenuWithLogo();\r\n });\r\n }\r\n\r\n YouLi.Trip.ToggleMainMenu();\r\n\r\n if ($(\"#RespondedYesRecentlyDialog\").length == 1)\r\n $(\"#RespondedYesRecentlyDialog\").modal('show');\r\n\r\n $(\".load-in-app\").toggle(!(YouLi.Common.Utils.IsYouLiMobileApp() || YouLi.Common.Utils.IsYouLiBundler())); // YOULI-5601 hide Load In App button in the actual app\r\n\r\n $(document).off(\"click\", \".load-in-app\").on(\"click\", \".load-in-app\", function () {\r\n if (YouLi.Trip.TripHasMobileAppEnabled) {\r\n if (YouLi.Common.Utils.IsMobile() && !YouLi.Common.Utils.IsYouLiBundler()) {\r\n return true;\r\n }\r\n else {\r\n $(\"#MobileAppDesktopDialog\").modal(\"show\");\r\n return false;\r\n }\r\n } else {\r\n if (YouLi.Trip.IsCurrentUserTripOwner) {\r\n let tripId = $(\"#TripId\").val();\r\n let target = \"_blank\";\r\n //let showPremiumTrip = $(this).data('premium-trip');\r\n YouLi.UpgradeSubscription.GoToUpgradePage(\"\", 'To allow your travelers to use the Mobile App to view their trips online and offline, upgrade to at least PRO. The Load in App button will not appear to your travelers until you upgrade.', \"\", \"\", false, window.location.pathname + window.location.search, tripId, target);\r\n } else if (YouLi.Trip.IsCurrentUserTripPlanner) {\r\n YouLi.Common.UI.ShowStandardDialog('To enable \"Load in App\" and allow registered travelers to view your trip pages online + offline on their Apple or Android phone, contact your trip owner to upgrade. <a target=\"_blank\" href=\"https://support.youli.io/360001340576\" class=\"helper-link\">Learn More</a>', 'UPGRADE TO GET THIS FEATURE', 'OK', 'warning', '');\r\n }\r\n return false;\r\n }\r\n });\r\n\r\n YouLi.Trip.SetupFixNavbarOnTop();\r\n YouLi.Trip.TrimMiniBioDisplay();\r\n\r\n $(window).resize(function () {\r\n YouLi.Trip.SetupFixNavbarOnTop();\r\n YouLi.Trip.TrimMiniBioDisplay();\r\n });\r\n\r\n $(document).on(\"click\", \".share-trip-button\", function () {\r\n var tripId = $(this).data('trip-id');\r\n var inviteeId = $(this).data('invitee-id');\r\n let userAffiliateCode = $(this).data(\"affiliate-code\");\r\n const triggerPage = $(this).data(\"trigger-page\");\r\n\r\n let url = `/Planner/GetTripShareView?tripId=${tripId}&inviteeId=${inviteeId}&triggerPage=${triggerPage}&userAffiliateCode=${userAffiliateCode}`;\r\n YouLi.Common.UI.ShowLoading();\r\n $.ajax({\r\n url: url,\r\n type: \"GET\",\r\n contentType: \"application/json\",\r\n complete: function (response) {\r\n if (YouLi.Common) {\r\n YouLi.Common.UI.HideLoading();\r\n }\r\n\r\n if (response.status == 500 || response.statusText == \"error\") {\r\n YouLi.Common.UI.ShowStandardDialog(\"An error occurred when loading share trip view.\");\r\n }\r\n else {\r\n $(\"#share-trip-div\").html(response.responseText);\r\n $('#ShareTripDialog').modal(\"show\");\r\n }\r\n }\r\n });\r\n });\r\n\r\n YouLi.Trip.Program.UpdateMenuNav(); // init\r\n\r\n if ((YouLi.Common.Utils.IsYouLiMobileApp() || YouLi.Common.Utils.IsYouLiBundler())) {\r\n YouLi.Trip.StripBlankLinkTargets();\r\n }\r\n\r\n YouLi.Trip.RefreshMenuAffix();\r\n\r\n YouLi.TripDates.Initialise();\r\n\r\n if (YouLi.Trip.InitialDate !== \"\") {\r\n if (YouLi.Trip.StyleName !== YouLi.Trip.StylesNameSalesPageDrSheri) {\r\n YouLi.Trip.Program.GoToDate(YouLi.Trip.InitialDate);\r\n }\r\n YouLi.Trip.Itinerary.GoToDate(YouLi.Trip.InitialDate);\r\n }\r\n\r\n if (window.location.hash) {\r\n var section = window.location.hash.substring(1);\r\n\r\n if (section == \"viewprofile\") {\r\n var urlParams = new URLSearchParams(window.location.search);\r\n const viewInviteeId = urlParams.get(\"viewinvitee\")\r\n\r\n if (viewInviteeId)\r\n YouLi.Trip.ViewProfileForInvitee(viewInviteeId, true);\r\n else\r\n YouLi.Trip.ViewProfileForInvitee($(\"#InviteeId\").val(), true);\r\n }\r\n else {\r\n YouLi.Trip.GoToSection(section);\r\n }\r\n }\r\n else if (YouLi.Trip.SkipToItinerary) {\r\n YouLi.Trip.GoToSection(\"itinerary\");\r\n }\r\n\r\n if (YouLi.Trip.RespondedRecently) {\r\n\r\n // Scroll to the top of the content details when they have just responded\r\n $('html, body').animate({\r\n scrollTop: $(\"#content-trip-paymentdetails .trip-details-main__inner\").offset().top - YouLi.Trip.AffixTop()\r\n }, 1000);\r\n\r\n } else if (YouLi.Trip.CheckoutSuccessfulRecently) {\r\n\r\n // Scroll to the top of the payments list when they have just used checkout to register\r\n $('html, body').animate({\r\n scrollTop: $(\"#ContentCostPaymentList\").offset().top - YouLi.Trip.AffixTop()\r\n }, 1000);\r\n } else if (YouLi.Trip.GangPlaceholdersDialogOnLoad) {\r\n // show the gang placeholder details dialog immediately if required\r\n $('#GangPlaceholdersDialog').modal('show');\r\n }\r\n\r\n\r\n $(document).on(\"click\", \"#sendreceiptemailbutton\", function () {\r\n YouLi.Common.SendPaymentReceipt($(\"#TripId\").val(), $(\"#InviteeId\").val());\r\n });\r\n\r\n $(document).on(\"click\", \".content-trip-heading-title.allow-response\", function () {\r\n $(\"#ResponseDialogYes\").modal(\"show\");\r\n });\r\n\r\n $(document).on(\"show.bs.modal\", \"#ResponseDialogYes\", function (e) {\r\n\r\n // First, check if we need to redirect to checkout flow, based on the payment style (when the pricing mode is not Brochure Mode)\r\n if (YouLi.Trip.IsAnonymousAccess && YouLi.Trip.PricingMode != \"estimated\" && YouLi.Trip.PaymentStyle == \"checkoutflowafter\") {\r\n window.location.href = YouLi.Trip.CheckoutFlowPageURL;\r\n return e.preventDefault();\r\n }\r\n\r\n var numUnrespondedItineraryItems = $(\".itinerary-accordion-item .response .check:not(.checked)\").length;\r\n\r\n if (numUnrespondedItineraryItems == 0) {\r\n $(\"#ResponseDialogYes .well.alert.outstanding-responses-list\").addClass(\"hidden\");\r\n }\r\n else {\r\n $(\"#ResponseDialogYes .well.alert.outstanding-responses-list\").removeClass(\"hidden\");\r\n\r\n $(\"#ResponseDialogYes .outstanding-responses-list ul\").empty();\r\n $(\".itinerary-accordion-item .response .check:not(.checked)\").each(function (item) {\r\n\r\n var itineraryItemElement = $(this).closest(\".itinerary-accordion-item\");\r\n var itineraryItemId = $(itineraryItemElement).data(\"id\");\r\n\r\n var itemToList = $.grep(YouLi.Trip.Itinerary.ItineraryItems, function (item) {\r\n return item.ScheduleItemId == itineraryItemId;\r\n });\r\n\r\n if (itemToList.length != 0) {\r\n var itemStartDate = moment(itemToList.StartDateTime);\r\n\r\n $(\"#ResponseDialogYes .outstanding-responses-list ul\").append(\"<li>\" + itemToList[0].Name + \" <span class='date'>\" + itemStartDate.format('ddd DD MMM') + \"</span>\");\r\n }\r\n });\r\n }\r\n\r\n // Set dropdown for Speakeasy if it makes sense.\r\n if ($(\"#speakeasy-dates\").length == 1) {\r\n let itemId = $(\"#ResponseItineraryItemIncluded\").val();\r\n if (itemId) {\r\n $(\"#ChosenOccurrence\").val(itemId);\r\n }\r\n\r\n let update = function () {\r\n $(\"#ChosenOccurrence option:selected\").each(function () {\r\n $(\"#ResponseItineraryItemIncluded\").val($(this).val());\r\n $(\"#ResponseItineraryItemIncludedAnswer\").val(\"yes\");\r\n });\r\n }\r\n\r\n update();\r\n\r\n $(\"#ChosenOccurrence\").on(\"change\", function () {\r\n update();\r\n });\r\n }\r\n });\r\n\r\n $(document).on(\"hide.bs.modal\", \"#ResponseDialogYes\", function () {\r\n // clear previous itinerary item selection\r\n $(\"#ResponseItineraryItemIncluded\").val(\"\");\r\n });\r\n\r\n $(document).on(\"click\", '#ResponseDialogYes button[type=\"submit\"]', function () {\r\n $(\"#ResponseDialogYes form\").submit();\r\n });\r\n\r\n $(document).off(\"click\", \".switch-invitee\");\r\n $(document).on(\"click\", \".switch-invitee\", function () {\r\n\r\n const data = {\r\n tripid: $(\"#TripId\").val(),\r\n inviteeid: $(\"#InviteeId\").val(),\r\n switchToInviteeId: $(this).data('inviteeid')\r\n };\r\n const updateLink = $(this).data('link');\r\n YouLi.Common.UI.ShowLoading();\r\n $.ajax({\r\n url: \"/trip/InsertChangeProfileLog\",\r\n type: \"POST\",\r\n dataType: \"json\",\r\n contentType: \"application/json; charset=utf-8\",\r\n data: JSON.stringify(data),\r\n complete: function (response) {\r\n window.location.assign(updateLink);\r\n }\r\n });\r\n });\r\n\r\n $(document).off(\"click\", \".set-meeting-slot-availability\");\r\n $(document).on(\"click\", \".set-meeting-slot-availability\", function () {\r\n\r\n YouLi.Trip.SetMeetingBookingSlotAvailability(this);\r\n });\r\n\r\n $(document).off(\"click\", \".view-profile-link\");\r\n $(document).on(\"click\", \".view-profile-link\", function () {\r\n\r\n const inviteeId = $(this).data(\"profile-invitee-id\");\r\n YouLi.Trip.ViewProfileForInvitee(inviteeId, true);\r\n });\r\n\r\n $(document).off(\"click\", \".request-meeting\");\r\n $(document).on(\"click\", \".request-meeting\", function () {\r\n\r\n YouLi.Trip.ShowRequestMeetingBookingDialog($(this));\r\n });\r\n\r\n $(document).off(\"click\", \"#MeetingBookingRequestDialog .do-send-request\");\r\n $(document).on(\"click\", \"#MeetingBookingRequestDialog .do-send-request\", function () {\r\n\r\n YouLi.Trip.RequestMeetingBooking();\r\n });\r\n\r\n $(document).off(\"click\", \".decline-request\");\r\n $(document).on(\"click\", \".decline-request\", function () {\r\n\r\n YouLi.Trip.ShowDeclineMeetingRequestDialog($(this));\r\n });\r\n\r\n $(document).off(\"click\", \"#DeclineMeetingRequestDialog .send-decline-request-messgae\");\r\n $(document).on(\"click\", \"#DeclineMeetingRequestDialog .send-decline-request-messgae\", function () {\r\n\r\n YouLi.Trip.DeclineMeetingRequest();\r\n });\r\n\r\n $(document).off(\"click\", \".undo-declined-request\");\r\n $(document).on(\"click\", \".undo-declined-request\", function () {\r\n\r\n YouLi.Trip.UndoDeclinedMeetingRequest($(this));\r\n });\r\n\r\n $(document).off(\"click\", \".meeting-block-slots--selectable .slot:not(.booked)\");\r\n $(document).on(\"click\", \".meeting-block-slots--selectable .slot:not(.booked)\", function () {\r\n\r\n YouLi.Trip.ShowScheduleMeetingBookingSlot($(this));\r\n });\r\n\r\n $(document).off(\"click\", \".schedule-meeting\");\r\n $(document).on(\"click\", \".schedule-meeting\", function () {\r\n\r\n YouLi.Trip.ScheduleMeetingBookingSlot($(this));\r\n });\r\n\r\n $(document).off(\"click\", \".close-schedule\");\r\n $(document).on(\"click\", \".close-schedule\", function () {\r\n\r\n YouLi.Trip.HideScheduleMeetingBookingSlot($(this));\r\n });\r\n\r\n $(document).off(\"click\", \".meeting-block-slots--list--slot.booked .edit-booking\");\r\n $(document).on(\"click\", \".meeting-block-slots--list--slot.booked .edit-booking\", function () {\r\n\r\n YouLi.Trip.ShowEditMeetingBookingSlot($(this));\r\n });\r\n\r\n // main menu functionality\r\n $(document).off(\"click\", \".content-trip .content-tab\");\r\n $(document).on(\"click\", \".content-trip .content-tab\", function () {\r\n var section = $(this).data(\"section\");\r\n\r\n var triggerElement = $(this);\r\n var scrollTop = Math.max($(\"html\").scrollTop(), $(\"body\").scrollTop()); // NOTE: $(\"body\").scrollTop returns the right value on safari, but returns the zero on other. In reverse, $(\"html, body\").scrollTop returns 0 in safari but the right value in others... argh!\r\n if (scrollTop > $('.content-trip-details-main').offset().top) {\r\n\r\n $('html, body').animate({\r\n scrollTop: $('.content-trip-details-main').offset().top\r\n }, 'fast', function () {\r\n YouLi.Trip.GoToSection(section, $(this), triggerElement.data(\"scroll\"), triggerElement.data(\"scroll-override\"));\r\n $('.content-trip-details-menu.traveller ul.nav').affix('checkPosition');\r\n });\r\n }\r\n else {\r\n\r\n YouLi.Trip.GoToSection(section, $(this));\r\n $('.content-trip-details-menu.traveller ul.nav').affix('checkPosition');\r\n }\r\n\r\n });\r\n\r\n $(document).on(\"click\", \".content-trip-heading-details-location\", function () {\r\n if (!$(\".content-trip-heading-details-location\").data('is-virtual')) {\r\n $('html, body').animate({\r\n scrollTop: $(\".content-trip-details-location\").offset().top\r\n }, 1000);\r\n }\r\n\r\n });\r\n\r\n YouLi.Trip.SetupInviteeSectionMenu();\r\n\r\n // resources menu functionality\r\n $(\".resources-section-links .content-list-tab:not(.disabled)\").on(\"click touchstart\", function () {\r\n var section = $(this).data(\"section\");\r\n\r\n YouLi.Trip.GoToResourceSection(section);\r\n });\r\n\r\n\r\n $(\".content-trip-response-footer-container\").on(\"click\", \".close-footer\", function () {\r\n var tripId = $(\"#TripId\").val();\r\n var in60Minutes = 1 / 24;\r\n Cookies.set(tripId + '-TripHideFooter', \"true\", { expires: in60Minutes });\r\n $(\".content-trip-response-footer\").addClass(\"hidden\");\r\n\r\n YouLi.Trip.AdjustFooterForFloatingFooter();\r\n });\r\n\r\n function isImageBroken(image) {\r\n return image.naturalWidth === 0 || image.naturalHeight === 0 || image.complete === false;\r\n }\r\n\r\n $(document).on('change', '#NumberInGroup', function () {\r\n const data = {\r\n tripid: $(\"#TripId\").val(),\r\n numberInGroup: $('#NumberInGroup').val(),\r\n inviteeFullName: `${$('#ResponseFirstName').val()} ${$('#ResponseLastName').val()}`\r\n };\r\n YouLi.Common.UI.ShowLoading();\r\n $.ajax({\r\n url: \"/trip/UpdateGangMembersSection\",\r\n type: \"POST\",\r\n dataType: \"json\",\r\n contentType: \"application/json; charset=utf-8\",\r\n data: JSON.stringify(data),\r\n complete: function (response) {\r\n YouLi.Common.UI.HideLoading();\r\n if (response.status === 500 || (response.responseJSON != undefined && response.responseJSON.success == false)) {\r\n YouLi.Common.UI.ShowStandardDialog(\"An error occurred.\");\r\n }\r\n else {\r\n $('#GangDetails').html(response.responseJSON.gangDetailsHtmlString);\r\n $('#GangMemberDetails').html(response.responseJSON.gangMemberHtmlString);\r\n\r\n // if there are more than one gang members, then show the label for the primary invitee\r\n $(\"#PrimaryInviteeGangMemberLabel\").toggleClass(\"hidden\", $(\".gang-member-label\").length == 1)\r\n\r\n let $form = $('#AddEditTripUser');\r\n $.validator.unobtrusive.parse($form); // nb: this currently isn't working to trigger the unobtrusive validation for some reason\r\n }\r\n }\r\n });\r\n });\r\n\r\n $(document).on('keypress', '[name=\"ResponseFirstName\"], [name=\"ResponseLastName\"]', function (e) {\r\n //64 is char '@'\r\n if (e.which === 64) {\r\n e.preventDefault();\r\n }\r\n });\r\n\r\n YouLi.Trip.AdjustFooterForFloatingFooter(); // init\r\n\r\n // Set a timeout to update payments list if there are any in-progress payments\r\n YouLi.Trip.SetupUpdatePaymentsListTimer();\r\n\r\n $(\"#AddEditTripUser\").off(\"dp.change\", \".date-time-container .datepicker\");\r\n $(\"#AddEditTripUser\").on(\"dp.change\", \".date-time-container .datepicker\", function (e) {\r\n YouLi.Trip.UpdateDateTimeAnswer(this);\r\n });\r\n\r\n $(\"#AddEditTripUser\").off(\"dp.change\", \".date-time-container .timepicker\");\r\n $(\"#AddEditTripUser\").on(\"dp.change\", \".date-time-container .timepicker\", function (e) {\r\n YouLi.Trip.UpdateDateTimeAnswer(this);\r\n });\r\n\r\n YouLi.Trip.SetupMapEvents();\r\n\r\n var forcePreventFooterUpdate = YouLi.Common.Utils.GetParameterFromURL(\"preventfooterupdate\");\r\n if (!forcePreventFooterUpdate) {\r\n setTimeout(function () {\r\n YouLi.Trip.UpdateResponseFooter(false, true);\r\n }, YouLi.Trip.FooterUpdateTimeout);\r\n }\r\n\r\n if (YouLi.Trip.ShowImageErrorReport) {\r\n\r\n const images = document.querySelectorAll('img');\r\n\r\n // Set up a load event listener, so that whenever an image successfully loods we can clear any broken image state off it\r\n images.forEach((img) => {\r\n img.addEventListener(\"load\", (event) => {\r\n console.log(\"image with src \" + event.target.src + \" loaded\");\r\n event.target.classList.remove(\"broken-image\");\r\n });\r\n });\r\n\r\n // Update any editor images to skip cache (no need for signing policies on these bucket images)\r\n images.forEach((img) => {\r\n if (img.src.indexOf(\"ylt-planner-editor-images.imgix.net\")) {\r\n img.src = img.src.replace(\"ylt-planner-editor-images.imgix.net\", \"ylt-planner-editorimages.s3.us-east-1.amazonaws.com\");\r\n }\r\n });\r\n\r\n // After a slight delay, loop through all the image elements on the page and check for any broken ones (they may also be subsequently fixed once they finished loading, if\r\n // that takes longer than 1 second)\r\n setTimeout(function () {\r\n const brokenImageUrls = [];\r\n // Iterate through the image elements and check for broken images, excluding lazy-loaded images\r\n images.forEach((img) => {\r\n if (!img.classList.contains(\"hidden\") && (!img.hasAttribute('loading') || img.getAttribute('loading') !== 'lazy')) {\r\n if (isImageBroken(img) && img.getAttribute('src')) {\r\n console.log(\"Image with src \" + img.src + \" is broken\");\r\n img.classList.add(\"broken-image\");\r\n brokenImageUrls.push(img.getAttribute('src'));\r\n }\r\n }\r\n });\r\n\r\n // Display the array of broken image URLs in the console\r\n //console.log('Broken Image URLs:', brokenImageUrls);\r\n\r\n //if ($(\"img.broken-image\").length > 0) \r\n const croppingNote = \"<br><br>Note that in this view mode, cropping is not applied, click BACK TO TRIP to preview with cropping\";\r\n if (brokenImageUrls.length > 0)\r\n YouLi.Common.UI.ShowStandardDialog(`There are images missing or about to expire from cache, please review the page for red boxes to see these.${croppingNote}`, \"Check Images\");\r\n else\r\n YouLi.Common.UI.ShowStandardDialog(`No images missing or about to expire from cache.${croppingNote}`, \"Check Images\", \"OK\", \"success\");\r\n }, 3000);\r\n }\r\n });\r\n\r\n }(YouLi.Trip ? YouLi.Trip : {}));\r\n}(YouLi ? YouLi : {}));","/*!\r\n * imagesLoaded PACKAGED v4.1.3\r\n * JavaScript is all like \"You images are done yet or what?\"\r\n * MIT License\r\n */\r\n\r\n/**\r\n * EvEmitter v1.1.0\r\n * Lil' event emitter\r\n * MIT License\r\n */\r\n\r\n/* jshint unused: true, undef: true, strict: true */\r\n\r\n( function( global, factory ) {\r\n // universal module definition\r\n /* jshint strict: false */ /* globals define, module, window */\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD - RequireJS\r\n define( 'ev-emitter/ev-emitter',factory );\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS - Browserify, Webpack\r\n module.exports = factory();\r\n } else {\r\n // Browser globals\r\n global.EvEmitter = factory();\r\n }\r\n\r\n}( typeof window != 'undefined' ? window : this, function() {\r\n\r\n\r\n\r\nfunction EvEmitter() {}\r\n\r\nvar proto = EvEmitter.prototype;\r\n\r\nproto.on = function( eventName, listener ) {\r\n if ( !eventName || !listener ) {\r\n return;\r\n }\r\n // set events hash\r\n var events = this._events = this._events || {};\r\n // set listeners array\r\n var listeners = events[ eventName ] = events[ eventName ] || [];\r\n // only add once\r\n if ( listeners.indexOf( listener ) == -1 ) {\r\n listeners.push( listener );\r\n }\r\n\r\n return this;\r\n};\r\n\r\nproto.once = function( eventName, listener ) {\r\n if ( !eventName || !listener ) {\r\n return;\r\n }\r\n // add event\r\n this.on( eventName, listener );\r\n // set once flag\r\n // set onceEvents hash\r\n var onceEvents = this._onceEvents = this._onceEvents || {};\r\n // set onceListeners object\r\n var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\r\n // set flag\r\n onceListeners[ listener ] = true;\r\n\r\n return this;\r\n};\r\n\r\nproto.off = function( eventName, listener ) {\r\n var listeners = this._events && this._events[ eventName ];\r\n if ( !listeners || !listeners.length ) {\r\n return;\r\n }\r\n var index = listeners.indexOf( listener );\r\n if ( index != -1 ) {\r\n listeners.splice( index, 1 );\r\n }\r\n\r\n return this;\r\n};\r\n\r\nproto.emitEvent = function( eventName, args ) {\r\n var listeners = this._events && this._events[ eventName ];\r\n if ( !listeners || !listeners.length ) {\r\n return;\r\n }\r\n var i = 0;\r\n var listener = listeners[i];\r\n args = args || [];\r\n // once stuff\r\n var onceListeners = this._onceEvents && this._onceEvents[ eventName ];\r\n\r\n while ( listener ) {\r\n var isOnce = onceListeners && onceListeners[ listener ];\r\n if ( isOnce ) {\r\n // remove listener\r\n // remove before trigger to prevent recursion\r\n this.off( eventName, listener );\r\n // unset once flag\r\n delete onceListeners[ listener ];\r\n }\r\n // trigger listener\r\n listener.apply( this, args );\r\n // get next listener\r\n i += isOnce ? 0 : 1;\r\n listener = listeners[i];\r\n }\r\n\r\n return this;\r\n};\r\n\r\nproto.allOff =\r\nproto.removeAllListeners = function() {\r\n delete this._events;\r\n delete this._onceEvents;\r\n};\r\n\r\nreturn EvEmitter;\r\n\r\n}));\r\n\r\n/*!\r\n * imagesLoaded v4.1.3\r\n * JavaScript is all like \"You images are done yet or what?\"\r\n * MIT License\r\n */\r\n\r\n( function( window, factory ) { 'use strict';\r\n // universal module definition\r\n\r\n /*global define: false, module: false, require: false */\r\n\r\n if ( typeof define == 'function' && define.amd ) {\r\n // AMD\r\n define( [\r\n 'ev-emitter/ev-emitter'\r\n ], function( EvEmitter ) {\r\n return factory( window, EvEmitter );\r\n });\r\n } else if ( typeof module == 'object' && module.exports ) {\r\n // CommonJS\r\n module.exports = factory(\r\n window,\r\n require('ev-emitter')\r\n );\r\n } else {\r\n // browser global\r\n window.imagesLoaded = factory(\r\n window,\r\n window.EvEmitter\r\n );\r\n }\r\n\r\n})( typeof window !== 'undefined' ? window : this,\r\n\r\n// -------------------------- factory -------------------------- //\r\n\r\nfunction factory( window, EvEmitter ) {\r\n\r\n\r\n\r\nvar $ = window.jQuery;\r\nvar console = window.console;\r\n\r\n// -------------------------- helpers -------------------------- //\r\n\r\n// extend objects\r\nfunction extend( a, b ) {\r\n for ( var prop in b ) {\r\n a[ prop ] = b[ prop ];\r\n }\r\n return a;\r\n}\r\n\r\n// turn element or nodeList into an array\r\nfunction makeArray( obj ) {\r\n var ary = [];\r\n if ( Array.isArray( obj ) ) {\r\n // use object if already an array\r\n ary = obj;\r\n } else if ( typeof obj.length == 'number' ) {\r\n // convert nodeList to array\r\n for ( var i=0; i < obj.length; i++ ) {\r\n ary.push( obj[i] );\r\n }\r\n } else {\r\n // array of single index\r\n ary.push( obj );\r\n }\r\n return ary;\r\n}\r\n\r\n// -------------------------- imagesLoaded -------------------------- //\r\n\r\n/**\r\n * @param {Array, Element, NodeList, String} elem\r\n * @param {Object or Function} options - if function, use as callback\r\n * @param {Function} onAlways - callback function\r\n */\r\nfunction ImagesLoaded( elem, options, onAlways ) {\r\n // coerce ImagesLoaded() without new, to be new ImagesLoaded()\r\n if ( !( this instanceof ImagesLoaded ) ) {\r\n return new ImagesLoaded( elem, options, onAlways );\r\n }\r\n // use elem as selector string\r\n if ( typeof elem == 'string' ) {\r\n elem = document.querySelectorAll( elem );\r\n }\r\n\r\n this.elements = makeArray( elem );\r\n this.options = extend( {}, this.options );\r\n\r\n if ( typeof options == 'function' ) {\r\n onAlways = options;\r\n } else {\r\n extend( this.options, options );\r\n }\r\n\r\n if ( onAlways ) {\r\n this.on( 'always', onAlways );\r\n }\r\n\r\n this.getImages();\r\n\r\n if ( $ ) {\r\n // add jQuery Deferred object\r\n this.jqDeferred = new $.Deferred();\r\n }\r\n\r\n // HACK check async to allow time to bind listeners\r\n setTimeout( function() {\r\n this.check();\r\n }.bind( this ));\r\n}\r\n\r\nImagesLoaded.prototype = Object.create( EvEmitter.prototype );\r\n\r\nImagesLoaded.prototype.options = {};\r\n\r\nImagesLoaded.prototype.getImages = function() {\r\n this.images = [];\r\n\r\n // filter & find items if we have an item selector\r\n this.elements.forEach( this.addElementImages, this );\r\n};\r\n\r\n/**\r\n * @param {Node} element\r\n */\r\nImagesLoaded.prototype.addElementImages = function( elem ) {\r\n // filter siblings\r\n if ( elem.nodeName == 'IMG' ) {\r\n this.addImage( elem );\r\n }\r\n // get background image on element\r\n if ( this.options.background === true ) {\r\n this.addElementBackgroundImages( elem );\r\n }\r\n\r\n // find children\r\n // no non-element nodes, #143\r\n var nodeType = elem.nodeType;\r\n if ( !nodeType || !elementNodeTypes[ nodeType ] ) {\r\n return;\r\n }\r\n var childImgs = elem.querySelectorAll('img');\r\n // concat childElems to filterFound array\r\n for ( var i=0; i < childImgs.length; i++ ) {\r\n var img = childImgs[i];\r\n this.addImage( img );\r\n }\r\n\r\n // get child background images\r\n if ( typeof this.options.background == 'string' ) {\r\n var children = elem.querySelectorAll( this.options.background );\r\n for ( i=0; i < children.length; i++ ) {\r\n var child = children[i];\r\n this.addElementBackgroundImages( child );\r\n }\r\n }\r\n};\r\n\r\nvar elementNodeTypes = {\r\n 1: true,\r\n 9: true,\r\n 11: true\r\n};\r\n\r\nImagesLoaded.prototype.addElementBackgroundImages = function( elem ) {\r\n var style = getComputedStyle( elem );\r\n if ( !style ) {\r\n // Firefox returns null if in a hidden iframe https://bugzil.la/548397\r\n return;\r\n }\r\n // get url inside url(\"...\")\r\n var reURL = /url\\((['\"])?(.*?)\\1\\)/gi;\r\n var matches = reURL.exec( style.backgroundImage );\r\n while ( matches !== null ) {\r\n var url = matches && matches[2];\r\n if ( url ) {\r\n this.addBackground( url, elem );\r\n }\r\n matches = reURL.exec( style.backgroundImage );\r\n }\r\n};\r\n\r\n/**\r\n * @param {Image} img\r\n */\r\nImagesLoaded.prototype.addImage = function( img ) {\r\n var loadingImage = new LoadingImage( img );\r\n this.images.push( loadingImage );\r\n};\r\n\r\nImagesLoaded.prototype.addBackground = function( url, elem ) {\r\n var background = new Background( url, elem );\r\n this.images.push( background );\r\n};\r\n\r\nImagesLoaded.prototype.check = function() {\r\n var _this = this;\r\n this.progressedCount = 0;\r\n this.hasAnyBroken = false;\r\n // complete if no images\r\n if ( !this.images.length ) {\r\n this.complete();\r\n return;\r\n }\r\n\r\n function onProgress( image, elem, message ) {\r\n // HACK - Chrome triggers event before object properties have changed. #83\r\n setTimeout( function() {\r\n _this.progress( image, elem, message );\r\n });\r\n }\r\n\r\n this.images.forEach( function( loadingImage ) {\r\n loadingImage.once( 'progress', onProgress );\r\n loadingImage.check();\r\n });\r\n};\r\n\r\nImagesLoaded.prototype.progress = function( image, elem, message ) {\r\n this.progressedCount++;\r\n this.hasAnyBroken = this.hasAnyBroken || !image.isLoaded;\r\n // progress event\r\n this.emitEvent( 'progress', [ this, image, elem ] );\r\n if ( this.jqDeferred && this.jqDeferred.notify ) {\r\n this.jqDeferred.notify( this, image );\r\n }\r\n // check if completed\r\n if ( this.progressedCount == this.images.length ) {\r\n this.complete();\r\n }\r\n\r\n if ( this.options.debug && console ) {\r\n console.log( 'progress: ' + message, image, elem );\r\n }\r\n};\r\n\r\nImagesLoaded.prototype.complete = function() {\r\n var eventName = this.hasAnyBroken ? 'fail' : 'done';\r\n this.isComplete = true;\r\n this.emitEvent( eventName, [ this ] );\r\n this.emitEvent( 'always', [ this ] );\r\n if ( this.jqDeferred ) {\r\n var jqMethod = this.hasAnyBroken ? 'reject' : 'resolve';\r\n this.jqDeferred[ jqMethod ]( this );\r\n }\r\n};\r\n\r\n// -------------------------- -------------------------- //\r\n\r\nfunction LoadingImage( img ) {\r\n this.img = img;\r\n}\r\n\r\nLoadingImage.prototype = Object.create( EvEmitter.prototype );\r\n\r\nLoadingImage.prototype.check = function() {\r\n // If complete is true and browser supports natural sizes,\r\n // try to check for image status manually.\r\n var isComplete = this.getIsImageComplete();\r\n if ( isComplete ) {\r\n // report based on naturalWidth\r\n this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\r\n return;\r\n }\r\n\r\n // If none of the checks above matched, simulate loading on detached element.\r\n this.proxyImage = new Image();\r\n this.proxyImage.addEventListener( 'load', this );\r\n this.proxyImage.addEventListener( 'error', this );\r\n // bind to image as well for Firefox. #191\r\n this.img.addEventListener( 'load', this );\r\n this.img.addEventListener( 'error', this );\r\n this.proxyImage.src = this.img.src;\r\n};\r\n\r\nLoadingImage.prototype.getIsImageComplete = function() {\r\n return this.img.complete && this.img.naturalWidth !== undefined;\r\n};\r\n\r\nLoadingImage.prototype.confirm = function( isLoaded, message ) {\r\n this.isLoaded = isLoaded;\r\n this.emitEvent( 'progress', [ this, this.img, message ] );\r\n};\r\n\r\n// ----- events ----- //\r\n\r\n// trigger specified handler for event type\r\nLoadingImage.prototype.handleEvent = function( event ) {\r\n var method = 'on' + event.type;\r\n if ( this[ method ] ) {\r\n this[ method ]( event );\r\n }\r\n};\r\n\r\nLoadingImage.prototype.onload = function() {\r\n this.confirm( true, 'onload' );\r\n this.unbindEvents();\r\n};\r\n\r\nLoadingImage.prototype.onerror = function() {\r\n this.confirm( false, 'onerror' );\r\n this.unbindEvents();\r\n};\r\n\r\nLoadingImage.prototype.unbindEvents = function() {\r\n this.proxyImage.removeEventListener( 'load', this );\r\n this.proxyImage.removeEventListener( 'error', this );\r\n this.img.removeEventListener( 'load', this );\r\n this.img.removeEventListener( 'error', this );\r\n};\r\n\r\n// -------------------------- Background -------------------------- //\r\n\r\nfunction Background( url, element ) {\r\n this.url = url;\r\n this.element = element;\r\n this.img = new Image();\r\n}\r\n\r\n// inherit LoadingImage prototype\r\nBackground.prototype = Object.create( LoadingImage.prototype );\r\n\r\nBackground.prototype.check = function() {\r\n this.img.addEventListener( 'load', this );\r\n this.img.addEventListener( 'error', this );\r\n this.img.src = this.url;\r\n // check if image is already complete\r\n var isComplete = this.getIsImageComplete();\r\n if ( isComplete ) {\r\n this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\r\n this.unbindEvents();\r\n }\r\n};\r\n\r\nBackground.prototype.unbindEvents = function() {\r\n this.img.removeEventListener( 'load', this );\r\n this.img.removeEventListener( 'error', this );\r\n};\r\n\r\nBackground.prototype.confirm = function( isLoaded, message ) {\r\n this.isLoaded = isLoaded;\r\n this.emitEvent( 'progress', [ this, this.element, message ] );\r\n};\r\n\r\n// -------------------------- jQuery -------------------------- //\r\n\r\nImagesLoaded.makeJQueryPlugin = function( jQuery ) {\r\n jQuery = jQuery || window.jQuery;\r\n if ( !jQuery ) {\r\n return;\r\n }\r\n // set local variable\r\n $ = jQuery;\r\n // $().imagesLoaded()\r\n $.fn.imagesLoaded = function( options, callback ) {\r\n var instance = new ImagesLoaded( this, options, callback );\r\n return instance.jqDeferred.promise( $(this) );\r\n };\r\n};\r\n// try making plugin\r\nImagesLoaded.makeJQueryPlugin();\r\n\r\n// -------------------------- -------------------------- //\r\n\r\nreturn ImagesLoaded;\r\n\r\n});\r\n","/*!\r\n * Isotope PACKAGED v3.0.5\r\n *\r\n * Licensed GPLv3 for open source use\r\n * or Isotope Commercial License for commercial use\r\n *\r\n * https://isotope.metafizzy.co\r\n * Copyright 2017 Metafizzy\r\n */\r\n\r\n!function (t, e) { \"function\" == typeof define && define.amd ? define(\"jquery-bridget/jquery-bridget\", [\"jquery\"], function (i) { return e(t, i) }) : \"object\" == typeof module && module.exports ? module.exports = e(t, require(\"jquery\")) : t.jQueryBridget = e(t, t.jQuery) }(window, function (t, e) { \"use strict\"; function i(i, s, a) { function u(t, e, o) { var n, s = \"$().\" + i + '(\"' + e + '\")'; return t.each(function (t, u) { var h = a.data(u, i); if (!h) return void r(i + \" not initialized. Cannot call methods, i.e. \" + s); var d = h[e]; if (!d || \"_\" == e.charAt(0)) return void r(s + \" is not a valid method\"); var l = d.apply(h, o); n = void 0 === n ? l : n }), void 0 !== n ? n : t } function h(t, e) { t.each(function (t, o) { var n = a.data(o, i); n ? (n.option(e), n._init()) : (n = new s(o, e), a.data(o, i, n)) }) } a = a || e || t.jQuery, a && (s.prototype.option || (s.prototype.option = function (t) { a.isPlainObject(t) && (this.options = a.extend(!0, this.options, t)) }), a.fn[i] = function (t) { if (\"string\" == typeof t) { var e = n.call(arguments, 1); return u(this, t, e) } return h(this, t), this }, o(a)) } function o(t) { !t || t && t.bridget || (t.bridget = i) } var n = Array.prototype.slice, s = t.console, r = \"undefined\" == typeof s ? function () { } : function (t) { s.error(t) }; return o(e || t.jQuery), i }), function (t, e) { \"function\" == typeof define && define.amd ? define(\"ev-emitter/ev-emitter\", e) : \"object\" == typeof module && module.exports ? module.exports = e() : t.EvEmitter = e() }(\"undefined\" != typeof window ? window : this, function () { function t() { } var e = t.prototype; return e.on = function (t, e) { if (t && e) { var i = this._events = this._events || {}, o = i[t] = i[t] || []; return o.indexOf(e) == -1 && o.push(e), this } }, e.once = function (t, e) { if (t && e) { this.on(t, e); var i = this._onceEvents = this._onceEvents || {}, o = i[t] = i[t] || {}; return o[e] = !0, this } }, e.off = function (t, e) { var i = this._events && this._events[t]; if (i && i.length) { var o = i.indexOf(e); return o != -1 && i.splice(o, 1), this } }, e.emitEvent = function (t, e) { var i = this._events && this._events[t]; if (i && i.length) { i = i.slice(0), e = e || []; for (var o = this._onceEvents && this._onceEvents[t], n = 0; n < i.length; n++) { var s = i[n], r = o && o[s]; r && (this.off(t, s), delete o[s]), s.apply(this, e) } return this } }, e.allOff = function () { delete this._events, delete this._onceEvents }, t }), function (t, e) { \"use strict\"; \"function\" == typeof define && define.amd ? define(\"get-size/get-size\", [], function () { return e() }) : \"object\" == typeof module && module.exports ? module.exports = e() : t.getSize = e() }(window, function () { \"use strict\"; function t(t) { var e = parseFloat(t), i = t.indexOf(\"%\") == -1 && !isNaN(e); return i && e } function e() { } function i() { for (var t = { width: 0, height: 0, innerWidth: 0, innerHeight: 0, outerWidth: 0, outerHeight: 0 }, e = 0; e < h; e++) { var i = u[e]; t[i] = 0 } return t } function o(t) { var e = getComputedStyle(t); return e || a(\"Style returned \" + e + \". Are you running this code in a hidden iframe on Firefox? See http://bit.ly/getsizebug1\"), e } function n() { if (!d) { d = !0; var e = document.createElement(\"div\"); e.style.width = \"200px\", e.style.padding = \"1px 2px 3px 4px\", e.style.borderStyle = \"solid\", e.style.borderWidth = \"1px 2px 3px 4px\", e.style.boxSizing = \"border-box\"; var i = document.body || document.documentElement; i.appendChild(e); var n = o(e); s.isBoxSizeOuter = r = 200 == t(n.width), i.removeChild(e) } } function s(e) { if (n(), \"string\" == typeof e && (e = document.querySelector(e)), e && \"object\" == typeof e && e.nodeType) { var s = o(e); if (\"none\" == s.display) return i(); var a = {}; a.width = e.offsetWidth, a.height = e.offsetHeight; for (var d = a.isBorderBox = \"border-box\" == s.boxSizing, l = 0; l < h; l++) { var f = u[l], c = s[f], m = parseFloat(c); a[f] = isNaN(m) ? 0 : m } var p = a.paddingLeft + a.paddingRight, y = a.paddingTop + a.paddingBottom, g = a.marginLeft + a.marginRight, v = a.marginTop + a.marginBottom, _ = a.borderLeftWidth + a.borderRightWidth, I = a.borderTopWidth + a.borderBottomWidth, z = d && r, x = t(s.width); x !== !1 && (a.width = x + (z ? 0 : p + _)); var S = t(s.height); return S !== !1 && (a.height = S + (z ? 0 : y + I)), a.innerWidth = a.width - (p + _), a.innerHeight = a.height - (y + I), a.outerWidth = a.width + g, a.outerHeight = a.height + v, a } } var r, a = \"undefined\" == typeof console ? e : function (t) { console.error(t) }, u = [\"paddingLeft\", \"paddingRight\", \"paddingTop\", \"paddingBottom\", \"marginLeft\", \"marginRight\", \"marginTop\", \"marginBottom\", \"borderLeftWidth\", \"borderRightWidth\", \"borderTopWidth\", \"borderBottomWidth\"], h = u.length, d = !1; return s }), function (t, e) { \"use strict\"; \"function\" == typeof define && define.amd ? define(\"desandro-matches-selector/matches-selector\", e) : \"object\" == typeof module && module.exports ? module.exports = e() : t.matchesSelector = e() }(window, function () { \"use strict\"; var t = function () { var t = window.Element.prototype; if (t.matches) return \"matches\"; if (t.matchesSelector) return \"matchesSelector\"; for (var e = [\"webkit\", \"moz\", \"ms\", \"o\"], i = 0; i < e.length; i++) { var o = e[i], n = o + \"MatchesSelector\"; if (t[n]) return n } }(); return function (e, i) { return e[t](i) } }), function (t, e) { \"function\" == typeof define && define.amd ? define(\"fizzy-ui-utils/utils\", [\"desandro-matches-selector/matches-selector\"], function (i) { return e(t, i) }) : \"object\" == typeof module && module.exports ? module.exports = e(t, require(\"desandro-matches-selector\")) : t.fizzyUIUtils = e(t, t.matchesSelector) }(window, function (t, e) { var i = {}; i.extend = function (t, e) { for (var i in e) t[i] = e[i]; return t }, i.modulo = function (t, e) { return (t % e + e) % e }, i.makeArray = function (t) { var e = []; if (Array.isArray(t)) e = t; else if (t && \"object\" == typeof t && \"number\" == typeof t.length) for (var i = 0; i < t.length; i++)e.push(t[i]); else e.push(t); return e }, i.removeFrom = function (t, e) { var i = t.indexOf(e); i != -1 && t.splice(i, 1) }, i.getParent = function (t, i) { for (; t.parentNode && t != document.body;)if (t = t.parentNode, e(t, i)) return t }, i.getQueryElement = function (t) { return \"string\" == typeof t ? document.querySelector(t) : t }, i.handleEvent = function (t) { var e = \"on\" + t.type; this[e] && this[e](t) }, i.filterFindElements = function (t, o) { t = i.makeArray(t); var n = []; return t.forEach(function (t) { if (t instanceof HTMLElement) { if (!o) return void n.push(t); e(t, o) && n.push(t); for (var i = t.querySelectorAll(o), s = 0; s < i.length; s++)n.push(i[s]) } }), n }, i.debounceMethod = function (t, e, i) { var o = t.prototype[e], n = e + \"Timeout\"; t.prototype[e] = function () { var t = this[n]; t && clearTimeout(t); var e = arguments, s = this; this[n] = setTimeout(function () { o.apply(s, e), delete s[n] }, i || 100) } }, i.docReady = function (t) { var e = document.readyState; \"complete\" == e || \"interactive\" == e ? setTimeout(t) : document.addEventListener(\"DOMContentLoaded\", t) }, i.toDashed = function (t) { return t.replace(/(.)([A-Z])/g, function (t, e, i) { return e + \"-\" + i }).toLowerCase() }; var o = t.console; return i.htmlInit = function (e, n) { i.docReady(function () { var s = i.toDashed(n), r = \"data-\" + s, a = document.querySelectorAll(\"[\" + r + \"]\"), u = document.querySelectorAll(\".js-\" + s), h = i.makeArray(a).concat(i.makeArray(u)), d = r + \"-options\", l = t.jQuery; h.forEach(function (t) { var i, s = t.getAttribute(r) || t.getAttribute(d); try { i = s && JSON.parse(s) } catch (a) { return void (o && o.error(\"Error parsing \" + r + \" on \" + t.className + \": \" + a)) } var u = new e(t, i); l && l.data(t, n, u) }) }) }, i }), function (t, e) { \"function\" == typeof define && define.amd ? define(\"outlayer/item\", [\"ev-emitter/ev-emitter\", \"get-size/get-size\"], e) : \"object\" == typeof module && module.exports ? module.exports = e(require(\"ev-emitter\"), require(\"get-size\")) : (t.Outlayer = {}, t.Outlayer.Item = e(t.EvEmitter, t.getSize)) }(window, function (t, e) { \"use strict\"; function i(t) { for (var e in t) return !1; return e = null, !0 } function o(t, e) { t && (this.element = t, this.layout = e, this.position = { x: 0, y: 0 }, this._create()) } function n(t) { return t.replace(/([A-Z])/g, function (t) { return \"-\" + t.toLowerCase() }) } var s = document.documentElement.style, r = \"string\" == typeof s.transition ? \"transition\" : \"WebkitTransition\", a = \"string\" == typeof s.transform ? \"transform\" : \"WebkitTransform\", u = { WebkitTransition: \"webkitTransitionEnd\", transition: \"transitionend\" }[r], h = { transform: a, transition: r, transitionDuration: r + \"Duration\", transitionProperty: r + \"Property\", transitionDelay: r + \"Delay\" }, d = o.prototype = Object.create(t.prototype); d.constructor = o, d._create = function () { this._transn = { ingProperties: {}, clean: {}, onEnd: {} }, this.css({ position: \"absolute\" }) }, d.handleEvent = function (t) { var e = \"on\" + t.type; this[e] && this[e](t) }, d.getSize = function () { this.size = e(this.element) }, d.css = function (t) { var e = this.element.style; for (var i in t) { var o = h[i] || i; e[o] = t[i] } }, d.getPosition = function () { var t = getComputedStyle(this.element), e = this.layout._getOption(\"originLeft\"), i = this.layout._getOption(\"originTop\"), o = t[e ? \"left\" : \"right\"], n = t[i ? \"top\" : \"bottom\"], s = this.layout.size, r = o.indexOf(\"%\") != -1 ? parseFloat(o) / 100 * s.width : parseInt(o, 10), a = n.indexOf(\"%\") != -1 ? parseFloat(n) / 100 * s.height : parseInt(n, 10); r = isNaN(r) ? 0 : r, a = isNaN(a) ? 0 : a, r -= e ? s.paddingLeft : s.paddingRight, a -= i ? s.paddingTop : s.paddingBottom, this.position.x = r, this.position.y = a }, d.layoutPosition = function () { var t = this.layout.size, e = {}, i = this.layout._getOption(\"originLeft\"), o = this.layout._getOption(\"originTop\"), n = i ? \"paddingLeft\" : \"paddingRight\", s = i ? \"left\" : \"right\", r = i ? \"right\" : \"left\", a = this.position.x + t[n]; e[s] = this.getXValue(a), e[r] = \"\"; var u = o ? \"paddingTop\" : \"paddingBottom\", h = o ? \"top\" : \"bottom\", d = o ? \"bottom\" : \"top\", l = this.position.y + t[u]; e[h] = this.getYValue(l), e[d] = \"\", this.css(e), this.emitEvent(\"layout\", [this]) }, d.getXValue = function (t) { var e = this.layout._getOption(\"horizontal\"); return this.layout.options.percentPosition && !e ? t / this.layout.size.width * 100 + \"%\" : t + \"px\" }, d.getYValue = function (t) { var e = this.layout._getOption(\"horizontal\"); return this.layout.options.percentPosition && e ? t / this.layout.size.height * 100 + \"%\" : t + \"px\" }, d._transitionTo = function (t, e) { this.getPosition(); var i = this.position.x, o = this.position.y, n = parseInt(t, 10), s = parseInt(e, 10), r = n === this.position.x && s === this.position.y; if (this.setPosition(t, e), r && !this.isTransitioning) return void this.layoutPosition(); var a = t - i, u = e - o, h = {}; h.transform = this.getTranslate(a, u), this.transition({ to: h, onTransitionEnd: { transform: this.layoutPosition }, isCleaning: !0 }) }, d.getTranslate = function (t, e) { var i = this.layout._getOption(\"originLeft\"), o = this.layout._getOption(\"originTop\"); return t = i ? t : -t, e = o ? e : -e, \"translate3d(\" + t + \"px, \" + e + \"px, 0)\" }, d.goTo = function (t, e) { this.setPosition(t, e), this.layoutPosition() }, d.moveTo = d._transitionTo, d.setPosition = function (t, e) { this.position.x = parseInt(t, 10), this.position.y = parseInt(e, 10) }, d._nonTransition = function (t) { this.css(t.to), t.isCleaning && this._removeStyles(t.to); for (var e in t.onTransitionEnd) t.onTransitionEnd[e].call(this) }, d.transition = function (t) { if (!parseFloat(this.layout.options.transitionDuration)) return void this._nonTransition(t); var e = this._transn; for (var i in t.onTransitionEnd) e.onEnd[i] = t.onTransitionEnd[i]; for (i in t.to) e.ingProperties[i] = !0, t.isCleaning && (e.clean[i] = !0); if (t.from) { this.css(t.from); var o = this.element.offsetHeight; o = null } this.enableTransition(t.to), this.css(t.to), this.isTransitioning = !0 }; var l = \"opacity,\" + n(a); d.enableTransition = function () { if (!this.isTransitioning) { var t = this.layout.options.transitionDuration; t = \"number\" == typeof t ? t + \"ms\" : t, this.css({ transitionProperty: l, transitionDuration: t, transitionDelay: this.staggerDelay || 0 }), this.element.addEventListener(u, this, !1) } }, d.onwebkitTransitionEnd = function (t) { this.ontransitionend(t) }, d.onotransitionend = function (t) { this.ontransitionend(t) }; var f = { \"-webkit-transform\": \"transform\" }; d.ontransitionend = function (t) { if (t.target === this.element) { var e = this._transn, o = f[t.propertyName] || t.propertyName; if (delete e.ingProperties[o], i(e.ingProperties) && this.disableTransition(), o in e.clean && (this.element.style[t.propertyName] = \"\", delete e.clean[o]), o in e.onEnd) { var n = e.onEnd[o]; n.call(this), delete e.onEnd[o] } this.emitEvent(\"transitionEnd\", [this]) } }, d.disableTransition = function () { this.removeTransitionStyles(), this.element.removeEventListener(u, this, !1), this.isTransitioning = !1 }, d._removeStyles = function (t) { var e = {}; for (var i in t) e[i] = \"\"; this.css(e) }; var c = { transitionProperty: \"\", transitionDuration: \"\", transitionDelay: \"\" }; return d.removeTransitionStyles = function () { this.css(c) }, d.stagger = function (t) { t = isNaN(t) ? 0 : t, this.staggerDelay = t + \"ms\" }, d.removeElem = function () { this.element.parentNode.removeChild(this.element), this.css({ display: \"\" }), this.emitEvent(\"remove\", [this]) }, d.remove = function () { return r && parseFloat(this.layout.options.transitionDuration) ? (this.once(\"transitionEnd\", function () { this.removeElem() }), void this.hide()) : void this.removeElem() }, d.reveal = function () { delete this.isHidden, this.css({ display: \"\" }); var t = this.layout.options, e = {}, i = this.getHideRevealTransitionEndProperty(\"visibleStyle\"); e[i] = this.onRevealTransitionEnd, this.transition({ from: t.hiddenStyle, to: t.visibleStyle, isCleaning: !0, onTransitionEnd: e }) }, d.onRevealTransitionEnd = function () { this.isHidden || this.emitEvent(\"reveal\") }, d.getHideRevealTransitionEndProperty = function (t) { var e = this.layout.options[t]; if (e.opacity) return \"opacity\"; for (var i in e) return i }, d.hide = function () { this.isHidden = !0, this.css({ display: \"\" }); var t = this.layout.options, e = {}, i = this.getHideRevealTransitionEndProperty(\"hiddenStyle\"); e[i] = this.onHideTransitionEnd, this.transition({ from: t.visibleStyle, to: t.hiddenStyle, isCleaning: !0, onTransitionEnd: e }) }, d.onHideTransitionEnd = function () { this.isHidden && (this.css({ display: \"none\" }), this.emitEvent(\"hide\")) }, d.destroy = function () { this.css({ position: \"\", left: \"\", right: \"\", top: \"\", bottom: \"\", transition: \"\", transform: \"\" }) }, o }), function (t, e) { \"use strict\"; \"function\" == typeof define && define.amd ? define(\"outlayer/outlayer\", [\"ev-emitter/ev-emitter\", \"get-size/get-size\", \"fizzy-ui-utils/utils\", \"./item\"], function (i, o, n, s) { return e(t, i, o, n, s) }) : \"object\" == typeof module && module.exports ? module.exports = e(t, require(\"ev-emitter\"), require(\"get-size\"), require(\"fizzy-ui-utils\"), require(\"./item\")) : t.Outlayer = e(t, t.EvEmitter, t.getSize, t.fizzyUIUtils, t.Outlayer.Item) }(window, function (t, e, i, o, n) { \"use strict\"; function s(t, e) { var i = o.getQueryElement(t); if (!i) return void (u && u.error(\"Bad element for \" + this.constructor.namespace + \": \" + (i || t))); this.element = i, h && (this.$element = h(this.element)), this.options = o.extend({}, this.constructor.defaults), this.option(e); var n = ++l; this.element.outlayerGUID = n, f[n] = this, this._create(); var s = this._getOption(\"initLayout\"); s && this.layout() } function r(t) { function e() { t.apply(this, arguments) } return e.prototype = Object.create(t.prototype), e.prototype.constructor = e, e } function a(t) { if (\"number\" == typeof t) return t; var e = t.match(/(^\\d*\\.?\\d*)(\\w*)/), i = e && e[1], o = e && e[2]; if (!i.length) return 0; i = parseFloat(i); var n = m[o] || 1; return i * n } var u = t.console, h = t.jQuery, d = function () { }, l = 0, f = {}; s.namespace = \"outlayer\", s.Item = n, s.defaults = { containerStyle: { position: \"relative\" }, initLayout: !0, originLeft: !0, originTop: !0, resize: !0, resizeContainer: !0, transitionDuration: \"0.4s\", hiddenStyle: { opacity: 0, transform: \"scale(0.001)\" }, visibleStyle: { opacity: 1, transform: \"scale(1)\" } }; var c = s.prototype; o.extend(c, e.prototype), c.option = function (t) { o.extend(this.options, t) }, c._getOption = function (t) { var e = this.constructor.compatOptions[t]; return e && void 0 !== this.options[e] ? this.options[e] : this.options[t] }, s.compatOptions = { initLayout: \"isInitLayout\", horizontal: \"isHorizontal\", layoutInstant: \"isLayoutInstant\", originLeft: \"isOriginLeft\", originTop: \"isOriginTop\", resize: \"isResizeBound\", resizeContainer: \"isResizingContainer\" }, c._create = function () { this.reloadItems(), this.stamps = [], this.stamp(this.options.stamp), o.extend(this.element.style, this.options.containerStyle); var t = this._getOption(\"resize\"); t && this.bindResize() }, c.reloadItems = function () { this.items = this._itemize(this.element.children) }, c._itemize = function (t) { for (var e = this._filterFindItemElements(t), i = this.constructor.Item, o = [], n = 0; n < e.length; n++) { var s = e[n], r = new i(s, this); o.push(r) } return o }, c._filterFindItemElements = function (t) { return o.filterFindElements(t, this.options.itemSelector) }, c.getItemElements = function () { return this.items.map(function (t) { return t.element }) }, c.layout = function () { this._resetLayout(), this._manageStamps(); var t = this._getOption(\"layoutInstant\"), e = void 0 !== t ? t : !this._isLayoutInited; this.layoutItems(this.items, e), this._isLayoutInited = !0 }, c._init = c.layout, c._resetLayout = function () { this.getSize() }, c.getSize = function () { this.size = i(this.element) }, c._getMeasurement = function (t, e) { var o, n = this.options[t]; n ? (\"string\" == typeof n ? o = this.element.querySelector(n) : n instanceof HTMLElement && (o = n), this[t] = o ? i(o)[e] : n) : this[t] = 0 }, c.layoutItems = function (t, e) { t = this._getItemsForLayout(t), this._layoutItems(t, e), this._postLayout() }, c._getItemsForLayout = function (t) { return t.filter(function (t) { return !t.isIgnored }) }, c._layoutItems = function (t, e) { if (this._emitCompleteOnItems(\"layout\", t), t && t.length) { var i = []; t.forEach(function (t) { var o = this._getItemLayoutPosition(t); o.item = t, o.isInstant = e || t.isLayoutInstant, i.push(o) }, this), this._processLayoutQueue(i) } }, c._getItemLayoutPosition = function () { return { x: 0, y: 0 } }, c._processLayoutQueue = function (t) { this.updateStagger(), t.forEach(function (t, e) { this._positionItem(t.item, t.x, t.y, t.isInstant, e) }, this) }, c.updateStagger = function () { var t = this.options.stagger; return null === t || void 0 === t ? void (this.stagger = 0) : (this.stagger = a(t), this.stagger) }, c._positionItem = function (t, e, i, o, n) { o ? t.goTo(e, i) : (t.stagger(n * this.stagger), t.moveTo(e, i)) }, c._postLayout = function () { this.resizeContainer() }, c.resizeContainer = function () { var t = this._getOption(\"resizeContainer\"); if (t) { var e = this._getContainerSize(); e && (this._setContainerMeasure(e.width, !0), this._setContainerMeasure(e.height, !1)) } }, c._getContainerSize = d, c._setContainerMeasure = function (t, e) { if (void 0 !== t) { var i = this.size; i.isBorderBox && (t += e ? i.paddingLeft + i.paddingRight + i.borderLeftWidth + i.borderRightWidth : i.paddingBottom + i.paddingTop + i.borderTopWidth + i.borderBottomWidth), t = Math.max(t, 0), this.element.style[e ? \"width\" : \"height\"] = t + \"px\" } }, c._emitCompleteOnItems = function (t, e) { function i() { n.dispatchEvent(t + \"Complete\", null, [e]) } function o() { r++ , r == s && i() } var n = this, s = e.length; if (!e || !s) return void i(); var r = 0; e.forEach(function (e) { e.once(t, o) }) }, c.dispatchEvent = function (t, e, i) { var o = e ? [e].concat(i) : i; if (this.emitEvent(t, o), h) if (this.$element = this.$element || h(this.element), e) { var n = h.Event(e); n.type = t, this.$element.trigger(n, i) } else this.$element.trigger(t, i) }, c.ignore = function (t) { var e = this.getItem(t); e && (e.isIgnored = !0) }, c.unignore = function (t) { var e = this.getItem(t); e && delete e.isIgnored }, c.stamp = function (t) { t = this._find(t), t && (this.stamps = this.stamps.concat(t), t.forEach(this.ignore, this)) }, c.unstamp = function (t) { t = this._find(t), t && t.forEach(function (t) { o.removeFrom(this.stamps, t), this.unignore(t) }, this) }, c._find = function (t) { if (t) return \"string\" == typeof t && (t = this.element.querySelectorAll(t)), t = o.makeArray(t) }, c._manageStamps = function () { this.stamps && this.stamps.length && (this._getBoundingRect(), this.stamps.forEach(this._manageStamp, this)) }, c._getBoundingRect = function () { var t = this.element.getBoundingClientRect(), e = this.size; this._boundingRect = { left: t.left + e.paddingLeft + e.borderLeftWidth, top: t.top + e.paddingTop + e.borderTopWidth, right: t.right - (e.paddingRight + e.borderRightWidth), bottom: t.bottom - (e.paddingBottom + e.borderBottomWidth) } }, c._manageStamp = d, c._getElementOffset = function (t) { var e = t.getBoundingClientRect(), o = this._boundingRect, n = i(t), s = { left: e.left - o.left - n.marginLeft, top: e.top - o.top - n.marginTop, right: o.right - e.right - n.marginRight, bottom: o.bottom - e.bottom - n.marginBottom }; return s }, c.handleEvent = o.handleEvent, c.bindResize = function () { t.addEventListener(\"resize\", this), this.isResizeBound = !0 }, c.unbindResize = function () { t.removeEventListener(\"resize\", this), this.isResizeBound = !1 }, c.onresize = function () { this.resize() }, o.debounceMethod(s, \"onresize\", 100), c.resize = function () { this.isResizeBound && this.needsResizeLayout() && this.layout() }, c.needsResizeLayout = function () { var t = i(this.element), e = this.size && t; return e && t.innerWidth !== this.size.innerWidth }, c.addItems = function (t) { var e = this._itemize(t); return e.length && (this.items = this.items.concat(e)), e }, c.appended = function (t) { var e = this.addItems(t); e.length && (this.layoutItems(e, !0), this.reveal(e)) }, c.prepended = function (t) { var e = this._itemize(t); if (e.length) { var i = this.items.slice(0); this.items = e.concat(i), this._resetLayout(), this._manageStamps(), this.layoutItems(e, !0), this.reveal(e), this.layoutItems(i) } }, c.reveal = function (t) { if (this._emitCompleteOnItems(\"reveal\", t), t && t.length) { var e = this.updateStagger(); t.forEach(function (t, i) { t.stagger(i * e), t.reveal() }) } }, c.hide = function (t) { if (this._emitCompleteOnItems(\"hide\", t), t && t.length) { var e = this.updateStagger(); t.forEach(function (t, i) { t.stagger(i * e), t.hide() }) } }, c.revealItemElements = function (t) { var e = this.getItems(t); this.reveal(e) }, c.hideItemElements = function (t) { var e = this.getItems(t); this.hide(e) }, c.getItem = function (t) { for (var e = 0; e < this.items.length; e++) { var i = this.items[e]; if (i.element == t) return i } }, c.getItems = function (t) { t = o.makeArray(t); var e = []; return t.forEach(function (t) { var i = this.getItem(t); i && e.push(i) }, this), e }, c.remove = function (t) { var e = this.getItems(t); this._emitCompleteOnItems(\"remove\", e), e && e.length && e.forEach(function (t) { t.remove(), o.removeFrom(this.items, t) }, this) }, c.destroy = function () { var t = this.element.style; t.height = \"\", t.position = \"\", t.width = \"\", this.items.forEach(function (t) { t.destroy() }), this.unbindResize(); var e = this.element.outlayerGUID; delete f[e], delete this.element.outlayerGUID, h && h.removeData(this.element, this.constructor.namespace) }, s.data = function (t) { t = o.getQueryElement(t); var e = t && t.outlayerGUID; return e && f[e] }, s.create = function (t, e) { var i = r(s); return i.defaults = o.extend({}, s.defaults), o.extend(i.defaults, e), i.compatOptions = o.extend({}, s.compatOptions), i.namespace = t, i.data = s.data, i.Item = r(n), o.htmlInit(i, t), h && h.bridget && h.bridget(t, i), i }; var m = { ms: 1, s: 1e3 }; return s.Item = n, s }), function (t, e) { \"function\" == typeof define && define.amd ? define(\"isotope-layout/js/item\", [\"outlayer/outlayer\"], e) : \"object\" == typeof module && module.exports ? module.exports = e(require(\"outlayer\")) : (t.Isotope = t.Isotope || {}, t.Isotope.Item = e(t.Outlayer)) }(window, function (t) { \"use strict\"; function e() { t.Item.apply(this, arguments) } var i = e.prototype = Object.create(t.Item.prototype), o = i._create; i._create = function () { this.id = this.layout.itemGUID++ , o.call(this), this.sortData = {} }, i.updateSortData = function () { if (!this.isIgnored) { this.sortData.id = this.id, this.sortData[\"original-order\"] = this.id, this.sortData.random = Math.random(); var t = this.layout.options.getSortData, e = this.layout._sorters; for (var i in t) { var o = e[i]; this.sortData[i] = o(this.element, this) } } }; var n = i.destroy; return i.destroy = function () { n.apply(this, arguments), this.css({ display: \"\" }) }, e }), function (t, e) { \"function\" == typeof define && define.amd ? define(\"isotope-layout/js/layout-mode\", [\"get-size/get-size\", \"outlayer/outlayer\"], e) : \"object\" == typeof module && module.exports ? module.exports = e(require(\"get-size\"), require(\"outlayer\")) : (t.Isotope = t.Isotope || {}, t.Isotope.LayoutMode = e(t.getSize, t.Outlayer)) }(window, function (t, e) { \"use strict\"; function i(t) { this.isotope = t, t && (this.options = t.options[this.namespace], this.element = t.element, this.items = t.filteredItems, this.size = t.size) } var o = i.prototype, n = [\"_resetLayout\", \"_getItemLayoutPosition\", \"_manageStamp\", \"_getContainerSize\", \"_getElementOffset\", \"needsResizeLayout\", \"_getOption\"]; return n.forEach(function (t) { o[t] = function () { return e.prototype[t].apply(this.isotope, arguments) } }), o.needsVerticalResizeLayout = function () { var e = t(this.isotope.element), i = this.isotope.size && e; return i && e.innerHeight != this.isotope.size.innerHeight }, o._getMeasurement = function () { this.isotope._getMeasurement.apply(this, arguments) }, o.getColumnWidth = function () { this.getSegmentSize(\"column\", \"Width\") }, o.getRowHeight = function () { this.getSegmentSize(\"row\", \"Height\") }, o.getSegmentSize = function (t, e) { var i = t + e, o = \"outer\" + e; if (this._getMeasurement(i, o), !this[i]) { var n = this.getFirstItemSize(); this[i] = n && n[o] || this.isotope.size[\"inner\" + e] } }, o.getFirstItemSize = function () { var e = this.isotope.filteredItems[0]; return e && e.element && t(e.element) }, o.layout = function () { this.isotope.layout.apply(this.isotope, arguments) }, o.getSize = function () { this.isotope.getSize(), this.size = this.isotope.size }, i.modes = {}, i.create = function (t, e) { function n() { i.apply(this, arguments) } return n.prototype = Object.create(o), n.prototype.constructor = n, e && (n.options = e), n.prototype.namespace = t, i.modes[t] = n, n }, i }), function (t, e) { \"function\" == typeof define && define.amd ? define(\"masonry-layout/masonry\", [\"outlayer/outlayer\", \"get-size/get-size\"], e) : \"object\" == typeof module && module.exports ? module.exports = e(require(\"outlayer\"), require(\"get-size\")) : t.Masonry = e(t.Outlayer, t.getSize) }(window, function (t, e) { var i = t.create(\"masonry\"); i.compatOptions.fitWidth = \"isFitWidth\"; var o = i.prototype; return o._resetLayout = function () { this.getSize(), this._getMeasurement(\"columnWidth\", \"outerWidth\"), this._getMeasurement(\"gutter\", \"outerWidth\"), this.measureColumns(), this.colYs = []; for (var t = 0; t < this.cols; t++)this.colYs.push(0); this.maxY = 0, this.horizontalColIndex = 0 }, o.measureColumns = function () { if (this.getContainerWidth(), !this.columnWidth) { var t = this.items[0], i = t && t.element; this.columnWidth = i && e(i).outerWidth || this.containerWidth } var o = this.columnWidth += this.gutter, n = this.containerWidth + this.gutter, s = n / o, r = o - n % o, a = r && r < 1 ? \"round\" : \"floor\"; s = Math[a](s), this.cols = Math.max(s, 1) }, o.getContainerWidth = function () { var t = this._getOption(\"fitWidth\"), i = t ? this.element.parentNode : this.element, o = e(i); this.containerWidth = o && o.innerWidth }, o._getItemLayoutPosition = function (t) { t.getSize(); var e = t.size.outerWidth % this.columnWidth, i = e && e < 1 ? \"round\" : \"ceil\", o = Math[i](t.size.outerWidth / this.columnWidth); o = Math.min(o, this.cols); for (var n = this.options.horizontalOrder ? \"_getHorizontalColPosition\" : \"_getTopColPosition\", s = this[n](o, t), r = { x: this.columnWidth * s.col, y: s.y }, a = s.y + t.size.outerHeight, u = o + s.col, h = s.col; h < u; h++)this.colYs[h] = a; return r }, o._getTopColPosition = function (t) { var e = this._getTopColGroup(t), i = Math.min.apply(Math, e); return { col: e.indexOf(i), y: i } }, o._getTopColGroup = function (t) { if (t < 2) return this.colYs; for (var e = [], i = this.cols + 1 - t, o = 0; o < i; o++)e[o] = this._getColGroupY(o, t); return e }, o._getColGroupY = function (t, e) { if (e < 2) return this.colYs[t]; var i = this.colYs.slice(t, t + e); return Math.max.apply(Math, i) }, o._getHorizontalColPosition = function (t, e) { var i = this.horizontalColIndex % this.cols, o = t > 1 && i + t > this.cols; i = o ? 0 : i; var n = e.size.outerWidth && e.size.outerHeight; return this.horizontalColIndex = n ? i + t : this.horizontalColIndex, { col: i, y: this._getColGroupY(i, t) } }, o._manageStamp = function (t) { var i = e(t), o = this._getElementOffset(t), n = this._getOption(\"originLeft\"), s = n ? o.left : o.right, r = s + i.outerWidth, a = Math.floor(s / this.columnWidth); a = Math.max(0, a); var u = Math.floor(r / this.columnWidth); u -= r % this.columnWidth ? 0 : 1, u = Math.min(this.cols - 1, u); for (var h = this._getOption(\"originTop\"), d = (h ? o.top : o.bottom) + i.outerHeight, l = a; l <= u; l++)this.colYs[l] = Math.max(d, this.colYs[l]) }, o._getContainerSize = function () { this.maxY = Math.max.apply(Math, this.colYs); var t = { height: this.maxY }; return this._getOption(\"fitWidth\") && (t.width = this._getContainerFitWidth()), t }, o._getContainerFitWidth = function () { for (var t = 0, e = this.cols; --e && 0 === this.colYs[e];)t++; return (this.cols - t) * this.columnWidth - this.gutter }, o.needsResizeLayout = function () { var t = this.containerWidth; return this.getContainerWidth(), t != this.containerWidth }, i }), function (t, e) { \"function\" == typeof define && define.amd ? define(\"isotope-layout/js/layout-modes/masonry\", [\"../layout-mode\", \"masonry-layout/masonry\"], e) : \"object\" == typeof module && module.exports ? module.exports = e(require(\"../layout-mode\"), require(\"masonry-layout\")) : e(t.Isotope.LayoutMode, t.Masonry) }(window, function (t, e) { \"use strict\"; var i = t.create(\"masonry\"), o = i.prototype, n = { _getElementOffset: !0, layout: !0, _getMeasurement: !0 }; for (var s in e.prototype) n[s] || (o[s] = e.prototype[s]); var r = o.measureColumns; o.measureColumns = function () { this.items = this.isotope.filteredItems, r.call(this) }; var a = o._getOption; return o._getOption = function (t) { return \"fitWidth\" == t ? void 0 !== this.options.isFitWidth ? this.options.isFitWidth : this.options.fitWidth : a.apply(this.isotope, arguments) }, i }), function (t, e) { \"function\" == typeof define && define.amd ? define(\"isotope-layout/js/layout-modes/fit-rows\", [\"../layout-mode\"], e) : \"object\" == typeof exports ? module.exports = e(require(\"../layout-mode\")) : e(t.Isotope.LayoutMode) }(window, function (t) { \"use strict\"; var e = t.create(\"fitRows\"), i = e.prototype; return i._resetLayout = function () { this.x = 0, this.y = 0, this.maxY = 0, this._getMeasurement(\"gutter\", \"outerWidth\") }, i._getItemLayoutPosition = function (t) { t.getSize(); var e = t.size.outerWidth + this.gutter, i = this.isotope.size.innerWidth + this.gutter; 0 !== this.x && e + this.x > i && (this.x = 0, this.y = this.maxY); var o = { x: this.x, y: this.y }; return this.maxY = Math.max(this.maxY, this.y + t.size.outerHeight), this.x += e, o }, i._getContainerSize = function () { return { height: this.maxY } }, e }), function (t, e) { \"function\" == typeof define && define.amd ? define(\"isotope-layout/js/layout-modes/vertical\", [\"../layout-mode\"], e) : \"object\" == typeof module && module.exports ? module.exports = e(require(\"../layout-mode\")) : e(t.Isotope.LayoutMode) }(window, function (t) { \"use strict\"; var e = t.create(\"vertical\", { horizontalAlignment: 0 }), i = e.prototype; return i._resetLayout = function () { this.y = 0 }, i._getItemLayoutPosition = function (t) { t.getSize(); var e = (this.isotope.size.innerWidth - t.size.outerWidth) * this.options.horizontalAlignment, i = this.y; return this.y += t.size.outerHeight, { x: e, y: i } }, i._getContainerSize = function () { return { height: this.y } }, e }), function (t, e) { \"function\" == typeof define && define.amd ? define([\"outlayer/outlayer\", \"get-size/get-size\", \"desandro-matches-selector/matches-selector\", \"fizzy-ui-utils/utils\", \"isotope-layout/js/item\", \"isotope-layout/js/layout-mode\", \"isotope-layout/js/layout-modes/masonry\", \"isotope-layout/js/layout-modes/fit-rows\", \"isotope-layout/js/layout-modes/vertical\"], function (i, o, n, s, r, a) { return e(t, i, o, n, s, r, a) }) : \"object\" == typeof module && module.exports ? module.exports = e(t, require(\"outlayer\"), require(\"get-size\"), require(\"desandro-matches-selector\"), require(\"fizzy-ui-utils\"), require(\"isotope-layout/js/item\"), require(\"isotope-layout/js/layout-mode\"), require(\"isotope-layout/js/layout-modes/masonry\"), require(\"isotope-layout/js/layout-modes/fit-rows\"), require(\"isotope-layout/js/layout-modes/vertical\")) : t.Isotope = e(t, t.Outlayer, t.getSize, t.matchesSelector, t.fizzyUIUtils, t.Isotope.Item, t.Isotope.LayoutMode) }(window, function (t, e, i, o, n, s, r) {\r\n function a(t, e) { return function (i, o) { for (var n = 0; n < t.length; n++) { var s = t[n], r = i.sortData[s], a = o.sortData[s]; if (r > a || r < a) { var u = void 0 !== e[s] ? e[s] : e, h = u ? 1 : -1; return (r > a ? 1 : -1) * h } } return 0 } } var u = t.jQuery, h = String.prototype.trim ? function (t) { return t.trim() } : function (t) { return t.replace(/^\\s+|\\s+$/g, \"\") }, d = e.create(\"isotope\", { layoutMode: \"masonry\", isJQueryFiltering: !0, sortAscending: !0 }); d.Item = s, d.LayoutMode = r; var l = d.prototype; l._create = function () { this.itemGUID = 0, this._sorters = {}, this._getSorters(), e.prototype._create.call(this), this.modes = {}, this.filteredItems = this.items, this.sortHistory = [\"original-order\"]; for (var t in r.modes) this._initLayoutMode(t) }, l.reloadItems = function () { this.itemGUID = 0, e.prototype.reloadItems.call(this) }, l._itemize = function () { for (var t = e.prototype._itemize.apply(this, arguments), i = 0; i < t.length; i++) { var o = t[i]; o.id = this.itemGUID++ } return this._updateItemsSortData(t), t }, l._initLayoutMode = function (t) { var e = r.modes[t], i = this.options[t] || {}; this.options[t] = e.options ? n.extend(e.options, i) : i, this.modes[t] = new e(this) }, l.layout = function () { return !this._isLayoutInited && this._getOption(\"initLayout\") ? void this.arrange() : void this._layout() }, l._layout = function () { var t = this._getIsInstant(); this._resetLayout(), this._manageStamps(), this.layoutItems(this.filteredItems, t), this._isLayoutInited = !0 }, l.arrange = function (t) { this.option(t), this._getIsInstant(); var e = this._filter(this.items); this.filteredItems = e.matches, this._bindArrangeComplete(), this._isInstant ? this._noTransition(this._hideReveal, [e]) : this._hideReveal(e), this._sort(), this._layout() }, l._init = l.arrange, l._hideReveal = function (t) { this.reveal(t.needReveal), this.hide(t.needHide) }, l._getIsInstant = function () { var t = this._getOption(\"layoutInstant\"), e = void 0 !== t ? t : !this._isLayoutInited; return this._isInstant = e, e }, l._bindArrangeComplete = function () { function t() { e && i && o && n.dispatchEvent(\"arrangeComplete\", null, [n.filteredItems]) } var e, i, o, n = this; this.once(\"layoutComplete\", function () { e = !0, t() }), this.once(\"hideComplete\", function () { i = !0, t() }), this.once(\"revealComplete\", function () { o = !0, t() }) }, l._filter = function (t) { var e = this.options.filter; e = e || \"*\"; for (var i = [], o = [], n = [], s = this._getFilterTest(e), r = 0; r < t.length; r++) { var a = t[r]; if (!a.isIgnored) { var u = s(a); u && i.push(a), u && a.isHidden ? o.push(a) : u || a.isHidden || n.push(a) } } return { matches: i, needReveal: o, needHide: n } }, l._getFilterTest = function (t) {\r\n return u && this.options.isJQueryFiltering ? function (e) { return u(e.element).is(t) } : \"function\" == typeof t ? function (e) { return t(e.element) } : function (e) { return o(e.element, t) }\r\n }, l.updateSortData = function (t) { var e; t ? (t = n.makeArray(t), e = this.getItems(t)) : e = this.items, this._getSorters(), this._updateItemsSortData(e) }, l._getSorters = function () { var t = this.options.getSortData; for (var e in t) { var i = t[e]; this._sorters[e] = f(i) } }, l._updateItemsSortData = function (t) { for (var e = t && t.length, i = 0; e && i < e; i++) { var o = t[i]; o.updateSortData() } }; var f = function () { function t(t) { if (\"string\" != typeof t) return t; var i = h(t).split(\" \"), o = i[0], n = o.match(/^\\[(.+)\\]$/), s = n && n[1], r = e(s, o), a = d.sortDataParsers[i[1]]; return t = a ? function (t) { return t && a(r(t)) } : function (t) { return t && r(t) } } function e(t, e) { return t ? function (e) { return e.getAttribute(t) } : function (t) { var i = t.querySelector(e); return i && i.textContent } } return t }(); d.sortDataParsers = { parseInt: function (t) { return parseInt(t, 10) }, parseFloat: function (t) { return parseFloat(t) } }, l._sort = function () { if (this.options.sortBy) { var t = n.makeArray(this.options.sortBy); this._getIsSameSortBy(t) || (this.sortHistory = t.concat(this.sortHistory)); var e = a(this.sortHistory, this.options.sortAscending); this.filteredItems.sort(e) } }, l._getIsSameSortBy = function (t) { for (var e = 0; e < t.length; e++)if (t[e] != this.sortHistory[e]) return !1; return !0 }, l._mode = function () { var t = this.options.layoutMode, e = this.modes[t]; if (!e) throw new Error(\"No layout mode: \" + t); return e.options = this.options[t], e }, l._resetLayout = function () { e.prototype._resetLayout.call(this), this._mode()._resetLayout() }, l._getItemLayoutPosition = function (t) { return this._mode()._getItemLayoutPosition(t) }, l._manageStamp = function (t) { this._mode()._manageStamp(t) }, l._getContainerSize = function () { return this._mode()._getContainerSize() }, l.needsResizeLayout = function () { return this._mode().needsResizeLayout() }, l.appended = function (t) { var e = this.addItems(t); if (e.length) { var i = this._filterRevealAdded(e); this.filteredItems = this.filteredItems.concat(i) } }, l.prepended = function (t) { var e = this._itemize(t); if (e.length) { this._resetLayout(), this._manageStamps(); var i = this._filterRevealAdded(e); this.layoutItems(this.filteredItems), this.filteredItems = i.concat(this.filteredItems), this.items = e.concat(this.items) } }, l._filterRevealAdded = function (t) { var e = this._filter(t); return this.hide(e.needHide), this.reveal(e.matches), this.layoutItems(e.matches, !0), e.matches }, l.insert = function (t) { var e = this.addItems(t); if (e.length) { var i, o, n = e.length; for (i = 0; i < n; i++)o = e[i], this.element.appendChild(o.element); var s = this._filter(e).matches; for (i = 0; i < n; i++)e[i].isLayoutInstant = !0; for (this.arrange(), i = 0; i < n; i++)delete e[i].isLayoutInstant; this.reveal(s) } }; var c = l.remove; return l.remove = function (t) { t = n.makeArray(t); var e = this.getItems(t); c.call(this, t); for (var i = e && e.length, o = 0; i && o < i; o++) { var s = e[o]; n.removeFrom(this.filteredItems, s) } }, l.shuffle = function () { for (var t = 0; t < this.items.length; t++) { var e = this.items[t]; e.sortData.random = Math.random() } this.options.sortBy = \"random\", this._sort(), this._layout() }, l._noTransition = function (t, e) { var i = this.options.transitionDuration; this.options.transitionDuration = 0; var o = t.apply(this, e); return this.options.transitionDuration = i, o }, l.getFilteredItemElements = function () { return this.filteredItems.map(function (t) { return t.element }) }, d\r\n});","/*! X-editable - v1.5.1 \r\n* In-place editing with Twitter Bootstrap, jQuery UI or pure jQuery\r\n* http://github.com/vitalets/x-editable\r\n* Copyright (c) 2013 Vitaliy Potapov; Licensed MIT */\r\n/**\r\nForm with single input element, two buttons and two states: normal/loading.\r\nApplied as jQuery method to DIV tag (not to form tag!). This is because form can be in loading state when spinner shown.\r\nEditableform is linked with one of input types, e.g. 'text', 'select' etc.\r\n\r\n@class editableform\r\n@uses text\r\n@uses textarea\r\n**/\r\n(function ($) {\r\n \"use strict\";\r\n \r\n var EditableForm = function (div, options) {\r\n this.options = $.extend({}, $.fn.editableform.defaults, options);\r\n this.$div = $(div); //div, containing form. Not form tag. Not editable-element.\r\n if(!this.options.scope) {\r\n this.options.scope = this;\r\n }\r\n //nothing shown after init\r\n };\r\n\r\n EditableForm.prototype = {\r\n constructor: EditableForm,\r\n initInput: function() { //called once\r\n //take input from options (as it is created in editable-element)\r\n this.input = this.options.input;\r\n \r\n //set initial value\r\n //todo: may be add check: typeof str === 'string' ? \r\n this.value = this.input.str2value(this.options.value); \r\n \r\n //prerender: get input.$input\r\n this.input.prerender();\r\n },\r\n initTemplate: function() {\r\n this.$form = $($.fn.editableform.template); \r\n },\r\n initButtons: function() {\r\n var $btn = this.$form.find('.editable-buttons');\r\n $btn.append($.fn.editableform.buttons);\r\n if(this.options.showbuttons === 'bottom') {\r\n $btn.addClass('editable-buttons-bottom');\r\n }\r\n },\r\n /**\r\n Renders editableform\r\n\r\n @method render\r\n **/ \r\n render: function() {\r\n //init loader\r\n this.$loading = $($.fn.editableform.loading); \r\n this.$div.empty().append(this.$loading);\r\n \r\n //init form template and buttons\r\n this.initTemplate();\r\n if(this.options.showbuttons) {\r\n this.initButtons();\r\n } else {\r\n this.$form.find('.editable-buttons').remove();\r\n }\r\n\r\n //show loading state\r\n this.showLoading(); \r\n \r\n //flag showing is form now saving value to server. \r\n //It is needed to wait when closing form.\r\n this.isSaving = false;\r\n \r\n /** \r\n Fired when rendering starts\r\n @event rendering \r\n @param {Object} event event object\r\n **/ \r\n this.$div.triggerHandler('rendering');\r\n \r\n //init input\r\n this.initInput();\r\n \r\n //append input to form\r\n this.$form.find('div.editable-input').append(this.input.$tpl); \r\n \r\n //append form to container\r\n this.$div.append(this.$form);\r\n \r\n //render input\r\n $.when(this.input.render())\r\n .then($.proxy(function () {\r\n //setup input to submit automatically when no buttons shown\r\n if(!this.options.showbuttons) {\r\n this.input.autosubmit(); \r\n }\r\n \r\n //attach 'cancel' handler\r\n this.$form.find('.editable-cancel').click($.proxy(this.cancel, this));\r\n \r\n if(this.input.error) {\r\n this.error(this.input.error);\r\n this.$form.find('.editable-submit').attr('disabled', true);\r\n this.input.$input.attr('disabled', true);\r\n //prevent form from submitting\r\n this.$form.submit(function(e){ e.preventDefault(); });\r\n } else {\r\n this.error(false);\r\n this.input.$input.removeAttr('disabled');\r\n this.$form.find('.editable-submit').removeAttr('disabled');\r\n var value = (this.value === null || this.value === undefined || this.value === '') ? this.options.defaultValue : this.value;\r\n this.input.value2input(value);\r\n //attach submit handler\r\n this.$form.submit($.proxy(this.submit, this));\r\n }\r\n\r\n /** \r\n Fired when form is rendered\r\n @event rendered\r\n @param {Object} event event object\r\n **/ \r\n this.$div.triggerHandler('rendered'); \r\n\r\n this.showForm();\r\n \r\n //call postrender method to perform actions required visibility of form\r\n if(this.input.postrender) {\r\n this.input.postrender();\r\n } \r\n }, this));\r\n },\r\n cancel: function() { \r\n /** \r\n Fired when form was cancelled by user\r\n @event cancel \r\n @param {Object} event event object\r\n **/ \r\n this.$div.triggerHandler('cancel');\r\n },\r\n showLoading: function() {\r\n var w, h;\r\n if(this.$form) {\r\n //set loading size equal to form\r\n w = this.$form.outerWidth();\r\n h = this.$form.outerHeight(); \r\n if(w) {\r\n this.$loading.width(w);\r\n }\r\n if(h) {\r\n this.$loading.height(h);\r\n }\r\n this.$form.hide();\r\n } else {\r\n //stretch loading to fill container width\r\n w = this.$loading.parent().width();\r\n if(w) {\r\n this.$loading.width(w);\r\n }\r\n }\r\n this.$loading.show(); \r\n },\r\n\r\n showForm: function(activate) {\r\n this.$loading.hide();\r\n this.$form.show();\r\n if(activate !== false) {\r\n this.input.activate(); \r\n }\r\n /** \r\n Fired when form is shown\r\n @event show \r\n @param {Object} event event object\r\n **/ \r\n this.$div.triggerHandler('show');\r\n },\r\n\r\n error: function(msg) {\r\n var $group = this.$form.find('.control-group'),\r\n $block = this.$form.find('.editable-error-block'),\r\n lines;\r\n\r\n if(msg === false) {\r\n $group.removeClass($.fn.editableform.errorGroupClass);\r\n $block.removeClass($.fn.editableform.errorBlockClass).empty().hide(); \r\n } else {\r\n //convert newline to <br> for more pretty error display\r\n if(msg) {\r\n lines = (''+msg).split('\\n');\r\n for (var i = 0; i < lines.length; i++) {\r\n lines[i] = $('<div>').text(lines[i]).html();\r\n }\r\n msg = lines.join('<br>');\r\n }\r\n $group.addClass($.fn.editableform.errorGroupClass);\r\n $block.addClass($.fn.editableform.errorBlockClass).html(msg).show();\r\n }\r\n },\r\n\r\n submit: function(e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n \r\n //get new value from input\r\n var newValue = this.input.input2value(); \r\n\r\n //validation: if validate returns string or truthy value - means error\r\n //if returns object like {newValue: '...'} => submitted value is reassigned to it\r\n var error = this.validate(newValue);\r\n if ($.type(error) === 'object' && error.newValue !== undefined) {\r\n newValue = error.newValue;\r\n this.input.value2input(newValue);\r\n if(typeof error.msg === 'string') {\r\n this.error(error.msg);\r\n this.showForm();\r\n return;\r\n }\r\n } else if (error) {\r\n this.error(error);\r\n this.showForm();\r\n return;\r\n } \r\n \r\n //if value not changed --> trigger 'nochange' event and return\r\n /*jslint eqeq: true*/\r\n if (!this.options.savenochange && this.input.value2str(newValue) == this.input.value2str(this.value)) {\r\n /*jslint eqeq: false*/ \r\n /** \r\n Fired when value not changed but form is submitted. Requires savenochange = false.\r\n @event nochange \r\n @param {Object} event event object\r\n **/ \r\n this.$div.triggerHandler('nochange'); \r\n return;\r\n } \r\n\r\n //convert value for submitting to server\r\n var submitValue = this.input.value2submit(newValue);\r\n \r\n this.isSaving = true;\r\n \r\n //sending data to server\r\n $.when(this.save(submitValue))\r\n .done($.proxy(function(response) {\r\n this.isSaving = false;\r\n\r\n //run success callback\r\n var res = typeof this.options.success === 'function' ? this.options.success.call(this.options.scope, response, newValue) : null;\r\n\r\n //if success callback returns false --> keep form open and do not activate input\r\n if(res === false) {\r\n this.error(false);\r\n this.showForm(false);\r\n return;\r\n }\r\n\r\n //if success callback returns string --> keep form open, show error and activate input \r\n if(typeof res === 'string') {\r\n this.error(res);\r\n this.showForm();\r\n return;\r\n }\r\n\r\n //if success callback returns object like {newValue: <something>} --> use that value instead of submitted\r\n //it is usefull if you want to chnage value in url-function\r\n if(res && typeof res === 'object' && res.hasOwnProperty('newValue')) {\r\n newValue = res.newValue;\r\n }\r\n\r\n //clear error message\r\n this.error(false); \r\n this.value = newValue;\r\n /** \r\n Fired when form is submitted\r\n @event save \r\n @param {Object} event event object\r\n @param {Object} params additional params\r\n @param {mixed} params.newValue raw new value\r\n @param {mixed} params.submitValue submitted value as string\r\n @param {Object} params.response ajax response\r\n\r\n @example\r\n $('#form-div').on('save'), function(e, params){\r\n if(params.newValue === 'username') {...}\r\n });\r\n **/\r\n this.$div.triggerHandler('save', {newValue: newValue, submitValue: submitValue, response: response});\r\n }, this))\r\n .fail($.proxy(function(xhr) {\r\n this.isSaving = false;\r\n\r\n var msg;\r\n if(typeof this.options.error === 'function') {\r\n msg = this.options.error.call(this.options.scope, xhr, newValue);\r\n } else {\r\n msg = typeof xhr === 'string' ? xhr : xhr.responseText || xhr.statusText || 'Unknown error!';\r\n }\r\n\r\n this.error(msg);\r\n this.showForm();\r\n }, this));\r\n },\r\n\r\n save: function(submitValue) {\r\n //try parse composite pk defined as json string in data-pk \r\n this.options.pk = $.fn.editableutils.tryParseJson(this.options.pk, true); \r\n \r\n var pk = (typeof this.options.pk === 'function') ? this.options.pk.call(this.options.scope) : this.options.pk,\r\n /*\r\n send on server in following cases:\r\n 1. url is function\r\n 2. url is string AND (pk defined OR send option = always) \r\n */\r\n send = !!(typeof this.options.url === 'function' || (this.options.url && ((this.options.send === 'always') || (this.options.send === 'auto' && pk !== null && pk !== undefined)))),\r\n params;\r\n\r\n if (send) { //send to server\r\n this.showLoading();\r\n\r\n //standard params\r\n params = {\r\n name: this.options.name || '',\r\n value: submitValue,\r\n pk: pk \r\n };\r\n\r\n //additional params\r\n if(typeof this.options.params === 'function') {\r\n params = this.options.params.call(this.options.scope, params); \r\n } else {\r\n //try parse json in single quotes (from data-params attribute)\r\n this.options.params = $.fn.editableutils.tryParseJson(this.options.params, true); \r\n $.extend(params, this.options.params);\r\n }\r\n\r\n if(typeof this.options.url === 'function') { //user's function\r\n return this.options.url.call(this.options.scope, params);\r\n } else { \r\n //send ajax to server and return deferred object\r\n return $.ajax($.extend({\r\n url : this.options.url,\r\n data : params,\r\n type : 'POST'\r\n }, this.options.ajaxOptions));\r\n }\r\n }\r\n }, \r\n\r\n validate: function (value) {\r\n if (value === undefined) {\r\n value = this.value;\r\n }\r\n if (typeof this.options.validate === 'function') {\r\n return this.options.validate.call(this.options.scope, value);\r\n }\r\n },\r\n\r\n option: function(key, value) {\r\n if(key in this.options) {\r\n this.options[key] = value;\r\n }\r\n \r\n if(key === 'value') {\r\n this.setValue(value);\r\n }\r\n \r\n //do not pass option to input as it is passed in editable-element\r\n },\r\n\r\n setValue: function(value, convertStr) {\r\n if(convertStr) {\r\n this.value = this.input.str2value(value);\r\n } else {\r\n this.value = value;\r\n }\r\n \r\n //if form is visible, update input\r\n if(this.$form && this.$form.is(':visible')) {\r\n this.input.value2input(this.value);\r\n } \r\n } \r\n };\r\n\r\n /*\r\n Initialize editableform. Applied to jQuery object.\r\n\r\n @method $().editableform(options)\r\n @params {Object} options\r\n @example\r\n var $form = $('<div>').editableform({\r\n type: 'text',\r\n name: 'username',\r\n url: '/post',\r\n value: 'vitaliy'\r\n });\r\n\r\n //to display form you should call 'render' method\r\n $form.editableform('render'); \r\n */\r\n $.fn.editableform = function (option) {\r\n var args = arguments;\r\n return this.each(function () {\r\n var $this = $(this), \r\n data = $this.data('editableform'), \r\n options = typeof option === 'object' && option; \r\n if (!data) {\r\n $this.data('editableform', (data = new EditableForm(this, options)));\r\n }\r\n\r\n if (typeof option === 'string') { //call method \r\n data[option].apply(data, Array.prototype.slice.call(args, 1));\r\n } \r\n });\r\n };\r\n\r\n //keep link to constructor to allow inheritance\r\n $.fn.editableform.Constructor = EditableForm; \r\n\r\n //defaults\r\n $.fn.editableform.defaults = {\r\n /* see also defaults for input */\r\n\r\n /**\r\n Type of input. Can be <code>text|textarea|select|date|checklist</code>\r\n\r\n @property type \r\n @type string\r\n @default 'text'\r\n **/\r\n type: 'text',\r\n /**\r\n Url for submit, e.g. <code>'/post'</code> \r\n If function - it will be called instead of ajax. Function should return deferred object to run fail/done callbacks.\r\n\r\n @property url \r\n @type string|function\r\n @default null\r\n @example\r\n url: function(params) {\r\n var d = new $.Deferred;\r\n if(params.value === 'abc') {\r\n return d.reject('error message'); //returning error via deferred object\r\n } else {\r\n //async saving data in js model\r\n someModel.asyncSaveMethod({\r\n ..., \r\n success: function(){\r\n d.resolve();\r\n }\r\n }); \r\n return d.promise();\r\n }\r\n } \r\n **/ \r\n url:null,\r\n /**\r\n Additional params for submit. If defined as <code>object</code> - it is **appended** to original ajax data (pk, name and value). \r\n If defined as <code>function</code> - returned object **overwrites** original ajax data.\r\n @example\r\n params: function(params) {\r\n //originally params contain pk, name and value\r\n params.a = 1;\r\n return params;\r\n }\r\n\r\n @property params \r\n @type object|function\r\n @default null\r\n **/ \r\n params:null,\r\n /**\r\n Name of field. Will be submitted on server. Can be taken from <code>id</code> attribute\r\n\r\n @property name \r\n @type string\r\n @default null\r\n **/ \r\n name: null,\r\n /**\r\n Primary key of editable object (e.g. record id in database). For composite keys use object, e.g. <code>{id: 1, lang: 'en'}</code>.\r\n Can be calculated dynamically via function.\r\n\r\n @property pk \r\n @type string|object|function\r\n @default null\r\n **/ \r\n pk: null,\r\n /**\r\n Initial value. If not defined - will be taken from element's content.\r\n For __select__ type should be defined (as it is ID of shown text).\r\n\r\n @property value \r\n @type string|object\r\n @default null\r\n **/ \r\n value: null,\r\n /**\r\n Value that will be displayed in input if original field value is empty (`null|undefined|''`).\r\n\r\n @property defaultValue \r\n @type string|object\r\n @default null\r\n @since 1.4.6\r\n **/ \r\n defaultValue: null,\r\n /**\r\n Strategy for sending data on server. Can be `auto|always|never`.\r\n When 'auto' data will be sent on server **only if pk and url defined**, otherwise new value will be stored locally.\r\n\r\n @property send \r\n @type string\r\n @default 'auto'\r\n **/ \r\n send: 'auto', \r\n /**\r\n Function for client-side validation. If returns string - means validation not passed and string showed as error.\r\n Since 1.5.1 you can modify submitted value by returning object from `validate`: \r\n `{newValue: '...'}` or `{newValue: '...', msg: '...'}`\r\n\r\n @property validate \r\n @type function\r\n @default null\r\n @example\r\n validate: function(value) {\r\n if($.trim(value) == '') {\r\n return 'This field is required';\r\n }\r\n }\r\n **/ \r\n validate: null,\r\n /**\r\n Success callback. Called when value successfully sent on server and **response status = 200**. \r\n Usefull to work with json response. For example, if your backend response can be <code>{success: true}</code>\r\n or <code>{success: false, msg: \"server error\"}</code> you can check it inside this callback. \r\n If it returns **string** - means error occured and string is shown as error message. \r\n If it returns **object like** <code>{newValue: <something>}</code> - it overwrites value, submitted by user. \r\n Otherwise newValue simply rendered into element.\r\n \r\n @property success \r\n @type function\r\n @default null\r\n @example\r\n success: function(response, newValue) {\r\n if(!response.success) return response.msg;\r\n }\r\n **/ \r\n success: null,\r\n /**\r\n Error callback. Called when request failed (response status != 200). \r\n Usefull when you want to parse error response and display a custom message.\r\n Must return **string** - the message to be displayed in the error block.\r\n \r\n @property error \r\n @type function\r\n @default null\r\n @since 1.4.4\r\n @example\r\n error: function(response, newValue) {\r\n if(response.status === 500) {\r\n return 'Service unavailable. Please try later.';\r\n } else {\r\n return response.responseText;\r\n }\r\n }\r\n **/ \r\n error: null,\r\n /**\r\n Additional options for submit ajax request.\r\n List of values: http://api.jquery.com/jQuery.ajax\r\n \r\n @property ajaxOptions \r\n @type object\r\n @default null\r\n @since 1.1.1 \r\n @example \r\n ajaxOptions: {\r\n type: 'put',\r\n dataType: 'json'\r\n } \r\n **/ \r\n ajaxOptions: null,\r\n /**\r\n Where to show buttons: left(true)|bottom|false \r\n Form without buttons is auto-submitted.\r\n\r\n @property showbuttons \r\n @type boolean|string\r\n @default true\r\n @since 1.1.1\r\n **/ \r\n showbuttons: true,\r\n /**\r\n Scope for callback methods (success, validate). \r\n If <code>null</code> means editableform instance itself. \r\n\r\n @property scope \r\n @type DOMElement|object\r\n @default null\r\n @since 1.2.0\r\n @private\r\n **/ \r\n scope: null,\r\n /**\r\n Whether to save or cancel value when it was not changed but form was submitted\r\n\r\n @property savenochange \r\n @type boolean\r\n @default false\r\n @since 1.2.0\r\n **/\r\n savenochange: false\r\n }; \r\n\r\n /*\r\n Note: following params could redefined in engine: bootstrap or jqueryui:\r\n Classes 'control-group' and 'editable-error-block' must always present!\r\n */ \r\n $.fn.editableform.template = '<form class=\"form-inline editableform\">'+\r\n '<div class=\"control-group\">' + \r\n '<div><div class=\"editable-input\"></div><div class=\"editable-buttons\"></div></div>'+\r\n '<div class=\"editable-error-block\"></div>' + \r\n '</div>' + \r\n '</form>';\r\n\r\n //loading div\r\n $.fn.editableform.loading = '<div class=\"editableform-loading\"></div>';\r\n\r\n //buttons\r\n $.fn.editableform.buttons = '<button type=\"submit\" class=\"editable-submit\">ok</button>'+\r\n '<button type=\"button\" class=\"editable-cancel\">cancel</button>'; \r\n\r\n //error class attached to control-group\r\n $.fn.editableform.errorGroupClass = null; \r\n\r\n //error class attached to editable-error-block\r\n $.fn.editableform.errorBlockClass = 'editable-error';\r\n \r\n //engine\r\n $.fn.editableform.engine = 'jquery';\r\n}(window.jQuery));\r\n\r\n/**\r\n* EditableForm utilites\r\n*/\r\n(function ($) {\r\n \"use strict\";\r\n \r\n //utils\r\n $.fn.editableutils = {\r\n /**\r\n * classic JS inheritance function\r\n */ \r\n inherit: function (Child, Parent) {\r\n var F = function() { };\r\n F.prototype = Parent.prototype;\r\n Child.prototype = new F();\r\n Child.prototype.constructor = Child;\r\n Child.superclass = Parent.prototype;\r\n },\r\n\r\n /**\r\n * set caret position in input\r\n * see http://stackoverflow.com/questions/499126/jquery-set-cursor-position-in-text-area\r\n */ \r\n setCursorPosition: function(elem, pos) {\r\n if (elem.setSelectionRange) {\r\n elem.setSelectionRange(pos, pos);\r\n } else if (elem.createTextRange) {\r\n var range = elem.createTextRange();\r\n range.collapse(true);\r\n range.moveEnd('character', pos);\r\n range.moveStart('character', pos);\r\n range.select();\r\n }\r\n },\r\n\r\n /**\r\n * function to parse JSON in *single* quotes. (jquery automatically parse only double quotes)\r\n * That allows such code as: <a data-source=\"{'a': 'b', 'c': 'd'}\">\r\n * safe = true --> means no exception will be thrown\r\n * for details see http://stackoverflow.com/questions/7410348/how-to-set-json-format-to-html5-data-attributes-in-the-jquery\r\n */\r\n tryParseJson: function(s, safe) {\r\n if (typeof s === 'string' && s.length && s.match(/^[\\{\\[].*[\\}\\]]$/)) {\r\n if (safe) {\r\n try {\r\n /*jslint evil: true*/\r\n s = (new Function('return ' + s))();\r\n /*jslint evil: false*/\r\n } catch (e) {} finally {\r\n return s;\r\n }\r\n } else {\r\n /*jslint evil: true*/\r\n s = (new Function('return ' + s))();\r\n /*jslint evil: false*/\r\n }\r\n }\r\n return s;\r\n },\r\n\r\n /**\r\n * slice object by specified keys\r\n */\r\n sliceObj: function(obj, keys, caseSensitive /* default: false */) {\r\n var key, keyLower, newObj = {};\r\n\r\n if (!$.isArray(keys) || !keys.length) {\r\n return newObj;\r\n }\r\n\r\n for (var i = 0; i < keys.length; i++) {\r\n key = keys[i];\r\n if (obj.hasOwnProperty(key)) {\r\n newObj[key] = obj[key];\r\n }\r\n\r\n if(caseSensitive === true) {\r\n continue;\r\n }\r\n\r\n //when getting data-* attributes via $.data() it's converted to lowercase.\r\n //details: http://stackoverflow.com/questions/7602565/using-data-attributes-with-jquery\r\n //workaround is code below.\r\n keyLower = key.toLowerCase();\r\n if (obj.hasOwnProperty(keyLower)) {\r\n newObj[key] = obj[keyLower];\r\n }\r\n }\r\n\r\n return newObj;\r\n },\r\n\r\n /*\r\n exclude complex objects from $.data() before pass to config\r\n */\r\n getConfigData: function($element) {\r\n var data = {};\r\n $.each($element.data(), function(k, v) {\r\n if(typeof v !== 'object' || (v && typeof v === 'object' && (v.constructor === Object || v.constructor === Array))) {\r\n data[k] = v;\r\n }\r\n });\r\n return data;\r\n },\r\n\r\n /*\r\n returns keys of object\r\n */\r\n objectKeys: function(o) {\r\n if (Object.keys) {\r\n return Object.keys(o); \r\n } else {\r\n if (o !== Object(o)) {\r\n throw new TypeError('Object.keys called on a non-object');\r\n }\r\n var k=[], p;\r\n for (p in o) {\r\n if (Object.prototype.hasOwnProperty.call(o,p)) {\r\n k.push(p);\r\n }\r\n }\r\n return k;\r\n }\r\n\r\n },\r\n \r\n /**\r\n method to escape html.\r\n **/\r\n escape: function(str) {\r\n return $('<div>').text(str).html();\r\n },\r\n \r\n /*\r\n returns array items from sourceData having value property equal or inArray of 'value'\r\n */\r\n itemsByValue: function(value, sourceData, valueProp) {\r\n if(!sourceData || value === null) {\r\n return [];\r\n }\r\n \r\n if (typeof(valueProp) !== \"function\") {\r\n var idKey = valueProp || 'value';\r\n valueProp = function (e) { return e[idKey]; };\r\n }\r\n \r\n var isValArray = $.isArray(value),\r\n result = [], \r\n that = this;\r\n\r\n $.each(sourceData, function(i, o) {\r\n if(o.children) {\r\n result = result.concat(that.itemsByValue(value, o.children, valueProp));\r\n } else {\r\n /*jslint eqeq: true*/\r\n if(isValArray) {\r\n if($.grep(value, function(v){ return v == (o && typeof o === 'object' ? valueProp(o) : o); }).length) {\r\n result.push(o); \r\n }\r\n } else {\r\n var itemValue = (o && (typeof o === 'object')) ? valueProp(o) : o;\r\n if(value == itemValue) {\r\n result.push(o); \r\n }\r\n }\r\n /*jslint eqeq: false*/\r\n }\r\n });\r\n \r\n return result;\r\n },\r\n \r\n /*\r\n Returns input by options: type, mode. \r\n */\r\n createInput: function(options) {\r\n var TypeConstructor, typeOptions, input,\r\n type = options.type;\r\n\r\n //`date` is some kind of virtual type that is transformed to one of exact types\r\n //depending on mode and core lib\r\n if(type === 'date') {\r\n //inline\r\n if(options.mode === 'inline') {\r\n if($.fn.editabletypes.datefield) {\r\n type = 'datefield';\r\n } else if($.fn.editabletypes.dateuifield) {\r\n type = 'dateuifield';\r\n }\r\n //popup\r\n } else {\r\n if($.fn.editabletypes.date) {\r\n type = 'date';\r\n } else if($.fn.editabletypes.dateui) {\r\n type = 'dateui';\r\n }\r\n }\r\n \r\n //if type still `date` and not exist in types, replace with `combodate` that is base input\r\n if(type === 'date' && !$.fn.editabletypes.date) {\r\n type = 'combodate';\r\n } \r\n }\r\n \r\n //`datetime` should be datetimefield in 'inline' mode\r\n if(type === 'datetime' && options.mode === 'inline') {\r\n type = 'datetimefield'; \r\n } \r\n\r\n //change wysihtml5 to textarea for jquery UI and plain versions\r\n if(type === 'wysihtml5' && !$.fn.editabletypes[type]) {\r\n type = 'textarea';\r\n }\r\n\r\n //create input of specified type. Input will be used for converting value, not in form\r\n if(typeof $.fn.editabletypes[type] === 'function') {\r\n TypeConstructor = $.fn.editabletypes[type];\r\n typeOptions = this.sliceObj(options, this.objectKeys(TypeConstructor.defaults));\r\n input = new TypeConstructor(typeOptions);\r\n return input;\r\n } else {\r\n $.error('Unknown type: '+ type);\r\n return false; \r\n } \r\n },\r\n \r\n //see http://stackoverflow.com/questions/7264899/detect-css-transitions-using-javascript-and-without-modernizr\r\n supportsTransitions: function () {\r\n var b = document.body || document.documentElement,\r\n s = b.style,\r\n p = 'transition',\r\n v = ['Moz', 'Webkit', 'Khtml', 'O', 'ms'];\r\n \r\n if(typeof s[p] === 'string') {\r\n return true; \r\n }\r\n\r\n // Tests for vendor specific prop\r\n p = p.charAt(0).toUpperCase() + p.substr(1);\r\n for(var i=0; i<v.length; i++) {\r\n if(typeof s[v[i] + p] === 'string') { \r\n return true; \r\n }\r\n }\r\n return false;\r\n } \r\n \r\n }; \r\n}(window.jQuery));\r\n\r\n/**\r\nAttaches stand-alone container with editable-form to HTML element. Element is used only for positioning, value is not stored anywhere.<br>\r\nThis method applied internally in <code>$().editable()</code>. You should subscribe on it's events (save / cancel) to get profit of it.<br>\r\nFinal realization can be different: bootstrap-popover, jqueryui-tooltip, poshytip, inline-div. It depends on which js file you include.<br>\r\nApplied as jQuery method.\r\n\r\n@class editableContainer\r\n@uses editableform\r\n**/\r\n(function ($) {\r\n \"use strict\";\r\n\r\n var Popup = function (element, options) {\r\n this.init(element, options);\r\n };\r\n \r\n var Inline = function (element, options) {\r\n this.init(element, options);\r\n }; \r\n\r\n //methods\r\n Popup.prototype = {\r\n containerName: null, //method to call container on element\r\n containerDataName: null, //object name in element's .data()\r\n innerCss: null, //tbd in child class\r\n containerClass: 'editable-container editable-popup', //css class applied to container element\r\n defaults: {}, //container itself defaults\r\n \r\n init: function(element, options) {\r\n this.$element = $(element);\r\n //since 1.4.1 container do not use data-* directly as they already merged into options.\r\n this.options = $.extend({}, $.fn.editableContainer.defaults, options); \r\n this.splitOptions();\r\n \r\n //set scope of form callbacks to element\r\n this.formOptions.scope = this.$element[0]; \r\n \r\n this.initContainer();\r\n \r\n //flag to hide container, when saving value will finish\r\n this.delayedHide = false;\r\n\r\n //bind 'destroyed' listener to destroy container when element is removed from dom\r\n this.$element.on('destroyed', $.proxy(function(){\r\n this.destroy();\r\n }, this)); \r\n \r\n //attach document handler to close containers on click / escape\r\n if(!$(document).data('editable-handlers-attached')) {\r\n //close all on escape\r\n $(document).on('keyup.editable', function (e) {\r\n if (e.which === 27) {\r\n $('.editable-open').editableContainer('hide');\r\n //todo: return focus on element \r\n }\r\n });\r\n\r\n //close containers when click outside \r\n //(mousedown could be better than click, it closes everything also on drag drop)\r\n $(document).on('click.editable', function(e) {\r\n var $target = $(e.target), i,\r\n exclude_classes = ['.editable-container', \r\n '.ui-datepicker-header', \r\n '.datepicker', //in inline mode datepicker is rendered into body\r\n '.modal-backdrop', \r\n '.bootstrap-wysihtml5-insert-image-modal', \r\n '.bootstrap-wysihtml5-insert-link-modal'\r\n ];\r\n \r\n //check if element is detached. It occurs when clicking in bootstrap datepicker\r\n if (!$.contains(document.documentElement, e.target)) {\r\n return;\r\n }\r\n\r\n //for some reason FF 20 generates extra event (click) in select2 widget with e.target = document\r\n //we need to filter it via construction below. See https://github.com/vitalets/x-editable/issues/199\r\n //Possibly related to http://stackoverflow.com/questions/10119793/why-does-firefox-react-differently-from-webkit-and-ie-to-click-event-on-selec\r\n if($target.is(document)) {\r\n return; \r\n }\r\n \r\n //if click inside one of exclude classes --> no nothing\r\n for(i=0; i<exclude_classes.length; i++) {\r\n if($target.is(exclude_classes[i]) || $target.parents(exclude_classes[i]).length) {\r\n return;\r\n }\r\n }\r\n \r\n //close all open containers (except one - target)\r\n Popup.prototype.closeOthers(e.target);\r\n });\r\n \r\n $(document).data('editable-handlers-attached', true);\r\n } \r\n },\r\n\r\n //split options on containerOptions and formOptions\r\n splitOptions: function() {\r\n this.containerOptions = {};\r\n this.formOptions = {};\r\n \r\n if(!$.fn[this.containerName]) {\r\n throw new Error(this.containerName + ' not found. Have you included corresponding js file?'); \r\n }\r\n \r\n //keys defined in container defaults go to container, others go to form\r\n for(var k in this.options) {\r\n if(k in this.defaults) {\r\n this.containerOptions[k] = this.options[k];\r\n } else {\r\n this.formOptions[k] = this.options[k];\r\n } \r\n }\r\n },\r\n \r\n /*\r\n Returns jquery object of container\r\n @method tip()\r\n */ \r\n tip: function() {\r\n return this.container() ? this.container().$tip : null;\r\n },\r\n\r\n /* returns container object */\r\n container: function() {\r\n var container;\r\n //first, try get it by `containerDataName`\r\n if(this.containerDataName) {\r\n if(container = this.$element.data(this.containerDataName)) {\r\n return container;\r\n }\r\n }\r\n //second, try `containerName`\r\n container = this.$element.data(this.containerName);\r\n return container;\r\n },\r\n\r\n /* call native method of underlying container, e.g. this.$element.popover('method') */ \r\n call: function() {\r\n this.$element[this.containerName].apply(this.$element, arguments); \r\n }, \r\n \r\n initContainer: function(){\r\n this.call(this.containerOptions);\r\n },\r\n\r\n renderForm: function() {\r\n this.$form\r\n .editableform(this.formOptions)\r\n .on({\r\n save: $.proxy(this.save, this), //click on submit button (value changed)\r\n nochange: $.proxy(function(){ this.hide('nochange'); }, this), //click on submit button (value NOT changed) \r\n cancel: $.proxy(function(){ this.hide('cancel'); }, this), //click on calcel button\r\n show: $.proxy(function() {\r\n if(this.delayedHide) {\r\n this.hide(this.delayedHide.reason);\r\n this.delayedHide = false;\r\n } else {\r\n this.setPosition();\r\n }\r\n }, this), //re-position container every time form is shown (occurs each time after loading state)\r\n rendering: $.proxy(this.setPosition, this), //this allows to place container correctly when loading shown\r\n resize: $.proxy(this.setPosition, this), //this allows to re-position container when form size is changed \r\n rendered: $.proxy(function(){\r\n /** \r\n Fired when container is shown and form is rendered (for select will wait for loading dropdown options). \r\n **Note:** Bootstrap popover has own `shown` event that now cannot be separated from x-editable's one.\r\n The workaround is to check `arguments.length` that is always `2` for x-editable. \r\n \r\n @event shown \r\n @param {Object} event event object\r\n @example\r\n $('#username').on('shown', function(e, editable) {\r\n editable.input.$input.val('overwriting value of input..');\r\n }); \r\n **/ \r\n /*\r\n TODO: added second param mainly to distinguish from bootstrap's shown event. It's a hotfix that will be solved in future versions via namespaced events. \r\n */\r\n this.$element.triggerHandler('shown', $(this.options.scope).data('editable')); \r\n }, this) \r\n })\r\n .editableform('render');\r\n }, \r\n\r\n /**\r\n Shows container with form\r\n @method show()\r\n @param {boolean} closeAll Whether to close all other editable containers when showing this one. Default true.\r\n **/\r\n /* Note: poshytip owerwrites this method totally! */ \r\n show: function (closeAll) {\r\n this.$element.addClass('editable-open');\r\n if(closeAll !== false) {\r\n //close all open containers (except this)\r\n this.closeOthers(this.$element[0]); \r\n }\r\n \r\n //show container itself\r\n this.innerShow();\r\n this.tip().addClass(this.containerClass);\r\n\r\n /*\r\n Currently, form is re-rendered on every show. \r\n The main reason is that we dont know, what will container do with content when closed:\r\n remove(), detach() or just hide() - it depends on container.\r\n \r\n Detaching form itself before hide and re-insert before show is good solution, \r\n but visually it looks ugly --> container changes size before hide. \r\n */ \r\n \r\n //if form already exist - delete previous data \r\n if(this.$form) {\r\n //todo: destroy prev data!\r\n //this.$form.destroy();\r\n }\r\n\r\n this.$form = $('<div>');\r\n \r\n //insert form into container body\r\n if(this.tip().is(this.innerCss)) {\r\n //for inline container\r\n this.tip().append(this.$form); \r\n } else {\r\n this.tip().find(this.innerCss).append(this.$form);\r\n } \r\n \r\n //render form\r\n this.renderForm();\r\n },\r\n\r\n /**\r\n Hides container with form\r\n @method hide()\r\n @param {string} reason Reason caused hiding. Can be <code>save|cancel|onblur|nochange|undefined (=manual)</code>\r\n **/ \r\n hide: function(reason) { \r\n if(!this.tip() || !this.tip().is(':visible') || !this.$element.hasClass('editable-open')) {\r\n return;\r\n }\r\n \r\n //if form is saving value, schedule hide\r\n if(this.$form.data('editableform').isSaving) {\r\n this.delayedHide = {reason: reason};\r\n return; \r\n } else {\r\n this.delayedHide = false;\r\n }\r\n\r\n this.$element.removeClass('editable-open'); \r\n this.innerHide();\r\n\r\n /**\r\n Fired when container was hidden. It occurs on both save or cancel. \r\n **Note:** Bootstrap popover has own `hidden` event that now cannot be separated from x-editable's one.\r\n The workaround is to check `arguments.length` that is always `2` for x-editable. \r\n\r\n @event hidden \r\n @param {object} event event object\r\n @param {string} reason Reason caused hiding. Can be <code>save|cancel|onblur|nochange|manual</code>\r\n @example\r\n $('#username').on('hidden', function(e, reason) {\r\n if(reason === 'save' || reason === 'cancel') {\r\n //auto-open next editable\r\n $(this).closest('tr').next().find('.editable').editable('show');\r\n } \r\n });\r\n **/\r\n this.$element.triggerHandler('hidden', reason || 'manual'); \r\n },\r\n\r\n /* internal show method. To be overwritten in child classes */\r\n innerShow: function () {\r\n \r\n }, \r\n\r\n /* internal hide method. To be overwritten in child classes */\r\n innerHide: function () {\r\n\r\n },\r\n \r\n /**\r\n Toggles container visibility (show / hide)\r\n @method toggle()\r\n @param {boolean} closeAll Whether to close all other editable containers when showing this one. Default true.\r\n **/ \r\n toggle: function(closeAll) {\r\n if(this.container() && this.tip() && this.tip().is(':visible')) {\r\n this.hide();\r\n } else {\r\n this.show(closeAll);\r\n } \r\n },\r\n\r\n /*\r\n Updates the position of container when content changed.\r\n @method setPosition()\r\n */ \r\n setPosition: function() {\r\n //tbd in child class\r\n },\r\n\r\n save: function(e, params) {\r\n /** \r\n Fired when new value was submitted. You can use <code>$(this).data('editableContainer')</code> inside handler to access to editableContainer instance\r\n \r\n @event save \r\n @param {Object} event event object\r\n @param {Object} params additional params\r\n @param {mixed} params.newValue submitted value\r\n @param {Object} params.response ajax response\r\n @example\r\n $('#username').on('save', function(e, params) {\r\n //assuming server response: '{success: true}'\r\n var pk = $(this).data('editableContainer').options.pk;\r\n if(params.response && params.response.success) {\r\n alert('value: ' + params.newValue + ' with pk: ' + pk + ' saved!');\r\n } else {\r\n alert('error!'); \r\n } \r\n });\r\n **/ \r\n this.$element.triggerHandler('save', params);\r\n \r\n //hide must be after trigger, as saving value may require methods of plugin, applied to input\r\n this.hide('save');\r\n },\r\n\r\n /**\r\n Sets new option\r\n \r\n @method option(key, value)\r\n @param {string} key \r\n @param {mixed} value \r\n **/ \r\n option: function(key, value) {\r\n this.options[key] = value;\r\n if(key in this.containerOptions) {\r\n this.containerOptions[key] = value;\r\n this.setContainerOption(key, value); \r\n } else {\r\n this.formOptions[key] = value;\r\n if(this.$form) {\r\n this.$form.editableform('option', key, value); \r\n }\r\n }\r\n },\r\n \r\n setContainerOption: function(key, value) {\r\n this.call('option', key, value);\r\n },\r\n\r\n /**\r\n Destroys the container instance\r\n @method destroy()\r\n **/ \r\n destroy: function() {\r\n this.hide();\r\n this.innerDestroy();\r\n this.$element.off('destroyed');\r\n this.$element.removeData('editableContainer');\r\n },\r\n \r\n /* to be overwritten in child classes */\r\n innerDestroy: function() {\r\n \r\n }, \r\n \r\n /*\r\n Closes other containers except one related to passed element. \r\n Other containers can be cancelled or submitted (depends on onblur option)\r\n */\r\n closeOthers: function(element) {\r\n $('.editable-open').each(function(i, el){\r\n //do nothing with passed element and it's children\r\n if(el === element || $(el).find(element).length) {\r\n return;\r\n }\r\n\r\n //otherwise cancel or submit all open containers \r\n var $el = $(el),\r\n ec = $el.data('editableContainer');\r\n\r\n if(!ec) {\r\n return; \r\n }\r\n \r\n if(ec.options.onblur === 'cancel') {\r\n $el.data('editableContainer').hide('onblur');\r\n } else if(ec.options.onblur === 'submit') {\r\n $el.data('editableContainer').tip().find('form').submit();\r\n }\r\n });\r\n\r\n },\r\n \r\n /**\r\n Activates input of visible container (e.g. set focus)\r\n @method activate()\r\n **/ \r\n activate: function() {\r\n if(this.tip && this.tip().is(':visible') && this.$form) {\r\n this.$form.data('editableform').input.activate(); \r\n }\r\n } \r\n\r\n };\r\n\r\n /**\r\n jQuery method to initialize editableContainer.\r\n \r\n @method $().editableContainer(options)\r\n @params {Object} options\r\n @example\r\n $('#edit').editableContainer({\r\n type: 'text',\r\n url: '/post',\r\n pk: 1,\r\n value: 'hello'\r\n });\r\n **/ \r\n $.fn.editableContainer = function (option) {\r\n var args = arguments;\r\n return this.each(function () {\r\n var $this = $(this),\r\n dataKey = 'editableContainer', \r\n data = $this.data(dataKey),\r\n options = typeof option === 'object' && option,\r\n Constructor = (options.mode === 'inline') ? Inline : Popup; \r\n\r\n if (!data) {\r\n $this.data(dataKey, (data = new Constructor(this, options)));\r\n }\r\n\r\n if (typeof option === 'string') { //call method \r\n data[option].apply(data, Array.prototype.slice.call(args, 1));\r\n } \r\n });\r\n }; \r\n\r\n //store constructors\r\n $.fn.editableContainer.Popup = Popup;\r\n $.fn.editableContainer.Inline = Inline;\r\n\r\n //defaults\r\n $.fn.editableContainer.defaults = {\r\n /**\r\n Initial value of form input\r\n\r\n @property value \r\n @type mixed\r\n @default null\r\n @private\r\n **/ \r\n value: null,\r\n /**\r\n Placement of container relative to element. Can be <code>top|right|bottom|left</code>. Not used for inline container.\r\n\r\n @property placement \r\n @type string\r\n @default 'top'\r\n **/ \r\n placement: 'top',\r\n /**\r\n Whether to hide container on save/cancel.\r\n\r\n @property autohide \r\n @type boolean\r\n @default true\r\n @private \r\n **/ \r\n autohide: true,\r\n /**\r\n Action when user clicks outside the container. Can be <code>cancel|submit|ignore</code>. \r\n Setting <code>ignore</code> allows to have several containers open. \r\n\r\n @property onblur \r\n @type string\r\n @default 'cancel'\r\n @since 1.1.1\r\n **/ \r\n onblur: 'cancel',\r\n \r\n /**\r\n Animation speed (inline mode only)\r\n @property anim \r\n @type string\r\n @default false\r\n **/ \r\n anim: false,\r\n \r\n /**\r\n Mode of editable, can be `popup` or `inline` \r\n \r\n @property mode \r\n @type string \r\n @default 'popup'\r\n @since 1.4.0 \r\n **/ \r\n mode: 'popup' \r\n };\r\n\r\n /* \r\n * workaround to have 'destroyed' event to destroy popover when element is destroyed\r\n * see http://stackoverflow.com/questions/2200494/jquery-trigger-event-when-an-element-is-removed-from-the-dom\r\n */\r\n jQuery.event.special.destroyed = {\r\n remove: function(o) {\r\n if (o.handler) {\r\n o.handler();\r\n }\r\n }\r\n }; \r\n\r\n}(window.jQuery));\r\n\r\n/**\r\n* Editable Inline \r\n* ---------------------\r\n*/\r\n(function ($) {\r\n \"use strict\";\r\n \r\n //copy prototype from EditableContainer\r\n //extend methods\r\n $.extend($.fn.editableContainer.Inline.prototype, $.fn.editableContainer.Popup.prototype, {\r\n containerName: 'editableform',\r\n innerCss: '.editable-inline',\r\n containerClass: 'editable-container editable-inline', //css class applied to container element\r\n \r\n initContainer: function(){\r\n //container is <span> element\r\n this.$tip = $('<span></span>');\r\n \r\n //convert anim to miliseconds (int)\r\n if(!this.options.anim) {\r\n this.options.anim = 0;\r\n } \r\n },\r\n \r\n splitOptions: function() {\r\n //all options are passed to form\r\n this.containerOptions = {};\r\n this.formOptions = this.options;\r\n },\r\n \r\n tip: function() {\r\n return this.$tip; \r\n },\r\n \r\n innerShow: function () {\r\n this.$element.hide();\r\n this.tip().insertAfter(this.$element).show();\r\n }, \r\n \r\n innerHide: function () {\r\n this.$tip.hide(this.options.anim, $.proxy(function() {\r\n this.$element.show();\r\n this.innerDestroy();\r\n }, this)); \r\n },\r\n \r\n innerDestroy: function() {\r\n if(this.tip()) {\r\n this.tip().empty().remove();\r\n }\r\n } \r\n });\r\n\r\n}(window.jQuery));\r\n/**\r\nMakes editable any HTML element on the page. Applied as jQuery method.\r\n\r\n@class editable\r\n@uses editableContainer\r\n**/\r\n(function ($) {\r\n \"use strict\";\r\n\r\n var Editable = function (element, options) {\r\n this.$element = $(element);\r\n //data-* has more priority over js options: because dynamically created elements may change data-* \r\n this.options = $.extend({}, $.fn.editable.defaults, options, $.fn.editableutils.getConfigData(this.$element)); \r\n if(this.options.selector) {\r\n this.initLive();\r\n } else {\r\n this.init();\r\n }\r\n \r\n //check for transition support\r\n if(this.options.highlight && !$.fn.editableutils.supportsTransitions()) {\r\n this.options.highlight = false;\r\n }\r\n };\r\n\r\n Editable.prototype = {\r\n constructor: Editable, \r\n init: function () {\r\n var isValueByText = false, \r\n doAutotext, finalize;\r\n\r\n //name\r\n this.options.name = this.options.name || this.$element.attr('id');\r\n \r\n //create input of specified type. Input needed already here to convert value for initial display (e.g. show text by id for select)\r\n //also we set scope option to have access to element inside input specific callbacks (e. g. source as function)\r\n this.options.scope = this.$element[0]; \r\n this.input = $.fn.editableutils.createInput(this.options);\r\n if(!this.input) {\r\n return; \r\n } \r\n\r\n //set value from settings or by element's text\r\n if (this.options.value === undefined || this.options.value === null) {\r\n this.value = this.input.html2value($.trim(this.$element.html()));\r\n isValueByText = true;\r\n } else {\r\n /*\r\n value can be string when received from 'data-value' attribute\r\n for complext objects value can be set as json string in data-value attribute, \r\n e.g. data-value=\"{city: 'Moscow', street: 'Lenina'}\"\r\n */\r\n this.options.value = $.fn.editableutils.tryParseJson(this.options.value, true); \r\n if(typeof this.options.value === 'string') {\r\n this.value = this.input.str2value(this.options.value);\r\n } else {\r\n this.value = this.options.value;\r\n }\r\n }\r\n \r\n //add 'editable' class to every editable element\r\n this.$element.addClass('editable');\r\n \r\n //specifically for \"textarea\" add class .editable-pre-wrapped to keep linebreaks\r\n if(this.input.type === 'textarea') {\r\n this.$element.addClass('editable-pre-wrapped');\r\n }\r\n \r\n //attach handler activating editable. In disabled mode it just prevent default action (useful for links)\r\n if(this.options.toggle !== 'manual') {\r\n this.$element.addClass('editable-click');\r\n this.$element.on(this.options.toggle + '.editable', $.proxy(function(e){\r\n //prevent following link if editable enabled\r\n if(!this.options.disabled) {\r\n e.preventDefault();\r\n }\r\n \r\n //stop propagation not required because in document click handler it checks event target\r\n //e.stopPropagation();\r\n \r\n if(this.options.toggle === 'mouseenter') {\r\n //for hover only show container\r\n this.show();\r\n } else {\r\n //when toggle='click' we should not close all other containers as they will be closed automatically in document click listener\r\n var closeAll = (this.options.toggle !== 'click');\r\n this.toggle(closeAll);\r\n }\r\n }, this));\r\n } else {\r\n this.$element.attr('tabindex', -1); //do not stop focus on element when toggled manually\r\n }\r\n \r\n //if display is function it's far more convinient to have autotext = always to render correctly on init\r\n //see https://github.com/vitalets/x-editable-yii/issues/34\r\n if(typeof this.options.display === 'function') {\r\n this.options.autotext = 'always';\r\n }\r\n \r\n //check conditions for autotext:\r\n switch(this.options.autotext) {\r\n case 'always':\r\n doAutotext = true;\r\n break;\r\n case 'auto':\r\n //if element text is empty and value is defined and value not generated by text --> run autotext\r\n doAutotext = !$.trim(this.$element.text()).length && this.value !== null && this.value !== undefined && !isValueByText;\r\n break;\r\n default:\r\n doAutotext = false;\r\n }\r\n\r\n //depending on autotext run render() or just finilize init\r\n $.when(doAutotext ? this.render() : true).then($.proxy(function() {\r\n if(this.options.disabled) {\r\n this.disable();\r\n } else {\r\n this.enable(); \r\n }\r\n /** \r\n Fired when element was initialized by `$().editable()` method. \r\n Please note that you should setup `init` handler **before** applying `editable`. \r\n \r\n @event init \r\n @param {Object} event event object\r\n @param {Object} editable editable instance (as here it cannot accessed via data('editable'))\r\n @since 1.2.0\r\n @example\r\n $('#username').on('init', function(e, editable) {\r\n alert('initialized ' + editable.options.name);\r\n });\r\n $('#username').editable();\r\n **/ \r\n this.$element.triggerHandler('init', this);\r\n }, this));\r\n },\r\n\r\n /*\r\n Initializes parent element for live editables \r\n */\r\n initLive: function() {\r\n //store selector \r\n var selector = this.options.selector;\r\n //modify options for child elements\r\n this.options.selector = false; \r\n this.options.autotext = 'never';\r\n //listen toggle events\r\n this.$element.on(this.options.toggle + '.editable', selector, $.proxy(function(e){\r\n var $target = $(e.target);\r\n if(!$target.data('editable')) {\r\n //if delegated element initially empty, we need to clear it's text (that was manually set to `empty` by user)\r\n //see https://github.com/vitalets/x-editable/issues/137 \r\n if($target.hasClass(this.options.emptyclass)) {\r\n $target.empty();\r\n }\r\n $target.editable(this.options).trigger(e);\r\n }\r\n }, this)); \r\n },\r\n \r\n /*\r\n Renders value into element's text.\r\n Can call custom display method from options.\r\n Can return deferred object.\r\n @method render()\r\n @param {mixed} response server response (if exist) to pass into display function\r\n */ \r\n render: function(response) {\r\n //do not display anything\r\n if(this.options.display === false) {\r\n return;\r\n }\r\n \r\n //if input has `value2htmlFinal` method, we pass callback in third param to be called when source is loaded\r\n if(this.input.value2htmlFinal) {\r\n return this.input.value2html(this.value, this.$element[0], this.options.display, response); \r\n //if display method defined --> use it \r\n } else if(typeof this.options.display === 'function') {\r\n return this.options.display.call(this.$element[0], this.value, response);\r\n //else use input's original value2html() method \r\n } else {\r\n return this.input.value2html(this.value, this.$element[0]); \r\n }\r\n },\r\n \r\n /**\r\n Enables editable\r\n @method enable()\r\n **/ \r\n enable: function() {\r\n this.options.disabled = false;\r\n this.$element.removeClass('editable-disabled');\r\n this.handleEmpty(this.isEmpty);\r\n if(this.options.toggle !== 'manual') {\r\n if(this.$element.attr('tabindex') === '-1') { \r\n this.$element.removeAttr('tabindex'); \r\n }\r\n }\r\n },\r\n \r\n /**\r\n Disables editable\r\n @method disable()\r\n **/ \r\n disable: function() {\r\n this.options.disabled = true; \r\n this.hide(); \r\n this.$element.addClass('editable-disabled');\r\n this.handleEmpty(this.isEmpty);\r\n //do not stop focus on this element\r\n this.$element.attr('tabindex', -1); \r\n },\r\n \r\n /**\r\n Toggles enabled / disabled state of editable element\r\n @method toggleDisabled()\r\n **/ \r\n toggleDisabled: function() {\r\n if(this.options.disabled) {\r\n this.enable();\r\n } else { \r\n this.disable(); \r\n }\r\n }, \r\n \r\n /**\r\n Sets new option\r\n \r\n @method option(key, value)\r\n @param {string|object} key option name or object with several options\r\n @param {mixed} value option new value\r\n @example\r\n $('.editable').editable('option', 'pk', 2);\r\n **/ \r\n option: function(key, value) {\r\n //set option(s) by object\r\n if(key && typeof key === 'object') {\r\n $.each(key, $.proxy(function(k, v){\r\n this.option($.trim(k), v); \r\n }, this)); \r\n return;\r\n }\r\n\r\n //set option by string \r\n this.options[key] = value; \r\n \r\n //disabled\r\n if(key === 'disabled') {\r\n return value ? this.disable() : this.enable();\r\n } \r\n \r\n //value\r\n if(key === 'value') {\r\n this.setValue(value);\r\n }\r\n \r\n //transfer new option to container! \r\n if(this.container) {\r\n this.container.option(key, value); \r\n }\r\n \r\n //pass option to input directly (as it points to the same in form)\r\n if(this.input.option) {\r\n this.input.option(key, value);\r\n }\r\n \r\n }, \r\n \r\n /*\r\n * set emptytext if element is empty\r\n */\r\n handleEmpty: function (isEmpty) {\r\n //do not handle empty if we do not display anything\r\n if(this.options.display === false) {\r\n return;\r\n }\r\n\r\n /* \r\n isEmpty may be set directly as param of method.\r\n It is required when we enable/disable field and can't rely on content \r\n as node content is text: \"Empty\" that is not empty %)\r\n */\r\n if(isEmpty !== undefined) { \r\n this.isEmpty = isEmpty;\r\n } else {\r\n //detect empty\r\n //for some inputs we need more smart check\r\n //e.g. wysihtml5 may have <br>, <p></p>, <img>\r\n if(typeof(this.input.isEmpty) === 'function') {\r\n this.isEmpty = this.input.isEmpty(this.$element); \r\n } else {\r\n this.isEmpty = $.trim(this.$element.html()) === '';\r\n }\r\n } \r\n \r\n //emptytext shown only for enabled\r\n if(!this.options.disabled) {\r\n if (this.isEmpty) {\r\n this.$element.html(this.options.emptytext);\r\n if(this.options.emptyclass) {\r\n this.$element.addClass(this.options.emptyclass);\r\n }\r\n } else if(this.options.emptyclass) {\r\n this.$element.removeClass(this.options.emptyclass);\r\n }\r\n } else {\r\n //below required if element disable property was changed\r\n if(this.isEmpty) {\r\n this.$element.empty();\r\n if(this.options.emptyclass) {\r\n this.$element.removeClass(this.options.emptyclass);\r\n }\r\n }\r\n }\r\n }, \r\n \r\n /**\r\n Shows container with form\r\n @method show()\r\n @param {boolean} closeAll Whether to close all other editable containers when showing this one. Default true.\r\n **/ \r\n show: function (closeAll) {\r\n if(this.options.disabled) {\r\n return;\r\n }\r\n \r\n //init editableContainer: popover, tooltip, inline, etc..\r\n if(!this.container) {\r\n var containerOptions = $.extend({}, this.options, {\r\n value: this.value,\r\n input: this.input //pass input to form (as it is already created)\r\n });\r\n this.$element.editableContainer(containerOptions);\r\n //listen `save` event \r\n this.$element.on(\"save.internal\", $.proxy(this.save, this));\r\n this.container = this.$element.data('editableContainer'); \r\n } else if(this.container.tip().is(':visible')) {\r\n return;\r\n } \r\n \r\n //show container\r\n this.container.show(closeAll);\r\n },\r\n \r\n /**\r\n Hides container with form\r\n @method hide()\r\n **/ \r\n hide: function () { \r\n if(this.container) { \r\n this.container.hide();\r\n }\r\n },\r\n \r\n /**\r\n Toggles container visibility (show / hide)\r\n @method toggle()\r\n @param {boolean} closeAll Whether to close all other editable containers when showing this one. Default true.\r\n **/ \r\n toggle: function(closeAll) {\r\n if(this.container && this.container.tip().is(':visible')) {\r\n this.hide();\r\n } else {\r\n this.show(closeAll);\r\n }\r\n },\r\n \r\n /*\r\n * called when form was submitted\r\n */ \r\n save: function(e, params) {\r\n //mark element with unsaved class if needed\r\n if(this.options.unsavedclass) {\r\n /*\r\n Add unsaved css to element if:\r\n - url is not user's function \r\n - value was not sent to server\r\n - params.response === undefined, that means data was not sent\r\n - value changed \r\n */\r\n var sent = false;\r\n sent = sent || typeof this.options.url === 'function';\r\n sent = sent || this.options.display === false; \r\n sent = sent || params.response !== undefined; \r\n sent = sent || (this.options.savenochange && this.input.value2str(this.value) !== this.input.value2str(params.newValue)); \r\n \r\n if(sent) {\r\n this.$element.removeClass(this.options.unsavedclass); \r\n } else {\r\n this.$element.addClass(this.options.unsavedclass); \r\n }\r\n }\r\n \r\n //highlight when saving\r\n if(this.options.highlight) {\r\n var $e = this.$element,\r\n bgColor = $e.css('background-color');\r\n \r\n $e.css('background-color', this.options.highlight);\r\n setTimeout(function(){\r\n if(bgColor === 'transparent') {\r\n bgColor = ''; \r\n }\r\n $e.css('background-color', bgColor);\r\n $e.addClass('editable-bg-transition');\r\n setTimeout(function(){\r\n $e.removeClass('editable-bg-transition'); \r\n }, 1700);\r\n }, 10);\r\n }\r\n \r\n //set new value\r\n this.setValue(params.newValue, false, params.response);\r\n \r\n /** \r\n Fired when new value was submitted. You can use <code>$(this).data('editable')</code> to access to editable instance\r\n \r\n @event save \r\n @param {Object} event event object\r\n @param {Object} params additional params\r\n @param {mixed} params.newValue submitted value\r\n @param {Object} params.response ajax response\r\n @example\r\n $('#username').on('save', function(e, params) {\r\n alert('Saved value: ' + params.newValue);\r\n });\r\n **/\r\n //event itself is triggered by editableContainer. Description here is only for documentation \r\n },\r\n\r\n validate: function () {\r\n if (typeof this.options.validate === 'function') {\r\n return this.options.validate.call(this, this.value);\r\n }\r\n },\r\n \r\n /**\r\n Sets new value of editable\r\n @method setValue(value, convertStr)\r\n @param {mixed} value new value \r\n @param {boolean} convertStr whether to convert value from string to internal format\r\n **/ \r\n setValue: function(value, convertStr, response) {\r\n if(convertStr) {\r\n this.value = this.input.str2value(value);\r\n } else {\r\n this.value = value;\r\n }\r\n if(this.container) {\r\n this.container.option('value', this.value);\r\n }\r\n $.when(this.render(response))\r\n .then($.proxy(function() {\r\n this.handleEmpty();\r\n }, this));\r\n },\r\n \r\n /**\r\n Activates input of visible container (e.g. set focus)\r\n @method activate()\r\n **/ \r\n activate: function() {\r\n if(this.container) {\r\n this.container.activate(); \r\n }\r\n },\r\n \r\n /**\r\n Removes editable feature from element\r\n @method destroy()\r\n **/ \r\n destroy: function() {\r\n this.disable();\r\n \r\n if(this.container) {\r\n this.container.destroy(); \r\n }\r\n \r\n this.input.destroy();\r\n\r\n if(this.options.toggle !== 'manual') {\r\n this.$element.removeClass('editable-click');\r\n this.$element.off(this.options.toggle + '.editable');\r\n } \r\n \r\n this.$element.off(\"save.internal\");\r\n \r\n this.$element.removeClass('editable editable-open editable-disabled');\r\n this.$element.removeData('editable');\r\n } \r\n };\r\n\r\n /* EDITABLE PLUGIN DEFINITION\r\n * ======================= */\r\n\r\n /**\r\n jQuery method to initialize editable element.\r\n \r\n @method $().editable(options)\r\n @params {Object} options\r\n @example\r\n $('#username').editable({\r\n type: 'text',\r\n url: '/post',\r\n pk: 1\r\n });\r\n **/\r\n $.fn.editable = function (option) {\r\n //special API methods returning non-jquery object\r\n var result = {}, args = arguments, datakey = 'editable';\r\n switch (option) {\r\n /**\r\n Runs client-side validation for all matched editables\r\n \r\n @method validate()\r\n @returns {Object} validation errors map\r\n @example\r\n $('#username, #fullname').editable('validate');\r\n // possible result:\r\n {\r\n username: \"username is required\",\r\n fullname: \"fullname should be minimum 3 letters length\"\r\n }\r\n **/\r\n case 'validate':\r\n this.each(function () {\r\n var $this = $(this), data = $this.data(datakey), error;\r\n if (data && (error = data.validate())) {\r\n result[data.options.name] = error;\r\n }\r\n });\r\n return result;\r\n\r\n /**\r\n Returns current values of editable elements. \r\n Note that it returns an **object** with name-value pairs, not a value itself. It allows to get data from several elements. \r\n If value of some editable is `null` or `undefined` it is excluded from result object.\r\n When param `isSingle` is set to **true** - it is supposed you have single element and will return value of editable instead of object. \r\n \r\n @method getValue()\r\n @param {bool} isSingle whether to return just value of single element\r\n @returns {Object} object of element names and values\r\n @example\r\n $('#username, #fullname').editable('getValue');\r\n //result:\r\n {\r\n username: \"superuser\",\r\n fullname: \"John\"\r\n }\r\n //isSingle = true\r\n $('#username').editable('getValue', true);\r\n //result \"superuser\" \r\n **/\r\n case 'getValue':\r\n if(arguments.length === 2 && arguments[1] === true) { //isSingle = true\r\n result = this.eq(0).data(datakey).value;\r\n } else {\r\n this.each(function () {\r\n var $this = $(this), data = $this.data(datakey);\r\n if (data && data.value !== undefined && data.value !== null) {\r\n result[data.options.name] = data.input.value2submit(data.value);\r\n }\r\n });\r\n }\r\n return result;\r\n\r\n /**\r\n This method collects values from several editable elements and submit them all to server. \r\n Internally it runs client-side validation for all fields and submits only in case of success. \r\n See <a href=\"#newrecord\">creating new records</a> for details. \r\n Since 1.5.1 `submit` can be applied to single element to send data programmatically. In that case\r\n `url`, `success` and `error` is taken from initial options and you can just call `$('#username').editable('submit')`. \r\n \r\n @method submit(options)\r\n @param {object} options \r\n @param {object} options.url url to submit data \r\n @param {object} options.data additional data to submit\r\n @param {object} options.ajaxOptions additional ajax options\r\n @param {function} options.error(obj) error handler \r\n @param {function} options.success(obj,config) success handler\r\n @returns {Object} jQuery object\r\n **/\r\n case 'submit': //collects value, validate and submit to server for creating new record\r\n var config = arguments[1] || {},\r\n $elems = this,\r\n errors = this.editable('validate');\r\n\r\n // validation ok\r\n if($.isEmptyObject(errors)) {\r\n var ajaxOptions = {};\r\n \r\n // for single element use url, success etc from options\r\n if($elems.length === 1) {\r\n var editable = $elems.data('editable');\r\n //standard params\r\n var params = {\r\n name: editable.options.name || '',\r\n value: editable.input.value2submit(editable.value),\r\n pk: (typeof editable.options.pk === 'function') ? \r\n editable.options.pk.call(editable.options.scope) : \r\n editable.options.pk \r\n };\r\n\r\n //additional params\r\n if(typeof editable.options.params === 'function') {\r\n params = editable.options.params.call(editable.options.scope, params); \r\n } else {\r\n //try parse json in single quotes (from data-params attribute)\r\n editable.options.params = $.fn.editableutils.tryParseJson(editable.options.params, true); \r\n $.extend(params, editable.options.params);\r\n }\r\n\r\n ajaxOptions = {\r\n url: editable.options.url,\r\n data: params,\r\n type: 'POST' \r\n };\r\n \r\n // use success / error from options \r\n config.success = config.success || editable.options.success;\r\n config.error = config.error || editable.options.error;\r\n \r\n // multiple elements\r\n } else {\r\n var values = this.editable('getValue'); \r\n \r\n ajaxOptions = {\r\n url: config.url,\r\n data: values, \r\n type: 'POST'\r\n }; \r\n } \r\n\r\n // ajax success callabck (response 200 OK)\r\n ajaxOptions.success = typeof config.success === 'function' ? function(response) {\r\n config.success.call($elems, response, config);\r\n } : $.noop;\r\n \r\n // ajax error callabck\r\n ajaxOptions.error = typeof config.error === 'function' ? function() {\r\n config.error.apply($elems, arguments);\r\n } : $.noop;\r\n \r\n // extend ajaxOptions \r\n if(config.ajaxOptions) { \r\n $.extend(ajaxOptions, config.ajaxOptions);\r\n }\r\n \r\n // extra data \r\n if(config.data) {\r\n $.extend(ajaxOptions.data, config.data);\r\n } \r\n \r\n // perform ajax request\r\n $.ajax(ajaxOptions);\r\n } else { //client-side validation error\r\n if(typeof config.error === 'function') {\r\n config.error.call($elems, errors);\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n //return jquery object\r\n return this.each(function () {\r\n var $this = $(this), \r\n data = $this.data(datakey), \r\n options = typeof option === 'object' && option;\r\n\r\n //for delegated targets do not store `editable` object for element\r\n //it's allows several different selectors.\r\n //see: https://github.com/vitalets/x-editable/issues/312 \r\n if(options && options.selector) {\r\n data = new Editable(this, options);\r\n return; \r\n } \r\n \r\n if (!data) {\r\n $this.data(datakey, (data = new Editable(this, options)));\r\n }\r\n\r\n if (typeof option === 'string') { //call method \r\n data[option].apply(data, Array.prototype.slice.call(args, 1));\r\n } \r\n });\r\n }; \r\n \r\n\r\n $.fn.editable.defaults = {\r\n /**\r\n Type of input. Can be <code>text|textarea|select|date|checklist</code> and more\r\n\r\n @property type \r\n @type string\r\n @default 'text'\r\n **/\r\n type: 'text', \r\n /**\r\n Sets disabled state of editable\r\n\r\n @property disabled \r\n @type boolean\r\n @default false\r\n **/ \r\n disabled: false,\r\n /**\r\n How to toggle editable. Can be <code>click|dblclick|mouseenter|manual</code>. \r\n When set to <code>manual</code> you should manually call <code>show/hide</code> methods of editable. \r\n **Note**: if you call <code>show</code> or <code>toggle</code> inside **click** handler of some DOM element, \r\n you need to apply <code>e.stopPropagation()</code> because containers are being closed on any click on document.\r\n \r\n @example\r\n $('#edit-button').click(function(e) {\r\n e.stopPropagation();\r\n $('#username').editable('toggle');\r\n });\r\n\r\n @property toggle \r\n @type string\r\n @default 'click'\r\n **/ \r\n toggle: 'click',\r\n /**\r\n Text shown when element is empty.\r\n\r\n @property emptytext \r\n @type string\r\n @default 'Empty'\r\n **/ \r\n emptytext: 'Empty',\r\n /**\r\n Allows to automatically set element's text based on it's value. Can be <code>auto|always|never</code>. Useful for select and date.\r\n For example, if dropdown list is <code>{1: 'a', 2: 'b'}</code> and element's value set to <code>1</code>, it's html will be automatically set to <code>'a'</code>. \r\n <code>auto</code> - text will be automatically set only if element is empty. \r\n <code>always|never</code> - always(never) try to set element's text.\r\n\r\n @property autotext \r\n @type string\r\n @default 'auto'\r\n **/ \r\n autotext: 'auto', \r\n /**\r\n Initial value of input. If not set, taken from element's text. \r\n Note, that if element's text is empty - text is automatically generated from value and can be customized (see `autotext` option). \r\n For example, to display currency sign:\r\n @example\r\n <a id=\"price\" data-type=\"text\" data-value=\"100\"></a>\r\n <script>\r\n $('#price').editable({\r\n ...\r\n display: function(value) {\r\n $(this).text(value + '$');\r\n } \r\n }) \r\n </script>\r\n \r\n @property value \r\n @type mixed\r\n @default element's text\r\n **/\r\n value: null,\r\n /**\r\n Callback to perform custom displaying of value in element's text. \r\n If `null`, default input's display used. \r\n If `false`, no displaying methods will be called, element's text will never change. \r\n Runs under element's scope. \r\n _**Parameters:**_ \r\n \r\n * `value` current value to be displayed\r\n * `response` server response (if display called after ajax submit), since 1.4.0\r\n \r\n For _inputs with source_ (select, checklist) parameters are different: \r\n \r\n * `value` current value to be displayed\r\n * `sourceData` array of items for current input (e.g. dropdown items) \r\n * `response` server response (if display called after ajax submit), since 1.4.0\r\n \r\n To get currently selected items use `$.fn.editableutils.itemsByValue(value, sourceData)`.\r\n \r\n @property display \r\n @type function|boolean\r\n @default null\r\n @since 1.2.0\r\n @example\r\n display: function(value, sourceData) {\r\n //display checklist as comma-separated values\r\n var html = [],\r\n checked = $.fn.editableutils.itemsByValue(value, sourceData);\r\n \r\n if(checked.length) {\r\n $.each(checked, function(i, v) { html.push($.fn.editableutils.escape(v.text)); });\r\n $(this).html(html.join(', '));\r\n } else {\r\n $(this).empty(); \r\n }\r\n }\r\n **/ \r\n display: null,\r\n /**\r\n Css class applied when editable text is empty.\r\n\r\n @property emptyclass \r\n @type string\r\n @since 1.4.1 \r\n @default editable-empty\r\n **/ \r\n emptyclass: 'editable-empty',\r\n /**\r\n Css class applied when value was stored but not sent to server (`pk` is empty or `send = 'never'`). \r\n You may set it to `null` if you work with editables locally and submit them together. \r\n\r\n @property unsavedclass \r\n @type string\r\n @since 1.4.1 \r\n @default editable-unsaved\r\n **/ \r\n unsavedclass: 'editable-unsaved',\r\n /**\r\n If selector is provided, editable will be delegated to the specified targets. \r\n Usefull for dynamically generated DOM elements. \r\n **Please note**, that delegated targets can't be initialized with `emptytext` and `autotext` options, \r\n as they actually become editable only after first click. \r\n You should manually set class `editable-click` to these elements. \r\n Also, if element originally empty you should add class `editable-empty`, set `data-value=\"\"` and write emptytext into element:\r\n\r\n @property selector \r\n @type string\r\n @since 1.4.1 \r\n @default null\r\n @example\r\n <div id=\"user\">\r\n <!-- empty -->\r\n <a href=\"#\" data-name=\"username\" data-type=\"text\" class=\"editable-click editable-empty\" data-value=\"\" title=\"Username\">Empty</a>\r\n <!-- non-empty -->\r\n <a href=\"#\" data-name=\"group\" data-type=\"select\" data-source=\"/groups\" data-value=\"1\" class=\"editable-click\" title=\"Group\">Operator</a>\r\n </div> \r\n \r\n <script>\r\n $('#user').editable({\r\n selector: 'a',\r\n url: '/post',\r\n pk: 1\r\n });\r\n </script>\r\n **/ \r\n selector: null,\r\n /**\r\n Color used to highlight element after update. Implemented via CSS3 transition, works in modern browsers.\r\n \r\n @property highlight \r\n @type string|boolean\r\n @since 1.4.5 \r\n @default #FFFF80 \r\n **/\r\n highlight: '#FFFF80'\r\n };\r\n \r\n}(window.jQuery));\r\n\r\n/**\r\nAbstractInput - base class for all editable inputs.\r\nIt defines interface to be implemented by any input type.\r\nTo create your own input you can inherit from this class.\r\n\r\n@class abstractinput\r\n**/\r\n(function ($) {\r\n \"use strict\";\r\n\r\n //types\r\n $.fn.editabletypes = {};\r\n\r\n var AbstractInput = function () { };\r\n\r\n AbstractInput.prototype = {\r\n /**\r\n Initializes input\r\n\r\n @method init() \r\n **/\r\n init: function(type, options, defaults) {\r\n this.type = type;\r\n this.options = $.extend({}, defaults, options);\r\n },\r\n\r\n /*\r\n this method called before render to init $tpl that is inserted in DOM\r\n */\r\n prerender: function() {\r\n this.$tpl = $(this.options.tpl); //whole tpl as jquery object \r\n this.$input = this.$tpl; //control itself, can be changed in render method\r\n this.$clear = null; //clear button\r\n this.error = null; //error message, if input cannot be rendered \r\n },\r\n \r\n /**\r\n Renders input from tpl. Can return jQuery deferred object.\r\n Can be overwritten in child objects\r\n\r\n @method render()\r\n **/\r\n render: function() {\r\n\r\n }, \r\n\r\n /**\r\n Sets element's html by value. \r\n\r\n @method value2html(value, element)\r\n @param {mixed} value\r\n @param {DOMElement} element\r\n **/\r\n value2html: function(value, element) {\r\n $(element)[this.options.escape ? 'text' : 'html']($.trim(value));\r\n },\r\n\r\n /**\r\n Converts element's html to value\r\n\r\n @method html2value(html)\r\n @param {string} html\r\n @returns {mixed}\r\n **/\r\n html2value: function(html) {\r\n return $('<div>').html(html).text();\r\n },\r\n\r\n /**\r\n Converts value to string (for internal compare). For submitting to server used value2submit().\r\n\r\n @method value2str(value) \r\n @param {mixed} value\r\n @returns {string}\r\n **/\r\n value2str: function(value) {\r\n return value;\r\n }, \r\n\r\n /**\r\n Converts string received from server into value. Usually from `data-value` attribute.\r\n\r\n @method str2value(str)\r\n @param {string} str\r\n @returns {mixed}\r\n **/\r\n str2value: function(str) {\r\n return str;\r\n }, \r\n \r\n /**\r\n Converts value for submitting to server. Result can be string or object.\r\n\r\n @method value2submit(value) \r\n @param {mixed} value\r\n @returns {mixed}\r\n **/\r\n value2submit: function(value) {\r\n return value;\r\n },\r\n\r\n /**\r\n Sets value of input.\r\n\r\n @method value2input(value) \r\n @param {mixed} value\r\n **/\r\n value2input: function(value) {\r\n this.$input.val(value);\r\n },\r\n\r\n /**\r\n Returns value of input. Value can be object (e.g. datepicker)\r\n\r\n @method input2value() \r\n **/\r\n input2value: function() { \r\n return this.$input.val();\r\n }, \r\n\r\n /**\r\n Activates input. For text it sets focus.\r\n\r\n @method activate() \r\n **/\r\n activate: function() {\r\n if(this.$input.is(':visible')) {\r\n this.$input.focus();\r\n }\r\n },\r\n\r\n /**\r\n Creates input.\r\n\r\n @method clear() \r\n **/ \r\n clear: function() {\r\n this.$input.val(null);\r\n },\r\n\r\n /**\r\n method to escape html.\r\n **/\r\n escape: function(str) {\r\n return $('<div>').text(str).html();\r\n },\r\n \r\n /**\r\n attach handler to automatically submit form when value changed (useful when buttons not shown)\r\n **/\r\n autosubmit: function() {\r\n \r\n },\r\n \r\n /**\r\n Additional actions when destroying element \r\n **/\r\n destroy: function() {\r\n },\r\n\r\n // -------- helper functions --------\r\n setClass: function() { \r\n if(this.options.inputclass) {\r\n this.$input.addClass(this.options.inputclass); \r\n } \r\n },\r\n\r\n setAttr: function(attr) {\r\n if (this.options[attr] !== undefined && this.options[attr] !== null) {\r\n this.$input.attr(attr, this.options[attr]);\r\n } \r\n },\r\n \r\n option: function(key, value) {\r\n this.options[key] = value;\r\n }\r\n \r\n };\r\n \r\n AbstractInput.defaults = { \r\n /**\r\n HTML template of input. Normally you should not change it.\r\n\r\n @property tpl \r\n @type string\r\n @default ''\r\n **/ \r\n tpl: '',\r\n /**\r\n CSS class automatically applied to input\r\n \r\n @property inputclass \r\n @type string\r\n @default null\r\n **/ \r\n inputclass: null,\r\n \r\n /**\r\n If `true` - html will be escaped in content of element via $.text() method. \r\n If `false` - html will not be escaped, $.html() used. \r\n When you use own `display` function, this option obviosly has no effect.\r\n \r\n @property escape \r\n @type boolean\r\n @since 1.5.0\r\n @default true\r\n **/ \r\n escape: true,\r\n \r\n //scope for external methods (e.g. source defined as function)\r\n //for internal use only\r\n scope: null,\r\n \r\n //need to re-declare showbuttons here to get it's value from common config (passed only options existing in defaults)\r\n showbuttons: true \r\n };\r\n \r\n $.extend($.fn.editabletypes, {abstractinput: AbstractInput});\r\n \r\n}(window.jQuery));\r\n\r\n/**\r\nList - abstract class for inputs that have source option loaded from js array or via ajax\r\n\r\n@class list\r\n@extends abstractinput\r\n**/\r\n(function ($) {\r\n \"use strict\";\r\n \r\n var List = function (options) {\r\n \r\n };\r\n\r\n $.fn.editableutils.inherit(List, $.fn.editabletypes.abstractinput);\r\n\r\n $.extend(List.prototype, {\r\n render: function () {\r\n var deferred = $.Deferred();\r\n\r\n this.error = null;\r\n this.onSourceReady(function () {\r\n this.renderList();\r\n deferred.resolve();\r\n }, function () {\r\n this.error = this.options.sourceError;\r\n deferred.resolve();\r\n });\r\n\r\n return deferred.promise();\r\n },\r\n\r\n html2value: function (html) {\r\n return null; //can't set value by text\r\n },\r\n \r\n value2html: function (value, element, display, response) {\r\n var deferred = $.Deferred(),\r\n success = function () {\r\n if(typeof display === 'function') {\r\n //custom display method\r\n display.call(element, value, this.sourceData, response); \r\n } else {\r\n this.value2htmlFinal(value, element);\r\n }\r\n deferred.resolve();\r\n };\r\n \r\n //for null value just call success without loading source\r\n if(value === null) {\r\n success.call(this); \r\n } else {\r\n this.onSourceReady(success, function () { deferred.resolve(); });\r\n }\r\n\r\n return deferred.promise();\r\n }, \r\n\r\n // ------------- additional functions ------------\r\n\r\n onSourceReady: function (success, error) {\r\n //run source if it function\r\n var source;\r\n if ($.isFunction(this.options.source)) {\r\n source = this.options.source.call(this.options.scope);\r\n this.sourceData = null;\r\n //note: if function returns the same source as URL - sourceData will be taken from cahce and no extra request performed\r\n } else {\r\n source = this.options.source;\r\n } \r\n \r\n //if allready loaded just call success\r\n if(this.options.sourceCache && $.isArray(this.sourceData)) {\r\n success.call(this);\r\n return; \r\n }\r\n\r\n //try parse json in single quotes (for double quotes jquery does automatically)\r\n try {\r\n source = $.fn.editableutils.tryParseJson(source, false);\r\n } catch (e) {\r\n error.call(this);\r\n return;\r\n }\r\n\r\n //loading from url\r\n if (typeof source === 'string') {\r\n //try to get sourceData from cache\r\n if(this.options.sourceCache) {\r\n var cacheID = source,\r\n cache;\r\n\r\n if (!$(document).data(cacheID)) {\r\n $(document).data(cacheID, {});\r\n }\r\n cache = $(document).data(cacheID);\r\n\r\n //check for cached data\r\n if (cache.loading === false && cache.sourceData) { //take source from cache\r\n this.sourceData = cache.sourceData;\r\n this.doPrepend();\r\n success.call(this);\r\n return;\r\n } else if (cache.loading === true) { //cache is loading, put callback in stack to be called later\r\n cache.callbacks.push($.proxy(function () {\r\n this.sourceData = cache.sourceData;\r\n this.doPrepend();\r\n success.call(this);\r\n }, this));\r\n\r\n //also collecting error callbacks\r\n cache.err_callbacks.push($.proxy(error, this));\r\n return;\r\n } else { //no cache yet, activate it\r\n cache.loading = true;\r\n cache.callbacks = [];\r\n cache.err_callbacks = [];\r\n }\r\n }\r\n \r\n //ajaxOptions for source. Can be overwritten bt options.sourceOptions\r\n var ajaxOptions = $.extend({\r\n url: source,\r\n type: 'get',\r\n cache: false,\r\n dataType: 'json',\r\n success: $.proxy(function (data) {\r\n if(cache) {\r\n cache.loading = false;\r\n }\r\n this.sourceData = this.makeArray(data);\r\n if($.isArray(this.sourceData)) {\r\n if(cache) {\r\n //store result in cache\r\n cache.sourceData = this.sourceData;\r\n //run success callbacks for other fields waiting for this source\r\n $.each(cache.callbacks, function () { this.call(); }); \r\n }\r\n this.doPrepend();\r\n success.call(this);\r\n } else {\r\n error.call(this);\r\n if(cache) {\r\n //run error callbacks for other fields waiting for this source\r\n $.each(cache.err_callbacks, function () { this.call(); }); \r\n }\r\n }\r\n }, this),\r\n error: $.proxy(function () {\r\n error.call(this);\r\n if(cache) {\r\n cache.loading = false;\r\n //run error callbacks for other fields\r\n $.each(cache.err_callbacks, function () { this.call(); }); \r\n }\r\n }, this)\r\n }, this.options.sourceOptions);\r\n \r\n //loading sourceData from server\r\n $.ajax(ajaxOptions);\r\n \r\n } else { //options as json/array\r\n this.sourceData = this.makeArray(source);\r\n \r\n if($.isArray(this.sourceData)) {\r\n this.doPrepend();\r\n success.call(this); \r\n } else {\r\n error.call(this);\r\n }\r\n }\r\n },\r\n\r\n doPrepend: function () {\r\n if(this.options.prepend === null || this.options.prepend === undefined) {\r\n return; \r\n }\r\n \r\n if(!$.isArray(this.prependData)) {\r\n //run prepend if it is function (once)\r\n if ($.isFunction(this.options.prepend)) {\r\n this.options.prepend = this.options.prepend.call(this.options.scope);\r\n }\r\n \r\n //try parse json in single quotes\r\n this.options.prepend = $.fn.editableutils.tryParseJson(this.options.prepend, true);\r\n \r\n //convert prepend from string to object\r\n if (typeof this.options.prepend === 'string') {\r\n this.options.prepend = {'': this.options.prepend};\r\n }\r\n \r\n this.prependData = this.makeArray(this.options.prepend);\r\n }\r\n\r\n if($.isArray(this.prependData) && $.isArray(this.sourceData)) {\r\n this.sourceData = this.prependData.concat(this.sourceData);\r\n }\r\n },\r\n\r\n /*\r\n renders input list\r\n */\r\n renderList: function() {\r\n // this method should be overwritten in child class\r\n },\r\n \r\n /*\r\n set element's html by value\r\n */\r\n value2htmlFinal: function(value, element) {\r\n // this method should be overwritten in child class\r\n }, \r\n\r\n /**\r\n * convert data to array suitable for sourceData, e.g. [{value: 1, text: 'abc'}, {...}]\r\n */\r\n makeArray: function(data) {\r\n var count, obj, result = [], item, iterateItem;\r\n if(!data || typeof data === 'string') {\r\n return null; \r\n }\r\n\r\n if($.isArray(data)) { //array\r\n /* \r\n function to iterate inside item of array if item is object.\r\n Caclulates count of keys in item and store in obj. \r\n */\r\n iterateItem = function (k, v) {\r\n obj = {value: k, text: v};\r\n if(count++ >= 2) {\r\n return false;// exit from `each` if item has more than one key.\r\n }\r\n };\r\n \r\n for(var i = 0; i < data.length; i++) {\r\n item = data[i]; \r\n if(typeof item === 'object') {\r\n count = 0; //count of keys inside item\r\n $.each(item, iterateItem);\r\n //case: [{val1: 'text1'}, {val2: 'text2} ...]\r\n if(count === 1) { \r\n result.push(obj); \r\n //case: [{value: 1, text: 'text1'}, {value: 2, text: 'text2'}, ...]\r\n } else if(count > 1) {\r\n //removed check of existance: item.hasOwnProperty('value') && item.hasOwnProperty('text')\r\n if(item.children) {\r\n item.children = this.makeArray(item.children); \r\n }\r\n result.push(item);\r\n }\r\n } else {\r\n //case: ['text1', 'text2' ...]\r\n result.push({value: item, text: item}); \r\n }\r\n }\r\n } else { //case: {val1: 'text1', val2: 'text2, ...}\r\n $.each(data, function (k, v) {\r\n result.push({value: k, text: v});\r\n }); \r\n }\r\n return result;\r\n },\r\n \r\n option: function(key, value) {\r\n this.options[key] = value;\r\n if(key === 'source') {\r\n this.sourceData = null;\r\n }\r\n if(key === 'prepend') {\r\n this.prependData = null;\r\n } \r\n } \r\n\r\n }); \r\n\r\n List.defaults = $.extend({}, $.fn.editabletypes.abstractinput.defaults, {\r\n /**\r\n Source data for list. \r\n If **array** - it should be in format: `[{value: 1, text: \"text1\"}, {value: 2, text: \"text2\"}, ...]` \r\n For compability, object format is also supported: `{\"1\": \"text1\", \"2\": \"text2\" ...}` but it does not guarantee elements order.\r\n \r\n If **string** - considered ajax url to load items. In that case results will be cached for fields with the same source and name. See also `sourceCache` option.\r\n \r\n If **function**, it should return data in format above (since 1.4.0).\r\n \r\n Since 1.4.1 key `children` supported to render OPTGROUP (for **select** input only). \r\n `[{text: \"group1\", children: [{value: 1, text: \"text1\"}, {value: 2, text: \"text2\"}]}, ...]` \r\n\r\n\t\t\r\n @property source \r\n @type string | array | object | function\r\n @default null\r\n **/ \r\n source: null, \r\n /**\r\n Data automatically prepended to the beginning of dropdown list.\r\n \r\n @property prepend \r\n @type string | array | object | function\r\n @default false\r\n **/ \r\n prepend: false,\r\n /**\r\n Error message when list cannot be loaded (e.g. ajax error)\r\n \r\n @property sourceError \r\n @type string\r\n @default Error when loading list\r\n **/ \r\n sourceError: 'Error when loading list',\r\n /**\r\n if <code>true</code> and source is **string url** - results will be cached for fields with the same source. \r\n Usefull for editable column in grid to prevent extra requests.\r\n \r\n @property sourceCache \r\n @type boolean\r\n @default true\r\n @since 1.2.0\r\n **/ \r\n sourceCache: true,\r\n /**\r\n Additional ajax options to be used in $.ajax() when loading list from server.\r\n Useful to send extra parameters (`data` key) or change request method (`type` key).\r\n \r\n @property sourceOptions \r\n @type object|function\r\n @default null\r\n @since 1.5.0\r\n **/ \r\n sourceOptions: null\r\n });\r\n\r\n $.fn.editabletypes.list = List; \r\n\r\n}(window.jQuery));\r\n\r\n/**\r\nText input\r\n\r\n@class text\r\n@extends abstractinput\r\n@final\r\n@example\r\n<a href=\"#\" id=\"username\" data-type=\"text\" data-pk=\"1\">awesome</a>\r\n<script>\r\n$(function(){\r\n $('#username').editable({\r\n url: '/post',\r\n title: 'Enter username'\r\n });\r\n});\r\n</script>\r\n**/\r\n(function ($) {\r\n \"use strict\";\r\n \r\n var Text = function (options) {\r\n this.init('text', options, Text.defaults);\r\n };\r\n\r\n $.fn.editableutils.inherit(Text, $.fn.editabletypes.abstractinput);\r\n\r\n $.extend(Text.prototype, {\r\n render: function() {\r\n this.renderClear();\r\n this.setClass();\r\n this.setAttr('placeholder');\r\n },\r\n \r\n activate: function() {\r\n if(this.$input.is(':visible')) {\r\n this.$input.focus();\r\n $.fn.editableutils.setCursorPosition(this.$input.get(0), this.$input.val().length);\r\n if(this.toggleClear) {\r\n this.toggleClear();\r\n }\r\n }\r\n },\r\n \r\n //render clear button\r\n renderClear: function() {\r\n if (this.options.clear) {\r\n this.$clear = $('<span class=\"editable-clear-x\"></span>');\r\n this.$input.after(this.$clear)\r\n .css('padding-right', 24)\r\n .keyup($.proxy(function(e) {\r\n //arrows, enter, tab, etc\r\n if(~$.inArray(e.keyCode, [40,38,9,13,27])) {\r\n return;\r\n } \r\n\r\n clearTimeout(this.t);\r\n var that = this;\r\n this.t = setTimeout(function() {\r\n that.toggleClear(e);\r\n }, 100);\r\n \r\n }, this))\r\n .parent().css('position', 'relative');\r\n \r\n this.$clear.click($.proxy(this.clear, this)); \r\n } \r\n },\r\n \r\n postrender: function() {\r\n /*\r\n //now `clear` is positioned via css\r\n if(this.$clear) {\r\n //can position clear button only here, when form is shown and height can be calculated\r\n// var h = this.$input.outerHeight(true) || 20,\r\n var h = this.$clear.parent().height(),\r\n delta = (h - this.$clear.height()) / 2;\r\n \r\n //this.$clear.css({bottom: delta, right: delta});\r\n }\r\n */ \r\n },\r\n \r\n //show / hide clear button\r\n toggleClear: function(e) {\r\n if(!this.$clear) {\r\n return;\r\n }\r\n \r\n var len = this.$input.val().length,\r\n visible = this.$clear.is(':visible');\r\n \r\n if(len && !visible) {\r\n this.$clear.show();\r\n } \r\n \r\n if(!len && visible) {\r\n this.$clear.hide();\r\n } \r\n },\r\n \r\n clear: function() {\r\n this.$clear.hide();\r\n this.$input.val('').focus();\r\n } \r\n });\r\n\r\n Text.defaults = $.extend({}, $.fn.editabletypes.abstractinput.defaults, {\r\n /**\r\n @property tpl \r\n @default <input type=\"text\">\r\n **/ \r\n tpl: '<input type=\"text\">',\r\n /**\r\n Placeholder attribute of input. Shown when input is empty.\r\n\r\n @property placeholder \r\n @type string\r\n @default null\r\n **/ \r\n placeholder: null,\r\n \r\n /**\r\n Whether to show `clear` button \r\n \r\n @property clear \r\n @type boolean\r\n @default true \r\n **/\r\n clear: true\r\n });\r\n\r\n $.fn.editabletypes.text = Text;\r\n\r\n}(window.jQuery));\r\n\r\n/**\r\nTextarea input\r\n\r\n@class textarea\r\n@extends abstractinput\r\n@final\r\n@example\r\n<a href=\"#\" id=\"comments\" data-type=\"textarea\" data-pk=\"1\">awesome comment!</a>\r\n<script>\r\n$(function(){\r\n $('#comments').editable({\r\n url: '/post',\r\n title: 'Enter comments',\r\n rows: 10\r\n });\r\n});\r\n</script>\r\n**/\r\n(function ($) {\r\n \"use strict\";\r\n \r\n var Textarea = function (options) {\r\n this.init('textarea', options, Textarea.defaults);\r\n };\r\n\r\n $.fn.editableutils.inherit(Textarea, $.fn.editabletypes.abstractinput);\r\n\r\n $.extend(Textarea.prototype, {\r\n render: function () {\r\n this.setClass();\r\n this.setAttr('placeholder');\r\n this.setAttr('rows'); \r\n \r\n //ctrl + enter\r\n this.$input.keydown(function (e) {\r\n if (e.ctrlKey && e.which === 13) {\r\n $(this).closest('form').submit();\r\n }\r\n });\r\n },\r\n \r\n //using `white-space: pre-wrap` solves \\n <--> BR conversion very elegant!\r\n /* \r\n value2html: function(value, element) {\r\n var html = '', lines;\r\n if(value) {\r\n lines = value.split(\"\\n\");\r\n for (var i = 0; i < lines.length; i++) {\r\n lines[i] = $('<div>').text(lines[i]).html();\r\n }\r\n html = lines.join('<br>');\r\n }\r\n $(element).html(html);\r\n },\r\n \r\n html2value: function(html) {\r\n if(!html) {\r\n return '';\r\n }\r\n\r\n var regex = new RegExp(String.fromCharCode(10), 'g');\r\n var lines = html.split(/<br\\s*\\/?>/i);\r\n for (var i = 0; i < lines.length; i++) {\r\n var text = $('<div>').html(lines[i]).text();\r\n\r\n // Remove newline characters (\\n) to avoid them being converted by value2html() method\r\n // thus adding extra <br> tags\r\n text = text.replace(regex, '');\r\n\r\n lines[i] = text;\r\n }\r\n return lines.join(\"\\n\");\r\n },\r\n */\r\n activate: function() {\r\n $.fn.editabletypes.text.prototype.activate.call(this);\r\n }\r\n });\r\n\r\n Textarea.defaults = $.extend({}, $.fn.editabletypes.abstractinput.defaults, {\r\n /**\r\n @property tpl\r\n @default <textarea></textarea>\r\n **/\r\n tpl:'<textarea></textarea>',\r\n /**\r\n @property inputclass\r\n @default input-large\r\n **/\r\n inputclass: 'input-large',\r\n /**\r\n Placeholder attribute of input. Shown when input is empty.\r\n\r\n @property placeholder\r\n @type string\r\n @default null\r\n **/\r\n placeholder: null,\r\n /**\r\n Number of rows in textarea\r\n\r\n @property rows\r\n @type integer\r\n @default 7\r\n **/ \r\n rows: 7 \r\n });\r\n\r\n $.fn.editabletypes.textarea = Textarea;\r\n\r\n}(window.jQuery));\r\n\r\n/**\r\nSelect (dropdown)\r\n\r\n@class select\r\n@extends list\r\n@final\r\n@example\r\n<a href=\"#\" id=\"status\" data-type=\"select\" data-pk=\"1\" data-url=\"/post\" data-title=\"Select status\"></a>\r\n<script>\r\n$(function(){\r\n $('#status').editable({\r\n value: 2, \r\n source: [\r\n {value: 1, text: 'Active'},\r\n {value: 2, text: 'Blocked'},\r\n {value: 3, text: 'Deleted'}\r\n ]\r\n });\r\n});\r\n</script>\r\n**/\r\n(function ($) {\r\n \"use strict\";\r\n \r\n var Select = function (options) {\r\n this.init('select', options, Select.defaults);\r\n };\r\n\r\n $.fn.editableutils.inherit(Select, $.fn.editabletypes.list);\r\n\r\n $.extend(Select.prototype, {\r\n renderList: function() {\r\n this.$input.empty();\r\n\r\n var fillItems = function($el, data) {\r\n var attr;\r\n if($.isArray(data)) {\r\n for(var i=0; i<data.length; i++) {\r\n attr = {};\r\n if(data[i].children) {\r\n attr.label = data[i].text;\r\n $el.append(fillItems($('<optgroup>', attr), data[i].children)); \r\n } else {\r\n attr.value = data[i].value;\r\n if(data[i].disabled) {\r\n attr.disabled = true;\r\n }\r\n $el.append($('<option>', attr).text(data[i].text)); \r\n }\r\n }\r\n }\r\n return $el;\r\n }; \r\n\r\n fillItems(this.$input, this.sourceData);\r\n \r\n this.setClass();\r\n \r\n //enter submit\r\n this.$input.on('keydown.editable', function (e) {\r\n if (e.which === 13) {\r\n $(this).closest('form').submit();\r\n }\r\n }); \r\n },\r\n \r\n value2htmlFinal: function(value, element) {\r\n var text = '', \r\n items = $.fn.editableutils.itemsByValue(value, this.sourceData);\r\n \r\n if(items.length) {\r\n text = items[0].text;\r\n }\r\n \r\n //$(element).text(text);\r\n $.fn.editabletypes.abstractinput.prototype.value2html.call(this, text, element);\r\n },\r\n \r\n autosubmit: function() {\r\n this.$input.off('keydown.editable').on('change.editable', function(){\r\n $(this).closest('form').submit();\r\n });\r\n }\r\n }); \r\n\r\n Select.defaults = $.extend({}, $.fn.editabletypes.list.defaults, {\r\n /**\r\n @property tpl \r\n @default <select></select>\r\n **/ \r\n tpl:'<select></select>'\r\n });\r\n\r\n $.fn.editabletypes.select = Select; \r\n\r\n}(window.jQuery));\r\n\r\n/**\r\nList of checkboxes. \r\nInternally value stored as javascript array of values.\r\n\r\n@class checklist\r\n@extends list\r\n@final\r\n@example\r\n<a href=\"#\" id=\"options\" data-type=\"checklist\" data-pk=\"1\" data-url=\"/post\" data-title=\"Select options\"></a>\r\n<script>\r\n$(function(){\r\n $('#options').editable({\r\n value: [2, 3], \r\n source: [\r\n {value: 1, text: 'option1'},\r\n {value: 2, text: 'option2'},\r\n {value: 3, text: 'option3'}\r\n ]\r\n });\r\n});\r\n</script>\r\n**/\r\n(function ($) {\r\n \"use strict\";\r\n \r\n var Checklist = function (options) {\r\n this.init('checklist', options, Checklist.defaults);\r\n };\r\n\r\n $.fn.editableutils.inherit(Checklist, $.fn.editabletypes.list);\r\n\r\n $.extend(Checklist.prototype, {\r\n renderList: function() {\r\n var $label, $div;\r\n \r\n this.$tpl.empty();\r\n \r\n if(!$.isArray(this.sourceData)) {\r\n return;\r\n }\r\n\r\n for(var i=0; i<this.sourceData.length; i++) {\r\n $label = $('<label>').append($('<input>', {\r\n type: 'checkbox',\r\n value: this.sourceData[i].value \r\n }))\r\n .append($('<span>').text(' '+this.sourceData[i].text));\r\n \r\n $('<div>').append($label).appendTo(this.$tpl);\r\n }\r\n \r\n this.$input = this.$tpl.find('input[type=\"checkbox\"]');\r\n this.setClass();\r\n },\r\n \r\n value2str: function(value) {\r\n return $.isArray(value) ? value.sort().join($.trim(this.options.separator)) : '';\r\n }, \r\n \r\n //parse separated string\r\n str2value: function(str) {\r\n var reg, value = null;\r\n if(typeof str === 'string' && str.length) {\r\n reg = new RegExp('\\\\s*'+$.trim(this.options.separator)+'\\\\s*');\r\n value = str.split(reg);\r\n } else if($.isArray(str)) {\r\n value = str; \r\n } else {\r\n value = [str];\r\n }\r\n return value;\r\n }, \r\n \r\n //set checked on required checkboxes\r\n value2input: function(value) {\r\n this.$input.prop('checked', false);\r\n if($.isArray(value) && value.length) {\r\n this.$input.each(function(i, el) {\r\n var $el = $(el);\r\n // cannot use $.inArray as it performs strict comparison\r\n $.each(value, function(j, val){\r\n /*jslint eqeq: true*/\r\n if($el.val() == val) {\r\n /*jslint eqeq: false*/ \r\n $el.prop('checked', true);\r\n }\r\n });\r\n }); \r\n } \r\n }, \r\n \r\n input2value: function() { \r\n var checked = [];\r\n this.$input.filter(':checked').each(function(i, el) {\r\n checked.push($(el).val());\r\n });\r\n return checked;\r\n }, \r\n \r\n //collect text of checked boxes\r\n value2htmlFinal: function(value, element) {\r\n var html = [],\r\n checked = $.fn.editableutils.itemsByValue(value, this.sourceData),\r\n escape = this.options.escape;\r\n \r\n if(checked.length) {\r\n $.each(checked, function(i, v) {\r\n var text = escape ? $.fn.editableutils.escape(v.text) : v.text; \r\n html.push(text); \r\n });\r\n $(element).html(html.join('<br>'));\r\n } else {\r\n $(element).empty(); \r\n }\r\n },\r\n \r\n activate: function() {\r\n this.$input.first().focus();\r\n },\r\n \r\n autosubmit: function() {\r\n this.$input.on('keydown', function(e){\r\n if (e.which === 13) {\r\n $(this).closest('form').submit();\r\n }\r\n });\r\n }\r\n }); \r\n\r\n Checklist.defaults = $.extend({}, $.fn.editabletypes.list.defaults, {\r\n /**\r\n @property tpl \r\n @default <div></div>\r\n **/ \r\n tpl:'<div class=\"editable-checklist\"></div>',\r\n \r\n /**\r\n @property inputclass \r\n @type string\r\n @default null\r\n **/ \r\n inputclass: null, \r\n \r\n /**\r\n Separator of values when reading from `data-value` attribute\r\n\r\n @property separator \r\n @type string\r\n @default ','\r\n **/ \r\n separator: ','\r\n });\r\n\r\n $.fn.editabletypes.checklist = Checklist; \r\n\r\n}(window.jQuery));\r\n\r\n/**\r\nHTML5 input types.\r\nFollowing types are supported:\r\n\r\n* password\r\n* email\r\n* url\r\n* tel\r\n* number\r\n* range\r\n* time\r\n\r\nLearn more about html5 inputs: \r\nhttp://www.w3.org/wiki/HTML5_form_additions \r\nTo check browser compatibility please see: \r\nhttps://developer.mozilla.org/en-US/docs/HTML/Element/Input\r\n \r\n@class html5types \r\n@extends text\r\n@final\r\n@since 1.3.0\r\n@example\r\n<a href=\"#\" id=\"email\" data-type=\"email\" data-pk=\"1\">admin@example.com</a>\r\n<script>\r\n$(function(){\r\n $('#email').editable({\r\n url: '/post',\r\n title: 'Enter email'\r\n });\r\n});\r\n</script>\r\n**/\r\n\r\n/**\r\n@property tpl \r\n@default depends on type\r\n**/ \r\n\r\n/*\r\nPassword\r\n*/\r\n(function ($) {\r\n \"use strict\";\r\n \r\n var Password = function (options) {\r\n this.init('password', options, Password.defaults);\r\n };\r\n $.fn.editableutils.inherit(Password, $.fn.editabletypes.text);\r\n $.extend(Password.prototype, {\r\n //do not display password, show '[hidden]' instead\r\n value2html: function(value, element) {\r\n if(value) {\r\n $(element).text('[hidden]');\r\n } else {\r\n $(element).empty(); \r\n }\r\n },\r\n //as password not displayed, should not set value by html\r\n html2value: function(html) {\r\n return null;\r\n } \r\n }); \r\n Password.defaults = $.extend({}, $.fn.editabletypes.text.defaults, {\r\n tpl: '<input type=\"password\">'\r\n });\r\n $.fn.editabletypes.password = Password;\r\n}(window.jQuery));\r\n\r\n\r\n/*\r\nEmail\r\n*/\r\n(function ($) {\r\n \"use strict\";\r\n \r\n var Email = function (options) {\r\n this.init('email', options, Email.defaults);\r\n };\r\n $.fn.editableutils.inherit(Email, $.fn.editabletypes.text);\r\n Email.defaults = $.extend({}, $.fn.editabletypes.text.defaults, {\r\n tpl: '<input type=\"email\">'\r\n });\r\n $.fn.editabletypes.email = Email;\r\n}(window.jQuery));\r\n\r\n\r\n/*\r\nUrl\r\n*/\r\n(function ($) {\r\n \"use strict\";\r\n \r\n var Url = function (options) {\r\n this.init('url', options, Url.defaults);\r\n };\r\n $.fn.editableutils.inherit(Url, $.fn.editabletypes.text);\r\n Url.defaults = $.extend({}, $.fn.editabletypes.text.defaults, {\r\n tpl: '<input type=\"url\">'\r\n });\r\n $.fn.editabletypes.url = Url;\r\n}(window.jQuery));\r\n\r\n\r\n/*\r\nTel\r\n*/\r\n(function ($) {\r\n \"use strict\";\r\n \r\n var Tel = function (options) {\r\n this.init('tel', options, Tel.defaults);\r\n };\r\n $.fn.editableutils.inherit(Tel, $.fn.editabletypes.text);\r\n Tel.defaults = $.extend({}, $.fn.editabletypes.text.defaults, {\r\n tpl: '<input type=\"tel\">'\r\n });\r\n $.fn.editabletypes.tel = Tel;\r\n}(window.jQuery));\r\n\r\n\r\n/*\r\nNumber\r\n*/\r\n(function ($) {\r\n \"use strict\";\r\n \r\n var NumberInput = function (options) {\r\n this.init('number', options, NumberInput.defaults);\r\n };\r\n $.fn.editableutils.inherit(NumberInput, $.fn.editabletypes.text);\r\n $.extend(NumberInput.prototype, {\r\n render: function () {\r\n NumberInput.superclass.render.call(this);\r\n this.setAttr('min');\r\n this.setAttr('max');\r\n this.setAttr('step');\r\n },\r\n postrender: function() {\r\n if(this.$clear) {\r\n //increase right ffset for up/down arrows\r\n this.$clear.css({right: 24});\r\n /*\r\n //can position clear button only here, when form is shown and height can be calculated\r\n var h = this.$input.outerHeight(true) || 20,\r\n delta = (h - this.$clear.height()) / 2;\r\n \r\n //add 12px to offset right for up/down arrows \r\n this.$clear.css({top: delta, right: delta + 16});\r\n */\r\n } \r\n } \r\n }); \r\n NumberInput.defaults = $.extend({}, $.fn.editabletypes.text.defaults, {\r\n tpl: '<input type=\"number\">',\r\n inputclass: 'input-mini',\r\n min: null,\r\n max: null,\r\n step: null\r\n });\r\n $.fn.editabletypes.number = NumberInput;\r\n}(window.jQuery));\r\n\r\n\r\n/*\r\nRange (inherit from number)\r\n*/\r\n(function ($) {\r\n \"use strict\";\r\n \r\n var Range = function (options) {\r\n this.init('range', options, Range.defaults);\r\n };\r\n $.fn.editableutils.inherit(Range, $.fn.editabletypes.number);\r\n $.extend(Range.prototype, {\r\n render: function () {\r\n this.$input = this.$tpl.filter('input');\r\n \r\n this.setClass();\r\n this.setAttr('min');\r\n this.setAttr('max');\r\n this.setAttr('step'); \r\n \r\n this.$input.on('input', function(){\r\n $(this).siblings('output').text($(this).val()); \r\n }); \r\n },\r\n activate: function() {\r\n this.$input.focus();\r\n } \r\n });\r\n Range.defaults = $.extend({}, $.fn.editabletypes.number.defaults, {\r\n tpl: '<input type=\"range\"><output style=\"width: 30px; display: inline-block\"></output>',\r\n inputclass: 'input-medium'\r\n });\r\n $.fn.editabletypes.range = Range;\r\n}(window.jQuery));\r\n\r\n/*\r\nTime\r\n*/\r\n(function ($) {\r\n \"use strict\";\r\n\r\n var Time = function (options) {\r\n this.init('time', options, Time.defaults);\r\n };\r\n //inherit from abstract, as inheritance from text gives selection error.\r\n $.fn.editableutils.inherit(Time, $.fn.editabletypes.abstractinput);\r\n $.extend(Time.prototype, {\r\n render: function() {\r\n this.setClass();\r\n } \r\n });\r\n Time.defaults = $.extend({}, $.fn.editabletypes.abstractinput.defaults, {\r\n tpl: '<input type=\"time\">'\r\n });\r\n $.fn.editabletypes.time = Time;\r\n}(window.jQuery));\r\n\r\n/**\r\nSelect2 input. Based on amazing work of Igor Vaynberg https://github.com/ivaynberg/select2. \r\nPlease see [original select2 docs](http://ivaynberg.github.com/select2) for detailed description and options. \r\n \r\nYou should manually download and include select2 distributive: \r\n\r\n <link href=\"select2/select2.css\" rel=\"stylesheet\" type=\"text/css\"></link> \r\n <script src=\"select2/select2.js\"></script> \r\n \r\nTo make it **bootstrap-styled** you can use css from [here](https://github.com/t0m/select2-bootstrap-css): \r\n\r\n <link href=\"select2-bootstrap.css\" rel=\"stylesheet\" type=\"text/css\"></link> \r\n \r\n**Note:** currently `autotext` feature does not work for select2 with `ajax` remote source. \r\nYou need initially put both `data-value` and element's text youself: \r\n\r\n <a href=\"#\" data-type=\"select2\" data-value=\"1\">Text1</a>\r\n \r\n \r\n@class select2\r\n@extends abstractinput\r\n@since 1.4.1\r\n@final\r\n@example\r\n<a href=\"#\" id=\"country\" data-type=\"select2\" data-pk=\"1\" data-value=\"ru\" data-url=\"/post\" data-title=\"Select country\"></a>\r\n<script>\r\n$(function(){\r\n //local source\r\n $('#country').editable({\r\n source: [\r\n {id: 'gb', text: 'Great Britain'},\r\n {id: 'us', text: 'United States'},\r\n {id: 'ru', text: 'Russia'}\r\n ],\r\n select2: {\r\n multiple: true\r\n }\r\n });\r\n //remote source (simple)\r\n $('#country').editable({\r\n source: '/getCountries',\r\n select2: {\r\n placeholder: 'Select Country',\r\n minimumInputLength: 1\r\n }\r\n });\r\n //remote source (advanced)\r\n $('#country').editable({\r\n select2: {\r\n placeholder: 'Select Country',\r\n allowClear: true,\r\n minimumInputLength: 3,\r\n id: function (item) {\r\n return item.CountryId;\r\n },\r\n ajax: {\r\n url: '/getCountries',\r\n dataType: 'json',\r\n data: function (term, page) {\r\n return { query: term };\r\n },\r\n results: function (data, page) {\r\n return { results: data };\r\n }\r\n },\r\n formatResult: function (item) {\r\n return item.CountryName;\r\n },\r\n formatSelection: function (item) {\r\n return item.CountryName;\r\n },\r\n initSelection: function (element, callback) {\r\n return $.get('/getCountryById', { query: element.val() }, function (data) {\r\n callback(data);\r\n });\r\n } \r\n } \r\n });\r\n});\r\n</script>\r\n**/\r\n(function ($) {\r\n \"use strict\";\r\n \r\n var Constructor = function (options) {\r\n this.init('select2', options, Constructor.defaults);\r\n\r\n options.select2 = options.select2 || {};\r\n\r\n this.sourceData = null;\r\n \r\n //placeholder\r\n if(options.placeholder) {\r\n options.select2.placeholder = options.placeholder;\r\n }\r\n \r\n //if not `tags` mode, use source\r\n if(!options.select2.tags && options.source) {\r\n var source = options.source;\r\n //if source is function, call it (once!)\r\n if ($.isFunction(options.source)) {\r\n source = options.source.call(options.scope);\r\n } \r\n\r\n if (typeof source === 'string') {\r\n options.select2.ajax = options.select2.ajax || {};\r\n //some default ajax params\r\n if(!options.select2.ajax.data) {\r\n options.select2.ajax.data = function(term) {return { query:term };};\r\n }\r\n if(!options.select2.ajax.results) {\r\n options.select2.ajax.results = function(data) { return {results:data };};\r\n }\r\n options.select2.ajax.url = source;\r\n } else {\r\n //check format and convert x-editable format to select2 format (if needed)\r\n this.sourceData = this.convertSource(source);\r\n options.select2.data = this.sourceData;\r\n }\r\n } \r\n\r\n //overriding objects in config (as by default jQuery extend() is not recursive)\r\n this.options.select2 = $.extend({}, Constructor.defaults.select2, options.select2);\r\n\r\n //detect whether it is multi-valued\r\n this.isMultiple = this.options.select2.tags || this.options.select2.multiple;\r\n this.isRemote = ('ajax' in this.options.select2);\r\n\r\n //store function returning ID of item\r\n //should be here as used inautotext for local source\r\n this.idFunc = this.options.select2.id;\r\n if (typeof(this.idFunc) !== \"function\") {\r\n var idKey = this.idFunc || 'id';\r\n this.idFunc = function (e) { return e[idKey]; };\r\n }\r\n\r\n //store function that renders text in select2\r\n this.formatSelection = this.options.select2.formatSelection;\r\n if (typeof(this.formatSelection) !== \"function\") {\r\n this.formatSelection = function (e) { return e.text; };\r\n }\r\n };\r\n\r\n $.fn.editableutils.inherit(Constructor, $.fn.editabletypes.abstractinput);\r\n\r\n $.extend(Constructor.prototype, {\r\n render: function() {\r\n this.setClass();\r\n\r\n //can not apply select2 here as it calls initSelection \r\n //over input that does not have correct value yet.\r\n //apply select2 only in value2input\r\n //this.$input.select2(this.options.select2);\r\n\r\n //when data is loaded via ajax, we need to know when it's done to populate listData\r\n if(this.isRemote) {\r\n //listen to loaded event to populate data\r\n this.$input.on('select2-loaded', $.proxy(function(e) {\r\n this.sourceData = e.items.results;\r\n }, this));\r\n }\r\n\r\n //trigger resize of editableform to re-position container in multi-valued mode\r\n if(this.isMultiple) {\r\n this.$input.on('change', function() {\r\n $(this).closest('form').parent().triggerHandler('resize');\r\n });\r\n }\r\n },\r\n\r\n value2html: function(value, element) {\r\n var text = '', data,\r\n that = this;\r\n\r\n if(this.options.select2.tags) { //in tags mode just assign value\r\n data = value; \r\n //data = $.fn.editableutils.itemsByValue(value, this.options.select2.tags, this.idFunc);\r\n } else if(this.sourceData) {\r\n data = $.fn.editableutils.itemsByValue(value, this.sourceData, this.idFunc); \r\n } else {\r\n //can not get list of possible values \r\n //(e.g. autotext for select2 with ajax source)\r\n }\r\n\r\n //data may be array (when multiple values allowed)\r\n if($.isArray(data)) {\r\n //collect selected data and show with separator\r\n text = [];\r\n $.each(data, function(k, v){\r\n text.push(v && typeof v === 'object' ? that.formatSelection(v) : v);\r\n });\r\n } else if(data) {\r\n text = that.formatSelection(data);\r\n }\r\n\r\n text = $.isArray(text) ? text.join(this.options.viewseparator) : text;\r\n\r\n //$(element).text(text);\r\n Constructor.superclass.value2html.call(this, text, element); \r\n },\r\n\r\n html2value: function(html) {\r\n return this.options.select2.tags ? this.str2value(html, this.options.viewseparator) : null;\r\n },\r\n\r\n value2input: function(value) {\r\n // if value array => join it anyway\r\n if($.isArray(value)) {\r\n value = value.join(this.getSeparator());\r\n }\r\n\r\n //for remote source just set value, text is updated by initSelection\r\n if(!this.$input.data('select2')) {\r\n this.$input.val(value);\r\n this.$input.select2(this.options.select2);\r\n } else {\r\n //second argument needed to separate initial change from user's click (for autosubmit) \r\n this.$input.val(value).trigger('change', true); \r\n\r\n //Uncaught Error: cannot call val() if initSelection() is not defined\r\n //this.$input.select2('val', value);\r\n }\r\n\r\n // if defined remote source AND no multiple mode AND no user's initSelection provided --> \r\n // we should somehow get text for provided id.\r\n // The solution is to use element's text as text for that id (exclude empty)\r\n if(this.isRemote && !this.isMultiple && !this.options.select2.initSelection) {\r\n // customId and customText are methods to extract `id` and `text` from data object\r\n // we can use this workaround only if user did not define these methods\r\n // otherwise we cant construct data object\r\n var customId = this.options.select2.id,\r\n customText = this.options.select2.formatSelection;\r\n\r\n if(!customId && !customText) {\r\n var $el = $(this.options.scope);\r\n if (!$el.data('editable').isEmpty) {\r\n var data = {id: value, text: $el.text()};\r\n this.$input.select2('data', data); \r\n }\r\n }\r\n }\r\n },\r\n \r\n input2value: function() { \r\n return this.$input.select2('val');\r\n },\r\n\r\n str2value: function(str, separator) {\r\n if(typeof str !== 'string' || !this.isMultiple) {\r\n return str;\r\n }\r\n\r\n separator = separator || this.getSeparator();\r\n\r\n var val, i, l;\r\n\r\n if (str === null || str.length < 1) {\r\n return null;\r\n }\r\n val = str.split(separator);\r\n for (i = 0, l = val.length; i < l; i = i + 1) {\r\n val[i] = $.trim(val[i]);\r\n }\r\n\r\n return val;\r\n },\r\n\r\n autosubmit: function() {\r\n this.$input.on('change', function(e, isInitial){\r\n if(!isInitial) {\r\n $(this).closest('form').submit();\r\n }\r\n });\r\n },\r\n\r\n getSeparator: function() {\r\n return this.options.select2.separator || $.fn.select2.defaults.separator;\r\n },\r\n\r\n /*\r\n Converts source from x-editable format: {value: 1, text: \"1\"} to\r\n select2 format: {id: 1, text: \"1\"}\r\n */\r\n convertSource: function(source) {\r\n if($.isArray(source) && source.length && source[0].value !== undefined) {\r\n for(var i = 0; i<source.length; i++) {\r\n if(source[i].value !== undefined) {\r\n source[i].id = source[i].value;\r\n delete source[i].value;\r\n }\r\n }\r\n }\r\n return source;\r\n },\r\n \r\n destroy: function() {\r\n if(this.$input.data('select2')) {\r\n this.$input.select2('destroy');\r\n }\r\n }\r\n \r\n });\r\n\r\n Constructor.defaults = $.extend({}, $.fn.editabletypes.abstractinput.defaults, {\r\n /**\r\n @property tpl \r\n @default <input type=\"hidden\">\r\n **/\r\n tpl:'<input type=\"hidden\">',\r\n /**\r\n Configuration of select2. [Full list of options](http://ivaynberg.github.com/select2).\r\n\r\n @property select2 \r\n @type object\r\n @default null\r\n **/\r\n select2: null,\r\n /**\r\n Placeholder attribute of select\r\n\r\n @property placeholder \r\n @type string\r\n @default null\r\n **/\r\n placeholder: null,\r\n /**\r\n Source data for select. It will be assigned to select2 `data` property and kept here just for convenience.\r\n Please note, that format is different from simple `select` input: use 'id' instead of 'value'.\r\n E.g. `[{id: 1, text: \"text1\"}, {id: 2, text: \"text2\"}, ...]`.\r\n\r\n @property source \r\n @type array|string|function\r\n @default null \r\n **/\r\n source: null,\r\n /**\r\n Separator used to display tags.\r\n\r\n @property viewseparator \r\n @type string\r\n @default ', ' \r\n **/\r\n viewseparator: ', '\r\n });\r\n\r\n $.fn.editabletypes.select2 = Constructor;\r\n\r\n}(window.jQuery));\r\n\r\n/**\r\n* Combodate - 1.0.5\r\n* Dropdown date and time picker.\r\n* Converts text input into dropdowns to pick day, month, year, hour, minute and second.\r\n* Uses momentjs as datetime library http://momentjs.com.\r\n* For i18n include corresponding file from https://github.com/timrwood/moment/tree/master/lang \r\n*\r\n* Confusion at noon and midnight - see http://en.wikipedia.org/wiki/12-hour_clock#Confusion_at_noon_and_midnight\r\n* In combodate: \r\n* 12:00 pm --> 12:00 (24-h format, midday)\r\n* 12:00 am --> 00:00 (24-h format, midnight, start of day)\r\n* \r\n* Differs from momentjs parse rules:\r\n* 00:00 pm, 12:00 pm --> 12:00 (24-h format, day not change)\r\n* 00:00 am, 12:00 am --> 00:00 (24-h format, day not change)\r\n* \r\n* \r\n* Author: Vitaliy Potapov\r\n* Project page: http://github.com/vitalets/combodate\r\n* Copyright (c) 2012 Vitaliy Potapov. Released under MIT License.\r\n**/\r\n(function ($) {\r\n\r\n var Combodate = function (element, options) {\r\n this.$element = $(element);\r\n if(!this.$element.is('input')) {\r\n $.error('Combodate should be applied to INPUT element');\r\n return;\r\n }\r\n this.options = $.extend({}, $.fn.combodate.defaults, options, this.$element.data());\r\n this.init(); \r\n };\r\n\r\n Combodate.prototype = {\r\n constructor: Combodate, \r\n init: function () {\r\n this.map = {\r\n //key regexp moment.method\r\n day: ['D', 'date'], \r\n month: ['M', 'month'], \r\n year: ['Y', 'year'], \r\n hour: ['[Hh]', 'hours'],\r\n minute: ['m', 'minutes'], \r\n second: ['s', 'seconds'],\r\n ampm: ['[Aa]', ''] \r\n };\r\n \r\n this.$widget = $('<span class=\"combodate\"></span>').html(this.getTemplate());\r\n \r\n this.initCombos();\r\n \r\n //update original input on change \r\n this.$widget.on('change', 'select', $.proxy(function(e) {\r\n this.$element.val(this.getValue()).change();\r\n // update days count if month or year changes\r\n if (this.options.smartDays) {\r\n if ($(e.target).is('.month') || $(e.target).is('.year')) {\r\n this.fillCombo('day');\r\n }\r\n }\r\n }, this));\r\n \r\n this.$widget.find('select').css('width', 'auto');\r\n \r\n // hide original input and insert widget \r\n this.$element.hide().after(this.$widget);\r\n \r\n // set initial value\r\n this.setValue(this.$element.val() || this.options.value);\r\n },\r\n \r\n /*\r\n Replace tokens in template with <select> elements \r\n */ \r\n getTemplate: function() {\r\n var tpl = this.options.template;\r\n\r\n //first pass\r\n $.each(this.map, function(k, v) {\r\n v = v[0]; \r\n var r = new RegExp(v+'+'),\r\n token = v.length > 1 ? v.substring(1, 2) : v;\r\n \r\n tpl = tpl.replace(r, '{'+token+'}');\r\n });\r\n\r\n //replace spaces with \r\n tpl = tpl.replace(/ /g, ' ');\r\n\r\n //second pass\r\n $.each(this.map, function(k, v) {\r\n v = v[0];\r\n var token = v.length > 1 ? v.substring(1, 2) : v;\r\n \r\n tpl = tpl.replace('{'+token+'}', '<select class=\"'+k+'\"></select>');\r\n }); \r\n\r\n return tpl;\r\n },\r\n \r\n /*\r\n Initialize combos that presents in template \r\n */ \r\n initCombos: function() {\r\n for (var k in this.map) {\r\n var $c = this.$widget.find('.'+k);\r\n // set properties like this.$day, this.$month etc.\r\n this['$'+k] = $c.length ? $c : null;\r\n // fill with items\r\n this.fillCombo(k);\r\n }\r\n },\r\n\r\n /*\r\n Fill combo with items \r\n */ \r\n fillCombo: function(k) {\r\n var $combo = this['$'+k];\r\n if (!$combo) {\r\n return;\r\n }\r\n\r\n // define method name to fill items, e.g `fillDays`\r\n var f = 'fill' + k.charAt(0).toUpperCase() + k.slice(1); \r\n var items = this[f]();\r\n var value = $combo.val();\r\n\r\n $combo.empty();\r\n for(var i=0; i<items.length; i++) {\r\n $combo.append('<option value=\"'+items[i][0]+'\">'+items[i][1]+'</option>');\r\n }\r\n\r\n $combo.val(value);\r\n },\r\n\r\n /*\r\n Initialize items of combos. Handles `firstItem` option \r\n */\r\n fillCommon: function(key) {\r\n var values = [],\r\n relTime;\r\n \r\n if(this.options.firstItem === 'name') {\r\n //need both to support moment ver < 2 and >= 2\r\n relTime = moment.relativeTime || moment.langData()._relativeTime; \r\n var header = typeof relTime[key] === 'function' ? relTime[key](1, true, key, false) : relTime[key];\r\n //take last entry (see momentjs lang files structure) \r\n header = header.split(' ').reverse()[0]; \r\n values.push(['', header]);\r\n } else if(this.options.firstItem === 'empty') {\r\n values.push(['', '']);\r\n }\r\n return values;\r\n }, \r\n\r\n\r\n /*\r\n fill day\r\n */\r\n fillDay: function() {\r\n var items = this.fillCommon('d'), name, i,\r\n twoDigit = this.options.template.indexOf('DD') !== -1,\r\n daysCount = 31;\r\n\r\n // detect days count (depends on month and year)\r\n // originally https://github.com/vitalets/combodate/pull/7\r\n if (this.options.smartDays && this.$month && this.$year) {\r\n var month = parseInt(this.$month.val(), 10);\r\n var year = parseInt(this.$year.val(), 10);\r\n\r\n if (!isNaN(month) && !isNaN(year)) {\r\n daysCount = moment([year, month]).daysInMonth();\r\n }\r\n }\r\n\r\n for (i = 1; i <= daysCount; i++) {\r\n name = twoDigit ? this.leadZero(i) : i;\r\n items.push([i, name]);\r\n }\r\n return items; \r\n },\r\n \r\n /*\r\n fill month\r\n */\r\n fillMonth: function() {\r\n var items = this.fillCommon('M'), name, i, \r\n longNames = this.options.template.indexOf('MMMM') !== -1,\r\n shortNames = this.options.template.indexOf('MMM') !== -1,\r\n twoDigit = this.options.template.indexOf('MM') !== -1;\r\n \r\n for(i=0; i<=11; i++) {\r\n if(longNames) {\r\n //see https://github.com/timrwood/momentjs.com/pull/36\r\n name = moment().date(1).month(i).format('MMMM');\r\n } else if(shortNames) {\r\n name = moment().date(1).month(i).format('MMM');\r\n } else if(twoDigit) {\r\n name = this.leadZero(i+1);\r\n } else {\r\n name = i+1;\r\n }\r\n items.push([i, name]);\r\n } \r\n return items;\r\n }, \r\n \r\n /*\r\n fill year\r\n */\r\n fillYear: function() {\r\n var items = [], name, i, \r\n longNames = this.options.template.indexOf('YYYY') !== -1;\r\n \r\n for(i=this.options.maxYear; i>=this.options.minYear; i--) {\r\n name = longNames ? i : (i+'').substring(2);\r\n items[this.options.yearDescending ? 'push' : 'unshift']([i, name]);\r\n }\r\n \r\n items = this.fillCommon('y').concat(items);\r\n \r\n return items; \r\n }, \r\n \r\n /*\r\n fill hour\r\n */\r\n fillHour: function() {\r\n var items = this.fillCommon('h'), name, i,\r\n h12 = this.options.template.indexOf('h') !== -1,\r\n h24 = this.options.template.indexOf('H') !== -1,\r\n twoDigit = this.options.template.toLowerCase().indexOf('hh') !== -1,\r\n min = h12 ? 1 : 0, \r\n max = h12 ? 12 : 23;\r\n \r\n for(i=min; i<=max; i++) {\r\n name = twoDigit ? this.leadZero(i) : i;\r\n items.push([i, name]);\r\n } \r\n return items; \r\n }, \r\n \r\n /*\r\n fill minute\r\n */\r\n fillMinute: function() {\r\n var items = this.fillCommon('m'), name, i,\r\n twoDigit = this.options.template.indexOf('mm') !== -1;\r\n\r\n for(i=0; i<=59; i+= this.options.minuteStep) {\r\n name = twoDigit ? this.leadZero(i) : i;\r\n items.push([i, name]);\r\n } \r\n return items; \r\n }, \r\n \r\n /*\r\n fill second\r\n */\r\n fillSecond: function() {\r\n var items = this.fillCommon('s'), name, i,\r\n twoDigit = this.options.template.indexOf('ss') !== -1;\r\n\r\n for(i=0; i<=59; i+= this.options.secondStep) {\r\n name = twoDigit ? this.leadZero(i) : i;\r\n items.push([i, name]);\r\n } \r\n return items; \r\n }, \r\n \r\n /*\r\n fill ampm\r\n */\r\n fillAmpm: function() {\r\n var ampmL = this.options.template.indexOf('a') !== -1,\r\n ampmU = this.options.template.indexOf('A') !== -1, \r\n items = [\r\n ['am', ampmL ? 'am' : 'AM'],\r\n ['pm', ampmL ? 'pm' : 'PM']\r\n ];\r\n return items; \r\n }, \r\n\r\n /*\r\n Returns current date value from combos. \r\n If format not specified - `options.format` used.\r\n If format = `null` - Moment object returned.\r\n */\r\n getValue: function(format) {\r\n var dt, values = {}, \r\n that = this,\r\n notSelected = false;\r\n \r\n //getting selected values \r\n $.each(this.map, function(k, v) {\r\n if(k === 'ampm') {\r\n return;\r\n }\r\n var def = k === 'day' ? 1 : 0;\r\n \r\n values[k] = that['$'+k] ? parseInt(that['$'+k].val(), 10) : def; \r\n \r\n if(isNaN(values[k])) {\r\n notSelected = true;\r\n return false; \r\n }\r\n });\r\n \r\n //if at least one visible combo not selected - return empty string\r\n if(notSelected) {\r\n return '';\r\n }\r\n \r\n //convert hours 12h --> 24h \r\n if(this.$ampm) {\r\n //12:00 pm --> 12:00 (24-h format, midday), 12:00 am --> 00:00 (24-h format, midnight, start of day)\r\n if(values.hour === 12) {\r\n values.hour = this.$ampm.val() === 'am' ? 0 : 12; \r\n } else {\r\n values.hour = this.$ampm.val() === 'am' ? values.hour : values.hour+12;\r\n }\r\n } \r\n \r\n dt = moment([values.year, values.month, values.day, values.hour, values.minute, values.second]);\r\n \r\n //highlight invalid date\r\n this.highlight(dt);\r\n \r\n format = format === undefined ? this.options.format : format;\r\n if(format === null) {\r\n return dt.isValid() ? dt : null; \r\n } else {\r\n return dt.isValid() ? dt.format(format) : ''; \r\n } \r\n },\r\n \r\n setValue: function(value) {\r\n if(!value) {\r\n return;\r\n }\r\n \r\n var dt = typeof value === 'string' ? moment(value, this.options.format) : moment(value),\r\n that = this,\r\n values = {};\r\n \r\n //function to find nearest value in select options\r\n function getNearest($select, value) {\r\n var delta = {};\r\n $select.children('option').each(function(i, opt){\r\n var optValue = $(opt).attr('value'),\r\n distance;\r\n\r\n if(optValue === '') return;\r\n distance = Math.abs(optValue - value); \r\n if(typeof delta.distance === 'undefined' || distance < delta.distance) {\r\n delta = {value: optValue, distance: distance};\r\n } \r\n }); \r\n return delta.value;\r\n } \r\n \r\n if(dt.isValid()) {\r\n //read values from date object\r\n $.each(this.map, function(k, v) {\r\n if(k === 'ampm') {\r\n return; \r\n }\r\n values[k] = dt[v[1]]();\r\n });\r\n \r\n if(this.$ampm) {\r\n //12:00 pm --> 12:00 (24-h format, midday), 12:00 am --> 00:00 (24-h format, midnight, start of day)\r\n if(values.hour >= 12) {\r\n values.ampm = 'pm';\r\n if(values.hour > 12) {\r\n values.hour -= 12;\r\n }\r\n } else {\r\n values.ampm = 'am';\r\n if(values.hour === 0) {\r\n values.hour = 12;\r\n }\r\n } \r\n }\r\n \r\n $.each(values, function(k, v) {\r\n //call val() for each existing combo, e.g. this.$hour.val()\r\n if(that['$'+k]) {\r\n \r\n if(k === 'minute' && that.options.minuteStep > 1 && that.options.roundTime) {\r\n v = getNearest(that['$'+k], v);\r\n }\r\n \r\n if(k === 'second' && that.options.secondStep > 1 && that.options.roundTime) {\r\n v = getNearest(that['$'+k], v);\r\n } \r\n \r\n that['$'+k].val(v);\r\n }\r\n });\r\n\r\n // update days count\r\n if (this.options.smartDays) {\r\n this.fillCombo('day');\r\n }\r\n \r\n this.$element.val(dt.format(this.options.format)).change();\r\n }\r\n },\r\n \r\n /*\r\n highlight combos if date is invalid\r\n */\r\n highlight: function(dt) {\r\n if(!dt.isValid()) {\r\n if(this.options.errorClass) {\r\n this.$widget.addClass(this.options.errorClass);\r\n } else {\r\n //store original border color\r\n if(!this.borderColor) {\r\n this.borderColor = this.$widget.find('select').css('border-color'); \r\n }\r\n this.$widget.find('select').css('border-color', 'red');\r\n } \r\n } else {\r\n if(this.options.errorClass) {\r\n this.$widget.removeClass(this.options.errorClass);\r\n } else {\r\n this.$widget.find('select').css('border-color', this.borderColor);\r\n } \r\n }\r\n },\r\n \r\n leadZero: function(v) {\r\n return v <= 9 ? '0' + v : v; \r\n },\r\n \r\n destroy: function() {\r\n this.$widget.remove();\r\n this.$element.removeData('combodate').show();\r\n }\r\n \r\n //todo: clear method \r\n };\r\n\r\n $.fn.combodate = function ( option ) {\r\n var d, args = Array.apply(null, arguments);\r\n args.shift();\r\n\r\n //getValue returns date as string / object (not jQuery object)\r\n if(option === 'getValue' && this.length && (d = this.eq(0).data('combodate'))) {\r\n return d.getValue.apply(d, args);\r\n } \r\n \r\n return this.each(function () {\r\n var $this = $(this),\r\n data = $this.data('combodate'),\r\n options = typeof option == 'object' && option;\r\n if (!data) {\r\n $this.data('combodate', (data = new Combodate(this, options)));\r\n }\r\n if (typeof option == 'string' && typeof data[option] == 'function') {\r\n data[option].apply(data, args);\r\n }\r\n });\r\n }; \r\n \r\n $.fn.combodate.defaults = {\r\n //in this format value stored in original input\r\n format: 'DD-MM-YYYY HH:mm', \r\n //in this format items in dropdowns are displayed\r\n template: 'D / MMM / YYYY H : mm',\r\n //initial value, can be `new Date()` \r\n value: null, \r\n minYear: 1970,\r\n maxYear: 2015,\r\n yearDescending: true,\r\n minuteStep: 5,\r\n secondStep: 1,\r\n firstItem: 'empty', //'name', 'empty', 'none'\r\n errorClass: null,\r\n roundTime: true, // whether to round minutes and seconds if step > 1\r\n smartDays: false // whether days in combo depend on selected month: 31, 30, 28\r\n };\r\n\r\n}(window.jQuery));\r\n/**\r\nCombodate input - dropdown date and time picker. \r\nBased on [combodate](http://vitalets.github.com/combodate) plugin (included). To use it you should manually include [momentjs](http://momentjs.com).\r\n\r\n <script src=\"js/moment.min.js\"></script>\r\n \r\nAllows to input:\r\n\r\n* only date\r\n* only time \r\n* both date and time \r\n\r\nPlease note, that format is taken from momentjs and **not compatible** with bootstrap-datepicker / jquery UI datepicker. \r\nInternally value stored as `momentjs` object. \r\n\r\n@class combodate\r\n@extends abstractinput\r\n@final\r\n@since 1.4.0\r\n@example\r\n<a href=\"#\" id=\"dob\" data-type=\"combodate\" data-pk=\"1\" data-url=\"/post\" data-value=\"1984-05-15\" data-title=\"Select date\"></a>\r\n<script>\r\n$(function(){\r\n $('#dob').editable({\r\n format: 'YYYY-MM-DD', \r\n viewformat: 'DD.MM.YYYY', \r\n template: 'D / MMMM / YYYY', \r\n combodate: {\r\n minYear: 2000,\r\n maxYear: 2015,\r\n minuteStep: 1\r\n }\r\n }\r\n });\r\n});\r\n</script>\r\n**/\r\n\r\n/*global moment*/\r\n\r\n(function ($) {\r\n \"use strict\";\r\n \r\n var Constructor = function (options) {\r\n this.init('combodate', options, Constructor.defaults);\r\n \r\n //by default viewformat equals to format\r\n if(!this.options.viewformat) {\r\n this.options.viewformat = this.options.format;\r\n } \r\n \r\n //try parse combodate config defined as json string in data-combodate\r\n options.combodate = $.fn.editableutils.tryParseJson(options.combodate, true);\r\n\r\n //overriding combodate config (as by default jQuery extend() is not recursive)\r\n this.options.combodate = $.extend({}, Constructor.defaults.combodate, options.combodate, {\r\n format: this.options.format,\r\n template: this.options.template\r\n });\r\n };\r\n\r\n $.fn.editableutils.inherit(Constructor, $.fn.editabletypes.abstractinput); \r\n \r\n $.extend(Constructor.prototype, {\r\n render: function () {\r\n this.$input.combodate(this.options.combodate);\r\n \r\n if($.fn.editableform.engine === 'bs3') {\r\n this.$input.siblings().find('select').addClass('form-control');\r\n }\r\n \r\n if(this.options.inputclass) {\r\n this.$input.siblings().find('select').addClass(this.options.inputclass);\r\n } \r\n //\"clear\" link\r\n /*\r\n if(this.options.clear) {\r\n this.$clear = $('<a href=\"#\"></a>').html(this.options.clear).click($.proxy(function(e){\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.clear();\r\n }, this));\r\n \r\n this.$tpl.parent().append($('<div class=\"editable-clear\">').append(this.$clear)); \r\n } \r\n */ \r\n },\r\n \r\n value2html: function(value, element) {\r\n var text = value ? value.format(this.options.viewformat) : '';\r\n //$(element).text(text);\r\n Constructor.superclass.value2html.call(this, text, element); \r\n },\r\n\r\n html2value: function(html) {\r\n return html ? moment(html, this.options.viewformat) : null;\r\n }, \r\n \r\n value2str: function(value) {\r\n return value ? value.format(this.options.format) : '';\r\n }, \r\n \r\n str2value: function(str) {\r\n return str ? moment(str, this.options.format) : null;\r\n }, \r\n \r\n value2submit: function(value) {\r\n return this.value2str(value);\r\n }, \r\n\r\n value2input: function(value) {\r\n this.$input.combodate('setValue', value);\r\n },\r\n \r\n input2value: function() { \r\n return this.$input.combodate('getValue', null);\r\n }, \r\n \r\n activate: function() {\r\n this.$input.siblings('.combodate').find('select').eq(0).focus();\r\n },\r\n \r\n /*\r\n clear: function() {\r\n this.$input.data('datepicker').date = null;\r\n this.$input.find('.active').removeClass('active');\r\n },\r\n */\r\n \r\n autosubmit: function() {\r\n \r\n }\r\n\r\n });\r\n \r\n Constructor.defaults = $.extend({}, $.fn.editabletypes.abstractinput.defaults, {\r\n /**\r\n @property tpl \r\n @default <input type=\"text\">\r\n **/ \r\n tpl:'<input type=\"text\">',\r\n /**\r\n @property inputclass \r\n @default null\r\n **/ \r\n inputclass: null,\r\n /**\r\n Format used for sending value to server. Also applied when converting date from <code>data-value</code> attribute.<br>\r\n See list of tokens in [momentjs docs](http://momentjs.com/docs/#/parsing/string-format) \r\n \r\n @property format \r\n @type string\r\n @default YYYY-MM-DD\r\n **/ \r\n format:'YYYY-MM-DD',\r\n /**\r\n Format used for displaying date. Also applied when converting date from element's text on init. \r\n If not specified equals to `format`.\r\n \r\n @property viewformat \r\n @type string\r\n @default null\r\n **/ \r\n viewformat: null, \r\n /**\r\n Template used for displaying dropdowns.\r\n \r\n @property template \r\n @type string\r\n @default D / MMM / YYYY\r\n **/ \r\n template: 'D / MMM / YYYY', \r\n /**\r\n Configuration of combodate.\r\n Full list of options: http://vitalets.github.com/combodate/#docs\r\n \r\n @property combodate \r\n @type object\r\n @default null\r\n **/\r\n combodate: null\r\n \r\n /*\r\n (not implemented yet)\r\n Text shown as clear date button. \r\n If <code>false</code> clear button will not be rendered.\r\n \r\n @property clear \r\n @type boolean|string\r\n @default 'x clear' \r\n */\r\n //clear: '× clear'\r\n }); \r\n\r\n $.fn.editabletypes.combodate = Constructor;\r\n\r\n}(window.jQuery));\r\n\r\n/*\r\nEditableform based on Twitter Bootstrap 3\r\n*/\r\n(function ($) {\r\n \"use strict\";\r\n \r\n //store parent methods\r\n var pInitInput = $.fn.editableform.Constructor.prototype.initInput;\r\n \r\n $.extend($.fn.editableform.Constructor.prototype, {\r\n initTemplate: function() {\r\n this.$form = $($.fn.editableform.template); \r\n this.$form.find('.control-group').addClass('form-group');\r\n this.$form.find('.editable-error-block').addClass('help-block');\r\n },\r\n initInput: function() { \r\n pInitInput.apply(this);\r\n\r\n //for bs3 set default class `input-sm` to standard inputs\r\n var emptyInputClass = this.input.options.inputclass === null || this.input.options.inputclass === false;\r\n var defaultClass = 'input-sm';\r\n \r\n //bs3 add `form-control` class to standard inputs\r\n var stdtypes = 'text,select,textarea,password,email,url,tel,number,range,time,typeaheadjs'.split(','); \r\n if(~$.inArray(this.input.type, stdtypes)) {\r\n this.input.$input.addClass('form-control');\r\n if(emptyInputClass) {\r\n this.input.options.inputclass = defaultClass;\r\n this.input.$input.addClass(defaultClass);\r\n }\r\n } \r\n \r\n //apply bs3 size class also to buttons (to fit size of control)\r\n var $btn = this.$form.find('.editable-buttons');\r\n var classes = emptyInputClass ? [defaultClass] : this.input.options.inputclass.split(' ');\r\n for(var i=0; i<classes.length; i++) {\r\n // `btn-sm` is default now\r\n /*\r\n if(classes[i].toLowerCase() === 'input-sm') { \r\n $btn.find('button').addClass('btn-sm'); \r\n }\r\n */\r\n if(classes[i].toLowerCase() === 'input-lg') {\r\n $btn.find('button').removeClass('btn-sm').addClass('btn-lg'); \r\n }\r\n }\r\n }\r\n }); \r\n \r\n //buttons\r\n $.fn.editableform.buttons = \r\n '<button type=\"submit\" class=\"btn btn-primary btn-sm editable-submit\">'+\r\n '<i class=\"glyphicon glyphicon-ok\"></i>'+\r\n '</button>'+\r\n '<button type=\"button\" class=\"btn btn-default btn-sm editable-cancel\">'+\r\n '<i class=\"glyphicon glyphicon-remove\"></i>'+\r\n '</button>'; \r\n \r\n //error classes\r\n $.fn.editableform.errorGroupClass = 'has-error';\r\n $.fn.editableform.errorBlockClass = null; \r\n //engine\r\n $.fn.editableform.engine = 'bs3'; \r\n}(window.jQuery));\r\n/**\r\n* Editable Popover3 (for Bootstrap 3) \r\n* ---------------------\r\n* requires bootstrap-popover.js\r\n*/\r\n(function ($) {\r\n \"use strict\";\r\n\r\n //extend methods\r\n $.extend($.fn.editableContainer.Popup.prototype, {\r\n containerName: 'popover',\r\n containerDataName: 'bs.popover',\r\n innerCss: '.popover-content',\r\n defaults: $.fn.popover.Constructor.DEFAULTS,\r\n\r\n initContainer: function(){\r\n $.extend(this.containerOptions, {\r\n trigger: 'manual',\r\n selector: false,\r\n content: ' ',\r\n template: this.defaults.template\r\n });\r\n \r\n //as template property is used in inputs, hide it from popover\r\n var t;\r\n if(this.$element.data('template')) {\r\n t = this.$element.data('template');\r\n this.$element.removeData('template'); \r\n } \r\n \r\n this.call(this.containerOptions);\r\n \r\n if(t) {\r\n //restore data('template')\r\n this.$element.data('template', t); \r\n }\r\n }, \r\n \r\n /* show */\r\n innerShow: function () {\r\n this.call('show'); \r\n }, \r\n \r\n /* hide */\r\n innerHide: function () {\r\n this.call('hide'); \r\n }, \r\n \r\n /* destroy */\r\n innerDestroy: function() {\r\n this.call('destroy');\r\n }, \r\n \r\n setContainerOption: function(key, value) {\r\n this.container().options[key] = value; \r\n }, \r\n\r\n /**\r\n * move popover to new position. This function mainly copied from bootstrap-popover.\r\n */\r\n /*jshint laxcomma: true, eqeqeq: false*/\r\n setPosition: function () { \r\n\r\n (function() {\r\n /* \r\n var $tip = this.tip()\r\n , inside\r\n , pos\r\n , actualWidth\r\n , actualHeight\r\n , placement\r\n , tp\r\n , tpt\r\n , tpb\r\n , tpl\r\n , tpr;\r\n\r\n placement = typeof this.options.placement === 'function' ?\r\n this.options.placement.call(this, $tip[0], this.$element[0]) :\r\n this.options.placement;\r\n\r\n inside = /in/.test(placement);\r\n \r\n $tip\r\n // .detach()\r\n //vitalets: remove any placement class because otherwise they dont influence on re-positioning of visible popover\r\n .removeClass('top right bottom left')\r\n .css({ top: 0, left: 0, display: 'block' });\r\n // .insertAfter(this.$element);\r\n \r\n pos = this.getPosition(inside);\r\n\r\n actualWidth = $tip[0].offsetWidth;\r\n actualHeight = $tip[0].offsetHeight;\r\n\r\n placement = inside ? placement.split(' ')[1] : placement;\r\n\r\n tpb = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2};\r\n tpt = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2};\r\n tpl = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth};\r\n tpr = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width};\r\n\r\n switch (placement) {\r\n case 'bottom':\r\n if ((tpb.top + actualHeight) > ($(window).scrollTop() + $(window).height())) {\r\n if (tpt.top > $(window).scrollTop()) {\r\n placement = 'top';\r\n } else if ((tpr.left + actualWidth) < ($(window).scrollLeft() + $(window).width())) {\r\n placement = 'right';\r\n } else if (tpl.left > $(window).scrollLeft()) {\r\n placement = 'left';\r\n } else {\r\n placement = 'right';\r\n }\r\n }\r\n break;\r\n case 'top':\r\n if (tpt.top < $(window).scrollTop()) {\r\n if ((tpb.top + actualHeight) < ($(window).scrollTop() + $(window).height())) {\r\n placement = 'bottom';\r\n } else if ((tpr.left + actualWidth) < ($(window).scrollLeft() + $(window).width())) {\r\n placement = 'right';\r\n } else if (tpl.left > $(window).scrollLeft()) {\r\n placement = 'left';\r\n } else {\r\n placement = 'right';\r\n }\r\n }\r\n break;\r\n case 'left':\r\n if (tpl.left < $(window).scrollLeft()) {\r\n if ((tpr.left + actualWidth) < ($(window).scrollLeft() + $(window).width())) {\r\n placement = 'right';\r\n } else if (tpt.top > $(window).scrollTop()) {\r\n placement = 'top';\r\n } else if (tpt.top > $(window).scrollTop()) {\r\n placement = 'bottom';\r\n } else {\r\n placement = 'right';\r\n }\r\n }\r\n break;\r\n case 'right':\r\n if ((tpr.left + actualWidth) > ($(window).scrollLeft() + $(window).width())) {\r\n if (tpl.left > $(window).scrollLeft()) {\r\n placement = 'left';\r\n } else if (tpt.top > $(window).scrollTop()) {\r\n placement = 'top';\r\n } else if (tpt.top > $(window).scrollTop()) {\r\n placement = 'bottom';\r\n }\r\n }\r\n break;\r\n }\r\n\r\n switch (placement) {\r\n case 'bottom':\r\n tp = tpb;\r\n break;\r\n case 'top':\r\n tp = tpt;\r\n break;\r\n case 'left':\r\n tp = tpl;\r\n break;\r\n case 'right':\r\n tp = tpr;\r\n break;\r\n }\r\n\r\n $tip\r\n .offset(tp)\r\n .addClass(placement)\r\n .addClass('in');\r\n */\r\n \r\n \r\n var $tip = this.tip();\r\n \r\n var placement = typeof this.options.placement == 'function' ?\r\n this.options.placement.call(this, $tip[0], this.$element[0]) :\r\n this.options.placement; \r\n\r\n var autoToken = /\\s?auto?\\s?/i;\r\n var autoPlace = autoToken.test(placement);\r\n if (autoPlace) {\r\n placement = placement.replace(autoToken, '') || 'top';\r\n }\r\n \r\n \r\n var pos = this.getPosition();\r\n var actualWidth = $tip[0].offsetWidth;\r\n var actualHeight = $tip[0].offsetHeight;\r\n\r\n if (autoPlace) {\r\n var $parent = this.$element.parent();\r\n\r\n var orgPlacement = placement;\r\n var docScroll = document.documentElement.scrollTop || document.body.scrollTop;\r\n var parentWidth = this.options.container == 'body' ? window.innerWidth : $parent.outerWidth();\r\n var parentHeight = this.options.container == 'body' ? window.innerHeight : $parent.outerHeight();\r\n var parentLeft = this.options.container == 'body' ? 0 : $parent.offset().left;\r\n\r\n placement = placement == 'bottom' && pos.top + pos.height + actualHeight - docScroll > parentHeight ? 'top' :\r\n placement == 'top' && pos.top - docScroll - actualHeight < 0 ? 'bottom' :\r\n placement == 'right' && pos.right + actualWidth > parentWidth ? 'left' :\r\n placement == 'left' && pos.left - actualWidth < parentLeft ? 'right' :\r\n placement;\r\n\r\n $tip\r\n .removeClass(orgPlacement)\r\n .addClass(placement);\r\n }\r\n\r\n\r\n var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight);\r\n\r\n this.applyPlacement(calculatedOffset, placement); \r\n \r\n \r\n }).call(this.container());\r\n /*jshint laxcomma: false, eqeqeq: true*/ \r\n } \r\n });\r\n\r\n}(window.jQuery));\r\n\r\n/* =========================================================\r\n * bootstrap-datepicker.js\r\n * http://www.eyecon.ro/bootstrap-datepicker\r\n * =========================================================\r\n * Copyright 2012 Stefan Petre\r\n * Improvements by Andrew Rowls\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n * ========================================================= */\r\n\r\n(function( $ ) {\r\n\r\n\tfunction UTCDate(){\r\n\t\treturn new Date(Date.UTC.apply(Date, arguments));\r\n\t}\r\n\tfunction UTCToday(){\r\n\t\tvar today = new Date();\r\n\t\treturn UTCDate(today.getUTCFullYear(), today.getUTCMonth(), today.getUTCDate());\r\n\t}\r\n\r\n\t// Picker object\r\n\r\n\tvar Datepicker = function(element, options) {\r\n\t\tvar that = this;\r\n\r\n\t\tthis._process_options(options);\r\n\r\n\t\tthis.element = $(element);\r\n\t\tthis.isInline = false;\r\n\t\tthis.isInput = this.element.is('input');\r\n\t\tthis.component = this.element.is('.date') ? this.element.find('.add-on, .btn') : false;\r\n\t\tthis.hasInput = this.component && this.element.find('input').length;\r\n\t\tif(this.component && this.component.length === 0)\r\n\t\t\tthis.component = false;\r\n\r\n\t\tthis.picker = $(DPGlobal.template);\r\n\t\tthis._buildEvents();\r\n\t\tthis._attachEvents();\r\n\r\n\t\tif(this.isInline) {\r\n\t\t\tthis.picker.addClass('datepicker-inline').appendTo(this.element);\r\n\t\t} else {\r\n\t\t\tthis.picker.addClass('datepicker-dropdown dropdown-menu');\r\n\t\t}\r\n\r\n\t\tif (this.o.rtl){\r\n\t\t\tthis.picker.addClass('datepicker-rtl');\r\n\t\t\tthis.picker.find('.prev i, .next i')\r\n\t\t\t\t\t\t.toggleClass('icon-arrow-left icon-arrow-right');\r\n\t\t}\r\n\r\n\r\n\t\tthis.viewMode = this.o.startView;\r\n\r\n\t\tif (this.o.calendarWeeks)\r\n\t\t\tthis.picker.find('tfoot th.today')\r\n\t\t\t\t\t\t.attr('colspan', function(i, val){\r\n\t\t\t\t\t\t\treturn parseInt(val) + 1;\r\n\t\t\t\t\t\t});\r\n\r\n\t\tthis._allow_update = false;\r\n\r\n\t\tthis.setStartDate(this.o.startDate);\r\n\t\tthis.setEndDate(this.o.endDate);\r\n\t\tthis.setDaysOfWeekDisabled(this.o.daysOfWeekDisabled);\r\n\r\n\t\tthis.fillDow();\r\n\t\tthis.fillMonths();\r\n\r\n\t\tthis._allow_update = true;\r\n\r\n\t\tthis.update();\r\n\t\tthis.showMode();\r\n\r\n\t\tif(this.isInline) {\r\n\t\t\tthis.show();\r\n\t\t}\r\n\t};\r\n\r\n\tDatepicker.prototype = {\r\n\t\tconstructor: Datepicker,\r\n\r\n\t\t_process_options: function(opts){\r\n\t\t\t// Store raw options for reference\r\n\t\t\tthis._o = $.extend({}, this._o, opts);\r\n\t\t\t// Processed options\r\n\t\t\tvar o = this.o = $.extend({}, this._o);\r\n\r\n\t\t\t// Check if \"de-DE\" style date is available, if not language should\r\n\t\t\t// fallback to 2 letter code eg \"de\"\r\n\t\t\tvar lang = o.language;\r\n\t\t\tif (!dates[lang]) {\r\n\t\t\t\tlang = lang.split('-')[0];\r\n\t\t\t\tif (!dates[lang])\r\n\t\t\t\t\tlang = defaults.language;\r\n\t\t\t}\r\n\t\t\to.language = lang;\r\n\r\n\t\t\tswitch(o.startView){\r\n\t\t\t\tcase 2:\r\n\t\t\t\tcase 'decade':\r\n\t\t\t\t\to.startView = 2;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 1:\r\n\t\t\t\tcase 'year':\r\n\t\t\t\t\to.startView = 1;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\to.startView = 0;\r\n\t\t\t}\r\n\r\n\t\t\tswitch (o.minViewMode) {\r\n\t\t\t\tcase 1:\r\n\t\t\t\tcase 'months':\r\n\t\t\t\t\to.minViewMode = 1;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 2:\r\n\t\t\t\tcase 'years':\r\n\t\t\t\t\to.minViewMode = 2;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\to.minViewMode = 0;\r\n\t\t\t}\r\n\r\n\t\t\to.startView = Math.max(o.startView, o.minViewMode);\r\n\r\n\t\t\to.weekStart %= 7;\r\n\t\t\to.weekEnd = ((o.weekStart + 6) % 7);\r\n\r\n\t\t\tvar format = DPGlobal.parseFormat(o.format)\r\n\t\t\tif (o.startDate !== -Infinity) {\r\n\t\t\t\to.startDate = DPGlobal.parseDate(o.startDate, format, o.language);\r\n\t\t\t}\r\n\t\t\tif (o.endDate !== Infinity) {\r\n\t\t\t\to.endDate = DPGlobal.parseDate(o.endDate, format, o.language);\r\n\t\t\t}\r\n\r\n\t\t\to.daysOfWeekDisabled = o.daysOfWeekDisabled||[];\r\n\t\t\tif (!$.isArray(o.daysOfWeekDisabled))\r\n\t\t\t\to.daysOfWeekDisabled = o.daysOfWeekDisabled.split(/[,\\s]*/);\r\n\t\t\to.daysOfWeekDisabled = $.map(o.daysOfWeekDisabled, function (d) {\r\n\t\t\t\treturn parseInt(d, 10);\r\n\t\t\t});\r\n\t\t},\r\n\t\t_events: [],\r\n\t\t_secondaryEvents: [],\r\n\t\t_applyEvents: function(evs){\r\n\t\t\tfor (var i=0, el, ev; i<evs.length; i++){\r\n\t\t\t\tel = evs[i][0];\r\n\t\t\t\tev = evs[i][1];\r\n\t\t\t\tel.on(ev);\r\n\t\t\t}\r\n\t\t},\r\n\t\t_unapplyEvents: function(evs){\r\n\t\t\tfor (var i=0, el, ev; i<evs.length; i++){\r\n\t\t\t\tel = evs[i][0];\r\n\t\t\t\tev = evs[i][1];\r\n\t\t\t\tel.off(ev);\r\n\t\t\t}\r\n\t\t},\r\n\t\t_buildEvents: function(){\r\n\t\t\tif (this.isInput) { // single input\r\n\t\t\t\tthis._events = [\r\n\t\t\t\t\t[this.element, {\r\n\t\t\t\t\t\tfocus: $.proxy(this.show, this),\r\n\t\t\t\t\t\tkeyup: $.proxy(this.update, this),\r\n\t\t\t\t\t\tkeydown: $.proxy(this.keydown, this)\r\n\t\t\t\t\t}]\r\n\t\t\t\t];\r\n\t\t\t}\r\n\t\t\telse if (this.component && this.hasInput){ // component: input + button\r\n\t\t\t\tthis._events = [\r\n\t\t\t\t\t// For components that are not readonly, allow keyboard nav\r\n\t\t\t\t\t[this.element.find('input'), {\r\n\t\t\t\t\t\tfocus: $.proxy(this.show, this),\r\n\t\t\t\t\t\tkeyup: $.proxy(this.update, this),\r\n\t\t\t\t\t\tkeydown: $.proxy(this.keydown, this)\r\n\t\t\t\t\t}],\r\n\t\t\t\t\t[this.component, {\r\n\t\t\t\t\t\tclick: $.proxy(this.show, this)\r\n\t\t\t\t\t}]\r\n\t\t\t\t];\r\n\t\t\t}\r\n\t\t\telse if (this.element.is('div')) { // inline datepicker\r\n\t\t\t\tthis.isInline = true;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis._events = [\r\n\t\t\t\t\t[this.element, {\r\n\t\t\t\t\t\tclick: $.proxy(this.show, this)\r\n\t\t\t\t\t}]\r\n\t\t\t\t];\r\n\t\t\t}\r\n\r\n\t\t\tthis._secondaryEvents = [\r\n\t\t\t\t[this.picker, {\r\n\t\t\t\t\tclick: $.proxy(this.click, this)\r\n\t\t\t\t}],\r\n\t\t\t\t[$(window), {\r\n\t\t\t\t\tresize: $.proxy(this.place, this)\r\n\t\t\t\t}],\r\n\t\t\t\t[$(document), {\r\n\t\t\t\t\tmousedown: $.proxy(function (e) {\r\n\t\t\t\t\t\t// Clicked outside the datepicker, hide it\r\n\t\t\t\t\t\tif (!(\r\n\t\t\t\t\t\t\tthis.element.is(e.target) ||\r\n\t\t\t\t\t\t\tthis.element.find(e.target).size() ||\r\n\t\t\t\t\t\t\tthis.picker.is(e.target) ||\r\n\t\t\t\t\t\t\tthis.picker.find(e.target).size()\r\n\t\t\t\t\t\t)) {\r\n\t\t\t\t\t\t\tthis.hide();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, this)\r\n\t\t\t\t}]\r\n\t\t\t];\r\n\t\t},\r\n\t\t_attachEvents: function(){\r\n\t\t\tthis._detachEvents();\r\n\t\t\tthis._applyEvents(this._events);\r\n\t\t},\r\n\t\t_detachEvents: function(){\r\n\t\t\tthis._unapplyEvents(this._events);\r\n\t\t},\r\n\t\t_attachSecondaryEvents: function(){\r\n\t\t\tthis._detachSecondaryEvents();\r\n\t\t\tthis._applyEvents(this._secondaryEvents);\r\n\t\t},\r\n\t\t_detachSecondaryEvents: function(){\r\n\t\t\tthis._unapplyEvents(this._secondaryEvents);\r\n\t\t},\r\n\t\t_trigger: function(event, altdate){\r\n\t\t\tvar date = altdate || this.date,\r\n\t\t\t\tlocal_date = new Date(date.getTime() + (date.getTimezoneOffset()*60000));\r\n\r\n\t\t\tthis.element.trigger({\r\n\t\t\t\ttype: event,\r\n\t\t\t\tdate: local_date,\r\n\t\t\t\tformat: $.proxy(function(altformat){\r\n\t\t\t\t\tvar format = altformat || this.o.format;\r\n\t\t\t\t\treturn DPGlobal.formatDate(date, format, this.o.language);\r\n\t\t\t\t}, this)\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\tshow: function(e) {\r\n\t\t\tif (!this.isInline)\r\n\t\t\t\tthis.picker.appendTo('body');\r\n\t\t\tthis.picker.show();\r\n\t\t\tthis.height = this.component ? this.component.outerHeight() : this.element.outerHeight();\r\n\t\t\tthis.place();\r\n\t\t\tthis._attachSecondaryEvents();\r\n\t\t\tif (e) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\t\t\tthis._trigger('show');\r\n\t\t},\r\n\r\n\t\thide: function(e){\r\n\t\t\tif(this.isInline) return;\r\n\t\t\tif (!this.picker.is(':visible')) return;\r\n\t\t\tthis.picker.hide().detach();\r\n\t\t\tthis._detachSecondaryEvents();\r\n\t\t\tthis.viewMode = this.o.startView;\r\n\t\t\tthis.showMode();\r\n\r\n\t\t\tif (\r\n\t\t\t\tthis.o.forceParse &&\r\n\t\t\t\t(\r\n\t\t\t\t\tthis.isInput && this.element.val() ||\r\n\t\t\t\t\tthis.hasInput && this.element.find('input').val()\r\n\t\t\t\t)\r\n\t\t\t)\r\n\t\t\t\tthis.setValue();\r\n\t\t\tthis._trigger('hide');\r\n\t\t},\r\n\r\n\t\tremove: function() {\r\n\t\t\tthis.hide();\r\n\t\t\tthis._detachEvents();\r\n\t\t\tthis._detachSecondaryEvents();\r\n\t\t\tthis.picker.remove();\r\n\t\t\tdelete this.element.data().datepicker;\r\n\t\t\tif (!this.isInput) {\r\n\t\t\t\tdelete this.element.data().date;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tgetDate: function() {\r\n\t\t\tvar d = this.getUTCDate();\r\n\t\t\treturn new Date(d.getTime() + (d.getTimezoneOffset()*60000));\r\n\t\t},\r\n\r\n\t\tgetUTCDate: function() {\r\n\t\t\treturn this.date;\r\n\t\t},\r\n\r\n\t\tsetDate: function(d) {\r\n\t\t\tthis.setUTCDate(new Date(d.getTime() - (d.getTimezoneOffset()*60000)));\r\n\t\t},\r\n\r\n\t\tsetUTCDate: function(d) {\r\n\t\t\tthis.date = d;\r\n\t\t\tthis.setValue();\r\n\t\t},\r\n\r\n\t\tsetValue: function() {\r\n\t\t\tvar formatted = this.getFormattedDate();\r\n\t\t\tif (!this.isInput) {\r\n\t\t\t\tif (this.component){\r\n\t\t\t\t\tthis.element.find('input').val(formatted);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tthis.element.val(formatted);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tgetFormattedDate: function(format) {\r\n\t\t\tif (format === undefined)\r\n\t\t\t\tformat = this.o.format;\r\n\t\t\treturn DPGlobal.formatDate(this.date, format, this.o.language);\r\n\t\t},\r\n\r\n\t\tsetStartDate: function(startDate){\r\n\t\t\tthis._process_options({startDate: startDate});\r\n\t\t\tthis.update();\r\n\t\t\tthis.updateNavArrows();\r\n\t\t},\r\n\r\n\t\tsetEndDate: function(endDate){\r\n\t\t\tthis._process_options({endDate: endDate});\r\n\t\t\tthis.update();\r\n\t\t\tthis.updateNavArrows();\r\n\t\t},\r\n\r\n\t\tsetDaysOfWeekDisabled: function(daysOfWeekDisabled){\r\n\t\t\tthis._process_options({daysOfWeekDisabled: daysOfWeekDisabled});\r\n\t\t\tthis.update();\r\n\t\t\tthis.updateNavArrows();\r\n\t\t},\r\n\r\n\t\tplace: function(){\r\n\t\t\t\t\t\tif(this.isInline) return;\r\n\t\t\tvar zIndex = parseInt(this.element.parents().filter(function() {\r\n\t\t\t\t\t\t\treturn $(this).css('z-index') != 'auto';\r\n\t\t\t\t\t\t}).first().css('z-index'))+10;\r\n\t\t\tvar offset = this.component ? this.component.parent().offset() : this.element.offset();\r\n\t\t\tvar height = this.component ? this.component.outerHeight(true) : this.element.outerHeight(true);\r\n\t\t\tthis.picker.css({\r\n\t\t\t\ttop: offset.top + height,\r\n\t\t\t\tleft: offset.left,\r\n\t\t\t\tzIndex: zIndex\r\n\t\t\t});\r\n\t\t},\r\n\r\n\t\t_allow_update: true,\r\n\t\tupdate: function(){\r\n\t\t\tif (!this._allow_update) return;\r\n\r\n\t\t\tvar date, fromArgs = false;\r\n\t\t\tif(arguments && arguments.length && (typeof arguments[0] === 'string' || arguments[0] instanceof Date)) {\r\n\t\t\t\tdate = arguments[0];\r\n\t\t\t\tfromArgs = true;\r\n\t\t\t} else {\r\n\t\t\t\tdate = this.isInput ? this.element.val() : this.element.data('date') || this.element.find('input').val();\r\n\t\t\t\tdelete this.element.data().date;\r\n\t\t\t}\r\n\r\n\t\t\tthis.date = DPGlobal.parseDate(date, this.o.format, this.o.language);\r\n\r\n\t\t\tif(fromArgs) this.setValue();\r\n\r\n\t\t\tif (this.date < this.o.startDate) {\r\n\t\t\t\tthis.viewDate = new Date(this.o.startDate);\r\n\t\t\t} else if (this.date > this.o.endDate) {\r\n\t\t\t\tthis.viewDate = new Date(this.o.endDate);\r\n\t\t\t} else {\r\n\t\t\t\tthis.viewDate = new Date(this.date);\r\n\t\t\t}\r\n\t\t\tthis.fill();\r\n\t\t},\r\n\r\n\t\tfillDow: function(){\r\n\t\t\tvar dowCnt = this.o.weekStart,\r\n\t\t\thtml = '<tr>';\r\n\t\t\tif(this.o.calendarWeeks){\r\n\t\t\t\tvar cell = '<th class=\"cw\"> </th>';\r\n\t\t\t\thtml += cell;\r\n\t\t\t\tthis.picker.find('.datepicker-days thead tr:first-child').prepend(cell);\r\n\t\t\t}\r\n\t\t\twhile (dowCnt < this.o.weekStart + 7) {\r\n\t\t\t\thtml += '<th class=\"dow\">'+dates[this.o.language].daysMin[(dowCnt++)%7]+'</th>';\r\n\t\t\t}\r\n\t\t\thtml += '</tr>';\r\n\t\t\tthis.picker.find('.datepicker-days thead').append(html);\r\n\t\t},\r\n\r\n\t\tfillMonths: function(){\r\n\t\t\tvar html = '',\r\n\t\t\ti = 0;\r\n\t\t\twhile (i < 12) {\r\n\t\t\t\thtml += '<span class=\"month\">'+dates[this.o.language].monthsShort[i++]+'</span>';\r\n\t\t\t}\r\n\t\t\tthis.picker.find('.datepicker-months td').html(html);\r\n\t\t},\r\n\r\n\t\tsetRange: function(range){\r\n\t\t\tif (!range || !range.length)\r\n\t\t\t\tdelete this.range;\r\n\t\t\telse\r\n\t\t\t\tthis.range = $.map(range, function(d){ return d.valueOf(); });\r\n\t\t\tthis.fill();\r\n\t\t},\r\n\r\n\t\tgetClassNames: function(date){\r\n\t\t\tvar cls = [],\r\n\t\t\t\tyear = this.viewDate.getUTCFullYear(),\r\n\t\t\t\tmonth = this.viewDate.getUTCMonth(),\r\n\t\t\t\tcurrentDate = this.date.valueOf(),\r\n\t\t\t\ttoday = new Date();\r\n\t\t\tif (date.getUTCFullYear() < year || (date.getUTCFullYear() == year && date.getUTCMonth() < month)) {\r\n\t\t\t\tcls.push('old');\r\n\t\t\t} else if (date.getUTCFullYear() > year || (date.getUTCFullYear() == year && date.getUTCMonth() > month)) {\r\n\t\t\t\tcls.push('new');\r\n\t\t\t}\r\n\t\t\t// Compare internal UTC date with local today, not UTC today\r\n\t\t\tif (this.o.todayHighlight &&\r\n\t\t\t\tdate.getUTCFullYear() == today.getFullYear() &&\r\n\t\t\t\tdate.getUTCMonth() == today.getMonth() &&\r\n\t\t\t\tdate.getUTCDate() == today.getDate()) {\r\n\t\t\t\tcls.push('today');\r\n\t\t\t}\r\n\t\t\tif (currentDate && date.valueOf() == currentDate) {\r\n\t\t\t\tcls.push('active');\r\n\t\t\t}\r\n\t\t\tif (date.valueOf() < this.o.startDate || date.valueOf() > this.o.endDate ||\r\n\t\t\t\t$.inArray(date.getUTCDay(), this.o.daysOfWeekDisabled) !== -1) {\r\n\t\t\t\tcls.push('disabled');\r\n\t\t\t}\r\n\t\t\tif (this.range){\r\n\t\t\t\tif (date > this.range[0] && date < this.range[this.range.length-1]){\r\n\t\t\t\t\tcls.push('range');\r\n\t\t\t\t}\r\n\t\t\t\tif ($.inArray(date.valueOf(), this.range) != -1){\r\n\t\t\t\t\tcls.push('selected');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn cls;\r\n\t\t},\r\n\r\n\t\tfill: function() {\r\n\t\t\tvar d = new Date(this.viewDate),\r\n\t\t\t\tyear = d.getUTCFullYear(),\r\n\t\t\t\tmonth = d.getUTCMonth(),\r\n\t\t\t\tstartYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity,\r\n\t\t\t\tstartMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity,\r\n\t\t\t\tendYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity,\r\n\t\t\t\tendMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity,\r\n\t\t\t\tcurrentDate = this.date && this.date.valueOf(),\r\n\t\t\t\ttooltip;\r\n\t\t\tthis.picker.find('.datepicker-days thead th.datepicker-switch')\r\n\t\t\t\t\t\t.text(dates[this.o.language].months[month]+' '+year);\r\n\t\t\tthis.picker.find('tfoot th.today')\r\n\t\t\t\t\t\t.text(dates[this.o.language].today)\r\n\t\t\t\t\t\t.toggle(this.o.todayBtn !== false);\r\n\t\t\tthis.picker.find('tfoot th.clear')\r\n\t\t\t\t\t\t.text(dates[this.o.language].clear)\r\n\t\t\t\t\t\t.toggle(this.o.clearBtn !== false);\r\n\t\t\tthis.updateNavArrows();\r\n\t\t\tthis.fillMonths();\r\n\t\t\tvar prevMonth = UTCDate(year, month-1, 28,0,0,0,0),\r\n\t\t\t\tday = DPGlobal.getDaysInMonth(prevMonth.getUTCFullYear(), prevMonth.getUTCMonth());\r\n\t\t\tprevMonth.setUTCDate(day);\r\n\t\t\tprevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.o.weekStart + 7)%7);\r\n\t\t\tvar nextMonth = new Date(prevMonth);\r\n\t\t\tnextMonth.setUTCDate(nextMonth.getUTCDate() + 42);\r\n\t\t\tnextMonth = nextMonth.valueOf();\r\n\t\t\tvar html = [];\r\n\t\t\tvar clsName;\r\n\t\t\twhile(prevMonth.valueOf() < nextMonth) {\r\n\t\t\t\tif (prevMonth.getUTCDay() == this.o.weekStart) {\r\n\t\t\t\t\thtml.push('<tr>');\r\n\t\t\t\t\tif(this.o.calendarWeeks){\r\n\t\t\t\t\t\t// ISO 8601: First week contains first thursday.\r\n\t\t\t\t\t\t// ISO also states week starts on Monday, but we can be more abstract here.\r\n\t\t\t\t\t\tvar\r\n\t\t\t\t\t\t\t// Start of current week: based on weekstart/current date\r\n\t\t\t\t\t\t\tws = new Date(+prevMonth + (this.o.weekStart - prevMonth.getUTCDay() - 7) % 7 * 864e5),\r\n\t\t\t\t\t\t\t// Thursday of this week\r\n\t\t\t\t\t\t\tth = new Date(+ws + (7 + 4 - ws.getUTCDay()) % 7 * 864e5),\r\n\t\t\t\t\t\t\t// First Thursday of year, year from thursday\r\n\t\t\t\t\t\t\tyth = new Date(+(yth = UTCDate(th.getUTCFullYear(), 0, 1)) + (7 + 4 - yth.getUTCDay())%7*864e5),\r\n\t\t\t\t\t\t\t// Calendar week: ms between thursdays, div ms per day, div 7 days\r\n\t\t\t\t\t\t\tcalWeek = (th - yth) / 864e5 / 7 + 1;\r\n\t\t\t\t\t\thtml.push('<td class=\"cw\">'+ calWeek +'</td>');\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tclsName = this.getClassNames(prevMonth);\r\n\t\t\t\tclsName.push('day');\r\n\r\n\t\t\t\tvar before = this.o.beforeShowDay(prevMonth);\r\n\t\t\t\tif (before === undefined)\r\n\t\t\t\t\tbefore = {};\r\n\t\t\t\telse if (typeof(before) === 'boolean')\r\n\t\t\t\t\tbefore = {enabled: before};\r\n\t\t\t\telse if (typeof(before) === 'string')\r\n\t\t\t\t\tbefore = {classes: before};\r\n\t\t\t\tif (before.enabled === false)\r\n\t\t\t\t\tclsName.push('disabled');\r\n\t\t\t\tif (before.classes)\r\n\t\t\t\t\tclsName = clsName.concat(before.classes.split(/\\s+/));\r\n\t\t\t\tif (before.tooltip)\r\n\t\t\t\t\ttooltip = before.tooltip;\r\n\r\n\t\t\t\tclsName = $.unique(clsName);\r\n\t\t\t\thtml.push('<td class=\"'+clsName.join(' ')+'\"' + (tooltip ? ' title=\"'+tooltip+'\"' : '') + '>'+prevMonth.getUTCDate() + '</td>');\r\n\t\t\t\tif (prevMonth.getUTCDay() == this.o.weekEnd) {\r\n\t\t\t\t\thtml.push('</tr>');\r\n\t\t\t\t}\r\n\t\t\t\tprevMonth.setUTCDate(prevMonth.getUTCDate()+1);\r\n\t\t\t}\r\n\t\t\tthis.picker.find('.datepicker-days tbody').empty().append(html.join(''));\r\n\t\t\tvar currentYear = this.date && this.date.getUTCFullYear();\r\n\r\n\t\t\tvar months = this.picker.find('.datepicker-months')\r\n\t\t\t\t\t\t.find('th:eq(1)')\r\n\t\t\t\t\t\t\t.text(year)\r\n\t\t\t\t\t\t\t.end()\r\n\t\t\t\t\t\t.find('span').removeClass('active');\r\n\t\t\tif (currentYear && currentYear == year) {\r\n\t\t\t\tmonths.eq(this.date.getUTCMonth()).addClass('active');\r\n\t\t\t}\r\n\t\t\tif (year < startYear || year > endYear) {\r\n\t\t\t\tmonths.addClass('disabled');\r\n\t\t\t}\r\n\t\t\tif (year == startYear) {\r\n\t\t\t\tmonths.slice(0, startMonth).addClass('disabled');\r\n\t\t\t}\r\n\t\t\tif (year == endYear) {\r\n\t\t\t\tmonths.slice(endMonth+1).addClass('disabled');\r\n\t\t\t}\r\n\r\n\t\t\thtml = '';\r\n\t\t\tyear = parseInt(year/10, 10) * 10;\r\n\t\t\tvar yearCont = this.picker.find('.datepicker-years')\r\n\t\t\t\t\t\t\t\t.find('th:eq(1)')\r\n\t\t\t\t\t\t\t\t\t.text(year + '-' + (year + 9))\r\n\t\t\t\t\t\t\t\t\t.end()\r\n\t\t\t\t\t\t\t\t.find('td');\r\n\t\t\tyear -= 1;\r\n\t\t\tfor (var i = -1; i < 11; i++) {\r\n\t\t\t\thtml += '<span class=\"year'+(i == -1 ? ' old' : i == 10 ? ' new' : '')+(currentYear == year ? ' active' : '')+(year < startYear || year > endYear ? ' disabled' : '')+'\">'+year+'</span>';\r\n\t\t\t\tyear += 1;\r\n\t\t\t}\r\n\t\t\tyearCont.html(html);\r\n\t\t},\r\n\r\n\t\tupdateNavArrows: function() {\r\n\t\t\tif (!this._allow_update) return;\r\n\r\n\t\t\tvar d = new Date(this.viewDate),\r\n\t\t\t\tyear = d.getUTCFullYear(),\r\n\t\t\t\tmonth = d.getUTCMonth();\r\n\t\t\tswitch (this.viewMode) {\r\n\t\t\t\tcase 0:\r\n\t\t\t\t\tif (this.o.startDate !== -Infinity && year <= this.o.startDate.getUTCFullYear() && month <= this.o.startDate.getUTCMonth()) {\r\n\t\t\t\t\t\tthis.picker.find('.prev').css({visibility: 'hidden'});\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.picker.find('.prev').css({visibility: 'visible'});\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (this.o.endDate !== Infinity && year >= this.o.endDate.getUTCFullYear() && month >= this.o.endDate.getUTCMonth()) {\r\n\t\t\t\t\t\tthis.picker.find('.next').css({visibility: 'hidden'});\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.picker.find('.next').css({visibility: 'visible'});\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 1:\r\n\t\t\t\tcase 2:\r\n\t\t\t\t\tif (this.o.startDate !== -Infinity && year <= this.o.startDate.getUTCFullYear()) {\r\n\t\t\t\t\t\tthis.picker.find('.prev').css({visibility: 'hidden'});\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.picker.find('.prev').css({visibility: 'visible'});\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (this.o.endDate !== Infinity && year >= this.o.endDate.getUTCFullYear()) {\r\n\t\t\t\t\t\tthis.picker.find('.next').css({visibility: 'hidden'});\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.picker.find('.next').css({visibility: 'visible'});\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tclick: function(e) {\r\n\t\t\te.preventDefault();\r\n\t\t\tvar target = $(e.target).closest('span, td, th');\r\n\t\t\tif (target.length == 1) {\r\n\t\t\t\tswitch(target[0].nodeName.toLowerCase()) {\r\n\t\t\t\t\tcase 'th':\r\n\t\t\t\t\t\tswitch(target[0].className) {\r\n\t\t\t\t\t\t\tcase 'datepicker-switch':\r\n\t\t\t\t\t\t\t\tthis.showMode(1);\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tcase 'prev':\r\n\t\t\t\t\t\t\tcase 'next':\r\n\t\t\t\t\t\t\t\tvar dir = DPGlobal.modes[this.viewMode].navStep * (target[0].className == 'prev' ? -1 : 1);\r\n\t\t\t\t\t\t\t\tswitch(this.viewMode){\r\n\t\t\t\t\t\t\t\t\tcase 0:\r\n\t\t\t\t\t\t\t\t\t\tthis.viewDate = this.moveMonth(this.viewDate, dir);\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\tcase 1:\r\n\t\t\t\t\t\t\t\t\tcase 2:\r\n\t\t\t\t\t\t\t\t\t\tthis.viewDate = this.moveYear(this.viewDate, dir);\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tthis.fill();\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tcase 'today':\r\n\t\t\t\t\t\t\t\tvar date = new Date();\r\n\t\t\t\t\t\t\t\tdate = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\r\n\r\n\t\t\t\t\t\t\t\tthis.showMode(-2);\r\n\t\t\t\t\t\t\t\tvar which = this.o.todayBtn == 'linked' ? null : 'view';\r\n\t\t\t\t\t\t\t\tthis._setDate(date, which);\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tcase 'clear':\r\n\t\t\t\t\t\t\t\tvar element;\r\n\t\t\t\t\t\t\t\tif (this.isInput)\r\n\t\t\t\t\t\t\t\t\telement = this.element;\r\n\t\t\t\t\t\t\t\telse if (this.component)\r\n\t\t\t\t\t\t\t\t\telement = this.element.find('input');\r\n\t\t\t\t\t\t\t\tif (element)\r\n\t\t\t\t\t\t\t\t\telement.val(\"\").change();\r\n\t\t\t\t\t\t\t\tthis._trigger('changeDate');\r\n\t\t\t\t\t\t\t\tthis.update();\r\n\t\t\t\t\t\t\t\tif (this.o.autoclose)\r\n\t\t\t\t\t\t\t\t\tthis.hide();\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'span':\r\n\t\t\t\t\t\tif (!target.is('.disabled')) {\r\n\t\t\t\t\t\t\tthis.viewDate.setUTCDate(1);\r\n\t\t\t\t\t\t\tif (target.is('.month')) {\r\n\t\t\t\t\t\t\t\tvar day = 1;\r\n\t\t\t\t\t\t\t\tvar month = target.parent().find('span').index(target);\r\n\t\t\t\t\t\t\t\tvar year = this.viewDate.getUTCFullYear();\r\n\t\t\t\t\t\t\t\tthis.viewDate.setUTCMonth(month);\r\n\t\t\t\t\t\t\t\tthis._trigger('changeMonth', this.viewDate);\r\n\t\t\t\t\t\t\t\tif (this.o.minViewMode === 1) {\r\n\t\t\t\t\t\t\t\t\tthis._setDate(UTCDate(year, month, day,0,0,0,0));\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tvar year = parseInt(target.text(), 10)||0;\r\n\t\t\t\t\t\t\t\tvar day = 1;\r\n\t\t\t\t\t\t\t\tvar month = 0;\r\n\t\t\t\t\t\t\t\tthis.viewDate.setUTCFullYear(year);\r\n\t\t\t\t\t\t\t\tthis._trigger('changeYear', this.viewDate);\r\n\t\t\t\t\t\t\t\tif (this.o.minViewMode === 2) {\r\n\t\t\t\t\t\t\t\t\tthis._setDate(UTCDate(year, month, day,0,0,0,0));\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tthis.showMode(-1);\r\n\t\t\t\t\t\t\tthis.fill();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'td':\r\n\t\t\t\t\t\tif (target.is('.day') && !target.is('.disabled')){\r\n\t\t\t\t\t\t\tvar day = parseInt(target.text(), 10)||1;\r\n\t\t\t\t\t\t\tvar year = this.viewDate.getUTCFullYear(),\r\n\t\t\t\t\t\t\t\tmonth = this.viewDate.getUTCMonth();\r\n\t\t\t\t\t\t\tif (target.is('.old')) {\r\n\t\t\t\t\t\t\t\tif (month === 0) {\r\n\t\t\t\t\t\t\t\t\tmonth = 11;\r\n\t\t\t\t\t\t\t\t\tyear -= 1;\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tmonth -= 1;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} else if (target.is('.new')) {\r\n\t\t\t\t\t\t\t\tif (month == 11) {\r\n\t\t\t\t\t\t\t\t\tmonth = 0;\r\n\t\t\t\t\t\t\t\t\tyear += 1;\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tmonth += 1;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tthis._setDate(UTCDate(year, month, day,0,0,0,0));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t_setDate: function(date, which){\r\n\t\t\tif (!which || which == 'date')\r\n\t\t\t\tthis.date = new Date(date);\r\n\t\t\tif (!which || which == 'view')\r\n\t\t\t\tthis.viewDate = new Date(date);\r\n\t\t\tthis.fill();\r\n\t\t\tthis.setValue();\r\n\t\t\tthis._trigger('changeDate');\r\n\t\t\tvar element;\r\n\t\t\tif (this.isInput) {\r\n\t\t\t\telement = this.element;\r\n\t\t\t} else if (this.component){\r\n\t\t\t\telement = this.element.find('input');\r\n\t\t\t}\r\n\t\t\tif (element) {\r\n\t\t\t\telement.change();\r\n\t\t\t\tif (this.o.autoclose && (!which || which == 'date')) {\r\n\t\t\t\t\tthis.hide();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tmoveMonth: function(date, dir){\r\n\t\t\tif (!dir) return date;\r\n\t\t\tvar new_date = new Date(date.valueOf()),\r\n\t\t\t\tday = new_date.getUTCDate(),\r\n\t\t\t\tmonth = new_date.getUTCMonth(),\r\n\t\t\t\tmag = Math.abs(dir),\r\n\t\t\t\tnew_month, test;\r\n\t\t\tdir = dir > 0 ? 1 : -1;\r\n\t\t\tif (mag == 1){\r\n\t\t\t\ttest = dir == -1\r\n\t\t\t\t\t// If going back one month, make sure month is not current month\r\n\t\t\t\t\t// (eg, Mar 31 -> Feb 31 == Feb 28, not Mar 02)\r\n\t\t\t\t\t? function(){ return new_date.getUTCMonth() == month; }\r\n\t\t\t\t\t// If going forward one month, make sure month is as expected\r\n\t\t\t\t\t// (eg, Jan 31 -> Feb 31 == Feb 28, not Mar 02)\r\n\t\t\t\t\t: function(){ return new_date.getUTCMonth() != new_month; };\r\n\t\t\t\tnew_month = month + dir;\r\n\t\t\t\tnew_date.setUTCMonth(new_month);\r\n\t\t\t\t// Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11\r\n\t\t\t\tif (new_month < 0 || new_month > 11)\r\n\t\t\t\t\tnew_month = (new_month + 12) % 12;\r\n\t\t\t} else {\r\n\t\t\t\t// For magnitudes >1, move one month at a time...\r\n\t\t\t\tfor (var i=0; i<mag; i++)\r\n\t\t\t\t\t// ...which might decrease the day (eg, Jan 31 to Feb 28, etc)...\r\n\t\t\t\t\tnew_date = this.moveMonth(new_date, dir);\r\n\t\t\t\t// ...then reset the day, keeping it in the new month\r\n\t\t\t\tnew_month = new_date.getUTCMonth();\r\n\t\t\t\tnew_date.setUTCDate(day);\r\n\t\t\t\ttest = function(){ return new_month != new_date.getUTCMonth(); };\r\n\t\t\t}\r\n\t\t\t// Common date-resetting loop -- if date is beyond end of month, make it\r\n\t\t\t// end of month\r\n\t\t\twhile (test()){\r\n\t\t\t\tnew_date.setUTCDate(--day);\r\n\t\t\t\tnew_date.setUTCMonth(new_month);\r\n\t\t\t}\r\n\t\t\treturn new_date;\r\n\t\t},\r\n\r\n\t\tmoveYear: function(date, dir){\r\n\t\t\treturn this.moveMonth(date, dir*12);\r\n\t\t},\r\n\r\n\t\tdateWithinRange: function(date){\r\n\t\t\treturn date >= this.o.startDate && date <= this.o.endDate;\r\n\t\t},\r\n\r\n\t\tkeydown: function(e){\r\n\t\t\tif (this.picker.is(':not(:visible)')){\r\n\t\t\t\tif (e.keyCode == 27) // allow escape to hide and re-show picker\r\n\t\t\t\t\tthis.show();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tvar dateChanged = false,\r\n\t\t\t\tdir, day, month,\r\n\t\t\t\tnewDate, newViewDate;\r\n\t\t\tswitch(e.keyCode){\r\n\t\t\t\tcase 27: // escape\r\n\t\t\t\t\tthis.hide();\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 37: // left\r\n\t\t\t\tcase 39: // right\r\n\t\t\t\t\tif (!this.o.keyboardNavigation) break;\r\n\t\t\t\t\tdir = e.keyCode == 37 ? -1 : 1;\r\n\t\t\t\t\tif (e.ctrlKey){\r\n\t\t\t\t\t\tnewDate = this.moveYear(this.date, dir);\r\n\t\t\t\t\t\tnewViewDate = this.moveYear(this.viewDate, dir);\r\n\t\t\t\t\t} else if (e.shiftKey){\r\n\t\t\t\t\t\tnewDate = this.moveMonth(this.date, dir);\r\n\t\t\t\t\t\tnewViewDate = this.moveMonth(this.viewDate, dir);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tnewDate = new Date(this.date);\r\n\t\t\t\t\t\tnewDate.setUTCDate(this.date.getUTCDate() + dir);\r\n\t\t\t\t\t\tnewViewDate = new Date(this.viewDate);\r\n\t\t\t\t\t\tnewViewDate.setUTCDate(this.viewDate.getUTCDate() + dir);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (this.dateWithinRange(newDate)){\r\n\t\t\t\t\t\tthis.date = newDate;\r\n\t\t\t\t\t\tthis.viewDate = newViewDate;\r\n\t\t\t\t\t\tthis.setValue();\r\n\t\t\t\t\t\tthis.update();\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\tdateChanged = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 38: // up\r\n\t\t\t\tcase 40: // down\r\n\t\t\t\t\tif (!this.o.keyboardNavigation) break;\r\n\t\t\t\t\tdir = e.keyCode == 38 ? -1 : 1;\r\n\t\t\t\t\tif (e.ctrlKey){\r\n\t\t\t\t\t\tnewDate = this.moveYear(this.date, dir);\r\n\t\t\t\t\t\tnewViewDate = this.moveYear(this.viewDate, dir);\r\n\t\t\t\t\t} else if (e.shiftKey){\r\n\t\t\t\t\t\tnewDate = this.moveMonth(this.date, dir);\r\n\t\t\t\t\t\tnewViewDate = this.moveMonth(this.viewDate, dir);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tnewDate = new Date(this.date);\r\n\t\t\t\t\t\tnewDate.setUTCDate(this.date.getUTCDate() + dir * 7);\r\n\t\t\t\t\t\tnewViewDate = new Date(this.viewDate);\r\n\t\t\t\t\t\tnewViewDate.setUTCDate(this.viewDate.getUTCDate() + dir * 7);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (this.dateWithinRange(newDate)){\r\n\t\t\t\t\t\tthis.date = newDate;\r\n\t\t\t\t\t\tthis.viewDate = newViewDate;\r\n\t\t\t\t\t\tthis.setValue();\r\n\t\t\t\t\t\tthis.update();\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\tdateChanged = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 13: // enter\r\n\t\t\t\t\tthis.hide();\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 9: // tab\r\n\t\t\t\t\tthis.hide();\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tif (dateChanged){\r\n\t\t\t\tthis._trigger('changeDate');\r\n\t\t\t\tvar element;\r\n\t\t\t\tif (this.isInput) {\r\n\t\t\t\t\telement = this.element;\r\n\t\t\t\t} else if (this.component){\r\n\t\t\t\t\telement = this.element.find('input');\r\n\t\t\t\t}\r\n\t\t\t\tif (element) {\r\n\t\t\t\t\telement.change();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tshowMode: function(dir) {\r\n\t\t\tif (dir) {\r\n\t\t\t\tthis.viewMode = Math.max(this.o.minViewMode, Math.min(2, this.viewMode + dir));\r\n\t\t\t}\r\n\t\t\t/*\r\n\t\t\t\tvitalets: fixing bug of very special conditions:\r\n\t\t\t\tjquery 1.7.1 + webkit + show inline datepicker in bootstrap popover.\r\n\t\t\t\tMethod show() does not set display css correctly and datepicker is not shown.\r\n\t\t\t\tChanged to .css('display', 'block') solve the problem.\r\n\t\t\t\tSee https://github.com/vitalets/x-editable/issues/37\r\n\r\n\t\t\t\tIn jquery 1.7.2+ everything works fine.\r\n\t\t\t*/\r\n\t\t\t//this.picker.find('>div').hide().filter('.datepicker-'+DPGlobal.modes[this.viewMode].clsName).show();\r\n\t\t\tthis.picker.find('>div').hide().filter('.datepicker-'+DPGlobal.modes[this.viewMode].clsName).css('display', 'block');\r\n\t\t\tthis.updateNavArrows();\r\n\t\t}\r\n\t};\r\n\r\n\tvar DateRangePicker = function(element, options){\r\n\t\tthis.element = $(element);\r\n\t\tthis.inputs = $.map(options.inputs, function(i){ return i.jquery ? i[0] : i; });\r\n\t\tdelete options.inputs;\r\n\r\n\t\t$(this.inputs)\r\n\t\t\t.datepicker(options)\r\n\t\t\t.bind('changeDate', $.proxy(this.dateUpdated, this));\r\n\r\n\t\tthis.pickers = $.map(this.inputs, function(i){ return $(i).data('datepicker'); });\r\n\t\tthis.updateDates();\r\n\t};\r\n\tDateRangePicker.prototype = {\r\n\t\tupdateDates: function(){\r\n\t\t\tthis.dates = $.map(this.pickers, function(i){ return i.date; });\r\n\t\t\tthis.updateRanges();\r\n\t\t},\r\n\t\tupdateRanges: function(){\r\n\t\t\tvar range = $.map(this.dates, function(d){ return d.valueOf(); });\r\n\t\t\t$.each(this.pickers, function(i, p){\r\n\t\t\t\tp.setRange(range);\r\n\t\t\t});\r\n\t\t},\r\n\t\tdateUpdated: function(e){\r\n\t\t\tvar dp = $(e.target).data('datepicker'),\r\n\t\t\t\tnew_date = dp.getUTCDate(),\r\n\t\t\t\ti = $.inArray(e.target, this.inputs),\r\n\t\t\t\tl = this.inputs.length;\r\n\t\t\tif (i == -1) return;\r\n\r\n\t\t\tif (new_date < this.dates[i]){\r\n\t\t\t\t// Date being moved earlier/left\r\n\t\t\t\twhile (i>=0 && new_date < this.dates[i]){\r\n\t\t\t\t\tthis.pickers[i--].setUTCDate(new_date);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if (new_date > this.dates[i]){\r\n\t\t\t\t// Date being moved later/right\r\n\t\t\t\twhile (i<l && new_date > this.dates[i]){\r\n\t\t\t\t\tthis.pickers[i++].setUTCDate(new_date);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.updateDates();\r\n\t\t},\r\n\t\tremove: function(){\r\n\t\t\t$.map(this.pickers, function(p){ p.remove(); });\r\n\t\t\tdelete this.element.data().datepicker;\r\n\t\t}\r\n\t};\r\n\r\n\tfunction opts_from_el(el, prefix){\r\n\t\t// Derive options from element data-attrs\r\n\t\tvar data = $(el).data(),\r\n\t\t\tout = {}, inkey,\r\n\t\t\treplace = new RegExp('^' + prefix.toLowerCase() + '([A-Z])'),\r\n\t\t\tprefix = new RegExp('^' + prefix.toLowerCase());\r\n\t\tfor (var key in data)\r\n\t\t\tif (prefix.test(key)){\r\n\t\t\t\tinkey = key.replace(replace, function(_,a){ return a.toLowerCase(); });\r\n\t\t\t\tout[inkey] = data[key];\r\n\t\t\t}\r\n\t\treturn out;\r\n\t}\r\n\r\n\tfunction opts_from_locale(lang){\r\n\t\t// Derive options from locale plugins\r\n\t\tvar out = {};\r\n\t\t// Check if \"de-DE\" style date is available, if not language should\r\n\t\t// fallback to 2 letter code eg \"de\"\r\n\t\tif (!dates[lang]) {\r\n\t\t\tlang = lang.split('-')[0]\r\n\t\t\tif (!dates[lang])\r\n\t\t\t\treturn;\r\n\t\t}\r\n\t\tvar d = dates[lang];\r\n\t\t$.each(locale_opts, function(i,k){\r\n\t\t\tif (k in d)\r\n\t\t\t\tout[k] = d[k];\r\n\t\t});\r\n\t\treturn out;\r\n\t}\r\n\r\n\tvar old = $.fn.datepicker;\r\n\tvar datepicker = $.fn.datepicker = function ( option ) {\r\n\t\tvar args = Array.apply(null, arguments);\r\n\t\targs.shift();\r\n\t\tvar internal_return,\r\n\t\t\tthis_return;\r\n\t\tthis.each(function () {\r\n\t\t\tvar $this = $(this),\r\n\t\t\t\tdata = $this.data('datepicker'),\r\n\t\t\t\toptions = typeof option == 'object' && option;\r\n\t\t\tif (!data) {\r\n\t\t\t\tvar elopts = opts_from_el(this, 'date'),\r\n\t\t\t\t\t// Preliminary otions\r\n\t\t\t\t\txopts = $.extend({}, defaults, elopts, options),\r\n\t\t\t\t\tlocopts = opts_from_locale(xopts.language),\r\n\t\t\t\t\t// Options priority: js args, data-attrs, locales, defaults\r\n\t\t\t\t\topts = $.extend({}, defaults, locopts, elopts, options);\r\n\t\t\t\tif ($this.is('.input-daterange') || opts.inputs){\r\n\t\t\t\t\tvar ropts = {\r\n\t\t\t\t\t\tinputs: opts.inputs || $this.find('input').toArray()\r\n\t\t\t\t\t};\r\n\t\t\t\t\t$this.data('datepicker', (data = new DateRangePicker(this, $.extend(opts, ropts))));\r\n\t\t\t\t}\r\n\t\t\t\telse{\r\n\t\t\t\t\t$this.data('datepicker', (data = new Datepicker(this, opts)));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (typeof option == 'string' && typeof data[option] == 'function') {\r\n\t\t\t\tinternal_return = data[option].apply(data, args);\r\n\t\t\t\tif (internal_return !== undefined)\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t});\r\n\t\tif (internal_return !== undefined)\r\n\t\t\treturn internal_return;\r\n\t\telse\r\n\t\t\treturn this;\r\n\t};\r\n\r\n\tvar defaults = $.fn.datepicker.defaults = {\r\n\t\tautoclose: false,\r\n\t\tbeforeShowDay: $.noop,\r\n\t\tcalendarWeeks: false,\r\n\t\tclearBtn: false,\r\n\t\tdaysOfWeekDisabled: [],\r\n\t\tendDate: Infinity,\r\n\t\tforceParse: true,\r\n\t\tformat: 'mm/dd/yyyy',\r\n\t\tkeyboardNavigation: true,\r\n\t\tlanguage: 'en',\r\n\t\tminViewMode: 0,\r\n\t\trtl: false,\r\n\t\tstartDate: -Infinity,\r\n\t\tstartView: 0,\r\n\t\ttodayBtn: false,\r\n\t\ttodayHighlight: false,\r\n\t\tweekStart: 0\r\n\t};\r\n\tvar locale_opts = $.fn.datepicker.locale_opts = [\r\n\t\t'format',\r\n\t\t'rtl',\r\n\t\t'weekStart'\r\n\t];\r\n\t$.fn.datepicker.Constructor = Datepicker;\r\n\tvar dates = $.fn.datepicker.dates = {\r\n\t\ten: {\r\n\t\t\tdays: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\", \"Sunday\"],\r\n\t\t\tdaysShort: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"],\r\n\t\t\tdaysMin: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\", \"Su\"],\r\n\t\t\tmonths: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\r\n\t\t\tmonthsShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\r\n\t\t\ttoday: \"Today\",\r\n\t\t\tclear: \"Clear\"\r\n\t\t}\r\n\t};\r\n\r\n\tvar DPGlobal = {\r\n\t\tmodes: [\r\n\t\t\t{\r\n\t\t\t\tclsName: 'days',\r\n\t\t\t\tnavFnc: 'Month',\r\n\t\t\t\tnavStep: 1\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tclsName: 'months',\r\n\t\t\t\tnavFnc: 'FullYear',\r\n\t\t\t\tnavStep: 1\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tclsName: 'years',\r\n\t\t\t\tnavFnc: 'FullYear',\r\n\t\t\t\tnavStep: 10\r\n\t\t}],\r\n\t\tisLeapYear: function (year) {\r\n\t\t\treturn (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0));\r\n\t\t},\r\n\t\tgetDaysInMonth: function (year, month) {\r\n\t\t\treturn [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\r\n\t\t},\r\n\t\tvalidParts: /dd?|DD?|mm?|MM?|yy(?:yy)?/g,\r\n\t\tnonpunctuation: /[^ -\\/:-@\\[\\u3400-\\u9fff-`{-~\\t\\n\\r]+/g,\r\n\t\tparseFormat: function(format){\r\n\t\t\t// IE treats \\0 as a string end in inputs (truncating the value),\r\n\t\t\t// so it's a bad format delimiter, anyway\r\n\t\t\tvar separators = format.replace(this.validParts, '\\0').split('\\0'),\r\n\t\t\t\tparts = format.match(this.validParts);\r\n\t\t\tif (!separators || !separators.length || !parts || parts.length === 0){\r\n\t\t\t\tthrow new Error(\"Invalid date format.\");\r\n\t\t\t}\r\n\t\t\treturn {separators: separators, parts: parts};\r\n\t\t},\r\n\t\tparseDate: function(date, format, language) {\r\n\t\t\tif (date instanceof Date) return date;\r\n\t\t\tif (typeof format === 'string')\r\n\t\t\t\tformat = DPGlobal.parseFormat(format);\r\n\t\t\tif (/^[\\-+]\\d+[dmwy]([\\s,]+[\\-+]\\d+[dmwy])*$/.test(date)) {\r\n\t\t\t\tvar part_re = /([\\-+]\\d+)([dmwy])/,\r\n\t\t\t\t\tparts = date.match(/([\\-+]\\d+)([dmwy])/g),\r\n\t\t\t\t\tpart, dir;\r\n\t\t\t\tdate = new Date();\r\n\t\t\t\tfor (var i=0; i<parts.length; i++) {\r\n\t\t\t\t\tpart = part_re.exec(parts[i]);\r\n\t\t\t\t\tdir = parseInt(part[1]);\r\n\t\t\t\t\tswitch(part[2]){\r\n\t\t\t\t\t\tcase 'd':\r\n\t\t\t\t\t\t\tdate.setUTCDate(date.getUTCDate() + dir);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'm':\r\n\t\t\t\t\t\t\tdate = Datepicker.prototype.moveMonth.call(Datepicker.prototype, date, dir);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'w':\r\n\t\t\t\t\t\t\tdate.setUTCDate(date.getUTCDate() + dir * 7);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 'y':\r\n\t\t\t\t\t\t\tdate = Datepicker.prototype.moveYear.call(Datepicker.prototype, date, dir);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn UTCDate(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), 0, 0, 0);\r\n\t\t\t}\r\n\t\t\tvar parts = date && date.match(this.nonpunctuation) || [],\r\n\t\t\t\tdate = new Date(),\r\n\t\t\t\tparsed = {},\r\n\t\t\t\tsetters_order = ['yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'd', 'dd'],\r\n\t\t\t\tsetters_map = {\r\n\t\t\t\t\tyyyy: function(d,v){ return d.setUTCFullYear(v); },\r\n\t\t\t\t\tyy: function(d,v){ return d.setUTCFullYear(2000+v); },\r\n\t\t\t\t\tm: function(d,v){\r\n\t\t\t\t\t\tv -= 1;\r\n\t\t\t\t\t\twhile (v<0) v += 12;\r\n\t\t\t\t\t\tv %= 12;\r\n\t\t\t\t\t\td.setUTCMonth(v);\r\n\t\t\t\t\t\twhile (d.getUTCMonth() != v)\r\n\t\t\t\t\t\t\td.setUTCDate(d.getUTCDate()-1);\r\n\t\t\t\t\t\treturn d;\r\n\t\t\t\t\t},\r\n\t\t\t\t\td: function(d,v){ return d.setUTCDate(v); }\r\n\t\t\t\t},\r\n\t\t\t\tval, filtered, part;\r\n\t\t\tsetters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m'];\r\n\t\t\tsetters_map['dd'] = setters_map['d'];\r\n\t\t\tdate = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\r\n\t\t\tvar fparts = format.parts.slice();\r\n\t\t\t// Remove noop parts\r\n\t\t\tif (parts.length != fparts.length) {\r\n\t\t\t\tfparts = $(fparts).filter(function(i,p){\r\n\t\t\t\t\treturn $.inArray(p, setters_order) !== -1;\r\n\t\t\t\t}).toArray();\r\n\t\t\t}\r\n\t\t\t// Process remainder\r\n\t\t\tif (parts.length == fparts.length) {\r\n\t\t\t\tfor (var i=0, cnt = fparts.length; i < cnt; i++) {\r\n\t\t\t\t\tval = parseInt(parts[i], 10);\r\n\t\t\t\t\tpart = fparts[i];\r\n\t\t\t\t\tif (isNaN(val)) {\r\n\t\t\t\t\t\tswitch(part) {\r\n\t\t\t\t\t\t\tcase 'MM':\r\n\t\t\t\t\t\t\t\tfiltered = $(dates[language].months).filter(function(){\r\n\t\t\t\t\t\t\t\t\tvar m = this.slice(0, parts[i].length),\r\n\t\t\t\t\t\t\t\t\t\tp = parts[i].slice(0, m.length);\r\n\t\t\t\t\t\t\t\t\treturn m == p;\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\tval = $.inArray(filtered[0], dates[language].months) + 1;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\tcase 'M':\r\n\t\t\t\t\t\t\t\tfiltered = $(dates[language].monthsShort).filter(function(){\r\n\t\t\t\t\t\t\t\t\tvar m = this.slice(0, parts[i].length),\r\n\t\t\t\t\t\t\t\t\t\tp = parts[i].slice(0, m.length);\r\n\t\t\t\t\t\t\t\t\treturn m == p;\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\tval = $.inArray(filtered[0], dates[language].monthsShort) + 1;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tparsed[part] = val;\r\n\t\t\t\t}\r\n\t\t\t\tfor (var i=0, s; i<setters_order.length; i++){\r\n\t\t\t\t\ts = setters_order[i];\r\n\t\t\t\t\tif (s in parsed && !isNaN(parsed[s]))\r\n\t\t\t\t\t\tsetters_map[s](date, parsed[s]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn date;\r\n\t\t},\r\n\t\tformatDate: function(date, format, language){\r\n\t\t\tif (typeof format === 'string')\r\n\t\t\t\tformat = DPGlobal.parseFormat(format);\r\n\t\t\tvar val = {\r\n\t\t\t\td: date.getUTCDate(),\r\n\t\t\t\tD: dates[language].daysShort[date.getUTCDay()],\r\n\t\t\t\tDD: dates[language].days[date.getUTCDay()],\r\n\t\t\t\tm: date.getUTCMonth() + 1,\r\n\t\t\t\tM: dates[language].monthsShort[date.getUTCMonth()],\r\n\t\t\t\tMM: dates[language].months[date.getUTCMonth()],\r\n\t\t\t\tyy: date.getUTCFullYear().toString().substring(2),\r\n\t\t\t\tyyyy: date.getUTCFullYear()\r\n\t\t\t};\r\n\t\t\tval.dd = (val.d < 10 ? '0' : '') + val.d;\r\n\t\t\tval.mm = (val.m < 10 ? '0' : '') + val.m;\r\n\t\t\tvar date = [],\r\n\t\t\t\tseps = $.extend([], format.separators);\r\n\t\t\tfor (var i=0, cnt = format.parts.length; i <= cnt; i++) {\r\n\t\t\t\tif (seps.length)\r\n\t\t\t\t\tdate.push(seps.shift());\r\n\t\t\t\tdate.push(val[format.parts[i]]);\r\n\t\t\t}\r\n\t\t\treturn date.join('');\r\n\t\t},\r\n\t\theadTemplate: '<thead>'+\r\n\t\t\t\t\t\t\t'<tr>'+\r\n\t\t\t\t\t\t\t\t'<th class=\"prev\"><i class=\"icon-arrow-left\"/></th>'+\r\n\t\t\t\t\t\t\t\t'<th colspan=\"5\" class=\"datepicker-switch\"></th>'+\r\n\t\t\t\t\t\t\t\t'<th class=\"next\"><i class=\"icon-arrow-right\"/></th>'+\r\n\t\t\t\t\t\t\t'</tr>'+\r\n\t\t\t\t\t\t'</thead>',\r\n\t\tcontTemplate: '<tbody><tr><td colspan=\"7\"></td></tr></tbody>',\r\n\t\tfootTemplate: '<tfoot><tr><th colspan=\"7\" class=\"today\"></th></tr><tr><th colspan=\"7\" class=\"clear\"></th></tr></tfoot>'\r\n\t};\r\n\tDPGlobal.template = '<div class=\"datepicker\">'+\r\n\t\t\t\t\t\t\t'<div class=\"datepicker-days\">'+\r\n\t\t\t\t\t\t\t\t'<table class=\" table-condensed\">'+\r\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\r\n\t\t\t\t\t\t\t\t\t'<tbody></tbody>'+\r\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\r\n\t\t\t\t\t\t\t\t'</table>'+\r\n\t\t\t\t\t\t\t'</div>'+\r\n\t\t\t\t\t\t\t'<div class=\"datepicker-months\">'+\r\n\t\t\t\t\t\t\t\t'<table class=\"table-condensed\">'+\r\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\r\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\r\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\r\n\t\t\t\t\t\t\t\t'</table>'+\r\n\t\t\t\t\t\t\t'</div>'+\r\n\t\t\t\t\t\t\t'<div class=\"datepicker-years\">'+\r\n\t\t\t\t\t\t\t\t'<table class=\"table-condensed\">'+\r\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\r\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\r\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\r\n\t\t\t\t\t\t\t\t'</table>'+\r\n\t\t\t\t\t\t\t'</div>'+\r\n\t\t\t\t\t\t'</div>';\r\n\r\n\t$.fn.datepicker.DPGlobal = DPGlobal;\r\n\r\n\r\n\t/* DATEPICKER NO CONFLICT\r\n\t* =================== */\r\n\r\n\t$.fn.datepicker.noConflict = function(){\r\n\t\t$.fn.datepicker = old;\r\n\t\treturn this;\r\n\t};\r\n\r\n\r\n\t/* DATEPICKER DATA-API\r\n\t* ================== */\r\n\r\n\t$(document).on(\r\n\t\t'focus.datepicker.data-api click.datepicker.data-api',\r\n\t\t'[data-provide=\"datepicker\"]',\r\n\t\tfunction(e){\r\n\t\t\tvar $this = $(this);\r\n\t\t\tif ($this.data('datepicker')) return;\r\n\t\t\te.preventDefault();\r\n\t\t\t// component click requires us to explicitly show it\r\n\t\t\tdatepicker.call($this, 'show');\r\n\t\t}\r\n\t);\r\n\t$(function(){\r\n\t\t//$('[data-provide=\"datepicker-inline\"]').datepicker();\r\n //vit: changed to support noConflict()\r\n datepicker.call($('[data-provide=\"datepicker-inline\"]'));\r\n\t});\r\n\r\n}( window.jQuery ));\r\n\r\n/**\r\nBootstrap-datepicker. \r\nDescription and examples: https://github.com/eternicode/bootstrap-datepicker. \r\nFor **i18n** you should include js file from here: https://github.com/eternicode/bootstrap-datepicker/tree/master/js/locales\r\nand set `language` option. \r\nSince 1.4.0 date has different appearance in **popup** and **inline** modes. \r\n\r\n@class date\r\n@extends abstractinput\r\n@final\r\n@example\r\n<a href=\"#\" id=\"dob\" data-type=\"date\" data-pk=\"1\" data-url=\"/post\" data-title=\"Select date\">15/05/1984</a>\r\n<script>\r\n$(function(){\r\n $('#dob').editable({\r\n format: 'yyyy-mm-dd', \r\n viewformat: 'dd/mm/yyyy', \r\n datepicker: {\r\n weekStart: 1\r\n }\r\n }\r\n });\r\n});\r\n</script>\r\n**/\r\n(function ($) {\r\n \"use strict\";\r\n \r\n //store bootstrap-datepicker as bdateicker to exclude conflict with jQuery UI one\r\n $.fn.bdatepicker = $.fn.datepicker.noConflict();\r\n if(!$.fn.datepicker) { //if there were no other datepickers, keep also original name\r\n $.fn.datepicker = $.fn.bdatepicker; \r\n } \r\n \r\n var Date = function (options) {\r\n this.init('date', options, Date.defaults);\r\n this.initPicker(options, Date.defaults);\r\n };\r\n\r\n $.fn.editableutils.inherit(Date, $.fn.editabletypes.abstractinput); \r\n \r\n $.extend(Date.prototype, {\r\n initPicker: function(options, defaults) {\r\n //'format' is set directly from settings or data-* attributes\r\n\r\n //by default viewformat equals to format\r\n if(!this.options.viewformat) {\r\n this.options.viewformat = this.options.format;\r\n }\r\n \r\n //try parse datepicker config defined as json string in data-datepicker\r\n options.datepicker = $.fn.editableutils.tryParseJson(options.datepicker, true);\r\n \r\n //overriding datepicker config (as by default jQuery extend() is not recursive)\r\n //since 1.4 datepicker internally uses viewformat instead of format. Format is for submit only\r\n this.options.datepicker = $.extend({}, defaults.datepicker, options.datepicker, {\r\n format: this.options.viewformat\r\n });\r\n \r\n //language\r\n this.options.datepicker.language = this.options.datepicker.language || 'en'; \r\n\r\n //store DPglobal\r\n this.dpg = $.fn.bdatepicker.DPGlobal; \r\n\r\n //store parsed formats\r\n this.parsedFormat = this.dpg.parseFormat(this.options.format);\r\n this.parsedViewFormat = this.dpg.parseFormat(this.options.viewformat); \r\n },\r\n \r\n render: function () {\r\n this.$input.bdatepicker(this.options.datepicker);\r\n \r\n //\"clear\" link\r\n if(this.options.clear) {\r\n this.$clear = $('<a href=\"#\"></a>').html(this.options.clear).click($.proxy(function(e){\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.clear();\r\n }, this));\r\n \r\n this.$tpl.parent().append($('<div class=\"editable-clear\">').append(this.$clear)); \r\n } \r\n },\r\n \r\n value2html: function(value, element) {\r\n var text = value ? this.dpg.formatDate(value, this.parsedViewFormat, this.options.datepicker.language) : '';\r\n Date.superclass.value2html.call(this, text, element); \r\n },\r\n\r\n html2value: function(html) {\r\n return this.parseDate(html, this.parsedViewFormat);\r\n }, \r\n\r\n value2str: function(value) {\r\n return value ? this.dpg.formatDate(value, this.parsedFormat, this.options.datepicker.language) : '';\r\n }, \r\n\r\n str2value: function(str) {\r\n return this.parseDate(str, this.parsedFormat);\r\n }, \r\n\r\n value2submit: function(value) {\r\n return this.value2str(value);\r\n }, \r\n\r\n value2input: function(value) {\r\n this.$input.bdatepicker('update', value);\r\n },\r\n\r\n input2value: function() { \r\n return this.$input.data('datepicker').date;\r\n }, \r\n\r\n activate: function() {\r\n },\r\n\r\n clear: function() {\r\n this.$input.data('datepicker').date = null;\r\n this.$input.find('.active').removeClass('active');\r\n if(!this.options.showbuttons) {\r\n this.$input.closest('form').submit(); \r\n }\r\n },\r\n\r\n autosubmit: function() {\r\n this.$input.on('mouseup', '.day', function(e){\r\n if($(e.currentTarget).is('.old') || $(e.currentTarget).is('.new')) {\r\n return;\r\n }\r\n var $form = $(this).closest('form');\r\n setTimeout(function() {\r\n $form.submit();\r\n }, 200);\r\n });\r\n //changedate is not suitable as it triggered when showing datepicker. see #149\r\n /*\r\n this.$input.on('changeDate', function(e){\r\n var $form = $(this).closest('form');\r\n setTimeout(function() {\r\n $form.submit();\r\n }, 200);\r\n });\r\n */\r\n },\r\n \r\n /*\r\n For incorrect date bootstrap-datepicker returns current date that is not suitable\r\n for datefield.\r\n This function returns null for incorrect date. \r\n */\r\n parseDate: function(str, format) {\r\n var date = null, formattedBack;\r\n if(str) {\r\n date = this.dpg.parseDate(str, format, this.options.datepicker.language);\r\n if(typeof str === 'string') {\r\n formattedBack = this.dpg.formatDate(date, format, this.options.datepicker.language);\r\n if(str !== formattedBack) {\r\n date = null;\r\n }\r\n }\r\n }\r\n return date;\r\n }\r\n\r\n });\r\n\r\n Date.defaults = $.extend({}, $.fn.editabletypes.abstractinput.defaults, {\r\n /**\r\n @property tpl \r\n @default <div></div>\r\n **/ \r\n tpl:'<div class=\"editable-date well\"></div>',\r\n /**\r\n @property inputclass \r\n @default null\r\n **/\r\n inputclass: null,\r\n /**\r\n Format used for sending value to server. Also applied when converting date from <code>data-value</code> attribute.<br>\r\n Possible tokens are: <code>d, dd, m, mm, yy, yyyy</code> \r\n\r\n @property format \r\n @type string\r\n @default yyyy-mm-dd\r\n **/\r\n format:'yyyy-mm-dd',\r\n /**\r\n Format used for displaying date. Also applied when converting date from element's text on init. \r\n If not specified equals to <code>format</code>\r\n\r\n @property viewformat \r\n @type string\r\n @default null\r\n **/\r\n viewformat: null,\r\n /**\r\n Configuration of datepicker.\r\n Full list of options: http://bootstrap-datepicker.readthedocs.org/en/latest/options.html\r\n\r\n @property datepicker \r\n @type object\r\n @default {\r\n weekStart: 0,\r\n startView: 0,\r\n minViewMode: 0,\r\n autoclose: false\r\n }\r\n **/\r\n datepicker:{\r\n weekStart: 0,\r\n startView: 0,\r\n minViewMode: 0,\r\n autoclose: false\r\n },\r\n /**\r\n Text shown as clear date button. \r\n If <code>false</code> clear button will not be rendered.\r\n\r\n @property clear \r\n @type boolean|string\r\n @default 'x clear'\r\n **/\r\n clear: '× clear'\r\n });\r\n\r\n $.fn.editabletypes.date = Date;\r\n\r\n}(window.jQuery));\r\n\r\n/**\r\nBootstrap datefield input - modification for inline mode.\r\nShows normal <input type=\"text\"> and binds popup datepicker. \r\nAutomatically shown in inline mode.\r\n\r\n@class datefield\r\n@extends date\r\n\r\n@since 1.4.0\r\n**/\r\n(function ($) {\r\n \"use strict\";\r\n \r\n var DateField = function (options) {\r\n this.init('datefield', options, DateField.defaults);\r\n this.initPicker(options, DateField.defaults);\r\n };\r\n\r\n $.fn.editableutils.inherit(DateField, $.fn.editabletypes.date); \r\n \r\n $.extend(DateField.prototype, {\r\n render: function () {\r\n this.$input = this.$tpl.find('input');\r\n this.setClass();\r\n this.setAttr('placeholder');\r\n \r\n //bootstrap-datepicker is set `bdateicker` to exclude conflict with jQuery UI one. (in date.js) \r\n this.$tpl.bdatepicker(this.options.datepicker);\r\n \r\n //need to disable original event handlers\r\n this.$input.off('focus keydown');\r\n \r\n //update value of datepicker\r\n this.$input.keyup($.proxy(function(){\r\n this.$tpl.removeData('date');\r\n this.$tpl.bdatepicker('update');\r\n }, this));\r\n \r\n }, \r\n \r\n value2input: function(value) {\r\n this.$input.val(value ? this.dpg.formatDate(value, this.parsedViewFormat, this.options.datepicker.language) : '');\r\n this.$tpl.bdatepicker('update');\r\n },\r\n \r\n input2value: function() { \r\n return this.html2value(this.$input.val());\r\n }, \r\n \r\n activate: function() {\r\n $.fn.editabletypes.text.prototype.activate.call(this);\r\n },\r\n \r\n autosubmit: function() {\r\n //reset autosubmit to empty \r\n }\r\n });\r\n \r\n DateField.defaults = $.extend({}, $.fn.editabletypes.date.defaults, {\r\n /**\r\n @property tpl \r\n **/ \r\n tpl:'<div class=\"input-append date\"><input type=\"text\"/><span class=\"add-on\"><i class=\"icon-th\"></i></span></div>',\r\n /**\r\n @property inputclass \r\n @default 'input-small'\r\n **/ \r\n inputclass: 'input-small',\r\n \r\n /* datepicker config */\r\n datepicker: {\r\n weekStart: 0,\r\n startView: 0,\r\n minViewMode: 0,\r\n autoclose: true\r\n }\r\n });\r\n \r\n $.fn.editabletypes.datefield = DateField;\r\n\r\n}(window.jQuery));\r\n/**\r\nBootstrap-datetimepicker. \r\nBased on [smalot bootstrap-datetimepicker plugin](https://github.com/smalot/bootstrap-datetimepicker). \r\nBefore usage you should manually include dependent js and css:\r\n\r\n <link href=\"css/datetimepicker.css\" rel=\"stylesheet\" type=\"text/css\"></link> \r\n <script src=\"js/bootstrap-datetimepicker.js\"></script>\r\n\r\nFor **i18n** you should include js file from here: https://github.com/smalot/bootstrap-datetimepicker/tree/master/js/locales\r\nand set `language` option. \r\n\r\n@class datetime\r\n@extends abstractinput\r\n@final\r\n@since 1.4.4\r\n@example\r\n<a href=\"#\" id=\"last_seen\" data-type=\"datetime\" data-pk=\"1\" data-url=\"/post\" title=\"Select date & time\">15/03/2013 12:45</a>\r\n<script>\r\n$(function(){\r\n $('#last_seen').editable({\r\n format: 'yyyy-mm-dd hh:ii', \r\n viewformat: 'dd/mm/yyyy hh:ii', \r\n datetimepicker: {\r\n weekStart: 1\r\n }\r\n }\r\n });\r\n});\r\n</script>\r\n**/\r\n(function ($) {\r\n \"use strict\";\r\n\r\n var DateTime = function (options) {\r\n this.init('datetime', options, DateTime.defaults);\r\n this.initPicker(options, DateTime.defaults);\r\n };\r\n\r\n $.fn.editableutils.inherit(DateTime, $.fn.editabletypes.abstractinput);\r\n\r\n $.extend(DateTime.prototype, {\r\n initPicker: function(options, defaults) {\r\n //'format' is set directly from settings or data-* attributes\r\n\r\n //by default viewformat equals to format\r\n if(!this.options.viewformat) {\r\n this.options.viewformat = this.options.format;\r\n }\r\n \r\n //try parse datetimepicker config defined as json string in data-datetimepicker\r\n options.datetimepicker = $.fn.editableutils.tryParseJson(options.datetimepicker, true);\r\n\r\n //overriding datetimepicker config (as by default jQuery extend() is not recursive)\r\n //since 1.4 datetimepicker internally uses viewformat instead of format. Format is for submit only\r\n this.options.datetimepicker = $.extend({}, defaults.datetimepicker, options.datetimepicker, {\r\n format: this.options.viewformat\r\n });\r\n\r\n //language\r\n this.options.datetimepicker.language = this.options.datetimepicker.language || 'en'; \r\n\r\n //store DPglobal\r\n this.dpg = $.fn.datetimepicker.DPGlobal; \r\n\r\n //store parsed formats\r\n this.parsedFormat = this.dpg.parseFormat(this.options.format, this.options.formatType);\r\n this.parsedViewFormat = this.dpg.parseFormat(this.options.viewformat, this.options.formatType);\r\n },\r\n\r\n render: function () {\r\n this.$input.datetimepicker(this.options.datetimepicker);\r\n\r\n //adjust container position when viewMode changes\r\n //see https://github.com/smalot/bootstrap-datetimepicker/pull/80\r\n this.$input.on('changeMode', function(e) {\r\n var f = $(this).closest('form').parent();\r\n //timeout here, otherwise container changes position before form has new size\r\n setTimeout(function(){\r\n f.triggerHandler('resize');\r\n }, 0);\r\n });\r\n\r\n //\"clear\" link\r\n if(this.options.clear) {\r\n this.$clear = $('<a href=\"#\"></a>').html(this.options.clear).click($.proxy(function(e){\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.clear();\r\n }, this));\r\n\r\n this.$tpl.parent().append($('<div class=\"editable-clear\">').append(this.$clear)); \r\n }\r\n },\r\n\r\n value2html: function(value, element) {\r\n //formatDate works with UTCDate!\r\n var text = value ? this.dpg.formatDate(this.toUTC(value), this.parsedViewFormat, this.options.datetimepicker.language, this.options.formatType) : '';\r\n if(element) {\r\n DateTime.superclass.value2html.call(this, text, element);\r\n } else {\r\n return text;\r\n }\r\n },\r\n\r\n html2value: function(html) {\r\n //parseDate return utc date!\r\n var value = this.parseDate(html, this.parsedViewFormat); \r\n return value ? this.fromUTC(value) : null;\r\n },\r\n\r\n value2str: function(value) {\r\n //formatDate works with UTCDate!\r\n return value ? this.dpg.formatDate(this.toUTC(value), this.parsedFormat, this.options.datetimepicker.language, this.options.formatType) : '';\r\n },\r\n\r\n str2value: function(str) {\r\n //parseDate return utc date!\r\n var value = this.parseDate(str, this.parsedFormat);\r\n return value ? this.fromUTC(value) : null;\r\n },\r\n\r\n value2submit: function(value) {\r\n return this.value2str(value);\r\n },\r\n\r\n value2input: function(value) {\r\n if(value) {\r\n this.$input.data('datetimepicker').setDate(value);\r\n }\r\n },\r\n\r\n input2value: function() { \r\n //date may be cleared, in that case getDate() triggers error\r\n var dt = this.$input.data('datetimepicker');\r\n return dt.date ? dt.getDate() : null;\r\n },\r\n\r\n activate: function() {\r\n },\r\n\r\n clear: function() {\r\n this.$input.data('datetimepicker').date = null;\r\n this.$input.find('.active').removeClass('active');\r\n if(!this.options.showbuttons) {\r\n this.$input.closest('form').submit(); \r\n } \r\n },\r\n\r\n autosubmit: function() {\r\n this.$input.on('mouseup', '.minute', function(e){\r\n var $form = $(this).closest('form');\r\n setTimeout(function() {\r\n $form.submit();\r\n }, 200);\r\n });\r\n },\r\n\r\n //convert date from local to utc\r\n toUTC: function(value) {\r\n return value ? new Date(value.valueOf() - value.getTimezoneOffset() * 60000) : value; \r\n },\r\n\r\n //convert date from utc to local\r\n fromUTC: function(value) {\r\n return value ? new Date(value.valueOf() + value.getTimezoneOffset() * 60000) : value; \r\n },\r\n\r\n /*\r\n For incorrect date bootstrap-datetimepicker returns current date that is not suitable\r\n for datetimefield.\r\n This function returns null for incorrect date. \r\n */\r\n parseDate: function(str, format) {\r\n var date = null, formattedBack;\r\n if(str) {\r\n date = this.dpg.parseDate(str, format, this.options.datetimepicker.language, this.options.formatType);\r\n if(typeof str === 'string') {\r\n formattedBack = this.dpg.formatDate(date, format, this.options.datetimepicker.language, this.options.formatType);\r\n if(str !== formattedBack) {\r\n date = null;\r\n } \r\n }\r\n }\r\n return date;\r\n }\r\n\r\n });\r\n\r\n DateTime.defaults = $.extend({}, $.fn.editabletypes.abstractinput.defaults, {\r\n /**\r\n @property tpl \r\n @default <div></div>\r\n **/ \r\n tpl:'<div class=\"editable-date well\"></div>',\r\n /**\r\n @property inputclass \r\n @default null\r\n **/\r\n inputclass: null,\r\n /**\r\n Format used for sending value to server. Also applied when converting date from <code>data-value</code> attribute.<br>\r\n Possible tokens are: <code>d, dd, m, mm, yy, yyyy, h, i</code> \r\n \r\n @property format \r\n @type string\r\n @default yyyy-mm-dd hh:ii\r\n **/ \r\n format:'yyyy-mm-dd hh:ii',\r\n formatType:'standard',\r\n /**\r\n Format used for displaying date. Also applied when converting date from element's text on init. \r\n If not specified equals to <code>format</code>\r\n \r\n @property viewformat \r\n @type string\r\n @default null\r\n **/\r\n viewformat: null,\r\n /**\r\n Configuration of datetimepicker.\r\n Full list of options: https://github.com/smalot/bootstrap-datetimepicker\r\n\r\n @property datetimepicker \r\n @type object\r\n @default { }\r\n **/\r\n datetimepicker:{\r\n todayHighlight: false,\r\n autoclose: false\r\n },\r\n /**\r\n Text shown as clear date button. \r\n If <code>false</code> clear button will not be rendered.\r\n\r\n @property clear \r\n @type boolean|string\r\n @default 'x clear'\r\n **/\r\n clear: '× clear'\r\n });\r\n\r\n $.fn.editabletypes.datetime = DateTime;\r\n\r\n}(window.jQuery));\r\n/**\r\nBootstrap datetimefield input - datetime input for inline mode.\r\nShows normal <input type=\"text\"> and binds popup datetimepicker. \r\nAutomatically shown in inline mode.\r\n\r\n@class datetimefield\r\n@extends datetime\r\n\r\n**/\r\n(function ($) {\r\n \"use strict\";\r\n \r\n var DateTimeField = function (options) {\r\n this.init('datetimefield', options, DateTimeField.defaults);\r\n this.initPicker(options, DateTimeField.defaults);\r\n };\r\n\r\n $.fn.editableutils.inherit(DateTimeField, $.fn.editabletypes.datetime);\r\n \r\n $.extend(DateTimeField.prototype, {\r\n render: function () {\r\n this.$input = this.$tpl.find('input');\r\n this.setClass();\r\n this.setAttr('placeholder');\r\n \r\n this.$tpl.datetimepicker(this.options.datetimepicker);\r\n \r\n //need to disable original event handlers\r\n this.$input.off('focus keydown');\r\n \r\n //update value of datepicker\r\n this.$input.keyup($.proxy(function(){\r\n this.$tpl.removeData('date');\r\n this.$tpl.datetimepicker('update');\r\n }, this));\r\n \r\n }, \r\n \r\n value2input: function(value) {\r\n this.$input.val(this.value2html(value));\r\n this.$tpl.datetimepicker('update');\r\n },\r\n \r\n input2value: function() { \r\n return this.html2value(this.$input.val());\r\n }, \r\n \r\n activate: function() {\r\n $.fn.editabletypes.text.prototype.activate.call(this);\r\n },\r\n \r\n autosubmit: function() {\r\n //reset autosubmit to empty \r\n }\r\n });\r\n \r\n DateTimeField.defaults = $.extend({}, $.fn.editabletypes.datetime.defaults, {\r\n /**\r\n @property tpl \r\n **/ \r\n tpl:'<div class=\"input-append date\"><input type=\"text\"/><span class=\"add-on\"><i class=\"icon-th\"></i></span></div>',\r\n /**\r\n @property inputclass \r\n @default 'input-medium'\r\n **/ \r\n inputclass: 'input-medium',\r\n \r\n /* datetimepicker config */\r\n datetimepicker:{\r\n todayHighlight: false,\r\n autoclose: true\r\n }\r\n });\r\n \r\n $.fn.editabletypes.datetimefield = DateTimeField;\r\n\r\n}(window.jQuery));","/**\r\nFull name editable input.\r\nInternally value stored as {firstname: \"Amanda\", lastname: \"Burns\"}\r\n\r\n@class fullname\r\n@extends abstractinput\r\n@final\r\n@example\r\n<a href=\"#\" id=\"fullname\" data-type=\"fullname\" data-pk=\"1\">Amanda Burns</a>\r\n<script>\r\n$(function(){\r\n $('#fullname').editable({\r\n url: '/post',\r\n title: 'Enter first and last names',\r\n value: {\r\n firstname: \"Amanda\", \r\n lastname: \"Burns\"\r\n }\r\n });\r\n});\r\n</script>\r\n**/\r\n(function ($) {\r\n \"use strict\";\r\n \r\n var Fullname = function (options) {\r\n this.init('fullname', options, Fullname.defaults);\r\n };\r\n\r\n //inherit from Abstract input\r\n $.fn.editableutils.inherit(Fullname, $.fn.editabletypes.abstractinput);\r\n\r\n $.extend(Fullname.prototype, {\r\n /**\r\n Renders input from tpl\r\n\r\n @method render() \r\n **/ \r\n render: function() {\r\n this.$input = this.$tpl.find('input');\r\n },\r\n \r\n /**\r\n Default method to show value in element. Can be overwritten by display option.\r\n \r\n @method value2html(value, element) \r\n **/\r\n value2html: function(value, element) {\r\n if(!value) {\r\n $(element).empty();\r\n return; \r\n }\r\n var html = $('<div>').text(value.firstname).html() + ' ' + $('<div>').text(value.lastname).html();\r\n $(element).html(html); \r\n },\r\n \r\n /**\r\n Gets value from element's html\r\n \r\n @method html2value(html) \r\n **/ \r\n html2value: function(html) { \r\n /*\r\n you may write parsing method to get value by element's html\r\n e.g. \"Amanda Burns\" => {firstname: \"Amanda\", lastname: \"Burns\"}\r\n but for complex structures it's not recommended.\r\n Better set value directly via javascript, e.g. \r\n editable({\r\n value: {\r\n firstname: \"Amanda\", \r\n lastname: \"Burns\"\r\n }\r\n });\r\n */ \r\n return null; \r\n },\r\n \r\n /**\r\n Converts value to string. \r\n It is used in internal comparing (not for sending to server).\r\n \r\n @method value2str(value) \r\n **/\r\n value2str: function(value) {\r\n var str = '';\r\n if(value) {\r\n for(var k in value) {\r\n str = str + k + ':' + value[k] + ';'; \r\n }\r\n }\r\n return str;\r\n }, \r\n \r\n /*\r\n Converts string to value. Used for reading value from 'data-value' attribute.\r\n \r\n @method str2value(str) \r\n */\r\n str2value: function(str) {\r\n /*\r\n this is mainly for parsing value defined in data-value attribute. \r\n If you will always set value by javascript, no need to overwrite it\r\n */\r\n return str;\r\n }, \r\n \r\n /**\r\n Sets value of input.\r\n \r\n @method value2input(value) \r\n @param {mixed} value\r\n **/ \r\n value2input: function(value) {\r\n if(!value) {\r\n return;\r\n }\r\n this.$input.filter('[name=\"firstname\"]').val(value.firstname);\r\n this.$input.filter('[name=\"lastname\"]').val(value.lastname);\r\n }, \r\n \r\n /**\r\n Returns value of input.\r\n \r\n @method input2value() \r\n **/ \r\n input2value: function() { \r\n return {\r\n firstname: this.$input.filter('[name=\"firstname\"]').val(), \r\n lastname: this.$input.filter('[name=\"lastname\"]').val(), \r\n building: this.$input.filter('[name=\"building\"]').val()\r\n };\r\n }, \r\n \r\n /**\r\n Activates input: sets focus on the first field.\r\n \r\n @method activate() \r\n **/ \r\n activate: function() {\r\n this.$input.filter('[name=\"firstname\"]').focus();\r\n }, \r\n \r\n /**\r\n Attaches handler to submit form in case of 'showbuttons=false' mode\r\n \r\n @method autosubmit() \r\n **/ \r\n autosubmit: function() {\r\n this.$input.keydown(function (e) {\r\n if (e.which === 13) {\r\n $(this).closest('form').submit();\r\n }\r\n });\r\n } \r\n });\r\n\r\n Fullname.defaults = $.extend({}, $.fn.editabletypes.abstractinput.defaults, {\r\n tpl: '<div class=\"editable-fullname-field\"><label class=\"control-label\">First Name:</label> <input type=\"text\" name=\"firstname\" class=\"form-control input-sm\"></div>'+\r\n '<div class=\"editable-fullname-field\"><label class=\"control-label\">Last Name:</label> <input type=\"text\" name=\"lastname\" class=\"form-control input-sm\"></div>',\r\n \r\n inputclass: 'editable-fullname'\r\n });\r\n\r\n $.fn.editabletypes.fullname = Fullname;\r\n\r\n}(window.jQuery));","var YouLi = YouLi ? YouLi : {};\r\nYouLi.Trip = YouLi.Trip ? YouLi.Trip : {};\r\nYouLi.Trip.Schedule = YouLi.Trip.Schedule ? YouLi.Trip.Schedule : {};\r\nYouLi.Trip.Schedule.Response = YouLi.Trip.Schedule.Response ? YouLi.Trip.Schedule.Response : {};\r\n\r\n(function (YouLi) {\r\n (function (Trip) {\r\n (function (Schedule) {\r\n (function (Response) {\r\n\r\n let doItemResponse = {\r\n itemId: '',\r\n inviteeId: '',\r\n responseValue: '',\r\n element: '',\r\n applyToGang: '',\r\n callback: null\r\n }\r\n\r\n YouLi.Trip.Schedule.Response.MultiStateCheckUpdateAndTakeAction = function (checkElement, applyToGang, callback, suppressApplyToGangPrompt) {\r\n if ($(\"#PreviewMode\").val() != \"True\") {\r\n var itemId = $(checkElement).data(\"id\");\r\n if ($(checkElement).attr(\"data-state\") == \"checked\")\r\n responseValue = \"yes\";\r\n //else if ($(checkElement).attr(\"data-state\") == \"crossed\") // YOULI-4868 removing the \"crossed\" state\r\n // responseValue = \"no\";\r\n else\r\n var responseValue = \"no\"; // YOULI-4868 when transitioning to \"unchecked\", we mark them as a \"no\" (not a cleared response)\r\n\r\n if (!YouLi.Trip.InviteeHasRespondedYes) {\r\n $(\"#ResponseItineraryItemIncluded\").val(itemId);\r\n $(\"#ResponseItineraryItemIncludedAnswer\").val(responseValue);\r\n $(\"#ResponseDialogYesExtraNote\").show();\r\n YouLi.Trip.Program.TargetElementForResponse = checkElement; // grab a hold of this element to allow revert if they cancel the trip response\r\n $(\"#ResponseDialogYes\").modal('show');\r\n }\r\n else {\r\n let inviteeId = $(\"#InviteeId\").val();\r\n if (!applyToGang)\r\n inviteeId = $(checkElement).data(\"invitee-id\");\r\n YouLi.Trip.Schedule.Response.DoItemResponse(itemId, inviteeId, responseValue, checkElement, applyToGang, callback, suppressApplyToGangPrompt);\r\n }\r\n }\r\n };\r\n\r\n YouLi.Trip.Schedule.Response.DoItemResponse = function (itemId, inviteeId, responseValue, element, applyToGang, callback, suppressApplyToGangPrompt = false) {\r\n const isGang = $('#IsGang:hidden').val();\r\n const invoiceMode = $('#InviteeInvoiceMode:hidden').val();\r\n doItemResponse.itemId = itemId;\r\n doItemResponse.element = element;\r\n doItemResponse.inviteeId = inviteeId;\r\n doItemResponse.callback = callback;\r\n doItemResponse.responseValue = responseValue;\r\n doItemResponse.applyToGang = applyToGang;\r\n \r\n if (responseValue === 'yes'\r\n && isGang.toLowerCase() === 'true'\r\n && !suppressApplyToGangPrompt\r\n && invoiceMode !== \"payseparatelyindividual\") {\r\n $('#AddOnApplyToGangDialog').modal('show');\r\n } else {\r\n onDoItemResponse(itemId, inviteeId, responseValue, element, applyToGang, callback);\r\n }\r\n }\r\n\r\n function onDoItemResponse(itemId, inviteeId, responseValue, element, applyToGang, callback) {\r\n let targetElement = element;\r\n let itineraryTabIsHidden = $(\"#content-trip-itinerary\").hasClass(\"hidden\");\r\n let costsTabIsHiddeen = $(\"#content-trip-paymentdetails\").hasClass(\"hidden\");\r\n\r\n let data = {\r\n ScheduleItemId: itemId,\r\n CurrentInviteeId: $(\"#InviteeId\").val(),\r\n RespondingInviteeId: inviteeId,\r\n ResponseValue: responseValue,\r\n ApplyToGang: applyToGang\r\n };\r\n\r\n $(\".program-item-contents[data-id=\" + itemId + \"]\").addClass(\"spinner\").find(\".multistate-check-schedule-item-response\").attr(\"disabled\", \"\");\r\n\r\n $.ajax({\r\n url: '/trip/inviteeschedulerespond',\r\n type: \"POST\",\r\n dataType: \"json\",\r\n contentType: \"application/json; charset=utf-8\",\r\n data: JSON.stringify(data),\r\n complete: function (response) {\r\n $(\".program-item-contents[data-id=\" + itemId + \"]\").removeClass(\"spinner\").find(\".multistate-check-schedule-item-response\").removeAttr(\"disabled\");\r\n\r\n if (response.responseJSON != undefined && response.responseJSON.url) {\r\n YouLi.Common.UI.HideLoading();\r\n window.location.href = response.responseJSON.url;\r\n } else if (response.status === 500 || (response.responseJSON != undefined && response.responseJSON.success == false)) {\r\n YouLi.Common.UI.HideLoading();\r\n\r\n // reset the multistate check to the previous value\r\n $(targetElement).data(\"multiStateCheck\").revert();\r\n\r\n var errorMessage = \"An error occurred.\";\r\n if (response.responseJSON.errorMessage)\r\n errorMessage = response.responseJSON.errorMessage;\r\n YouLi.Common.UI.ShowStandardDialog(errorMessage, \"Error\");\r\n } else {\r\n\r\n // update the UI for all other occurrances of the checkbox for this item (in case they're not handled by individual cases)\r\n $(\".multistate-check-schedule-item-response[data-id='\" + itemId + \"']\").attr(\"data-state\", $(targetElement).attr(\"data-state\"));\r\n\r\n // Refresh program item tab\r\n var programItemElem = $(\".program-item-contents[data-id=\" + itemId + \"]\");\r\n programItemElem.find(\".participants-list\").html(response.responseJSON.newParticipantsList);\r\n // update display classes\r\n if (responseValue == \"removeresponse\")\r\n programItemElem.parent().addClass(\"response-required\");\r\n else\r\n programItemElem.parent().removeClass(\"response-required\");\r\n\r\n if (responseValue == \"no\")\r\n programItemElem.parent().addClass(\"not-going\");\r\n else\r\n programItemElem.parent().removeClass(\"not-going\");\r\n\r\n // Refresh itinerary tab - we replace the whole thing beacuse too much may have changed such as the not-going items being at the bottom\r\n YouLi.Trip.UpdateItineraryContent(itineraryTabIsHidden, response.responseJSON.newContentItineraryHtml);\r\n\r\n YouLi.Trip.Schedule.Response.InitialiseResponseChecks();\r\n\r\n // Refresh the payments tab contents\r\n $(\"#SelectedCouponCode\").val(\"\");\r\n $('#payment-detail-content').html(response.responseJSON.newPaymentDetailsHtml);\r\n $('.content-trip-heading-details-cost').html(response.responseJSON.newCostSummaryHtml);\r\n\r\n // Update payment info - but only if the server has passed it back\r\n if ($(\".content-trip-paymentdetails-payment-info\").length > 0 && response.responseJSON.newPaymentInfoHtml.length > 0)\r\n $(\".content-trip-paymentdetails-payment-info\").html(response.responseJSON.newPaymentInfoHtml);\r\n\r\n YouLi.Trip.Payments.RefreshPaymentMethod(true);\r\n if (!costsTabIsHiddeen)\r\n $(\"#content-trip-paymentdetails\").removeClass(\"hidden\");\r\n\r\n YouLi.Trip.Payments.InitialiseUI();\r\n\r\n YouLi.Trip.UpdateResponseFooter(runOnce = true, checkTripUpdates = false);\r\n\r\n YouLi.Trip.Program.SaveDone = true;\r\n\r\n if (callback) {\r\n callback();\r\n }\r\n }\r\n }\r\n\r\n });\r\n }\r\n\r\n YouLi.Trip.Schedule.Response.InitialiseResponseChecks = function () {\r\n $(\".schedule-list .multistate-check-schedule-item-response\").multiStateCheck({\r\n states: [\"unchecked\", \"checked\"],\r\n onAfterChangeState: function (e) {\r\n\r\n const applyToGang = true;\r\n YouLi.Trip.Schedule.Response.MultiStateCheckUpdateAndTakeAction(e.target, applyToGang, function () {\r\n\r\n // show (and then hide) notification\r\n $(e.target).siblings(\".action-done-popover\").popover(\"show\"); // use last to get the top-most one (if we're displaying the details)\r\n setTimeout(function () {\r\n $(e.target).siblings(\".action-done-popover\").popover(\"hide\");\r\n }, 3000);\r\n\r\n });\r\n }\r\n }).each(function () {\r\n if ($(\"#PreviewMode\").val() == \"True\") {\r\n $(this).attr(\"disabled\", \"\");\r\n }\r\n });\r\n };\r\n\r\n $(function () {\r\n\r\n YouLi.Trip.Schedule.Response.InitialiseResponseChecks();\r\n\r\n $('#AddOnApplyToGangDialog').on('click', '.btn-accept', function () {\r\n onDoItemResponse(\r\n doItemResponse.itemId,\r\n doItemResponse.inviteeId,\r\n doItemResponse.responseValue,\r\n doItemResponse.element,\r\n doItemResponse.applyToGang,\r\n doItemResponse.callback\r\n );\r\n $('#AddOnApplyToGangDialog').modal('hide');\r\n });\r\n\r\n $('#AddOnApplyToGangDialog').on('click', '.btn-decline', function () {\r\n if ($(doItemResponse.element).attr(\"data-state\") === \"checked\") {\r\n $(doItemResponse.element).attr(\"data-state\", \"unchecked\");\r\n } else {\r\n $(doItemResponse.element).attr(\"data-state\", \"checked\");\r\n }\r\n });\r\n\r\n });\r\n\r\n }(YouLi.Trip.Schedule.Response ? YouLi.Trip.Schedule.Response : {}));\r\n }(YouLi.Trip.Schedule ? YouLi.Trip.Schedule : {}));\r\n }(YouLi.Trip ? YouLi.Trip : {}));\r\n}(YouLi ? YouLi : {}));\r\n","var YouLi = YouLi ? YouLi : {};\r\nYouLi.Trip = YouLi.Trip ? YouLi.Trip : {};\r\nYouLi.Trip.Tasks = YouLi.Trip.Tasks ? YouLi.Trip.Tasks : {};\r\n\r\n(function (YouLi) {\r\n (function (Trip) {\r\n (function (Tasks) {\r\n\r\n YouLi.Trip.Tasks.FilterTasks = function () {\r\n if (YouLi.Trip.ShowCompleted) {\r\n $(\".tasks-accordion-item.completed:not('.completing')\").show();\r\n }\r\n else {\r\n $(\".tasks-accordion-item.completed:not('.completing')\").hide();\r\n }\r\n $(\".filter-action-label\").text(YouLi.Trip.ShowCompleted ? \"Hide\" : \"Show\");\r\n };\r\n\r\n YouLi.Trip.Tasks.TaskRespondFormSuccess = function (result) {\r\n\r\n var formSubmitBtn = $(\"form\").find(\"button[type='submit']\");\r\n YouLi.Common.UI.HideButtonLoading(formSubmitBtn);\r\n\r\n if (result.errors) {\r\n $.each(result.errors, function (key, val) {\r\n var container = $('span[data-valmsg-for=\"' + key + '\"]');\r\n container.removeClass(\"field-validation-valid\").addClass(\"field-validation-error\");\r\n container.html(val[val.length - 1].ErrorMessage);\r\n\r\n $(\".field-validation-error\").closest(\".form-group\").addClass(\"has-error\").removeClass(\"has-success\");\r\n });\r\n\r\n // update the summary as well\r\n var summaryContainer = $('div[data-valmsg-summary=true]'),\r\n list = summaryContainer.find(\"ul\");\r\n //summaryContainer.addClass(\"alert alert-danger\");\r\n if (list && list.length && result.errors) {\r\n list.empty();\r\n summaryContainer.addClass(\"validation-summary-errors\").removeClass(\"validation-summary-valid\");\r\n\r\n $.each(result.errors, function () {\r\n $(\"<li />\").html(this[this.length - 1].ErrorMessage).appendTo(list);\r\n });\r\n }\r\n\r\n $('#question-dialog').animate({ scrollTop: 0 }, 800);\r\n\r\n } else {\r\n // get and restore collapsible panel states\r\n var openPanelIds = $(\".panel-collapse.collapse.in\").map(function () { return this.id; }).get();\r\n \r\n $('#tasks-content').html(result.contentTasksHtml);\r\n $('.trip-heading-title').html(result.tripHeadingTitle);\r\n $('.trip-content-heading').html(result.tripContentHeadingHtml);\r\n\r\n if ($('#content-trip-viewprofile').length > 0 && !$(\"#content-trip-viewprofile\").hasClass(\"hidden\")) {\r\n $('#view-profile-content').html(result.currentInviteeProfileHtml);\r\n $(\"#content-trip-viewprofile\").removeClass(\"hidden\"); // show it as it was previously being shown\r\n }\r\n\r\n RefreshInviteesTab(result.inviteesDetailsHtmlString, result.showInvitees);\r\n\r\n if (YouLi.Trip.Payments != undefined)\r\n YouLi.Trip.Payments.BillToEmail = result.currentInviteeEmail;\r\n\r\n if (openPanelIds.length > 0) {\r\n $('#' + openPanelIds.join(',#')).collapse(\"show\");\r\n }\r\n YouLi.Trip.Tasks.FilterTasks();\r\n $('#question-dialog').modal('hide');\r\n $(\"#content-trip-tasks\").toggleClass(\"hidden\", YouLi.Trip.CurrentSection != \"tasks\");\r\n\r\n setTimeout(function () {\r\n // animate the hiding of the just-completed task (if it was completed)\r\n if (!YouLi.Trip.ShowCompleted) {\r\n $(\".completing\").fadeOut(1000, function () {\r\n $(\".completing\").removeClass(\"completing\");\r\n });\r\n }\r\n else \r\n {\r\n $(\".completing\").removeClass(\"completing\");\r\n }\r\n }, 1000);\r\n\r\n YouLi.Trip.UpdateResponseFooter(runOnce = true, checkTripUpdates = false);\r\n }\r\n\r\n };\r\n\r\n YouLi.Trip.Tasks.TaskRespondFormFailure = function (xhr, status, error) {\r\n var formSubmitBtn = $(\"form\").find(\"button[type='submit']\");\r\n YouLi.Common.UI.HideButtonLoading(formSubmitBtn);\r\n\r\n // update the summary with the error\r\n var summaryContainer = $('div[data-valmsg-summary=true]'),\r\n list = summaryContainer.find(\"ul\");\r\n if (list && list.length) {\r\n list.empty();\r\n summaryContainer.addClass(\"validation-summary-errors\").removeClass(\"validation-summary-valid\");\r\n\r\n $(\"<li />\").html(error).appendTo(list);\r\n }\r\n\r\n $('#question-dialog').animate({ scrollTop: 0 }, 800);\r\n };\r\n\r\n var RefreshInviteesTab = function (tabHTML, showInviteeTab) {\r\n if (showInviteeTab) {\r\n // Display and refresh invitees tab (if not already displayed)\r\n $(\".content-tab-invitees\").removeClass(\"hidden\");\r\n\r\n $(\"#invitees-content\").html(tabHTML);\r\n\r\n YouLi.Trip.SetupInviteeSectionMenu();\r\n }\r\n }\r\n\r\n $(function () {\r\n\r\n // Response functionality\r\n $(document).on(\"click touchstart\", \".task-do-response\", function () {\r\n\r\n var taskItemId = $(this).data(\"task-item-id\");\r\n var inviteeId = $(\"#InviteeId\").val();\r\n var previewMode = $(\"#PreviewMode\").val();\r\n\r\n YouLi.Common.UI.ShowLoading();\r\n $(\"#question-dialog-content\").load('/trip/taskrespond?taskItemId=' + taskItemId + \"&inviteeid=\" + inviteeId + \"&preview=\" + previewMode, function (responseText, textStatus, XMLHttpRequest) {\r\n YouLi.Common.UI.HideLoading();\r\n if (textStatus == \"error\") {\r\n YouLi.Common.UI.ShowStandardDialog(\"An error occurred when loading response\");\r\n }\r\n else {\r\n $('#question-dialog').modal('show');\r\n }\r\n });\r\n });\r\n\r\n $(document).on(\"click\", \"#FilterTasks\", function () {\r\n // toggle filter\r\n YouLi.Trip.ShowCompleted = !YouLi.Trip.ShowCompleted;\r\n YouLi.Trip.Tasks.FilterTasks();\r\n });\r\n\r\n // initially hide or show completed, depending on number of tasks outstanding\r\n YouLi.Trip.Tasks.FilterTasks();\r\n\r\n });\r\n\r\n }(YouLi.Trip.Tasks ? YouLi.Trip.Tasks : {}));\r\n }(YouLi.Trip ? YouLi.Trip : {}));\r\n}(YouLi ? YouLi : {}));\r\n","(function ( $ ) {\r\n \r\n $.multiStateCheck = function (element, options) {\r\n\r\n var defaults = {\r\n states: [\"crossed\", \"unchecked\", \"checked\"],\r\n onAfterChangeState: function () { },\r\n }\r\n\r\n var plugin = this;\r\n\r\n plugin.settings = {}\r\n\r\n var $element = $(element),\r\n element = element;\r\n\r\n plugin.init = function () {\r\n plugin.settings = $.extend({}, defaults, options);\r\n\r\n $element.off(\"click\").on(\"click\", function (e) {\r\n\r\n if ($(this).attr(\"disabled\")) {\r\n return;\r\n }\r\n\r\n // three-way state\r\n //switch ($(this).attr(\"data-state\")) {\r\n // case \"checked\":\r\n // $(this).attr(\"data-state\", \"crossed\");\r\n // break;\r\n // case \"crossed\":\r\n // $(this).attr(\"data-state\", \"unchecked\");\r\n // break;\r\n // default: /* unchecked */\r\n // $(this).attr(\"data-state\", \"checked\");\r\n //}\r\n\r\n var currentState = $(this).attr(\"data-state\");\r\n var indexCurrentState = options.states.indexOf(currentState);\r\n var nextState = indexCurrentState == options.states.length - 1 ? 0 : indexCurrentState + 1; // either choose the next state, or if we are at the last state, choose the first state\r\n $(this).attr(\"data-state\", options.states[nextState])\r\n\r\n if (options.onAfterChangeState !== undefined) {\r\n options.onAfterChangeState(e);\r\n }\r\n });\r\n\r\n }\r\n\r\n plugin.revert = function () {\r\n if ($element.attr(\"disabled\")) {\r\n return;\r\n }\r\n console.log(\"Reverting\");\r\n // three-way state\r\n //switch ($element.attr(\"data-state\")) {\r\n // case \"checked\":\r\n // $element.attr(\"data-state\", \"unchecked\");\r\n // break;\r\n // case \"crossed\":\r\n // $element.attr(\"data-state\", \"checked\");\r\n // break;\r\n // default:\r\n // $element.attr(\"data-state\", \"crossed\");\r\n //}\r\n\r\n var currentState = $element.attr(\"data-state\");\r\n var indexCurrentState = options.states.indexOf(currentState);\r\n var nextState = 0 ? options.states.length - 1 : indexCurrentState - 1; // either choose the previous state, or if we are at the first state, choose the last state\r\n $element.attr(\"data-state\", options.states[nextState])\r\n }\r\n\r\n plugin.init(); \r\n }\r\n\r\n $.fn.multiStateCheck = function (options) {\r\n\r\n return this.each(function () {\r\n if ($(this).data('multiStateCheck') == undefined) {\r\n var plugin = new $.multiStateCheck(this, options);\r\n $(this).data('multiStateCheck', plugin);\r\n }\r\n });\r\n }\r\n}(jQuery));\r\n\r\n\r\n","var YouLi = YouLi ? YouLi : {};\r\nYouLi.TripDates = YouLi.TripDates ? YouLi.TripDates : {};\r\n\r\n(function (YouLi) {\r\n (function (TripDates) {\r\n\r\n\r\n function UpdateEndDate() {\r\n\r\n let startDate = $('.datepicker', '#TripDatesStartDate').data(\"DateTimePicker\");\r\n let endDate = $('.datepicker', '#TripDatesEndDate').data(\"DateTimePicker\");\r\n //set the date values based on the other one\r\n if (startDate && endDate) {\r\n if (startDate.date() != null) {\r\n if ($('#TripDates_EndDate').val() == \"\" || endDate.date() == null || Date.parse(startDate.date()) > Date.parse(endDate.date())) {\r\n endDate.date(startDate.date());\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n\r\n YouLi.TripDates.Initialise = function () {\r\n $(document).off(\"dp.show\", \"#TripDatesEndDate\");\r\n $(document).on(\"dp.show\", \"#TripDatesEndDate\", function (e) {\r\n // YOULI-459 - default the initial month\r\n datePicker = $('.datepicker', '#TripDatesEndDate').data(\"DateTimePicker\");\r\n if (datePicker.date() == null) {\r\n if ($(\"#TripDates_StartDate\").val() != \"\") {\r\n datePicker.date($(\"#TripDates_StartDate\").val());\r\n }\r\n datePicker.date(null);\r\n }\r\n });\r\n\r\n\r\n\r\n $(document).on(\"dp.change\", \"#TripDatesEndDate\", function () {\r\n UpdateEndDate()\r\n ToggleEstimatedDateFields();\r\n });\r\n\r\n $(document).on(\"dp.change\", \"#TripDatesStartDate\", function () {\r\n UpdateEndDate()\r\n ToggleEstimatedDateFields();\r\n });\r\n\r\n $(document).off('click', \"#toggle-date-estimate\").on(\"click\", \"#toggle-date-estimate\", function () {\r\n\r\n // toggle selection mode\r\n $(\"#TripDates_DateSelectionMode\").val($(\"#TripDates_DateSelectionMode\").val() == \"exact\" ? \"approx\" : \"exact\");\r\n\r\n ToggleEstimatedDateFields();\r\n });\r\n ToggleEstimatedDateFields(true); //init\r\n\r\n $(document).on(\"change\", \"#TripDates_IsSingleDay\", function () {\r\n\r\n var hasTime = $('#TripDates_IsSingleDay').is(\":checked\");\r\n $('.time-section').toggleClass('hidden', !hasTime);\r\n\r\n });\r\n\r\n $(\"#TripDatesStartTime\").on(\"dp.change\", \".timepicker\", function (e) {\r\n\r\n let startTime = $('.timepicker', '#TripDatesStartTime').data(\"DateTimePicker\");\r\n let endTime = $('.timepicker', '#TripDatesEndTime').data(\"DateTimePicker\");\r\n\r\n if (startTime && endTime) {\r\n if (startTime.date() !== null && endTime.date() === null) {\r\n endTime.date(startTime.date());\r\n }\r\n }\r\n });\r\n\r\n }\r\n\r\n function ToggleEstimatedDateFields(isInit) {\r\n var selectionMode = $(\"#TripDates_DateSelectionMode\").val();\r\n\r\n if (!isInit)\r\n $(\"#pendingSaveSpan\").show();\r\n\r\n if (selectionMode == \"exact\") {\r\n // show exact\r\n $(\".exactDate\").show();\r\n $(\"#approxDate\").hide();\r\n $(\"#toggle-dateType-text\").text(\"Not sure? Switch to enter free text\");\r\n \r\n // Reminders: only show \"ON\" if the trip is considered active (see https://docs.google.com/spreadsheets/d/1DEIvcV95Rv3LdyFNvBUmQV5CRrapGtpRhYNzVOJVS3I/edit#gid=0).\r\n var endDate = moment($(\"#TripDates_EndDate\").val(), \"D MMM YYYY\");\r\n var dateNow = new moment();\r\n if (!endDate || !endDate.isValid()) {\r\n $(\"#auto-reminders-status\").text(\"OFF\");\r\n $(\".reminders-status a\").attr(\"data-original-title\", \"Automated reminders OFF for this trip. Set a Start and End date to turn ON.\");\r\n }\r\n else if (endDate < new moment().subtract(1, 'month')) {\r\n $(\"#auto-reminders-status\").text(\"OFF\");\r\n $(\".reminders-status a\").attr(\"data-original-title\", \"Automated reminders OFF for this trip because it is more than one month ago.\");\r\n \r\n }\r\n else {\r\n $(\"#auto-reminders-status\").text(\"ON\");\r\n $(\".reminders-status a\").attr(\"data-original-title\", \"Automated reminders are ON for this trip. Click 'Don't know dates yet?' to turn OFF.\");\r\n }\r\n }\r\n else {\r\n // show approx\r\n $(\".exactDate\").hide();\r\n $(\"#approxDate\").show();\r\n $(\"#toggle-dateType-text\").text(\"Ready to Go? Switch to Set your Dates\");\r\n\r\n $(\"#auto-reminders-status\").text(\"OFF\");\r\n $(\".reminders-status a\").attr(\"data-original-title\", \"Automated reminders OFF for this trip. Click 'I know the trip dates' to set dates and turn ON.\");\r\n }\r\n }\r\n\r\n\r\n }(YouLi.TripDates ? YouLi.TripDates : {}));\r\n}(YouLi ? YouLi : {}));\r\n","(function ($) {\r\n\r\n $.fn.updateAvatarInline = function (options) {\r\n\r\n var self = $(this);\r\n\r\n var settings = $.extend({\r\n HiddenValueSelector: \"#ImageURL\",\r\n ImageFieldSelector: \"\",\r\n FileInputFieldSelector: \"\",\r\n SuccessHandler: undefined,\r\n S3RefreshURL: \"\",\r\n TargetImageFieldWidth: 100,\r\n TargetImageFieldHeight: 100,\r\n ValidFileTypes: undefined\r\n }, options);\r\n\r\n self.uploadAttemptsCount = 0;\r\n\r\n function UploadSuccess(data, textStatus, xhr) {\r\n\r\n var newSrc = YouLi.Common.Utils.AddParametersToURL(\"https://ylt-images.imgix.net/\" + encodeURIComponent(YouLi.Common.S3FileUpload.NewFileKey), \"fit=crop&crop=\" + settings.CropType + (settings.ModalImageFieldHeight == \"auto\" ? \"\" : \"&h=\" + settings.ModalImageFieldHeight) + \"&w=\" + settings.ModalImageFieldWidth),\r\n image = new Image();\r\n image.src = newSrc;\r\n image.onload = function () {\r\n self.find(\".thumbnail-image\").attr(\"src\", newSrc);\r\n YouLi.Common.UI.HideAvatarLoading(settings.FileInputFieldSelector);\r\n YouLi.Common.UI.HideButtonLoading(\".btn-form-complete\");\r\n }\r\n $(settings.HiddenValueSelector).val(encodeURIComponent(YouLi.Common.S3FileUpload.NewFileKey)); // could call if needed: .trigger(\"change\");\r\n\r\n self.find(\"#file\").val(\"\"); /* clear file selection to allow the same file to be selected again and trigger upload */\r\n\r\n // Nb: loading button will be cleared when new image is loaded\r\n }\r\n\r\n function UploadError(xhr, ajaxOptions, thrownError) {\r\n\r\n if (xhr.status == 403 && self.uploadAttemptsCount == 0) {\r\n // forbidden - try to refresh policy\r\n $.ajax({\r\n url: settings.S3RefreshURL,\r\n type: \"GET\",\r\n dataType: \"json\",\r\n contentType: \"application/json; charset=utf-8\",\r\n complete: function (response) {\r\n if (response.status != 200 || (response.responseJSON != undefined && response.responseJSON.success == false)) {\r\n YouLi.Common.UI.ShowStandardDialog(\"An error occurred. Please refresh the page to try again.\");\r\n }\r\n else {\r\n YouLi.Common.S3FileUpload.KeyPrefix = response.responseJSON.newKeyPrefix + response.responseJSON.newUUID;\r\n YouLi.Common.S3FileUpload.Uuid = response.responseJSON.newUUID;\r\n YouLi.Common.S3FileUpload.Policy = response.responseJSON.policy;\r\n YouLi.Common.S3FileUpload.PolicySignature = response.responseJSON.policySignature;\r\n\r\n // retry upload\r\n self.uploadAttemptsCount++;\r\n YouLi.Common.S3FileUpload.SingleFileSelected(self.querySelector(\"input[type='file']\"), settings.ValidFileTypes, UploadSuccess, UploadError, UploadComplete);\r\n }\r\n }\r\n\r\n });\r\n }\r\n else {\r\n alert(\"There was an error attempting to upload the file. (\" + thrownError + \")\");\r\n self.uploadAttemptsCount++;\r\n self.find(\"#file\").val(\"\"); /* clear file selection to allow the same file to be selected again and trigger upload */\r\n YouLi.Common.UI.HideAvatarLoading(settings.FileInputFieldSelector);\r\n YouLi.Common.UI.HideButtonLoading(\".btn-form-complete\");\r\n }\r\n }\r\n\r\n function UploadComplete(data, textStatus, xhr) {\r\n }\r\n\r\n $(function () {\r\n YouLi.Common.UI.Init();\r\n\r\n self.off(\"change\", \"input[type='file']\").on(\"change\", \"input[type='file']\", function (e) {\r\n if (this.files.length >= 1) {\r\n YouLi.Common.UI.ShowAvatarLoading(settings.FileInputFieldSelector);\r\n YouLi.Common.UI.ShowButtonLoading(\".btn-form-complete\");\r\n \r\n // Get a fresh S3 policy every time (so a user can upload the same file more than once, e.g. after changing it on their computer)\r\n $.ajax({\r\n url: settings.S3RefreshURL,\r\n type: \"GET\",\r\n dataType: \"json\",\r\n contentType: \"application/json; charset=utf-8\",\r\n complete: function (response) {\r\n if (response.status != 200 || (response.responseJSON != undefined && response.responseJSON.success == false)) {\r\n YouLi.Common.UI.ShowStandardDialog(\"An error occurred. Please refresh the page to try again.\");\r\n }\r\n else {\r\n YouLi.Common.S3FileUpload.KeyPrefix = response.responseJSON.newKeyPrefix + response.responseJSON.newUUID;\r\n YouLi.Common.S3FileUpload.Uuid = response.responseJSON.newUUID;\r\n YouLi.Common.S3FileUpload.Policy = response.responseJSON.policy;\r\n YouLi.Common.S3FileUpload.PolicySignature = response.responseJSON.policySignature;\r\n\r\n self.uploadAttemptsCount = 0;\r\n\r\n if (!YouLi.Common.S3FileUpload.SingleFileSelected(e.target, settings.ValidFileTypes, UploadSuccess, UploadError, UploadComplete)) {\r\n YouLi.Common.UI.HideAvatarLoading(settings.FileInputFieldSelector);\r\n YouLi.Common.UI.HideButtonLoading(\".btn-form-complete\");\r\n }\r\n }\r\n }\r\n\r\n });\r\n }\r\n });\r\n });\r\n\r\n return this;\r\n };\r\n\r\n}(jQuery));","var YouLiS3ResourceUpload = function (options, queueElement) {\r\n\r\n this.queueElement = queueElement;\r\n\r\n this.resourceDisplayName = \"\";\r\n this.contentType = \"\";\r\n this.uploadAttemptsCount = 0;\r\n\r\n this.options = $.extend({\r\n UploadUrl: \"\",\r\n SuccessURL: \"\",\r\n KeyPrefix: \"\",\r\n ACL: \"\",\r\n Uuid: \"\",\r\n AccessKey: \"\",\r\n Policy: \"\",\r\n PolicySignature: \"\",\r\n NewFileKey: \"\",\r\n FileTypeDescription: \"image\",\r\n FileTypeErrorText: \"\",\r\n MaxFileSize: 8000000,\r\n ValidFileTypes: [\"image/gif\", \"image/jpeg\", \"image/png\", \"application/pdf\", \"application/msword\", \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\r\n \"application/vnd.ms-excel\", \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\", \"text/plain\", \"application/vnd.apple.numbers\", \"application/vnd.apple.pages\"],\r\n }, options);\r\n\r\n this.progressHandler = function (e) {\r\n var self = this;\r\n if (e.lengthComputable) {\r\n var percentComplete = Math.round(e.loaded * 100 / e.total);\r\n self.queueElement.find(\".file-progress\").css(\"width\", percentComplete + '%').attr('aria-valuenow', percentComplete);\r\n self.queueElement.find('.file-progress span').text(percentComplete + \"%\");\r\n }\r\n else {\r\n self.queueElement.find('.file-progress span').text('unable to compute');\r\n }\r\n };\r\n\r\n this.completeHandler = function (xhr, status) {\r\n self.queueElement.find(\".progress\").addClass(\"hidden\");\r\n };\r\n\r\n this.successHandler = function (result, status, xhr) {\r\n if (xhr && xhr.status == 200) {\r\n alert(\"Success\");\r\n }\r\n };\r\n\r\n this.errorHandler = function (xhr, status, error) {\r\n alert(\"There was an error attempting to upload the file. (\" + error + \")\");\r\n };\r\n};\r\n\r\nYouLiS3ResourceUpload.prototype.SingleFileSelected = function (selectedFile, overrideSuccessHandler, overrideErrorHandler, overrideCompleteHandler, overrideProgressHandler) {\r\n\r\n if (selectedFile) {\r\n if (selectedFile.size > this.options.MaxFileSize) {\r\n alert(\"File must be max \" + (this.options.MaxFileSize / 1000000) + \"MB in size\");\r\n return false;\r\n }\r\n else if (this.options.ValidFileTypes.length > 0 && !(YouLi.Validation.IsValidFileType(selectedFile, this.options.ValidFileTypes))) {\r\n // the file doesn't match the valid file types or any of the override extensions\r\n if (this.options.FileTypeErrorText.length > 0) {\r\n alert(this.options.FileTypeErrorText);\r\n }\r\n else {\r\n alert(\"File must be a valid \" + this.options.FileTypeDescription);\r\n }\r\n return false;\r\n }\r\n\r\n this.UploadFile(selectedFile, overrideSuccessHandler, overrideErrorHandler, overrideCompleteHandler, overrideProgressHandler);\r\n }\r\n\r\n return true;\r\n};\r\n\r\nYouLiS3ResourceUpload.prototype.UploadFile = function (selectedFile, overrideSuccessHandler, overrideErrorHandler, overrideCompleteHandler, overrideProgressHandler) {\r\n\r\n var self = this;\r\n\r\n var redirect = \"\";\r\n\r\n if (typeof FormData === \"undefined\") {\r\n // Redirect to an empty page is required for IE < 10\r\n redirect = this.options.SuccessURL;\r\n }\r\n\r\n var dataString = new FormData();\r\n\r\n this.options.NewFileKey = this.options.KeyPrefix + selectedFile.name;\r\n this.resourceDisplayName = selectedFile.name;\r\n this.contentType = YouLi.Common.Utils.MimeType(YouLi.Common.Utils.GetFileExtension(selectedFile.name));\r\n\r\n dataString.append(\"key\", this.options.NewFileKey);\r\n dataString.append(\"acl\", this.options.ACL);\r\n dataString.append(\"Content-Type\", YouLi.Common.Utils.MimeType(YouLi.Common.Utils.GetFileExtension(selectedFile.name)));\r\n dataString.append(\"x-amz-meta-uuid\", this.options.Uuid);\r\n dataString.append(\"AWSAccessKeyId\", this.options.AccessKey);\r\n dataString.append(\"Policy\", this.options.Policy);\r\n dataString.append(\"Signature\", this.options.PolicySignature);\r\n dataString.append(\"success_action_redirect\", redirect);\r\n dataString.append('file', selectedFile);\r\n\r\n if (self.queueElement !== undefined) {\r\n self.queueElement.find(\".file-progress\").css(\"width\", '0%').attr('aria-valuenow', 0);\r\n self.queueElement.find(\".progress\").removeClass(\"hidden\");\r\n };\r\n\r\n $.ajax({\r\n url: this.options.UploadUrl,\r\n type: 'POST',\r\n xhr: function () { // Custom XMLHttpRequest\r\n var myXhr = $.ajaxSettings.xhr();\r\n if (myXhr.upload) { // Check if upload property exists\r\n myXhr.upload.addEventListener('progress', (function (passedInElement) {\r\n return function (e) { overrideProgressHandler !== undefined ? overrideProgressHandler(e, passedInElement) : self.progressHandler(e, passedInElement); };\r\n })(self.queueElement), false); // For handling the progress of the upload\r\n }\r\n return myXhr;\r\n },\r\n //Ajax events\r\n success: function (result, status, xhr) {\r\n if (overrideSuccessHandler !== undefined) {\r\n eval(overrideSuccessHandler(result, status, xhr, self.queueElement, self.options.NewFileKey, self.resourceDisplayName, self.contentType));\r\n }\r\n else {\r\n self.successHandler(result, status, xhr);\r\n }\r\n },\r\n error: function (xhr, status, error) {\r\n if (overrideErrorHandler !== undefined) {\r\n eval(overrideErrorHandler(xhr, status, error, self));\r\n }\r\n else {\r\n self.errorHandler(xhr, status, error);\r\n }\r\n },\r\n complete: function (xhr, status) {\r\n if (overrideCompleteHandler !== undefined) {\r\n eval(overrideCompleteHandler(xhr, status, self.queueElement));\r\n }\r\n else {\r\n self.completeHandler(xhr, status);\r\n }\r\n },\r\n // Form data\r\n data: dataString,\r\n //Options to tell jQuery not to process data or worry about content-type.\r\n cache: false,\r\n contentType: false,\r\n processData: false\r\n });\r\n};"]}