{"version":3,"sources":["webpack:///./node_modules/ui-core/plugins/panzoom/jquery.panzoom.js","webpack:///./node_modules/ui-core/widgets/publication-content/js/crossref.js","webpack:///./node_modules/ui-core/widgets/article-tools/js/article-tools.js","webpack:///./node_modules/ui-core/widgets/publication-content/js/publication-content.js","webpack:///./node_modules/ui-core/components/figure-viewer/js/figure-viewer-script.js","webpack:///./node_modules/@atypon/ui-bundle-generator/.generated/groups/_article.js"],"names":["global","window","$","document","slice","Array","prototype","rupper","rsvg","floating","rmatrix","RegExp","createResetOptions","opts","options","range","animate","extend","Matrix","a","b","c","d","e","f","g","h","i","type","this","elements","Vector","x","y","z","Panzoom","elem","nodeType","error","contains","data","defaults","$elem","$set","length","$doc","ownerDocument","$parent","parent","isSVG","test","namespaceURI","nodeName","toLowerCase","panning","_buildTransform","_transform","cssProps","transform","replace","_buildTransition","resetDimensions","$empty","self","each","name","enable","scale","getMatrix","_checkPanWhenZoomed","matrix","isVector","inverse","determinant","eventNamespace","transition","cursor","disablePan","disableZoom","disableXAxis","disableYAxis","which","increment","exponential","panOnlyWhenZoomed","minScale","maxScale","rangeStep","duration","easing","contain","constructor","instance","_initStyle","_bind","disabled","disable","_resetStyle","_unbind","isDisabled","destroy","removeData","container","getBoundingClientRect","dims","absScale","Math","abs","dimensions","width","height","left","css","top","border","bottom","right","margin","reset","setMatrix","_origTransform","silent","_trigger","resetZoom","origMatrix","dValue","zoom","resetPan","pan","setTransform","style","setAttribute","getTransform","transformElem","attr","exec","shift","spaceWLeft","spaceWRight","scaleDiff","conWidth","conHeight","zoomAspectW","zoomAspectH","offsetWidth","spaceHTop","spaceHBottom","max","min","$zoomRange","val","originalMatrix","join","isPanning","off","_transition","relative","_typeof","startScale","focal","clientX","clientY","clientV","surfaceM","o","parentOffset","offset","offsetM","scrollLeft","scrollTop","surfaceV","scaleBy","noSetRange","option","key","value","arguments","undefined","_setOptions","proxy","toDisable","styles","overflow","position","ns","str_down","str_start","str_click","events","$reset","m","isFunction","touches","originalEvent","preventDefault","stopPropagation","_startMove","contextmenu","on","step","prop","$zoomIn","$zoomOut","add","startTransform","_getDistance","touch1","touch2","sqrt","pow","_getMiddle","event","triggerHandler","concat","call","moveEvent","endEvent","startDistance","startMiddle","startPageX","startPageY","touch","original","origPageX","origPageY","panOptions","setStart","getScale","pageX","pageY","move","coords","middle","diff","matrixEquals","first","second","round","fn","panzoom","args","ret","charAt","apply","push","factory","jQuery","initCrossref","init","controller","touchArea","SETTINGS","touchStarted","tapEvent","element","callback","addEventListener","ctrlKey","shiftKey","metaKey","screenX","screenY","newTouchArea","buildQueryString","query","encodeURIComponent","isIos","navigator","userAgent","MSStream","doiMeta","getDoiMeta","metaTags","querySelectorAll","Object","hasOwnProperty","tag","scheme","doi","getAttribute","queryData","domain","location","hostname","uri_scheme","protocol","cm_version","createElement","querySelector","appendChild","widget","display","innerHTML","overlay","popup","popupOffset","popupInner","content","closeButton","classList","body","map","initialised","link","scrollY","UX","readyState","articleTools","control","copy","str","additionalLink","el","id","host","selector","match","setSelectionRange","select","execCommand","removeChild","copiedEvent","Event","trigger","isDefaultPrevented","closest","hide","permission","forEach","url","open","likeLink","tab","loader","$activator","figure","references","related","details","$tabs","$spinner","figuresTab","tabFigure","referencesTab","tabReferences","relatedTab","tabRelated","detailsTab","accessTab","tabDetails","vPort","isMobile","cloudFlareScript","openSeaDragonCloudFlareScript","get","figures","truncation","load","articleTabs","tableToggle","additionalController","boxedContent","boxedHtml","html","$myModal","append","modal_start","find","modal","rebuild","responsive","extra","accordion","back","articleTabsTrigger","$loaWrapper","removeClass","addClass","next","removeAttr","contents","wrap","hasClass","preventSelectActiveTab","onLoadtab","articleTab","$articleReferences","copyPastReferences","appendTo","show","creativeWorkMeta","clone","ajaxUrl","tabSelector","paneSelector","tabName","selectActiveTab","check","empty","getContent","$tabPane","onLoad","response","status","xhr","console","log","statusText","attach","loaderTarget","indexOf","getContentSuccess","tabTarget","isArticleTabEmpty","$tab","figureViewer","expand","figcaption","figureTitle","figureCaption","accordionClass","accordionContent","accordionTrigger","accordionTriggerIcon","accordionTriggerCaption","before","remove","toTrunk8","toTrunk8Mobile","linesToShow","MobileLinesToShow","showMoreText","showLessText","seeMoreIcon","seeLessIcon","seeMoreIconMobile","truncateTarget","not","truncate","lines","seeMoreLink","seeMoreText","seeLessText","mobileTarget","$triggers","$target","currentTarget","$tableToggle","toggle","$section","$window","$html","$document","$body","$isHighRes","isExpanded","filter","filterClass","$topRegHeight","innerHeight","$figures","$figuresToShow","$figureWidth","$currentIndex","$focusedElementBeforeOpened","$holder","$holderElement","$captionHolder","$lister","$figureRegionContainer","$captionRegion","$contentRegion","$figureNav","$zoominbtn","$zoomoutbtn","$zoomrange","$zoomreset","$image","$browsebtn","$returnbtn","islocked","offsetY","pageYOffset","$hideList","$browseContainer","$captionTitle","onHighRes","then","onHighResCallback","index","$this","dataRelElement","rel","className","dataRel","clickHandler","click","prev","captionToggle","browse","$img","keydown","keyCode","supplementary","hideOnClickOutside","resize","focusCycle","target","is","$self","highResImg","shortcutsView","toggleClass","captionBtn","holdCaption","captionTitle","utils","focusCycleInitiator","updateAriaLabelForCaptionHolder","eq","$next","$prev","$figure","pauseOriginalStream","figureLink","children","streamReset","outerHTML","showCaptionTitle","$caption","additionalBehaviorOnShow","showCaption","removeFigureTitle","headerOptions","additionalReplace","nav","$thumbnails","$thumb","toIndex","save","$images","$fig","$figureExtra","$figImage","$figureLinks","additionalBrowse","return","$figureViewText","additionalReturn","$windowsHeight","$height","figcaptionSize","displayViewer","additionalShow","activeElement","focus","setFiguersToShow","additionalOnShow","pauseClonedStream","additionalOnHide","$el","swap","swipe","direction","distance","fingerCount","fingerData","slide","setTimeout","$slide","wHeight","topHeight","$figcaption","figure_area_height","figure_title_height","doubleTap","nodoubletapzoom","bind","preventZoom","t2","timeStamp","dt","fingers","$element","text","figureExtraContent","after","$originalFigure","getScript","currentTime","pause","main","$figureViewer","$loader","err"],"mappings":"kFASWA,E;;;;;;;;IAcuC,SAAUC,EAAQC,GAChE,aAEA,IAAIC,EAAWF,EAAOE,SAElBC,EAAQC,MAAMC,UAAUF,MAOxBG,EAAS,WACTC,EAAO,sBAEPC,EAAW,uBAEXC,EAAU,IAAIC,OACd,aACIF,EAHS,WAKTA,EALS,WAOTA,EAPS,WASTA,EATS,WAWTA,EAXS,WAaTA,EACA,QAwBR,SAASG,mBAAmBC,GACxB,IAAIC,EAAU,CAACC,OAAO,EAAMC,SAAS,GAMrC,MALoB,kBAATH,EACPC,EAAQE,QAAUH,EAElBX,EAAEe,OAAOH,EAASD,GAEfC,EAQX,SAASI,OAAOC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,GAClB,UAAdzB,EAAE0B,KAAKT,GACPU,KAAKC,SAAW,EAAEX,EAAE,IAAKA,EAAE,IAAKA,EAAE,IAAKA,EAAE,IAAKA,EAAE,IAAKA,EAAE,GAAI,EAAG,EAAG,GAEjEU,KAAKC,SAAW,CAACX,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,GAAK,EAAGC,GAAK,EAAGC,GAAK,GA+EhE,SAASI,OAAOC,EAAGC,EAAGC,GAClBL,KAAKC,SAAW,CAACE,EAAGC,EAAGC,GAwB3B,SAASC,QAAQC,EAAMtB,GAEnB,KAAMe,gBAAgBM,SAClB,OAAO,IAAIA,QAAQC,EAAMtB,GAIP,IAAlBsB,EAAKC,UACLnC,EAAEoC,MAAM,sCAEPpC,EAAEqC,SAASpC,EAAUiC,IACtBlC,EAAEoC,MAAM,oDAIZ,IAAIhB,EAAIpB,EAAEsC,KAAKJ,EA5LL,UA6LV,GAAId,EACA,OAAOA,EAKXO,KAAKf,QAAUA,EAAUZ,EAAEe,OAAO,GAAIkB,QAAQM,SAAU3B,GACxDe,KAAKO,KAAOA,EACZ,IAAIM,EAASb,KAAKa,MAAQxC,EAAEkC,GAC5BP,KAAKc,KAAO7B,EAAQ6B,MAAQ7B,EAAQ6B,KAAKC,OAAS9B,EAAQ6B,KAAOD,EACjEb,KAAKgB,KAAO3C,EAAEkC,EAAKU,eAAiB3C,GACpC0B,KAAKkB,QAAUL,EAAMM,SACrBnB,KAAKmB,OAASnB,KAAKkB,QAAQ,GAI3BlB,KAAKoB,MAAQzC,EAAK0C,KAAKd,EAAKe,eAAiD,QAAhCf,EAAKgB,SAASC,cAE3DxB,KAAKyB,SAAU,EAKfzB,KAAK0B,kBAIL1B,KAAK2B,WAAatD,EAAEuD,SAASC,UACvBxD,EAAEuD,SAASC,UAAUC,QAAQpD,EAAQ,OAAO8C,cAC5C,YAGNxB,KAAK+B,mBAGL/B,KAAKgC,kBAGL,IAAIC,EAAS5D,IACT6D,EAAOlC,KACX3B,EAAE8D,KAAK,CAAC,UAAW,WAAY,aAAc,WAAW,SAAUrC,EAAGsC,GACjEF,EAAKE,GAAQnD,EAAQmD,IAASH,KAGlCjC,KAAKqC,SAELrC,KAAKsC,MAAQtC,KAAKuC,YAAY,GAC9BvC,KAAKwC,sBAGLnE,EAAEsC,KAAKJ,EA/OG,SA+OYP,MAtK1BX,OAAOZ,UAAY,CAMf0B,EAAG,SAAHA,EAAasC,GACT,IAAIC,EAAWD,aAAkBvC,OAE7BZ,EAAIU,KAAKC,SACTV,EAAIkD,EAAOxC,SAEf,OAAIyC,GAAyB,IAAbnD,EAAEwB,OAEP,IAAIb,OACPZ,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,GACrCD,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,GACrCD,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,IAElCA,EAAEwB,SAAWzB,EAAEyB,QAEf,IAAI1B,OACPC,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,GACrCD,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,GACrCD,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,GAErCD,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,GACrCD,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,GACrCD,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,GAErCD,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,GACrCD,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,GACrCD,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,GAAKD,EAAE,GAAKC,EAAE,KASjDoD,QAAS,SAATA,UACI,IAAIlD,EAAI,EAAIO,KAAK4C,cACbtD,EAAIU,KAAKC,SACb,OAAO,IAAIZ,OACPI,GAAKH,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,IAC5BG,IAAMH,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,IAC7BG,GAAKH,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,IAE5BG,IAAMH,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,IAC7BG,GAAKH,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,IAC5BG,IAAMH,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,IAE7BG,GAAKH,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,IAC5BG,IAAMH,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,IAC7BG,GAAKH,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,MAOpCsD,YAAa,SAAbA,cACI,IAAItD,EAAIU,KAAKC,SACb,OACIX,EAAE,IAAMA,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,IAC/BA,EAAE,IAAMA,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,IAC/BA,EAAE,IAAMA,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,MAgB3CY,OAAOzB,UAAUiB,EAAIL,OAAOZ,UAAUiB,EAAI,SAAUI,GAChD,OAAOE,KAAKC,SAASH,IAsFzBQ,QAAQzB,QAAUA,EAElByB,QAAQM,SAAW,CAKfiC,eAAgB,WAGhBC,YAAY,EAGZC,OAAQ,OAGRC,YAAY,EACZC,aAAa,EAGbC,cAAc,EACdC,cAAc,EAGdC,MAAO,EAIPC,UAAW,GAIXC,aAAa,EAGbC,mBAAmB,EAGnBC,SAAU,GACVC,SAAU,EAIVC,UAAW,IAGXC,SAAU,IAEVC,OAAQ,cAMRC,SAAS,GAGbvD,QAAQ7B,UAAY,CAChBqF,YAAaxD,QAKbyD,SAAU,SAAVA,WACI,OAAO/D,MAMXqC,OAAQ,SAARA,SAEIrC,KAAKgE,aACLhE,KAAKiE,QACLjE,KAAKkE,UAAW,GAMpBC,QAAS,SAATA,UACInE,KAAKkE,UAAW,EAChBlE,KAAKoE,cACLpE,KAAKqE,WAMTC,WAAY,SAAZA,aACI,OAAOtE,KAAKkE,UAMhBK,QAAS,SAATA,UACIvE,KAAKmE,UACL9F,EAAEmG,WAAWxE,KAAKO,KArVZ,WA6VVyB,gBAAiB,SAAjBA,kBAEIhC,KAAKyE,UAAYzE,KAAKmB,OAAOuD,wBAG7B,IAAInE,EAAOP,KAAKO,KAEZoE,EAAOpE,EAAKmE,wBACZE,EAAWC,KAAKC,IAAI9E,KAAKsC,OAC7BtC,KAAK+E,WAAa,CACdC,MAAOL,EAAKK,MACZC,OAAQN,EAAKM,OACbC,KAAM7G,EAAE8G,IAAI5E,EAAM,QAAQ,IAAS,EACnC6E,IAAK/G,EAAE8G,IAAI5E,EAAM,OAAO,IAAS,EAEjC8E,OAAQ,CACJD,IAAK/G,EAAE8G,IAAI5E,EAAM,kBAAkB,GAAQqE,GAAY,EACvDU,OAAQjH,EAAE8G,IAAI5E,EAAM,qBAAqB,GAAQqE,GAAY,EAC7DM,KAAM7G,EAAE8G,IAAI5E,EAAM,mBAAmB,GAAQqE,GAAY,EACzDW,MAAOlH,EAAE8G,IAAI5E,EAAM,oBAAoB,GAAQqE,GAAY,GAE/DY,OAAQ,CACJJ,IAAK/G,EAAE8G,IAAI5E,EAAM,aAAa,GAAQqE,GAAY,EAClDM,KAAM7G,EAAE8G,IAAI5E,EAAM,cAAc,GAAQqE,GAAY,KAUhEa,MAAO,SAAPA,MAAiBxG,GACbA,EAAUF,mBAAmBE,GAE7B,IAAIwD,EAASzC,KAAK0F,UAAU1F,KAAK2F,eAAgB1G,GAC5CA,EAAQ2G,QACT5F,KAAK6F,SAAS,QAASpD,IAQ/BqD,UAAW,SAAXA,UAAqB7G,GACjBA,EAAUF,mBAAmBE,GAC7B,IAAI8G,EAAa/F,KAAKuC,UAAUvC,KAAK2F,gBACrC1G,EAAQ+G,OAASD,EAAW,GAC5B/F,KAAKiG,KAAKF,EAAW,GAAI9G,IAO7BiH,SAAU,SAAVA,SAAoBjH,GAChB,IAAI8G,EAAa/F,KAAKuC,UAAUvC,KAAK2F,gBACrC3F,KAAKmG,IAAIJ,EAAW,GAAIA,EAAW,GAAIhH,mBAAmBE,KAS9DmH,aAAc,SAAdA,aAAwBvE,GAGpB,IAFA,IAAIf,EAAOd,KAAKc,KACZhB,EAAIgB,EAAKC,OACNjB,KACHzB,EAAEgI,MAAMvF,EAAKhB,GAAI,YAAa+B,GAM1B7B,KAAKoB,OACLN,EAAKhB,GAAGwG,aAAa,YAAazE,IAa9C0E,aAAc,SAAdA,aAAwB1E,GACpB,IACI2E,EADOxG,KAAKc,KACS,GAqBzB,OApBIe,EACA7B,KAAKoG,aAAavE,IAKlBA,EAAYxD,EAAEgI,MAAMG,EAAe,cAE/BxG,KAAKoB,OAAWS,GAA2B,SAAdA,IAC7BA,EAAYxD,EAAEoI,KAAKD,EAAe,cAAgB,SAMxC,SAAd3E,GAAyBhD,EAAQwC,KAAKQ,IAEtC7B,KAAKoG,aAAcvE,EAAYxD,EAAE8G,IAAIqB,EAAe,cAGjD3E,GAAa,QAQxBU,UAAW,SAAXA,UAAqBV,GACjB,IAAIY,EAAS5D,EAAQ6H,KAAK7E,GAAa7B,KAAKuG,gBAI5C,OAHI9D,GACAA,EAAOkE,QAEJlE,GAAU,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAarCiD,UAAW,SAAXA,UAAqBjD,EAAQxD,GACzB,IAAIe,KAAKkE,SAAT,CAGKjF,IACDA,EAAU,IAGQ,iBAAXwD,IACPA,EAASzC,KAAKuC,UAAUE,IAE5B,IAAIH,GAASG,EAAO,GAChBoB,OAAqC,IAApB5E,EAAQ4E,QAA0B5E,EAAQ4E,QAAU7D,KAAKf,QAAQ4E,QAGtF,GAAIA,EAAS,CACT,IAKI+C,EAAYC,EAAaC,EALzBnC,EAAO1F,EAAQ0F,KACdA,IACD3E,KAAKgC,kBACL2C,EAAO3E,KAAK+E,YAGhB,IAAIN,EAAYzE,KAAKyE,UACjBO,EAAQL,EAAKK,MACbC,EAASN,EAAKM,OACd8B,EAAWtC,EAAUO,MACrBgC,EAAYvC,EAAUQ,OACtBgC,EAAcF,EAAW/B,EACzBkC,EAAcF,EAAY/B,EAIQ,WAAlCjF,KAAKkB,QAAQiE,IAAI,cAA6D,WAAhC9G,EAAE8G,IAAInF,KAAKO,KAAM,YAG/DqG,GADAE,GAAa9B,EAAQhF,KAAKO,KAAK4G,aAAe,GACrBxC,EAAKU,OAAOH,KACrC2B,EAAc7B,EAAQ+B,EAAWD,EAAYnC,EAAKU,OAAOE,OAEzDqB,EAAaC,GAAe7B,EAAQ+B,GAAY,EAEpD,IAAIK,GAAanC,EAAS+B,GAAa,EAAIrC,EAAKU,OAAOD,IACnDiC,GAAgBpC,EAAS+B,GAAa,EAAIrC,EAAKU,OAAOD,IAAMT,EAAKU,OAAOC,OAGxE7C,EAAO,GADK,WAAZoB,GAAqC,cAAZA,GAA2BoD,EAAc,KACtDpC,KAAKyC,IAAIzC,KAAK0C,IAAI9E,EAAO,GAAImE,EAAajC,EAAKU,OAAOH,OAAQ2B,GAE9DhC,KAAK0C,IAAI1C,KAAKyC,IAAI7E,EAAO,GAAImE,IAAcC,GAIvDpE,EAAO,GADK,WAAZoB,GAAqC,cAAZA,GAA2BqD,EAAc,KACtDrC,KAAKyC,IAAIzC,KAAK0C,IAAI9E,EAAO,GAAI2E,EAAYzC,EAAKU,OAAOD,MAAOiC,GAE5DxC,KAAK0C,IAAI1C,KAAKyC,IAAI7E,EAAO,GAAI2E,IAAaC,GAgB9D,GAXwB,SAApBpI,EAAQE,SAERa,KAAK8C,YAAY7D,EAAQE,SAIzBF,EAAQC,OACRc,KAAKwH,WAAWC,IAAInF,GAIpBtC,KAAKf,QAAQiE,cAAgBlD,KAAKf,QAAQkE,aAAc,CACxD,IAAIuE,EAAiB1H,KAAKuC,YACtBvC,KAAKf,QAAQiE,eACbT,EAAO,GAAKiF,EAAe,IAE3B1H,KAAKf,QAAQkE,eACbV,EAAO,GAAKiF,EAAe,IAcnC,OAXA1H,KAAKoG,aAAa,UAAY3D,EAAOkF,KAAK,KAAO,KAEjD3H,KAAKsC,MAAQA,EAGbtC,KAAKwC,oBAAoBF,GAEpBrD,EAAQ2G,QACT5F,KAAK6F,SAAS,SAAUpD,GAGrBA,IAMXmF,UAAW,SAAXA,YACI,OAAO5H,KAAKyB,SAOhBqB,WAAY,SAAZA,WAAsB+E,GAClB,GAAK7H,KAAK8H,YAMV,IAHA,IAAIhF,WAAa+E,IAAQ7H,KAAKf,QAAQ6D,WAAa,OAAS9C,KAAK8H,YAC7DhH,EAAOd,KAAKc,KACZhB,EAAIgB,EAAKC,OACNjB,KAECzB,EAAEgI,MAAMvF,EAAKhB,GAAI,gBAAkBgD,YACnCzE,EAAEgI,MAAMvF,EAAKhB,GAAI,aAAcgD,aAe3CqD,IAAK,SAALA,IAAehG,EAAGC,EAAGnB,GACjB,IAAIe,KAAKf,QAAQ+D,WAAjB,CAGK/D,IACDA,EAAU,IAEd,IAAIwD,EAASxD,EAAQwD,OAChBA,IACDA,EAASzC,KAAKuC,aAGdtD,EAAQ8I,WACR5H,IAAMsC,EAAO,GACbrC,IAAMqC,EAAO,IAEjBA,EAAO,GAAKtC,EACZsC,EAAO,GAAKrC,EACZJ,KAAK0F,UAAUjD,EAAQxD,GAClBA,EAAQ2G,QACT5F,KAAK6F,SAAS,MAAOpD,EAAO,GAAIA,EAAO,MAqB/CwD,KAAM,SAANA,KAAgB3D,EAAOtD,GAEE,WAAjBgJ,EAAO1F,IACPtD,EAAOsD,EACPA,EAAQ,MACAtD,IACRA,EAAO,IAEX,IAAIC,EAAUZ,EAAEe,OAAO,GAAIY,KAAKf,QAASD,GAEzC,IAAIC,EAAQgE,YAAZ,CAGA,IAAI9D,GAAU,EACVsD,EAASxD,EAAQwD,QAAUzC,KAAKuC,YAChC0F,GAAcxF,EAAO,GAGJ,iBAAVH,IAIHA,EADArD,EAAQqE,aAAe2E,EAAahJ,EAAQoE,WAAa,EACjDwB,KAAKvC,EAAQ,OAAS,OAAO2F,EAAY,GAEzCA,EAAahJ,EAAQoE,WAAaf,GAAS,EAAI,GAE3DnD,GAAU,GAIVmD,EAAQrD,EAAQwE,SAChBnB,EAAQrD,EAAQwE,SACTnB,EAAQrD,EAAQuE,WACvBlB,EAAQrD,EAAQuE,UAIpB,IAAI0E,EAAQjJ,EAAQiJ,MACpB,GAAIA,IAAUjJ,EAAQ+D,WAAY,CAG9BhD,KAAKgC,kBACL,IAAI2C,EAAQ1F,EAAQ0F,KAAO3E,KAAK+E,WAC5BoD,EAAUD,EAAMC,QAChBC,EAAUF,EAAME,QAIfpI,KAAKoB,QACN+G,GAAWxD,EAAKK,MAAQiD,EAAa,EACrCG,GAAWzD,EAAKM,OAASgD,EAAa,GAG1C,IAAII,EAAU,IAAInI,OAAOiI,EAASC,EAAS,GACvCE,EAAW,IAAIjJ,OAAOoD,GAEtB8F,EAAIvI,KAAKwI,cAAgBxI,KAAKkB,QAAQuH,SACtCC,EAAU,IAAIrJ,OAAO,EAAG,EAAGkJ,EAAErD,KAAOlF,KAAKgB,KAAK2H,aAAc,EAAG,EAAGJ,EAAEnD,IAAMpF,KAAKgB,KAAK4H,aACpFC,EAAWP,EAAS3F,UAAUxC,EAAEuI,EAAQ/F,UAAUxC,EAAEkI,IACpDS,EAAUxG,EAAQG,EAAO,GAC7B6F,EAAWA,EAASnI,EAAE,IAAId,OAAO,CAACyJ,EAAS,EAAG,EAAGA,EAAS,EAAG,KAC7DT,EAAUK,EAAQvI,EAAEmI,EAASnI,EAAE0I,IAC/BpG,EAAO,IAAMA,EAAO,IAAM0F,EAAUE,EAAQ3I,EAAE,IAC9C+C,EAAO,IAAMA,EAAO,IAAM2F,EAAUC,EAAQ3I,EAAE,IAIlD+C,EAAO,GAAKH,EACZG,EAAO,GAA+B,iBAAnBxD,EAAQ+G,OAAsB/G,EAAQ+G,OAAS1D,EAGlEtC,KAAK0F,UAAUjD,EAAQ,CACnBtD,aAAoC,IAApBF,EAAQE,QAA0BF,EAAQE,QAAUA,EAEpED,OAAQD,EAAQ8J,aAIf9J,EAAQ2G,QACT5F,KAAK6F,SAAS,OAAQpD,EAAO,GAAIxD,KASzC+J,OAAQ,SAARA,OAAkBC,EAAKC,GACnB,IAAIjK,EACJ,IAAKgK,EAED,OAAO5K,EAAEe,OAAO,GAAIY,KAAKf,SAG7B,GAAmB,iBAARgK,EAAkB,CACzB,GAAyB,IAArBE,UAAUpI,OACV,YAA6BqI,IAAtBpJ,KAAKf,QAAQgK,GAAqBjJ,KAAKf,QAAQgK,GAAO,MAEjEhK,EAAU,IACFgK,GAAOC,OAEfjK,EAAUgK,EAGdjJ,KAAKqJ,YAAYpK,IAQrBoK,YAAa,SAAbA,YAAuBpK,GACnBZ,EAAE8D,KACElD,EACAZ,EAAEiL,OAAM,SAAUL,EAAKC,GACnB,OAAQD,GACJ,IAAK,aACDjJ,KAAKoE,cAET,IAAK,UACL,IAAK,WACL,IAAK,aACL,IAAK,SACL,IAAK,cACL,IAAK,UACL,IAAK,WACL,IAAK,SACL,IAAK,QACL,IAAK,QACL,IAAK,UACL,IAAK,iBACDpE,KAAKqE,UAGb,OADArE,KAAKf,QAAQgK,GAAOC,EACZD,GACJ,IAAK,aACDjJ,KAAKgE,aAET,IAAK,UACL,IAAK,WACL,IAAK,aACL,IAAK,SAEDhE,KAAKiJ,GAAOC,EAEhB,IAAK,cACL,IAAK,UACL,IAAK,WACL,IAAK,SACL,IAAK,QACL,IAAK,QACL,IAAK,UACL,IAAK,iBACDlJ,KAAKiE,QACL,MACJ,IAAK,SACD5F,EAAEgI,MAAMrG,KAAKO,KAAM,SAAU2I,GAC7B,MACJ,IAAK,WACDlJ,KAAKwH,WAAWf,KAAK,MAAOyC,GAC5B,MACJ,IAAK,WACDlJ,KAAKwH,WAAWf,KAAK,MAAOyC,GAC5B,MACJ,IAAK,YACDlJ,KAAKwH,WAAWf,KAAK,OAAQyC,GAC7B,MACJ,IAAK,iBACDlJ,KAAK0B,kBACL,MACJ,IAAK,WACL,IAAK,SACD1B,KAAK+B,mBAET,IAAK,aACD/B,KAAK8C,aACL,MACJ,IAAK,oBACD9C,KAAKwC,sBACL,MACJ,IAAK,OACG0G,aAAiB7K,GAAK6K,EAAMnI,SAC5Bf,KAAKc,KAAOoI,EAEZlJ,KAAKgE,aACLhE,KAAK0B,sBAGlB1B,QAUXwC,oBAAqB,SAArBA,oBAA+BF,GAC3B,IAAIrD,EAAUe,KAAKf,QACnB,GAAIA,EAAQsE,kBAAmB,CACtBjB,IACDA,EAAQtC,KAAKuC,YAAY,IAE7B,IAAIgH,EAAYjH,GAASrD,EAAQuE,SAC7BvE,EAAQ+D,aAAeuG,GACvBvJ,KAAKgJ,OAAO,aAAcO,KAStCvF,WAAY,SAAZA,aACI,IAAIwF,EAAS,CAGT,mBAAoBxJ,KAAKoB,MAAQ,MAAQ,WAGxCpB,KAAKf,QAAQ+D,aACdwG,EAAOzG,OAAS/C,KAAKf,QAAQ8D,QAEjC/C,KAAKc,KAAKqE,IAAIqE,GAGd,IAAItI,EAAUlB,KAAKkB,QAEfA,EAAQH,SAAW1C,EAAEkD,SAASvB,KAAKmB,OAAQ,UAC3CqI,EAAS,CACLC,SAAU,UAEkB,WAA5BvI,EAAQiE,IAAI,cACZqE,EAAOE,SAAW,YAEtBxI,EAAQiE,IAAIqE,KAQpBpF,YAAa,SAAbA,cACIpE,KAAKa,MAAMsE,IAAI,CACXpC,OAAQ,GACRD,WAAY,KAEhB9C,KAAKkB,QAAQiE,IAAI,CACbsE,SAAU,GACVC,SAAU,MAQlBzF,MAAO,SAAPA,QACI,IAAI/B,EAAOlC,KACPf,EAAUe,KAAKf,QACf0K,EAAK1K,EAAQ4D,eACb+G,EAAW,YAAcD,EAAK,eAAiBA,EAAK,iBAAmBA,EACvEE,EAAY,aAAeF,EAAK,IAAMC,EACtCE,EAAY,WAAaH,EAAK,SAAWA,EAAK,aAAeA,EAAK,eAAiBA,EACnFI,EAAS,GACTC,EAAShK,KAAKgK,OACdxC,EAAaxH,KAAKwH,WAgEtB,GA7DAnJ,EAAE8D,KAAK,CAAC,QAAS,SAAU,OAAQ,MAAO,MAAO,UAAU,WACvD,IAAI8H,EAAIhL,EAAQ,KAAOe,MACnB3B,EAAE6L,WAAWD,KACbF,EAAO,UAAY/J,KAAKwB,cAAgBmI,GAAMM,MAMjDhL,EAAQ+D,YAAe/D,EAAQgE,cAChC8G,EAAOF,GAAa,SAAUnK,GAC1B,IAAIyK,GAEW,eAAXzK,EAAEK,OAEKoK,EAAUzK,EAAEyK,SAAWzK,EAAE0K,cAAcD,WACnB,IAAnBA,EAAQpJ,QAAiB9B,EAAQ+D,aAAkC,IAAnBmH,EAAQpJ,OAIzD9B,EAAQ+D,aAAetD,EAAE0D,OAAS1D,EAAE0K,cAAchH,SAAWnE,EAAQmE,SAE5E1D,EAAE2K,iBACF3K,EAAE4K,kBACFpI,EAAKqI,WAAW7K,EAAGyK,KAKL,IAAlBlL,EAAQmE,QACR2G,EAAOS,aAAc,IAG7BxK,KAAKa,MAAM4J,GAAGV,GAGVC,EAAOjJ,QACPiJ,EAAOS,GAAGX,GAAW,SAAUpK,GAC3BA,EAAE2K,iBACFnI,EAAKuD,WAKT+B,EAAWzG,QACXyG,EACKf,KAAK,CAGFiE,KACKzL,EAAQyE,YAAcpD,QAAQM,SAAS8C,WAAa8D,EAAWf,KAAK,SACrExH,EAAQyE,UACZ6D,IAAKtI,EAAQuE,SACb8D,IAAKrI,EAAQwE,WAEhBkH,KAAK,CACFzB,MAAOlJ,KAAKuC,YAAY,MAKhCtD,EAAQgE,YAAZ,CAIA,IAAI2H,EAAU5K,KAAK4K,QACfC,EAAW7K,KAAK6K,SAIhBD,EAAQ7J,QAAU8J,EAAS9J,SAE3B6J,EAAQH,GAAGX,GAAW,SAAUpK,GAC5BA,EAAE2K,iBACFnI,EAAK+D,UAET4E,EAASJ,GAAGX,GAAW,SAAUpK,GAC7BA,EAAE2K,iBACFnI,EAAK+D,MAAK,OAIduB,EAAWzG,UACXgJ,EAAS,IAEFH,GAAY,WACf1H,EAAKY,YAAW,IAIpBiH,EAA6B,QAAsBJ,GAAM,WACrDzH,EAAK+D,MAAMjG,KAAKkJ,MAAO,CAACH,YAAY,KAExCvB,EAAWiD,GAAGV,MAQtB1F,QAAS,SAATA,UACIrE,KAAKa,MAAMiK,IAAI9K,KAAK4K,SAASE,IAAI9K,KAAK6K,UAAUC,IAAI9K,KAAKgK,QAAQnC,IAAI7H,KAAKf,QAAQ4D,iBAOtFnB,gBAAiB,SAAjBA,kBAII,OAAQ1B,KAAK2F,eAAiB3F,KAAKuG,aAAavG,KAAKf,QAAQ8L,iBAOjEhJ,iBAAkB,SAAlBA,mBACI,GAAI/B,KAAK2B,WAAY,CACjB,IAAI1C,EAAUe,KAAKf,QACnBe,KAAK8H,YAAc9H,KAAK2B,WAAa,IAAM1C,EAAQ0E,SAAW,MAAQ1E,EAAQ2E,SAWtFoH,aAAc,SAAdA,aAAwBb,GACpB,IAAIc,EAASd,EAAQ,GACjBe,EAASf,EAAQ,GACrB,OAAOtF,KAAKsG,KACRtG,KAAKuG,IAAIvG,KAAKC,IAAIoG,EAAO/C,QAAU8C,EAAO9C,SAAU,GAChDtD,KAAKuG,IAAIvG,KAAKC,IAAIoG,EAAO9C,QAAU6C,EAAO7C,SAAU,KAShEiD,WAAY,SAAZA,WAAsBlB,GAClB,IAAIc,EAASd,EAAQ,GACjBe,EAASf,EAAQ,GACrB,MAAO,CACHhC,SAAU+C,EAAO/C,QAAU8C,EAAO9C,SAAW,EAAI8C,EAAO9C,QACxDC,SAAU8C,EAAO9C,QAAU6C,EAAO7C,SAAW,EAAI6C,EAAO7C,UAWhEvC,SAAU,SAAVA,SAAoByF,GACK,iBAAVA,IACPA,EAAQ,UAAYA,GAExBtL,KAAKa,MAAM0K,eAAeD,EAAO,CAACtL,MAAMwL,OAAOjN,EAAMkN,KAAKtC,UAAW,MAUzEoB,WAAY,SAAZA,WAAsBe,EAAOnB,GACzB,IAAInK,KAAKyB,QAAT,CAGA,IAAIiK,EAAWC,EAAUC,EAAe3D,EAAY4D,EAAaC,EAAYC,EAAYC,EACrF9J,EAAOlC,KACPf,EAAUe,KAAKf,QACf0K,EAAK1K,EAAQ4D,eACbJ,EAASzC,KAAKuC,YACd0J,EAAWxJ,EAAOlE,MAAM,GACxB2N,GAAaD,EAAS,GACtBE,GAAaF,EAAS,GACtBG,EAAa,CAAC3J,OAAQA,EAAQtD,QAAS,QACvCY,EAAOuL,EAAMvL,KAGJ,gBAATA,GACA2L,EAAY,cACZC,EAAW,aACK,eAAT5L,GACP2L,EAAY,YACZC,EAAW,YACK,kBAAT5L,GACP2L,EAAY,gBACZC,EAAW,gBAEXD,EAAY,YACZC,EAAW,WAIfD,GAAa/B,EACbgC,GAAYhC,EAGZ3J,KAAK8C,YAAW,GAGhB9C,KAAKyB,SAAU,EAGfzB,KAAK6F,SAAS,QAASyF,EAAOnB,GAE9B,IAAIkC,EAAW,SAAXA,SAAqBf,EAAOnB,GAC5B,GAAIA,EAAS,CACT,GAAuB,IAAnBA,EAAQpJ,OAAc,CACtB,GAAqB,MAAjB6K,EACA,OAKJ,OAHAA,EAAgB1J,EAAK8I,aAAab,GAClClC,EAAa/F,EAAKoK,SAAS7J,QAC3BoJ,EAAc3J,EAAKmJ,WAAWlB,IAGlC,GAAkB,MAAd2B,EACA,QAECE,EAAQ7B,EAAQ,MACjB2B,EAAaE,EAAMO,MACnBR,EAAaC,EAAMQ,OAGT,MAAdV,IAGJA,EAAaR,EAAMiB,MACnBR,EAAaT,EAAMkB,QAGvBH,EAASf,EAAOnB,GAyChB9L,EAAEC,GACGuJ,IAAI8B,GACJc,GAAGiB,GAzCG,SAAPe,KAAiB/M,GACjB,IAAIgN,EAKJ,GAJAhN,EAAE2K,iBACFF,EAAUzK,EAAEyK,SAAWzK,EAAE0K,cAAcD,QACvCkC,EAAS3M,EAAGyK,GAERA,EAAS,CACT,GAAuB,IAAnBA,EAAQpJ,OAAc,CAEtB,IAAI4L,EAASzK,EAAKmJ,WAAWlB,GACzByC,EAAO1K,EAAK8I,aAAab,GAAWyB,EAgBxC,OAbA1J,EAAK+D,KAAK2G,GAAQ3N,EAAQoE,UAAY,KAAO4E,EAAY,CACrDC,MAAOyE,EACPlK,OAAQA,EACRtD,QAAS,SAIb+C,EAAKiE,KACA1D,EAAO,GAAKkK,EAAOxE,QAAU0D,EAAY1D,SACzC1F,EAAO,GAAKkK,EAAOvE,QAAUyD,EAAYzD,QAC1CgE,QAEJP,EAAcc,GAGlBD,EAASvC,EAAQ,IAAM,CAACoC,MAAO,EAAGC,MAAO,GAGxCE,IACDA,EAAShN,GAGbwC,EAAKiE,IAAI+F,EAAYQ,EAAOH,MAAQT,EAAYK,EAAYO,EAAOF,MAAQT,EAAYK,MAOtF3B,GAAGkB,GAAU,SAAUjM,GACpBA,EAAE2K,iBAEFhM,EAAE2B,MAAM6H,IAAI8B,GACZzH,EAAKT,SAAU,EAIf/B,EAAEK,KAAO,aACTmC,EAAK2D,SAASnG,EAAG+C,GA7qCjC,SAASoK,aAAaC,EAAOC,GAEzB,IADA,IAAIjN,EAAIgN,EAAM/L,SACLjB,GACL,GAAI+E,KAAKmI,OAAOF,EAAMhN,MAAQ+E,KAAKmI,OAAOD,EAAOjN,IAC7C,OAAO,EAGf,OAAO,EAsqC+B+M,CAAapK,EAAQwJ,UAM/D5N,EAAEiC,QAAUA,QAQZjC,EAAE4O,GAAGC,QAAU,SAAUjO,GACrB,IAAI8E,EAAUoJ,EAAMlD,EAAGmD,EAGvB,MAAuB,iBAAZnO,GACPmO,EAAM,GACND,EAAO5O,EAAMkN,KAAKtC,UAAW,GAC7BnJ,KAAKmC,MAAK,YACN4B,EAAW1F,EAAEsC,KAAKX,KAtuChB,WA6uCwB,MAAtBf,EAAQoO,OAAO,IACoB,mBAA3BpD,EAAIlG,EAAS9E,UAEamK,KAAjCa,EAAIA,EAAEqD,MAAMvJ,EAAUoJ,KAEvBC,EAAIG,KAAKtD,GATTmD,EAAIG,UAAKnE,MAgBVgE,EAAIrM,OAAyB,IAAfqM,EAAIrM,OAAeqM,EAAI,GAAKA,EAAOpN,MAGrDA,KAAKmC,MAAK,WACb,IAAI7B,QAAQN,KAAMf,QAlwC1BuO,CAbOrP,EAcU,oBAAXC,OAAyBA,OAAS4B,KADxB7B,EAAOsP,S,kBCtB3B,IACUC,IAAe,CACjBC,KAAM,SAANA,OACID,EAAaE,cAEjBA,WAAY,SAAZA,aACI,IAQIC,EARAC,EACU,wCADVA,EAEgB,OAFhBA,EAIgB,2DAGhBC,GAAe,EAEfC,EAAW,SAAXA,SAAqBC,EAASC,GAC9BD,EAAQE,iBACJ,SACA,SAAU7C,GACN,KAAIA,EAAM8C,SAAW9C,EAAM+C,UAAY/C,EAAMgD,SAA2B,IAAhBhD,EAAMlI,OAG9D,OAAO8K,EAAS5C,MAEpB,GAGJ2C,EAAQE,iBACJ,cACA,SAAU7C,GACN,GAAIA,EAAMnB,QAAQpJ,OAAS,EAAG,OAAQgN,GAAe,EACrDF,EAAY,CAAC1N,EAAGmL,EAAMnB,QAAQ,GAAGoE,QAASnO,EAAGkL,EAAMnB,QAAQ,GAAGqE,SAC9DT,EAAeE,EAEf3C,EAAMhB,qBAEV,GAGJlM,OAAO+P,iBAAiB,cAAc,SAAU7C,GAC5CyC,GAAe,KAGnBE,EAAQE,iBACJ,aACA,SAAU7C,GACN,GAAIA,EAAMnB,QAAQpJ,OAAS,EAAG,OAAQgN,GAAe,EACrD,IAAMU,EAAmBnD,EAAMnB,QAAQ,GAAGoE,QAApCE,EAAgDnD,EAAMnB,QAAQ,GAAGqE,QAEnE3J,KAAKuG,IAAIyC,EAAU1N,EAAIsO,EAAgB,GAAK5J,KAAKuG,IAAIyC,EAAUzN,EAAIqO,EAAgB,GACnF,MAEAV,GAAe,MAGvB,GAGJE,EAAQE,iBACJ,YACA,SAAU7C,GACN,GAAIyC,EAEA,OADAA,GAAe,EACRG,EAAS5C,GAEhBA,EAAMjB,oBAGd,IAIFqE,EAAmB,SAAnBA,iBAA6B/N,GAC/B,IAAMgO,EAAQ,GACd,IAAK,IAAI1F,KAAOtI,EACZgO,EAAMpB,KAAKqB,mBAAmB3F,GAAO,IAAM2F,mBAAmBjO,EAAKsI,KAEvE,MAAO,IAAM0F,EAAMhH,KAAK,MAGtBkH,EAAQ,mBAAmBxN,KAAKyN,UAAUC,aAAe3Q,OAAO4Q,SAehEC,EAZa,SAAbC,aACF,IAAMC,EAAW7Q,SAAS8Q,iBAAiB,QAC3C,IAAK,IAAItP,KAAKqP,EACV,GAAIE,OAAO5Q,UAAU6Q,eAAe7D,KAAK0D,EAAUrP,GAAI,CACnD,IAAMyP,EAAMJ,EAASrP,GACrB,GAAuC,mBAAlCyP,EAAInN,MAAQ,IAAIZ,eAAoD,QAAf+N,EAAIC,OAC1D,OAAOD,GAMPL,GACZO,EAAMR,EAAUA,EAAQS,aAAa,WAAW5N,QAAQ,qBAAsB,IAAM,KAC7E,MAAP2N,IAAaA,EAAMpR,EAAE,cAAcsC,KAAK,QAE5C,IAAMgP,EAAY,CACdF,IAAKA,EACLG,OAAQxR,OAAOyR,SAASC,SACxBC,WAAY3R,OAAOyR,SAASG,SAC5BC,WAAYnC,GAGV3I,EAAM7G,SAAS4R,cAAc,QACnC/K,EAAImB,aAAa,OAAQwH,GACzB3I,EAAImB,aAAa,OAAQ,YACzBnB,EAAImB,aAAa,MAAO,cACxBhI,SAAS6R,cAAc,QAAQC,YAAYjL,GAE3C,IAAMkL,EAAS/R,SAAS4R,cAAc,OACtCG,EAAO/J,aAAa,KAAM,oBAG1B+J,EAAOhK,MAAMiK,QAAU,OAEvBD,EAAOE,UACH,0lBAcJ,IAAMC,EAAUH,EAAOF,cAAc,sBAC/BM,EAAQJ,EAAOF,cAAc,oBAC7BO,EAAcL,EAAOF,cAAc,4BACnCQ,EAAaN,EAAOF,cAAc,2BAClCS,EAAUP,EAAOF,cAAc,6BAC/BU,EAAcR,EAAOF,cAAc,+BAErCtB,GAAO6B,EAAYI,UAAUhG,IAAI,UAGrCxM,SAASyS,KAAKX,YAAYC,GAE1B,CAACG,EAASC,EAAOI,GAAaG,KAAI,SAAU/C,GACxCD,EAASC,GAAS,SAAU3C,GACxB+E,EAAOhK,MAAMiK,QAAU,OAEvBhF,EAAMjB,iBACNiB,EAAMhB,wBAId0D,EAAS2C,GAAY,SAAUrF,GAC3BA,EAAMhB,qBAGV,IAAI2G,GAAc,EAIJ,GAAG1S,MAAMkN,KAAKnN,SAAS8Q,iBAAiB,2BAA4B,GAC5E4B,KAAI,SAAUE,GAChBA,EAAK7K,MAAMtD,OAAS,UACpBmO,EAAK5K,aAAa,OAAQwH,EAAoBY,EAAiBiB,IAE/D3B,EAASkD,GAAM,SAAU5F,GAChB2F,IACDL,EAAQtK,aAAa,MAAOwH,EAAoBY,EAAiBiB,IACjEsB,GAAc,GAElBZ,EAAOhK,MAAMiK,QAAU,QACnBzB,IAAO8B,EAAWtK,MAAMjB,IAAMhH,OAAO+S,QAAU,MAEnD7F,EAAMjB,iBACNiB,EAAMhB,0BAKtB8G,GAAG1D,aAAeA,EAGM,YAAxBpP,SAAS+S,WACTD,GAAG1D,aAAaC,OAEhBrP,SAAS6P,iBAAiB,oBAAoB,WAC1CiD,GAAG1D,aAAaC,W,kBC5LxB,IACQ2D,IAAe,CACf3D,KAAM,SAANA,OACI2D,EAAaC,WAEjBC,KAAM,SAANA,KAAgBC,GAA0B,IAArBC,EAAcvI,UAAApI,OAAA,QAAAqI,IAAAD,UAAA,GAAAA,UAAA,GAAG,GAC5BwI,EAAKrT,SAAS4R,cAAc,YAClCyB,EAAGC,GAAK,eACRD,EAAGzI,MAAQ5K,SAASuR,SAASG,SAAW,KAAO1R,SAASuR,SAASgC,KAAOH,EAAiBD,EACzFE,EAAGrL,aAAa,WAAY,IAC5BhI,SAASyS,KAAKX,YAAYuB,GAG1B,IAAIG,EAAWxT,SAAS6R,cAAc,iBAClCrB,UAAUC,UAAUgD,MAAM,qBAC1BD,EAASE,kBAAkB,EAAG,QAE9BF,EAASG,SAGb3T,SAAS4T,YAAY,QACrB5T,SAASyS,KAAKoB,YAAYR,GAG1B,IAAMS,EAAc/T,EAAEgU,MAAM,eAC5BhU,EAAEC,UAAUgU,QAAQF,EAAa,CAACd,IAC9Bc,EAAYG,sBAIpBhB,QAAS,SAATA,UAC8C,IAAtClT,EAAE,yBAAyB0C,QAC3B1C,EAAE,qBAAqBmU,QAAQ,iBAAiBC,OAGpD,IAAMC,EAAapU,SAAS8Q,iBAAiB,8BACzCsD,EAAW3R,OAAS,GACpB2R,EAAWC,SAAQ,SAAAhB,GACf,IAAMiB,EAAMjB,EAAGjC,aAAa,QAC5BiC,EAAGxD,iBAAiB,SAAS,WACzB/P,OAAOyU,KAAKD,EAAK,QAAS,8BAItC,IAAME,EAAWxU,SAAS8Q,iBAAiB,aACvC0D,EAAS/R,OAAS,GAClB+R,EAASH,SAAQ,SAAAhB,GACb,IAAMiB,EAAMjB,EAAGjC,aAAa,YAC5BiC,EAAGxD,iBAAiB,SAAS,WACzBmD,EAAaE,KAAKoB,EAAK,gBAO3CxB,GAAGE,aAAeA,EAEdjT,EAAE,wBAAwB0C,QAC1BqQ,GAAGE,aAAa3D,Q,kBC3DxB,IACUoF,EACAC,EADAD,EAAM3B,GAAG2B,IACTC,EAAS,CACXC,WAAY,GACZxD,IAAK,GACLyD,OAAQ,GACRH,IAAK,GACLI,WAAY,GACZC,QAAS,GACTC,QAAS,GACTC,MAAO,KACPC,SAAU,KACVC,WAAY,eACZC,UAAW,wCACXC,cAAe,kBACfC,cAAe,6CACfC,WAAY,eACZC,WAAY,uCACZC,WAAY,eACZC,UAAW,cACXC,WAAY,uCACZC,MAAO,YACPC,UAAU,EACVC,iBAAkB,GAClBC,8BAA+B,GAC/BzG,KAAM,SAANA,OAEIqF,EAAOM,MAAQjV,EAAE,iBACjB2U,EAAOO,SAAWlV,EAAE,iBACpB2U,EAAOmB,iBAAmB9V,EAAE,qBAAqB0C,QAAU1C,EAAE,qBAAqBoJ,MAClFuL,EAAOoB,8BACH/V,EAAE,kCAAkC0C,QAAU1C,EAAE,kCAAkCoJ,MACtFuL,EAAOqB,IAAIC,UACXtB,EAAOqB,IAAIlB,aACXH,EAAOqB,IAAIjB,UACXJ,EAAOqB,IAAIhB,UACXL,EAAOuB,WAAW5G,OACdtP,EAAE,YACF2U,EAAOwB,KAAKC,cAEhBzB,EAAO0B,cACP1B,EAAOpF,aACPoF,EAAO2B,wBAEX/G,WAAY,SAAZA,aACIvP,EAAE,QAAQoM,GAAG,QAAS,gBAAgB,SAAU/K,GAC5CsT,EAAOwB,KAAKF,SAAQ,MAExBjW,EAAE,QAAQoM,GAAG,QAAS,eAAe,SAAU/K,GAC3CA,EAAE2K,iBACF,IACIuK,EADQvW,EAAE2B,MACSyG,KAAK,QACxBoO,EAAYxW,EAAEuW,GAAcE,OAC5BC,EAAW1W,EAAE,YAEZuW,GAAiBC,IAEE,IAApBE,EAAShU,QAQT1C,EAAE,QAAQ2W,OADEC,4SAIhBF,EAASG,KAAK,gBAAgBJ,KAAKD,GACnCE,EAASI,MAAM,YAGnB9W,EAAEC,UAAUmM,GAAGuI,EAAOiB,MAAQ,OAAO,WAEjCjB,EAAOkB,UAAW,EAClBlB,EAAOoC,QAAQC,aACfrC,EAAOoC,QAAQE,QACftC,EAAOsB,QAAQiB,eAGnBlX,EAAEC,UAAUmM,GAAGuI,EAAOiB,MAAQ,QAAQ,WAElCjB,EAAOkB,UAAW,EAClBlB,EAAOoC,QAAQnJ,WACf+G,EAAOsB,QAAQkB,UAGnBxC,EAAOyC,sBAEXd,qBAAsB,SAAtBA,yBACAc,mBAAoB,SAApBA,qBACQpX,EAAE,eAAe0C,QACjB1C,EAAE,eAAeiU,QAAQ,UAGjC8C,QAAS,CACLnJ,SAAU,SAAVA,WAEI,IAAIyJ,EAAcrX,EAAE,gBACpBqX,EACKR,KAAK,0BACLS,YAAY,yBACZC,SAAS,gCACdF,EAAYR,KAAK,cAAcS,YAAY,UAC3BD,EAAYR,KAAK,8BACzB/S,MAAK,WACT,IAAIyP,EAAKvT,EAAE2B,MAAMyG,KAAK,WACtBpI,EAAE2B,MAAMyG,KAAK,qBAAsBmL,GACnCvT,EAAE2B,MAAM6V,OAAOpP,KAAK,oBAAqBmL,GAAIkE,WAAW,aAGhET,WAAY,SAAZA,aAEI,IAAIK,EAAcrX,EAAE,gBACpBqX,EACKR,KAAK,iCACLS,YAAY,gCACZC,SAAS,0BACTV,KAAK,8BACLY,WAAW,sBAChBJ,EACKR,KAAK,kBACLa,WACA/E,KAAI,WACqB,IAAlBhR,KAAKQ,UAELnC,EAAE2B,MAAMgW,KAAK,0CAEb3X,EAAE2B,MAAMiW,SAAS,cACjB5X,EAAE2B,MAAM4V,SAAS,aAG7BF,EAAYR,KAAK,8BAA8BY,WAAW,qBAAqBrD,QAEnF6C,MAAO,SAAPA,WAEJjB,IAAK,CACDC,QAAS,SAATA,UAEItB,EAAOE,OAAS7U,EAAE,WAAWoI,KAAK,iBAEtC0M,WAAY,SAAZA,aAEIH,EAAOG,WAAa9U,EAAE,WAAWoI,KAAK,oBAE1C2M,QAAS,SAATA,UAEIJ,EAAOI,QAAU/U,EAAE,WAAWoI,KAAK,iBAEvC4M,QAAS,SAATA,UAEIL,EAAOK,QAAUhV,EAAE,WAAWoI,KAAK,kBAI3C+N,KAAM,CACFC,YAAa,SAAbA,cACQpW,EAAE2U,EAAOQ,YAAYrS,OAAO,aAAaJ,QACzCiS,EAAOwB,KAAKF,SAAQ,GAAO,GAE/BtB,EAAOwB,KAAKrB,aACZH,EAAOwB,KAAKpB,UACZJ,EAAOwB,KAAKnB,WAEhBiB,QAAS,SAATA,UAAsE,IAAnD4B,EAAsB/M,UAAApI,OAAA,QAAAqI,IAAAD,UAAA,IAAAA,UAAA,GAAUgN,EAAShN,UAAApI,OAAA,QAAAqI,IAAAD,UAAA,IAAAA,UAAA,GAExD6J,EAAOwB,KAAK4B,WACRpD,EAAOE,OACPF,EAAOQ,WACPR,EAAOS,UACP,SACAyC,EACAC,IAGRhD,WAAY,SAAZA,aAEI,IAAIkD,EAAqBhY,EAAE,uCAEvBgY,EAAmBtV,QACf1C,EAAE,kCAAkC0C,OAEpCiS,EAAOwB,KAAK8B,mBAAmBD,IAG/BA,EAAmBE,SAASvD,EAAOW,eACnC0C,EAAmBG,QAEvBnY,EAAE2U,EAAOW,eAAegC,YAAY,SACpC3C,EAAOO,SAASd,QAEhBO,EAAOwB,KAAK4B,WAAWpD,EAAOG,WAAYH,EAAOU,cAAeV,EAAOW,cAAe,eAG9FP,QAAS,SAATA,UAEIJ,EAAOwB,KAAK4B,WAAWpD,EAAOI,QAASJ,EAAOY,WAAYZ,EAAOa,WAAY,WAC7Eb,EAAOuB,WAAWkC,oBAEtBpD,QAAS,SAATA,UAEIL,EAAOwB,KAAK4B,WAAWpD,EAAOK,QAASL,EAAOc,WAAYd,EAAOgB,WAAY,YAEjFsC,mBAAoB,SAApBA,mBAA8BD,GACJA,EAAmBK,QACzBH,SAASvD,EAAOW,eAChC0C,EAAmBnB,KAAK,QAAQ/S,MAAK,WAEjCnC,KAAK4R,GAAK5R,KAAK4R,GAAK,cAG5BwE,WAAU,SAAVA,WAAWO,EAASC,EAAaC,EAAcC,GAA2D,IAAlDZ,EAAsB/M,UAAApI,OAAA,QAAAqI,IAAAD,UAAA,IAAAA,UAAA,GAAUgN,IAAShN,UAAApI,OAAA,QAAAqI,IAAAD,UAAA,KAAAA,UAAA,GAC7F,QAAgBC,IAAZuN,EAGA,OADAvF,GAAG4B,OAAO+D,gBAAgBH,EAAaC,EAAcX,IAC9C,EAEPnD,EAAIiE,MAAMC,MAAM5Y,EAAEuY,IAElB5D,EAAOkE,WAAWP,EAASC,EAAaC,EAAcC,EAASZ,EAAwBC,GAEvF/E,GAAG4B,OAAO+D,gBAAgBH,EAAaC,EAAcX,KAIjEgB,WAAY,SAAZA,WAAsBP,EAASC,EAAaC,EAAcC,GAAoD,IAA3CZ,EAAsB/M,UAAApI,OAAA,QAAAqI,IAAAD,UAAA,IAAAA,UAAA,GAAUgN,EAAShN,UAAApI,OAAA,EAAAoI,UAAA,QAAAC,EAExG4J,EAAOO,SAASiD,OAChB,IAAIW,EAAW9Y,EAAEwY,GAEjBM,EAAS3C,KAAKmC,EAAS,CAACS,OAAQjB,IAAY,SAAUkB,EAAUC,EAAQC,GACrD,UAAXD,GAEAE,QAAQC,IADI,iCACMF,EAAID,OAAS,IAAMC,EAAIG,YAG7CP,EAAS7E,QAAQ,kBACjBlB,GAAG4B,OAAO+D,gBAAgBH,EAAaC,EAAcX,GACrDlD,EAAO2E,SAEP,IAAMC,EAAevZ,EAAE2B,MAAMyG,KAAK,OAC0B,IAA5CuM,EAAOS,UAAUoE,QAAQD,IACxB5E,EAAOkB,UACpBlB,EAAOsB,QAAQiB,YAEnBvC,EAAO8E,kBAAkBhB,OAGjCgB,kBAAmB,SAAnBA,kBAA6BhB,KAC7BC,gBAAe,SAAfA,gBAAgBhE,EAAKgF,EAAW7B,GAC5B9E,GAAG4B,OAAOO,SAASd,QACdyD,GAA0B9E,GAAG4B,OAAOgF,kBAAkB3Z,EAAE0U,KAAS1U,EAAE0Z,GAAW9B,SAAS,WACxF5X,EAAE,gBAAgBiU,QAAQ,UAGlC0F,kBAAiB,SAAjBA,kBAAkBC,GACd,OACIlF,EAAIiE,MAAMC,MAAMgB,IACfA,EAAKhC,SAAS,gBAAyE,IAAvD5X,EAAE4Z,EAAKtX,KAAK,iBAAiBuU,KAAK,UAAUnU,QAC5EkX,EAAKhC,SAAS,mBAAqB5X,EAAE4Z,EAAKtX,KAAK,iBAAiBuU,KAAK,qBAAqBnU,QAGnG4W,OAAQ,SAARA,cAC4BvO,IAApBgI,GAAG8G,cAA4B9G,GAAG8G,aAAaC,UAEvD7D,QAAS,CACL8D,WAAY,aACZC,YAAa,iBACbC,cAAe,mBACfC,eAAgB,YAChBC,iBAAkB,qBAClBC,iBAAkBpa,EAAE,sEACpBqa,qBAAsBra,EAAE,wDACxBsa,wBAAyBta,EAAE,wBAE3BkX,UAAW,SAAXA,YAESlX,EAAE2U,EAAOsB,QAAQ8D,YAAYnC,SAASjD,EAAOsB,QAAQiE,kBACtDvF,EAAOsB,QAAQqE,wBAAwBpC,SAASvD,EAAOsB,QAAQmE,kBAC/DzF,EAAOsB,QAAQoE,qBAAqBnC,SAASvD,EAAOsB,QAAQmE,kBAC5Dpa,EAAE2U,EAAOsB,QAAQ8D,YACZlD,KAAKlC,EAAOsB,QAAQgE,eACpBM,OAAO5F,EAAOsB,QAAQmE,kBAC3Bpa,EAAE2U,EAAOsB,QAAQ8D,YAAYxC,SAAS5C,EAAOsB,QAAQiE,gBACrDla,EAAE2U,EAAOsB,QAAQ8D,YACZlD,KAAKlC,EAAOsB,QAAQgE,eACpB1C,SAAS5C,EAAOsB,QAAQkE,kBACxB/F,SAGb+C,KAAM,SAANA,OAEQnX,EAAE2U,EAAOsB,QAAQ8D,YAAYnC,SAASjD,EAAOsB,QAAQiE,kBACrDla,EAAE,uBAAuBwa,SACzBxa,EAAE2U,EAAOsB,QAAQ8D,YAAYzC,YAAY3C,EAAOsB,QAAQiE,gBACxDla,EAAE2U,EAAOsB,QAAQ8D,YACZlD,KAAKlC,EAAOsB,QAAQgE,eACpB3C,YAAY3C,EAAOsB,QAAQkE,kBAC3BhC,UAKjBjC,WAAY,CACRuE,SAAU,iBACVC,eAAgB,sBAChBC,YAAa,EACbC,kBAAmB,EACnBC,aAAc,kBACdC,aAAc,oBACdC,YAAa,uBACbC,YAAa,uBACbC,kBAAmB,eAEnB3L,KAAM,SAANA,OACI,IAAM4L,GACFvG,EAAOkB,SAAW7V,EAAE2U,EAAOuB,WAAWwE,gBAAkB1a,EAAE2U,EAAOuB,WAAWuE,WAC9EU,IAAI,2BAEDD,EAAexY,QAAWwY,EAAeE,YAI1CzG,EAAOkB,SACPqF,EAAeE,SAAS,CACpBC,MAAO1G,EAAOuB,WAAW0E,kBACzBlZ,KAAM,OACN4Z,aAAa,EACbC,YAAa5G,EAAOuB,WAAW2E,aAC/BW,YAAa7G,EAAOuB,WAAW4E,aAC/BC,YAAapG,EAAOuB,WAAW6E,YAC/BC,YAAarG,EAAOuB,WAAW8E,YAC/BC,kBAAmBtG,EAAOuB,WAAW+E,kBACrCpF,UAAU,EACV4F,aAAc,UAGlBP,EAAeE,SAAS,CACpBC,MAAO1G,EAAOuB,WAAWyE,YACzBjZ,KAAM,OACN4Z,aAAa,EACbC,YAAa5G,EAAOuB,WAAW2E,aAC/BW,YAAa7G,EAAOuB,WAAW4E,aAC/BC,YAAapG,EAAOuB,WAAW6E,YAC/BC,YAAarG,EAAOuB,WAAW8E,YAC/BC,kBAAmBtG,EAAOuB,WAAW+E,sBAIjD7C,iBAAkB,SAAlBA,mBACI,IAAM8C,EAAiBlb,EAAE,wBAAwBmb,IAAI,0BAChDD,EAAexY,QAGpBwY,EAAeE,SAAS,CACpBC,MAAO,MAInBhF,YAAa,SAAbA,cACI,IAAIqF,EAAY1b,EAAE,yBACd0b,EAAUhZ,QACVgZ,EAAUtP,GAAG,SAAS,SAAUa,GAC5B,IAAI0O,EAAU3b,EAAEiN,EAAM2O,eAClBC,EAAeF,EAAQxH,QAAQ,gBAEnC0H,EAAahF,KAAK,uBAAuBiF,SACzCD,EAAahF,KAAK,uBAAuBiF,SACzCH,EAAQ9E,KAAK,QAAQiF,cAMrC/I,GAAG4B,OAASA,G,mDCnXNoH,EACAC,EACAC,EACAC,EACAC,EACFC,EACAC,EACExC,E,QAPAkC,EAAW/b,EAAE,kBACbgc,EAAUhc,EAAED,QACZkc,EAAQjc,EAAE,QACVkc,EAAYlc,EAAEC,UACdkc,EAAQnc,EAAE,QACZoc,GAAa,EACbC,GAAa,EACXxC,EAAe,CACjBjZ,QAAS,CAIL0b,QAAQ,EACRC,YAAa,sBAEjBC,cAAexc,EAAE,4BAA4Byc,cAC7C7G,MAAO,YACP8G,SAAU,KACVC,eAAgB,KAChBC,aAAc,KACdC,cAAe,KACfC,4BAA6B,KAC7Bf,SAAUA,EACVgB,QAAShB,EAASlF,KAAK,6BACvBmG,eAAgBjB,EAASlF,KAAK,6BAA6BA,KAAK,UAChEoG,eAAgBlB,EAASlF,KAAK,gCAC9BqG,QAASnB,EAASlF,KAAK,8BACvBsG,uBAAwBpB,EAASlF,KAAK,+BACtCuG,eAAgBrB,EAASlF,KAAK,+BAC9BwG,eAAgBtB,EAASlF,KAAK,8BAC9ByG,WAAYvB,EAASlF,KAAK,0DAC1B0G,WAAYxB,EAASlF,KAAK,YAC1B2G,YAAazB,EAASlF,KAAK,aAC3B4G,WAAY1B,EAASlF,KAAK,eAC1B6G,WAAY3B,EAASlF,KAAK,UAC1B8G,OAAQ5B,EAASlF,KAAK,UACtB+G,WAAY5d,EAAE,gCACd6d,WAAY7d,EAAE,gCACd6V,UAAU,EACViI,UAAU,EACVC,QAAShe,OAAOie,YAChBC,UAAWje,EAAE,4CACbke,iBAAkBle,EAAE,8BACpBme,cAAene,EAAE,+BACjBoe,UAAW,SAAXA,YACI,mCAA4BC,MAAK,WAC7BxE,EAAayE,wBAGrBxE,OAAQ,SAARA,SAEQD,EAAajZ,QAAQ0b,OACrBzC,EAAa6C,SAAWR,EAAUrF,KAC9B,mHAGJgD,EAAa6C,SAAWR,EAAUrF,KAAK,6CAG3CgD,EAAa6C,SAAS5Y,MAAK,SAAUya,GACjC,IAAIC,EAAQxe,EAAE2B,MAEd,GADA6c,EAAMlc,KAAK,QAASic,GAChB1E,EAAajZ,QAAQ0b,SACrBkC,EAAMjH,SAAS,UACqB,YAAhCsC,EAAajZ,QAAQ0b,QAAsB,CAE3C,IAAImC,EAAiBD,EAAM3H,KAAK,cAC5B4H,EAAe/b,OAAS,GAAK+b,EAAenc,OAAOoc,KACnDF,EAAMpW,KAAK,WAAYqW,EAAenc,OAAOoc,SAM7D7E,EAAa8C,eAAiB9C,EAAa6C,UAK/CJ,OAAQ,SAARA,OAAkBkC,GACd,GAAoC,qBAAhC3E,EAAajZ,QAAQ0b,OAA+B,CACpD,IAAIqC,EAAYH,EAAMpW,KAAK,SAC3ByR,EAAa8C,eAAiB9C,EAAa6C,SAASJ,OAAO,WAAaqC,EAAY,WACjF,GAAoC,cAAhC9E,EAAajZ,QAAQ0b,OAC5BzC,EAAa8C,eAAiB9C,EAAa6C,SAASJ,OAAO,IAAMzC,EAAajZ,QAAQ2b,kBACnF,GAAoC,YAAhC1C,EAAajZ,QAAQ0b,OAAsB,CAClD,IAAIsC,EAAUJ,EAAMlc,KAAK,OAErBuX,EAAa8C,eADbiC,EAC8B/E,EAAa6C,SAASJ,OAAO,cAAgBsC,EAAU,MAEvD/E,EAAa6C,cAG/C7C,EAAa8C,eAAiB9C,EAAa6C,SAG/C7C,EAAagD,cAAgBhD,EAAa8C,eAAe4B,MAAMC,IAEnEtL,QAAS,SAATA,UACIlT,EAAEC,UAAUmM,GAAGyN,EAAajE,MAAQ,OAAO,WAEvCiE,EAAahE,UAAW,KAG5B7V,EAAEC,UAAUmM,GAAGyN,EAAajE,MAAQ,QAAQ,WAExCiE,EAAahE,UAAW,KAG5BgE,EAAagF,eAEO1C,EAAMtF,KAAK,kBACQA,KAAK,aAEzB/S,MAAK,WACpB,IAAI0a,EAAQxe,EAAE2B,MACd6c,EAAMpS,GAAG,CACL0S,MAAO,SAAPA,MAAiB7R,GACbA,EAAMjB,iBACNiB,EAAMhB,kBACFuS,EAAM5G,SAAS,8BAEfiC,EAAazN,GAAGgI,OACToK,EAAM5G,SAAS,6BAEtBiC,EAAarC,OACNgH,EAAM5G,SAAS,6BAEtBiC,EAAakF,OACNP,EAAM5G,SAAS,gCAEtBiC,EAAamF,cAAcR,GACpBA,EAAM5G,SAAS,gCAEtByE,GAAa,EACbxC,EAAaoF,OAAOjf,EAAE2B,QACf6c,EAAM5G,SAAS,gCAEtBiC,EAAY,OAAQ7Z,EAAE2B,aAOlCkY,EAAajZ,QAAQ0b,QACrBtc,EAAE,oCACGmb,IAAI,aACJ2D,OAAM,SAAUzd,GACb,IAAI6d,EAAOlf,EAAE2B,MAAMkV,KAAK,OACJ7W,EAAE2B,MAAMiW,SAAS,iBACC,IAAhBsH,EAAKxc,SACvBrB,EAAE2K,iBACFkT,EAAKjL,QAAQ,aAIzBjU,EAAE,wCAAwC8e,OAAM,SAAUzd,GACtDA,EAAE4K,sBAGNjM,EAAE,qCACGmb,IAAI,aACJ2D,OAAM,SAAUzd,GACb,IAAI6d,EAAOlf,EAAE2B,MAAMkV,KAAK,OACJ7W,EAAE2B,MAAMiW,SAAS,iBACC,IAAhBsH,EAAKxc,QAEvBwc,EAAKjL,QAAQ,YAK7BjU,EAAE,QAAQmf,SAAQ,SAAUlS,GAEU,iBAA9BkP,EAAM/T,KAAK,iBAIO,KAAlB6E,EAAMmS,QAENvF,EAAakF,OACY,KAAlB9R,EAAMmS,SAEbvF,EAAarC,WAIrBqC,EAAawF,cAAcnM,UAE3B2G,EAAayF,qBAEbzF,EAAa0F,SACbvf,EAAED,QAAQqM,GAAG,WAAW,WACpByN,EAAa0F,YAGoB,IAAjC1F,EAAa6C,SAASha,QACtBmX,EAAayD,WAAWlJ,OAG5BoL,YAAW3F,EAAakC,SAAS,KAErCuD,mBAAoB,SAApBA,qBACIzF,EAAa8D,OAAOvR,GAAG,SAAS,SAAU/K,KAEjCrB,EAAEqB,EAAEoe,QAAQtL,QAAQ,kBAAkBzR,QACtC1C,EAAE,kBAAkB0f,GAAGre,EAAEoe,SACzBzf,EAAE,yBAAyB0f,GAAGre,EAAEoe,SAChCzf,EAAEqB,EAAEoe,QAAQtL,QAAQ,yBAAyBzR,QAC7C1C,EAAE,+BAA+B0f,GAAGre,EAAEoe,SACtCzf,EAAEqB,EAAEoe,QAAQtL,QAAQ,+BAA+BzR,SAEpDmX,EAAazN,GAAGgI,WAI5ByK,aAAc,SAAdA,eACI7e,EAAEC,UAAUmM,GAAG,QAAS,qCAAqC,SAAUa,GACnEA,EAAMjB,iBACN,IAAM2T,EAAQ3f,EAAE2B,MAChB,KACIge,EAAM7c,SAAS8U,SAAS,kCACxB+H,EAAMD,GAAG,mBACTC,EAAMD,GAAG,mBAHb,CAOA,IAAIlB,EAAQmB,EAAMxL,QAAQ,gCACrBqK,EAAM5G,SAAS,gBAAmB4G,EAAMrK,QAAQ,6BAA6BzR,QAE9EmX,EAAazN,GAAG+L,KAAKqG,EAAOA,EAAMlc,KAAK,WAK1C8Z,GAAcpc,EAAE,yBAAyB0C,QAAU,EAC9C1C,EAAEC,UAAU4W,KAAK,oDAAoD2D,SACrEzH,GAAG6M,WAAWC,cAAcrB,QAG1CQ,cAAe,SAAfA,cAAyBxc,GACrBqX,EAAaiC,OAAOtZ,EAAM2R,QAAQ,gCAClC0F,EAAaiC,OAAO9b,EAAE,+BACtBwC,EAAMsd,YAAY,WACsD,IAApEjG,EAAakD,QAAQlG,KAAK,+BAA+BnU,QAAgBF,EAAMoV,SAAS,WACxFiC,EAAakD,QAAQlG,KAAK,+BAA+B/P,IAAI,CAACH,MAAO,QAErEkT,EAAakD,QAAQlG,KAAK,+BAA+B/P,IAAI,CAACH,MAAO,SAGzE,IAAMoZ,EAAa9f,SAAS6R,cAAc,iCACpCkO,EAAc/f,SAAS6R,cAAc,gCACrCmO,EAAehgB,SAAS6R,cAAc,+BAE5CuK,GAAcA,EACd0D,EAAW9X,aAAa,gBAAiBoU,GACzC2D,EAAYvN,UAAUqJ,OAAO,UAAWO,GACxC4D,EAAaxN,UAAUqJ,OAAO,UAAWO,GACzCtJ,GAAGmN,MAAMC,oBAAoBpE,EAAS,IACtClC,EAAauG,mCAEjB5I,KAAM,SAANA,OAMI,GAHKqC,EAAajZ,QAAQ0b,SACtBzC,EAAa8C,eAAiB9C,EAAa6C,UAE3C7C,EAAagD,cAAgBhD,EAAa8C,eAAeja,OAAS,GAClE,IAAKmX,EAAa8C,eAAe0D,GAAGxG,EAAagD,cAAgB,GAAG1I,QAAQ,kBAAkBzR,OAAQ,CAClGmX,EAAagD,gBACb,IAAIyD,EAAQzG,EAAa8C,eAAe0D,GAAGxG,EAAagD,eACxDhD,EAAapW,QAAQ6c,IAEF,IAAflE,GAAwBpc,EAAE,yBAAyB0C,OAAS,GAC5D1C,EAAEC,UAAU4W,KAAK,oDAAoD2D,SAEzE4B,GAAcrJ,GAAG6M,WAAWC,cAAcS,GAC1CzG,EAAajS,KAAKR,aAEnB,CACHyS,EAAagD,cAAgB,EAC7B,IAAIyD,EAAQzG,EAAa8C,eAAe0D,GAAGxG,EAAagD,eACxDhD,EAAapW,QAAQ6c,IAGF,IAAflE,GAAwBpc,EAAE,yBAAyB0C,OAAS,GAC5D1C,EAAEC,UAAU4W,KAAK,oDAAoD2D,SAEzE4B,GAAcrJ,GAAG6M,WAAWC,cAAcS,GAC1CzG,EAAajS,KAAKR,QAEtByS,EAAauG,mCAEjBrB,KAAM,SAANA,OAQI,GAJKlF,EAAajZ,QAAQ0b,SACtBzC,EAAa8C,eAAiB9C,EAAa6C,UAG3C7C,EAAagD,eAAiB,GAC9B,IAAKhD,EAAa8C,eAAe0D,GAAGxG,EAAagD,cAAgB,GAAG1I,QAAQ,kBAAkBzR,OAAQ,CAClGmX,EAAagD,gBACb,IAAI0D,EAAQ1G,EAAa8C,eAAe0D,GAAGxG,EAAagD,eACxDhD,EAAapW,QAAQ8c,IAGF,IAAfnE,GAAwBpc,EAAE,yBAAyB0C,OAAS,GAC5D1C,EAAEC,UAAU4W,KAAK,oDAAoD2D,SAEzE4B,GAAcrJ,GAAG6M,WAAWC,cAAcU,GAC1C1G,EAAajS,KAAKR,aAEnB,CACHyS,EAAagD,cAAgBhD,EAAa8C,eAAeja,OAAS,EAClE,IAAI6d,EAAQ1G,EAAa8C,eAAe0D,GAAGxG,EAAagD,eACxDhD,EAAapW,QAAQ8c,IAGF,IAAfnE,GAAwBpc,EAAE,yBAAyB0C,OAAS,GAC5D1C,EAAEC,UAAU4W,KAAK,oDAAoD2D,SAEzE4B,GAAcrJ,GAAG6M,WAAWC,cAAcU,GAC1C1G,EAAajS,KAAKR,QAEtByS,EAAauG,mCAEjB3c,QAAS,SAATA,QAAmBmM,GACf,IAAI4Q,EACJ3G,EAAa4G,oBAAoB7Q,IAG1B4Q,GAFPpE,EAAaxM,EAAQiH,KAAK,kBAAkBnU,QAAUkN,EAAQiH,KAAK,+BAA+BnU,QAEjFkN,EAAQiH,KAAK,+BAA+BwB,QAC5CzI,EAAQiH,KAAK,kBAAkBwB,SAExCvU,MAAK,WACT,IAAI0a,EAAQxe,EAAE2B,MACd,GAAI6c,EAAMpW,KAAK,eACXoW,EAAMpW,KAAK,MAAOoW,EAAMpW,KAAK,qBAC1B,GAAIoW,EAAMpW,KAAK,YAClBoW,EAAMpW,KAAK,MAAOoW,EAAMpW,KAAK,iBAC1B,CACH,IAAIsY,EAAa9Q,EAAQ+Q,SAAS,KAClCD,EAAWtY,KAAK,OAAQsY,EAAW7J,KAAK,kBAAkBzO,KAAK,YAInEoY,EAAQ9d,OAAS,EAEjB8d,EAAU3G,EAAawF,cAAclH,KAAKvI,EAAS4Q,GAEnD3G,EAAawF,cAAcjL,OAG/ByF,EAAa+G,YAAY/G,EAAakD,QAASnN,GAC3CwM,IACArJ,GAAG6M,WAAWzH,KAAK0B,EAAakD,QAASnN,GACzCiK,EAAa+C,aAAe/C,EAAakD,QAAQlG,KAAK,+BAA+BlQ,SAGzFkT,EAAakD,QAAQlG,KAAK,+BAA+B2D,SACzDX,EAAakD,QAAQlG,KAAK,kBAAkB2D,SAC5CX,EAAakD,QAAQlG,KAAK,UAAUF,OAAO6J,EAAQxK,IAAI,GAAG6K,WAC1DhH,EAAaoD,eAAerE,QAC5BiB,EAAaiH,iBAAiBlR,GAC9B,IAAMmR,EAAWlH,EAAamH,yBAAyBpR,GACvDiK,EAAaoH,YAAYF,GACzBlH,EAAaqH,oBACbrH,EAAa+C,aAAe/C,EAAakD,QAAQlG,KAAK,kBAAkBlQ,QACxEkT,EAAajS,KAAK+Q,QAClBkB,EAAasH,cAAcvR,GAC3BiK,EAAauH,qBAEjBA,kBAAmB,SAAnBA,sBACA/B,cAAe,CACXgC,IAAK,KAQLlJ,KAAM,SAANA,KAAgBvI,EAAS4Q,GAErB,IAAIjC,EAAQ5c,KAAKgX,MAAM/I,GACnB0R,EAAcd,EAAQnI,QACtBxU,EAAOlC,KA2BX,OAxBKA,KAAK0f,MACN1f,KAAK0f,IAAMrhB,EAAE,4DACb2B,KAAK0f,IAAInJ,SAAS2B,EAAakC,WAGnCpa,KAAK0f,IAAIzI,QACT0I,EAAYxd,MAAK,SAAUya,GACvB,IAAIgD,EAASvhB,EACT,8CACKue,EAAQ,GACT,yEAERgD,EAAO1K,KAAK,KAAKF,OAAOhV,MACxB4f,EAAO1K,KAAK,KAAKzK,GAAG,SAAS,SAAUa,GACnCA,EAAMjB,iBACNnI,EAAK2d,QAAQ5R,EAAS2O,MAG1B1a,EAAKwd,IAAI1K,OAAO4K,MAGpB5f,KAAK0f,IAAIxK,KAAK,MAAMwJ,GAAG9B,GAAOhH,SAAS,UAGhCiJ,EAAQH,GAAG9B,IAMtBnK,KAAM,SAANA,OACQzS,KAAK0f,KACL1f,KAAK0f,IAAIzI,SAGjB6I,KAAM,SAANA,KAAgB7R,EAAS2O,GACrB3O,EAAQtN,KAAK,wBAAyBic,IAE1C5F,MAAO,SAAPA,MAAiB/I,GACb,OAAOA,EAAQtN,KAAK,0BAA4B,GAEpDkf,QAAS,SAATA,QAAmB5R,EAAS2O,GACxB,IAAImD,EAAU9R,EAAQiH,KAAK,kBAC3B,GAAuB,IAAnB6K,EAAQhf,OAAZ,CAKI6b,GAASmD,EAAQhf,SACjB6b,EAAQ,GAERA,EAAQ,IACRA,EAAQmD,EAAQhf,OAAS,GAG7BmX,EAAakD,QAAQlG,KAAK,kBAAkB2D,SAC5CX,EAAakD,QAAQlG,KAAK,+BAA+B2D,SAEzD,IAAMmD,EAAS+D,EAAQrB,GAAG9B,GAAOlG,QAE7BsF,EAAOrb,KAAK,WACZqb,EAAOvV,KAAK,MAAOuV,EAAOrb,KAAK,WAEnCuX,EAAamD,eAAerG,OAAOgH,GAEnChc,KAAK0f,IAAIxK,KAAK,MAAMS,YAAY,UAChC3V,KAAK0f,IAAIxK,KAAK,MAAMwJ,GAAG9B,GAAOhH,SAAS,UAEvC5V,KAAK8f,KAAK7R,EAAS2O,KAEvB/G,KAAM,SAANA,KAAgB5H,GACZ,IAAI2O,EAAQ5c,KAAKgX,MAAM/I,GAAW,EAClCjO,KAAK6f,QAAQ5R,EAAS2O,IAE1BQ,KAAM,SAANA,KAAgBnP,GACZ,IAAI2O,EAAQ5c,KAAKgX,MAAM/I,GAAW,EAClCjO,KAAK6f,QAAQ5R,EAAS2O,IAM1BrL,QAAS,SAATA,UACIlT,EAAE,QAAQoM,GAAG,iBAAiB,SAAUa,GAEpC,GAAkC,iBAA9BkP,EAAM/T,KAAK,iBAMVyR,EAAajZ,QAAQ0b,SACtBzC,EAAa8C,eAAiB9C,EAAa6C,YAI3C7C,EAAa8C,gBAAkB9C,EAAa8C,eAAeja,OAAS,IAAxE,CAIA,IAAIkN,EAAUiK,EAAa8C,eAAe0D,GAAGxG,EAAagD,eAEpC,KAAlB5P,EAAMmS,QAENvF,EAAawF,cAAcN,KAAKnP,GACP,KAAlB3C,EAAMmS,SAEbvF,EAAawF,cAAc7H,KAAK5H,SAKhDqP,OAAQ,SAARA,OAAkBrP,GACdiK,EAAakD,QAAQxF,SAAS,aAC9BsC,EAAayD,WAAW/F,SAAS,aACjCsC,EAAa+D,WAAWrG,SAAS,aACjCsC,EAAagE,WAAWvG,YAAY,aACpCuC,EAAauD,eAAe9F,YAAY,WACxCuC,EAAawD,eAAe/F,YAAY,WACxCuC,EAAasD,uBAAuB5F,SAAS,cAC7CsC,EAAauD,eAAe7F,SAAS,aACrCsC,EAAaoE,UAAUna,MAAK,WACxB9D,EAAE2B,MAAM4V,SAAS,gBAErBsC,EAAaqD,QAAQ5F,YAAY,aACjCuC,EAAawF,cAAcjL,OAE3ByF,EAAaqE,iBAAiBtF,QAE1BiB,EAAajZ,QAAQ0b,OACrBzC,EAAa8C,eAAe7Y,MAAK,WAC7B,IAAI6d,EAAO3hB,EAAE2B,MAAM0W,OAAM,GACrBuJ,EAAeD,EAAK9K,KAAK,iBAEzB+K,EAAalf,QACbkf,EAAapH,SAEjBX,EAAaqE,iBAAiBvH,OAAOgL,MAGzC9H,EAAa6C,SAAS5Y,MAAK,WACvB,GAAI9D,EAAE2B,MAAMiW,SAAS,yBAA0B,CAC3C,IAAI+J,EAAO3hB,EAAE2B,MAAM0W,OAAM,GACnBwJ,EAAYF,EAAKhB,SAAS,OAChCkB,EAAUzZ,KAAK,MAAOyZ,EAAUvf,KAAK,QAErC,IAAIwf,EAAeH,EAAK9K,KAAK,iBAEzBiL,EAAapf,QACbof,EAAatH,SAEjBX,EAAaqE,iBAAiBvH,OAAOgL,OAIjD9H,EAAakI,oBAEjBA,iBAAkB,SAAlBA,qBACAC,OAAQ,SAARA,UACInI,EAAakD,QAAQzF,YAAY,aACjCuC,EAAayD,WAAWhG,YAAY,aACpCuC,EAAa+D,WAAWtG,YAAY,aACpCuC,EAAagE,WAAWtG,SAAS,aAEjCsC,EAAauD,eAAe9F,YAAY,aACxCuC,EAAaoE,UAAUna,MAAK,WACxB9D,EAAE2B,MAAM2V,YAAY,gBAExBuC,EAAaqD,QAAQ3F,SAAS,aAC9B,IAAM0K,EAAkBjiB,EAAE,+BAC1BiiB,EAAgB3K,YAAY,0CAC5B2K,EAAgBnf,OAAO,wBAAwBwU,YAAY,6BAC3DtX,EAAE,iCAAiC8C,OAAO,wBAAwBqV,OAClE0B,EAAaqE,iBAAiBtF,QAC9BiB,EAAaqI,oBAEjBA,iBAAkB,SAAlBA,qBACAtb,OAAQ,SAARA,OAAkBgJ,GACd,IAAIuS,EAAiBniB,EAAED,QAAQ0c,cAC/B5C,EAAa2C,cAAgBxc,EAAE,4BAA4Byc,cAC3D,IAAI2F,EACAD,EAAiBtI,EAAa2C,cAAgBxc,EAAE,kCAAkCyc,cACtFzc,EAAE,8BAA8B6W,KAAK,UAAUjQ,OAAOwb,IAE1DtG,OAAQ,SAARA,OAAkBlM,GACdA,EAAQkQ,YAAY,WACpBjG,EAAawI,kBAEjBC,cAAe,SAAfA,gBACItiB,EAAE,kBAAkBmY,QAExBoK,eAAgB,SAAhBA,mBACAnW,GAAI,CACA+L,KAAM,SAANA,KAAgBqG,EAAOD,GACnB1E,EAAahE,UAAYoG,EAAM1E,SAAS,eACxCsC,EAAasH,cAAc3C,GAE3B3E,EAAakE,QAAU5B,EAAM7Z,KAAK,YAAcvC,OAAOie,YACvD7B,EAAM7Z,KAAK,UAAWuX,EAAakE,cACN,IAAlBhL,GAAGxD,YACwB,UAA9B4M,EAAM/T,KAAK,gBAEX2K,GAAGxD,WAAWoJ,QAGtBwD,EAAM/T,KAAK,cAAe,gBAC1ByR,EAAaiE,UAAW,EACxBjE,EAAagD,cAAgB0B,EAC7B1E,EAAapW,QAAQ+a,GACrB3E,EAAaiD,4BAA8B7c,SAASuiB,cACpD3I,EAAayI,gBACbnG,EAAMrV,IAAI,WAAY,UACtB+S,EAAajT,SACbiT,EAAajS,KAAK+Q,QAClBkB,EAAa0F,SACb1F,EAAakD,QAAQzF,YAAY,aAC7BuC,EAAa8C,eAAeja,OAAS,GACrCmX,EAAa+D,WAAWtG,YAAY,aAExCuC,EAAagE,WAAWtG,SAAS,aACjCsC,EAAayD,WAAWhG,YAAY,aACpCuC,EAAaoE,UAAUna,MAAK,WACxB9D,EAAE2B,MAAM2V,YAAY,gBAExBuC,EAAaqD,QAAQ3F,SAAS,aAC9BsC,EAAasD,uBAAuB7F,YAAY,cAChDtX,EAAE,+BAA+ByiB,QAC7B5I,EAAajZ,QAAQ0b,OACrBzC,EAAayC,OAAOkC,GAEpB3E,EAAa6I,iBAAiBlE,GAElC3E,EAAa0I,iBACb1I,EAAa+G,YAAY/G,EAAakD,QAASyB,EAAMrK,QAAQ,WAC7DiI,GAAcrJ,GAAG6M,WAAWzH,KAAK0B,EAAakD,QAASyB,EAAMrK,QAAQ,WACrE0F,EAAazN,GAAGuW,oBAEpBvO,KAAM,SAANA,OACIyF,EAAahE,UAAYoG,EAAMrE,SAAS,gBAAkBqE,EAAM3E,YAAY,eACxEuC,EAAaiE,SACb3B,EAAM1E,WAAW,eAEjB0E,EAAM7E,YAAY,eAAeG,WAAW,eAEhDoC,EAAajS,KAAKR,QAClBpH,EAAE,kBAAkBoU,OACpByF,EAAa+I,kBAAkB/I,EAAakD,SAC5ClD,EAAaiD,4BAA4B2F,QACzCtG,EAAMrV,IAAI,WAAY,IACtB9G,EAAED,QAAQwK,UAAUsP,EAAakE,SACjC5B,EAAMhW,WAAW,WACjB0T,EAAazN,GAAGyW,oBAEpBF,iBAAkB,SAAlBA,qBACAE,iBAAkB,SAAlBA,sBAEJH,iBAAgB,SAAhBA,iBAAiBlE,GACTA,EAAM5G,SAAS,sBACfiC,EAAa8C,eAAiB9C,EAAa6C,SAASJ,OAAO,uBACpDkC,EAAM5G,SAAS,yBACtBiC,EAAa8C,eAAiB9C,EAAa6C,SAASJ,OAAO,0BAE3DzC,EAAa8C,eAAiB9C,EAAa6C,UAGnDsE,yBAA0B,SAA1BA,yBAAoC8B,GAChC,OAAOA,EAAIjM,KAAK,2BAA2BwB,SAE/CzQ,KAAM,CAIFR,MAAO,SAAPA,QACkBpH,EAAE,kBAAkB6W,KAAK,UACjChI,QAAQ,UAElB8J,MAAO,SAAPA,QACIkB,EAAajS,KAAKiH,QAAQS,OACtB0M,EAAQrV,QAAU,KAClBkT,EAAajS,KAAKmb,QAG1BlU,QAAS,CAELS,KAAM,SAANA,YAC+B,IAAhBtP,EAAE4O,GAAGC,UACZgL,EAAa8D,OAAO9O,QAAQ,CACxBtC,QAASsN,EAAa0D,WACtB/Q,SAAUqN,EAAa2D,YACvBrU,WAAY0Q,EAAa4D,WACzB9R,OAAQkO,EAAa6D,WACrBxY,mBAAmB,EACnBC,SAAU,IAGd0U,EAAa8D,OAAOvR,GAAG,iBAAiB,SAAU/K,GACR,MAAlCwY,EAAa4D,WAAWrU,OACxByQ,EAAa8D,OAAO7W,IAAI,YAAa,4BACrC9G,EAAE2B,MAAM2V,YAAY,WAEpBtX,EAAE2B,MAAM4V,SAAS,gBAMrCwL,KAAM,SAANA,OAEIlJ,EAAakC,SAASlF,KAAK,OAAOmM,MAAM,CAEpCA,MAAO,SAAPA,MAAiB/V,EAAOgW,EAAWC,EAAU5d,EAAU6d,EAAaC,GAC9C,SAAdH,GAAyBpJ,EAAakC,SAASlF,KAAK,UAAUe,SAAS,UAElD,UAAdqL,GAA0BpJ,EAAakC,SAASlF,KAAK,UAAUe,SAAS,WAC/EiC,EAAakF,OAFblF,EAAarC,YAQjC6L,MAAO,SAAPA,QACI,IAAI1H,EAAUQ,EAAMtF,KAAK,oBACzBsF,EAAM1E,WAAW,iBACjB6L,YAAW,WACP3H,EAAQhF,OAAO4M,OAAO5C,SAAS,QAC/BhF,EAAQrE,YAAY,kBACrB,MAEPiI,OAAQ,SAARA,SACI,IAAIiE,EAAUxH,EAAQS,cAChBgH,EAAY5J,EAAa2C,eAAiB,GAC5C3C,EAAahE,SACbgE,EAAasD,uBAAuBrW,IAAI,SAAU0c,EAAUC,GAE5D5J,EAAasD,uBAAuBrW,IAAI,SAAU,gBAAFqG,OAAkBsW,EAAS,SAGnFpB,eAAgB,SAAhBA,iBACI,IAAIqB,EAAc1jB,EAAE,gCAAgC6W,KAAK,cACrD8M,EAAqB9J,EAAasD,uBAAuBvW,SACzDgd,EAAsB5jB,EAAE,yBAAyB4G,SAAW,GAGhE8c,EAAY5c,IAAI,aAAc6c,EAAqB,GAAcC,IAErEC,UAAW,SAAXA,aAEI,SAAW7jB,GACPA,EAAE4O,GAAGkV,gBAAkB,WACnB9jB,EAAE2B,MAAMoiB,KAAK,cAAc,SAASC,YAAY3iB,GAC5C,IAAI4iB,EAAK5iB,EAAE6iB,UAEPC,EAAKF,GADAjkB,EAAE2B,MAAMW,KAAK,cAAgB2hB,GAElCG,EAAU/iB,EAAE0K,cAAcD,QAAQpJ,OACtC1C,EAAE2B,MAAMW,KAAK,YAAa2hB,IACrBE,GAAMA,EAAK,KAAOC,EAAU,IAGjC/iB,EAAE2K,iBAEFhM,EAAEqB,EAAEoe,QAAQxL,QAAQ,cAbhC,CAgBG7E,SAEPE,KAAM,SAANA,OACIuK,EAAaC,SACbD,EAAa3G,UACb2G,EAAagK,YACb7jB,EAAE,QAAQ8jB,kBACV9jB,EAAE,+BAA+B0C,QAAUmX,EAAauE,aAE5D6C,YAAa,SAAbA,YAAuBF,GACfA,EAASre,QACTmX,EAAaoD,eAAetG,OAAOoK,GACnClH,EAAaoD,eAAepG,KAAK,cAAcS,YAAY,UAC3DuC,EAAauD,eAAe9F,YAAY,aAIpCuC,EAAauD,eAAexF,SAAS,YACrCiC,EAAawD,eAAe9F,SAAS,YAEjCsC,EAAaoD,eAAerF,SAAS,eAC7CiC,EAAauD,eAAe7F,SAAS,aACrCsC,EAAawD,eAAe/F,YAAY,aAGhDwJ,iBAAkB,SAAlBA,iBAA4BuD,GACxB,IAAMtD,EAAWsD,EAASxN,KAAK,iCAAiCwB,QAChErY,EAAE,+BAA+BskB,KAAKvD,EAASuD,SAEnDnD,cAAe,SAAfA,cAAyB3C,GACrB,IACI+F,EADe/F,EAAM3H,KAAK,iBACQwB,QAEtC8D,EAAMtF,KAAK,gBAAgBnU,QAASyZ,EAAMtF,KAAK,gBAAgB2D,SAG3DgE,EAAM3H,KAAK,kBAAkB6I,GAAG,mBAChClB,EAAM3H,KAAK,kBAAkB6I,GAAG,mBAEhCvD,EACKtF,KAAK,6BACLU,SAAS,UACTiN,MAAM,sDACXrI,EAAMtF,KAAK,gBAAgBF,OAAO4N,GAClCA,EAAmBrM,SAASiE,EAAMtF,KAAK,iBACvCsF,EAAMtF,KAAK,gBAAgBA,KAAK,qBAAqB2D,UAC9C2B,EAAMtF,KAAK,6BAA6Be,SAAS,WACxDuE,EAAMtF,KAAK,6BAA6BS,YAAY,WAG5DsJ,YAAa,SAAbA,YAAuB7D,EAAS0H,GAC5BnB,YAAW,WACHvG,EAAQlG,KAAK,UAAUnU,QACvBqa,EAAQlG,KAAK,UAAUJ,KAAK,IAC5BzW,EAAE0kB,UAAU3R,GAAG4B,OAAOmB,kBACtBiH,EAAQlG,KAAK,UAAUb,IAAI,GAAG2O,YAAcF,EAAgB5N,KAAK,UAAUb,IAAI,GAAG2O,aAC3E5H,EAAQlG,KAAK,SAASnU,SAC7Bqa,EAAQlG,KAAK,SAASb,IAAI,GAAG2O,YAAcF,EAAgB5N,KAAK,SAASb,IAAI,GAAG2O,eAErF,MAEPlE,oBAAqB,SAArBA,oBAA+B4D,GACvBA,EAASxN,KAAK,iBAAiBnU,QAC/B2hB,EAASxN,KAAK,iBAAiBb,IAAI,GAAG4O,SAG9ChC,kBAAmB,SAAnBA,kBAA6B7F,GACrBA,EAAQlG,KAAK,iBAAiBnU,QAC9Bqa,EAAQlG,KAAK,iBAAiBb,IAAI,GAAG4O,SAG7C1D,kBAAmB,SAAnBA,oBACIrH,EAAaoD,eAAepG,KAAK,kBAAkB2D,UAEvD8D,kBAAmB,SAAnBA,sBACA8B,gCAAiC,SAAjCA,kCACIvG,EAAaoD,eAAe7U,KAAK,aAAc,eAAF+E,OAAiB0M,EAAasE,cAAcmG,WAIjGvR,GAAG8G,aAAeA,E,qBCryBCgL,UAtBV,SAAPA,KAAQ9R,GACV,IAAM+R,EAAgB3kB,MAAMC,UAAUF,MAAMkN,KAAKnN,SAAS8Q,iBAAiB,kFACvEgU,EAAU5kB,MAAMC,UAAUF,MAAMkN,KAAKnN,SAAS8Q,iBAAiB,YAEvE,IACY+T,EAAcpiB,QACdqQ,EAAG8G,aAAavK,KAAKwV,GAE3B,MAAOE,GACL7L,QAAQ/W,MAAM4iB,GAGtB,IACYD,EAAQriB,QACRqQ,EAAG4B,OAAOrF,KAAKyV,GAErB,MAAOC,GACL7L,QAAQ/W,MAAM4iB","file":"js/vendors~article-79fa2f7a85bf8260d74c.js","sourcesContent":["/**\n * @license jquery.panzoom.js v3.2.2\n * Updated: Sat Aug 27 2016\n * Add pan and zoom functionality to any element\n * Copyright (c) timmy willison\n * Released under the MIT license\n * https://github.com/timmywil/jquery.panzoom/blob/master/MIT-License.txt\n */\n/*eslint-disable*/\n(function (global, factory) {\n // AMD\n // if (typeof define === 'function' && define.amd) {\n // define([ 'jquery' ], function(jQuery) {\n // return factory(global, jQuery);\n // });\n // // CommonJS/Browserify\n // } else if (typeof exports === 'object') {\n // factory(global, require('jquery'));\n // // Global\n // } else {\n // factory(global, global.jQuery);\n // }\n factory(global, global.jQuery);\n})(typeof window !== 'undefined' ? window : this, function (window, $) {\n 'use strict';\n\n var document = window.document;\n var datakey = '__pz__';\n var slice = Array.prototype.slice;\n var rIE11 = /trident\\/7./i;\n var supportsInputEvent = (function () {\n return true;\n })();\n\n // Regex\n var rupper = /([A-Z])/g;\n var rsvg = /^http:[\\w\\.\\/]+svg$/;\n\n var floating = '(\\\\-?\\\\d[\\\\d\\\\.e-]*)';\n var commaSpace = '\\\\,?\\\\s*';\n var rmatrix = new RegExp(\n '^matrix\\\\(' +\n floating +\n commaSpace +\n floating +\n commaSpace +\n floating +\n commaSpace +\n floating +\n commaSpace +\n floating +\n commaSpace +\n floating +\n '\\\\)$'\n );\n\n /**\n * Utility for determining transform matrix equality\n * Checks backwards to test translation first\n * @param {Array} first\n * @param {Array} second\n */\n function matrixEquals(first, second) {\n var i = first.length;\n while (--i) {\n if (Math.round(+first[i]) !== Math.round(+second[i])) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Creates the options object for reset functions\n * @param {Boolean|Object} opts See reset methods\n * @returns {Object} Returns the newly-created options object\n */\n function createResetOptions(opts) {\n var options = {range: true, animate: true};\n if (typeof opts === 'boolean') {\n options.animate = opts;\n } else {\n $.extend(options, opts);\n }\n return options;\n }\n\n /**\n * Represent a transformation matrix with a 3x3 matrix for calculations\n * Matrix functions adapted from Louis Remi's jQuery.transform (https://github.com/louisremi/jquery.transform.js)\n * @param {Array|Number} a An array of six values representing a 2d transformation matrix\n */\n function Matrix(a, b, c, d, e, f, g, h, i) {\n if ($.type(a) === 'array') {\n this.elements = [+a[0], +a[2], +a[4], +a[1], +a[3], +a[5], 0, 0, 1];\n } else {\n this.elements = [a, b, c, d, e, f, g || 0, h || 0, i || 1];\n }\n }\n\n Matrix.prototype = {\n /**\n * Multiply a 3x3 matrix by a similar matrix or a vector\n * @param {Matrix|Vector} matrix\n * @return {Matrix|Vector} Returns a vector if multiplying by a vector\n */\n x: function (matrix) {\n var isVector = matrix instanceof Vector;\n\n var a = this.elements,\n b = matrix.elements;\n\n if (isVector && b.length === 3) {\n // b is actually a vector\n return new Vector(\n a[0] * b[0] + a[1] * b[1] + a[2] * b[2],\n a[3] * b[0] + a[4] * b[1] + a[5] * b[2],\n a[6] * b[0] + a[7] * b[1] + a[8] * b[2]\n );\n } else if (b.length === a.length) {\n // b is a 3x3 matrix\n return new Matrix(\n a[0] * b[0] + a[1] * b[3] + a[2] * b[6],\n a[0] * b[1] + a[1] * b[4] + a[2] * b[7],\n a[0] * b[2] + a[1] * b[5] + a[2] * b[8],\n\n a[3] * b[0] + a[4] * b[3] + a[5] * b[6],\n a[3] * b[1] + a[4] * b[4] + a[5] * b[7],\n a[3] * b[2] + a[4] * b[5] + a[5] * b[8],\n\n a[6] * b[0] + a[7] * b[3] + a[8] * b[6],\n a[6] * b[1] + a[7] * b[4] + a[8] * b[7],\n a[6] * b[2] + a[7] * b[5] + a[8] * b[8]\n );\n }\n return false; // fail\n },\n /**\n * Generates an inverse of the current matrix\n * @returns {Matrix}\n */\n inverse: function () {\n var d = 1 / this.determinant(),\n a = this.elements;\n return new Matrix(\n d * (a[8] * a[4] - a[7] * a[5]),\n d * -(a[8] * a[1] - a[7] * a[2]),\n d * (a[5] * a[1] - a[4] * a[2]),\n\n d * -(a[8] * a[3] - a[6] * a[5]),\n d * (a[8] * a[0] - a[6] * a[2]),\n d * -(a[5] * a[0] - a[3] * a[2]),\n\n d * (a[7] * a[3] - a[6] * a[4]),\n d * -(a[7] * a[0] - a[6] * a[1]),\n d * (a[4] * a[0] - a[3] * a[1])\n );\n },\n /**\n * Calculates the determinant of the current matrix\n * @returns {Number}\n */\n determinant: function () {\n var a = this.elements;\n return (\n a[0] * (a[8] * a[4] - a[7] * a[5]) -\n a[3] * (a[8] * a[1] - a[7] * a[2]) +\n a[6] * (a[5] * a[1] - a[4] * a[2])\n );\n },\n };\n\n /**\n * Create a vector containing three values\n */\n function Vector(x, y, z) {\n this.elements = [x, y, z];\n }\n\n /**\n * Get the element at zero-indexed index i\n * @param {Number} i\n */\n Vector.prototype.e = Matrix.prototype.e = function (i) {\n return this.elements[i];\n };\n\n /**\n * Create a Panzoom object for a given element\n * @constructor\n * @param {Element} elem - Element to use pan and zoom\n * @param {Object} [options] - An object literal containing options to override default options\n * (See Panzoom.defaults for ones not listed below)\n * @param {jQuery} [options.$zoomIn] - zoom in buttons/links collection (you can also bind these yourself\n * e.g. $button.on('click', function(e) { e.preventDefault(); $elem.panzoom('zoomIn'); });)\n * @param {jQuery} [options.$zoomOut] - zoom out buttons/links collection on which to bind zoomOut\n * @param {jQuery} [options.$zoomRange] - zoom in/out with this range control\n * @param {jQuery} [options.$reset] - Reset buttons/links collection on which to bind the reset method\n * @param {Function} [options.on[Start|Change|Zoom|Pan|End|Reset] - Optional callbacks for panzoom events\n */\n function Panzoom(elem, options) {\n // Allow instantiation without `new` keyword\n if (!(this instanceof Panzoom)) {\n return new Panzoom(elem, options);\n }\n\n // Sanity checks\n if (elem.nodeType !== 1) {\n $.error('Panzoom called on non-Element node');\n }\n if (!$.contains(document, elem)) {\n $.error('Panzoom element must be attached to the document');\n }\n\n // Don't remake\n var d = $.data(elem, datakey);\n if (d) {\n return d;\n }\n\n // Extend default with given object literal\n // Each instance gets its own options\n this.options = options = $.extend({}, Panzoom.defaults, options);\n this.elem = elem;\n var $elem = (this.$elem = $(elem));\n this.$set = options.$set && options.$set.length ? options.$set : $elem;\n this.$doc = $(elem.ownerDocument || document);\n this.$parent = $elem.parent();\n this.parent = this.$parent[0];\n\n // This is SVG if the namespace is SVG\n // However, while elements are SVG, we want to treat those like other elements\n this.isSVG = rsvg.test(elem.namespaceURI) && elem.nodeName.toLowerCase() !== 'svg';\n\n this.panning = false;\n\n // Save the original transform value\n // Save the prefixed transform style key\n // Set the starting transform\n this._buildTransform();\n\n // Build the appropriately-prefixed transform style property name\n // De-camelcase\n this._transform = $.cssProps.transform\n ? $.cssProps.transform.replace(rupper, '-$1').toLowerCase()\n : 'transform';\n\n // Build the transition value\n this._buildTransition();\n\n // Build containment dimensions\n this.resetDimensions();\n\n // Add zoom and reset buttons to `this`\n var $empty = $();\n var self = this;\n $.each(['$zoomIn', '$zoomOut', '$zoomRange', '$reset'], function (i, name) {\n self[name] = options[name] || $empty;\n });\n\n this.enable();\n\n this.scale = this.getMatrix()[0];\n this._checkPanWhenZoomed();\n\n // Save the instance\n $.data(elem, datakey, this);\n }\n\n // Attach regex for possible use (immutable)\n Panzoom.rmatrix = rmatrix;\n\n Panzoom.defaults = {\n // Should always be non-empty\n // Used to bind jQuery events without collisions\n // A guid is not added here as different instantiations/versions of panzoom\n // on the same element is not supported, so don't do it.\n eventNamespace: '.panzoom',\n\n // Whether or not to transition the scale\n transition: true,\n\n // Default cursor style for the element\n cursor: 'move',\n\n // There may be some use cases for zooming without panning or vice versa\n disablePan: false,\n disableZoom: false,\n\n // Pan only on the X or Y axes\n disableXAxis: false,\n disableYAxis: false,\n\n // Set whether you'd like to pan on left (1), middle (2), or right click (3)\n which: 1,\n\n // The increment at which to zoom\n // adds/subtracts to the scale each time zoomIn/Out is called\n increment: 0.3,\n\n // Turns on exponential zooming\n // If false, zooming will be incremented linearly\n exponential: true,\n\n // Pan only when the scale is greater than minScale\n panOnlyWhenZoomed: false,\n\n // min and max zoom scales\n minScale: 0.3,\n maxScale: 6,\n\n // The default step for the range input\n // Precendence: default < HTML attribute < option setting\n rangeStep: 0.05,\n\n // Animation duration (ms)\n duration: 200,\n // CSS easing used for scale transition\n easing: 'ease-in-out',\n\n // Indicate that the element should be contained within it's parent when panning\n // Note: this does not affect zooming outside of the parent\n // Set this value to 'invert' to only allow panning outside of the parent element (basically the opposite of the normal use of contain)\n // 'invert' is useful for a large panzoom element where you don't want to show anything behind it\n contain: false,\n };\n\n Panzoom.prototype = {\n constructor: Panzoom,\n\n /**\n * @returns {Panzoom} Returns the instance\n */\n instance: function () {\n return this;\n },\n\n /**\n * Enable or re-enable the panzoom instance\n */\n enable: function () {\n // Unbind first\n this._initStyle();\n this._bind();\n this.disabled = false;\n },\n\n /**\n * Disable panzoom\n */\n disable: function () {\n this.disabled = true;\n this._resetStyle();\n this._unbind();\n },\n\n /**\n * @returns {Boolean} Returns whether the current panzoom instance is disabled\n */\n isDisabled: function () {\n return this.disabled;\n },\n\n /**\n * Destroy the panzoom instance\n */\n destroy: function () {\n this.disable();\n $.removeData(this.elem, datakey);\n },\n\n /**\n * Builds the restricing dimensions from the containment element\n * Also used with focal points\n * Call this method whenever the dimensions of the element or parent are changed\n */\n resetDimensions: function () {\n // Reset container properties\n this.container = this.parent.getBoundingClientRect();\n\n // Set element properties\n var elem = this.elem;\n // getBoundingClientRect() works with SVG, offsetWidth does not\n var dims = elem.getBoundingClientRect();\n var absScale = Math.abs(this.scale);\n this.dimensions = {\n width: dims.width,\n height: dims.height,\n left: $.css(elem, 'left', true) || 0,\n top: $.css(elem, 'top', true) || 0,\n // Borders and margins are scaled\n border: {\n top: $.css(elem, 'borderTopWidth', true) * absScale || 0,\n bottom: $.css(elem, 'borderBottomWidth', true) * absScale || 0,\n left: $.css(elem, 'borderLeftWidth', true) * absScale || 0,\n right: $.css(elem, 'borderRightWidth', true) * absScale || 0,\n },\n margin: {\n top: $.css(elem, 'marginTop', true) * absScale || 0,\n left: $.css(elem, 'marginLeft', true) * absScale || 0,\n },\n };\n },\n\n /**\n * Return the element to it's original transform matrix\n * @param {Boolean} [options] If a boolean is passed, animate the reset (default: true). If an options object is passed, simply pass that along to setMatrix.\n * @param {Boolean} [options.silent] Silence the reset event\n */\n reset: function (options) {\n options = createResetOptions(options);\n // Reset the transform to its original value\n var matrix = this.setMatrix(this._origTransform, options);\n if (!options.silent) {\n this._trigger('reset', matrix);\n }\n },\n\n /**\n * Only resets zoom level\n * @param {Boolean|Object} [options] Whether to animate the reset (default: true) or an object of options to pass to zoom()\n */\n resetZoom: function (options) {\n options = createResetOptions(options);\n var origMatrix = this.getMatrix(this._origTransform);\n options.dValue = origMatrix[3];\n this.zoom(origMatrix[0], options);\n },\n\n /**\n * Only reset panning\n * @param {Boolean|Object} [options] Whether to animate the reset (default: true) or an object of options to pass to pan()\n */\n resetPan: function (options) {\n var origMatrix = this.getMatrix(this._origTransform);\n this.pan(origMatrix[4], origMatrix[5], createResetOptions(options));\n },\n\n /**\n * Sets a transform on the $set\n * For SVG, the style attribute takes precedence\n * and allows us to animate\n * @param {String} transform\n */\n setTransform: function (transform) {\n var $set = this.$set;\n var i = $set.length;\n while (i--) {\n $.style($set[i], 'transform', transform);\n\n // Support IE9-11, Edge 13-14+\n // Set attribute alongside style attribute\n // since IE and Edge do not respect style settings on SVG\n // See https://css-tricks.com/transforms-on-svg-elements/\n if (this.isSVG) {\n $set[i].setAttribute('transform', transform);\n }\n }\n },\n\n /**\n * Retrieving the transform is different for SVG\n * (unless a style transform is already present)\n * Uses the $set collection for retrieving the transform\n * @param {String} [transform] Pass in an transform value (like 'scale(1.1)')\n * to have it formatted into matrix format for use by Panzoom\n * @returns {String} Returns the current transform value of the element\n */\n getTransform: function (transform) {\n var $set = this.$set;\n var transformElem = $set[0];\n if (transform) {\n this.setTransform(transform);\n } else {\n // IE and Edge still set the transform style properly\n // They just don't render it on SVG\n // So we get a correct value here\n transform = $.style(transformElem, 'transform');\n\n if (this.isSVG && (!transform || transform === 'none')) {\n transform = $.attr(transformElem, 'transform') || 'none';\n }\n }\n\n // Convert any transforms set by the user to matrix format\n // by setting to computed\n if (transform !== 'none' && !rmatrix.test(transform)) {\n // Get computed and set for next time\n this.setTransform((transform = $.css(transformElem, 'transform')));\n }\n\n return transform || 'none';\n },\n\n /**\n * Retrieve the current transform matrix for $elem (or turn a transform into it's array values)\n * @param {String} [transform] matrix-formatted transform value\n * @returns {Array} Returns the current transform matrix split up into it's parts, or a default matrix\n */\n getMatrix: function (transform) {\n var matrix = rmatrix.exec(transform || this.getTransform());\n if (matrix) {\n matrix.shift();\n }\n return matrix || [1, 0, 0, 1, 0, 0];\n },\n\n /**\n * Given a matrix object, quickly set the current matrix of the element\n * @param {Array|String} matrix\n * @param {Object} [options]\n * @param {Boolean|String} [options.animate] Whether to animate the transform change, or 'skip' indicating that it is unnecessary to set\n * @param {Boolean} [options.contain] Override the global contain option\n * @param {Boolean} [options.range] If true, $zoomRange's value will be updated.\n * @param {Boolean} [options.silent] If true, the change event will not be triggered\n * @returns {Array} Returns the newly-set matrix\n */\n setMatrix: function (matrix, options) {\n if (this.disabled) {\n return;\n }\n if (!options) {\n options = {};\n }\n // Convert to array\n if (typeof matrix === 'string') {\n matrix = this.getMatrix(matrix);\n }\n var scale = +matrix[0];\n var contain = typeof options.contain !== 'undefined' ? options.contain : this.options.contain;\n\n // Apply containment\n if (contain) {\n var dims = options.dims;\n if (!dims) {\n this.resetDimensions();\n dims = this.dimensions;\n }\n var spaceWLeft, spaceWRight, scaleDiff;\n var container = this.container;\n var width = dims.width;\n var height = dims.height;\n var conWidth = container.width;\n var conHeight = container.height;\n var zoomAspectW = conWidth / width;\n var zoomAspectH = conHeight / height;\n\n // If the element is not naturally centered,\n // assume full space right\n if (this.$parent.css('textAlign') !== 'center' || $.css(this.elem, 'display') !== 'inline') {\n // offsetWidth gets us the width without the transform\n scaleDiff = (width - this.elem.offsetWidth) / 2;\n spaceWLeft = scaleDiff - dims.border.left;\n spaceWRight = width - conWidth - scaleDiff + dims.border.right;\n } else {\n spaceWLeft = spaceWRight = (width - conWidth) / 2;\n }\n var spaceHTop = (height - conHeight) / 2 + dims.border.top;\n var spaceHBottom = (height - conHeight) / 2 - dims.border.top - dims.border.bottom;\n\n if (contain === 'invert' || (contain === 'automatic' && zoomAspectW < 1.01)) {\n matrix[4] = Math.max(Math.min(matrix[4], spaceWLeft - dims.border.left), -spaceWRight);\n } else {\n matrix[4] = Math.min(Math.max(matrix[4], spaceWLeft), -spaceWRight);\n }\n\n if (contain === 'invert' || (contain === 'automatic' && zoomAspectH < 1.01)) {\n matrix[5] = Math.max(Math.min(matrix[5], spaceHTop - dims.border.top), -spaceHBottom);\n } else {\n matrix[5] = Math.min(Math.max(matrix[5], spaceHTop), -spaceHBottom);\n }\n }\n\n // Animate\n if (options.animate !== 'skip') {\n // Set transition\n this.transition(!options.animate);\n }\n\n // Update range element\n if (options.range) {\n this.$zoomRange.val(scale);\n }\n\n // Set the matrix on this.$set\n if (this.options.disableXAxis || this.options.disableYAxis) {\n var originalMatrix = this.getMatrix();\n if (this.options.disableXAxis) {\n matrix[4] = originalMatrix[4];\n }\n if (this.options.disableYAxis) {\n matrix[5] = originalMatrix[5];\n }\n }\n this.setTransform('matrix(' + matrix.join(',') + ')');\n\n this.scale = scale;\n\n // Disable/enable panning if zooming is at minimum and panOnlyWhenZoomed is true\n this._checkPanWhenZoomed(scale);\n\n if (!options.silent) {\n this._trigger('change', matrix);\n }\n\n return matrix;\n },\n\n /**\n * @returns {Boolean} Returns whether the panzoom element is currently being dragged\n */\n isPanning: function () {\n return this.panning;\n },\n\n /**\n * Apply the current transition to the element, if allowed\n * @param {Boolean} [off] Indicates that the transition should be turned off\n */\n transition: function (off) {\n if (!this._transition) {\n return;\n }\n var transition = off || !this.options.transition ? 'none' : this._transition;\n var $set = this.$set;\n var i = $set.length;\n while (i--) {\n // Avoid reflows when zooming\n if ($.style($set[i], 'transition') !== transition) {\n $.style($set[i], 'transition', transition);\n }\n }\n },\n\n /**\n * Pan the element to the specified translation X and Y\n * Note: this is not the same as setting jQuery#offset() or jQuery#position()\n * @param {Number} x\n * @param {Number} y\n * @param {Object} [options] These options are passed along to setMatrix\n * @param {Array} [options.matrix] The matrix being manipulated (if already known so it doesn't have to be retrieved again)\n * @param {Boolean} [options.silent] Silence the pan event. Note that this will also silence the setMatrix change event.\n * @param {Boolean} [options.relative] Make the x and y values relative to the existing matrix\n */\n pan: function (x, y, options) {\n if (this.options.disablePan) {\n return;\n }\n if (!options) {\n options = {};\n }\n var matrix = options.matrix;\n if (!matrix) {\n matrix = this.getMatrix();\n }\n // Cast existing matrix values to numbers\n if (options.relative) {\n x += +matrix[4];\n y += +matrix[5];\n }\n matrix[4] = x;\n matrix[5] = y;\n this.setMatrix(matrix, options);\n if (!options.silent) {\n this._trigger('pan', matrix[4], matrix[5]);\n }\n },\n\n /**\n * Zoom in/out the element using the scale properties of a transform matrix\n * @param {Number|Boolean} [scale] The scale to which to zoom or a boolean indicating to transition a zoom out\n * @param {Object} [opts] All global options can be overwritten by this options object. For example, override the default increment.\n * @param {Boolean} [opts.noSetRange] Specify that the method should not set the $zoomRange value (as is the case when $zoomRange is calling zoom on change)\n * @param {jQuery.Event|Object} [opts.focal] A focal point on the panzoom element on which to zoom.\n * If an object, set the clientX and clientY properties to the position relative to the parent\n * @param {Boolean} [opts.animate] Whether to animate the zoom (defaults to true if scale is not a number, false otherwise)\n * @param {Boolean} [opts.silent] Silence the zoom event\n * @param {Array} [opts.matrix] Optionally pass the current matrix so it doesn't need to be retrieved\n * @param {Number} [opts.dValue] Think of a transform matrix as four values a, b, c, d\n * where a/d are the horizontal/vertical scale values and b/c are the skew values\n * (5 and 6 of matrix array are the tx/ty transform values).\n * Normally, the scale is set to both the a and d values of the matrix.\n * This option allows you to specify a different d value for the zoom.\n * For instance, to flip vertically, you could set -1 as the dValue.\n */\n zoom: function (scale, opts) {\n // Shuffle arguments\n if (typeof scale === 'object') {\n opts = scale;\n scale = null;\n } else if (!opts) {\n opts = {};\n }\n var options = $.extend({}, this.options, opts);\n // Check if disabled\n if (options.disableZoom) {\n return;\n }\n var animate = false;\n var matrix = options.matrix || this.getMatrix();\n var startScale = +matrix[0];\n\n // Calculate zoom based on increment\n if (typeof scale !== 'number') {\n // Just use a number a little greater than 1\n // Below 1 can use normal increments\n if (options.exponential && startScale - options.increment >= 1) {\n scale = Math[scale ? 'sqrt' : 'pow'](startScale, 2);\n } else {\n scale = startScale + options.increment * (scale ? -1 : 1);\n }\n animate = true;\n }\n\n // Constrain scale\n if (scale > options.maxScale) {\n scale = options.maxScale;\n } else if (scale < options.minScale) {\n scale = options.minScale;\n }\n\n // Calculate focal point based on scale\n var focal = options.focal;\n if (focal && !options.disablePan) {\n // Adapted from code by Florian Günther\n // https://github.com/florianguenther/zui53\n this.resetDimensions();\n var dims = (options.dims = this.dimensions);\n var clientX = focal.clientX;\n var clientY = focal.clientY;\n\n // Adjust the focal point for transform-origin 50% 50%\n // SVG elements have a transform origin of 0 0\n if (!this.isSVG) {\n clientX -= dims.width / startScale / 2;\n clientY -= dims.height / startScale / 2;\n }\n\n var clientV = new Vector(clientX, clientY, 1);\n var surfaceM = new Matrix(matrix);\n // Supply an offset manually if necessary\n var o = this.parentOffset || this.$parent.offset();\n var offsetM = new Matrix(1, 0, o.left - this.$doc.scrollLeft(), 0, 1, o.top - this.$doc.scrollTop());\n var surfaceV = surfaceM.inverse().x(offsetM.inverse().x(clientV));\n var scaleBy = scale / matrix[0];\n surfaceM = surfaceM.x(new Matrix([scaleBy, 0, 0, scaleBy, 0, 0]));\n clientV = offsetM.x(surfaceM.x(surfaceV));\n matrix[4] = +matrix[4] + (clientX - clientV.e(0));\n matrix[5] = +matrix[5] + (clientY - clientV.e(1));\n }\n\n // Set the scale\n matrix[0] = scale;\n matrix[3] = typeof options.dValue === 'number' ? options.dValue : scale;\n\n // Calling zoom may still pan the element\n this.setMatrix(matrix, {\n animate: typeof options.animate !== 'undefined' ? options.animate : animate,\n // Set the zoomRange value\n range: !options.noSetRange,\n });\n\n // Trigger zoom event\n if (!options.silent) {\n this._trigger('zoom', matrix[0], options);\n }\n },\n\n /**\n * Get/set option on an existing instance\n * @returns {Array|undefined} If getting, returns an array of all values\n * on each instance for a given key. If setting, continue chaining by returning undefined.\n */\n option: function (key, value) {\n var options;\n if (!key) {\n // Avoids returning direct reference\n return $.extend({}, this.options);\n }\n\n if (typeof key === 'string') {\n if (arguments.length === 1) {\n return this.options[key] !== undefined ? this.options[key] : null;\n }\n options = {};\n options[key] = value;\n } else {\n options = key;\n }\n\n this._setOptions(options);\n },\n\n /**\n * Internally sets options\n * @param {Object} options - An object literal of options to set\n * @private\n */\n _setOptions: function (options) {\n $.each(\n options,\n $.proxy(function (key, value) {\n switch (key) {\n case 'disablePan':\n this._resetStyle();\n /* falls through */\n case '$zoomIn':\n case '$zoomOut':\n case '$zoomRange':\n case '$reset':\n case 'disableZoom':\n case 'onStart':\n case 'onChange':\n case 'onZoom':\n case 'onPan':\n case 'onEnd':\n case 'onReset':\n case 'eventNamespace':\n this._unbind();\n }\n this.options[key] = value;\n switch (key) {\n case 'disablePan':\n this._initStyle();\n /* falls through */\n case '$zoomIn':\n case '$zoomOut':\n case '$zoomRange':\n case '$reset':\n // Set these on the instance\n this[key] = value;\n /* falls through */\n case 'disableZoom':\n case 'onStart':\n case 'onChange':\n case 'onZoom':\n case 'onPan':\n case 'onEnd':\n case 'onReset':\n case 'eventNamespace':\n this._bind();\n break;\n case 'cursor':\n $.style(this.elem, 'cursor', value);\n break;\n case 'minScale':\n this.$zoomRange.attr('min', value);\n break;\n case 'maxScale':\n this.$zoomRange.attr('max', value);\n break;\n case 'rangeStep':\n this.$zoomRange.attr('step', value);\n break;\n case 'startTransform':\n this._buildTransform();\n break;\n case 'duration':\n case 'easing':\n this._buildTransition();\n /* falls through */\n case 'transition':\n this.transition();\n break;\n case 'panOnlyWhenZoomed':\n this._checkPanWhenZoomed();\n break;\n case '$set':\n if (value instanceof $ && value.length) {\n this.$set = value;\n // Reset styles\n this._initStyle();\n this._buildTransform();\n }\n }\n }, this)\n );\n },\n\n /**\n * Disable/enable panning depending on whether the current scale\n * matches the minimum\n * @param {Number} [scale]\n * @private\n */\n _checkPanWhenZoomed: function (scale) {\n var options = this.options;\n if (options.panOnlyWhenZoomed) {\n if (!scale) {\n scale = this.getMatrix()[0];\n }\n var toDisable = scale <= options.minScale;\n if (options.disablePan !== toDisable) {\n this.option('disablePan', toDisable);\n }\n }\n },\n\n /**\n * Initialize base styles for the element and its parent\n * @private\n */\n _initStyle: function () {\n var styles = {\n // Set the same default whether SVG or HTML\n // transform-origin cannot be changed to 50% 50% in IE9-11 or Edge 13-14+\n 'transform-origin': this.isSVG ? '0 0' : '50% 50%',\n };\n // Set elem styles\n if (!this.options.disablePan) {\n styles.cursor = this.options.cursor;\n }\n this.$set.css(styles);\n\n // Set parent to relative if set to static\n var $parent = this.$parent;\n // No need to add styles to the body\n if ($parent.length && !$.nodeName(this.parent, 'body')) {\n styles = {\n overflow: 'hidden',\n };\n if ($parent.css('position') === 'static') {\n styles.position = 'relative';\n }\n $parent.css(styles);\n }\n },\n\n /**\n * Undo any styles attached in this plugin\n * @private\n */\n _resetStyle: function () {\n this.$elem.css({\n cursor: '',\n transition: '',\n });\n this.$parent.css({\n overflow: '',\n position: '',\n });\n },\n\n /**\n * Binds all necessary events\n * @private\n */\n _bind: function () {\n var self = this;\n var options = this.options;\n var ns = options.eventNamespace;\n var str_down = 'mousedown' + ns + ' pointerdown' + ns + ' MSPointerDown' + ns;\n var str_start = 'touchstart' + ns + ' ' + str_down;\n var str_click = 'touchend' + ns + ' click' + ns + ' pointerup' + ns + ' MSPointerUp' + ns;\n var events = {};\n var $reset = this.$reset;\n var $zoomRange = this.$zoomRange;\n\n // Bind panzoom events from options\n $.each(['Start', 'Change', 'Zoom', 'Pan', 'End', 'Reset'], function () {\n var m = options['on' + this];\n if ($.isFunction(m)) {\n events['panzoom' + this.toLowerCase() + ns] = m;\n }\n });\n\n // Bind $elem drag and click/touchdown events\n // Bind touchstart if either panning or zooming is enabled\n if (!options.disablePan || !options.disableZoom) {\n events[str_start] = function (e) {\n var touches;\n if (\n e.type === 'touchstart'\n ? // Touch\n (touches = e.touches || e.originalEvent.touches) &&\n ((touches.length === 1 && !options.disablePan) || touches.length === 2)\n : // Mouse/Pointer: Ignore unexpected click types\n // Support: IE10 only\n // IE10 does not support e.button for MSPointerDown, but does have e.which\n !options.disablePan && (e.which || e.originalEvent.which) === options.which\n ) {\n e.preventDefault();\n e.stopPropagation();\n self._startMove(e, touches);\n }\n };\n // Prevent the contextmenu event\n // if we're binding to right-click\n if (options.which === 3) {\n events.contextmenu = false;\n }\n }\n this.$elem.on(events);\n\n // Bind reset\n if ($reset.length) {\n $reset.on(str_click, function (e) {\n e.preventDefault();\n self.reset();\n });\n }\n\n // Set default attributes for the range input\n if ($zoomRange.length) {\n $zoomRange\n .attr({\n // Only set the range step if explicit or\n // set the default if there is no attribute present\n step:\n (options.rangeStep === Panzoom.defaults.rangeStep && $zoomRange.attr('step')) ||\n options.rangeStep,\n min: options.minScale,\n max: options.maxScale,\n })\n .prop({\n value: this.getMatrix()[0],\n });\n }\n\n // No bindings if zooming is disabled\n if (options.disableZoom) {\n return;\n }\n\n var $zoomIn = this.$zoomIn;\n var $zoomOut = this.$zoomOut;\n\n // Bind zoom in/out\n // Don't bind one without the other\n if ($zoomIn.length && $zoomOut.length) {\n // preventDefault cancels future mouse events on touch events\n $zoomIn.on(str_click, function (e) {\n e.preventDefault();\n self.zoom();\n });\n $zoomOut.on(str_click, function (e) {\n e.preventDefault();\n self.zoom(true);\n });\n }\n\n if ($zoomRange.length) {\n events = {};\n // Cannot prevent default action here\n events[str_down] = function () {\n self.transition(true);\n };\n // Zoom on input events if available and change events\n // See https://github.com/timmywil/jquery.panzoom/issues/90\n events[(supportsInputEvent ? 'input' : 'change') + ns] = function () {\n self.zoom(+this.value, {noSetRange: true});\n };\n $zoomRange.on(events);\n }\n },\n\n /**\n * Unbind all events\n * @private\n */\n _unbind: function () {\n this.$elem.add(this.$zoomIn).add(this.$zoomOut).add(this.$reset).off(this.options.eventNamespace);\n },\n\n /**\n * Builds the original transform value\n * @private\n */\n _buildTransform: function () {\n // Save the original transform\n // Retrieving this also adds the correct prefixed style name\n // to jQuery's internal $.cssProps\n return (this._origTransform = this.getTransform(this.options.startTransform));\n },\n\n /**\n * Set transition property for later use when zooming\n * @private\n */\n _buildTransition: function () {\n if (this._transform) {\n var options = this.options;\n this._transition = this._transform + ' ' + options.duration + 'ms ' + options.easing;\n }\n },\n\n /**\n * Calculates the distance between two touch points\n * Remember pythagorean?\n * @param {Array} touches\n * @returns {Number} Returns the distance\n * @private\n */\n _getDistance: function (touches) {\n var touch1 = touches[0];\n var touch2 = touches[1];\n return Math.sqrt(\n Math.pow(Math.abs(touch2.clientX - touch1.clientX), 2) +\n Math.pow(Math.abs(touch2.clientY - touch1.clientY), 2)\n );\n },\n\n /**\n * Constructs an approximated point in the middle of two touch points\n * @returns {Object} Returns an object containing pageX and pageY\n * @private\n */\n _getMiddle: function (touches) {\n var touch1 = touches[0];\n var touch2 = touches[1];\n return {\n clientX: (touch2.clientX - touch1.clientX) / 2 + touch1.clientX,\n clientY: (touch2.clientY - touch1.clientY) / 2 + touch1.clientY,\n };\n },\n\n /**\n * Trigger a panzoom event on our element\n * The event is passed the Panzoom instance\n * @param {String|jQuery.Event} event\n * @param {Mixed} arg1[, arg2, arg3, ...] Arguments to append to the trigger\n * @private\n */\n _trigger: function (event) {\n if (typeof event === 'string') {\n event = 'panzoom' + event;\n }\n this.$elem.triggerHandler(event, [this].concat(slice.call(arguments, 1)));\n },\n\n /**\n * Starts the pan\n * This is bound to mouse/touchmove on the element\n * @param {jQuery.Event} event An event with pageX, pageY, and possibly the touches list\n * @param {TouchList} [touches] The touches list if present\n * @private\n */\n _startMove: function (event, touches) {\n if (this.panning) {\n return;\n }\n var moveEvent, endEvent, startDistance, startScale, startMiddle, startPageX, startPageY, touch;\n var self = this;\n var options = this.options;\n var ns = options.eventNamespace;\n var matrix = this.getMatrix();\n var original = matrix.slice(0);\n var origPageX = +original[4];\n var origPageY = +original[5];\n var panOptions = {matrix: matrix, animate: 'skip'};\n var type = event.type;\n\n // Use proper events\n if (type === 'pointerdown') {\n moveEvent = 'pointermove';\n endEvent = 'pointerup';\n } else if (type === 'touchstart') {\n moveEvent = 'touchmove';\n endEvent = 'touchend';\n } else if (type === 'MSPointerDown') {\n moveEvent = 'MSPointerMove';\n endEvent = 'MSPointerUp';\n } else {\n moveEvent = 'mousemove';\n endEvent = 'mouseup';\n }\n\n // Add namespace\n moveEvent += ns;\n endEvent += ns;\n\n // Remove any transitions happening\n this.transition(true);\n\n // Indicate that we are currently panning\n this.panning = true;\n\n // Trigger start event\n this._trigger('start', event, touches);\n\n var setStart = function (event, touches) {\n if (touches) {\n if (touches.length === 2) {\n if (startDistance != null) {\n return;\n }\n startDistance = self._getDistance(touches);\n startScale = self.getScale(matrix);\n startMiddle = self._getMiddle(touches);\n return;\n }\n if (startPageX != null) {\n return;\n }\n if ((touch = touches[0])) {\n startPageX = touch.pageX;\n startPageY = touch.pageY;\n }\n }\n if (startPageX != null) {\n return;\n }\n startPageX = event.pageX;\n startPageY = event.pageY;\n };\n\n setStart(event, touches);\n\n var move = function (e) {\n var coords;\n e.preventDefault();\n touches = e.touches || e.originalEvent.touches;\n setStart(e, touches);\n\n if (touches) {\n if (touches.length === 2) {\n // Calculate move on middle point\n var middle = self._getMiddle(touches);\n var diff = self._getDistance(touches) - startDistance;\n\n // Set zoom\n self.zoom(diff * (options.increment / 100) + startScale, {\n focal: middle,\n matrix: matrix,\n animate: 'skip',\n });\n\n // Set pan\n self.pan(\n +matrix[4] + middle.clientX - startMiddle.clientX,\n +matrix[5] + middle.clientY - startMiddle.clientY,\n panOptions\n );\n startMiddle = middle;\n return;\n }\n coords = touches[0] || {pageX: 0, pageY: 0};\n }\n\n if (!coords) {\n coords = e;\n }\n\n self.pan(origPageX + coords.pageX - startPageX, origPageY + coords.pageY - startPageY, panOptions);\n };\n\n // Bind the handlers\n $(document)\n .off(ns)\n .on(moveEvent, move)\n .on(endEvent, function (e) {\n e.preventDefault();\n // Unbind all document events\n $(this).off(ns);\n self.panning = false;\n // Trigger our end event\n // Simply set the type to \"panzoomend\" to pass through all end properties\n // jQuery's `not` is used here to compare Array equality\n e.type = 'panzoomend';\n self._trigger(e, matrix, !matrixEquals(matrix, original));\n });\n },\n };\n\n // Add Panzoom as a static property\n $.Panzoom = Panzoom;\n\n /**\n * Extend jQuery\n * @param {Object|String} options - The name of a method to call on the prototype\n * or an object literal of options\n * @returns {jQuery|Mixed} jQuery instance for regular chaining or the return value(s) of a panzoom method call\n */\n $.fn.panzoom = function (options) {\n var instance, args, m, ret;\n\n // Call methods widget-style\n if (typeof options === 'string') {\n ret = [];\n args = slice.call(arguments, 1);\n this.each(function () {\n instance = $.data(this, datakey);\n\n if (!instance) {\n ret.push(undefined);\n\n // Ignore methods beginning with `_`\n } else if (\n options.charAt(0) !== '_' &&\n typeof (m = instance[options]) === 'function' &&\n // If nothing is returned, do not add to return values\n (m = m.apply(instance, args)) !== undefined\n ) {\n ret.push(m);\n }\n });\n\n // Return an array of values for the jQuery instances\n // Or the value itself if there is only one\n // Or keep chaining\n return ret.length ? (ret.length === 1 ? ret[0] : ret) : this;\n }\n\n return this.each(function () {\n new Panzoom(this, options);\n });\n };\n\n return Panzoom;\n});\n","(function () {\n const initCrossref = {\n init: function () {\n initCrossref.controller();\n },\n controller: function () {\n var SETTINGS = {\n ENDPOINT: 'https://crossmark.crossref.org/dialog',\n SCRIPT_VERSION: 'v2.0',\n // LOGO_URL: 'http://crossmark-cdn.crossref.org/widget/v2.0/logos/crossmark-logo-square.svg',\n STYLESHEET_URL: 'https://crossmark-cdn.crossref.org/widget/v2.0/style.css',\n };\n\n var touchStarted = false;\n var touchArea;\n var tapEvent = function (element, callback) {\n element.addEventListener(\n 'click',\n function (event) {\n if (event.ctrlKey || event.shiftKey || event.metaKey || event.which !== 1) {\n return;\n }\n return callback(event);\n },\n false\n );\n\n element.addEventListener(\n 'touchstart',\n function (event) {\n if (event.touches.length > 1) return (touchStarted = false);\n touchArea = {x: event.touches[0].screenX, y: event.touches[0].screenY};\n touchStarted = element;\n\n event.stopPropagation();\n },\n false\n );\n\n window.addEventListener('touchstart', function (event) {\n touchStarted = false;\n });\n\n element.addEventListener(\n 'touchmove',\n function (event) {\n if (event.touches.length > 1) return (touchStarted = false);\n const newTouchArea = {x: event.touches[0].screenX, y: event.touches[0].screenY};\n if (\n Math.pow(touchArea.x - newTouchArea.x, 2) + Math.pow(touchArea.y - newTouchArea.y, 2) >\n 500\n ) {\n touchStarted = false;\n }\n },\n false\n );\n\n element.addEventListener(\n 'touchend',\n function (event) {\n if (touchStarted) {\n touchStarted = false;\n return callback(event);\n } else {\n event.preventDefault();\n }\n },\n false\n );\n };\n\n const buildQueryString = function (data) {\n const query = [];\n for (let key in data) {\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key]));\n }\n return '?' + query.join('&');\n };\n\n const isIos = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;\n\n // Scan for case-insensitive.\n const getDoiMeta = function () {\n const metaTags = document.querySelectorAll('meta');\n for (let i in metaTags) {\n if (Object.prototype.hasOwnProperty.call(metaTags, i)) {\n const tag = metaTags[i];\n if ((tag.name || '').toLowerCase() === 'dc.identifier' && tag.scheme === 'doi') {\n return tag;\n }\n }\n }\n };\n\n const doiMeta = getDoiMeta();\n let doi = doiMeta ? doiMeta.getAttribute('content').replace(/^(info:doi\\/|doi:)/, '') : null;\n if (doi == null) doi = $('#crossMark').data('doi');\n\n const queryData = {\n doi: doi,\n domain: window.location.hostname,\n uri_scheme: window.location.protocol,\n cm_version: SETTINGS.SCRIPT_VERSION,\n };\n\n const css = document.createElement('link');\n css.setAttribute('href', SETTINGS.STYLESHEET_URL);\n css.setAttribute('type', 'text/css');\n css.setAttribute('rel', 'stylesheet');\n document.querySelector('head').appendChild(css);\n\n const widget = document.createElement('div');\n widget.setAttribute('id', 'crossmark-widget');\n\n // Initial display none to avoid a flash on load.\n widget.style.display = 'none';\n\n widget.innerHTML =\n '
' +\n '
' +\n '
' +\n '
' +\n '
' +\n '' +\n '
' +\n '
' +\n '' +\n '
' +\n '
' +\n '
' +\n '
';\n\n const overlay = widget.querySelector('.crossmark-overlay');\n const popup = widget.querySelector('.crossmark-popup');\n const popupOffset = widget.querySelector('.crossmark-popup__offset');\n const popupInner = widget.querySelector('.crossmark-popup__inner');\n const content = widget.querySelector('.crossmark-popup__content');\n const closeButton = widget.querySelector('.crossmark-popup__btn-close');\n\n if (isIos) popupOffset.classList.add('is-ios');\n // logo.setAttribute('src', SETTINGS.LOGO_URL);\n\n document.body.appendChild(widget);\n\n [overlay, popup, closeButton].map(function (element) {\n tapEvent(element, function (event) {\n widget.style.display = 'none';\n\n event.preventDefault();\n event.stopPropagation();\n });\n });\n\n tapEvent(popupInner, function (event) {\n event.stopPropagation();\n });\n\n let initialised = false;\n\n // delete queryData.domain;\n\n const links = [].slice.call(document.querySelectorAll('[data-target=crossmark]'), 0);\n links.map(function (link) {\n link.style.cursor = 'pointer';\n link.setAttribute('href', SETTINGS.ENDPOINT + buildQueryString(queryData));\n\n tapEvent(link, function (event) {\n if (!initialised) {\n content.setAttribute('src', SETTINGS.ENDPOINT + buildQueryString(queryData));\n initialised = true;\n }\n widget.style.display = 'block';\n if (isIos) popupInner.style.top = window.scrollY + 'px';\n\n event.preventDefault();\n event.stopPropagation();\n });\n });\n },\n };\n UX.initCrossref = initCrossref; // add to global namespace\n})();\n\nif (document.readyState !== 'loading') {\n UX.initCrossref.init();\n} else {\n document.addEventListener('DOMContentLoaded', function () {\n UX.initCrossref.init();\n });\n}\n","(function () {\n var articleTools = {\n init: function () {\n articleTools.control();\n },\n copy: function (str, additionalLink = '') {\n const el = document.createElement('textarea');\n el.id = 'temp_element';\n el.value = document.location.protocol + '//' + document.location.host + additionalLink + str;\n el.setAttribute('readonly', '');\n document.body.appendChild(el);\n\n /*to work on IOS*/\n let selector = document.querySelector('#temp_element');\n if (navigator.userAgent.match(/ipad|ipod|iphone/i)) {\n selector.setSelectionRange(0, 999999);\n } else {\n selector.select();\n }\n\n document.execCommand('copy');\n document.body.removeChild(el);\n\n // to show alert message that the text is copied, implemented on RMIT\n const copiedEvent = $.Event('link:copied');\n $(document).trigger(copiedEvent, [articleTools]);\n if (copiedEvent.isDefaultPrevented()) {\n return;\n }\n },\n control: function () {\n if ($('figure .figure__image').length === 0) {\n $('.download_Figures').closest('.article-tool').hide();\n }\n\n const permission = document.querySelectorAll('.article-tool__permissions');\n if (permission.length > 0) {\n permission.forEach(el => {\n const url = el.getAttribute('href');\n el.addEventListener('click', () => {\n window.open(url, 'popup', 'width=750,height=650');\n });\n });\n }\n const likeLink = document.querySelectorAll('.likeLink');\n if (likeLink.length > 0) {\n likeLink.forEach(el => {\n const url = el.getAttribute('data-url');\n el.addEventListener('click', () => {\n articleTools.copy(url, '/lti');\n });\n });\n }\n },\n };\n\n UX.articleTools = articleTools;\n\n if ($('.article-tools__ctrl').length) {\n UX.articleTools.init();\n }\n})();\n","(function () {\n const tab = UX.tab;\n const loader = {\n $activator: '',\n doi: '',\n figure: '',\n tab: '',\n references: '',\n related: '',\n details: '',\n $tabs: null,\n $spinner: null,\n figuresTab: '.figures-tab',\n tabFigure: '#pane-pcw-Figures , #pane-pcw-figures',\n referencesTab: '.references-tab',\n tabReferences: '#pane-pcw-References, #pane-pcw-references',\n relatedTab: '.related-tab',\n tabRelated: '#pane-pcw-Related, #pane-pcw-related',\n detailsTab: '.details-tab',\n accessTab: '.access-tab',\n tabDetails: '#pane-pcw-Details, #pane-pcw-details',\n vPort: 'screen-xs',\n isMobile: false,\n cloudFlareScript: '',\n openSeaDragonCloudFlareScript: '',\n init: function () {\n // show spinner\n loader.$tabs = $('.article__tab');\n loader.$spinner = $('.tab__spinner');\n loader.cloudFlareScript = $('.cloudFlareScript').length && $('.cloudFlareScript').val();\n loader.openSeaDragonCloudFlareScript =\n $('.openSeaDragonCloudFlareScript').length && $('.openSeaDragonCloudFlareScript').val();\n loader.get.figures();\n loader.get.references();\n loader.get.related();\n loader.get.details();\n loader.truncation.init();\n if ($('article')) {\n loader.load.articleTabs();\n }\n loader.tableToggle();\n loader.controller();\n loader.additionalController();\n },\n controller: function () {\n $('body').on('click', '.figures-tab', function (e) {\n loader.load.figures(true);\n });\n $('body').on('click', '.boxed-text', function (e) {\n e.preventDefault();\n const $el = $(this),\n boxedContent = $el.attr('href'),\n boxedHtml = $(boxedContent).html(),\n $myModal = $('#myModal');\n\n if (!boxedContent || !boxedHtml) return;\n\n if ($myModal.length === 0) {\n const modal_start =\n '
',\n modal_header =\n '
',\n modal_body = '
',\n modal_end = '
',\n modal = modal_start + modal_header + modal_body + modal_end;\n $('body').append(modal);\n }\n\n $myModal.find('.modal__body').html(boxedHtml);\n $myModal.modal('show');\n });\n\n $(document).on(loader.vPort + '-on', function () {\n // Waiting for custom event that will be triggered by controller.js to activate responsive effects\n loader.isMobile = true;\n loader.rebuild.responsive();\n loader.rebuild.extra();\n loader.figures.accordion();\n });\n\n $(document).on(loader.vPort + '-off', function () {\n // Waiting for custom event that will be triggered by controller.js to deactivate responsive effects\n loader.isMobile = false;\n loader.rebuild.original();\n loader.figures.back();\n });\n\n loader.articleTabsTrigger();\n },\n additionalController: function () {},\n articleTabsTrigger: function () {\n if ($('.access-tab').length) {\n $('.access-tab').trigger('click');\n }\n },\n rebuild: {\n original: function () {\n // return loi to be as default\n var $loaWrapper = $('.loa-wrapper');\n $loaWrapper\n .find('.accordion-tabbed__tab')\n .removeClass('accordion-tabbed__tab')\n .addClass('accordion-tabbed__tab-mobile');\n $loaWrapper.find('.delimiter').removeClass('hidden');\n const $author = $loaWrapper.find('.accordion-tabbed__control');\n $author.each(function () {\n var id = $(this).attr('data-id');\n $(this).attr('data-db-target-for', id);\n $(this).next().attr('data-db-target-of', id).removeAttr('style');\n });\n },\n responsive: function () {\n // rebuild loi to be in selected responsive mode\n var $loaWrapper = $('.loa-wrapper');\n $loaWrapper\n .find('.accordion-tabbed__tab-mobile')\n .removeClass('accordion-tabbed__tab-mobile')\n .addClass('accordion-tabbed__tab ')\n .find('.accordion-tabbed__control')\n .removeAttr('data-db-target-for');\n $loaWrapper\n .find('.loa-accordion')\n .contents()\n .map(function () {\n if (this.nodeType === 3) {\n //Node.TEXT_NODE\n $(this).wrap('');\n }\n if ($(this).hasClass('delimiter')) {\n $(this).addClass('hidden');\n }\n });\n $loaWrapper.find('.accordion-tabbed__content').removeAttr('data-db-target-of').hide();\n },\n extra: function () {},\n },\n get: {\n figures: function () {\n // get current doi\n loader.figure = $('article').attr('data-figures');\n },\n references: function () {\n // get current doi\n loader.references = $('article').attr('data-references');\n },\n related: function () {\n // get current doi\n loader.related = $('article').attr('data-related');\n },\n details: function () {\n // get current doi\n loader.details = $('article').attr('data-details');\n },\n },\n\n load: {\n articleTabs: function () {\n if ($(loader.figuresTab).parent('li.active').length) {\n loader.load.figures(false, true);\n }\n loader.load.references();\n loader.load.related();\n loader.load.details();\n },\n figures: function (preventSelectActiveTab = false, onLoadtab = false) {\n // set figures pane as a target and set the requested html file\n loader.load.articleTab(\n loader.figure,\n loader.figuresTab,\n loader.tabFigure,\n 'figure',\n preventSelectActiveTab,\n onLoadtab\n );\n },\n references: function () {\n // set references pane as a target and set the requested html file\n let $articleReferences = $('.article__body .article__references');\n // if the references exist on the body then copy it to ref tab else get it from server\n if ($articleReferences.length) {\n if ($('.article__body.show-references').length) {\n //copy past references\n loader.load.copyPastReferences($articleReferences);\n } else {\n //cut past references\n $articleReferences.appendTo(loader.tabReferences);\n $articleReferences.show();\n }\n $(loader.tabReferences).removeClass('empty');\n loader.$spinner.hide(); // hide spinner pane\n } else {\n loader.load.articleTab(loader.references, loader.referencesTab, loader.tabReferences, 'references');\n }\n },\n related: function () {\n // set related pane as a target and set the requested html file\n loader.load.articleTab(loader.related, loader.relatedTab, loader.tabRelated, 'related');\n loader.truncation.creativeWorkMeta();\n },\n details: function () {\n // set details pane as a target and set the requested html file\n loader.load.articleTab(loader.details, loader.detailsTab, loader.tabDetails, 'details');\n },\n copyPastReferences: function ($articleReferences) {\n let articlesRefCopy = $articleReferences.clone();\n articlesRefCopy.appendTo(loader.tabReferences);\n $articleReferences.find('[id]').each(function () {\n //to remove duplicate Ids\n this.id = this.id + '_copied';\n });\n },\n articleTab(ajaxUrl, tabSelector, paneSelector, tabName, preventSelectActiveTab = false, onLoadtab = true) {\n if (ajaxUrl === undefined) {\n // check if tab' service url has been defined\n UX.loader.selectActiveTab(tabSelector, paneSelector, preventSelectActiveTab);\n return false;\n }\n if (tab.check.empty($(tabSelector))) {\n // check if tab panes is empty\n loader.getContent(ajaxUrl, tabSelector, paneSelector, tabName, preventSelectActiveTab, onLoadtab); // get tab content\n } else {\n UX.loader.selectActiveTab(tabSelector, paneSelector, preventSelectActiveTab);\n }\n },\n },\n getContent: function (ajaxUrl, tabSelector, paneSelector, tabName, preventSelectActiveTab = false, onLoadtab) {\n // get content using ajax request\n loader.$spinner.show(); // show spinner pane\n let $tabPane = $(paneSelector);\n\n $tabPane.load(ajaxUrl, {onLoad: onLoadtab}, function (response, status, xhr) {\n if (status === 'error') {\n const msg = 'Sorry but there was an error: ';\n console.log(msg + xhr.status + ' ' + xhr.statusText);\n }\n\n $tabPane.trigger('content-loaded');\n UX.loader.selectActiveTab(tabSelector, paneSelector, preventSelectActiveTab);\n loader.attach();\n\n const loaderTarget = $(this).attr('id'),\n isFigures = loader.tabFigure.indexOf(loaderTarget) !== -1;\n if (isFigures && loader.isMobile) {\n loader.figures.accordion();\n }\n loader.getContentSuccess(tabName);\n });\n },\n getContentSuccess: function (tabName) {},\n selectActiveTab(tab, tabTarget, preventSelectActiveTab) {\n UX.loader.$spinner.hide();\n if (!preventSelectActiveTab && UX.loader.isArticleTabEmpty($(tab)) && $(tabTarget).hasClass('active')) {\n $('.details-tab').trigger('click');\n }\n },\n isArticleTabEmpty($tab) {\n return (\n tab.check.empty($tab) ||\n ($tab.hasClass('figures-tab') && $($tab.data('slide-target')).find('figure').length === 0) ||\n ($tab.hasClass('references-tab') && $($tab.data('slide-target')).find('.NoContentMessage').length)\n );\n },\n attach: function () {\n if (UX.figureViewer !== undefined) UX.figureViewer.expand();\n },\n figures: {\n figcaption: 'figcaption',\n figureTitle: '.figure__title',\n figureCaption: '.figure__caption',\n accordionClass: 'accordion',\n accordionContent: 'accordion__content',\n accordionTrigger: $('